Wikilivres frwikibooks https://fr.wikibooks.org/wiki/Accueil MediaWiki 1.46.0-wmf.26 first-letter Média Spécial Discussion Utilisateur Discussion utilisateur Wikilivres Discussion Wikilivres Fichier Discussion fichier MediaWiki Discussion MediaWiki Modèle Discussion modèle Aide Discussion aide Catégorie Discussion catégorie Transwiki Discussion Transwiki Wikijunior Discussion Wikijunior TimedText TimedText talk Module Discussion module Event Event talk Fonctionnement d'un ordinateur/L'architecture de base d'un ordinateur 0 65780 765741 765366 2026-05-01T21:51:51Z Mewtow 31375 /* Les microcontrôleurs */ 765741 wikitext text/x-wiki Dans les chapitres précédents, nous avons vu comment représenter de l'information, la traiter et la mémoriser avec des circuits. Mais un ordinateur n'est pas qu'un amoncellement de circuits et est organisé d'une manière bien précise. Il est structuré autour de trois circuits principaux : * un '''processeur''', qui manipule l'information et donne un résultat ; * une '''mémoire''' qui mémorise les données à manipuler ; * les '''entrées/sorties''', qui permettent à l'ordinateur de communiquer avec l'extérieur. [[File:Architecture Von Neumann.png|centre|vignette|upright=2|Architecture d'un système à mémoire.]] Pour faire simple, le processeur est un circuit qui s'occupe de faire des calculs. Rien d'étonnant à cela. Je rappelle que tout est codé par des nombres dans un ordinateur, ce qui fait que manipuler des nombres revient simplement à faire des calculs. Un ordinateur n'est donc qu'une grosse calculatrice améliorée, et le processeur est le composant qui fait les calculs. La mémoire s'occupe purement de la mémorisation des données, des nombres sur lesquelles faire des calculs. Pour être plus précis, il y a deux mémoires : une pour les données proprement dites, une autre pour le programme à exécuter. La première est la '''mémoire RAM''', la seconde est la '''mémoire ROM'''. Nous détaillerons ce que sont ces deux mémoires dans la suite du chapitre, mais sachez que nous avions déjà rencontré ces deux types de mémoires dans les chapitres sur les registres et les mémoires adressables. Les entrées-sorties permettent au processeur et à la mémoire de communiquer avec l'extérieur et d'échanger des informations avec des périphériques. Les '''périphériques''' regroupent, pour rappel, tout ce est branché sur un ordinateur, mais n'est pas à l'intérieur de celui-ci. Le processeur, les mémoires et les entrées-sorties communiquent ensemble via un '''réseau d'interconnexions'''. Le terme est assez barbare, mais rien de compliqué sur le principe. C'est juste un ensemble de fils électriques qui relie les différents éléments d'un ordinateur. Les interconnexions sont souvent appelées le bus de communication, mais le terme est un abus de langage, comme on le verra plus bas. Afin de simplifier les explications, on va supposer que le réseau d'interconnexion est le suivant. Tout est connecté au processeur. Il y a des interconnexions entre le processeur et la mémoire RAM, d'autres interconnexions entre processeur et mémoire ROM, et d'autres entre le processeur et les entrées-sorties. Nous verrons que d'autres réseaux d'interconnexions fusionnent certaines interconnexions, pour les partager entre la ROM et la RAM, par exemple. Mais pour le moment, gardez le schéma ci-dessous en tête. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ==Les mémoires RAM et ROM== La mémoire est le composant qui mémorise des informations, des données. Dans la majorité des cas, la mémoire est composée de plusieurs '''cases mémoire''', chacune mémorisant plusieurs bits, le nombre de bits étant identique pour toutes les cases mémoire. Dans le cas le plus simple, une case mémoire mémorise un '''octet''', un groupe de 8 bits. Mais les mémoires modernes mémorisent plusieurs octets par case mémoire : elles ont des cases mémoires de 16, 32 ou 64 bits, soit respectivement 2/4/8 octets. De rares mémoires assez anciennes utilisaient des cases mémoires contenant 1, 2, 3, 4, 5, 6 7, 13, 17, 23, 36 ou 48 bits. Mais ce n'était pas des mémoires électroniques, aussi nous allons les passer sous silence. Tout ce qu'il faut savoir est que la quasi-totalité des mémoires électronique a un ou plusieurs octets par case mémoire. Pour simplifier, vous pouvez imaginer qu'une mémoire RAM est un regroupement de registre, chacun étant une case mémoire. C'est une description pas trop mauvaise pour décrire les mémoires RAM, qu'on abordera dans ce qui suit. {|class="wikitable" |+ Contenu d'une mémoire, case mémoire de 16 bits (deux octets) |- ! Case mémoire N°1 | 0001 0110 1111 1110 |- ! Case mémoire N°2 | 1111 1110 0110 1111 |- ! Case mémoire N°3 | 0001 0000 0110 0001 |- ! Case mémoire N°4 | 1000 0110 0001 0000 |- ! Case mémoire N°5 | 1100 1010 0110 0001 |- ! ... | ... |- ! Case mémoire N°1023 | 0001 0110 0001 0110 |- ! Case mémoire N°1024 | 0001 0110 0001 0110 |} Dans ce cours, il nous arrivera de partir du principe qu'il y a un octet par case mémoire, par souci de simplification. Mais ce ne sera pas systématique. De plus, il nous arrivera d'utiliser le terme adresse pour parler en réalité de la case mémoire associée, par métonymie. ===La capacité mémoire=== Bien évidemment, une mémoire ne peut stocker qu'une quantité finie de données. Et à ce petit jeu, certaines mémoires s'en sortent mieux que d'autres et peuvent stocker beaucoup plus de données que les autres. La '''capacité''' d'une mémoire correspond à la quantité d'informations que celle-ci peut mémoriser. Plus précisément, il s'agit du nombre maximal de bits qu'une mémoire peut contenir. Elle est le produit entre le nombre de cases mémoire, et la taille en bit d'une case mémoire. Toutes les mémoires actuelles utilisant des cases mémoire d'un ou plusieurs octets, ce qui nous arrange pour compter la capacité d'une mémoire. Au lieu de compter cette capacité en bits, on préfère mesurer la capacité d'une mémoire avec le nombre d'octets qu'elle contient. Mais les mémoires des PC font plusieurs millions ou milliards d'octets. Pour se faciliter la tâche, on utilise des préfixes pour désigner les différentes capacités mémoires. Vous connaissez sûrement ces préfixes : kibioctets, mébioctets et gibioctets, notés respectivement Kio, Mio et Gio. {|class="wikitable" |- !Préfixe!!Capacité mémoire en octets!!Puissance de deux |- ||Kio||1024||2<sup>10</sup> octets |- ||Mio||1 048 576||2<sup>20</sup> octets |- ||Gio||1 073 741 824||2<sup>30</sup> octets |} On peut se demander pourquoi utiliser des puissances de 1024, et ne pas utiliser des puissances un peu plus communes ? Dans la majorité des situations, les électroniciens préfèrent manipuler des puissances de deux pour se faciliter la vie. Par convention, on utilise souvent des puissances de 1024, qui est la puissance de deux la plus proche de 1000. Or, dans le langage courant, kilo, méga et giga sont des multiples de 1000. Quand vous vous pesez sur votre balance et que celle-ci vous indique 58 kilogrammes, cela veut dire que vous pesez 58 000 grammes. De même, un kilomètre est égal à 1000 mètres, et non 1024 mètres. Autrefois, on utilisait les termes kilo, méga et giga à la place de nos kibi, mebi et gibi, par abus de langage. Mais peu de personnes sont au courant de l'existence de ces nouvelles unités, et celles-ci sont rarement utilisées. Et cette confusion permet aux fabricants de disques durs de nous « arnaquer » : Ceux-ci donnent la capacité des disques durs qu'ils vendent en kilo, méga ou giga octets : l’acheteur croit implicitement avoir une capacité exprimée en kibi, mébi ou gibi octets, et se retrouve avec un disque dur qui contient moins de mémoire que prévu. ===Lecture et écriture : mémoires ROM et RWM=== Pour simplifier grandement, on peut grossièrement classer les mémoires en deux types : les ''Read Only Memory'' et les ''Read Write Memory'', aussi appelées mémoires ROM et mémoires RWM. Pour les '''mémoires ROM''', on ne peut pas modifier leur contenu. On peut y récupérer une donnée ou une instruction : on dit qu'on y accède en lecture. Mais on ne peut pas modifier les données qu'elles contiennent. Quant aux '''mémoires RWM''', on peut y accéder en lecture (récupérer une donnée stockée en mémoire), mais aussi en écriture : on peut stocker une donnée dans la mémoire, ou modifier une donnée existante. Tout ordinateur contient au minimum une ROM et une RWM (souvent une mémoire RAM), les deux n'ont pas exactement le même rôle. Pour simplifier, la mémoire ROM mémorise le programme à exécuter, la mémoire RWM stocke des données. Il a existé des ordinateurs où la mémoire RWM était une mémoire magnétique, voire acoustique, mais ce n'est plus le cas de nos jours. Pour les ordinateurs modernes, la mémoire RWM est une mémoire électronique. Pour faire la différence avec ces anciennes mémoires RWM, elle est appelée la '''mémoire RAM'''. Il s'agit d'une mémoire qui stocke temporairement des données que le processeur doit manipuler (on dit qu'elle est volatile). Elle s'efface complètement quand on coupe l'alimentation de l'ordinateur. Il existe d'autres différences entre mémoire RWM et RAM : * la mémoire RWM peut ne pas être volatile et donc conserver les données écrites ; * la mémoire RAM possède un temps d'accès constant aux données (quelle que soit l'adresse), ce qui n'est pas garanti pour les mémoires RWM. Outre le programme à exécuter, la mémoire ROM peut mémoriser des constantes, des données qui ne changent pas. Elles ne sont jamais modifiées et gardent la même valeur quoi qu'il se passe lors de l'exécution du programme. En conséquence, elles ne sont jamais accédées en écriture durant l'exécution du programme, ce qui fait que leur place est dans une mémoire ROM. La mémoire RWM est alors destinée aux données temporaires, qui changent ou sont modifiées lors de l'exécution du programme, et qui sont donc manipulées aussi bien en lecture et en écriture. La mémoire RWM mémorise alors les variables du programme à exécuter, qui sont des données que le programme va manipuler. Pour les systèmes les plus simples, la mémoire RWM ne sert à rien de plus. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Pour donner un exemple de données stockées en ROM, on peut prendre l'exemple des anciennes consoles de jeu 8 et 16 bits. Les jeux vidéos sur ces consoles étaient placés dans des cartouches de jeu, précisément dans une mémoire ROM à l'intérieur de la cartouche de jeu. La ROM mémorisait non seulement le code du jeu, le programme du jeu vidéo, mais aussi les niveaux et les ''sprites'' et autres données graphiques. Une conséquence est que les consoles 8/16 bits n'avaient pas besoin de beaucoup de RAM, comparé aux ordinateurs de l'époque, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. À l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. ===L'adressage mémoire=== Sur une mémoire RAM ou ROM, on ne peut lire ou écrire qu'une case mémoire, qu'un registre à la fois : une lecture ou écriture ne peut lire ou modifier qu'une seule case mémoire. Techniquement, le processeur doit préciser à quel case mémoire il veut accéder à chaque lecture/écriture. Pour cela, chaque case mémoire se voit attribuer un nombre binaire unique, l''''adresse''', qui va permettre de le sélectionner et de l'identifier celle-ci parmi toutes les autres. En fait, on peut comparer une adresse à un numéro de téléphone (ou à une adresse d'appartement) : chacun de vos correspondants a un numéro de téléphone et vous savez que pour appeler telle personne, vous devez composer tel numéro. Les adresses mémoires en sont l'équivalent pour les cases mémoire. [[File:Adressage mémoire.png|centre|vignette|upright=2|Exemple : on demande à la mémoire de sélectionner la case mémoire d'adresse 1002 et on récupère son contenu (ici, 17).]] L'adresse mémoire est générée par le processeur. Le processeur peut parfaitement calculer des adresses, en extraire du programme qu'il exécute, et bien d'autres choses. Nous détaillerons d'ailleurs les mécanismes pour dans les chapitres portant sur les modes d'adressage du processeur. Mais pour le moment, nous avons juste besoin de savoir que c'est le processeur qui envoie des adresses aux mémoires RAM et ROM. Les adresses générées par le processeur sont alors envoyées à la RAM ou la ROM via une connexion dédiée, un ensemble de fils qui connecte le processeur à la mémoire : le '''bus d'adresse mémoire'''. L'adresse sélectionne une case mémoire, le processeur peut alors récupérer la donnée dedans pour une lecture, écrire une donnée pour l'écriture. Pour cela, un second ensemble de fil connecte le processeur à la RAM/ROM, mais cette fois-ci pour échanger des données. Il s'agit du '''bus de données mémoire'''. Les deux sont souvent regroupés sous le terme de '''bus mémoire'''. Un ordinateur contient toujours une RAM et une ROM, ce qui demande aux bus mémoire de s'adapter à la présence de deux mémoires. Il y a alors deux solutions, illustrées dans les deux schémas ci-dessous. Avec la première, il y a un seul bus mémoire partagé entre la RAM et la ROM, comme illustré ci-dessous. Une autre solution utilise deux bus séparés : un pour la RAM et un autre pour la ROM. Nous verrons les différences pratiques entre les deux à la fin du chapitre. Pour le moment, nous allons partir du principe qu'il y a un bus pour la mémoire ROM, et un autre bus pour la RAM. [[File:CPT-System-Architecture-gapfill1-ANS.svg|centre|vignette|upright=2|Architecture avec une ROM et une RAM.]] [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ===L'alignement mémoire : introduction=== Plus haut, nous avions dit qu'il y a une adresse par case mémoire, chaque case mémoire contenant un ou plusieurs octets. Mais les processeurs modernes partent du principe que la mémoire a un octet par adresse, pas plus. Et ce même si la mémoire reliée au processeur utilise des cases mémoires de 2, 3, 4 octets ou plus. D'ailleurs, la majorité des mémoires RAM actuelle a des cases mémoires de 64 bits, soit 8 octets par case mémoire. Les raisons à cela sont multiple, mais nous les verrons en détail dans le chapitre sur l'alignement mémoire. Toujours est-il qu'il faut distinguer les '''adresses mémoire''' et les '''adresses d'octet''' gérées par le processeur. Le processeur génère des adresses d'octet, qui permettent de sélectionner un octet bien précis. L'adresse d'octet permet de sélectionner un octet parmi tous les autres. Mais la mémoire ne comprend pas directement cette adresse d'octet. Heureusement, l'octet en question est dans une case mémoire bien précise, qui a elle-même une adresse mémoire bien précise. L'adresse d'octet est alors convertie en une adresse mémoire, qui sélectionne la case mémoire adéquate, celle qui contient l'octet voulu. La case mémoire entière est lue, puis le processeur ne récupère que les données adéquates. Pour cela, des circuits d'alignement mémoire se chargent de faire la conversion entre adresses du processeur et adresse mémoire. Nous verrons cela dans le détail dans le chapitre sur l'alignement mémoire. Il existe des mémoires qui n'utilisent pas d'adresses mémoire, mais passons : ce sera pour la suite du cours. ==Le processeur== Dans les ordinateurs, l'unité de traitement porte le nom de '''processeur''', ou encore de '''''Central Processing Unit''''', abrévié en CPU. Le rôle principal du processeur est de faire des calculs. La plupart des processeurs actuels supportent au minimum l'addition, la soustraction et la multiplication. Quelques processeurs ne gèrent pas la division, qui est une opération très gourmande en circuit, peu utilisée, très lente. Il arrive que des processeurs très peu performants ne gèrent pas la multiplication, mais c'est assez rare. Un processeur ne fait pas que des calculs. Tout processeur est conçu pour effectuer un nombre limité d'opérations bien précises, comme des calculs, des échanges de données avec la mémoire, etc. Ces opérations sont appelées des '''instructions'''. Les plus intuitives sont les '''instructions arithmétiques''', qui font des calculs, comme l'addition, la soustraction, la multiplication, la division. Mais il y a aussi des '''instructions d'accès mémoire''', qui échangent des données entre la mémoire RAM et le processeur. Les autres instructions ne sont pas très intuitives, aussi passons-les sous silence pour le moment, tout deviendra plus clair dans les chapitres sur le processeur. ===Le processeur exécute un programme, une suite d'instructions=== Tout processeur est conçu pour exécuter une suite d'instructions dans l'ordre demandé, cette suite s'appelant un '''programme'''. Ce que fait le processeur est défini par la suite d'instructions qu'il exécute, par le programme qu'on lui demande de faire. Les instructions sont exécutées dans un ordre bien précis, les unes après les autres. L'ordre en question est décidé par le programmeur. La totalité des logiciels présents sur un ordinateur sont des programmes comme les autres. Le programme à exécuter est stockée dans la mémoire de l'ordinateur. C'est ainsi que l'ordinateur est rendu programmable : modifier le contenu de la mémoire permet de changer le programme exécuté. Mine de rien, cette idée de stocker le programme en mémoire est ce qui a fait que l’informatique est ce qu'elle est aujourd’hui. C'est la définition même d'ordinateur : appareil programmable qui stocke son programme dans une mémoire modifiable. Une instruction est codée comme les données : sous la forme de suites de bits. Telle suite de bit indique qu'il faut faire une addition, telle autre demande de faire une soustraction, etc. Pour simplifier, nous allons supposer qu'il y a une instruction par adresse mémoire. Sur la grosse majorité des ordinateurs, les instructions sont placées les unes à la suite des autres dans l'ordre où elles doivent être exécutées. Un programme informatique n'est donc qu'une vulgaire suite d'instructions stockée quelque part dans la mémoire de l'ordinateur. {|class="wikitable" |+ Exemple de programme informatique |- ! Adresse ! Instruction |- ! 0 | Copier le contenu de l'adresse 0F05 dans le registre numéro 5 |- ! 1 | Charger le contenu de l'adresse 0555 dans le registre numéro 4 |- ! 2 | Additionner ces deux nombres |- ! 3 | Charger le contenu de l'adresse 0555 |- ! 4 | Faire en XOR avec le résultat antérieur |- ! ... | ... |- ! 5464 | Instruction d'arrêt |} Pour exécuter une suite d'instructions dans le bon ordre, le processeur détermine à chaque cycle quelle est la prochaine instruction à exécuter. Pour cela, le processeur mémorise l'adresse de l'instruction en cours dans un registre : le '''Program Counter'''. Je rappelle que des instructions consécutives sont dans des adresses consécutives. Pour passer à la prochaine instruction, il suffit donc d'incrémenter le ''program counter''. : Si une instruction prend plusieurs octets, plusieurs adresses, il suffit de l'incrémenter du nombre d'octets/adresses. D'autres processeurs font autrement : chaque instruction précise l'adresse de la suivante, directement dans la suite de bit représentant l'instruction en mémoire. Ces processeurs n'ont pas besoin de calculer une adresse qui leur est fournie sur un plateau d'argent. Sur des processeurs aussi bizarres, pas besoin de stocker les instructions en mémoire dans l'ordre dans lesquelles elles sont censées être exécutées. Mais ces processeurs sont très très rares et peuvent être considérés comme des exceptions à la règle. Nous venons de voir qu'un processeur contient un registre appelé le ''program counter''. Mais il n'est pas le seul. Pour pouvoir fonctionner, tout processeur doit mémoriser un certain nombre d’informations nécessaires à son fonctionnement, qui sont mémorisées dans des '''registres de contrôle'''. La plupart ont des noms assez barbares (registre d'état, ''program counter'') et nous ne pouvons pas en parler à ce moment du cours. Nous les verrons en temps voulu, mais il est important de préciser qu'ils existent. ===L'intérieur d'un processeur=== Fort de ce que nous savons, nous pouvons expliquer ce qu'il y a à l'intérieur d'un processeur. Le premier point est qu'un processeur fait des calculs, ce qui implique qu'il contient des circuits de calcul. Ils sont regroupés dans une ou plusieurs '''unités de calcul'''. Nous avons déjà vu comment fabriquer une unité de calcul simple, dans un chapitre dédié, et c'est la même qui est présente dans un processeur. Du moins dans les grandes lignes, les circuits des processeurs modernes étant particulièrement optimisés. Il en est de même pour les autres circuits de calcul comme ceux pour les multiplications/division/autres. Si le processeur fait des calculs, qu'en est-il des opérandes ? Et où sont mémorisés les résultats des opérations ? Pour cela, le processeur incorpore des '''registres généraux'''. Les registres généraux servent à mémoriser les opérandes et résultats des instructions. Ils mémorisent des données, contrairement aux registres de contrôle mentionnés plus haut. Le nombre de registres généraux dépend grandement du processeur. Les tout premiers processeurs se débrouillaient avec un seul registre, mais les processeurs actuels utilisent plusieurs registres, pour mémoriser plusieurs opérandes/résultats. Mais la présence de registres est source de pas mal de petites complications. Par exemple, il faut échanger les données entre la RAM et les registres, il faut gérer l'adressage des registres, etc. Il s'agit là de détails que nous expliquerons dans les chapitres sur le processeur. Le processeur contient enfin un circuit pour interpréter les instructions, appelé l''''unité de contrôle'''. Elle lit les instructions depuis la mémoire, interprète la suite de bit associée, et commande le reste du processeur pour qu'il exécute l'instruction. Ses fonctions sont assez variées, mais nous allons simplifier en disant qu'elle configure l'unité de calcul et les registres pour faire le bon calcul. Son rôle est d'analyser la suite de bit qui constitue l'instruction, et d'en déduire quelle opération effectuer. Elle gère aussi l'accès à la mémoire RAM, et notamment ce qui est envoyé sur son bus d'adresse. : Dans ce qui suit, on suppose que le ''program counter'' fait partie de l'unité de contrôle. Pour résumer, un processeur contient une unité de calcul, des registres et une interface avec la mémoire RAM. Le tout est interconnecté, afin de pouvoir échanger des données. L’ensemble forme le '''chemin de données''', nom qui trahit le fait que c'est là que les données se déplacent et sont traitées. Il faut aussi ajouter l'unité de contrôle pour commander le tout. Elle lit les instructions en mémoire, puis commande le chemin de données pour que l'instruction soit exécutée correctement. [[File:Microarchitecture d'un processeur.png|centre|vignette|upright=2|Microarchitecture d'un processeur]] Un processeur parait donc assez simple expliqué comme ça, mais il y a de nombreuses subtilités. L'une d'entre elle est liée aux registres, et notamment à la manière dont on les utilise. Pour expliquer ces subtilités, nous allons voir comment les premiers processeurs fonctionnaient, avant de passer aux processeurs un peu plus modernes. Les tout premiers processeurs n'utilisaient qu'un seul registre, ce qui fait que l'utilisation des registres était très simple. Le passage à plusieurs registres a complexifié le tout. ===D'où viennent les adresses ?=== Il est maintenant temps de répondre à une question qui s'était posée dans la section sur l'adressage : d'où viennent les adresses envoyées à la mémoire ? Pour ce qui est des adresses des instructions, on connait déjà la réponse : c'est le ''program counter'' qui gère tout. Mais pour les données, il y a deux possibilités, qui correspondent à deux types de données : les données statiques et les données dynamiques. Les '''données statiques''' sont les plus simples : elles existent durant toute la durée de vie du programme. Tant que celui-ci s'exécute, il aura besoin de ces données. En conséquence, il leur réserve une place en mémoire, qui est toujours la même. La donnée se situe donc à une adresse bien précise, qui ne change jamais. Attention cependant : les données peuvent être modifiées, changer de valeur. Le programme écrit dans les donnée statiques, c'est même assez fréquent. Ce sont ne sont pas forcément des données constantes ! Pour les données statiques, elles sont toujours placées à la même adresse mémoire. Pour le dire autrement, l'adresse mémoire est une constante, qui ne change pas. L'adresse est connue avant d’exécuter le programme, le programme a été codé pour utiliser cette adresse pour telle donnée, on a réservé une adresse pour la donnée voulue. Et même si vous quittez le programme et vous le relancez plusieurs jours après, l'adresse mémoire sera la même avant et après. Et cela permet d'utiliser l''''adressage direct'''. L'idée est que les instructions précisent donc l'adresse à lire ou écrire. Pour cela, l'adresse est intégrée dans l’instruction elle-même. Pour rappel, l'instruction est codée par une suite de bit en mémoire RAM/ROM, dont certains précisent l'opération à faire, les autres servant à autre chose. L'idée est que certains bits précisent l'adresse mémoire de la donnée à lire. Les instructions sont donc du genre : * ''LOAD 56'' - lit l'adresse numéro 56 et copie son contenu dans un registre; * ''STORE R5 , adress 99'', copie le registre R5 dans l'adresse 99 ; * ''ADD R5 , adress 209'' : additionne le registre R5 avec le contenu de l'adresse 209. S'il existe des données statiques, c'est signe qu'il existe des '''données dynamiques'''. Ces dernières sont des données qui sont créées ou détruites selon les besoins. Pour comprendre d'où viennent ces données dynamiques, prenons le cas d'une personne qui écrit du texte sur un ordinateur. Le texte qu'il écrit est mémorisé dans la RAM de l’ordinateur, puis est sauvegardé sur le disque dur quand il sauvegarde son document. Au fur et à mesure qu'il écrit du texte, la RAM utilisée par ce texte augmente. Donc, ce texte est une donnée dynamique, dont la taille varie dans le temps. Pour gérer des données dynamiques, la plupart des systèmes d'exploitation incorporent des fonctionnalités d''''allocation mémoire'''. Derrière ce nom barbare, se cache quelque chose de simple : les programmes peuvent réclamer de la mémoire au système d'exploitation, pour y placer les données qu'ils souhaitent. Les langages de programmation bas niveau supportent des fonctions comme malloc(), qui permettent de demander un bloc de mémoire de N octets à l'OS, qui doit alors accommoder la demande. De même, un programme peut libérer de la mémoire qu'il n'utilise plus avec des fonctions comme free(). Avec l'allocation mémoire, les données n'ont pas de place fixe en mémoire. Leur adresse mémoire peut varier d'une exécution du programme à l'autre. Pire que ça : les données peuvent être déplacées dans la mémoire RAM, si besoin. En clair : l'adresse est déterminée lors de l'exécution du programme. L'adresse est alors soit calculée, soit lue depuis la mémoire RAM, soit déterminée autrement. Toujours est-il qu'elle se retrouve dans un registre général. Pour gérer ces adresse variables, les processeurs utilisent l''''adressage indirect'''. L'adressage indirect permet d'utiliser une adresse qui est dans un registre de données. L'adresse en question peut être envoyée à la mémoire RAM sans problème, le processeur peut automatiquement connecter le registre adéquat sur le bus d'adresse. Au tout début de l'informatique, les processeurs ne supportaient que l'adressage direct, pas plus. L'adressage indirect n'était tout simplement pas possible. Avec l'adressage direct, l'adresse à lire est extraite directement des instructions, par l'unité de contrôle. Le bus d'adresse de la RAM est alors relié directement à l'unité de contrôle, le bus de données est relié aux registres. [[File:Architecture Harvard avec adressage direct uniquement.png|centre|vignette|upright=2|Architecture Harvard avec adressage direct uniquement]] Mais dès les années 70, l'adressage indirect est apparu, rendant la programmation bien plus simple. Mais cela a demandé quelques adaptation au niveau du processeur. Avec l'adressage indirect, le bus d'adresse est connecté aux registres. Il a donc fallu rajouter un multiplexeur pour que le processeur décide de relier le bus d'adresse soit aux registres, soit à l'unité de contrôle. ===Un ordinateur peut avoir plusieurs processeurs=== La plupart des ordinateurs n'ont qu'un seul processeur, ce qui fait qu'on désigne avec le terme d''''ordinateurs mono-processeur'''. Mais il a existé (et existe encore) des '''ordinateurs multi-processeurs''', avec plusieurs processeurs sur la même carte mère. L'idée était de gagner en performance : deux processeurs permettent de faire deux fois plus de calcul qu'un seul, quatre permettent d'en faire quatre fois plus, etc. C'est très courant sur les supercalculateurs, des ordinateurs très puissants conçus pour du calcul industriel ou scientifique, mais aussi sur les serveurs ! Dans le cas le plus courant, ils utilisent plusieurs processeurs identiques : on utilise deux processeurs Core i3 de même modèle, ou quatre Pentium 3, etc. Pour utiliser plusieurs processeurs, les programmes doivent être adaptés. Pour cela, il y a plusieurs possibilités : * Une première possibilité, assez intuitive, est d’exécuter des programmes différents sur des processeurs différents. Par exemple, on exécute le navigateur web sur un processeur, le lecteur vidéo sur un autre, etc. * La seconde option est de créer des programmes spéciaux, qui utilisent plusieurs processeurs. Ils répartissent les calculs à faire sur les différents processeurs. Un exemple est la lecture d'une vidéo sur le web : un processeur peut télécharger la vidéo pendant le visionnage et bufferiser celle-ci, un autre processeur peut décoder la vidéo, un autre décoder l'audio. De tels programmes restent des suites d'instructions, mais ils sont plus complexes que les programmes normaux, aussi nous les passons sous silence. * La troisième option est d’exécuter le même programme sur les différents processeurs, mais chaque processeur traite son propre ensemble de données. Par exemple, pour un programme de rendu 3D, quatre processeurs peuvent s'occuper chacun d'une portion de l'image. [[File:Architecture de Von Neumann Princeton multi processeurs.svg|centre|vignette|upright=2|Architecture de Von Neumann Princeton multi processeurs]] De nos jours, les ordinateurs grand public les plus utilisés sont dans un cas intermédiaire, ils ne sont ni mono-, ni multi-processeur. Ils n'ont qu'un seul processeur, dans le sens où si on ouvre l'ordinateur et qu'on regarde la carte mère, il n'y a qu'un seul processeur. Mais ce processeur est en réalité assez similaire à un regroupement de plusieurs processeurs dans le même boitier. Il s'agit de '''processeurs multicœurs''', qui contiennent plusieurs cœurs, chaque cœur pouvant exécuter un programme tout seul. La différence entre cœur et processeur est assez difficile à saisir, mais pour simplifier : un cœur est l'ensemble des circuits nécessaires pour exécuter un programme. Chaque cœur dispose de toute la machinerie électronique pour exécuter un programme, à savoir des circuits aux noms barbares comme : un séquenceur d'instruction, des registres, une unité de calcul. Par contre, certains circuits d'un processeur ne sont présents qu'en un seul exemplaire dans un processeur multicœur, comme les circuits de communication avec la mémoire ou les circuits d’interfaçage avec la carte mère. Suivant le nombre de cœurs présents dans notre processeur, celui-ci sera appelé un processeur double-cœur (deux cœurs), quadruple-cœur (4 cœurs), octuple-cœur (8 cœurs), etc. Un processeur double-cœur est équivalent à avoir deux processeurs dans l'ordinateur, un processeur quadruple-cœur est équivalent à avoir quatre processeurs dans l'ordinateur, etc. Ces processeurs sont devenus la norme dans les ordinateurs grand public et les logiciels et systèmes d'exploitation se sont adaptés. ===Les coprocesseurs=== Quelques ordinateurs assez anciens disposaient de '''coprocesseurs''', des processeurs qui complémentaient un processeur principal. Les ordinateurs de ce type avaient un processeur principal, le '''CPU''', qui était secondé par un ou plusieurs coprocesseurs. Sauf exception, le CPU et le coprocesseur exécutent des programmes différents, ils travaillent en parallèle. Les coprocesseurs les plus connus sont les '''coprocesseurs pour le rendu 2D/3D'''. Ils ont eu leur heure de gloire sur les anciennes consoles de jeux vidéo, comme Super Nintendo, la Playstation et autres consoles de cette génération ou antérieure. Ils s'occupaient respectivement de calculer les graphismes des jeux vidéos. De nos jours, ils ont été remplacés par des cartes graphiques, ou des ''Graphic Processing Units'', qui ne sont pas considérées comme des coprocesseurs. Les '''coprocesseurs sonores''' sont une sorte d'ancêtre des cartes son, utilisés sur les anciennes consoles de jeux vidéo, comme La Nintendo 64, la Playstation et autres consoles antérieures. Ils s'occupaient respectivement de calculer tout ce qui a trait au son. Pour donner un exemple, on peut citer la console Neo-géo, qui disposait de deux processeurs travaillant en parallèle : un processeur principal, et un coprocesseur sonore. Le processeur principal était un Motorola 68000, alors que le coprocesseur sonore était un processeur Z80. L'accès aux périphériques est quelque chose sur lequel nous passerons plusieurs chapitres dans ce cours. Mais sachez que l'accès aux périphériques peut demander pas mal de puissance de calculs. Le CPU principal peut faire ce genre de calculs par lui-même, mais il n'est pas rare qu'un '''coprocesseur d'IO''' soit dédié à l'accès aux périphériques. Un exemple assez récent est celui de la console de jeu Nintendo 3DS. Elle disposait d'un processeur principal de type ARM9, d'un coprocesseur pour les divisions qu'on abordera plus bas, et d'un second processeur ARM7. L'ARM 7 était utilisé comme coprocesseur d'I/O, ainsi que pour l'émulation de la console GBA. [[File:Asmp 2.gif|centre|vignette|upright=2|Co-processeur pour l'accès aux entrées-sorties.]] Les '''coprocesseurs arithmétiques''' sont un peu à part des autres. Ils sont spécialisés dans les calculs en virgule flottante. Ils étaient utilisés à une époque où les CPU ne géraient que des calculs entiers (en binaire ou en BCD). Un exemple est le coprocesseur flottant x87, complémentaire des premiers processeurs Intel x86. Il y a eu la même chose sur les processeurs Motorola 68000, avec deux coprocesseurs flottants appelés les Motorola 68881 et les Motorola 68882. Un exemple récent de coprocesseur est celui utilisé sur la console de jeu Nintendo DS. La console utilisait deux processeurs, un ARM9 et un ARM7, qui ne pouvaient pas faire de division entière. Il s'agit pourtant d'opérations importantes dans le cas du rendu 3D, ce qui fait que les concepteurs de la console ont rajouté un coprocesseur spécialisé dans les divisions entières et les racines carrées. Le coprocesseur était adressable directement par le processeur, comme peuvent l'être la RAM ou les périphériques. ==Les entrées-sorties== Tous les circuits vus précédemment traitent des données codées en binaire. Ceci dit, les données ne sortent pas de n'importe où : l'ordinateur contient des composants électroniques qui traduisent des informations venant de l’extérieur en nombres. Ces composants sont ce qu'on appelle des '''entrées'''. Par exemple, le clavier est une entrée : l'électronique du clavier attribue un nombre entier (''scancode'') à une touche, nombre qui sera communiqué à l’ordinateur lors de l'appui d'une touche. Pareil pour la souris : quand vous bougez la souris, celle-ci envoie des informations sur la position ou le mouvement du curseur, informations qui sont codées sous la forme de nombres. La carte son évoquée il y a quelques chapitres est bien sûr une entrée : elle est capable d'enregistrer un son, et de le restituer sous la forme de nombres. S’il y a des entrées, on trouve aussi des '''sorties''', des composants électroniques qui transforment des nombres présents dans l'ordinateur en quelque chose d'utile. Ces sorties effectuent la traduction inverse de celle faite par les entrées : si les entrées convertissent une information en nombre, les sorties font l'inverse : là où les entrées encodent, les sorties décodent. Par exemple, un écran LCD est un circuit de sortie : il reçoit des informations, et les transforme en image affichée à l'écran. Même chose pour une imprimante : elle reçoit des documents texte encodés sous forme de nombres, et permet de les imprimer sur du papier. Et la carte son est aussi une sortie, vu qu'elle transforme les sons d'un fichier audio en tensions destinées à un haut-parleur : c'est à la fois une entrée, et une sortie. Les '''entrées-sorties''' incluent toutes les entrées et sorties, et même certains composants qui sont les deux à la fois. Il s'agit d'un terme générique, qui regroupe des composants forts différents. Dans ce qui va suivre, nous allons parfois parler de périphériques au lieu d'entrées-sorties, mais les deux termes ne sont pas équivalents. Dans le détail, les entrées-sorties regroupent : * Les '''périphériques''' sont les composants connectés sur l'unité centrale. Exemple : les claviers, souris, webcam, imprimantes, écrans, clés USB, disques durs externes, la Box internet, etc. * Les '''cartes d'extension''', qui se connectent sur la carte mère via un connecteur, comme les cartes son ou les cartes graphiques. * D'autres composants sont soudés à la carte mère mais sont techniquement des entrées-sorties : les cartes sons soudées sur les cartes mères actuelles, par exemple. ===L'interface avec le reste de l'ordinateur=== Les entrées-sorties sont très diverses, fonctionnent très différemment les unes des autres. Mais du point de vue du reste de l'ordinateur, les choses sont relativement standardisées. Du point de vue du processeur, les entrées-sorties sont juste des paquets de registres ! Tous les périphériques, toutes les entrées-sorties contiennent des '''registres d’interfaçage''', qui permettent de faire l'intermédiaire entre l'entrée/sortie et le reste de l'ordinateur. L'entrée/sortie est conçu pour réagir automatiquement quand on écrit dans ces registres. [[File:Registres d'interfaçage.png|centre|vignette|upright=2|Registres d'interfaçage.]] Les registres d’interfaçage sont assez variés. Les plus évidents sont les '''registres de données''', qui permettent l'échange de données entre le processeur et les périphériques. Pour échanger des données avec l'entrée/sortie, le processeur a juste à lire ou écrire dans ces registres de données. On trouve généralement un registre de lecture et un registre d'écriture, mais il se peut que les deux soient fusionnés en un seul registre d’interfaçage de données. Si le processeur veut envoyer une donnée à une entrée/sortie, il a juste à écrire dans ces registres. Inversement, s'il veut lire une donnée, il a juste à lire le registre adéquat. Mais le processeur ne fait pas que transmettre des données à l'entrée/sortie. Le processeur lui envoie aussi des « commandes », des valeurs numériques auxquelles l'entrée/sortie répond en effectuant un ensemble d'actions préprogrammées. En clair, ce sont l'équivalent des instructions du processeur, mais pour l'entrée/sortie. Par exemple, les commandes envoyées à une carte graphique peuvent être : affiche l'image présente à cette adresse mémoire, calcule le rendu 3D à partir des données présentes dans ta mémoire, etc. Pour recevoir les commandes, l'entrée/sortie contient des ''registres de commande'' qui mémorisent les commandes envoyées par le processeur. Quand le processeur veut envoyer une commande à l'entrée/sortie, il écrit la commande en question dans ce ou ces registres. Enfin, beaucoup d'entrée/sortie ont un ''registre d'état'', lisible par le processeur, qui contient des informations sur l'état de l'entrée/sortie. Ils servent notamment à indiquer au processeur que l'entrée/sortie est disponible, qu'il est en train d’exécuter une commande, qu'il est occupé, qu'il y a un problème, qu'il y a une erreur de configuration, etc. ===Les adresses des registres d’interfaçage=== Les registres des périphériques sont identifiés par des adresses mémoires. Et les adresses sont conçues de façon à ce que les adresses des différentes entrées/sorties ne se marchent pas sur les pieds. Chaque entrée/sortie, chaque registre, chaque contrôleur a sa propre adresse. D'ordinaire, certains bits de l'adresse indiquent quel est le destinataire. Certains indiquent quel est l'entrée/sortie voulue, les restants indiquant le registre de destination. Il existe deux organisations possibles pour les adresses des registres d’interfaçages. La première possibilité est de séparer les adresses pour les registres d’interfaçage et les adresses pour la mémoire. Le processeur doit avoir des instructions séparées pour gérer les périphériques et adresser la mémoire. Il a des instructions de lecture/écriture pour lire/écrire en mémoire, et d'autres pour lire/écrire les registres d’interfaçage. Sans cela, le processeur ne saurait pas si une adresse est destinée à un périphérique ou à la mémoire. [[File:Espaces d'adressages séparés entre mémoire et périphérique.png|centre|vignette|upright=2.5|Espaces d'adressages séparés entre mémoire et périphérique]] L'autre méthode mélange les adresses mémoire et des entrées-sorties. Si on prend par exemple un processeur de 16 bits, où les adresses font 16 bits, alors les 65536 adresses possibles seront découpées en deux portions : une partie ira adresser la RAM/ROM, l'autre les périphériques. On parle alors d''''entrées-sorties mappées en mémoire'''. L'avantage est que le processeur n'a pas besoin d'avoir des instructions séparées pour les deux. [[File:IO mappées en mémoire.png|centre|vignette|upright=2.0|IO mappées en mémoire]] Pour résumer, communiquer avec une entrée/sortie est similaire à ce qu'on a avec les mémoires. Il suffit de lire ou écrire dans des registres d’interfaçage, qui ont chacun une adresse mémoire. Le problème est que le système d'exploitation ne connaît pas toujours le fonctionnement d'une entrée/sortie : il faut installer un programme qui va s'exécuter quand on souhaite communiquer avec l'entrée/sortie, et qui s'occupera de tout ce qui est nécessaire pour le transfert des données, l'adressage du périphérique, etc. Ce petit programme est appelé un driver ou '''pilote de périphérique'''. La « programmation » périphérique est très simple : il suffit de savoir quoi mettre dans les registres, et c'est le pilote qui s'en charge. ==Les architectures Harvard et Von Neumann== Après avoir vu le processeur, les mémoires et les entrées-sorties, voyons voir comment le tout est interconnecté. Tous les ordinateurs ne sont pas organisés de la même manière, pour ce qui est de leurs bus. Mais pour comprendre pourquoi, nous devons regarder qui communique avec qui, dans un ordinateur. Pour rappel, les données sont placées en mémoire RAM, alors que les instructions sont placées en mémoire ROM. Le processeur lit des instructions dans la mémoire ROM, il lit et écrit dans la mémoire RAM, et accède aux registres d’interfaçage des entrées-sorties. Il y a donc besoins de trois interconnexions : CPU-ROM, CPU-RAM et CPU-IO. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] Il parait intéressant d'utiliser trois interconnexions, au minimum CPU-ROM, CPU-RAM et CPU-IO. Néanmoins, faire ainsi a de nombreux désavantages. Déjà, il faut pouvoir brancher tout ça sur le processeur. Et celui-ci n'a pas forcément assez de broches pour. Aussi, il est parfois préférable de mutualiser des bus, à savoir de connecter plusieurs composants sur un même bus. Par exemple, on peut mutualiser le bus pour la mémoire RAM et pour la mémoire ROM. Il faut dire que les deux bus sont des bus mémoire, avec un bus d'adresse, un bus de données, et surtout : des bus de commande similaires. Les mutualiser est alors très simple, et permet d'économiser pas mal de broches. [[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre et une architecture Harvard]] Cette mutualisation nous amène naturellement à parler de la distinction entre les architectures Harvard d'un côté et les architectures Von Neumann de l'autre. Elle est très liée au fait d'utiliser soit un bus mémoire unique, soit des bus séparés pour la ROM et la RAM. Voyons cela en détail. ===Les architectures Harvard et Von Neumann : des bus séparés ou unifiés=== Avec l''''architecture Harvard''', la mémoire ROM et la mémoire RAM sont reliées au processeur par deux bus séparés. Il y a un bus RAM pour la mémoire RAM, un bus ROM pour la mémoire ROM. L'avantage de cette architecture est qu'elle permet de charger une instruction et une donnée simultanément : une instruction chargée sur le bus relié à la mémoire programme, et une donnée chargée sur le bus relié à la mémoire de données. Et cela simplifie fortement la conception du processeur. [[File:Harvard Architecture.png|centre|vignette|upright=2|Architecture Harvard, avec une ROM et une RAM séparées.]] Avec l''''architecture Von Neumann''', mémoire ROM et mémoire RAM sont reliées au processeur par un bus unique. Le bus unique qui relie processeur, RAM et ROM, s'appelle le '''bus mémoire'''. Un défaut de ces architecture est qu'elles ne peuvent pas charger une instruction et une donnée en même temps. Et cela pose quelques problèmes pour la conception du processeur. Par contre, nous verrons dans ce qui suit qu'utiliser un bus mémoire partagé est bien plus flexible et permet des choses que les architectures Harvard ne peuvent pas faire. [[File:Architecture Von Neumann, avec deux bus séparés.png|centre|vignette|upright=2|Architecture Von Neumann, avec deux bus séparés.]] ===Les architectures Harvard et Von Neumann : des espaces d'adressage séparés ou unifiés=== La distinction précédente se base sur les connexions entre RAM, ROM et processeur. Mais il existe une autre distinction, très liée, qui est souvent utilisée comme seconde définition des architectures Harvard/Von Neumann. Elle est liée aux adresses mémoire que le processeur peut gérer. Prenons un processeur 16 bits, par exemple, qui gère naturellement des adresses de 16 bits. Il peut gérer 2^16 adresses, soit 64 kibioctets de mémoire. L'ensemble de ces adresses est appelé un '''espace d'adressage'''. Mais comment cet espace d'adressage est utilisé pour adresser une RAM et une ROM ? Sur les architectures Harvard, le processeur voit deux mémoires séparées avec leur lot d'adresses distinctes. Une même adresse peut donc correspondre soit à la mémoire ROM, soit à la mémoire RAM, suivant le bus utilisé. L'espace d'adressage est donc doublé, dupliqué, avec un pour la ROM, un autre pour la RAM. Rien d'étonnant à cela : il y a deux bus d'adresses, chacun correspondant à un espace d'adressage. [[File:Vision de la mémoire par un processeur sur une architecture Harvard.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Harvard.]] Avec l'architecture Von Neumann, la RAM et la ROM doivent se partager les adresses mémoires disponibles. Il n'y a qu'un seul espace d'adressage qui est coupé en deux, avec une partie pour la ROM et une autre pour la RAM. Une adresse correspond soit à la mémoire RAM, soit à la mémoire ROM, mais pas aux deux. Typiquement, la mémoire ROM occupe une partie des adresses, la mémoire RAM utilise le reste. La répartition des adresses est réalisée par les circuits de décodage d'adresse mentionnés plus haut. [[File:Vision de la mémoire par un processeur sur une architecture Von Neumann.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Von Neumann.]] Les '''architectures Harvard modifiées''' sont des intermédiaires entre architectures Harvard et architectures Von Neumann, bien qu'elles penchent bien plus du côté des architectures Harvard. Précisons que la terminologie n'est pas claire, beaucoup d'auteurs mettent des définitions différentes derrière ces deux termes. Mais dans ce cours, nous utiliserons une définition très stricte de ce qu'est une architecture Harvard modifiée. Une architecture Harvard modifiée est une architecture Harvard, où le processeur peut lire des données constantes depuis la mémoire ROM. Nous avions vu plus haut que les mémoires ROM peuvent mémoriser, en plus d'un programme exécutable, des données constantes, qui ne varient pas. Les architectures Harvard pures ne permettent pas de lire des données de ce genre depuis la mémoire ROM, alors que les architectures Harvard modifiées le permettent. Une architecture Harvard modifiée dispose d'une instruction pour lire les données en mémoire RWM, et d'une instruction pour lire des données en mémoire ROM. Il y a donc deux versions de l'instruction LOAD, qui copient la donnée dans un registre général, mais dont la source de la donnée est différente. Une autre possibilité, plus rare, est que une instruction de copie, qui copie une constante depuis la mémoire ROM vers la mémoire RAM. Le cas le plus commun est l'utilisation de deux instructions LOAD séparées. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Ceci étant dit, revenons à la distinction entre architecture Harvard et Von Neumann. Il faut noter que la RAM et la ROM n'ont pas forcément la même taille. Et ce que ce soit sur une architecture Harvard que sur une architecture Von Neumann, mais c'est plus facile à expliquer sur une architecture Harvard. On peut par exemple imaginer une architecture Harvard qui utilise des adresses de 16 bits pour la ROM, et seulement 8 bits pour la RAM. Le résultat est qu'il peut adresser 64 kibioctets de ROM, mais seulement 256 octets de RAM. Les deux bus d'adresse sont alors de taille différente, l'un faisant 8 bits, l'autre 16. Quelques processeurs 8 bits étaient dans ce cas, comme on le verra dans le chapitre sur les CPU 8bits. Mais d'autres processeurs utilisent des valeurs différentes, avec par exemple des adresses de 16 bits pour la RAM, mais de 20 bits pour la ROM, ou inversement. Sur une architecture Von Neumann, tout dépend de comment les adresses sont réparties. La solution la plus simple découpe l'espace d'adressage en deux parties égales, avec la RAM qui est dans la moitié basse (qui part de l'adresse 0 jusqu'à l'adresse au milieu), alors que la ROM est dans la moitié haute (entre l'adresse du milieu et l'adresse maximale). Mais ce n'est pas la seule possibilité, la limite entre RAM et ROM peut être mise n'importe où. Prenons par exemple un processeur 32 bits, capable de gérer 4 milliards d'adresse. Il est parfaitement possible de réserver 128 mébioctets de poids fort à la mémoire ROM, et de laisser le reste à la mémoire RAM. ===Le décodage d'adresse sur les architectures Von Neumann=== Pour résumer, les architectures Harvard et Von Neumann se distinguent sur deux points : * L'accès à la RAM et à la ROM se font par des bus séparés sur l'architecture Harvard, sur le même bus avec l'architecture Von Neumann. * Les adresses pour la mémoire ROM et la mémoire RAM sont séparées sur les architectures Harvard, partagées sur l’architecture Von Neumann. Les architectures Von Neumann utilisent donc un seul bus pour connecter la RAM et la ROM au processeur. Mais cela ne parait pas intuitif : comment deux composants peuvent se connecter aux mêmes fils ? Parce que c'est ce qu'implique le fait de partager un bus. Si je prends une mémoire RAM et une mémoire ROM, toutes deux de 8 bits, elles seront connectées à un bus mémoire de 8 bits. Intuitivement, on se dit qu'il y aura des conflits, du genre : la RAM et la ROM vont accéder au bus en même temps, comment savoir si une adresse est destinée à la RAM ou la ROM, etc ? Tous ces problèmes sont résolus avec une solution très simple : à chaque instant, seule une mémoire est connectée au bus. L'idée est que les mémoires sont connectées ou déconnectées du bus selon les besoins. Si le processeur veut envoyer lire une donnée en mémoire RAM, il déconnecte la mémoire ROM du bus. Et inversement, s'il veut lire une instruction, il déconnecte la RAM et connecte la ROM. Pour cela, les mémoires RAM et ROM possèdent une entrée ''Chip Select'' ou ''Output Enable'', qui agit comme une sorte de bouton ON/OFF. Lorsqu'on met un 1 sur cette entrée, la mémoire se connectera au bus. Ses entrées et sorties fonctionneront normalement, elle pourra recevoir des adresses, envoyer ou recevoir des données, tout sera normal. Par contre, si on met un 0 sur cette entrée, la mémoire se "désactive", ses entrée-sorties ne répondent plus aux sollicitations extérieures. Pire que ça : elles sont électriquement déconnectées. Au total, tout cela demande de gérer deux bit ''Chip Select''/''Output Enable'' : un pour la RAM, un pour la ROM. Et ces deux bits sont configurés pour chaque accès mémoire, pour chaque lecture ou écriture. Pour cela, un circuit de '''décodage d'adresse''' prend en entrée l'adresse mémoire à lire/écrire, et active/désactive les mémoires RAM/ROM selon les besoins. Il prend l'adresse et configure les bits ''Chip Select''/''Output Enable''. [[File:Décodage d'adresse sur une architecture Von Neumann.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann.]] L'implémentation la plus simple réserve la moitié des adresses pour la RAM, l'autre moitié pour la ROM. Typiquement, la ROM prend la moitié basse, la RAM la moitié haute. Dans ce cas, activer/désactiver la RAM et la ROM se fait avec seulement le bit de poids fort de l'adresse. Si le bit de poids fort est à 1, alors on accède à la RAM et la ROM doit être désactivée. Mais si ce bit est à 0, alors on accède à la moitié basse et il faut désactiver la RAM. Une remarque intéressante : le fait de séparer la mémoire en deux parts égales permet de simuler une architecture Harvard à partir d'une architecture Von Neumann. Par exemple, le tout premier processeur d'Intel, le 4004, était l'un de ceux là. La RAM et la ROM sont reliés au même bus, et il y a donc un unique espace d'adressage, qui est séparé en deux parties égales. Le truc est que le processeur traite les deux parties égales comme deux espaces d'adressage séparés. Le processeur se débrouille pour cacher le fait qu'il y a un espace d'adressage unique coupé en deux, ce qui fait que les programmeurs voient bien deux espaces d'adressages distincts. [[File:Décodage d'adresse sur une architecture Von Neumann basique.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann basique.]] Pour résumer, quand une adresse est envoyée sur le bus, les deux mémoires vont la recevoir mais une seule va répondre et se connecter au bus. Le décodage d'adresse garantit que seule la mémoire adéquate réponde à un accès mémoire. Le décodage d'adresse est réalisé par la carte mère, par un composant dédié. Le mécanisme peut être utilisé pour combiner plusieurs RAM en une seule, idem avec les ROM. Pour comprendre l'idée, je vais prendre l'exemple de l'IBM PC, un des tout premier PC existant. Nous étudierons ce PC dans une section dédiée, à la fin du chapitre, aussi je vais passer rapidement dessus. Tout ce que je vais faire est vous présenter la carte mère du PC, et vous demander de faire est de compter les mémoires ROM et mémoires RAM sur la carte mère : [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] Si vous remarquerez qu'il y a 5 mémoires ROM et 8 à 32 mémoires RAM. Le fait est que le processeur voit les différentes mémoires ROM comme une seule mémoire ROM. Idem avec les mémoires RAM : elle font chacune 2 kibioctets, et l'ensemble est vu par le processeur comme une seule RAM de 16 à 64 kibioctets. Et cela grâce aux circuits de décodage d'adresse, qui sont situés en haut à droite de la carte mère. Pour comprendre l'idée, prenons l'exemple d'un processeur 16 bits, capable de gérer 64 kibioctets de mémoire. L'espace d'adressage est découpé en quatre portions, de 16 kibioctets chacune. Une portion est réservée à une ROM de 16 kibioctet, les autres sont chacune réservée à une RAM de 16 kibioctet. Le décodage d'adresse sélectionne alors la mémoire adéquate en utilisant les deux bits de poids fort de l'adresse. * S'ils valent 00, alors c'est la mémoire ROM qui est activée, connectée au bus. * S'ils valent 01, alors c'est la première mémoire RAM qui est connectée au bus. * S'ils valent 10, alors c'est la seconde mémoire RAM qui est connectée au bus. * S'ils valent 11, alors c'est la troisième mémoire RAM qui est connectée au bus. [[File:Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM.png|centre|vignette|upright=3|Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM]] ===L'impact sur la conception du processeur=== Plus haut, j'ai parlé d'un des avantages des architectures Harvard : elles peuvent lire une instruction en même temps qu'elles accèdent à une donnée. La donnée est lue/écrite en RAM, alors que l'instruction est lue en ROM. Et cela permet de simplifier l'intérieur du processeur. Pas de beaucoup, mais c'est déjà ça de pris. Voyons maintenant comment cela impacte l'intérieur du processeur. Tout ce dont vous avez à vous rappeler est la séparation entre chemin de données et unité de contrôle, et que les registres généraux sont dans le premier, le ''program counter'' dans la seconde. Avec une architecture Harvard, les instructions et les données passent par des bus différent : bus ROM pour les instructions, bus RAM pour les données. L'intuition nous dit que le bus pour la mémoire ROM est connecté à l'unité de contrôle, alors que le bus pour la RAM est connecté au chemin de données. Et dans les grandes lignes, c'est vrai. La logique est imparable pour ce qui est des bus de données. Mais il y a une petite subtilité pour les bus d'adresse. Pour comprendre comment le processeur exploite ces deux bus, voyons ce qui transite dessus. Pour la mémoire ROM, elle reçoit l'adresse de l'instruction à lire, elle renvoie l'instruction adéquate. Pour cela, le ''program counter'' est envoyé sur le bus d'adresse, l'instruction sur le bus de données. Pour la mémoire RAM, elle échange des données avec les registres généraux, les registres pour les données. Les adresses utilisées pour la RAM viennent elles soit du chemin de données, soit de l'unité de contrôle, tout dépend du mode d'adressage. Mais le ''program counter'' n'est pas impliqué. [[File:Architecture Harvard - échanges de données.png|centre|vignette|upright=2|Architecture Harvard - échanges de données]] Les architectures Harvard modifiées doivent cependant rajouter une connexion entre le bus ROM et les registres généraux. C'est nécessaire pour charger une donnée constante depuis la mémoire ROM. Rappelons que la donnée constante est copiée dans un registre général, donc dans le chemin de données. [[File:Architecture Harvard modifiée - implémentation du processeur.png|centre|vignette|upright=2|Architecture Harvard modifiée - implémentation du processeur]] Avec les architectures Von Neumann, il y a un seul bus qui est relié à la fois au chemin de données et à l'unité de contrôle. Si le processeur lit une instruction, le bus doit être relié à l'unité de contrôle. Par contre, s'il accède à une donnée, il doit être relié au chemin de données (le bus d'adresse peut éventuellement être connecté au séquenceur, si celui-ci fournit l'adresse à lire). Il faut donc utiliser un paquet de multiplexeurs et de démultiplexeurs pour faire la connexion au bon endroit. [[File:Architecture Von Neumann - implémentation du processeur.png|centre|vignette|upright=2|Architecture Von Neumann - implémentation du processeur]] Une instruction se fait en deux temps : on charge l'instruction depuis la mémoire ROM, puis on l'exécute. Avec une architecture Harvard, tout cela se fait en un seul cycle d'horloge, vu que charger la ROM et accéder aux données peut se faire en même temps. Pas avec les architectures Von Neumann, qui doivent libérer le bus mémoire après avoir chargé une instruction. Elles n'ont pas le choix : elles chargent l'instruction lors d'un premier cycle d'horloge, puis l'exécutent lors du second. Pour cela, ils incorporent un registre appelé le '''registre d'instruction''', qui mémorise l'instruction chargée. L'instruction est copiée dans ce registre lors du premier cycle, puis est utilisée lors du second cycle. Le registre permet de ne pas oublier l’instruction entre les deux cycles. Le registre d'instruction est obligatoire sur les architectures Von Neumann. En comparaison, il est facultatif sur les architectures Harvard. Elles peuvent en avoir un, pour des raisons techniques, mais ce n'est pas obligatoire. [[File:Registre d'instruction.png|centre|vignette|upright=2|Registre d'instruction.]] ===Les architectures Von Neumann sont plus flexibles=== Sur les architectures Harvard, le processeur sait faire la distinction entre programme et données. Les données sont stockées dans la mémoire RAM, le programme est stocké dans la mémoire ROM. Les deux sont séparés, accédés par le processeur sur des bus séparés, et c'est ce qui permet de faire la différence entre les deux. Il est impossible que le processeur exécute des données ou modifie le programme. Du moins, tant que la mémoire qui stocke le programme est bien une ROM. Par contre, sur les architectures Von Neumann, il est impossible de distinguer programme et données, sauf en ajoutant des techniques de protection mémoire avancées. La raison est qu'il est impossible de faire la différence entre donnée et instruction, vu que rien ne ressemble plus à une suite de bits qu'une autre suite de bits. Et c'est à l'origine d'un des avantages majeur de l'architecture Von Neumann : il est possible que des programmes soient copiés dans la mémoire RWM et exécutés dans celle-ci. Un cas d'utilisation familier est celui de votre ordinateur personnel. Le système d'exploitation et les autres logiciels sont copiés en mémoire RAM à chaque fois que vous les lancez. Mais cet exemple implique un disque dur, ce qui rend les choses plus compliquées que prévu. Un autre exemple serait la compilation de code à la volée, mais il ne sera pas très parlant. Un exemple plus adapté serait celui où la ROM mémorise un programme compressée dans la mémoire ROM, qui est décompressé pour être exécuté en mémoire RAM. Le programme de décompression est stocké en mémoire ROM et est exécuté au lancement de l’ordinateur. Cette méthode permet d'utiliser une mémoire ROM très petite et très lente, tout en ayant un programme rapide (si la mémoire RWM est rapide). Il est aussi possible de créer des programmes qui modifient leurs propres instructions : cela s'appelle du '''code auto-modifiant'''. Ce genre de choses servait autrefois sur des ordinateurs rudimentaires, au tout début de l'informatique. À l'époque, les adresses à lire/écrire devaient être écrites en dur dans le programme, dans les instructions exécutées. Pour gérer certaines fonctionnalités des langages de programmation qui ont besoin d'adresses modifiables, comme les tableaux, on devait corriger les adresses au besoin avec du code auto-modifiant. De nos jours, le code automodifiant est utilisée occasionnellement pour rendre un programme indétectable dans la mémoire (les virus informatiques utilisent beaucoup ce genre de procédés). L'impossibilité de séparer données et instructions est à l'origine de problèmes assez fâcheux. Il est parfaitement possible que le processeur charge et exécute des données, qu'il prend par erreur pour des instructions. C'est le cas quand des pirates informatiques arrivent à exploiter des bugs. Il arrive que des pirates informatiques vous fournissent des données corrompues, qui contiennent un virus ou un programme malveillant est caché dans les données. Les bugs en question permettent d'exécuter ces données, donc virus. Pour éviter cela, le système d'exploitation peut marquer certaines zones de la mémoire comme non-exécutable, c’est-à-dire que le système d'exploitation interdit d’exécution de quoi que ce soit qui est dans cette zone. Mais ce n'est pas parfait. Toujours est-il que tout cela est impossible sur les architectures Harvard. Et ce serait très limitant. Imaginez : pas possible de lancer un programme depuis le disque dur ou une clé USB, le programme doit impérativement être dans une mémoire ROM, pas de compilation à la volée, etc. Que des techniques très utilisées dans l'informatique moderne. Malgré ses défauts, les architectures Von Neumann ne sont pas les plus utilisées pour rien. Les architectures Harvard sont concrètement utilisées uniquement dans l'informatique embarquée, sur des microcontrôleurs très spécifiques. ==Le bus de communication avec les entrées-sorties== Le processeur, la mémoire et les entrées-sorties sont connectées par un ou plusieurs '''bus de communication'''. Ce bus n'est rien d'autre qu'un ensemble de fils électriques sur lesquels on envoie des zéros ou des uns. Pour communiquer avec la mémoire, il y a trois prérequis qu'un bus doit respecter : pouvoir sélectionner la case mémoire (ou l'entrée-sortie) dont on a besoin, préciser à la mémoire s'il s'agit d'une lecture ou d'une écriture, et enfin pouvoir transférer la donnée. Pour cela, on doit donc avoir trois bus spécialisés, bien distincts, qu'on nommera le bus de commande, le bus d'adresse, et le bus de donnée. * Le '''bus de données''', sur lequel s'échangent les données entre les composants. * Le '''bus de commande''' pour configurer la mémoire et les entrées-sorties. * Le '''bus d'adresse''', facultatif, permet de préciser quelle adresse mémoire il faut lire/écrire. Chaque composant possède des entrées séparées pour le bus d'adresse, le bus de commande et le bus de données. Par exemple, une mémoire RAM possédera des entrées sur lesquelles brancher le bus d'adresse, d'autres sur lesquelles brancher le bus de commande, et des broches d'entrée-sortie pour le bus de données. Précisons cependant que le bus de commande n'est pas exactement le même entre des mémoires RAM/ROM et des entrées-sorties. [[File:Bus general schematic.svg|centre|vignette|upright=2|Contenu d'un bus, généralités.]] ===Le réseau d'interconnexion : généralités=== Reprenons où nous nous étions arrêté. Avant de voir les architectures Harvard et Von Neumann, nous avions dit que le processeur, les mémoires et les entrées-sorties sont reliées entre eux par un réseau d'interconnexion. Nous venons de voir qu'il est possible de mutualiser certains bus, notamment celui de la mémoire RAM et celui de la mémoire ROM. Mais il est possible de faire la même chose pour les entrées-sorties. Là encore, il est possible de regrouper le bus mémoire avec les bus pour les entrées-sorties. Voyons ce que cela implique. {| |[[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec une architecture Harvard.]] |[[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Interconnexions d'une architecture Von Neumann.]] |} Avant de poursuivre, nous devons préciser quelque chose d'important. Sur les ordinateurs modernes, les entrées-sorties peuvent accéder à la mémoire RAM. Les ordinateurs modernes intègrent des techniques de '''''Direct Memory Access''''' (DMA) qui permettent aux entrées-sorties de lire ou d'écrire en mémoire RAM. Les transferts DMA se font sans intervention du processeur. Ils permettent de copier un bloc de plusieurs octets, dans deux sens : de la mémoire RAM vers une entrée-sortie, ou inversement. Le DMA demande d'ajouter un circuit dédié sur la carte mère : le contrôleur DMA. Il effectue la copie d'un paquet d'octets de la RAM vers l'entrée-sortie ou dans l'autre sens. [[File:Réseau d'interconnexion avec un processeur au centre, et direct memory access.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre, et direct memory access]] ===Les bus systèmes=== La première solution utilise un bus unique, celui-ci est appelé le '''bus système''', aussi appelé ''backplane bus''. Le bus système est connecté à la mémoire RAM, la mémoire ROM, au processeur, et aux entrées-sorties. Tous les composants présents dans l'ordinateur sont connectés à ce bus, sans exception. De tels bus avaient pour avantage la simplicité. Le processeur n'est connecté qu'à un seul bus, ce qui utilise peu de broches et économise des fils. La mutualisation des bus est totale, le câblage est plus simple, la fabrication aussi. [[File:Architecture minimale d'un ordinateur.png|centre|vignette|upright=2|Architecture minimale d'un ordinateur.]] Un bus système contient un bus d'adresse, de données et de commande. Un bus système se marie bien avec des entrées-sorties mappées en mémoire. La conséquence est que le bus d'adresse ne sert pas que pour l'accès à la mémoire RAM/ROM, mais aussi pour l'accès aux entrées-sorties. Il y a moyen d'implémenter un système d'adresse séparés avec, mais c'est pas l'idéal. [[File:Architecture Von Neumann avec les bus.png|centre|vignette|upright=2|Architecture Von Neumann avec les bus.]] Un bus système n'a pas de limitations quant aux échanges de données. Le processeur peut communiquer directement avec les mémoires et les entrées-sorties, les entrées-sorties peuvent communiquer avec la mémoire RAM, etc. Notamment, un bus système peut implémenter le ''Direct Memory Access''. Il suffit juste de connecter un contrôleur DMA sur le bus système. Le contrôleur DMA est considéré comme une entrée-sortie, ses registres sont mappés en mémoire et sont donc accessibles directement par le processeur. [[File:Bus système avec controleur DMA.png|centre|vignette|upright=2|Bus système avec contrôleur DMA.]] Si on suit la définition à la lettre, un bus système est systématiquement une architecture Von Neumann, vu que la mémoire ROM et la mémoire RAM sont reliées sur le bus système. La conséquence est que les circuits de décodage d'adresse sont présents. Ils sont toujours sur la carte mère, et sont plus ou moins à côté du bus système. Cependant, le décodage d'adresse est parfois étendu pour tenir compte des entrées-sorties. Les entrées-sorties soudées sur la carte mère ont elles aussi des entrées ''Chip Select'' ou quelque chose de similaire. Le décodage d'adresse peut alors les activer ou les désactiver suivant l'adresse envoyée sur le bus d'adresse. C'est ce qui arrive quand le processeur écrit dans un registre d’interfaçage : il envoie l'adresse de ce registre sur le bus d'adresse, le circuit de décodage d'adresse active seulement l'entrée-sortie associée. Il faut noter que ce n'est pas systématique, il existe des techniques pour se passer de décodage d'adresse. Mais nous en reparlerons dans le chapitre sur les bus de communication. [[File:Chipselectfr.png|centre|vignette|upright=1.5|Exemple détaillé.]] Les bus systèmes sont certes très simples, mais ils ont aussi des désavantages. Par exemple, il faut éviter que le processeur et les entrées-sorties se marchent sur les pieds, ils ne peuvent pas utiliser le bus en même temps. De tels conflits d'accès au bus système sont fréquents et ils réduisent la performance, comme on le verra dans le chapitre sur les bus. De plus, un bus système a le fâcheux désavantage de relier des composants allant à des vitesses très différentes : il arrivait fréquemment qu'un composant rapide doive attendre qu'un composant lent libère le bus. Le processeur était le composant le plus touché par ces temps d'attente. Elle était utilisée sur les tout premiers ordinateurs, pour sa simplicité. Elle était parfaitement adaptée aux anciens composants, qui allaient tous à la même vitesse. De nos jours, les ordinateurs à haute performance ne l'utilisent plus trop, mais elle est encore utilisée sur certains systèmes embarqués, en informatique industrielle dans des systèmes très peu puissants. ===Les bus d'entrées-sorties=== Les bus systèmes ont de nombreux problèmes, ce qui fait que d'anciens ordinateurs faisaient autrement. À la place d'un bus système unique, ils utilisent un bus séparé pour les mémoires, et un autre séparé pour les entrées-sorties. Le bus spécialisé pour la mémoire est appelé le '''bus mémoire''', l'autre bus est appelé le '''bus d'entrées-sorties'''. Le bus mémoire est généralement relié à la fois à la mémoire RAM et à la mémoire ROM, les exceptions ne sont pas rares, cependant. [[File:Bus mémoire séparé du bus pour les IO.png|centre|vignette|upright=2|Bus mémoire séparé du bus pour les IO]] Les bus d'entrée-sorties peuvent être spécialisés et simplifiés. Par exemple, ils peuvent avoir un bus de commande différent de celui de la mémoire, qui utilise nettement moins de fils. Le bus d'adresse peut aussi être réduit, et utiliser des adresses plus courtes que celles du bus mémoire. Les bus de données peuvent aussi être de taille différentes. Il est ainsi possible d'avoir un bus mémoire capable de lire/écrire 64 bits à la fois, alors que la communication avec les entrées-sorties se fait octet par octet ! En général, les bus d'entrée-sortie sont assez petits, ils ont une taille de 8 ou 16 bits, même si le bus mémoire est plus grand. Cela permet de ne pas gaspiller trop de broches. Ajouter un bus d'entrée-sortie n'est donc pas très gourmand en broches et en fils. : Il est en théorie possible d'avoir une fréquence différente pour les deux bus, avec un bus mémoire ultra-rapide et un bus pour les entrées-sorties est un bus moins rapide. Mais il faut que le processeur soit prévu pour, et c'est très rare. Niveau performances, le processeur peut théoriquement accéder à la mémoire en attendant qu'une entrée/sortie réponde, mais il faut que le processeur soit prévu pour, et ce n'est pas de la tarte. Par contre, cela implique d'avoir des adresses séparées pour les registres d’interfaçage et la mémoire. En clair : pas d'entrée-sortie mappée en mémoire ! Un autre problème est que les entrées-sorties ne peuvent pas communiquer avec la mémoire directement, elles doivent passer par l'intermédiaire du processeur. En clair : pas de ''Direct Memory Access'' ! Les deux sont des défauts rédhibitoires pour les programmeurs système, notamment pour ceux qui codent les pilotes de périphériques. Pour résumer, les défauts sont assez problématiques : pas d'entrées-sorties mappées en mémoire, pas de ''Direct Memory Access'', économie de broches limitée. Les deux premiers sont des défauts majeurs, qui font que de tels bus ne sont pas utilisés dans les ordinateurs modernes. À la place, ils utilisent une troisième solution, distincte des bus systèmes et des bus d'entrée-sorties. ===Les bus avec répartiteur=== Il existe une méthode intermédiaire, qui garde deux bus séparés pour la mémoire et les entrées-sorties, mais élimine les problèmes de brochage sur le processeur. L'idée est d'intercaler, entre le processeur et les deux bus, un '''circuit répartiteur'''. Il récupère tous les accès et distribue ceux-ci soit sur le bus mémoire, soit sur le bus des périphériques. Le ou les répartiteurs s'appellent aussi le '''''chipset''''' de la carte mère. C'était ce qui était fait à l'époque des premiers Pentium. À l'époque, la puce de gestion du bus PCI faisait office de répartiteur. Elle mémorisait des plages mémoires entières, certaines étant attribuées à la RAM, les autres aux périphériques mappés en mémoire. Elles utilisaient ces plages pour faire la répartition. [[File:IO mappées en mémoire avec séparation des bus.png|centre|vignette|upright=2|IO mappées en mémoire avec séparation des bus]] Niveau adresses des registres d'interfacage, il est possible d'avoir soit des adresses unifiées avec les adresses mémoire, soit des adresses séparées. L'usage d'un répartiteur ne pose pas de problèmes particuliers pour implémenter le DMA. La seule contrainte est que le contrôleur DMA soit intégré dans le répartiteur. Les échanges entre IO et mémoire passent par le répartiteur, qui fait le pont entre bus mémoire et bus des IO. [[File:Implémentation du DMA avec un répartiteur.png|centre|vignette|upright=2|Implémentation du DMA avec un répartiteur]] ==Les microcontrôleurs et ''system on chip''== Parfois, on décide de regrouper la mémoire, les bus, le CPU et les ports d'entrée-sortie dans un seul circuit intégré, un seul boitier. L'ensemble forme alors ce qu'on appelle un '''''System on Chip''''' (système sur une puce), abrévié en SoC. Le nom est assez explicite : un SoC comprend un système informatique complet sur une seule puce de silicium, microprocesseurs, mémoires et périphériques inclus. Ils incorporent aussi des ''timers'', des compteurs, et autres circuits très utiles. [[File:ARMSoCBlockDiagram.svg|centre|vignette|upright=2|SoC basé sur un processeur ARM, avec des entrées-sorties typiques de celles d'un µ-contrôleur. Le support du bus CAN, d'Ethernet, du bus SPI, d'un circuit de PWM (génération de signaux spécifiques), de convertisseurs analogique-digital et inverse, sont typiques des µ-contrôleurs.]] Le terme SoC regroupe des circuits imprimés assez variés, aux usages foncièrement différents et à la conception distincte. Les plus simples d’entre eux sont des microcontrôleurs, qui sont utilisés pour des applications à base performance. Les plus complexes sont utilisés pour des applications qui demandent plus de puissance, nous les appellerons SoC haute performance. La relation entre SoC et microcontrôleurs est assez compliquée à expliquer, la terminologie n'est pas clairement établie. Il existe quelques cours/livres qui séparent les deux, d'autres qui pensent que les deux sont très liés. Dans ce cours, nous allons partir du principe que tous les systèmes qui regroupent processeur, mémoire et quelques périphériques/entrées-sorties sont des SoC. Les microcontrôleurs sont donc un cas particulier de SoC, en suivant cette définition. ===Les microcontrôleurs=== Les '''microcontrôleurs''' sont des composants utilisés dans l'embarqué ou d'informatique industrielle. Leur nom trahit leur rôle. Ils sont utilisés pour contrôler de l'électroménager, des chaines de fabrication dans une usine, des applications robotiques, les alarmes domestiques, les voitures. De manière générale, on les trouve dans tous les systèmes dits embarqués et/ou temps réel. Ils ont besoin de s'interconnecter à un grand nombre de composants et intègrent pour cela un grand nombre d'entrée-sorties. Les microcontrôleurs sont généralement peu puissants, et doivent consommer peu d'énergie/électricité. Fait amusant, on en trouve dans certains périphériques informatiques. Par exemple, les anciens disques durs intégraient un microcontrôleur qui contrôlait plusieurs moteurs/ Les moteurs pour faire tourner les plateaux magnétiques et les moteurs pour déplacer les têtes de lecture/écriture étaient commandés par ce microcontrôleur. Comme autre exemple, les claviers d'ordinateurs intègrent un microcontrôleur connecté aux touches, qui détecte quand les touches sont appuyées et qui communique avec l'ordinateur. Nous détaillerons ces deux exemples dans les chapitres dédiés aux périphériques et aux disques durs, tout deviendra plus clair à ce moment là. La majorité des périphériques ou des composants internes à un ordinateur contiennent des microcontrôleurs. [[File:Microcontroller 8051.gif|centre|vignette|upright=2.5|Microcontrôleur Intel 8051.]] Un microcontrôleur tend à intégrer des entrées-sorties assez spécifiques, qu'on ne retrouve pas dans les SoC destinés au grand public. Un microcontrôleur est typiquement relié à un paquet de senseurs et son rôle est de commander des moteurs ou d'autres composants. Et les entrées-sorties intégrées sont adaptées à cette tâche. Par exemple, ils tendent à intégrer de nombreux convertisseurs numériques-analogiques pour gérer des senseurs. Ils intègrent aussi des circuits de génération de signaux PWM spécialisés pour commander des moteurs, le processeur peut gérer des calculs trigonométriques (utiles pour commander la rotation d'un moteur), etc. [[File:C8051F340-9 A B C D.png|centre|vignette|upright=2|Exemple d'entrées-sorties intégrées à un microcontroleur.]] En plus des entrées-sorties intégrées, les microcontrôleurs ont souvent des '''ports d'entrées-sorties''' banalisés, à savoir qu'on peut brancher n'importe quoi dessus. Il était possible de brancher un capteur de température, un moteur à commander, un port série, un port parallèle, un écran, un clavier, une souris, peu importe. Les ports banalisés de ce type sont parfois appelés des '''GPIO''', abréviation de ''General Purpose Input/Output''. Un port regroupe plusieurs broches d'entrée-sortie, qui peuvent être utilisés à volonté. De telles broches sont généralement reliées directement ou indirectement au processeur, qui décide quoi envoyer sur des broches et comment interpréter ce qui est reçu dessus (le logicel sur le processeur, du moins). Un port IO peut fonctionner soit en tant qu'entrée, soit en tant que sortie. Il est possible de changer de sens en cours de fonctionnement, pour passer d'une entrée à une sortie ou inversement. ===Les SoC haute performance=== Les SoC les plus performants sont actuellement utilisés dans les téléphones mobiles, tablettes, ''Netbook'', ''smartphones'', ou tout appareil informatique grand public qui ne doit pas prendre beaucoup de place. La petite taille de ces appareils fait qu'ils gagnent à regrouper toute leur électronique dans un circuit imprimé unique. Mais les contraintes font qu'ils doivent être assez puissants. Ils incorporent des processeurs assez puissants, surtout ceux des ''smartphones''. C'est absolument nécessaire pour faire tourner le système d'exploitation du téléphone et les applications installées dessus. Niveau entrées-sorties, ils incorporent souvent des interfaces WIFI et cellulaires (4G/5G), des ports USB, des ports audio, et même des cartes graphiques pour les plus puissants d'entre eux. Les SoC incorporent des cartes graphiques pour gérer tout ce qui a trait à l'écran LCD/OLED, mais aussi pour gérer la caméra, voire le visionnage de vidéo (avec des décodeurs/encodeurs matériel). Par exemple, les SoC Tegra de NVIDIA incorporent une carte graphique, avec des interfaces HDMI et VGA, avec des décodeurs vidéo matériel H.264 & VC-1 gérant le 720p. Pour résumer, les périphériques sont adaptés à leur utilisation et sont donc foncièrement différents de ceux des microcontrôleurs. [[File:Phone hardware.png|centre|vignette|upright=2|Hardware d'un téléphone. On voit qu'il est centré autour d'un SoC, complété par de la RAM, un disque dur de faible capacité, de quoi gérer les entrées utilisateurs (l'écran tactile, les boutons), et un modem pour les émissions téléphoniques/2G/3G/4G/5G.]] Un point important est que les processeurs d'un SoC haute performance sont... performants. Ils sont le plus souvent des processeurs de marque ARM, qui sont différents de ceux utilisés dans les PC fixe/portables grand public qui sont eux de type x86. Nous verrons dans quelques chapitres en quoi consistent ces différences, quand nous parlerons des jeux d'instruction du processeur. Autrefois réservé au monde des PCs, les processeurs multicœurs deviennent de plus en plus fréquents pour les SoC de haute performance. Il n'est pas rare qu'un SoC incorpore plusieurs cœurs. Il arrive même qu'ils soient foncièrement différents, avec plusieurs cœurs d'architecture différente. La frontière entre SoC haute performance et microcontrôleur est de plus en plus floue. De nombreux appareils du quotidien intègrent des SoC haute performance, d'autres des microcontrôleurs. Par exemple, les lecteurs CD/DVD/BR et certains trackers GPS intègrent un SoC ou des processeurs dont la performance est assez pêchue. À l'opposé, les systèmes domotiques intègrent souvent des microcontrôleurs simples. Malgré tout, les deux cas d'utilisation font que le SoC/microcontrôleur est connecté à un grand nombre d'entrées-sorties très divers, comme des capteurs, des écrans, des LEDs, etc. [[File:GPS tracker Hardware Architecture.png|centre|vignette|upright=2|Hardware d'un tracker GPS.]] ==Étude de quelques exemples d'architectures== Après avoir vu la théorie, nous allons voir des exemples réels d'ordinateurs. Dans ce qui suit, nous allons voir des ordinateurs assez anciens, pour une raison simple : ils collent assez bien à l''''architecture de base''' vue plus haut, avec un CPU, une RAM et une ROM, quelques entrées-sorties. Tous les ordinateurs modernes, mais aussi dans les smartphones, les consoles de jeu et autres, utilisent une architecture grandement modifiée et améliorée, avec un grand nombre de périphériques, disques durs/SSD, un grand nombre de mémoires différentes, etc. Il pourrait sembler pertinent d’étudier des microcontrôleurs ou des ''System On Chip'', en premier lieu. Mais nous éviterons soigneusement de tels systèmes pour le moment. La raison est qu'ils ont un grand nombre d'entrées-sorties, qui sont peu familières. Attendez-vous à avoir près d'une vingtaine ou centaine d'entrée-sorties différentes pour de tels systèmes. Le tout est très complexe, bien trop pour un premier exemple. À la place, nous allons voir précisément des exemples plus simples : les premiers PC, et des consoles de jeu 8 et 16 bits. Bien que ce soit des systèmes très simples, ils sont cependant plus complexes que l'architecture de base. Et leur avantages/désavantages sont un peu inverse l'un de l'autre. Si on devait résumer les différences, on aurait ceci : * Les PC ont plus d'entrées-sorties que les consoles, bien que nettement moins que pour les microcontrôleurs/SoC. * Les PC utilisent des disques durs, les consoles font avec soit des cartouches de jeu, soit des CD/DVD. * Les PC utilisent des cartes électroniques séparées pour le son et l'écran, les consoles utilisent des circuits soudés sur la carte mère, qui sont souvent des co-processeurs. * Les PC ont une mémoire ROM soudées sur la carte mère, les consoles 8 bits font sans. Les PC et micro-ordinateurs ont plus d'entrées-sorties que les consoles. Même si on mets de côté les périphériques, ils ont aussi beaucoup de composants soudées sur la carte mère. En comparaison, les consoles de jeu 8/16 bits se débrouillent avec : une cartouche de jeu et une manette en entrée, une sortie vidéo et une sortie son. Un autre point important est l'absence de disque dur ou de lecteur CD. La présence d'un disque dur ou d'un lecteur CD/DVD complexifie tout de suite l'architecture des PC. Il faut leur réserver un bus dédié ou les connecter à un bus système, cela demande d'ajouter des circuits sur la carte mère, etc. Et surtout, il faut expliquer comment l'ordinateur exécute des programmes, ce qui demande de parler de l'interaction avec le disque dur et la ROM du BIOS. Rien de tout cela sur les consoles de jeu 8 et 16 bits. Elles utilisent à la place des cartouches de jeu, qui intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Pas besoin de parler des mémoires de stockage, on est beaucoup plus proche de l'architecture de base avec une ROM unique. Par contre, n'allez pas croire que tout est rose avec les consoles 8/16 bits. Il y a quelques différences qui font qu'elles sont plus complexes qu'un PC sur certains points. Les PC utilisent des cartes électroniques à brancher sur la carte mère pour alimenter l'écran et les hauts-parleurs/casques, alors que les consoles de jeu utilisent des souvent co-processeurs dédiés pour le son et les graphismes. La différence parait mineure, mais elle avantage les consoles. Nous avons déjà expliqué ce que sont les co-processeurs plus haut, aussi les co-processeurs des consoles nous paraitrons familiers. On n'a pas à s’embêter à expliquer ce que sont les cartes d'extension, les bus associés et tout ce qui va avec, cela peut être retardé pour la section sur l'architecture des PC. La gestion de la cartouche de jeu est aussi un peu subtile à comprendre, bien que ce soit bien plus simple à comprendre qu'un système avec un disque dur. Les cartouches de jeu intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Et le processeur doit exécuter le code depuis cette mémoire ROM. La conséquence est que les consoles 8/16 bits utilisent une architecture Harvard, avec un bus relié à la cartouche pour lire les instructions. Mais si ce n'était que ça... Les cartouches mémorisent aussi les données pour les graphismes, ce qui fait que le co-processeur vidéo doit lui aussi lire la cartouche pour récupérer ces données... ===L'architecture de la TurboGraphX-16=== La console PC Engine, aussi appelée TurboGraphX, est une ancienne console 8 bits. Elle contient un processeur 65C02, 8 kibioctets de RAM, un port manettes, une carte son et une carte vidéo. La '''carte son''' est le composant qui s'occupe de commander les haut-parleurs et de gérer tout ce qui a rapport au son. La '''carte graphique''' est le composant qui est en charge de calculer les graphismes, tout ce qui s'affiche à l'écran. Sur cette console, les cartes son et graphique ne sont PAS des co-processeurs, ce sont des circuits électroniques dits fixes. C'est totalement différent de ce qu'on a sur les consoles modernes, aussi le préciser est important. Bien que la carte graphique ne soit pas un processeur, elle a 64 kibioctets de RAM rien que pour elle. La RAM en question est séparée de la RAM normale, c'est un circuit intégré séparé. Et c'est un cas très fréquent, qui reviendra par la suite. La majeure partie des cartes graphiques dispose de leur propre '''mémoire vidéo''', totalement réservée à la carte graphique. La RAM vidéo est connectée à la carte graphique via un bus séparé. Le processeur est souvent connecté à ce bus, afin de pouvoir écrire des données dedans, mais ce n'est pas le cas ici. [[File:Architecture de la PC Engine, aussi appelée TurboGrafx-16.png|centre|vignette|upright=2.5|Architecture de la PC Engine, aussi appelée TurboGrafx-16]] L'architecture de la console était particulièrement simple. Le processeur était le centre de l'architecture, tout était connecté dessus. Il y a un bus pour la cartouche de jeu, un autre pour la RAM, un autre pour les manettes, un autre pour carte son, et un dernier pour la carte graphique. Le fait d'avoir un bus par composant est assez rare et ce n'est le cas ici que parce des conditions particulières sont remplies. Déjà, il y a peu d'entrée-sorties. Ensuite, les bus font tous 8 bits, vu que le processeur est un CPU 8 bits. Avec 5 connexions de 8 bits, le tout utilise 40 broches, ce qui est beaucoup, mais totalement gérable. Par contre, les choses changerons pour les autres consoles. Au final, l'organisation des bus peut s'expliquer avec ce qu'on a vu dans la section sur les bus de communication. La console utilise une architecture Harvard, car la ROM et la RAM utilisent des bus différents. De plus, il y a des bus dédiés aux entrées-sorties, séparés des bus mémoire. Enfin, la carte graphique a droit à ses propres bus pour lire dans la cartouche et dans sa RAM vidéo dédiée. ===L'architecture de la console de jeu NES=== Maintenant, nous allons voir la console de Jeu Famicom, aussi appelée la NES en occident. Elle a une architecture centrée sur un processeur Ricoh 2A03, similaire au processeur 6502, un ancien processeur autrefois très utilisé et très populaire. Le processeur est associé à 2 KB de mémoire RAM. Sur certaines cartouches, on trouve une RAM utilisée pour les sauvegardes, qui est adressée par le processeur directement. Première variation par rapport à l'architecture de la console précédente : l'ajout de la RAM pour les sauvegardes dans les cartouches. Niveau carte graphique, une différence importante est que la carte graphique est connectée à la cartouche de jeu via un autre bus, afin de pouvoir lire les sprites et textures du jeu dans la cartouche. [[File:Architecture de la NES.png|centre|vignette|upright=2.5|Architecture de la NES]] La différence avec l'architecture précédente est que des bus ont été fusionnés. Comme dit plus haut, le système utilise une architecture Harvard, vu que la ROM est dans la cartouche, alors que la RAM est soudée à la carte mère. Par contre, la Famicon utilise un bus dédié aux entrées-sorties. Il est utilisé pour la carte son et la carte graphique, seules les manettes sont sur un bus à part. Ce qui fait qu'on devrait plutôt parler de bus de sorties, mais passons... L'essentiel est qu'on n'est plus tout à fait dans le cas de la console précédente, avec un bus par composant. ===L'architecture de la SNES=== L'architecture de la SNES est illustrée ci-dessous. Les changements pour le processeur et la RAM sont mineurs.La RAM a augmenté en taille et passe à 128 KB. Pareil pour la RAM de la carte vidéo, qui passe à 64 KB. Par contre, on remarque un changement complet au niveau des bus, de la carte graphique et de la carte son. [[File:Architecture de la SNES.png|centre|vignette|upright=2|Architecture de la SNES]] La console utilise un '''bus système unique''', sur lequel tout est connecté : ROM, RAM, entrées-sorties, etc. La seule exception est pour les manettes, qui sont encore connectées directement sur le processeur, via un bus séparé. La transition vers un bus système s'explique par le fait que la console est maintenant de 16 bits, ce qui fait que les bus doivent être plus larges. Le processeur adresse des mémoires RAM et ROM plus grandes, ce qui double la taille de leurs bus. De plus, les entrées-sorties aussi ont besoin d'un bus plus large. Le processeur n'ayant pas un nombre illimité de broches, la seule solution est de fusionner les bus en un seul bus système. Un autre changement est que la carte graphique est maintenant composée de deux circuits séparés. Encore une fois, il ne s'agit pas de coprocesseurs, mais de circuits non-programmables. Par contre, la carte son est remplacée par deux coprocesseurs audio ! De plus, les deux processeurs sont connectés à une mémoire RAM dédiée de 64 KB, comme pour la carte graphique. L'un est un processeur 8 bits (le DSP), l'autre est un processeur 16 bits. Un point très intéressant : certains jeux intégraient des coprocesseurs dans leurs cartouches de jeu ! Par exemple, les cartouches de Starfox et de Super Mario 2 contenait un coprocesseur Super FX, qui gérait des calculs de rendu 2D/3D. Le Cx4 faisait plus ou moins la même chose, il était spécialisé dans les calculs trigonométriques, et diverses opérations de rendu 2D/3D. En tout, il y a environ 16 coprocesseurs d'utiliser et on en trouve facilement la liste sur le net. La console était conçue pour, des pins sur les ports cartouches étaient prévues pour des fonctionnalités de cartouche annexes, dont ces coprocesseurs. Ces pins connectaient le coprocesseur au bus des entrées-sorties. Les coprocesseurs des cartouches de NES avaient souvent de la mémoire rien que pour eux, qui était intégrée dans la cartouche. ===L'architecture de la Megadrive et de la néo-géo=== Passons maintenant à la console de jeu Megadrive, une console 16 bits. Elle a une architecture similaire à celle de la néo-géo, une autre console bien plus puissante, sorti à peu près en même temps. Elles intègrent deux processeurs : un Motorola 68000 qui sert de processeur principal, un Z80 qui sert de processeur dédié à l'audio. Le Z80 et le Motorola 68000 étaient deux processeurs très populaires à l'époque. Le Z80 est une sorte de version améliorée de l'Intel 8088 utilisé sur les anciens PC et de nombreuses consoles utilisaient des Z80 comme processeur principal. Il était familier pour les programmeurs de l'époque, pour son cout réduit, sa bonne disponibilité, et bien d'autres avantages liés à sa production de masse. Le Z80 est utilisé comme co-processeur audio. Il commande un synthétiseur sonore, et est relié à sa propre mémoire, distincte de la mémoire principale. Le MC68000 est le processeur principal et a une relation maitre-esclave avec le Z80 : le MC68000 envoie des commandes au Z80, mais la communication ne va pas dans l'autre sens. Le Motorola 68000 était un processeur 16 bits, alors que le Z80 est un processeur 8 bits. Et cette différence fait que l'on ne peut pas connecter directement les deux sur le même bus, ou du moins pas facilement. La solution retenue est d'utiliser deux bus séparés : un bus de 16 bits connecté au 68000, un bus de 8 bits connecté au Z80. Le premier bus est un bus système sur lequel est connecté le 68000, 64 kibioctets de RAM, la cartouche de jeu, et la carte graphique. Le second bus est un bus de 8 bits, plus court, relié au Z80, à un synthétiseur sonore, et 8 kibioctets de RAM Les deux bus sont connectés à un '''''chipset''''', un circuit répartiteur, qui fait le pont entre les deux bus. Les manettes sont connectées sur le ''chipset''. Il contient un registre de 8 bits, dans lequel le MC68000 peut écrire dedans à sa guise, le registre étant adressable par le processeur. Lorsque le MC68000 écrit une valeur dedans, cela déclenche l’exécution automatique d'un programme pré-déterminé sur le Z80. : Pour ceux qui savent ce qu'est une interruption, les valeurs écrites dans ce registre sont des numéros d'interruption, qui indiquent quelle routine d'interruption exécuter. [[File:Architecture de la Megadrive et de la Néogeo.png|centre|vignette|upright=2.5|Architecture de la Megadrive et de la Néogeo]] Cet exemple nous montre que les bus systèmes sont certes très simples, mais aussi inflexibles. Ils fonctionnent bien quand les composants branchés dessus sont tous des composants 8 bits, ou sont tous de 16 bits, ou tous 32 bits. Mais dès qu'on mélange composants 8, 16, 32 ou 64 bits, les choses deviennent plus compliquées. Il est alors préférable d'utiliser des bus séparés, avec des répartiteurs pour faire le pont entre les différents bus. Et nous verrons que le problème s'est posé lui aussi sur les PC. ===L'architecture des anciennes consoles Playstation : beaucoup de co-processeurs=== Les consoles que nous venons d'aborder étaient des consoles 8 ou 16 bits. A partir des consoles 32 bits, leur architecture s'est rapprochée de celle des PC, avec un usage plus complexes de répartiteurs. La XBOX était très semblable à un PC : le processeur était un Pentium 3 modifié, la carte graphique était une Geforce 3 modifiée, les 64 mébioctets de RAM était la même mémoire DDR que celle des PC, le répartiteur secondaire était un ''chipset'' nForce de NVIDIA, etc. Mais les Playstation 1, 2 et 3 se distinguent de leur contemporains. Elles disposent de très nombreux co-processeurs, qui sont en plus très variés. La Playstation 1 a été une des premières console à utiliser les CD-ROM comme support de stockage, en remplacement des cartouches. La conséquence est que la console contient une mémoire ROM, soudée à la carte mère, de 512 kibioctets. Elle contient aussi 2 mébioctets de RAM, une carte graphique avec 1 mébioctet de mémoire vidéo, un processeur, et de quoi gérer les périphériques. Il y a un co-processeur audio spécialisé, avec 512 kibioctets de RAM, ce qui nous est familier. Par contre, les autres co-processeurs ne le sont pas. Déjà, le lecteur de CD-ROM est associé à des circuits sur la carte mère, il y a tout un sous-système dédié au lecteur de CD. Il y a un contrôleur qui sert d'interface avec le lecteur proprement dit, mais aussi deux co-processeurs audio et 32 kibioctets de RAM. Les co-processeurs audio servent à lire des CD sans trop utiliser le second co-processeur audio, ils lui servent de complément. Ensuite, le processeur incorpore plusieurs cœurs, avec un cœur principal et plusieurs co-processeurs. Le premier est un co-processeur système, qui est utilisé pour gérer la mémoire cache intégrée au processeur, pour des fonctionnalités appelées interruptions et exceptions, ainsi que pour configurer le processeur. Le second est un co-processeur arithmétique spécialisé dans les calculs en virgule flottante, très importants pour le rendu 3D. Enfin, il y a un décodeur vidéo, qui n'est pas un co-processeur, mais un circuit non-programmable, spécialisé dans le décodage vidéo. De nos jours, ce circuit aurait été intégré dans la carte graphique, mais il était intégré dans le processeur sur la Playstation 2. Pour le reste, le processeur est la figure centrale de la console. Il est connecté à 4 bus : un pour la RAM, un pour la carte graphique, un pour les manettes, un autre pour le reste. Le dernier bus est connecté au système audio et au système pour le lecteur CD. Ce serait un bus d'entrée-sortie, s'il n'était pas connecté à la mémoire ROM. Vous avez bien lu : la mémoire ROM est reliée au bus d'entrée-sortie. [[File:Architecture de la Playstation.png|centre|vignette|upright=2.5|Architecture de la Playstation]] La Playstation 2 est composé d'un processeur, couplé à 32 Mébioctets de RAM, et d'un paquet de co-processeurs. Plus de co-processeurs que la PS1. Le processeur principal n'est pas la même que celui de la PS1, mais il a une architecture similaire. Il intègre un décodeur vidéo sur le même circuit intégré, ainsi que deux co-processeur. Les co-processeurs ne sont cependant pas les mêmes. Le co-processeur système disparait et est remplacé par un second co-processeur arithmétique. Les deux co-processeurs arithmétiques sont spécialisés dans les nombres flottants, avec quelques différences entre les deux. Par exemple, le second co-processeur gérait des calculs trigonométriques, des exponentielles, des logarithmes, et d'autres fonctions complexes du genre ; mais pas le premier co-processeur. Ils sont reliés à 4 kibioctets de RAM pour le premier, 16 kibioctets de RAM pour le second ; qui sont intégrées dans le processeur et non-représentés dans le diagramme ci-dessous. La PS2 intègre aussi un co-processeur d'entrées-sorties. Pour information, il s'agit du processeur principal de la Playstation 1, qui est ici utilisé différemment, suivant que l'on place un jeu PS1 ou PS1 dans la console. Si on met un jeu PS1, il est utilisé pour émuler la Playstation 1, afin de faire tourner le jeu PS1 sur la PS2. Si on met un jeu PS2, il est utilisé comme co-processeur d'entrée-sortie et fait l'interface entre CPU et entrées-sorties. Il est relié à 2 mébioctets de RAM, soit exactement la même quantité de mémoire que la Playstation 1. Tous les périphériques sont connectés au co-processeur d'entrées-sortie. Pour cela, le co-processeur d'entrées-sortie est relié à deux bus dédiés aux périphériques. Le premier bus est relié aux manettes, aux ports USB et aux ports pour cartes mémoires. Le second bus est relié à la carte son, la carte réseau, le lecteur DVD, et un port PCMIA. Notons que la carte son intègre un co-processeur audio, qui n'est pas représenté dans le diagramme ci-dessous. [[File:Playstation 2 architecture.png|centre|vignette|upright=2.5|Playstation 2 architecture]] ==L'architecture des PC et son évolution== Après avoir vu les consoles, nous allons maintenant voir les anciens PC, des années 80 ou 90. Le tout premier PC était techniquement l''''IBM PC'''. Par la suite, de nombreux ordinateurs ont tenté de reproduire l'IBM PC originel, avec parfois quelques modifications mineures. De tels ordinateurs ''IBM PC compatibles'', ont été très nombreux, pour des raisons diverses. Le fait d'utiliser des composants banalisés, facilement disponibles, ainsi qu'une bonne documentation de l'IBM PC originel, a grandement aidé. Les IBM PC compatibles ont progressivement évolué pour donner les PC actuels. L'IBM PC compatible a donné naissance à de nombreux standards divers. ===L'IBM PC originel et l'IBM PC XT=== [[File:IBM PC XT 02.jpg|vignette|IBM PC XT.]] Nous allons commencer par voir l'IBM PC originel, et son successeur : l'IBM Personal Computer XT. Nous les appelerons tous deux l'IBM PC. L'IBM PC utilisait un processeur Intel 8088, qui était un processeur 8 bits. Ils utilisaient un bus système unique, appelé le '''bus XT'''. Le bus système allait à 4.77 MHz, soit la même fréquence que le processeur. C'était un bus de 8 bits, ce qui collait parfaitement avec les processeurs 8 bits commercialisés par Intel à l'époque. L'IBM PC comprenait une mémoire ROM avec de quoi faire fonctionner le PC. La ROM en question contenait un programme minimal, appelé le '''BIOS''', sans lequel le PC ne fonctionnait pas du tout. Il servait de base pour le système d'exploitation et MS-DOS ne fonctionnait pas sans elle. De nos jours, son rôle est plus limité : sans elle, le PC ne démarre pas. Mais nous détaillerons cela dans le prochain chapitre. En plus de la ROM pour le BIOS, l'IBM PC avait quatre mémoires ROM dédiée au langage de programmation BASIC. Lorsque le PC démarrait, il ne bootait pas un système d'exploitation, mais lançait l'interpréteur pour le langage BASIC. De nos jours, ce serait l'équivalent d'un ordinateur qui boote directement sur du Python, à savoir la console Python que vous avez peut-être déjà utilisé si vous avez testé Python. Ceux qui ont déjà touché à un ordinateur de l'époque savent ce que ca veut dire, mais c'est malheureusement très difficile à expliquer sans ce genre d'expérience. Toujours est-il que c'était une sorte de norme à l'époque : les ordinateurs bootaient généralement sur un interpréteur BASIC. [[File:XT Bus pins.svg|vignette|Connecteur du bus XT.]] Les PC étaient conçus pour qu'on branche des '''cartes d'extension''', à savoir des cartes électroniques qu'on branchait sur la carte mère, à l'intérieur du PC. Les cartes d'extension de l'époque étaient surtout des cartes son ou des cartes graphiques, mais aussi des cartes pour brancher des péripéhriques. par exemple, on pouvait ajouter deux cartes graphiques dans l'IBM PC originel : l'''IBM Monochrome Display Adapter'' et/ou la ''IBM Color Graphics Adapter''. De nos jours, les cartes son sont intégrées à la carte mère, mais les cartes graphiques sont restées des cartes d'extension. Les cartes d'extension étaient branchées sur un '''connecteur XT''', qui était directement relié au bus XT. Le connecteur XT est illustré ci-contre, mais ne vous en souciez pas trop pour le moment. La carte mère de l'IBM PC avait 5 connecteurs de ce type, qu'on pouvait peupler avec autant de cartes d'extension. L'IBM Personal Computer XT est passé à 8 connecteurs XT, soit trois de plus. Pour ce qui est des périphériques, l'IBM PC avait plusieurs connecteurs : un port série, un port parallèle, un port pour le clavier, et un port pour un lecteur cassette. Le clavier et le lecteur cassette étaient connectés directement sur la carte mère, qui contenait quelques circuits pour gérer le clavier. Par contre, les deux premiers n'étaient pas connectés à la carte mère. Le port série était en réalité une carte d'extension, branchée sur un connecteur XT. Et il en est de même pour le port parallèle. Pour ce qui est des supports de stockage, l'IBM PC originel n'avait pas de disque dur et n'avait que des lecteurs de disquette. De plus, le lecteur de disquette n'était pas connecté directement sur la carte mère, mais était connecté à une carte d'extension, branchée sur un connecteur XT. La carte d'extension avait deux connecteurs, un par lecteur de disquette, ce qui fait que les deux lecteurs de disquettes pouvaient être branchés sur une seule carte d'extension. L'IBM Personal Computer XT a ajouté un disque dur, sauf sur quelques sous-modèles spécifiques. Le PC avait aussi un petit haut-parleur capable de faire des bips. Pour résumer, l'IBM PC originel se reposait beaucoup sur les cartes d'extension, sa carte mère contenait peu de choses. Enfin, peu de choses... Il y avait un processeur Intel 8088, éventuellement un coprocesseur flottant 8087, de la RAM, de la ROM, et des circuits intégrés assez divers. En voici la liste, certains vous seront familiers, d'autres vous seront inconnus à ce stade du cours : * les circuits de décodage d'adresse ; * un contrôleur DMA intel 8273 ; * un contrôleur d'interruption 8259 ; * un contrôleur de bus Intel 8288 pour gérer le bus XT ; * un générateur d'horloge Intel 8284 et un diviseur de fréquence ; * un ''timer'' Intel 8253, le même que celui étudié dans le chapitre sur les ''timers'' ; * un contrôleur parallèle 8255. Les multiplexeurs, registres et portes logiques, sont des circuits de décodage d'adresse, qui permettent de combiner plusieurs RAM en une seule, idem avec la mémoire ROM. Si vous verrez qu'il y a 5 mémoires ROM : une ROM pour le BIOS, et quatre autres ROM pour le BASIC. Les 4 ROM du BASIC sont combinées en une seule mémoire ROM. Pour les RAM, il y en a 8 à 32, qui sont combinées en une seule RAM de 16 à 64 kibioctets. [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] ===L'architecture d'un IBM PC compatible 16 bits=== Les PC suivants sont passés à des processeurs 16 bits, mais c'était toujours des processeurs x86 d'Intel, à savoir des Intel 286 et 386. La RAM a grossi, quelques entrées-sorties ont été ajoutées, mais l'architecture globale est plus moins resté le même. C'est surtout au niveau du bus et des périphériques que les changements majeurs ont eu lieu. [[File:ISA Bus pins.svg|vignette|Connecteur ISA.]] Les PC 16 bits utilisaient un bus système unique, sur lequel tout était connecté : le processeur, la RAM, la ROM, les cartes d'extension et tout le reste. Le bus en question s'appelait le '''bus AT''', mais il a rapidement été renommé en '''bus ISA''' (''Industry Standard Architecture''). Le bus ISA était prévu pour avoir une compatibilité avec le bus 8 bits de l'IBM PC originel. D'ailleurs, cela se ressent jusque dans le connecteur utilisé : le connecteur ISA est un connecteur XT qu'on a fusionné avec un second connecteur pour l'étendre de 8 à 16 bits. Les PC 16 bits avaient toujours un port série, un port parallèle, un clavier, un lecteur de disquette et des cartes d'extension. Des disques durs pouvaient être ajoutés, aussi. Mais pour ces périphériques, un changement majeur a eu lieu comparé à l'IBM PC originel. L'IBM PC originel utilisait des cartes d'extension pour tout, sauf le clavier. Mais maintenant, les périphériques ne sont plus connectés à une carte d'extension. À la place, les circuits de la carte d'extension sont déplacés sur la carte mère. Mais n'allez pas croire qu'ils étaient connectés directement au bus ISA, il y avait des intermédiaires. Le clavier était relié à un '''contrôleur de clavier''', qui faisait l'interface entre le connecteur du clavier et le bus ISA. Le contrôleur de clavier était appelé le ''Keyboard Controler'', abrévié en KB. Il recevait ce qui est tapé au clavier et traduisait cela en quelque chose de compréhensible par l'ordinateur. Les autres périphériques étaient connectés à un circuit intégré dédié : l''''Intel 82091AA'''. Il était connecté au lecteur de disquette, au port série et au port parallèle. Il servait d'intermédiaire entre ces périphériques et le bus ISA. Vous pouvez le voir comme une sorte de répartiteur, mais qui ne serait pas connecté sur le processeur et la RAM Enfin, il ne faut pas oublier les autres composants présents sur l'IBM PC originel. Le BIOS est toujours là, de même que les ''timers'' Intel 8253 PIT, le contrôleur d'interruption Intel 8259 et le contrôleur DMA Intel 8237. Les PC 16 bits ont aussi intégré une ''Real Time Clock'' (RTC). Pour rappel, c'est un composant qui permet au PC de mémoriser la date et l'heure courante, à la seconde près. Le tout est résumé dans le schéma ci-dessous. [[File:Architecture de l'IBM PC compatible.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible]] Un point important est que le bus ISA allait à la même fréquence que le processeur, vu que c'était un bus système. Les processeurs de l'époque étaient des CPU 286 d'Intel, ou le 386 d'Intel. Les Intel 286 allaient de 4 MHz minimum, à 25 MHz maximum. Le 386, quant à lui, allait de 12 à 40 MHz. Le bus ISA devait aller à cette fréquence, il était synchrone avec le processeur. Par la suite, les processeurs ont gagné en performance, ce qui fait que le bus ISA est devenu trop lent pour le processeur. Une idée a alors été de conserver le bus ISA, pour des raisons de compatibilité, mais de le reléguer comme bus secondaire. L'ordinateur contient alors deux bus : un bus système, et un bus ISA secondaire. Le lien entre les deux est réalisé par un '''pont ISA''', ''ISA Bridge'' en anglais. Le bus ISA fonctionnait alors sa fréquence usuelle, alors que le bus système était beaucoup plus rapide. Le bus système fonctionnait à une fréquence bien plus élevée, ce qui fait que le processeur pouvait communiquer à pleine vitesse, notamment avec la RAM. Le processeur n'était alors plus forcé à aller à la même fréquence que le bus ISA [[File:Architecture de l'IBM PC compatible avec bridge ISA.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible avec bridge ISA]] Les PC de l'époque intégraient donc plusieurs bus séparés. Vous avez bien lu : plusieurs bus ! Ici, il s'agit de ce que j'appelle des '''bus en cascade''', à savoir qu'un bus est connecté à un autre bus par un intermédiaire. Au passage, si j'aborde ces exemples, car c'est pareil sur les ordinateurs modernes. Le pont ISA a été remplacé par des circuits différents, mais qui ont un rôle assez similaire. Le ''chipset'' de votre carte mère n'est qu'un lointain descendant du pont ISA, qui s'interface avec des bus différents. ===L'arrivée des standards AT et IDE pour les disques durs=== Initialement, les disques durs étaient placés dans l'ordinateur et étaient connectés sur le bus ISA, via une carte d'extension ISA. En clair, il fallait connecter le disque dur sur une carte d'extension, et non sur la carte mère. Les cartes d'extension en question permettaient de connecter un ou plusieurs disques durs, parfois des lecteurs de disquette supplémentaires. Les cartes ISA de ce type faisaient juste l'interface entre le bus ISA et les disques durs, rien de plus. L'interface en question a été standardisée, ce qui a donné le standard ''AT Bus Attachment'', qui a été abrévié en ATA. Et ce n'était pas que pour les disques durs, de nombreux composants étaient dans ce cas. Une carte d'extension servait d'intermédiaire entre eux et la carte mère. Les cartes d'extension en question étaient appelées des ''Host bus adapter''. [[File:Acculogic sIDE-4 Controller ISA.jpg|centre|vignette|upright=2|Carte ISA d'interface disque dur, de marque Acculogic.]] Mais les choses ont rapidement évoluées, que ce soit du côté des cartes mères que du côté des disques durs. Le '''standard IDE''' a permis de brancher un disque dur directement sur la carte mère, sans passer par une carte d'interface ISA. Pour cela, la carte mère réservait un connecteur ISA pour le disque dur, renommé '''connecteur ATA'''. Pour que cela soit possible, il a fallu rajouter des circuits sur la carte mère. Tout ce qui était sur les cartes d'interface ISA s'est retrouvé sur la carte mère. [[File:Ajout des ports IDE sur la carte mère.png|centre|vignette|upright=2|Ajout des ports IDE sur la carte mère]] En réalité, les connecteurs ATA étaient des connecteurs ISA simplifiés. Un connecteur ISA avait en tout 98 broches, alors qu'un connecteur ATA n'en contient que 40. Les broches qui étaient inutiles pour les disques durs ont simplement été enlevées. Et qui dit connecteur spécialisé, dit câble spécialisé. Les disques durs étaient branchés sur le connecteur AT grâce à un câble ATA, sur lequel on pouvait connecter deux disques durs. [[File:ATA Plug.svg|centre|vignette|upright=2|Connecteur ATA.]] [[File:ATA cables.jpg|centre|vignette|upright=2|Cable ATA.]] Il était donc possible de connecter deux disques durs sur un seul connecteur ATA. Et cette possibilité est devenue d'autant plus utile par la suite. A partir de la version 2, ATA supportait aussi les lecteurs de disquettes, les lecteurs de CD/DVD, et bien d'autres supports de stockage. Il était alors possible de connecter un lecteur CD et un disque dur sur un seul connecteur. Les cartes mères avaient généralement deux connecteurs ATA, et n'avaient pas besoin de plus. C'était suffisant pour connecter un disque dur, un lecteur de disquette et un lecteur CD, configuration courante entre les années 90 et 2000. Un câble est donc connecté à deux supports de stockage. Pour distinguer les deux, le standard ATA ajoute une possibilité de configuration. Sur un câble, il doit y avoir un support de stockage "maitre" et un support "esclave". C'était la terminologie de l'époque, que je reproduis ici, même si elle est fortement trompeuse. N'allez pas croire que cela implique que l'un ait des avantages sur l'autre. Le support 'maitre" n'a pas droit à plus de bande passante, il n'a pas la priorité sur l'autre, rien du tout. Il s'agit juste d'un nombre qui permet de savoir avec qui le processeur communique, qui vaut 0 pour le premier support, 1 pour l'autre. Une sorte d'adresse de 1 bit, si l'on veut. [[File:ATA-Konfiguration02.png|centre|vignette|upright=2|Configuration ATA.]] Pour configurer un support de stockage en mode "maitre" ou "esclave", le support de stockage avait quelques pins dédiés. Il suffisait de placer un détrompeur en plastique sur les pins adéquats. Les pins se trouvaient à l'arrière du disque dur ou du lecteur de CD/DVD/Disquette/autre. [[File:HDD Master and Slave Description.jpg|centre|vignette|upright=2|Configuration ''Master/Slave''.]] ===L'architecture d'un PC avec un processeur Intel 486=== Maintenant, passons aux ordinateurs 32 bits, avec l'exemple d'un PC avec un processeur 486 d'Intel. A cette époque, le bus ISA était devenu trop limité et était en place d'être remplacé par le bus PCI, qui avait la même fonction. De nombreuses cartes d'extension utilisaient déjà ce standard et étaient branchées sur des connecteurs PCI dédiés, différents des connecteurs ISA. Intuitivement, on se dit que le bus PCI remplaçait le bus ISA, mais les choses étaient plus compliquées. Les disques durs gardaient leur connecteur ATA, et ne passaient pas par le bus PCI. Ils avaient un bus IDE séparé, qui était un bus ISA modifié. Là encore, les processeurs étaient devenus beaucoup plus rapides que le bus PCI. Les deux allaient à des fréquences assez différentes, ce qui fait que le bus PCI était séparé du bus système. Il y avait alors deux implémentations possibles. * La première utilise un répartiteur unique, relié au processeur, à la RAM, au bus PCI, et au bus IDE. * La seconde utilise un bus système séparé du bus PCI, avec un '''pont PCI''' pour faire l'interface entre les deux. Le '''''System Controler''''' était un circuit intégré, placé sur la carte mère, qui peut servir soit de pont PCI, soit de répartiteur. Le répartiteur PCI sert d'intermédiaire avec le bus PCI, mais aussi avec le bus IDE, utilisé pour les disques durs, aussi appelé le bus ''Parallel ATA''. Il peut aussi être connecté au processeur, à la mémoire RAM, ainsi qu'à la mémoire cache, mais cela ne sert que quand il est utilisé comme répartiteur. [[File:Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur.png|centre|vignette|upright=2|Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur]] Pour des raisons de compatibilité, le bus ISA avait été conservé, aux côtés du bus PCI. Il y avait un pont ISA en plus du pont/répartiteur PCI. Une implémentation possible aurait été de connecter les deux ponts ISA et PCI à un bus système unique. Mais cette solution n'a pas été retenue. La raison est que le bus PCI et le bus ISA ont des performances très différentes. Le bus PCI est très rapide, le bus ISA beaucoup plus lent. La différence est d'un ordre de grandeur, environ. Dans ces conditions, il est possible de faire passer les communications ISA à travers le bus PCI. Pour cela, le pont ISA est directement connecté sur le pont PCI, comme illustré ci-dessous. Et il en est de même pour le bus dédié aux disques durs. En effet, les disques durs étaient autrefois reliés au bus ISA, mais cela a changé depuis. Ils disposent maintenant de leur propre bus dédié, le '''bus IDE''', qui est un bus ISA simplifié. Et ce bus ISA simplifié était connecté directement sur le pont PCI. [[File:Architecture de l'IBM PC compatible avec pont PCI.png|centre|vignette|upright=2|Architecture de l'IBM PC compatible avec pont PCI]] Dans ce qui va suivre, nous allons étudier un exemple qui utilise un bus système séparé, avec un pont PCI, sans répartiteur. Voilà pour les grandes lignes, mais le schéma ci-dessous montre que tout est plus complexe. Vous remarquerez des connexions optionnelles entre le pont PCI et la mémoire RAM et la mémoire cache. La raison est que le pont PCI peut aussi servir de répartiteur en remplacement du bus système. Concrètement, on peut alors retirer le bus système. La mémoire, le bus PCI, le bus ISA, le bus IDE, le processeur et la RAM sont alors connectés au répartiteur PCI, qui sert d'intermédiaire central entre tous ces composants. Mais ce n'est pas la solution qui a été retenue dans notre exemple. [[File:Intel486-Typ PCI System.png|centre|vignette|upright=2|PC IBM compatible avec un 486, un bus PCI et un bus ISA. Le ''host bus'' est le bus système.]] Le pont ISA sert ici d'intermédiaire entre le bus système et le bus ISA. De plus, il a été amélioré sur de nombreux points. Il inclut notamment des circuits qui étaient autrefois sur la carte mère, à savoir le contrôleur DMA 82C87 et le contrôleur d'interruption 82C59, ainsi que les ''timers'' Intel 82C54. Les composants restants sont eux reliés sur un quatrième bus : le bus X, l'ancêtre du bus ''Low Pin Count''. Le bus X était celui du BIOS, du contrôleur de clavier, de la ''Real Time Clock'', et du contrôleur de périphérique 82091AA d'Intel. [[File:ISA Bridge schematic.png|centre|vignette|upright=2|ISA Bridge.]] ===L'architecture des PC des années 90-2000=== Par la suite, les ponts PCI et ISA ont évolué avec l'évolution des bus de l'ordinateur. Le bus ISA a progressivement été remplacé par d'autres bus, comme le bus ''Low Pin Count'', le bus PCI a été remplacé par le PCI Express, d'autres bus ont été ajoutés, etc. Mais la séparation du ''chipset'' en deux a été conservée. [[File:Chipset schematic.svg|vignette|upright=1.0|Chipset séparé en northbridge et southbridge.]] Le pont PCI et le pont ISA ont été remplacés respectivement par le '''pont nord''' et le '''pont sud''', plus connus par leurs noms anglais de ''northbridge'' et de ''southbridge''. Le pont nord servait d'interface entre le processeur, la mémoire et la carte graphique et est connecté à chacun par un bus dédié. Il intégrait aussi le contrôleur mémoire. Le pont sud est le répartiteur pour les composants lents, à savoir l'USB, l'Ethernet, etc. Le bus qui relie le processeur au pont nord était appelé le '''''Front Side Bus''''', abrévié en FSB. [[File:IMac Chipset.png|centre|vignette|upright=2|Chipset séparé en northbridge et southbridge.]] Un point important est que le bus PCI est devenu un bus assez lent, ce qui fait qu'il a finit par être connecté au pont sud. Le pont PCI est donc devenu le pont sud, dans le courant des années 2000. Durant un moment, un équivalent du pont ISA a subsisté dans un circuit de '''''Super IO'''''. Concrètement, il s'occupait du lecteur de disquette, du port parallèle, du port série, et des ports PS/2 pour le clavier et la souris. Mais il ne gérait pas le bus ISA, mais son remplaçant, le bus ''Low Pin Count''. [[File:Motherboard diagram fr.svg|centre|vignette|upright=1.5|Carte mère avec circuit Super IO.]] ===L'architecture des PC depuis les années 2000=== Depuis la sortie du processeur AMD Athlon 64, le pont nord a été fusionné dans le processeur. La fusion ne s'est pas faite en une fois, des fonctionnalités ont progressivement été progressivement intégrées dans le processeur. Le pont sud est resté, mais il a alors été progressivement connecté directement au processeur. La raison derrière cette intégration est que les processeurs avaient de plus en plus de transistors à leur disposition. Ils en ont profité pour intégrer le pont nord. Et cela permettait de simplifier le câblage des cartes mères, sans pour autant rendre vraiment plus complexe la fabrication du processeur. Les industriels y trouvent leur compte. La première étape a été l'intégration du contrôleur mémoire a été intégré au processeur. Concrètement, le résultat était que la mémoire RAM n'était plus connectée au pont nord, mais était connectée directement au processeur ! Il y a donc eu un retour d'un bus mémoire, mais spécialisé pour la mémoire RAM. En théorie, une telle intégration permet diverses optimisations quant aux transferts avec la mémoire RAM. Les transferts ne passent pas par un répartiteur, ce qui réduit le temps d'accès à la mémoire RAM. Ajoutons de sombres histoires de prefetching, d'optimisation des commandes, et j'en passe. Toujours est-il que le pont nord ne servait alors d'intermédiaire que pour les ports PCI Express, et le pont sud. [[File:X58 Block Diagram.png|centre|vignette|upright=2|Chipset X58 d'Intel.]] Par la suite, la carte graphique fût aussi connectée directement sur le processeur. Le processeur incorpore pour cela des contrôleurs PCI-Express. Le pont nord a alors disparu complétement, son intégration dans le processeur était complète. Sur les cartes mères Intel récentes, le pont sdud subsiste, il est appelé le ''Platform Controler Hub'', ou PCH. L'organisation des bus sur la carte mère qui résulte de cette connexion du processeur à la carte graphique, est illustrée ci-dessous, avec l'exemple du PCH. [[File:Intel 5 Series architecture.png|centre|vignette|upright=2|Intel 5 Series architecture]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=L'interface électrique entre circuits intégrés et bus | prevText=L'interface électrique entre circuits intégrés et bus | next=La hiérarchie mémoire | nextText=La hiérarchie mémoire }} </noinclude> o3kmsek0yaiuom1kh9b3lkpaholzkum 765742 765741 2026-05-01T21:55:01Z Mewtow 31375 /* Les microcontrôleurs */ 765742 wikitext text/x-wiki Dans les chapitres précédents, nous avons vu comment représenter de l'information, la traiter et la mémoriser avec des circuits. Mais un ordinateur n'est pas qu'un amoncellement de circuits et est organisé d'une manière bien précise. Il est structuré autour de trois circuits principaux : * un '''processeur''', qui manipule l'information et donne un résultat ; * une '''mémoire''' qui mémorise les données à manipuler ; * les '''entrées/sorties''', qui permettent à l'ordinateur de communiquer avec l'extérieur. [[File:Architecture Von Neumann.png|centre|vignette|upright=2|Architecture d'un système à mémoire.]] Pour faire simple, le processeur est un circuit qui s'occupe de faire des calculs. Rien d'étonnant à cela. Je rappelle que tout est codé par des nombres dans un ordinateur, ce qui fait que manipuler des nombres revient simplement à faire des calculs. Un ordinateur n'est donc qu'une grosse calculatrice améliorée, et le processeur est le composant qui fait les calculs. La mémoire s'occupe purement de la mémorisation des données, des nombres sur lesquelles faire des calculs. Pour être plus précis, il y a deux mémoires : une pour les données proprement dites, une autre pour le programme à exécuter. La première est la '''mémoire RAM''', la seconde est la '''mémoire ROM'''. Nous détaillerons ce que sont ces deux mémoires dans la suite du chapitre, mais sachez que nous avions déjà rencontré ces deux types de mémoires dans les chapitres sur les registres et les mémoires adressables. Les entrées-sorties permettent au processeur et à la mémoire de communiquer avec l'extérieur et d'échanger des informations avec des périphériques. Les '''périphériques''' regroupent, pour rappel, tout ce est branché sur un ordinateur, mais n'est pas à l'intérieur de celui-ci. Le processeur, les mémoires et les entrées-sorties communiquent ensemble via un '''réseau d'interconnexions'''. Le terme est assez barbare, mais rien de compliqué sur le principe. C'est juste un ensemble de fils électriques qui relie les différents éléments d'un ordinateur. Les interconnexions sont souvent appelées le bus de communication, mais le terme est un abus de langage, comme on le verra plus bas. Afin de simplifier les explications, on va supposer que le réseau d'interconnexion est le suivant. Tout est connecté au processeur. Il y a des interconnexions entre le processeur et la mémoire RAM, d'autres interconnexions entre processeur et mémoire ROM, et d'autres entre le processeur et les entrées-sorties. Nous verrons que d'autres réseaux d'interconnexions fusionnent certaines interconnexions, pour les partager entre la ROM et la RAM, par exemple. Mais pour le moment, gardez le schéma ci-dessous en tête. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ==Les mémoires RAM et ROM== La mémoire est le composant qui mémorise des informations, des données. Dans la majorité des cas, la mémoire est composée de plusieurs '''cases mémoire''', chacune mémorisant plusieurs bits, le nombre de bits étant identique pour toutes les cases mémoire. Dans le cas le plus simple, une case mémoire mémorise un '''octet''', un groupe de 8 bits. Mais les mémoires modernes mémorisent plusieurs octets par case mémoire : elles ont des cases mémoires de 16, 32 ou 64 bits, soit respectivement 2/4/8 octets. De rares mémoires assez anciennes utilisaient des cases mémoires contenant 1, 2, 3, 4, 5, 6 7, 13, 17, 23, 36 ou 48 bits. Mais ce n'était pas des mémoires électroniques, aussi nous allons les passer sous silence. Tout ce qu'il faut savoir est que la quasi-totalité des mémoires électronique a un ou plusieurs octets par case mémoire. Pour simplifier, vous pouvez imaginer qu'une mémoire RAM est un regroupement de registre, chacun étant une case mémoire. C'est une description pas trop mauvaise pour décrire les mémoires RAM, qu'on abordera dans ce qui suit. {|class="wikitable" |+ Contenu d'une mémoire, case mémoire de 16 bits (deux octets) |- ! Case mémoire N°1 | 0001 0110 1111 1110 |- ! Case mémoire N°2 | 1111 1110 0110 1111 |- ! Case mémoire N°3 | 0001 0000 0110 0001 |- ! Case mémoire N°4 | 1000 0110 0001 0000 |- ! Case mémoire N°5 | 1100 1010 0110 0001 |- ! ... | ... |- ! Case mémoire N°1023 | 0001 0110 0001 0110 |- ! Case mémoire N°1024 | 0001 0110 0001 0110 |} Dans ce cours, il nous arrivera de partir du principe qu'il y a un octet par case mémoire, par souci de simplification. Mais ce ne sera pas systématique. De plus, il nous arrivera d'utiliser le terme adresse pour parler en réalité de la case mémoire associée, par métonymie. ===La capacité mémoire=== Bien évidemment, une mémoire ne peut stocker qu'une quantité finie de données. Et à ce petit jeu, certaines mémoires s'en sortent mieux que d'autres et peuvent stocker beaucoup plus de données que les autres. La '''capacité''' d'une mémoire correspond à la quantité d'informations que celle-ci peut mémoriser. Plus précisément, il s'agit du nombre maximal de bits qu'une mémoire peut contenir. Elle est le produit entre le nombre de cases mémoire, et la taille en bit d'une case mémoire. Toutes les mémoires actuelles utilisant des cases mémoire d'un ou plusieurs octets, ce qui nous arrange pour compter la capacité d'une mémoire. Au lieu de compter cette capacité en bits, on préfère mesurer la capacité d'une mémoire avec le nombre d'octets qu'elle contient. Mais les mémoires des PC font plusieurs millions ou milliards d'octets. Pour se faciliter la tâche, on utilise des préfixes pour désigner les différentes capacités mémoires. Vous connaissez sûrement ces préfixes : kibioctets, mébioctets et gibioctets, notés respectivement Kio, Mio et Gio. {|class="wikitable" |- !Préfixe!!Capacité mémoire en octets!!Puissance de deux |- ||Kio||1024||2<sup>10</sup> octets |- ||Mio||1 048 576||2<sup>20</sup> octets |- ||Gio||1 073 741 824||2<sup>30</sup> octets |} On peut se demander pourquoi utiliser des puissances de 1024, et ne pas utiliser des puissances un peu plus communes ? Dans la majorité des situations, les électroniciens préfèrent manipuler des puissances de deux pour se faciliter la vie. Par convention, on utilise souvent des puissances de 1024, qui est la puissance de deux la plus proche de 1000. Or, dans le langage courant, kilo, méga et giga sont des multiples de 1000. Quand vous vous pesez sur votre balance et que celle-ci vous indique 58 kilogrammes, cela veut dire que vous pesez 58 000 grammes. De même, un kilomètre est égal à 1000 mètres, et non 1024 mètres. Autrefois, on utilisait les termes kilo, méga et giga à la place de nos kibi, mebi et gibi, par abus de langage. Mais peu de personnes sont au courant de l'existence de ces nouvelles unités, et celles-ci sont rarement utilisées. Et cette confusion permet aux fabricants de disques durs de nous « arnaquer » : Ceux-ci donnent la capacité des disques durs qu'ils vendent en kilo, méga ou giga octets : l’acheteur croit implicitement avoir une capacité exprimée en kibi, mébi ou gibi octets, et se retrouve avec un disque dur qui contient moins de mémoire que prévu. ===Lecture et écriture : mémoires ROM et RWM=== Pour simplifier grandement, on peut grossièrement classer les mémoires en deux types : les ''Read Only Memory'' et les ''Read Write Memory'', aussi appelées mémoires ROM et mémoires RWM. Pour les '''mémoires ROM''', on ne peut pas modifier leur contenu. On peut y récupérer une donnée ou une instruction : on dit qu'on y accède en lecture. Mais on ne peut pas modifier les données qu'elles contiennent. Quant aux '''mémoires RWM''', on peut y accéder en lecture (récupérer une donnée stockée en mémoire), mais aussi en écriture : on peut stocker une donnée dans la mémoire, ou modifier une donnée existante. Tout ordinateur contient au minimum une ROM et une RWM (souvent une mémoire RAM), les deux n'ont pas exactement le même rôle. Pour simplifier, la mémoire ROM mémorise le programme à exécuter, la mémoire RWM stocke des données. Il a existé des ordinateurs où la mémoire RWM était une mémoire magnétique, voire acoustique, mais ce n'est plus le cas de nos jours. Pour les ordinateurs modernes, la mémoire RWM est une mémoire électronique. Pour faire la différence avec ces anciennes mémoires RWM, elle est appelée la '''mémoire RAM'''. Il s'agit d'une mémoire qui stocke temporairement des données que le processeur doit manipuler (on dit qu'elle est volatile). Elle s'efface complètement quand on coupe l'alimentation de l'ordinateur. Il existe d'autres différences entre mémoire RWM et RAM : * la mémoire RWM peut ne pas être volatile et donc conserver les données écrites ; * la mémoire RAM possède un temps d'accès constant aux données (quelle que soit l'adresse), ce qui n'est pas garanti pour les mémoires RWM. Outre le programme à exécuter, la mémoire ROM peut mémoriser des constantes, des données qui ne changent pas. Elles ne sont jamais modifiées et gardent la même valeur quoi qu'il se passe lors de l'exécution du programme. En conséquence, elles ne sont jamais accédées en écriture durant l'exécution du programme, ce qui fait que leur place est dans une mémoire ROM. La mémoire RWM est alors destinée aux données temporaires, qui changent ou sont modifiées lors de l'exécution du programme, et qui sont donc manipulées aussi bien en lecture et en écriture. La mémoire RWM mémorise alors les variables du programme à exécuter, qui sont des données que le programme va manipuler. Pour les systèmes les plus simples, la mémoire RWM ne sert à rien de plus. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Pour donner un exemple de données stockées en ROM, on peut prendre l'exemple des anciennes consoles de jeu 8 et 16 bits. Les jeux vidéos sur ces consoles étaient placés dans des cartouches de jeu, précisément dans une mémoire ROM à l'intérieur de la cartouche de jeu. La ROM mémorisait non seulement le code du jeu, le programme du jeu vidéo, mais aussi les niveaux et les ''sprites'' et autres données graphiques. Une conséquence est que les consoles 8/16 bits n'avaient pas besoin de beaucoup de RAM, comparé aux ordinateurs de l'époque, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. À l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. ===L'adressage mémoire=== Sur une mémoire RAM ou ROM, on ne peut lire ou écrire qu'une case mémoire, qu'un registre à la fois : une lecture ou écriture ne peut lire ou modifier qu'une seule case mémoire. Techniquement, le processeur doit préciser à quel case mémoire il veut accéder à chaque lecture/écriture. Pour cela, chaque case mémoire se voit attribuer un nombre binaire unique, l''''adresse''', qui va permettre de le sélectionner et de l'identifier celle-ci parmi toutes les autres. En fait, on peut comparer une adresse à un numéro de téléphone (ou à une adresse d'appartement) : chacun de vos correspondants a un numéro de téléphone et vous savez que pour appeler telle personne, vous devez composer tel numéro. Les adresses mémoires en sont l'équivalent pour les cases mémoire. [[File:Adressage mémoire.png|centre|vignette|upright=2|Exemple : on demande à la mémoire de sélectionner la case mémoire d'adresse 1002 et on récupère son contenu (ici, 17).]] L'adresse mémoire est générée par le processeur. Le processeur peut parfaitement calculer des adresses, en extraire du programme qu'il exécute, et bien d'autres choses. Nous détaillerons d'ailleurs les mécanismes pour dans les chapitres portant sur les modes d'adressage du processeur. Mais pour le moment, nous avons juste besoin de savoir que c'est le processeur qui envoie des adresses aux mémoires RAM et ROM. Les adresses générées par le processeur sont alors envoyées à la RAM ou la ROM via une connexion dédiée, un ensemble de fils qui connecte le processeur à la mémoire : le '''bus d'adresse mémoire'''. L'adresse sélectionne une case mémoire, le processeur peut alors récupérer la donnée dedans pour une lecture, écrire une donnée pour l'écriture. Pour cela, un second ensemble de fil connecte le processeur à la RAM/ROM, mais cette fois-ci pour échanger des données. Il s'agit du '''bus de données mémoire'''. Les deux sont souvent regroupés sous le terme de '''bus mémoire'''. Un ordinateur contient toujours une RAM et une ROM, ce qui demande aux bus mémoire de s'adapter à la présence de deux mémoires. Il y a alors deux solutions, illustrées dans les deux schémas ci-dessous. Avec la première, il y a un seul bus mémoire partagé entre la RAM et la ROM, comme illustré ci-dessous. Une autre solution utilise deux bus séparés : un pour la RAM et un autre pour la ROM. Nous verrons les différences pratiques entre les deux à la fin du chapitre. Pour le moment, nous allons partir du principe qu'il y a un bus pour la mémoire ROM, et un autre bus pour la RAM. [[File:CPT-System-Architecture-gapfill1-ANS.svg|centre|vignette|upright=2|Architecture avec une ROM et une RAM.]] [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ===L'alignement mémoire : introduction=== Plus haut, nous avions dit qu'il y a une adresse par case mémoire, chaque case mémoire contenant un ou plusieurs octets. Mais les processeurs modernes partent du principe que la mémoire a un octet par adresse, pas plus. Et ce même si la mémoire reliée au processeur utilise des cases mémoires de 2, 3, 4 octets ou plus. D'ailleurs, la majorité des mémoires RAM actuelle a des cases mémoires de 64 bits, soit 8 octets par case mémoire. Les raisons à cela sont multiple, mais nous les verrons en détail dans le chapitre sur l'alignement mémoire. Toujours est-il qu'il faut distinguer les '''adresses mémoire''' et les '''adresses d'octet''' gérées par le processeur. Le processeur génère des adresses d'octet, qui permettent de sélectionner un octet bien précis. L'adresse d'octet permet de sélectionner un octet parmi tous les autres. Mais la mémoire ne comprend pas directement cette adresse d'octet. Heureusement, l'octet en question est dans une case mémoire bien précise, qui a elle-même une adresse mémoire bien précise. L'adresse d'octet est alors convertie en une adresse mémoire, qui sélectionne la case mémoire adéquate, celle qui contient l'octet voulu. La case mémoire entière est lue, puis le processeur ne récupère que les données adéquates. Pour cela, des circuits d'alignement mémoire se chargent de faire la conversion entre adresses du processeur et adresse mémoire. Nous verrons cela dans le détail dans le chapitre sur l'alignement mémoire. Il existe des mémoires qui n'utilisent pas d'adresses mémoire, mais passons : ce sera pour la suite du cours. ==Le processeur== Dans les ordinateurs, l'unité de traitement porte le nom de '''processeur''', ou encore de '''''Central Processing Unit''''', abrévié en CPU. Le rôle principal du processeur est de faire des calculs. La plupart des processeurs actuels supportent au minimum l'addition, la soustraction et la multiplication. Quelques processeurs ne gèrent pas la division, qui est une opération très gourmande en circuit, peu utilisée, très lente. Il arrive que des processeurs très peu performants ne gèrent pas la multiplication, mais c'est assez rare. Un processeur ne fait pas que des calculs. Tout processeur est conçu pour effectuer un nombre limité d'opérations bien précises, comme des calculs, des échanges de données avec la mémoire, etc. Ces opérations sont appelées des '''instructions'''. Les plus intuitives sont les '''instructions arithmétiques''', qui font des calculs, comme l'addition, la soustraction, la multiplication, la division. Mais il y a aussi des '''instructions d'accès mémoire''', qui échangent des données entre la mémoire RAM et le processeur. Les autres instructions ne sont pas très intuitives, aussi passons-les sous silence pour le moment, tout deviendra plus clair dans les chapitres sur le processeur. ===Le processeur exécute un programme, une suite d'instructions=== Tout processeur est conçu pour exécuter une suite d'instructions dans l'ordre demandé, cette suite s'appelant un '''programme'''. Ce que fait le processeur est défini par la suite d'instructions qu'il exécute, par le programme qu'on lui demande de faire. Les instructions sont exécutées dans un ordre bien précis, les unes après les autres. L'ordre en question est décidé par le programmeur. La totalité des logiciels présents sur un ordinateur sont des programmes comme les autres. Le programme à exécuter est stockée dans la mémoire de l'ordinateur. C'est ainsi que l'ordinateur est rendu programmable : modifier le contenu de la mémoire permet de changer le programme exécuté. Mine de rien, cette idée de stocker le programme en mémoire est ce qui a fait que l’informatique est ce qu'elle est aujourd’hui. C'est la définition même d'ordinateur : appareil programmable qui stocke son programme dans une mémoire modifiable. Une instruction est codée comme les données : sous la forme de suites de bits. Telle suite de bit indique qu'il faut faire une addition, telle autre demande de faire une soustraction, etc. Pour simplifier, nous allons supposer qu'il y a une instruction par adresse mémoire. Sur la grosse majorité des ordinateurs, les instructions sont placées les unes à la suite des autres dans l'ordre où elles doivent être exécutées. Un programme informatique n'est donc qu'une vulgaire suite d'instructions stockée quelque part dans la mémoire de l'ordinateur. {|class="wikitable" |+ Exemple de programme informatique |- ! Adresse ! Instruction |- ! 0 | Copier le contenu de l'adresse 0F05 dans le registre numéro 5 |- ! 1 | Charger le contenu de l'adresse 0555 dans le registre numéro 4 |- ! 2 | Additionner ces deux nombres |- ! 3 | Charger le contenu de l'adresse 0555 |- ! 4 | Faire en XOR avec le résultat antérieur |- ! ... | ... |- ! 5464 | Instruction d'arrêt |} Pour exécuter une suite d'instructions dans le bon ordre, le processeur détermine à chaque cycle quelle est la prochaine instruction à exécuter. Pour cela, le processeur mémorise l'adresse de l'instruction en cours dans un registre : le '''Program Counter'''. Je rappelle que des instructions consécutives sont dans des adresses consécutives. Pour passer à la prochaine instruction, il suffit donc d'incrémenter le ''program counter''. : Si une instruction prend plusieurs octets, plusieurs adresses, il suffit de l'incrémenter du nombre d'octets/adresses. D'autres processeurs font autrement : chaque instruction précise l'adresse de la suivante, directement dans la suite de bit représentant l'instruction en mémoire. Ces processeurs n'ont pas besoin de calculer une adresse qui leur est fournie sur un plateau d'argent. Sur des processeurs aussi bizarres, pas besoin de stocker les instructions en mémoire dans l'ordre dans lesquelles elles sont censées être exécutées. Mais ces processeurs sont très très rares et peuvent être considérés comme des exceptions à la règle. Nous venons de voir qu'un processeur contient un registre appelé le ''program counter''. Mais il n'est pas le seul. Pour pouvoir fonctionner, tout processeur doit mémoriser un certain nombre d’informations nécessaires à son fonctionnement, qui sont mémorisées dans des '''registres de contrôle'''. La plupart ont des noms assez barbares (registre d'état, ''program counter'') et nous ne pouvons pas en parler à ce moment du cours. Nous les verrons en temps voulu, mais il est important de préciser qu'ils existent. ===L'intérieur d'un processeur=== Fort de ce que nous savons, nous pouvons expliquer ce qu'il y a à l'intérieur d'un processeur. Le premier point est qu'un processeur fait des calculs, ce qui implique qu'il contient des circuits de calcul. Ils sont regroupés dans une ou plusieurs '''unités de calcul'''. Nous avons déjà vu comment fabriquer une unité de calcul simple, dans un chapitre dédié, et c'est la même qui est présente dans un processeur. Du moins dans les grandes lignes, les circuits des processeurs modernes étant particulièrement optimisés. Il en est de même pour les autres circuits de calcul comme ceux pour les multiplications/division/autres. Si le processeur fait des calculs, qu'en est-il des opérandes ? Et où sont mémorisés les résultats des opérations ? Pour cela, le processeur incorpore des '''registres généraux'''. Les registres généraux servent à mémoriser les opérandes et résultats des instructions. Ils mémorisent des données, contrairement aux registres de contrôle mentionnés plus haut. Le nombre de registres généraux dépend grandement du processeur. Les tout premiers processeurs se débrouillaient avec un seul registre, mais les processeurs actuels utilisent plusieurs registres, pour mémoriser plusieurs opérandes/résultats. Mais la présence de registres est source de pas mal de petites complications. Par exemple, il faut échanger les données entre la RAM et les registres, il faut gérer l'adressage des registres, etc. Il s'agit là de détails que nous expliquerons dans les chapitres sur le processeur. Le processeur contient enfin un circuit pour interpréter les instructions, appelé l''''unité de contrôle'''. Elle lit les instructions depuis la mémoire, interprète la suite de bit associée, et commande le reste du processeur pour qu'il exécute l'instruction. Ses fonctions sont assez variées, mais nous allons simplifier en disant qu'elle configure l'unité de calcul et les registres pour faire le bon calcul. Son rôle est d'analyser la suite de bit qui constitue l'instruction, et d'en déduire quelle opération effectuer. Elle gère aussi l'accès à la mémoire RAM, et notamment ce qui est envoyé sur son bus d'adresse. : Dans ce qui suit, on suppose que le ''program counter'' fait partie de l'unité de contrôle. Pour résumer, un processeur contient une unité de calcul, des registres et une interface avec la mémoire RAM. Le tout est interconnecté, afin de pouvoir échanger des données. L’ensemble forme le '''chemin de données''', nom qui trahit le fait que c'est là que les données se déplacent et sont traitées. Il faut aussi ajouter l'unité de contrôle pour commander le tout. Elle lit les instructions en mémoire, puis commande le chemin de données pour que l'instruction soit exécutée correctement. [[File:Microarchitecture d'un processeur.png|centre|vignette|upright=2|Microarchitecture d'un processeur]] Un processeur parait donc assez simple expliqué comme ça, mais il y a de nombreuses subtilités. L'une d'entre elle est liée aux registres, et notamment à la manière dont on les utilise. Pour expliquer ces subtilités, nous allons voir comment les premiers processeurs fonctionnaient, avant de passer aux processeurs un peu plus modernes. Les tout premiers processeurs n'utilisaient qu'un seul registre, ce qui fait que l'utilisation des registres était très simple. Le passage à plusieurs registres a complexifié le tout. ===D'où viennent les adresses ?=== Il est maintenant temps de répondre à une question qui s'était posée dans la section sur l'adressage : d'où viennent les adresses envoyées à la mémoire ? Pour ce qui est des adresses des instructions, on connait déjà la réponse : c'est le ''program counter'' qui gère tout. Mais pour les données, il y a deux possibilités, qui correspondent à deux types de données : les données statiques et les données dynamiques. Les '''données statiques''' sont les plus simples : elles existent durant toute la durée de vie du programme. Tant que celui-ci s'exécute, il aura besoin de ces données. En conséquence, il leur réserve une place en mémoire, qui est toujours la même. La donnée se situe donc à une adresse bien précise, qui ne change jamais. Attention cependant : les données peuvent être modifiées, changer de valeur. Le programme écrit dans les donnée statiques, c'est même assez fréquent. Ce sont ne sont pas forcément des données constantes ! Pour les données statiques, elles sont toujours placées à la même adresse mémoire. Pour le dire autrement, l'adresse mémoire est une constante, qui ne change pas. L'adresse est connue avant d’exécuter le programme, le programme a été codé pour utiliser cette adresse pour telle donnée, on a réservé une adresse pour la donnée voulue. Et même si vous quittez le programme et vous le relancez plusieurs jours après, l'adresse mémoire sera la même avant et après. Et cela permet d'utiliser l''''adressage direct'''. L'idée est que les instructions précisent donc l'adresse à lire ou écrire. Pour cela, l'adresse est intégrée dans l’instruction elle-même. Pour rappel, l'instruction est codée par une suite de bit en mémoire RAM/ROM, dont certains précisent l'opération à faire, les autres servant à autre chose. L'idée est que certains bits précisent l'adresse mémoire de la donnée à lire. Les instructions sont donc du genre : * ''LOAD 56'' - lit l'adresse numéro 56 et copie son contenu dans un registre; * ''STORE R5 , adress 99'', copie le registre R5 dans l'adresse 99 ; * ''ADD R5 , adress 209'' : additionne le registre R5 avec le contenu de l'adresse 209. S'il existe des données statiques, c'est signe qu'il existe des '''données dynamiques'''. Ces dernières sont des données qui sont créées ou détruites selon les besoins. Pour comprendre d'où viennent ces données dynamiques, prenons le cas d'une personne qui écrit du texte sur un ordinateur. Le texte qu'il écrit est mémorisé dans la RAM de l’ordinateur, puis est sauvegardé sur le disque dur quand il sauvegarde son document. Au fur et à mesure qu'il écrit du texte, la RAM utilisée par ce texte augmente. Donc, ce texte est une donnée dynamique, dont la taille varie dans le temps. Pour gérer des données dynamiques, la plupart des systèmes d'exploitation incorporent des fonctionnalités d''''allocation mémoire'''. Derrière ce nom barbare, se cache quelque chose de simple : les programmes peuvent réclamer de la mémoire au système d'exploitation, pour y placer les données qu'ils souhaitent. Les langages de programmation bas niveau supportent des fonctions comme malloc(), qui permettent de demander un bloc de mémoire de N octets à l'OS, qui doit alors accommoder la demande. De même, un programme peut libérer de la mémoire qu'il n'utilise plus avec des fonctions comme free(). Avec l'allocation mémoire, les données n'ont pas de place fixe en mémoire. Leur adresse mémoire peut varier d'une exécution du programme à l'autre. Pire que ça : les données peuvent être déplacées dans la mémoire RAM, si besoin. En clair : l'adresse est déterminée lors de l'exécution du programme. L'adresse est alors soit calculée, soit lue depuis la mémoire RAM, soit déterminée autrement. Toujours est-il qu'elle se retrouve dans un registre général. Pour gérer ces adresse variables, les processeurs utilisent l''''adressage indirect'''. L'adressage indirect permet d'utiliser une adresse qui est dans un registre de données. L'adresse en question peut être envoyée à la mémoire RAM sans problème, le processeur peut automatiquement connecter le registre adéquat sur le bus d'adresse. Au tout début de l'informatique, les processeurs ne supportaient que l'adressage direct, pas plus. L'adressage indirect n'était tout simplement pas possible. Avec l'adressage direct, l'adresse à lire est extraite directement des instructions, par l'unité de contrôle. Le bus d'adresse de la RAM est alors relié directement à l'unité de contrôle, le bus de données est relié aux registres. [[File:Architecture Harvard avec adressage direct uniquement.png|centre|vignette|upright=2|Architecture Harvard avec adressage direct uniquement]] Mais dès les années 70, l'adressage indirect est apparu, rendant la programmation bien plus simple. Mais cela a demandé quelques adaptation au niveau du processeur. Avec l'adressage indirect, le bus d'adresse est connecté aux registres. Il a donc fallu rajouter un multiplexeur pour que le processeur décide de relier le bus d'adresse soit aux registres, soit à l'unité de contrôle. ===Un ordinateur peut avoir plusieurs processeurs=== La plupart des ordinateurs n'ont qu'un seul processeur, ce qui fait qu'on désigne avec le terme d''''ordinateurs mono-processeur'''. Mais il a existé (et existe encore) des '''ordinateurs multi-processeurs''', avec plusieurs processeurs sur la même carte mère. L'idée était de gagner en performance : deux processeurs permettent de faire deux fois plus de calcul qu'un seul, quatre permettent d'en faire quatre fois plus, etc. C'est très courant sur les supercalculateurs, des ordinateurs très puissants conçus pour du calcul industriel ou scientifique, mais aussi sur les serveurs ! Dans le cas le plus courant, ils utilisent plusieurs processeurs identiques : on utilise deux processeurs Core i3 de même modèle, ou quatre Pentium 3, etc. Pour utiliser plusieurs processeurs, les programmes doivent être adaptés. Pour cela, il y a plusieurs possibilités : * Une première possibilité, assez intuitive, est d’exécuter des programmes différents sur des processeurs différents. Par exemple, on exécute le navigateur web sur un processeur, le lecteur vidéo sur un autre, etc. * La seconde option est de créer des programmes spéciaux, qui utilisent plusieurs processeurs. Ils répartissent les calculs à faire sur les différents processeurs. Un exemple est la lecture d'une vidéo sur le web : un processeur peut télécharger la vidéo pendant le visionnage et bufferiser celle-ci, un autre processeur peut décoder la vidéo, un autre décoder l'audio. De tels programmes restent des suites d'instructions, mais ils sont plus complexes que les programmes normaux, aussi nous les passons sous silence. * La troisième option est d’exécuter le même programme sur les différents processeurs, mais chaque processeur traite son propre ensemble de données. Par exemple, pour un programme de rendu 3D, quatre processeurs peuvent s'occuper chacun d'une portion de l'image. [[File:Architecture de Von Neumann Princeton multi processeurs.svg|centre|vignette|upright=2|Architecture de Von Neumann Princeton multi processeurs]] De nos jours, les ordinateurs grand public les plus utilisés sont dans un cas intermédiaire, ils ne sont ni mono-, ni multi-processeur. Ils n'ont qu'un seul processeur, dans le sens où si on ouvre l'ordinateur et qu'on regarde la carte mère, il n'y a qu'un seul processeur. Mais ce processeur est en réalité assez similaire à un regroupement de plusieurs processeurs dans le même boitier. Il s'agit de '''processeurs multicœurs''', qui contiennent plusieurs cœurs, chaque cœur pouvant exécuter un programme tout seul. La différence entre cœur et processeur est assez difficile à saisir, mais pour simplifier : un cœur est l'ensemble des circuits nécessaires pour exécuter un programme. Chaque cœur dispose de toute la machinerie électronique pour exécuter un programme, à savoir des circuits aux noms barbares comme : un séquenceur d'instruction, des registres, une unité de calcul. Par contre, certains circuits d'un processeur ne sont présents qu'en un seul exemplaire dans un processeur multicœur, comme les circuits de communication avec la mémoire ou les circuits d’interfaçage avec la carte mère. Suivant le nombre de cœurs présents dans notre processeur, celui-ci sera appelé un processeur double-cœur (deux cœurs), quadruple-cœur (4 cœurs), octuple-cœur (8 cœurs), etc. Un processeur double-cœur est équivalent à avoir deux processeurs dans l'ordinateur, un processeur quadruple-cœur est équivalent à avoir quatre processeurs dans l'ordinateur, etc. Ces processeurs sont devenus la norme dans les ordinateurs grand public et les logiciels et systèmes d'exploitation se sont adaptés. ===Les coprocesseurs=== Quelques ordinateurs assez anciens disposaient de '''coprocesseurs''', des processeurs qui complémentaient un processeur principal. Les ordinateurs de ce type avaient un processeur principal, le '''CPU''', qui était secondé par un ou plusieurs coprocesseurs. Sauf exception, le CPU et le coprocesseur exécutent des programmes différents, ils travaillent en parallèle. Les coprocesseurs les plus connus sont les '''coprocesseurs pour le rendu 2D/3D'''. Ils ont eu leur heure de gloire sur les anciennes consoles de jeux vidéo, comme Super Nintendo, la Playstation et autres consoles de cette génération ou antérieure. Ils s'occupaient respectivement de calculer les graphismes des jeux vidéos. De nos jours, ils ont été remplacés par des cartes graphiques, ou des ''Graphic Processing Units'', qui ne sont pas considérées comme des coprocesseurs. Les '''coprocesseurs sonores''' sont une sorte d'ancêtre des cartes son, utilisés sur les anciennes consoles de jeux vidéo, comme La Nintendo 64, la Playstation et autres consoles antérieures. Ils s'occupaient respectivement de calculer tout ce qui a trait au son. Pour donner un exemple, on peut citer la console Neo-géo, qui disposait de deux processeurs travaillant en parallèle : un processeur principal, et un coprocesseur sonore. Le processeur principal était un Motorola 68000, alors que le coprocesseur sonore était un processeur Z80. L'accès aux périphériques est quelque chose sur lequel nous passerons plusieurs chapitres dans ce cours. Mais sachez que l'accès aux périphériques peut demander pas mal de puissance de calculs. Le CPU principal peut faire ce genre de calculs par lui-même, mais il n'est pas rare qu'un '''coprocesseur d'IO''' soit dédié à l'accès aux périphériques. Un exemple assez récent est celui de la console de jeu Nintendo 3DS. Elle disposait d'un processeur principal de type ARM9, d'un coprocesseur pour les divisions qu'on abordera plus bas, et d'un second processeur ARM7. L'ARM 7 était utilisé comme coprocesseur d'I/O, ainsi que pour l'émulation de la console GBA. [[File:Asmp 2.gif|centre|vignette|upright=2|Co-processeur pour l'accès aux entrées-sorties.]] Les '''coprocesseurs arithmétiques''' sont un peu à part des autres. Ils sont spécialisés dans les calculs en virgule flottante. Ils étaient utilisés à une époque où les CPU ne géraient que des calculs entiers (en binaire ou en BCD). Un exemple est le coprocesseur flottant x87, complémentaire des premiers processeurs Intel x86. Il y a eu la même chose sur les processeurs Motorola 68000, avec deux coprocesseurs flottants appelés les Motorola 68881 et les Motorola 68882. Un exemple récent de coprocesseur est celui utilisé sur la console de jeu Nintendo DS. La console utilisait deux processeurs, un ARM9 et un ARM7, qui ne pouvaient pas faire de division entière. Il s'agit pourtant d'opérations importantes dans le cas du rendu 3D, ce qui fait que les concepteurs de la console ont rajouté un coprocesseur spécialisé dans les divisions entières et les racines carrées. Le coprocesseur était adressable directement par le processeur, comme peuvent l'être la RAM ou les périphériques. ==Les entrées-sorties== Tous les circuits vus précédemment traitent des données codées en binaire. Ceci dit, les données ne sortent pas de n'importe où : l'ordinateur contient des composants électroniques qui traduisent des informations venant de l’extérieur en nombres. Ces composants sont ce qu'on appelle des '''entrées'''. Par exemple, le clavier est une entrée : l'électronique du clavier attribue un nombre entier (''scancode'') à une touche, nombre qui sera communiqué à l’ordinateur lors de l'appui d'une touche. Pareil pour la souris : quand vous bougez la souris, celle-ci envoie des informations sur la position ou le mouvement du curseur, informations qui sont codées sous la forme de nombres. La carte son évoquée il y a quelques chapitres est bien sûr une entrée : elle est capable d'enregistrer un son, et de le restituer sous la forme de nombres. S’il y a des entrées, on trouve aussi des '''sorties''', des composants électroniques qui transforment des nombres présents dans l'ordinateur en quelque chose d'utile. Ces sorties effectuent la traduction inverse de celle faite par les entrées : si les entrées convertissent une information en nombre, les sorties font l'inverse : là où les entrées encodent, les sorties décodent. Par exemple, un écran LCD est un circuit de sortie : il reçoit des informations, et les transforme en image affichée à l'écran. Même chose pour une imprimante : elle reçoit des documents texte encodés sous forme de nombres, et permet de les imprimer sur du papier. Et la carte son est aussi une sortie, vu qu'elle transforme les sons d'un fichier audio en tensions destinées à un haut-parleur : c'est à la fois une entrée, et une sortie. Les '''entrées-sorties''' incluent toutes les entrées et sorties, et même certains composants qui sont les deux à la fois. Il s'agit d'un terme générique, qui regroupe des composants forts différents. Dans ce qui va suivre, nous allons parfois parler de périphériques au lieu d'entrées-sorties, mais les deux termes ne sont pas équivalents. Dans le détail, les entrées-sorties regroupent : * Les '''périphériques''' sont les composants connectés sur l'unité centrale. Exemple : les claviers, souris, webcam, imprimantes, écrans, clés USB, disques durs externes, la Box internet, etc. * Les '''cartes d'extension''', qui se connectent sur la carte mère via un connecteur, comme les cartes son ou les cartes graphiques. * D'autres composants sont soudés à la carte mère mais sont techniquement des entrées-sorties : les cartes sons soudées sur les cartes mères actuelles, par exemple. ===L'interface avec le reste de l'ordinateur=== Les entrées-sorties sont très diverses, fonctionnent très différemment les unes des autres. Mais du point de vue du reste de l'ordinateur, les choses sont relativement standardisées. Du point de vue du processeur, les entrées-sorties sont juste des paquets de registres ! Tous les périphériques, toutes les entrées-sorties contiennent des '''registres d’interfaçage''', qui permettent de faire l'intermédiaire entre l'entrée/sortie et le reste de l'ordinateur. L'entrée/sortie est conçu pour réagir automatiquement quand on écrit dans ces registres. [[File:Registres d'interfaçage.png|centre|vignette|upright=2|Registres d'interfaçage.]] Les registres d’interfaçage sont assez variés. Les plus évidents sont les '''registres de données''', qui permettent l'échange de données entre le processeur et les périphériques. Pour échanger des données avec l'entrée/sortie, le processeur a juste à lire ou écrire dans ces registres de données. On trouve généralement un registre de lecture et un registre d'écriture, mais il se peut que les deux soient fusionnés en un seul registre d’interfaçage de données. Si le processeur veut envoyer une donnée à une entrée/sortie, il a juste à écrire dans ces registres. Inversement, s'il veut lire une donnée, il a juste à lire le registre adéquat. Mais le processeur ne fait pas que transmettre des données à l'entrée/sortie. Le processeur lui envoie aussi des « commandes », des valeurs numériques auxquelles l'entrée/sortie répond en effectuant un ensemble d'actions préprogrammées. En clair, ce sont l'équivalent des instructions du processeur, mais pour l'entrée/sortie. Par exemple, les commandes envoyées à une carte graphique peuvent être : affiche l'image présente à cette adresse mémoire, calcule le rendu 3D à partir des données présentes dans ta mémoire, etc. Pour recevoir les commandes, l'entrée/sortie contient des ''registres de commande'' qui mémorisent les commandes envoyées par le processeur. Quand le processeur veut envoyer une commande à l'entrée/sortie, il écrit la commande en question dans ce ou ces registres. Enfin, beaucoup d'entrée/sortie ont un ''registre d'état'', lisible par le processeur, qui contient des informations sur l'état de l'entrée/sortie. Ils servent notamment à indiquer au processeur que l'entrée/sortie est disponible, qu'il est en train d’exécuter une commande, qu'il est occupé, qu'il y a un problème, qu'il y a une erreur de configuration, etc. ===Les adresses des registres d’interfaçage=== Les registres des périphériques sont identifiés par des adresses mémoires. Et les adresses sont conçues de façon à ce que les adresses des différentes entrées/sorties ne se marchent pas sur les pieds. Chaque entrée/sortie, chaque registre, chaque contrôleur a sa propre adresse. D'ordinaire, certains bits de l'adresse indiquent quel est le destinataire. Certains indiquent quel est l'entrée/sortie voulue, les restants indiquant le registre de destination. Il existe deux organisations possibles pour les adresses des registres d’interfaçages. La première possibilité est de séparer les adresses pour les registres d’interfaçage et les adresses pour la mémoire. Le processeur doit avoir des instructions séparées pour gérer les périphériques et adresser la mémoire. Il a des instructions de lecture/écriture pour lire/écrire en mémoire, et d'autres pour lire/écrire les registres d’interfaçage. Sans cela, le processeur ne saurait pas si une adresse est destinée à un périphérique ou à la mémoire. [[File:Espaces d'adressages séparés entre mémoire et périphérique.png|centre|vignette|upright=2.5|Espaces d'adressages séparés entre mémoire et périphérique]] L'autre méthode mélange les adresses mémoire et des entrées-sorties. Si on prend par exemple un processeur de 16 bits, où les adresses font 16 bits, alors les 65536 adresses possibles seront découpées en deux portions : une partie ira adresser la RAM/ROM, l'autre les périphériques. On parle alors d''''entrées-sorties mappées en mémoire'''. L'avantage est que le processeur n'a pas besoin d'avoir des instructions séparées pour les deux. [[File:IO mappées en mémoire.png|centre|vignette|upright=2.0|IO mappées en mémoire]] Pour résumer, communiquer avec une entrée/sortie est similaire à ce qu'on a avec les mémoires. Il suffit de lire ou écrire dans des registres d’interfaçage, qui ont chacun une adresse mémoire. Le problème est que le système d'exploitation ne connaît pas toujours le fonctionnement d'une entrée/sortie : il faut installer un programme qui va s'exécuter quand on souhaite communiquer avec l'entrée/sortie, et qui s'occupera de tout ce qui est nécessaire pour le transfert des données, l'adressage du périphérique, etc. Ce petit programme est appelé un driver ou '''pilote de périphérique'''. La « programmation » périphérique est très simple : il suffit de savoir quoi mettre dans les registres, et c'est le pilote qui s'en charge. ==Les architectures Harvard et Von Neumann== Après avoir vu le processeur, les mémoires et les entrées-sorties, voyons voir comment le tout est interconnecté. Tous les ordinateurs ne sont pas organisés de la même manière, pour ce qui est de leurs bus. Mais pour comprendre pourquoi, nous devons regarder qui communique avec qui, dans un ordinateur. Pour rappel, les données sont placées en mémoire RAM, alors que les instructions sont placées en mémoire ROM. Le processeur lit des instructions dans la mémoire ROM, il lit et écrit dans la mémoire RAM, et accède aux registres d’interfaçage des entrées-sorties. Il y a donc besoins de trois interconnexions : CPU-ROM, CPU-RAM et CPU-IO. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] Il parait intéressant d'utiliser trois interconnexions, au minimum CPU-ROM, CPU-RAM et CPU-IO. Néanmoins, faire ainsi a de nombreux désavantages. Déjà, il faut pouvoir brancher tout ça sur le processeur. Et celui-ci n'a pas forcément assez de broches pour. Aussi, il est parfois préférable de mutualiser des bus, à savoir de connecter plusieurs composants sur un même bus. Par exemple, on peut mutualiser le bus pour la mémoire RAM et pour la mémoire ROM. Il faut dire que les deux bus sont des bus mémoire, avec un bus d'adresse, un bus de données, et surtout : des bus de commande similaires. Les mutualiser est alors très simple, et permet d'économiser pas mal de broches. [[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre et une architecture Harvard]] Cette mutualisation nous amène naturellement à parler de la distinction entre les architectures Harvard d'un côté et les architectures Von Neumann de l'autre. Elle est très liée au fait d'utiliser soit un bus mémoire unique, soit des bus séparés pour la ROM et la RAM. Voyons cela en détail. ===Les architectures Harvard et Von Neumann : des bus séparés ou unifiés=== Avec l''''architecture Harvard''', la mémoire ROM et la mémoire RAM sont reliées au processeur par deux bus séparés. Il y a un bus RAM pour la mémoire RAM, un bus ROM pour la mémoire ROM. L'avantage de cette architecture est qu'elle permet de charger une instruction et une donnée simultanément : une instruction chargée sur le bus relié à la mémoire programme, et une donnée chargée sur le bus relié à la mémoire de données. Et cela simplifie fortement la conception du processeur. [[File:Harvard Architecture.png|centre|vignette|upright=2|Architecture Harvard, avec une ROM et une RAM séparées.]] Avec l''''architecture Von Neumann''', mémoire ROM et mémoire RAM sont reliées au processeur par un bus unique. Le bus unique qui relie processeur, RAM et ROM, s'appelle le '''bus mémoire'''. Un défaut de ces architecture est qu'elles ne peuvent pas charger une instruction et une donnée en même temps. Et cela pose quelques problèmes pour la conception du processeur. Par contre, nous verrons dans ce qui suit qu'utiliser un bus mémoire partagé est bien plus flexible et permet des choses que les architectures Harvard ne peuvent pas faire. [[File:Architecture Von Neumann, avec deux bus séparés.png|centre|vignette|upright=2|Architecture Von Neumann, avec deux bus séparés.]] ===Les architectures Harvard et Von Neumann : des espaces d'adressage séparés ou unifiés=== La distinction précédente se base sur les connexions entre RAM, ROM et processeur. Mais il existe une autre distinction, très liée, qui est souvent utilisée comme seconde définition des architectures Harvard/Von Neumann. Elle est liée aux adresses mémoire que le processeur peut gérer. Prenons un processeur 16 bits, par exemple, qui gère naturellement des adresses de 16 bits. Il peut gérer 2^16 adresses, soit 64 kibioctets de mémoire. L'ensemble de ces adresses est appelé un '''espace d'adressage'''. Mais comment cet espace d'adressage est utilisé pour adresser une RAM et une ROM ? Sur les architectures Harvard, le processeur voit deux mémoires séparées avec leur lot d'adresses distinctes. Une même adresse peut donc correspondre soit à la mémoire ROM, soit à la mémoire RAM, suivant le bus utilisé. L'espace d'adressage est donc doublé, dupliqué, avec un pour la ROM, un autre pour la RAM. Rien d'étonnant à cela : il y a deux bus d'adresses, chacun correspondant à un espace d'adressage. [[File:Vision de la mémoire par un processeur sur une architecture Harvard.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Harvard.]] Avec l'architecture Von Neumann, la RAM et la ROM doivent se partager les adresses mémoires disponibles. Il n'y a qu'un seul espace d'adressage qui est coupé en deux, avec une partie pour la ROM et une autre pour la RAM. Une adresse correspond soit à la mémoire RAM, soit à la mémoire ROM, mais pas aux deux. Typiquement, la mémoire ROM occupe une partie des adresses, la mémoire RAM utilise le reste. La répartition des adresses est réalisée par les circuits de décodage d'adresse mentionnés plus haut. [[File:Vision de la mémoire par un processeur sur une architecture Von Neumann.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Von Neumann.]] Les '''architectures Harvard modifiées''' sont des intermédiaires entre architectures Harvard et architectures Von Neumann, bien qu'elles penchent bien plus du côté des architectures Harvard. Précisons que la terminologie n'est pas claire, beaucoup d'auteurs mettent des définitions différentes derrière ces deux termes. Mais dans ce cours, nous utiliserons une définition très stricte de ce qu'est une architecture Harvard modifiée. Une architecture Harvard modifiée est une architecture Harvard, où le processeur peut lire des données constantes depuis la mémoire ROM. Nous avions vu plus haut que les mémoires ROM peuvent mémoriser, en plus d'un programme exécutable, des données constantes, qui ne varient pas. Les architectures Harvard pures ne permettent pas de lire des données de ce genre depuis la mémoire ROM, alors que les architectures Harvard modifiées le permettent. Une architecture Harvard modifiée dispose d'une instruction pour lire les données en mémoire RWM, et d'une instruction pour lire des données en mémoire ROM. Il y a donc deux versions de l'instruction LOAD, qui copient la donnée dans un registre général, mais dont la source de la donnée est différente. Une autre possibilité, plus rare, est que une instruction de copie, qui copie une constante depuis la mémoire ROM vers la mémoire RAM. Le cas le plus commun est l'utilisation de deux instructions LOAD séparées. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Ceci étant dit, revenons à la distinction entre architecture Harvard et Von Neumann. Il faut noter que la RAM et la ROM n'ont pas forcément la même taille. Et ce que ce soit sur une architecture Harvard que sur une architecture Von Neumann, mais c'est plus facile à expliquer sur une architecture Harvard. On peut par exemple imaginer une architecture Harvard qui utilise des adresses de 16 bits pour la ROM, et seulement 8 bits pour la RAM. Le résultat est qu'il peut adresser 64 kibioctets de ROM, mais seulement 256 octets de RAM. Les deux bus d'adresse sont alors de taille différente, l'un faisant 8 bits, l'autre 16. Quelques processeurs 8 bits étaient dans ce cas, comme on le verra dans le chapitre sur les CPU 8bits. Mais d'autres processeurs utilisent des valeurs différentes, avec par exemple des adresses de 16 bits pour la RAM, mais de 20 bits pour la ROM, ou inversement. Sur une architecture Von Neumann, tout dépend de comment les adresses sont réparties. La solution la plus simple découpe l'espace d'adressage en deux parties égales, avec la RAM qui est dans la moitié basse (qui part de l'adresse 0 jusqu'à l'adresse au milieu), alors que la ROM est dans la moitié haute (entre l'adresse du milieu et l'adresse maximale). Mais ce n'est pas la seule possibilité, la limite entre RAM et ROM peut être mise n'importe où. Prenons par exemple un processeur 32 bits, capable de gérer 4 milliards d'adresse. Il est parfaitement possible de réserver 128 mébioctets de poids fort à la mémoire ROM, et de laisser le reste à la mémoire RAM. ===Le décodage d'adresse sur les architectures Von Neumann=== Pour résumer, les architectures Harvard et Von Neumann se distinguent sur deux points : * L'accès à la RAM et à la ROM se font par des bus séparés sur l'architecture Harvard, sur le même bus avec l'architecture Von Neumann. * Les adresses pour la mémoire ROM et la mémoire RAM sont séparées sur les architectures Harvard, partagées sur l’architecture Von Neumann. Les architectures Von Neumann utilisent donc un seul bus pour connecter la RAM et la ROM au processeur. Mais cela ne parait pas intuitif : comment deux composants peuvent se connecter aux mêmes fils ? Parce que c'est ce qu'implique le fait de partager un bus. Si je prends une mémoire RAM et une mémoire ROM, toutes deux de 8 bits, elles seront connectées à un bus mémoire de 8 bits. Intuitivement, on se dit qu'il y aura des conflits, du genre : la RAM et la ROM vont accéder au bus en même temps, comment savoir si une adresse est destinée à la RAM ou la ROM, etc ? Tous ces problèmes sont résolus avec une solution très simple : à chaque instant, seule une mémoire est connectée au bus. L'idée est que les mémoires sont connectées ou déconnectées du bus selon les besoins. Si le processeur veut envoyer lire une donnée en mémoire RAM, il déconnecte la mémoire ROM du bus. Et inversement, s'il veut lire une instruction, il déconnecte la RAM et connecte la ROM. Pour cela, les mémoires RAM et ROM possèdent une entrée ''Chip Select'' ou ''Output Enable'', qui agit comme une sorte de bouton ON/OFF. Lorsqu'on met un 1 sur cette entrée, la mémoire se connectera au bus. Ses entrées et sorties fonctionneront normalement, elle pourra recevoir des adresses, envoyer ou recevoir des données, tout sera normal. Par contre, si on met un 0 sur cette entrée, la mémoire se "désactive", ses entrée-sorties ne répondent plus aux sollicitations extérieures. Pire que ça : elles sont électriquement déconnectées. Au total, tout cela demande de gérer deux bit ''Chip Select''/''Output Enable'' : un pour la RAM, un pour la ROM. Et ces deux bits sont configurés pour chaque accès mémoire, pour chaque lecture ou écriture. Pour cela, un circuit de '''décodage d'adresse''' prend en entrée l'adresse mémoire à lire/écrire, et active/désactive les mémoires RAM/ROM selon les besoins. Il prend l'adresse et configure les bits ''Chip Select''/''Output Enable''. [[File:Décodage d'adresse sur une architecture Von Neumann.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann.]] L'implémentation la plus simple réserve la moitié des adresses pour la RAM, l'autre moitié pour la ROM. Typiquement, la ROM prend la moitié basse, la RAM la moitié haute. Dans ce cas, activer/désactiver la RAM et la ROM se fait avec seulement le bit de poids fort de l'adresse. Si le bit de poids fort est à 1, alors on accède à la RAM et la ROM doit être désactivée. Mais si ce bit est à 0, alors on accède à la moitié basse et il faut désactiver la RAM. Une remarque intéressante : le fait de séparer la mémoire en deux parts égales permet de simuler une architecture Harvard à partir d'une architecture Von Neumann. Par exemple, le tout premier processeur d'Intel, le 4004, était l'un de ceux là. La RAM et la ROM sont reliés au même bus, et il y a donc un unique espace d'adressage, qui est séparé en deux parties égales. Le truc est que le processeur traite les deux parties égales comme deux espaces d'adressage séparés. Le processeur se débrouille pour cacher le fait qu'il y a un espace d'adressage unique coupé en deux, ce qui fait que les programmeurs voient bien deux espaces d'adressages distincts. [[File:Décodage d'adresse sur une architecture Von Neumann basique.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann basique.]] Pour résumer, quand une adresse est envoyée sur le bus, les deux mémoires vont la recevoir mais une seule va répondre et se connecter au bus. Le décodage d'adresse garantit que seule la mémoire adéquate réponde à un accès mémoire. Le décodage d'adresse est réalisé par la carte mère, par un composant dédié. Le mécanisme peut être utilisé pour combiner plusieurs RAM en une seule, idem avec les ROM. Pour comprendre l'idée, je vais prendre l'exemple de l'IBM PC, un des tout premier PC existant. Nous étudierons ce PC dans une section dédiée, à la fin du chapitre, aussi je vais passer rapidement dessus. Tout ce que je vais faire est vous présenter la carte mère du PC, et vous demander de faire est de compter les mémoires ROM et mémoires RAM sur la carte mère : [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] Si vous remarquerez qu'il y a 5 mémoires ROM et 8 à 32 mémoires RAM. Le fait est que le processeur voit les différentes mémoires ROM comme une seule mémoire ROM. Idem avec les mémoires RAM : elle font chacune 2 kibioctets, et l'ensemble est vu par le processeur comme une seule RAM de 16 à 64 kibioctets. Et cela grâce aux circuits de décodage d'adresse, qui sont situés en haut à droite de la carte mère. Pour comprendre l'idée, prenons l'exemple d'un processeur 16 bits, capable de gérer 64 kibioctets de mémoire. L'espace d'adressage est découpé en quatre portions, de 16 kibioctets chacune. Une portion est réservée à une ROM de 16 kibioctet, les autres sont chacune réservée à une RAM de 16 kibioctet. Le décodage d'adresse sélectionne alors la mémoire adéquate en utilisant les deux bits de poids fort de l'adresse. * S'ils valent 00, alors c'est la mémoire ROM qui est activée, connectée au bus. * S'ils valent 01, alors c'est la première mémoire RAM qui est connectée au bus. * S'ils valent 10, alors c'est la seconde mémoire RAM qui est connectée au bus. * S'ils valent 11, alors c'est la troisième mémoire RAM qui est connectée au bus. [[File:Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM.png|centre|vignette|upright=3|Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM]] ===L'impact sur la conception du processeur=== Plus haut, j'ai parlé d'un des avantages des architectures Harvard : elles peuvent lire une instruction en même temps qu'elles accèdent à une donnée. La donnée est lue/écrite en RAM, alors que l'instruction est lue en ROM. Et cela permet de simplifier l'intérieur du processeur. Pas de beaucoup, mais c'est déjà ça de pris. Voyons maintenant comment cela impacte l'intérieur du processeur. Tout ce dont vous avez à vous rappeler est la séparation entre chemin de données et unité de contrôle, et que les registres généraux sont dans le premier, le ''program counter'' dans la seconde. Avec une architecture Harvard, les instructions et les données passent par des bus différent : bus ROM pour les instructions, bus RAM pour les données. L'intuition nous dit que le bus pour la mémoire ROM est connecté à l'unité de contrôle, alors que le bus pour la RAM est connecté au chemin de données. Et dans les grandes lignes, c'est vrai. La logique est imparable pour ce qui est des bus de données. Mais il y a une petite subtilité pour les bus d'adresse. Pour comprendre comment le processeur exploite ces deux bus, voyons ce qui transite dessus. Pour la mémoire ROM, elle reçoit l'adresse de l'instruction à lire, elle renvoie l'instruction adéquate. Pour cela, le ''program counter'' est envoyé sur le bus d'adresse, l'instruction sur le bus de données. Pour la mémoire RAM, elle échange des données avec les registres généraux, les registres pour les données. Les adresses utilisées pour la RAM viennent elles soit du chemin de données, soit de l'unité de contrôle, tout dépend du mode d'adressage. Mais le ''program counter'' n'est pas impliqué. [[File:Architecture Harvard - échanges de données.png|centre|vignette|upright=2|Architecture Harvard - échanges de données]] Les architectures Harvard modifiées doivent cependant rajouter une connexion entre le bus ROM et les registres généraux. C'est nécessaire pour charger une donnée constante depuis la mémoire ROM. Rappelons que la donnée constante est copiée dans un registre général, donc dans le chemin de données. [[File:Architecture Harvard modifiée - implémentation du processeur.png|centre|vignette|upright=2|Architecture Harvard modifiée - implémentation du processeur]] Avec les architectures Von Neumann, il y a un seul bus qui est relié à la fois au chemin de données et à l'unité de contrôle. Si le processeur lit une instruction, le bus doit être relié à l'unité de contrôle. Par contre, s'il accède à une donnée, il doit être relié au chemin de données (le bus d'adresse peut éventuellement être connecté au séquenceur, si celui-ci fournit l'adresse à lire). Il faut donc utiliser un paquet de multiplexeurs et de démultiplexeurs pour faire la connexion au bon endroit. [[File:Architecture Von Neumann - implémentation du processeur.png|centre|vignette|upright=2|Architecture Von Neumann - implémentation du processeur]] Une instruction se fait en deux temps : on charge l'instruction depuis la mémoire ROM, puis on l'exécute. Avec une architecture Harvard, tout cela se fait en un seul cycle d'horloge, vu que charger la ROM et accéder aux données peut se faire en même temps. Pas avec les architectures Von Neumann, qui doivent libérer le bus mémoire après avoir chargé une instruction. Elles n'ont pas le choix : elles chargent l'instruction lors d'un premier cycle d'horloge, puis l'exécutent lors du second. Pour cela, ils incorporent un registre appelé le '''registre d'instruction''', qui mémorise l'instruction chargée. L'instruction est copiée dans ce registre lors du premier cycle, puis est utilisée lors du second cycle. Le registre permet de ne pas oublier l’instruction entre les deux cycles. Le registre d'instruction est obligatoire sur les architectures Von Neumann. En comparaison, il est facultatif sur les architectures Harvard. Elles peuvent en avoir un, pour des raisons techniques, mais ce n'est pas obligatoire. [[File:Registre d'instruction.png|centre|vignette|upright=2|Registre d'instruction.]] ===Les architectures Von Neumann sont plus flexibles=== Sur les architectures Harvard, le processeur sait faire la distinction entre programme et données. Les données sont stockées dans la mémoire RAM, le programme est stocké dans la mémoire ROM. Les deux sont séparés, accédés par le processeur sur des bus séparés, et c'est ce qui permet de faire la différence entre les deux. Il est impossible que le processeur exécute des données ou modifie le programme. Du moins, tant que la mémoire qui stocke le programme est bien une ROM. Par contre, sur les architectures Von Neumann, il est impossible de distinguer programme et données, sauf en ajoutant des techniques de protection mémoire avancées. La raison est qu'il est impossible de faire la différence entre donnée et instruction, vu que rien ne ressemble plus à une suite de bits qu'une autre suite de bits. Et c'est à l'origine d'un des avantages majeur de l'architecture Von Neumann : il est possible que des programmes soient copiés dans la mémoire RWM et exécutés dans celle-ci. Un cas d'utilisation familier est celui de votre ordinateur personnel. Le système d'exploitation et les autres logiciels sont copiés en mémoire RAM à chaque fois que vous les lancez. Mais cet exemple implique un disque dur, ce qui rend les choses plus compliquées que prévu. Un autre exemple serait la compilation de code à la volée, mais il ne sera pas très parlant. Un exemple plus adapté serait celui où la ROM mémorise un programme compressée dans la mémoire ROM, qui est décompressé pour être exécuté en mémoire RAM. Le programme de décompression est stocké en mémoire ROM et est exécuté au lancement de l’ordinateur. Cette méthode permet d'utiliser une mémoire ROM très petite et très lente, tout en ayant un programme rapide (si la mémoire RWM est rapide). Il est aussi possible de créer des programmes qui modifient leurs propres instructions : cela s'appelle du '''code auto-modifiant'''. Ce genre de choses servait autrefois sur des ordinateurs rudimentaires, au tout début de l'informatique. À l'époque, les adresses à lire/écrire devaient être écrites en dur dans le programme, dans les instructions exécutées. Pour gérer certaines fonctionnalités des langages de programmation qui ont besoin d'adresses modifiables, comme les tableaux, on devait corriger les adresses au besoin avec du code auto-modifiant. De nos jours, le code automodifiant est utilisée occasionnellement pour rendre un programme indétectable dans la mémoire (les virus informatiques utilisent beaucoup ce genre de procédés). L'impossibilité de séparer données et instructions est à l'origine de problèmes assez fâcheux. Il est parfaitement possible que le processeur charge et exécute des données, qu'il prend par erreur pour des instructions. C'est le cas quand des pirates informatiques arrivent à exploiter des bugs. Il arrive que des pirates informatiques vous fournissent des données corrompues, qui contiennent un virus ou un programme malveillant est caché dans les données. Les bugs en question permettent d'exécuter ces données, donc virus. Pour éviter cela, le système d'exploitation peut marquer certaines zones de la mémoire comme non-exécutable, c’est-à-dire que le système d'exploitation interdit d’exécution de quoi que ce soit qui est dans cette zone. Mais ce n'est pas parfait. Toujours est-il que tout cela est impossible sur les architectures Harvard. Et ce serait très limitant. Imaginez : pas possible de lancer un programme depuis le disque dur ou une clé USB, le programme doit impérativement être dans une mémoire ROM, pas de compilation à la volée, etc. Que des techniques très utilisées dans l'informatique moderne. Malgré ses défauts, les architectures Von Neumann ne sont pas les plus utilisées pour rien. Les architectures Harvard sont concrètement utilisées uniquement dans l'informatique embarquée, sur des microcontrôleurs très spécifiques. ==Le bus de communication avec les entrées-sorties== Le processeur, la mémoire et les entrées-sorties sont connectées par un ou plusieurs '''bus de communication'''. Ce bus n'est rien d'autre qu'un ensemble de fils électriques sur lesquels on envoie des zéros ou des uns. Pour communiquer avec la mémoire, il y a trois prérequis qu'un bus doit respecter : pouvoir sélectionner la case mémoire (ou l'entrée-sortie) dont on a besoin, préciser à la mémoire s'il s'agit d'une lecture ou d'une écriture, et enfin pouvoir transférer la donnée. Pour cela, on doit donc avoir trois bus spécialisés, bien distincts, qu'on nommera le bus de commande, le bus d'adresse, et le bus de donnée. * Le '''bus de données''', sur lequel s'échangent les données entre les composants. * Le '''bus de commande''' pour configurer la mémoire et les entrées-sorties. * Le '''bus d'adresse''', facultatif, permet de préciser quelle adresse mémoire il faut lire/écrire. Chaque composant possède des entrées séparées pour le bus d'adresse, le bus de commande et le bus de données. Par exemple, une mémoire RAM possédera des entrées sur lesquelles brancher le bus d'adresse, d'autres sur lesquelles brancher le bus de commande, et des broches d'entrée-sortie pour le bus de données. Précisons cependant que le bus de commande n'est pas exactement le même entre des mémoires RAM/ROM et des entrées-sorties. [[File:Bus general schematic.svg|centre|vignette|upright=2|Contenu d'un bus, généralités.]] ===Le réseau d'interconnexion : généralités=== Reprenons où nous nous étions arrêté. Avant de voir les architectures Harvard et Von Neumann, nous avions dit que le processeur, les mémoires et les entrées-sorties sont reliées entre eux par un réseau d'interconnexion. Nous venons de voir qu'il est possible de mutualiser certains bus, notamment celui de la mémoire RAM et celui de la mémoire ROM. Mais il est possible de faire la même chose pour les entrées-sorties. Là encore, il est possible de regrouper le bus mémoire avec les bus pour les entrées-sorties. Voyons ce que cela implique. {| |[[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec une architecture Harvard.]] |[[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Interconnexions d'une architecture Von Neumann.]] |} Avant de poursuivre, nous devons préciser quelque chose d'important. Sur les ordinateurs modernes, les entrées-sorties peuvent accéder à la mémoire RAM. Les ordinateurs modernes intègrent des techniques de '''''Direct Memory Access''''' (DMA) qui permettent aux entrées-sorties de lire ou d'écrire en mémoire RAM. Les transferts DMA se font sans intervention du processeur. Ils permettent de copier un bloc de plusieurs octets, dans deux sens : de la mémoire RAM vers une entrée-sortie, ou inversement. Le DMA demande d'ajouter un circuit dédié sur la carte mère : le contrôleur DMA. Il effectue la copie d'un paquet d'octets de la RAM vers l'entrée-sortie ou dans l'autre sens. [[File:Réseau d'interconnexion avec un processeur au centre, et direct memory access.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre, et direct memory access]] ===Les bus systèmes=== La première solution utilise un bus unique, celui-ci est appelé le '''bus système''', aussi appelé ''backplane bus''. Le bus système est connecté à la mémoire RAM, la mémoire ROM, au processeur, et aux entrées-sorties. Tous les composants présents dans l'ordinateur sont connectés à ce bus, sans exception. De tels bus avaient pour avantage la simplicité. Le processeur n'est connecté qu'à un seul bus, ce qui utilise peu de broches et économise des fils. La mutualisation des bus est totale, le câblage est plus simple, la fabrication aussi. [[File:Architecture minimale d'un ordinateur.png|centre|vignette|upright=2|Architecture minimale d'un ordinateur.]] Un bus système contient un bus d'adresse, de données et de commande. Un bus système se marie bien avec des entrées-sorties mappées en mémoire. La conséquence est que le bus d'adresse ne sert pas que pour l'accès à la mémoire RAM/ROM, mais aussi pour l'accès aux entrées-sorties. Il y a moyen d'implémenter un système d'adresse séparés avec, mais c'est pas l'idéal. [[File:Architecture Von Neumann avec les bus.png|centre|vignette|upright=2|Architecture Von Neumann avec les bus.]] Un bus système n'a pas de limitations quant aux échanges de données. Le processeur peut communiquer directement avec les mémoires et les entrées-sorties, les entrées-sorties peuvent communiquer avec la mémoire RAM, etc. Notamment, un bus système peut implémenter le ''Direct Memory Access''. Il suffit juste de connecter un contrôleur DMA sur le bus système. Le contrôleur DMA est considéré comme une entrée-sortie, ses registres sont mappés en mémoire et sont donc accessibles directement par le processeur. [[File:Bus système avec controleur DMA.png|centre|vignette|upright=2|Bus système avec contrôleur DMA.]] Si on suit la définition à la lettre, un bus système est systématiquement une architecture Von Neumann, vu que la mémoire ROM et la mémoire RAM sont reliées sur le bus système. La conséquence est que les circuits de décodage d'adresse sont présents. Ils sont toujours sur la carte mère, et sont plus ou moins à côté du bus système. Cependant, le décodage d'adresse est parfois étendu pour tenir compte des entrées-sorties. Les entrées-sorties soudées sur la carte mère ont elles aussi des entrées ''Chip Select'' ou quelque chose de similaire. Le décodage d'adresse peut alors les activer ou les désactiver suivant l'adresse envoyée sur le bus d'adresse. C'est ce qui arrive quand le processeur écrit dans un registre d’interfaçage : il envoie l'adresse de ce registre sur le bus d'adresse, le circuit de décodage d'adresse active seulement l'entrée-sortie associée. Il faut noter que ce n'est pas systématique, il existe des techniques pour se passer de décodage d'adresse. Mais nous en reparlerons dans le chapitre sur les bus de communication. [[File:Chipselectfr.png|centre|vignette|upright=1.5|Exemple détaillé.]] Les bus systèmes sont certes très simples, mais ils ont aussi des désavantages. Par exemple, il faut éviter que le processeur et les entrées-sorties se marchent sur les pieds, ils ne peuvent pas utiliser le bus en même temps. De tels conflits d'accès au bus système sont fréquents et ils réduisent la performance, comme on le verra dans le chapitre sur les bus. De plus, un bus système a le fâcheux désavantage de relier des composants allant à des vitesses très différentes : il arrivait fréquemment qu'un composant rapide doive attendre qu'un composant lent libère le bus. Le processeur était le composant le plus touché par ces temps d'attente. Elle était utilisée sur les tout premiers ordinateurs, pour sa simplicité. Elle était parfaitement adaptée aux anciens composants, qui allaient tous à la même vitesse. De nos jours, les ordinateurs à haute performance ne l'utilisent plus trop, mais elle est encore utilisée sur certains systèmes embarqués, en informatique industrielle dans des systèmes très peu puissants. ===Les bus d'entrées-sorties=== Les bus systèmes ont de nombreux problèmes, ce qui fait que d'anciens ordinateurs faisaient autrement. À la place d'un bus système unique, ils utilisent un bus séparé pour les mémoires, et un autre séparé pour les entrées-sorties. Le bus spécialisé pour la mémoire est appelé le '''bus mémoire''', l'autre bus est appelé le '''bus d'entrées-sorties'''. Le bus mémoire est généralement relié à la fois à la mémoire RAM et à la mémoire ROM, les exceptions ne sont pas rares, cependant. [[File:Bus mémoire séparé du bus pour les IO.png|centre|vignette|upright=2|Bus mémoire séparé du bus pour les IO]] Les bus d'entrée-sorties peuvent être spécialisés et simplifiés. Par exemple, ils peuvent avoir un bus de commande différent de celui de la mémoire, qui utilise nettement moins de fils. Le bus d'adresse peut aussi être réduit, et utiliser des adresses plus courtes que celles du bus mémoire. Les bus de données peuvent aussi être de taille différentes. Il est ainsi possible d'avoir un bus mémoire capable de lire/écrire 64 bits à la fois, alors que la communication avec les entrées-sorties se fait octet par octet ! En général, les bus d'entrée-sortie sont assez petits, ils ont une taille de 8 ou 16 bits, même si le bus mémoire est plus grand. Cela permet de ne pas gaspiller trop de broches. Ajouter un bus d'entrée-sortie n'est donc pas très gourmand en broches et en fils. : Il est en théorie possible d'avoir une fréquence différente pour les deux bus, avec un bus mémoire ultra-rapide et un bus pour les entrées-sorties est un bus moins rapide. Mais il faut que le processeur soit prévu pour, et c'est très rare. Niveau performances, le processeur peut théoriquement accéder à la mémoire en attendant qu'une entrée/sortie réponde, mais il faut que le processeur soit prévu pour, et ce n'est pas de la tarte. Par contre, cela implique d'avoir des adresses séparées pour les registres d’interfaçage et la mémoire. En clair : pas d'entrée-sortie mappée en mémoire ! Un autre problème est que les entrées-sorties ne peuvent pas communiquer avec la mémoire directement, elles doivent passer par l'intermédiaire du processeur. En clair : pas de ''Direct Memory Access'' ! Les deux sont des défauts rédhibitoires pour les programmeurs système, notamment pour ceux qui codent les pilotes de périphériques. Pour résumer, les défauts sont assez problématiques : pas d'entrées-sorties mappées en mémoire, pas de ''Direct Memory Access'', économie de broches limitée. Les deux premiers sont des défauts majeurs, qui font que de tels bus ne sont pas utilisés dans les ordinateurs modernes. À la place, ils utilisent une troisième solution, distincte des bus systèmes et des bus d'entrée-sorties. ===Les bus avec répartiteur=== Il existe une méthode intermédiaire, qui garde deux bus séparés pour la mémoire et les entrées-sorties, mais élimine les problèmes de brochage sur le processeur. L'idée est d'intercaler, entre le processeur et les deux bus, un '''circuit répartiteur'''. Il récupère tous les accès et distribue ceux-ci soit sur le bus mémoire, soit sur le bus des périphériques. Le ou les répartiteurs s'appellent aussi le '''''chipset''''' de la carte mère. C'était ce qui était fait à l'époque des premiers Pentium. À l'époque, la puce de gestion du bus PCI faisait office de répartiteur. Elle mémorisait des plages mémoires entières, certaines étant attribuées à la RAM, les autres aux périphériques mappés en mémoire. Elles utilisaient ces plages pour faire la répartition. [[File:IO mappées en mémoire avec séparation des bus.png|centre|vignette|upright=2|IO mappées en mémoire avec séparation des bus]] Niveau adresses des registres d'interfacage, il est possible d'avoir soit des adresses unifiées avec les adresses mémoire, soit des adresses séparées. L'usage d'un répartiteur ne pose pas de problèmes particuliers pour implémenter le DMA. La seule contrainte est que le contrôleur DMA soit intégré dans le répartiteur. Les échanges entre IO et mémoire passent par le répartiteur, qui fait le pont entre bus mémoire et bus des IO. [[File:Implémentation du DMA avec un répartiteur.png|centre|vignette|upright=2|Implémentation du DMA avec un répartiteur]] ==Les microcontrôleurs et ''system on chip''== Parfois, on décide de regrouper la mémoire, les bus, le CPU et les ports d'entrée-sortie dans un seul circuit intégré, un seul boitier. L'ensemble forme alors ce qu'on appelle un '''''System on Chip''''' (système sur une puce), abrévié en SoC. Le nom est assez explicite : un SoC comprend un système informatique complet sur une seule puce de silicium, microprocesseurs, mémoires et périphériques inclus. Ils incorporent aussi des ''timers'', des compteurs, et autres circuits très utiles. [[File:ARMSoCBlockDiagram.svg|centre|vignette|upright=2|SoC basé sur un processeur ARM, avec des entrées-sorties typiques de celles d'un µ-contrôleur. Le support du bus CAN, d'Ethernet, du bus SPI, d'un circuit de PWM (génération de signaux spécifiques), de convertisseurs analogique-digital et inverse, sont typiques des µ-contrôleurs.]] Le terme SoC regroupe des circuits imprimés assez variés, aux usages foncièrement différents et à la conception distincte. Les plus simples d’entre eux sont des microcontrôleurs, qui sont utilisés pour des applications à base performance. Les plus complexes sont utilisés pour des applications qui demandent plus de puissance, nous les appellerons SoC haute performance. La relation entre SoC et microcontrôleurs est assez compliquée à expliquer, la terminologie n'est pas clairement établie. Il existe quelques cours/livres qui séparent les deux, d'autres qui pensent que les deux sont très liés. Dans ce cours, nous allons partir du principe que tous les systèmes qui regroupent processeur, mémoire et quelques périphériques/entrées-sorties sont des SoC. Les microcontrôleurs sont donc un cas particulier de SoC, en suivant cette définition. ===Les microcontrôleurs=== Les '''microcontrôleurs''' sont des composants utilisés dans l'embarqué ou d'informatique industrielle. Leur nom trahit leur rôle. Ils sont utilisés pour contrôler de l'électroménager, des chaines de fabrication dans une usine, des applications robotiques, les alarmes domestiques, les voitures. De manière générale, on les trouve dans tous les systèmes dits embarqués et/ou temps réel. Ils ont besoin de s'interconnecter à un grand nombre de composants et intègrent pour cela un grand nombre d'entrée-sorties. Les microcontrôleurs sont généralement peu puissants, et doivent consommer peu d'énergie/électricité. Fait amusant, on en trouve dans certains périphériques informatiques. Par exemple, les anciens disques durs intégraient un microcontrôleur qui contrôlait plusieurs moteurs/ Les moteurs pour faire tourner les plateaux magnétiques et les moteurs pour déplacer les têtes de lecture/écriture étaient commandés par ce microcontrôleur. Comme autre exemple, les claviers d'ordinateurs intègrent un microcontrôleur connecté aux touches, qui détecte quand les touches sont appuyées et qui communique avec l'ordinateur. Nous détaillerons ces deux exemples dans les chapitres dédiés aux périphériques et aux disques durs, tout deviendra plus clair à ce moment là. La majorité des périphériques ou des composants internes à un ordinateur contiennent des microcontrôleurs. [[File:Microcontroller 8051.gif|centre|vignette|upright=2.5|Microcontrôleur Intel 8051.]] Un microcontrôleur tend à intégrer des entrées-sorties assez spécifiques, qu'on ne retrouve pas dans les SoC destinés au grand public. Un microcontrôleur est typiquement relié à un paquet de senseurs et son rôle est de commander des moteurs ou d'autres composants. Et les entrées-sorties intégrées sont adaptées à cette tâche. Par exemple, ils tendent à intégrer de nombreux convertisseurs numériques-analogiques pour gérer des senseurs. Ils intègrent aussi des circuits de génération de signaux PWM spécialisés pour commander des moteurs, le processeur peut gérer des calculs trigonométriques (utiles pour commander la rotation d'un moteur), etc. [[File:C8051F340-9 A B C D.png|centre|vignette|upright=2|Exemple d'entrées-sorties intégrées à un microcontroleur.]] En plus des entrées-sorties intégrées, les microcontrôleurs ont souvent des '''ports d'entrées-sorties''' banalisés, à savoir qu'on peut brancher n'importe quoi dessus. Il était possible de brancher un capteur de température, un moteur à commander, un port série, un port parallèle, un écran, un clavier, une souris, peu importe. Les ports font souvent un octet et ils sont généralement reliées directement ou indirectement au processeur. Le logiciel qui s'exécute sur le processeur décide quoi envoyer sur des broches et comment interprète ce qui est reçu dessus. Les ports banalisés de ce type sont parfois appelés des '''GPIO''', abréviation de ''General Purpose Input/Output'', mais nous utiliserons le terme de ''port I/O''. Un port regroupe plusieurs broches qui peuvent être utilisés à volonté. C'est le logiciel qui s'exécute sur le processeur qui décide de la fonction de broches. Un port IO peut fonctionner soit en tant qu'entrée, soit en tant que sortie. Il est possible de changer de sens en cours de fonctionnement, pour passer d'une entrée à une sortie ou inversement. [[File:Afficheurs7seg.png|centre|vignette|upright=2|Exemple d'utilisation d'un port I/O. le port est connecté à un afficheur LCD dit 7-segments. Les 8 entrées de cet afficheur sont connectées à un port I/O d'un octet.]] ===Les SoC haute performance=== Les SoC les plus performants sont actuellement utilisés dans les téléphones mobiles, tablettes, ''Netbook'', ''smartphones'', ou tout appareil informatique grand public qui ne doit pas prendre beaucoup de place. La petite taille de ces appareils fait qu'ils gagnent à regrouper toute leur électronique dans un circuit imprimé unique. Mais les contraintes font qu'ils doivent être assez puissants. Ils incorporent des processeurs assez puissants, surtout ceux des ''smartphones''. C'est absolument nécessaire pour faire tourner le système d'exploitation du téléphone et les applications installées dessus. Niveau entrées-sorties, ils incorporent souvent des interfaces WIFI et cellulaires (4G/5G), des ports USB, des ports audio, et même des cartes graphiques pour les plus puissants d'entre eux. Les SoC incorporent des cartes graphiques pour gérer tout ce qui a trait à l'écran LCD/OLED, mais aussi pour gérer la caméra, voire le visionnage de vidéo (avec des décodeurs/encodeurs matériel). Par exemple, les SoC Tegra de NVIDIA incorporent une carte graphique, avec des interfaces HDMI et VGA, avec des décodeurs vidéo matériel H.264 & VC-1 gérant le 720p. Pour résumer, les périphériques sont adaptés à leur utilisation et sont donc foncièrement différents de ceux des microcontrôleurs. [[File:Phone hardware.png|centre|vignette|upright=2|Hardware d'un téléphone. On voit qu'il est centré autour d'un SoC, complété par de la RAM, un disque dur de faible capacité, de quoi gérer les entrées utilisateurs (l'écran tactile, les boutons), et un modem pour les émissions téléphoniques/2G/3G/4G/5G.]] Un point important est que les processeurs d'un SoC haute performance sont... performants. Ils sont le plus souvent des processeurs de marque ARM, qui sont différents de ceux utilisés dans les PC fixe/portables grand public qui sont eux de type x86. Nous verrons dans quelques chapitres en quoi consistent ces différences, quand nous parlerons des jeux d'instruction du processeur. Autrefois réservé au monde des PCs, les processeurs multicœurs deviennent de plus en plus fréquents pour les SoC de haute performance. Il n'est pas rare qu'un SoC incorpore plusieurs cœurs. Il arrive même qu'ils soient foncièrement différents, avec plusieurs cœurs d'architecture différente. La frontière entre SoC haute performance et microcontrôleur est de plus en plus floue. De nombreux appareils du quotidien intègrent des SoC haute performance, d'autres des microcontrôleurs. Par exemple, les lecteurs CD/DVD/BR et certains trackers GPS intègrent un SoC ou des processeurs dont la performance est assez pêchue. À l'opposé, les systèmes domotiques intègrent souvent des microcontrôleurs simples. Malgré tout, les deux cas d'utilisation font que le SoC/microcontrôleur est connecté à un grand nombre d'entrées-sorties très divers, comme des capteurs, des écrans, des LEDs, etc. [[File:GPS tracker Hardware Architecture.png|centre|vignette|upright=2|Hardware d'un tracker GPS.]] ==Étude de quelques exemples d'architectures== Après avoir vu la théorie, nous allons voir des exemples réels d'ordinateurs. Dans ce qui suit, nous allons voir des ordinateurs assez anciens, pour une raison simple : ils collent assez bien à l''''architecture de base''' vue plus haut, avec un CPU, une RAM et une ROM, quelques entrées-sorties. Tous les ordinateurs modernes, mais aussi dans les smartphones, les consoles de jeu et autres, utilisent une architecture grandement modifiée et améliorée, avec un grand nombre de périphériques, disques durs/SSD, un grand nombre de mémoires différentes, etc. Il pourrait sembler pertinent d’étudier des microcontrôleurs ou des ''System On Chip'', en premier lieu. Mais nous éviterons soigneusement de tels systèmes pour le moment. La raison est qu'ils ont un grand nombre d'entrées-sorties, qui sont peu familières. Attendez-vous à avoir près d'une vingtaine ou centaine d'entrée-sorties différentes pour de tels systèmes. Le tout est très complexe, bien trop pour un premier exemple. À la place, nous allons voir précisément des exemples plus simples : les premiers PC, et des consoles de jeu 8 et 16 bits. Bien que ce soit des systèmes très simples, ils sont cependant plus complexes que l'architecture de base. Et leur avantages/désavantages sont un peu inverse l'un de l'autre. Si on devait résumer les différences, on aurait ceci : * Les PC ont plus d'entrées-sorties que les consoles, bien que nettement moins que pour les microcontrôleurs/SoC. * Les PC utilisent des disques durs, les consoles font avec soit des cartouches de jeu, soit des CD/DVD. * Les PC utilisent des cartes électroniques séparées pour le son et l'écran, les consoles utilisent des circuits soudés sur la carte mère, qui sont souvent des co-processeurs. * Les PC ont une mémoire ROM soudées sur la carte mère, les consoles 8 bits font sans. Les PC et micro-ordinateurs ont plus d'entrées-sorties que les consoles. Même si on mets de côté les périphériques, ils ont aussi beaucoup de composants soudées sur la carte mère. En comparaison, les consoles de jeu 8/16 bits se débrouillent avec : une cartouche de jeu et une manette en entrée, une sortie vidéo et une sortie son. Un autre point important est l'absence de disque dur ou de lecteur CD. La présence d'un disque dur ou d'un lecteur CD/DVD complexifie tout de suite l'architecture des PC. Il faut leur réserver un bus dédié ou les connecter à un bus système, cela demande d'ajouter des circuits sur la carte mère, etc. Et surtout, il faut expliquer comment l'ordinateur exécute des programmes, ce qui demande de parler de l'interaction avec le disque dur et la ROM du BIOS. Rien de tout cela sur les consoles de jeu 8 et 16 bits. Elles utilisent à la place des cartouches de jeu, qui intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Pas besoin de parler des mémoires de stockage, on est beaucoup plus proche de l'architecture de base avec une ROM unique. Par contre, n'allez pas croire que tout est rose avec les consoles 8/16 bits. Il y a quelques différences qui font qu'elles sont plus complexes qu'un PC sur certains points. Les PC utilisent des cartes électroniques à brancher sur la carte mère pour alimenter l'écran et les hauts-parleurs/casques, alors que les consoles de jeu utilisent des souvent co-processeurs dédiés pour le son et les graphismes. La différence parait mineure, mais elle avantage les consoles. Nous avons déjà expliqué ce que sont les co-processeurs plus haut, aussi les co-processeurs des consoles nous paraitrons familiers. On n'a pas à s’embêter à expliquer ce que sont les cartes d'extension, les bus associés et tout ce qui va avec, cela peut être retardé pour la section sur l'architecture des PC. La gestion de la cartouche de jeu est aussi un peu subtile à comprendre, bien que ce soit bien plus simple à comprendre qu'un système avec un disque dur. Les cartouches de jeu intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Et le processeur doit exécuter le code depuis cette mémoire ROM. La conséquence est que les consoles 8/16 bits utilisent une architecture Harvard, avec un bus relié à la cartouche pour lire les instructions. Mais si ce n'était que ça... Les cartouches mémorisent aussi les données pour les graphismes, ce qui fait que le co-processeur vidéo doit lui aussi lire la cartouche pour récupérer ces données... ===L'architecture de la TurboGraphX-16=== La console PC Engine, aussi appelée TurboGraphX, est une ancienne console 8 bits. Elle contient un processeur 65C02, 8 kibioctets de RAM, un port manettes, une carte son et une carte vidéo. La '''carte son''' est le composant qui s'occupe de commander les haut-parleurs et de gérer tout ce qui a rapport au son. La '''carte graphique''' est le composant qui est en charge de calculer les graphismes, tout ce qui s'affiche à l'écran. Sur cette console, les cartes son et graphique ne sont PAS des co-processeurs, ce sont des circuits électroniques dits fixes. C'est totalement différent de ce qu'on a sur les consoles modernes, aussi le préciser est important. Bien que la carte graphique ne soit pas un processeur, elle a 64 kibioctets de RAM rien que pour elle. La RAM en question est séparée de la RAM normale, c'est un circuit intégré séparé. Et c'est un cas très fréquent, qui reviendra par la suite. La majeure partie des cartes graphiques dispose de leur propre '''mémoire vidéo''', totalement réservée à la carte graphique. La RAM vidéo est connectée à la carte graphique via un bus séparé. Le processeur est souvent connecté à ce bus, afin de pouvoir écrire des données dedans, mais ce n'est pas le cas ici. [[File:Architecture de la PC Engine, aussi appelée TurboGrafx-16.png|centre|vignette|upright=2.5|Architecture de la PC Engine, aussi appelée TurboGrafx-16]] L'architecture de la console était particulièrement simple. Le processeur était le centre de l'architecture, tout était connecté dessus. Il y a un bus pour la cartouche de jeu, un autre pour la RAM, un autre pour les manettes, un autre pour carte son, et un dernier pour la carte graphique. Le fait d'avoir un bus par composant est assez rare et ce n'est le cas ici que parce des conditions particulières sont remplies. Déjà, il y a peu d'entrée-sorties. Ensuite, les bus font tous 8 bits, vu que le processeur est un CPU 8 bits. Avec 5 connexions de 8 bits, le tout utilise 40 broches, ce qui est beaucoup, mais totalement gérable. Par contre, les choses changerons pour les autres consoles. Au final, l'organisation des bus peut s'expliquer avec ce qu'on a vu dans la section sur les bus de communication. La console utilise une architecture Harvard, car la ROM et la RAM utilisent des bus différents. De plus, il y a des bus dédiés aux entrées-sorties, séparés des bus mémoire. Enfin, la carte graphique a droit à ses propres bus pour lire dans la cartouche et dans sa RAM vidéo dédiée. ===L'architecture de la console de jeu NES=== Maintenant, nous allons voir la console de Jeu Famicom, aussi appelée la NES en occident. Elle a une architecture centrée sur un processeur Ricoh 2A03, similaire au processeur 6502, un ancien processeur autrefois très utilisé et très populaire. Le processeur est associé à 2 KB de mémoire RAM. Sur certaines cartouches, on trouve une RAM utilisée pour les sauvegardes, qui est adressée par le processeur directement. Première variation par rapport à l'architecture de la console précédente : l'ajout de la RAM pour les sauvegardes dans les cartouches. Niveau carte graphique, une différence importante est que la carte graphique est connectée à la cartouche de jeu via un autre bus, afin de pouvoir lire les sprites et textures du jeu dans la cartouche. [[File:Architecture de la NES.png|centre|vignette|upright=2.5|Architecture de la NES]] La différence avec l'architecture précédente est que des bus ont été fusionnés. Comme dit plus haut, le système utilise une architecture Harvard, vu que la ROM est dans la cartouche, alors que la RAM est soudée à la carte mère. Par contre, la Famicon utilise un bus dédié aux entrées-sorties. Il est utilisé pour la carte son et la carte graphique, seules les manettes sont sur un bus à part. Ce qui fait qu'on devrait plutôt parler de bus de sorties, mais passons... L'essentiel est qu'on n'est plus tout à fait dans le cas de la console précédente, avec un bus par composant. ===L'architecture de la SNES=== L'architecture de la SNES est illustrée ci-dessous. Les changements pour le processeur et la RAM sont mineurs.La RAM a augmenté en taille et passe à 128 KB. Pareil pour la RAM de la carte vidéo, qui passe à 64 KB. Par contre, on remarque un changement complet au niveau des bus, de la carte graphique et de la carte son. [[File:Architecture de la SNES.png|centre|vignette|upright=2|Architecture de la SNES]] La console utilise un '''bus système unique''', sur lequel tout est connecté : ROM, RAM, entrées-sorties, etc. La seule exception est pour les manettes, qui sont encore connectées directement sur le processeur, via un bus séparé. La transition vers un bus système s'explique par le fait que la console est maintenant de 16 bits, ce qui fait que les bus doivent être plus larges. Le processeur adresse des mémoires RAM et ROM plus grandes, ce qui double la taille de leurs bus. De plus, les entrées-sorties aussi ont besoin d'un bus plus large. Le processeur n'ayant pas un nombre illimité de broches, la seule solution est de fusionner les bus en un seul bus système. Un autre changement est que la carte graphique est maintenant composée de deux circuits séparés. Encore une fois, il ne s'agit pas de coprocesseurs, mais de circuits non-programmables. Par contre, la carte son est remplacée par deux coprocesseurs audio ! De plus, les deux processeurs sont connectés à une mémoire RAM dédiée de 64 KB, comme pour la carte graphique. L'un est un processeur 8 bits (le DSP), l'autre est un processeur 16 bits. Un point très intéressant : certains jeux intégraient des coprocesseurs dans leurs cartouches de jeu ! Par exemple, les cartouches de Starfox et de Super Mario 2 contenait un coprocesseur Super FX, qui gérait des calculs de rendu 2D/3D. Le Cx4 faisait plus ou moins la même chose, il était spécialisé dans les calculs trigonométriques, et diverses opérations de rendu 2D/3D. En tout, il y a environ 16 coprocesseurs d'utiliser et on en trouve facilement la liste sur le net. La console était conçue pour, des pins sur les ports cartouches étaient prévues pour des fonctionnalités de cartouche annexes, dont ces coprocesseurs. Ces pins connectaient le coprocesseur au bus des entrées-sorties. Les coprocesseurs des cartouches de NES avaient souvent de la mémoire rien que pour eux, qui était intégrée dans la cartouche. ===L'architecture de la Megadrive et de la néo-géo=== Passons maintenant à la console de jeu Megadrive, une console 16 bits. Elle a une architecture similaire à celle de la néo-géo, une autre console bien plus puissante, sorti à peu près en même temps. Elles intègrent deux processeurs : un Motorola 68000 qui sert de processeur principal, un Z80 qui sert de processeur dédié à l'audio. Le Z80 et le Motorola 68000 étaient deux processeurs très populaires à l'époque. Le Z80 est une sorte de version améliorée de l'Intel 8088 utilisé sur les anciens PC et de nombreuses consoles utilisaient des Z80 comme processeur principal. Il était familier pour les programmeurs de l'époque, pour son cout réduit, sa bonne disponibilité, et bien d'autres avantages liés à sa production de masse. Le Z80 est utilisé comme co-processeur audio. Il commande un synthétiseur sonore, et est relié à sa propre mémoire, distincte de la mémoire principale. Le MC68000 est le processeur principal et a une relation maitre-esclave avec le Z80 : le MC68000 envoie des commandes au Z80, mais la communication ne va pas dans l'autre sens. Le Motorola 68000 était un processeur 16 bits, alors que le Z80 est un processeur 8 bits. Et cette différence fait que l'on ne peut pas connecter directement les deux sur le même bus, ou du moins pas facilement. La solution retenue est d'utiliser deux bus séparés : un bus de 16 bits connecté au 68000, un bus de 8 bits connecté au Z80. Le premier bus est un bus système sur lequel est connecté le 68000, 64 kibioctets de RAM, la cartouche de jeu, et la carte graphique. Le second bus est un bus de 8 bits, plus court, relié au Z80, à un synthétiseur sonore, et 8 kibioctets de RAM Les deux bus sont connectés à un '''''chipset''''', un circuit répartiteur, qui fait le pont entre les deux bus. Les manettes sont connectées sur le ''chipset''. Il contient un registre de 8 bits, dans lequel le MC68000 peut écrire dedans à sa guise, le registre étant adressable par le processeur. Lorsque le MC68000 écrit une valeur dedans, cela déclenche l’exécution automatique d'un programme pré-déterminé sur le Z80. : Pour ceux qui savent ce qu'est une interruption, les valeurs écrites dans ce registre sont des numéros d'interruption, qui indiquent quelle routine d'interruption exécuter. [[File:Architecture de la Megadrive et de la Néogeo.png|centre|vignette|upright=2.5|Architecture de la Megadrive et de la Néogeo]] Cet exemple nous montre que les bus systèmes sont certes très simples, mais aussi inflexibles. Ils fonctionnent bien quand les composants branchés dessus sont tous des composants 8 bits, ou sont tous de 16 bits, ou tous 32 bits. Mais dès qu'on mélange composants 8, 16, 32 ou 64 bits, les choses deviennent plus compliquées. Il est alors préférable d'utiliser des bus séparés, avec des répartiteurs pour faire le pont entre les différents bus. Et nous verrons que le problème s'est posé lui aussi sur les PC. ===L'architecture des anciennes consoles Playstation : beaucoup de co-processeurs=== Les consoles que nous venons d'aborder étaient des consoles 8 ou 16 bits. A partir des consoles 32 bits, leur architecture s'est rapprochée de celle des PC, avec un usage plus complexes de répartiteurs. La XBOX était très semblable à un PC : le processeur était un Pentium 3 modifié, la carte graphique était une Geforce 3 modifiée, les 64 mébioctets de RAM était la même mémoire DDR que celle des PC, le répartiteur secondaire était un ''chipset'' nForce de NVIDIA, etc. Mais les Playstation 1, 2 et 3 se distinguent de leur contemporains. Elles disposent de très nombreux co-processeurs, qui sont en plus très variés. La Playstation 1 a été une des premières console à utiliser les CD-ROM comme support de stockage, en remplacement des cartouches. La conséquence est que la console contient une mémoire ROM, soudée à la carte mère, de 512 kibioctets. Elle contient aussi 2 mébioctets de RAM, une carte graphique avec 1 mébioctet de mémoire vidéo, un processeur, et de quoi gérer les périphériques. Il y a un co-processeur audio spécialisé, avec 512 kibioctets de RAM, ce qui nous est familier. Par contre, les autres co-processeurs ne le sont pas. Déjà, le lecteur de CD-ROM est associé à des circuits sur la carte mère, il y a tout un sous-système dédié au lecteur de CD. Il y a un contrôleur qui sert d'interface avec le lecteur proprement dit, mais aussi deux co-processeurs audio et 32 kibioctets de RAM. Les co-processeurs audio servent à lire des CD sans trop utiliser le second co-processeur audio, ils lui servent de complément. Ensuite, le processeur incorpore plusieurs cœurs, avec un cœur principal et plusieurs co-processeurs. Le premier est un co-processeur système, qui est utilisé pour gérer la mémoire cache intégrée au processeur, pour des fonctionnalités appelées interruptions et exceptions, ainsi que pour configurer le processeur. Le second est un co-processeur arithmétique spécialisé dans les calculs en virgule flottante, très importants pour le rendu 3D. Enfin, il y a un décodeur vidéo, qui n'est pas un co-processeur, mais un circuit non-programmable, spécialisé dans le décodage vidéo. De nos jours, ce circuit aurait été intégré dans la carte graphique, mais il était intégré dans le processeur sur la Playstation 2. Pour le reste, le processeur est la figure centrale de la console. Il est connecté à 4 bus : un pour la RAM, un pour la carte graphique, un pour les manettes, un autre pour le reste. Le dernier bus est connecté au système audio et au système pour le lecteur CD. Ce serait un bus d'entrée-sortie, s'il n'était pas connecté à la mémoire ROM. Vous avez bien lu : la mémoire ROM est reliée au bus d'entrée-sortie. [[File:Architecture de la Playstation.png|centre|vignette|upright=2.5|Architecture de la Playstation]] La Playstation 2 est composé d'un processeur, couplé à 32 Mébioctets de RAM, et d'un paquet de co-processeurs. Plus de co-processeurs que la PS1. Le processeur principal n'est pas la même que celui de la PS1, mais il a une architecture similaire. Il intègre un décodeur vidéo sur le même circuit intégré, ainsi que deux co-processeur. Les co-processeurs ne sont cependant pas les mêmes. Le co-processeur système disparait et est remplacé par un second co-processeur arithmétique. Les deux co-processeurs arithmétiques sont spécialisés dans les nombres flottants, avec quelques différences entre les deux. Par exemple, le second co-processeur gérait des calculs trigonométriques, des exponentielles, des logarithmes, et d'autres fonctions complexes du genre ; mais pas le premier co-processeur. Ils sont reliés à 4 kibioctets de RAM pour le premier, 16 kibioctets de RAM pour le second ; qui sont intégrées dans le processeur et non-représentés dans le diagramme ci-dessous. La PS2 intègre aussi un co-processeur d'entrées-sorties. Pour information, il s'agit du processeur principal de la Playstation 1, qui est ici utilisé différemment, suivant que l'on place un jeu PS1 ou PS1 dans la console. Si on met un jeu PS1, il est utilisé pour émuler la Playstation 1, afin de faire tourner le jeu PS1 sur la PS2. Si on met un jeu PS2, il est utilisé comme co-processeur d'entrée-sortie et fait l'interface entre CPU et entrées-sorties. Il est relié à 2 mébioctets de RAM, soit exactement la même quantité de mémoire que la Playstation 1. Tous les périphériques sont connectés au co-processeur d'entrées-sortie. Pour cela, le co-processeur d'entrées-sortie est relié à deux bus dédiés aux périphériques. Le premier bus est relié aux manettes, aux ports USB et aux ports pour cartes mémoires. Le second bus est relié à la carte son, la carte réseau, le lecteur DVD, et un port PCMIA. Notons que la carte son intègre un co-processeur audio, qui n'est pas représenté dans le diagramme ci-dessous. [[File:Playstation 2 architecture.png|centre|vignette|upright=2.5|Playstation 2 architecture]] ==L'architecture des PC et son évolution== Après avoir vu les consoles, nous allons maintenant voir les anciens PC, des années 80 ou 90. Le tout premier PC était techniquement l''''IBM PC'''. Par la suite, de nombreux ordinateurs ont tenté de reproduire l'IBM PC originel, avec parfois quelques modifications mineures. De tels ordinateurs ''IBM PC compatibles'', ont été très nombreux, pour des raisons diverses. Le fait d'utiliser des composants banalisés, facilement disponibles, ainsi qu'une bonne documentation de l'IBM PC originel, a grandement aidé. Les IBM PC compatibles ont progressivement évolué pour donner les PC actuels. L'IBM PC compatible a donné naissance à de nombreux standards divers. ===L'IBM PC originel et l'IBM PC XT=== [[File:IBM PC XT 02.jpg|vignette|IBM PC XT.]] Nous allons commencer par voir l'IBM PC originel, et son successeur : l'IBM Personal Computer XT. Nous les appelerons tous deux l'IBM PC. L'IBM PC utilisait un processeur Intel 8088, qui était un processeur 8 bits. Ils utilisaient un bus système unique, appelé le '''bus XT'''. Le bus système allait à 4.77 MHz, soit la même fréquence que le processeur. C'était un bus de 8 bits, ce qui collait parfaitement avec les processeurs 8 bits commercialisés par Intel à l'époque. L'IBM PC comprenait une mémoire ROM avec de quoi faire fonctionner le PC. La ROM en question contenait un programme minimal, appelé le '''BIOS''', sans lequel le PC ne fonctionnait pas du tout. Il servait de base pour le système d'exploitation et MS-DOS ne fonctionnait pas sans elle. De nos jours, son rôle est plus limité : sans elle, le PC ne démarre pas. Mais nous détaillerons cela dans le prochain chapitre. En plus de la ROM pour le BIOS, l'IBM PC avait quatre mémoires ROM dédiée au langage de programmation BASIC. Lorsque le PC démarrait, il ne bootait pas un système d'exploitation, mais lançait l'interpréteur pour le langage BASIC. De nos jours, ce serait l'équivalent d'un ordinateur qui boote directement sur du Python, à savoir la console Python que vous avez peut-être déjà utilisé si vous avez testé Python. Ceux qui ont déjà touché à un ordinateur de l'époque savent ce que ca veut dire, mais c'est malheureusement très difficile à expliquer sans ce genre d'expérience. Toujours est-il que c'était une sorte de norme à l'époque : les ordinateurs bootaient généralement sur un interpréteur BASIC. [[File:XT Bus pins.svg|vignette|Connecteur du bus XT.]] Les PC étaient conçus pour qu'on branche des '''cartes d'extension''', à savoir des cartes électroniques qu'on branchait sur la carte mère, à l'intérieur du PC. Les cartes d'extension de l'époque étaient surtout des cartes son ou des cartes graphiques, mais aussi des cartes pour brancher des péripéhriques. par exemple, on pouvait ajouter deux cartes graphiques dans l'IBM PC originel : l'''IBM Monochrome Display Adapter'' et/ou la ''IBM Color Graphics Adapter''. De nos jours, les cartes son sont intégrées à la carte mère, mais les cartes graphiques sont restées des cartes d'extension. Les cartes d'extension étaient branchées sur un '''connecteur XT''', qui était directement relié au bus XT. Le connecteur XT est illustré ci-contre, mais ne vous en souciez pas trop pour le moment. La carte mère de l'IBM PC avait 5 connecteurs de ce type, qu'on pouvait peupler avec autant de cartes d'extension. L'IBM Personal Computer XT est passé à 8 connecteurs XT, soit trois de plus. Pour ce qui est des périphériques, l'IBM PC avait plusieurs connecteurs : un port série, un port parallèle, un port pour le clavier, et un port pour un lecteur cassette. Le clavier et le lecteur cassette étaient connectés directement sur la carte mère, qui contenait quelques circuits pour gérer le clavier. Par contre, les deux premiers n'étaient pas connectés à la carte mère. Le port série était en réalité une carte d'extension, branchée sur un connecteur XT. Et il en est de même pour le port parallèle. Pour ce qui est des supports de stockage, l'IBM PC originel n'avait pas de disque dur et n'avait que des lecteurs de disquette. De plus, le lecteur de disquette n'était pas connecté directement sur la carte mère, mais était connecté à une carte d'extension, branchée sur un connecteur XT. La carte d'extension avait deux connecteurs, un par lecteur de disquette, ce qui fait que les deux lecteurs de disquettes pouvaient être branchés sur une seule carte d'extension. L'IBM Personal Computer XT a ajouté un disque dur, sauf sur quelques sous-modèles spécifiques. Le PC avait aussi un petit haut-parleur capable de faire des bips. Pour résumer, l'IBM PC originel se reposait beaucoup sur les cartes d'extension, sa carte mère contenait peu de choses. Enfin, peu de choses... Il y avait un processeur Intel 8088, éventuellement un coprocesseur flottant 8087, de la RAM, de la ROM, et des circuits intégrés assez divers. En voici la liste, certains vous seront familiers, d'autres vous seront inconnus à ce stade du cours : * les circuits de décodage d'adresse ; * un contrôleur DMA intel 8273 ; * un contrôleur d'interruption 8259 ; * un contrôleur de bus Intel 8288 pour gérer le bus XT ; * un générateur d'horloge Intel 8284 et un diviseur de fréquence ; * un ''timer'' Intel 8253, le même que celui étudié dans le chapitre sur les ''timers'' ; * un contrôleur parallèle 8255. Les multiplexeurs, registres et portes logiques, sont des circuits de décodage d'adresse, qui permettent de combiner plusieurs RAM en une seule, idem avec la mémoire ROM. Si vous verrez qu'il y a 5 mémoires ROM : une ROM pour le BIOS, et quatre autres ROM pour le BASIC. Les 4 ROM du BASIC sont combinées en une seule mémoire ROM. Pour les RAM, il y en a 8 à 32, qui sont combinées en une seule RAM de 16 à 64 kibioctets. [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] ===L'architecture d'un IBM PC compatible 16 bits=== Les PC suivants sont passés à des processeurs 16 bits, mais c'était toujours des processeurs x86 d'Intel, à savoir des Intel 286 et 386. La RAM a grossi, quelques entrées-sorties ont été ajoutées, mais l'architecture globale est plus moins resté le même. C'est surtout au niveau du bus et des périphériques que les changements majeurs ont eu lieu. [[File:ISA Bus pins.svg|vignette|Connecteur ISA.]] Les PC 16 bits utilisaient un bus système unique, sur lequel tout était connecté : le processeur, la RAM, la ROM, les cartes d'extension et tout le reste. Le bus en question s'appelait le '''bus AT''', mais il a rapidement été renommé en '''bus ISA''' (''Industry Standard Architecture''). Le bus ISA était prévu pour avoir une compatibilité avec le bus 8 bits de l'IBM PC originel. D'ailleurs, cela se ressent jusque dans le connecteur utilisé : le connecteur ISA est un connecteur XT qu'on a fusionné avec un second connecteur pour l'étendre de 8 à 16 bits. Les PC 16 bits avaient toujours un port série, un port parallèle, un clavier, un lecteur de disquette et des cartes d'extension. Des disques durs pouvaient être ajoutés, aussi. Mais pour ces périphériques, un changement majeur a eu lieu comparé à l'IBM PC originel. L'IBM PC originel utilisait des cartes d'extension pour tout, sauf le clavier. Mais maintenant, les périphériques ne sont plus connectés à une carte d'extension. À la place, les circuits de la carte d'extension sont déplacés sur la carte mère. Mais n'allez pas croire qu'ils étaient connectés directement au bus ISA, il y avait des intermédiaires. Le clavier était relié à un '''contrôleur de clavier''', qui faisait l'interface entre le connecteur du clavier et le bus ISA. Le contrôleur de clavier était appelé le ''Keyboard Controler'', abrévié en KB. Il recevait ce qui est tapé au clavier et traduisait cela en quelque chose de compréhensible par l'ordinateur. Les autres périphériques étaient connectés à un circuit intégré dédié : l''''Intel 82091AA'''. Il était connecté au lecteur de disquette, au port série et au port parallèle. Il servait d'intermédiaire entre ces périphériques et le bus ISA. Vous pouvez le voir comme une sorte de répartiteur, mais qui ne serait pas connecté sur le processeur et la RAM Enfin, il ne faut pas oublier les autres composants présents sur l'IBM PC originel. Le BIOS est toujours là, de même que les ''timers'' Intel 8253 PIT, le contrôleur d'interruption Intel 8259 et le contrôleur DMA Intel 8237. Les PC 16 bits ont aussi intégré une ''Real Time Clock'' (RTC). Pour rappel, c'est un composant qui permet au PC de mémoriser la date et l'heure courante, à la seconde près. Le tout est résumé dans le schéma ci-dessous. [[File:Architecture de l'IBM PC compatible.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible]] Un point important est que le bus ISA allait à la même fréquence que le processeur, vu que c'était un bus système. Les processeurs de l'époque étaient des CPU 286 d'Intel, ou le 386 d'Intel. Les Intel 286 allaient de 4 MHz minimum, à 25 MHz maximum. Le 386, quant à lui, allait de 12 à 40 MHz. Le bus ISA devait aller à cette fréquence, il était synchrone avec le processeur. Par la suite, les processeurs ont gagné en performance, ce qui fait que le bus ISA est devenu trop lent pour le processeur. Une idée a alors été de conserver le bus ISA, pour des raisons de compatibilité, mais de le reléguer comme bus secondaire. L'ordinateur contient alors deux bus : un bus système, et un bus ISA secondaire. Le lien entre les deux est réalisé par un '''pont ISA''', ''ISA Bridge'' en anglais. Le bus ISA fonctionnait alors sa fréquence usuelle, alors que le bus système était beaucoup plus rapide. Le bus système fonctionnait à une fréquence bien plus élevée, ce qui fait que le processeur pouvait communiquer à pleine vitesse, notamment avec la RAM. Le processeur n'était alors plus forcé à aller à la même fréquence que le bus ISA [[File:Architecture de l'IBM PC compatible avec bridge ISA.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible avec bridge ISA]] Les PC de l'époque intégraient donc plusieurs bus séparés. Vous avez bien lu : plusieurs bus ! Ici, il s'agit de ce que j'appelle des '''bus en cascade''', à savoir qu'un bus est connecté à un autre bus par un intermédiaire. Au passage, si j'aborde ces exemples, car c'est pareil sur les ordinateurs modernes. Le pont ISA a été remplacé par des circuits différents, mais qui ont un rôle assez similaire. Le ''chipset'' de votre carte mère n'est qu'un lointain descendant du pont ISA, qui s'interface avec des bus différents. ===L'arrivée des standards AT et IDE pour les disques durs=== Initialement, les disques durs étaient placés dans l'ordinateur et étaient connectés sur le bus ISA, via une carte d'extension ISA. En clair, il fallait connecter le disque dur sur une carte d'extension, et non sur la carte mère. Les cartes d'extension en question permettaient de connecter un ou plusieurs disques durs, parfois des lecteurs de disquette supplémentaires. Les cartes ISA de ce type faisaient juste l'interface entre le bus ISA et les disques durs, rien de plus. L'interface en question a été standardisée, ce qui a donné le standard ''AT Bus Attachment'', qui a été abrévié en ATA. Et ce n'était pas que pour les disques durs, de nombreux composants étaient dans ce cas. Une carte d'extension servait d'intermédiaire entre eux et la carte mère. Les cartes d'extension en question étaient appelées des ''Host bus adapter''. [[File:Acculogic sIDE-4 Controller ISA.jpg|centre|vignette|upright=2|Carte ISA d'interface disque dur, de marque Acculogic.]] Mais les choses ont rapidement évoluées, que ce soit du côté des cartes mères que du côté des disques durs. Le '''standard IDE''' a permis de brancher un disque dur directement sur la carte mère, sans passer par une carte d'interface ISA. Pour cela, la carte mère réservait un connecteur ISA pour le disque dur, renommé '''connecteur ATA'''. Pour que cela soit possible, il a fallu rajouter des circuits sur la carte mère. Tout ce qui était sur les cartes d'interface ISA s'est retrouvé sur la carte mère. [[File:Ajout des ports IDE sur la carte mère.png|centre|vignette|upright=2|Ajout des ports IDE sur la carte mère]] En réalité, les connecteurs ATA étaient des connecteurs ISA simplifiés. Un connecteur ISA avait en tout 98 broches, alors qu'un connecteur ATA n'en contient que 40. Les broches qui étaient inutiles pour les disques durs ont simplement été enlevées. Et qui dit connecteur spécialisé, dit câble spécialisé. Les disques durs étaient branchés sur le connecteur AT grâce à un câble ATA, sur lequel on pouvait connecter deux disques durs. [[File:ATA Plug.svg|centre|vignette|upright=2|Connecteur ATA.]] [[File:ATA cables.jpg|centre|vignette|upright=2|Cable ATA.]] Il était donc possible de connecter deux disques durs sur un seul connecteur ATA. Et cette possibilité est devenue d'autant plus utile par la suite. A partir de la version 2, ATA supportait aussi les lecteurs de disquettes, les lecteurs de CD/DVD, et bien d'autres supports de stockage. Il était alors possible de connecter un lecteur CD et un disque dur sur un seul connecteur. Les cartes mères avaient généralement deux connecteurs ATA, et n'avaient pas besoin de plus. C'était suffisant pour connecter un disque dur, un lecteur de disquette et un lecteur CD, configuration courante entre les années 90 et 2000. Un câble est donc connecté à deux supports de stockage. Pour distinguer les deux, le standard ATA ajoute une possibilité de configuration. Sur un câble, il doit y avoir un support de stockage "maitre" et un support "esclave". C'était la terminologie de l'époque, que je reproduis ici, même si elle est fortement trompeuse. N'allez pas croire que cela implique que l'un ait des avantages sur l'autre. Le support 'maitre" n'a pas droit à plus de bande passante, il n'a pas la priorité sur l'autre, rien du tout. Il s'agit juste d'un nombre qui permet de savoir avec qui le processeur communique, qui vaut 0 pour le premier support, 1 pour l'autre. Une sorte d'adresse de 1 bit, si l'on veut. [[File:ATA-Konfiguration02.png|centre|vignette|upright=2|Configuration ATA.]] Pour configurer un support de stockage en mode "maitre" ou "esclave", le support de stockage avait quelques pins dédiés. Il suffisait de placer un détrompeur en plastique sur les pins adéquats. Les pins se trouvaient à l'arrière du disque dur ou du lecteur de CD/DVD/Disquette/autre. [[File:HDD Master and Slave Description.jpg|centre|vignette|upright=2|Configuration ''Master/Slave''.]] ===L'architecture d'un PC avec un processeur Intel 486=== Maintenant, passons aux ordinateurs 32 bits, avec l'exemple d'un PC avec un processeur 486 d'Intel. A cette époque, le bus ISA était devenu trop limité et était en place d'être remplacé par le bus PCI, qui avait la même fonction. De nombreuses cartes d'extension utilisaient déjà ce standard et étaient branchées sur des connecteurs PCI dédiés, différents des connecteurs ISA. Intuitivement, on se dit que le bus PCI remplaçait le bus ISA, mais les choses étaient plus compliquées. Les disques durs gardaient leur connecteur ATA, et ne passaient pas par le bus PCI. Ils avaient un bus IDE séparé, qui était un bus ISA modifié. Là encore, les processeurs étaient devenus beaucoup plus rapides que le bus PCI. Les deux allaient à des fréquences assez différentes, ce qui fait que le bus PCI était séparé du bus système. Il y avait alors deux implémentations possibles. * La première utilise un répartiteur unique, relié au processeur, à la RAM, au bus PCI, et au bus IDE. * La seconde utilise un bus système séparé du bus PCI, avec un '''pont PCI''' pour faire l'interface entre les deux. Le '''''System Controler''''' était un circuit intégré, placé sur la carte mère, qui peut servir soit de pont PCI, soit de répartiteur. Le répartiteur PCI sert d'intermédiaire avec le bus PCI, mais aussi avec le bus IDE, utilisé pour les disques durs, aussi appelé le bus ''Parallel ATA''. Il peut aussi être connecté au processeur, à la mémoire RAM, ainsi qu'à la mémoire cache, mais cela ne sert que quand il est utilisé comme répartiteur. [[File:Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur.png|centre|vignette|upright=2|Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur]] Pour des raisons de compatibilité, le bus ISA avait été conservé, aux côtés du bus PCI. Il y avait un pont ISA en plus du pont/répartiteur PCI. Une implémentation possible aurait été de connecter les deux ponts ISA et PCI à un bus système unique. Mais cette solution n'a pas été retenue. La raison est que le bus PCI et le bus ISA ont des performances très différentes. Le bus PCI est très rapide, le bus ISA beaucoup plus lent. La différence est d'un ordre de grandeur, environ. Dans ces conditions, il est possible de faire passer les communications ISA à travers le bus PCI. Pour cela, le pont ISA est directement connecté sur le pont PCI, comme illustré ci-dessous. Et il en est de même pour le bus dédié aux disques durs. En effet, les disques durs étaient autrefois reliés au bus ISA, mais cela a changé depuis. Ils disposent maintenant de leur propre bus dédié, le '''bus IDE''', qui est un bus ISA simplifié. Et ce bus ISA simplifié était connecté directement sur le pont PCI. [[File:Architecture de l'IBM PC compatible avec pont PCI.png|centre|vignette|upright=2|Architecture de l'IBM PC compatible avec pont PCI]] Dans ce qui va suivre, nous allons étudier un exemple qui utilise un bus système séparé, avec un pont PCI, sans répartiteur. Voilà pour les grandes lignes, mais le schéma ci-dessous montre que tout est plus complexe. Vous remarquerez des connexions optionnelles entre le pont PCI et la mémoire RAM et la mémoire cache. La raison est que le pont PCI peut aussi servir de répartiteur en remplacement du bus système. Concrètement, on peut alors retirer le bus système. La mémoire, le bus PCI, le bus ISA, le bus IDE, le processeur et la RAM sont alors connectés au répartiteur PCI, qui sert d'intermédiaire central entre tous ces composants. Mais ce n'est pas la solution qui a été retenue dans notre exemple. [[File:Intel486-Typ PCI System.png|centre|vignette|upright=2|PC IBM compatible avec un 486, un bus PCI et un bus ISA. Le ''host bus'' est le bus système.]] Le pont ISA sert ici d'intermédiaire entre le bus système et le bus ISA. De plus, il a été amélioré sur de nombreux points. Il inclut notamment des circuits qui étaient autrefois sur la carte mère, à savoir le contrôleur DMA 82C87 et le contrôleur d'interruption 82C59, ainsi que les ''timers'' Intel 82C54. Les composants restants sont eux reliés sur un quatrième bus : le bus X, l'ancêtre du bus ''Low Pin Count''. Le bus X était celui du BIOS, du contrôleur de clavier, de la ''Real Time Clock'', et du contrôleur de périphérique 82091AA d'Intel. [[File:ISA Bridge schematic.png|centre|vignette|upright=2|ISA Bridge.]] ===L'architecture des PC des années 90-2000=== Par la suite, les ponts PCI et ISA ont évolué avec l'évolution des bus de l'ordinateur. Le bus ISA a progressivement été remplacé par d'autres bus, comme le bus ''Low Pin Count'', le bus PCI a été remplacé par le PCI Express, d'autres bus ont été ajoutés, etc. Mais la séparation du ''chipset'' en deux a été conservée. [[File:Chipset schematic.svg|vignette|upright=1.0|Chipset séparé en northbridge et southbridge.]] Le pont PCI et le pont ISA ont été remplacés respectivement par le '''pont nord''' et le '''pont sud''', plus connus par leurs noms anglais de ''northbridge'' et de ''southbridge''. Le pont nord servait d'interface entre le processeur, la mémoire et la carte graphique et est connecté à chacun par un bus dédié. Il intégrait aussi le contrôleur mémoire. Le pont sud est le répartiteur pour les composants lents, à savoir l'USB, l'Ethernet, etc. Le bus qui relie le processeur au pont nord était appelé le '''''Front Side Bus''''', abrévié en FSB. [[File:IMac Chipset.png|centre|vignette|upright=2|Chipset séparé en northbridge et southbridge.]] Un point important est que le bus PCI est devenu un bus assez lent, ce qui fait qu'il a finit par être connecté au pont sud. Le pont PCI est donc devenu le pont sud, dans le courant des années 2000. Durant un moment, un équivalent du pont ISA a subsisté dans un circuit de '''''Super IO'''''. Concrètement, il s'occupait du lecteur de disquette, du port parallèle, du port série, et des ports PS/2 pour le clavier et la souris. Mais il ne gérait pas le bus ISA, mais son remplaçant, le bus ''Low Pin Count''. [[File:Motherboard diagram fr.svg|centre|vignette|upright=1.5|Carte mère avec circuit Super IO.]] ===L'architecture des PC depuis les années 2000=== Depuis la sortie du processeur AMD Athlon 64, le pont nord a été fusionné dans le processeur. La fusion ne s'est pas faite en une fois, des fonctionnalités ont progressivement été progressivement intégrées dans le processeur. Le pont sud est resté, mais il a alors été progressivement connecté directement au processeur. La raison derrière cette intégration est que les processeurs avaient de plus en plus de transistors à leur disposition. Ils en ont profité pour intégrer le pont nord. Et cela permettait de simplifier le câblage des cartes mères, sans pour autant rendre vraiment plus complexe la fabrication du processeur. Les industriels y trouvent leur compte. La première étape a été l'intégration du contrôleur mémoire a été intégré au processeur. Concrètement, le résultat était que la mémoire RAM n'était plus connectée au pont nord, mais était connectée directement au processeur ! Il y a donc eu un retour d'un bus mémoire, mais spécialisé pour la mémoire RAM. En théorie, une telle intégration permet diverses optimisations quant aux transferts avec la mémoire RAM. Les transferts ne passent pas par un répartiteur, ce qui réduit le temps d'accès à la mémoire RAM. Ajoutons de sombres histoires de prefetching, d'optimisation des commandes, et j'en passe. Toujours est-il que le pont nord ne servait alors d'intermédiaire que pour les ports PCI Express, et le pont sud. [[File:X58 Block Diagram.png|centre|vignette|upright=2|Chipset X58 d'Intel.]] Par la suite, la carte graphique fût aussi connectée directement sur le processeur. Le processeur incorpore pour cela des contrôleurs PCI-Express. Le pont nord a alors disparu complétement, son intégration dans le processeur était complète. Sur les cartes mères Intel récentes, le pont sdud subsiste, il est appelé le ''Platform Controler Hub'', ou PCH. L'organisation des bus sur la carte mère qui résulte de cette connexion du processeur à la carte graphique, est illustrée ci-dessous, avec l'exemple du PCH. [[File:Intel 5 Series architecture.png|centre|vignette|upright=2|Intel 5 Series architecture]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=L'interface électrique entre circuits intégrés et bus | prevText=L'interface électrique entre circuits intégrés et bus | next=La hiérarchie mémoire | nextText=La hiérarchie mémoire }} </noinclude> 8s7ezpbvx3ffyo5hy3gc58ouldkf0f8 765743 765742 2026-05-01T21:56:12Z Mewtow 31375 /* Les SoC haute performance */ 765743 wikitext text/x-wiki Dans les chapitres précédents, nous avons vu comment représenter de l'information, la traiter et la mémoriser avec des circuits. Mais un ordinateur n'est pas qu'un amoncellement de circuits et est organisé d'une manière bien précise. Il est structuré autour de trois circuits principaux : * un '''processeur''', qui manipule l'information et donne un résultat ; * une '''mémoire''' qui mémorise les données à manipuler ; * les '''entrées/sorties''', qui permettent à l'ordinateur de communiquer avec l'extérieur. [[File:Architecture Von Neumann.png|centre|vignette|upright=2|Architecture d'un système à mémoire.]] Pour faire simple, le processeur est un circuit qui s'occupe de faire des calculs. Rien d'étonnant à cela. Je rappelle que tout est codé par des nombres dans un ordinateur, ce qui fait que manipuler des nombres revient simplement à faire des calculs. Un ordinateur n'est donc qu'une grosse calculatrice améliorée, et le processeur est le composant qui fait les calculs. La mémoire s'occupe purement de la mémorisation des données, des nombres sur lesquelles faire des calculs. Pour être plus précis, il y a deux mémoires : une pour les données proprement dites, une autre pour le programme à exécuter. La première est la '''mémoire RAM''', la seconde est la '''mémoire ROM'''. Nous détaillerons ce que sont ces deux mémoires dans la suite du chapitre, mais sachez que nous avions déjà rencontré ces deux types de mémoires dans les chapitres sur les registres et les mémoires adressables. Les entrées-sorties permettent au processeur et à la mémoire de communiquer avec l'extérieur et d'échanger des informations avec des périphériques. Les '''périphériques''' regroupent, pour rappel, tout ce est branché sur un ordinateur, mais n'est pas à l'intérieur de celui-ci. Le processeur, les mémoires et les entrées-sorties communiquent ensemble via un '''réseau d'interconnexions'''. Le terme est assez barbare, mais rien de compliqué sur le principe. C'est juste un ensemble de fils électriques qui relie les différents éléments d'un ordinateur. Les interconnexions sont souvent appelées le bus de communication, mais le terme est un abus de langage, comme on le verra plus bas. Afin de simplifier les explications, on va supposer que le réseau d'interconnexion est le suivant. Tout est connecté au processeur. Il y a des interconnexions entre le processeur et la mémoire RAM, d'autres interconnexions entre processeur et mémoire ROM, et d'autres entre le processeur et les entrées-sorties. Nous verrons que d'autres réseaux d'interconnexions fusionnent certaines interconnexions, pour les partager entre la ROM et la RAM, par exemple. Mais pour le moment, gardez le schéma ci-dessous en tête. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ==Les mémoires RAM et ROM== La mémoire est le composant qui mémorise des informations, des données. Dans la majorité des cas, la mémoire est composée de plusieurs '''cases mémoire''', chacune mémorisant plusieurs bits, le nombre de bits étant identique pour toutes les cases mémoire. Dans le cas le plus simple, une case mémoire mémorise un '''octet''', un groupe de 8 bits. Mais les mémoires modernes mémorisent plusieurs octets par case mémoire : elles ont des cases mémoires de 16, 32 ou 64 bits, soit respectivement 2/4/8 octets. De rares mémoires assez anciennes utilisaient des cases mémoires contenant 1, 2, 3, 4, 5, 6 7, 13, 17, 23, 36 ou 48 bits. Mais ce n'était pas des mémoires électroniques, aussi nous allons les passer sous silence. Tout ce qu'il faut savoir est que la quasi-totalité des mémoires électronique a un ou plusieurs octets par case mémoire. Pour simplifier, vous pouvez imaginer qu'une mémoire RAM est un regroupement de registre, chacun étant une case mémoire. C'est une description pas trop mauvaise pour décrire les mémoires RAM, qu'on abordera dans ce qui suit. {|class="wikitable" |+ Contenu d'une mémoire, case mémoire de 16 bits (deux octets) |- ! Case mémoire N°1 | 0001 0110 1111 1110 |- ! Case mémoire N°2 | 1111 1110 0110 1111 |- ! Case mémoire N°3 | 0001 0000 0110 0001 |- ! Case mémoire N°4 | 1000 0110 0001 0000 |- ! Case mémoire N°5 | 1100 1010 0110 0001 |- ! ... | ... |- ! Case mémoire N°1023 | 0001 0110 0001 0110 |- ! Case mémoire N°1024 | 0001 0110 0001 0110 |} Dans ce cours, il nous arrivera de partir du principe qu'il y a un octet par case mémoire, par souci de simplification. Mais ce ne sera pas systématique. De plus, il nous arrivera d'utiliser le terme adresse pour parler en réalité de la case mémoire associée, par métonymie. ===La capacité mémoire=== Bien évidemment, une mémoire ne peut stocker qu'une quantité finie de données. Et à ce petit jeu, certaines mémoires s'en sortent mieux que d'autres et peuvent stocker beaucoup plus de données que les autres. La '''capacité''' d'une mémoire correspond à la quantité d'informations que celle-ci peut mémoriser. Plus précisément, il s'agit du nombre maximal de bits qu'une mémoire peut contenir. Elle est le produit entre le nombre de cases mémoire, et la taille en bit d'une case mémoire. Toutes les mémoires actuelles utilisant des cases mémoire d'un ou plusieurs octets, ce qui nous arrange pour compter la capacité d'une mémoire. Au lieu de compter cette capacité en bits, on préfère mesurer la capacité d'une mémoire avec le nombre d'octets qu'elle contient. Mais les mémoires des PC font plusieurs millions ou milliards d'octets. Pour se faciliter la tâche, on utilise des préfixes pour désigner les différentes capacités mémoires. Vous connaissez sûrement ces préfixes : kibioctets, mébioctets et gibioctets, notés respectivement Kio, Mio et Gio. {|class="wikitable" |- !Préfixe!!Capacité mémoire en octets!!Puissance de deux |- ||Kio||1024||2<sup>10</sup> octets |- ||Mio||1 048 576||2<sup>20</sup> octets |- ||Gio||1 073 741 824||2<sup>30</sup> octets |} On peut se demander pourquoi utiliser des puissances de 1024, et ne pas utiliser des puissances un peu plus communes ? Dans la majorité des situations, les électroniciens préfèrent manipuler des puissances de deux pour se faciliter la vie. Par convention, on utilise souvent des puissances de 1024, qui est la puissance de deux la plus proche de 1000. Or, dans le langage courant, kilo, méga et giga sont des multiples de 1000. Quand vous vous pesez sur votre balance et que celle-ci vous indique 58 kilogrammes, cela veut dire que vous pesez 58 000 grammes. De même, un kilomètre est égal à 1000 mètres, et non 1024 mètres. Autrefois, on utilisait les termes kilo, méga et giga à la place de nos kibi, mebi et gibi, par abus de langage. Mais peu de personnes sont au courant de l'existence de ces nouvelles unités, et celles-ci sont rarement utilisées. Et cette confusion permet aux fabricants de disques durs de nous « arnaquer » : Ceux-ci donnent la capacité des disques durs qu'ils vendent en kilo, méga ou giga octets : l’acheteur croit implicitement avoir une capacité exprimée en kibi, mébi ou gibi octets, et se retrouve avec un disque dur qui contient moins de mémoire que prévu. ===Lecture et écriture : mémoires ROM et RWM=== Pour simplifier grandement, on peut grossièrement classer les mémoires en deux types : les ''Read Only Memory'' et les ''Read Write Memory'', aussi appelées mémoires ROM et mémoires RWM. Pour les '''mémoires ROM''', on ne peut pas modifier leur contenu. On peut y récupérer une donnée ou une instruction : on dit qu'on y accède en lecture. Mais on ne peut pas modifier les données qu'elles contiennent. Quant aux '''mémoires RWM''', on peut y accéder en lecture (récupérer une donnée stockée en mémoire), mais aussi en écriture : on peut stocker une donnée dans la mémoire, ou modifier une donnée existante. Tout ordinateur contient au minimum une ROM et une RWM (souvent une mémoire RAM), les deux n'ont pas exactement le même rôle. Pour simplifier, la mémoire ROM mémorise le programme à exécuter, la mémoire RWM stocke des données. Il a existé des ordinateurs où la mémoire RWM était une mémoire magnétique, voire acoustique, mais ce n'est plus le cas de nos jours. Pour les ordinateurs modernes, la mémoire RWM est une mémoire électronique. Pour faire la différence avec ces anciennes mémoires RWM, elle est appelée la '''mémoire RAM'''. Il s'agit d'une mémoire qui stocke temporairement des données que le processeur doit manipuler (on dit qu'elle est volatile). Elle s'efface complètement quand on coupe l'alimentation de l'ordinateur. Il existe d'autres différences entre mémoire RWM et RAM : * la mémoire RWM peut ne pas être volatile et donc conserver les données écrites ; * la mémoire RAM possède un temps d'accès constant aux données (quelle que soit l'adresse), ce qui n'est pas garanti pour les mémoires RWM. Outre le programme à exécuter, la mémoire ROM peut mémoriser des constantes, des données qui ne changent pas. Elles ne sont jamais modifiées et gardent la même valeur quoi qu'il se passe lors de l'exécution du programme. En conséquence, elles ne sont jamais accédées en écriture durant l'exécution du programme, ce qui fait que leur place est dans une mémoire ROM. La mémoire RWM est alors destinée aux données temporaires, qui changent ou sont modifiées lors de l'exécution du programme, et qui sont donc manipulées aussi bien en lecture et en écriture. La mémoire RWM mémorise alors les variables du programme à exécuter, qui sont des données que le programme va manipuler. Pour les systèmes les plus simples, la mémoire RWM ne sert à rien de plus. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Pour donner un exemple de données stockées en ROM, on peut prendre l'exemple des anciennes consoles de jeu 8 et 16 bits. Les jeux vidéos sur ces consoles étaient placés dans des cartouches de jeu, précisément dans une mémoire ROM à l'intérieur de la cartouche de jeu. La ROM mémorisait non seulement le code du jeu, le programme du jeu vidéo, mais aussi les niveaux et les ''sprites'' et autres données graphiques. Une conséquence est que les consoles 8/16 bits n'avaient pas besoin de beaucoup de RAM, comparé aux ordinateurs de l'époque, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. À l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. ===L'adressage mémoire=== Sur une mémoire RAM ou ROM, on ne peut lire ou écrire qu'une case mémoire, qu'un registre à la fois : une lecture ou écriture ne peut lire ou modifier qu'une seule case mémoire. Techniquement, le processeur doit préciser à quel case mémoire il veut accéder à chaque lecture/écriture. Pour cela, chaque case mémoire se voit attribuer un nombre binaire unique, l''''adresse''', qui va permettre de le sélectionner et de l'identifier celle-ci parmi toutes les autres. En fait, on peut comparer une adresse à un numéro de téléphone (ou à une adresse d'appartement) : chacun de vos correspondants a un numéro de téléphone et vous savez que pour appeler telle personne, vous devez composer tel numéro. Les adresses mémoires en sont l'équivalent pour les cases mémoire. [[File:Adressage mémoire.png|centre|vignette|upright=2|Exemple : on demande à la mémoire de sélectionner la case mémoire d'adresse 1002 et on récupère son contenu (ici, 17).]] L'adresse mémoire est générée par le processeur. Le processeur peut parfaitement calculer des adresses, en extraire du programme qu'il exécute, et bien d'autres choses. Nous détaillerons d'ailleurs les mécanismes pour dans les chapitres portant sur les modes d'adressage du processeur. Mais pour le moment, nous avons juste besoin de savoir que c'est le processeur qui envoie des adresses aux mémoires RAM et ROM. Les adresses générées par le processeur sont alors envoyées à la RAM ou la ROM via une connexion dédiée, un ensemble de fils qui connecte le processeur à la mémoire : le '''bus d'adresse mémoire'''. L'adresse sélectionne une case mémoire, le processeur peut alors récupérer la donnée dedans pour une lecture, écrire une donnée pour l'écriture. Pour cela, un second ensemble de fil connecte le processeur à la RAM/ROM, mais cette fois-ci pour échanger des données. Il s'agit du '''bus de données mémoire'''. Les deux sont souvent regroupés sous le terme de '''bus mémoire'''. Un ordinateur contient toujours une RAM et une ROM, ce qui demande aux bus mémoire de s'adapter à la présence de deux mémoires. Il y a alors deux solutions, illustrées dans les deux schémas ci-dessous. Avec la première, il y a un seul bus mémoire partagé entre la RAM et la ROM, comme illustré ci-dessous. Une autre solution utilise deux bus séparés : un pour la RAM et un autre pour la ROM. Nous verrons les différences pratiques entre les deux à la fin du chapitre. Pour le moment, nous allons partir du principe qu'il y a un bus pour la mémoire ROM, et un autre bus pour la RAM. [[File:CPT-System-Architecture-gapfill1-ANS.svg|centre|vignette|upright=2|Architecture avec une ROM et une RAM.]] [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ===L'alignement mémoire : introduction=== Plus haut, nous avions dit qu'il y a une adresse par case mémoire, chaque case mémoire contenant un ou plusieurs octets. Mais les processeurs modernes partent du principe que la mémoire a un octet par adresse, pas plus. Et ce même si la mémoire reliée au processeur utilise des cases mémoires de 2, 3, 4 octets ou plus. D'ailleurs, la majorité des mémoires RAM actuelle a des cases mémoires de 64 bits, soit 8 octets par case mémoire. Les raisons à cela sont multiple, mais nous les verrons en détail dans le chapitre sur l'alignement mémoire. Toujours est-il qu'il faut distinguer les '''adresses mémoire''' et les '''adresses d'octet''' gérées par le processeur. Le processeur génère des adresses d'octet, qui permettent de sélectionner un octet bien précis. L'adresse d'octet permet de sélectionner un octet parmi tous les autres. Mais la mémoire ne comprend pas directement cette adresse d'octet. Heureusement, l'octet en question est dans une case mémoire bien précise, qui a elle-même une adresse mémoire bien précise. L'adresse d'octet est alors convertie en une adresse mémoire, qui sélectionne la case mémoire adéquate, celle qui contient l'octet voulu. La case mémoire entière est lue, puis le processeur ne récupère que les données adéquates. Pour cela, des circuits d'alignement mémoire se chargent de faire la conversion entre adresses du processeur et adresse mémoire. Nous verrons cela dans le détail dans le chapitre sur l'alignement mémoire. Il existe des mémoires qui n'utilisent pas d'adresses mémoire, mais passons : ce sera pour la suite du cours. ==Le processeur== Dans les ordinateurs, l'unité de traitement porte le nom de '''processeur''', ou encore de '''''Central Processing Unit''''', abrévié en CPU. Le rôle principal du processeur est de faire des calculs. La plupart des processeurs actuels supportent au minimum l'addition, la soustraction et la multiplication. Quelques processeurs ne gèrent pas la division, qui est une opération très gourmande en circuit, peu utilisée, très lente. Il arrive que des processeurs très peu performants ne gèrent pas la multiplication, mais c'est assez rare. Un processeur ne fait pas que des calculs. Tout processeur est conçu pour effectuer un nombre limité d'opérations bien précises, comme des calculs, des échanges de données avec la mémoire, etc. Ces opérations sont appelées des '''instructions'''. Les plus intuitives sont les '''instructions arithmétiques''', qui font des calculs, comme l'addition, la soustraction, la multiplication, la division. Mais il y a aussi des '''instructions d'accès mémoire''', qui échangent des données entre la mémoire RAM et le processeur. Les autres instructions ne sont pas très intuitives, aussi passons-les sous silence pour le moment, tout deviendra plus clair dans les chapitres sur le processeur. ===Le processeur exécute un programme, une suite d'instructions=== Tout processeur est conçu pour exécuter une suite d'instructions dans l'ordre demandé, cette suite s'appelant un '''programme'''. Ce que fait le processeur est défini par la suite d'instructions qu'il exécute, par le programme qu'on lui demande de faire. Les instructions sont exécutées dans un ordre bien précis, les unes après les autres. L'ordre en question est décidé par le programmeur. La totalité des logiciels présents sur un ordinateur sont des programmes comme les autres. Le programme à exécuter est stockée dans la mémoire de l'ordinateur. C'est ainsi que l'ordinateur est rendu programmable : modifier le contenu de la mémoire permet de changer le programme exécuté. Mine de rien, cette idée de stocker le programme en mémoire est ce qui a fait que l’informatique est ce qu'elle est aujourd’hui. C'est la définition même d'ordinateur : appareil programmable qui stocke son programme dans une mémoire modifiable. Une instruction est codée comme les données : sous la forme de suites de bits. Telle suite de bit indique qu'il faut faire une addition, telle autre demande de faire une soustraction, etc. Pour simplifier, nous allons supposer qu'il y a une instruction par adresse mémoire. Sur la grosse majorité des ordinateurs, les instructions sont placées les unes à la suite des autres dans l'ordre où elles doivent être exécutées. Un programme informatique n'est donc qu'une vulgaire suite d'instructions stockée quelque part dans la mémoire de l'ordinateur. {|class="wikitable" |+ Exemple de programme informatique |- ! Adresse ! Instruction |- ! 0 | Copier le contenu de l'adresse 0F05 dans le registre numéro 5 |- ! 1 | Charger le contenu de l'adresse 0555 dans le registre numéro 4 |- ! 2 | Additionner ces deux nombres |- ! 3 | Charger le contenu de l'adresse 0555 |- ! 4 | Faire en XOR avec le résultat antérieur |- ! ... | ... |- ! 5464 | Instruction d'arrêt |} Pour exécuter une suite d'instructions dans le bon ordre, le processeur détermine à chaque cycle quelle est la prochaine instruction à exécuter. Pour cela, le processeur mémorise l'adresse de l'instruction en cours dans un registre : le '''Program Counter'''. Je rappelle que des instructions consécutives sont dans des adresses consécutives. Pour passer à la prochaine instruction, il suffit donc d'incrémenter le ''program counter''. : Si une instruction prend plusieurs octets, plusieurs adresses, il suffit de l'incrémenter du nombre d'octets/adresses. D'autres processeurs font autrement : chaque instruction précise l'adresse de la suivante, directement dans la suite de bit représentant l'instruction en mémoire. Ces processeurs n'ont pas besoin de calculer une adresse qui leur est fournie sur un plateau d'argent. Sur des processeurs aussi bizarres, pas besoin de stocker les instructions en mémoire dans l'ordre dans lesquelles elles sont censées être exécutées. Mais ces processeurs sont très très rares et peuvent être considérés comme des exceptions à la règle. Nous venons de voir qu'un processeur contient un registre appelé le ''program counter''. Mais il n'est pas le seul. Pour pouvoir fonctionner, tout processeur doit mémoriser un certain nombre d’informations nécessaires à son fonctionnement, qui sont mémorisées dans des '''registres de contrôle'''. La plupart ont des noms assez barbares (registre d'état, ''program counter'') et nous ne pouvons pas en parler à ce moment du cours. Nous les verrons en temps voulu, mais il est important de préciser qu'ils existent. ===L'intérieur d'un processeur=== Fort de ce que nous savons, nous pouvons expliquer ce qu'il y a à l'intérieur d'un processeur. Le premier point est qu'un processeur fait des calculs, ce qui implique qu'il contient des circuits de calcul. Ils sont regroupés dans une ou plusieurs '''unités de calcul'''. Nous avons déjà vu comment fabriquer une unité de calcul simple, dans un chapitre dédié, et c'est la même qui est présente dans un processeur. Du moins dans les grandes lignes, les circuits des processeurs modernes étant particulièrement optimisés. Il en est de même pour les autres circuits de calcul comme ceux pour les multiplications/division/autres. Si le processeur fait des calculs, qu'en est-il des opérandes ? Et où sont mémorisés les résultats des opérations ? Pour cela, le processeur incorpore des '''registres généraux'''. Les registres généraux servent à mémoriser les opérandes et résultats des instructions. Ils mémorisent des données, contrairement aux registres de contrôle mentionnés plus haut. Le nombre de registres généraux dépend grandement du processeur. Les tout premiers processeurs se débrouillaient avec un seul registre, mais les processeurs actuels utilisent plusieurs registres, pour mémoriser plusieurs opérandes/résultats. Mais la présence de registres est source de pas mal de petites complications. Par exemple, il faut échanger les données entre la RAM et les registres, il faut gérer l'adressage des registres, etc. Il s'agit là de détails que nous expliquerons dans les chapitres sur le processeur. Le processeur contient enfin un circuit pour interpréter les instructions, appelé l''''unité de contrôle'''. Elle lit les instructions depuis la mémoire, interprète la suite de bit associée, et commande le reste du processeur pour qu'il exécute l'instruction. Ses fonctions sont assez variées, mais nous allons simplifier en disant qu'elle configure l'unité de calcul et les registres pour faire le bon calcul. Son rôle est d'analyser la suite de bit qui constitue l'instruction, et d'en déduire quelle opération effectuer. Elle gère aussi l'accès à la mémoire RAM, et notamment ce qui est envoyé sur son bus d'adresse. : Dans ce qui suit, on suppose que le ''program counter'' fait partie de l'unité de contrôle. Pour résumer, un processeur contient une unité de calcul, des registres et une interface avec la mémoire RAM. Le tout est interconnecté, afin de pouvoir échanger des données. L’ensemble forme le '''chemin de données''', nom qui trahit le fait que c'est là que les données se déplacent et sont traitées. Il faut aussi ajouter l'unité de contrôle pour commander le tout. Elle lit les instructions en mémoire, puis commande le chemin de données pour que l'instruction soit exécutée correctement. [[File:Microarchitecture d'un processeur.png|centre|vignette|upright=2|Microarchitecture d'un processeur]] Un processeur parait donc assez simple expliqué comme ça, mais il y a de nombreuses subtilités. L'une d'entre elle est liée aux registres, et notamment à la manière dont on les utilise. Pour expliquer ces subtilités, nous allons voir comment les premiers processeurs fonctionnaient, avant de passer aux processeurs un peu plus modernes. Les tout premiers processeurs n'utilisaient qu'un seul registre, ce qui fait que l'utilisation des registres était très simple. Le passage à plusieurs registres a complexifié le tout. ===D'où viennent les adresses ?=== Il est maintenant temps de répondre à une question qui s'était posée dans la section sur l'adressage : d'où viennent les adresses envoyées à la mémoire ? Pour ce qui est des adresses des instructions, on connait déjà la réponse : c'est le ''program counter'' qui gère tout. Mais pour les données, il y a deux possibilités, qui correspondent à deux types de données : les données statiques et les données dynamiques. Les '''données statiques''' sont les plus simples : elles existent durant toute la durée de vie du programme. Tant que celui-ci s'exécute, il aura besoin de ces données. En conséquence, il leur réserve une place en mémoire, qui est toujours la même. La donnée se situe donc à une adresse bien précise, qui ne change jamais. Attention cependant : les données peuvent être modifiées, changer de valeur. Le programme écrit dans les donnée statiques, c'est même assez fréquent. Ce sont ne sont pas forcément des données constantes ! Pour les données statiques, elles sont toujours placées à la même adresse mémoire. Pour le dire autrement, l'adresse mémoire est une constante, qui ne change pas. L'adresse est connue avant d’exécuter le programme, le programme a été codé pour utiliser cette adresse pour telle donnée, on a réservé une adresse pour la donnée voulue. Et même si vous quittez le programme et vous le relancez plusieurs jours après, l'adresse mémoire sera la même avant et après. Et cela permet d'utiliser l''''adressage direct'''. L'idée est que les instructions précisent donc l'adresse à lire ou écrire. Pour cela, l'adresse est intégrée dans l’instruction elle-même. Pour rappel, l'instruction est codée par une suite de bit en mémoire RAM/ROM, dont certains précisent l'opération à faire, les autres servant à autre chose. L'idée est que certains bits précisent l'adresse mémoire de la donnée à lire. Les instructions sont donc du genre : * ''LOAD 56'' - lit l'adresse numéro 56 et copie son contenu dans un registre; * ''STORE R5 , adress 99'', copie le registre R5 dans l'adresse 99 ; * ''ADD R5 , adress 209'' : additionne le registre R5 avec le contenu de l'adresse 209. S'il existe des données statiques, c'est signe qu'il existe des '''données dynamiques'''. Ces dernières sont des données qui sont créées ou détruites selon les besoins. Pour comprendre d'où viennent ces données dynamiques, prenons le cas d'une personne qui écrit du texte sur un ordinateur. Le texte qu'il écrit est mémorisé dans la RAM de l’ordinateur, puis est sauvegardé sur le disque dur quand il sauvegarde son document. Au fur et à mesure qu'il écrit du texte, la RAM utilisée par ce texte augmente. Donc, ce texte est une donnée dynamique, dont la taille varie dans le temps. Pour gérer des données dynamiques, la plupart des systèmes d'exploitation incorporent des fonctionnalités d''''allocation mémoire'''. Derrière ce nom barbare, se cache quelque chose de simple : les programmes peuvent réclamer de la mémoire au système d'exploitation, pour y placer les données qu'ils souhaitent. Les langages de programmation bas niveau supportent des fonctions comme malloc(), qui permettent de demander un bloc de mémoire de N octets à l'OS, qui doit alors accommoder la demande. De même, un programme peut libérer de la mémoire qu'il n'utilise plus avec des fonctions comme free(). Avec l'allocation mémoire, les données n'ont pas de place fixe en mémoire. Leur adresse mémoire peut varier d'une exécution du programme à l'autre. Pire que ça : les données peuvent être déplacées dans la mémoire RAM, si besoin. En clair : l'adresse est déterminée lors de l'exécution du programme. L'adresse est alors soit calculée, soit lue depuis la mémoire RAM, soit déterminée autrement. Toujours est-il qu'elle se retrouve dans un registre général. Pour gérer ces adresse variables, les processeurs utilisent l''''adressage indirect'''. L'adressage indirect permet d'utiliser une adresse qui est dans un registre de données. L'adresse en question peut être envoyée à la mémoire RAM sans problème, le processeur peut automatiquement connecter le registre adéquat sur le bus d'adresse. Au tout début de l'informatique, les processeurs ne supportaient que l'adressage direct, pas plus. L'adressage indirect n'était tout simplement pas possible. Avec l'adressage direct, l'adresse à lire est extraite directement des instructions, par l'unité de contrôle. Le bus d'adresse de la RAM est alors relié directement à l'unité de contrôle, le bus de données est relié aux registres. [[File:Architecture Harvard avec adressage direct uniquement.png|centre|vignette|upright=2|Architecture Harvard avec adressage direct uniquement]] Mais dès les années 70, l'adressage indirect est apparu, rendant la programmation bien plus simple. Mais cela a demandé quelques adaptation au niveau du processeur. Avec l'adressage indirect, le bus d'adresse est connecté aux registres. Il a donc fallu rajouter un multiplexeur pour que le processeur décide de relier le bus d'adresse soit aux registres, soit à l'unité de contrôle. ===Un ordinateur peut avoir plusieurs processeurs=== La plupart des ordinateurs n'ont qu'un seul processeur, ce qui fait qu'on désigne avec le terme d''''ordinateurs mono-processeur'''. Mais il a existé (et existe encore) des '''ordinateurs multi-processeurs''', avec plusieurs processeurs sur la même carte mère. L'idée était de gagner en performance : deux processeurs permettent de faire deux fois plus de calcul qu'un seul, quatre permettent d'en faire quatre fois plus, etc. C'est très courant sur les supercalculateurs, des ordinateurs très puissants conçus pour du calcul industriel ou scientifique, mais aussi sur les serveurs ! Dans le cas le plus courant, ils utilisent plusieurs processeurs identiques : on utilise deux processeurs Core i3 de même modèle, ou quatre Pentium 3, etc. Pour utiliser plusieurs processeurs, les programmes doivent être adaptés. Pour cela, il y a plusieurs possibilités : * Une première possibilité, assez intuitive, est d’exécuter des programmes différents sur des processeurs différents. Par exemple, on exécute le navigateur web sur un processeur, le lecteur vidéo sur un autre, etc. * La seconde option est de créer des programmes spéciaux, qui utilisent plusieurs processeurs. Ils répartissent les calculs à faire sur les différents processeurs. Un exemple est la lecture d'une vidéo sur le web : un processeur peut télécharger la vidéo pendant le visionnage et bufferiser celle-ci, un autre processeur peut décoder la vidéo, un autre décoder l'audio. De tels programmes restent des suites d'instructions, mais ils sont plus complexes que les programmes normaux, aussi nous les passons sous silence. * La troisième option est d’exécuter le même programme sur les différents processeurs, mais chaque processeur traite son propre ensemble de données. Par exemple, pour un programme de rendu 3D, quatre processeurs peuvent s'occuper chacun d'une portion de l'image. [[File:Architecture de Von Neumann Princeton multi processeurs.svg|centre|vignette|upright=2|Architecture de Von Neumann Princeton multi processeurs]] De nos jours, les ordinateurs grand public les plus utilisés sont dans un cas intermédiaire, ils ne sont ni mono-, ni multi-processeur. Ils n'ont qu'un seul processeur, dans le sens où si on ouvre l'ordinateur et qu'on regarde la carte mère, il n'y a qu'un seul processeur. Mais ce processeur est en réalité assez similaire à un regroupement de plusieurs processeurs dans le même boitier. Il s'agit de '''processeurs multicœurs''', qui contiennent plusieurs cœurs, chaque cœur pouvant exécuter un programme tout seul. La différence entre cœur et processeur est assez difficile à saisir, mais pour simplifier : un cœur est l'ensemble des circuits nécessaires pour exécuter un programme. Chaque cœur dispose de toute la machinerie électronique pour exécuter un programme, à savoir des circuits aux noms barbares comme : un séquenceur d'instruction, des registres, une unité de calcul. Par contre, certains circuits d'un processeur ne sont présents qu'en un seul exemplaire dans un processeur multicœur, comme les circuits de communication avec la mémoire ou les circuits d’interfaçage avec la carte mère. Suivant le nombre de cœurs présents dans notre processeur, celui-ci sera appelé un processeur double-cœur (deux cœurs), quadruple-cœur (4 cœurs), octuple-cœur (8 cœurs), etc. Un processeur double-cœur est équivalent à avoir deux processeurs dans l'ordinateur, un processeur quadruple-cœur est équivalent à avoir quatre processeurs dans l'ordinateur, etc. Ces processeurs sont devenus la norme dans les ordinateurs grand public et les logiciels et systèmes d'exploitation se sont adaptés. ===Les coprocesseurs=== Quelques ordinateurs assez anciens disposaient de '''coprocesseurs''', des processeurs qui complémentaient un processeur principal. Les ordinateurs de ce type avaient un processeur principal, le '''CPU''', qui était secondé par un ou plusieurs coprocesseurs. Sauf exception, le CPU et le coprocesseur exécutent des programmes différents, ils travaillent en parallèle. Les coprocesseurs les plus connus sont les '''coprocesseurs pour le rendu 2D/3D'''. Ils ont eu leur heure de gloire sur les anciennes consoles de jeux vidéo, comme Super Nintendo, la Playstation et autres consoles de cette génération ou antérieure. Ils s'occupaient respectivement de calculer les graphismes des jeux vidéos. De nos jours, ils ont été remplacés par des cartes graphiques, ou des ''Graphic Processing Units'', qui ne sont pas considérées comme des coprocesseurs. Les '''coprocesseurs sonores''' sont une sorte d'ancêtre des cartes son, utilisés sur les anciennes consoles de jeux vidéo, comme La Nintendo 64, la Playstation et autres consoles antérieures. Ils s'occupaient respectivement de calculer tout ce qui a trait au son. Pour donner un exemple, on peut citer la console Neo-géo, qui disposait de deux processeurs travaillant en parallèle : un processeur principal, et un coprocesseur sonore. Le processeur principal était un Motorola 68000, alors que le coprocesseur sonore était un processeur Z80. L'accès aux périphériques est quelque chose sur lequel nous passerons plusieurs chapitres dans ce cours. Mais sachez que l'accès aux périphériques peut demander pas mal de puissance de calculs. Le CPU principal peut faire ce genre de calculs par lui-même, mais il n'est pas rare qu'un '''coprocesseur d'IO''' soit dédié à l'accès aux périphériques. Un exemple assez récent est celui de la console de jeu Nintendo 3DS. Elle disposait d'un processeur principal de type ARM9, d'un coprocesseur pour les divisions qu'on abordera plus bas, et d'un second processeur ARM7. L'ARM 7 était utilisé comme coprocesseur d'I/O, ainsi que pour l'émulation de la console GBA. [[File:Asmp 2.gif|centre|vignette|upright=2|Co-processeur pour l'accès aux entrées-sorties.]] Les '''coprocesseurs arithmétiques''' sont un peu à part des autres. Ils sont spécialisés dans les calculs en virgule flottante. Ils étaient utilisés à une époque où les CPU ne géraient que des calculs entiers (en binaire ou en BCD). Un exemple est le coprocesseur flottant x87, complémentaire des premiers processeurs Intel x86. Il y a eu la même chose sur les processeurs Motorola 68000, avec deux coprocesseurs flottants appelés les Motorola 68881 et les Motorola 68882. Un exemple récent de coprocesseur est celui utilisé sur la console de jeu Nintendo DS. La console utilisait deux processeurs, un ARM9 et un ARM7, qui ne pouvaient pas faire de division entière. Il s'agit pourtant d'opérations importantes dans le cas du rendu 3D, ce qui fait que les concepteurs de la console ont rajouté un coprocesseur spécialisé dans les divisions entières et les racines carrées. Le coprocesseur était adressable directement par le processeur, comme peuvent l'être la RAM ou les périphériques. ==Les entrées-sorties== Tous les circuits vus précédemment traitent des données codées en binaire. Ceci dit, les données ne sortent pas de n'importe où : l'ordinateur contient des composants électroniques qui traduisent des informations venant de l’extérieur en nombres. Ces composants sont ce qu'on appelle des '''entrées'''. Par exemple, le clavier est une entrée : l'électronique du clavier attribue un nombre entier (''scancode'') à une touche, nombre qui sera communiqué à l’ordinateur lors de l'appui d'une touche. Pareil pour la souris : quand vous bougez la souris, celle-ci envoie des informations sur la position ou le mouvement du curseur, informations qui sont codées sous la forme de nombres. La carte son évoquée il y a quelques chapitres est bien sûr une entrée : elle est capable d'enregistrer un son, et de le restituer sous la forme de nombres. S’il y a des entrées, on trouve aussi des '''sorties''', des composants électroniques qui transforment des nombres présents dans l'ordinateur en quelque chose d'utile. Ces sorties effectuent la traduction inverse de celle faite par les entrées : si les entrées convertissent une information en nombre, les sorties font l'inverse : là où les entrées encodent, les sorties décodent. Par exemple, un écran LCD est un circuit de sortie : il reçoit des informations, et les transforme en image affichée à l'écran. Même chose pour une imprimante : elle reçoit des documents texte encodés sous forme de nombres, et permet de les imprimer sur du papier. Et la carte son est aussi une sortie, vu qu'elle transforme les sons d'un fichier audio en tensions destinées à un haut-parleur : c'est à la fois une entrée, et une sortie. Les '''entrées-sorties''' incluent toutes les entrées et sorties, et même certains composants qui sont les deux à la fois. Il s'agit d'un terme générique, qui regroupe des composants forts différents. Dans ce qui va suivre, nous allons parfois parler de périphériques au lieu d'entrées-sorties, mais les deux termes ne sont pas équivalents. Dans le détail, les entrées-sorties regroupent : * Les '''périphériques''' sont les composants connectés sur l'unité centrale. Exemple : les claviers, souris, webcam, imprimantes, écrans, clés USB, disques durs externes, la Box internet, etc. * Les '''cartes d'extension''', qui se connectent sur la carte mère via un connecteur, comme les cartes son ou les cartes graphiques. * D'autres composants sont soudés à la carte mère mais sont techniquement des entrées-sorties : les cartes sons soudées sur les cartes mères actuelles, par exemple. ===L'interface avec le reste de l'ordinateur=== Les entrées-sorties sont très diverses, fonctionnent très différemment les unes des autres. Mais du point de vue du reste de l'ordinateur, les choses sont relativement standardisées. Du point de vue du processeur, les entrées-sorties sont juste des paquets de registres ! Tous les périphériques, toutes les entrées-sorties contiennent des '''registres d’interfaçage''', qui permettent de faire l'intermédiaire entre l'entrée/sortie et le reste de l'ordinateur. L'entrée/sortie est conçu pour réagir automatiquement quand on écrit dans ces registres. [[File:Registres d'interfaçage.png|centre|vignette|upright=2|Registres d'interfaçage.]] Les registres d’interfaçage sont assez variés. Les plus évidents sont les '''registres de données''', qui permettent l'échange de données entre le processeur et les périphériques. Pour échanger des données avec l'entrée/sortie, le processeur a juste à lire ou écrire dans ces registres de données. On trouve généralement un registre de lecture et un registre d'écriture, mais il se peut que les deux soient fusionnés en un seul registre d’interfaçage de données. Si le processeur veut envoyer une donnée à une entrée/sortie, il a juste à écrire dans ces registres. Inversement, s'il veut lire une donnée, il a juste à lire le registre adéquat. Mais le processeur ne fait pas que transmettre des données à l'entrée/sortie. Le processeur lui envoie aussi des « commandes », des valeurs numériques auxquelles l'entrée/sortie répond en effectuant un ensemble d'actions préprogrammées. En clair, ce sont l'équivalent des instructions du processeur, mais pour l'entrée/sortie. Par exemple, les commandes envoyées à une carte graphique peuvent être : affiche l'image présente à cette adresse mémoire, calcule le rendu 3D à partir des données présentes dans ta mémoire, etc. Pour recevoir les commandes, l'entrée/sortie contient des ''registres de commande'' qui mémorisent les commandes envoyées par le processeur. Quand le processeur veut envoyer une commande à l'entrée/sortie, il écrit la commande en question dans ce ou ces registres. Enfin, beaucoup d'entrée/sortie ont un ''registre d'état'', lisible par le processeur, qui contient des informations sur l'état de l'entrée/sortie. Ils servent notamment à indiquer au processeur que l'entrée/sortie est disponible, qu'il est en train d’exécuter une commande, qu'il est occupé, qu'il y a un problème, qu'il y a une erreur de configuration, etc. ===Les adresses des registres d’interfaçage=== Les registres des périphériques sont identifiés par des adresses mémoires. Et les adresses sont conçues de façon à ce que les adresses des différentes entrées/sorties ne se marchent pas sur les pieds. Chaque entrée/sortie, chaque registre, chaque contrôleur a sa propre adresse. D'ordinaire, certains bits de l'adresse indiquent quel est le destinataire. Certains indiquent quel est l'entrée/sortie voulue, les restants indiquant le registre de destination. Il existe deux organisations possibles pour les adresses des registres d’interfaçages. La première possibilité est de séparer les adresses pour les registres d’interfaçage et les adresses pour la mémoire. Le processeur doit avoir des instructions séparées pour gérer les périphériques et adresser la mémoire. Il a des instructions de lecture/écriture pour lire/écrire en mémoire, et d'autres pour lire/écrire les registres d’interfaçage. Sans cela, le processeur ne saurait pas si une adresse est destinée à un périphérique ou à la mémoire. [[File:Espaces d'adressages séparés entre mémoire et périphérique.png|centre|vignette|upright=2.5|Espaces d'adressages séparés entre mémoire et périphérique]] L'autre méthode mélange les adresses mémoire et des entrées-sorties. Si on prend par exemple un processeur de 16 bits, où les adresses font 16 bits, alors les 65536 adresses possibles seront découpées en deux portions : une partie ira adresser la RAM/ROM, l'autre les périphériques. On parle alors d''''entrées-sorties mappées en mémoire'''. L'avantage est que le processeur n'a pas besoin d'avoir des instructions séparées pour les deux. [[File:IO mappées en mémoire.png|centre|vignette|upright=2.0|IO mappées en mémoire]] Pour résumer, communiquer avec une entrée/sortie est similaire à ce qu'on a avec les mémoires. Il suffit de lire ou écrire dans des registres d’interfaçage, qui ont chacun une adresse mémoire. Le problème est que le système d'exploitation ne connaît pas toujours le fonctionnement d'une entrée/sortie : il faut installer un programme qui va s'exécuter quand on souhaite communiquer avec l'entrée/sortie, et qui s'occupera de tout ce qui est nécessaire pour le transfert des données, l'adressage du périphérique, etc. Ce petit programme est appelé un driver ou '''pilote de périphérique'''. La « programmation » périphérique est très simple : il suffit de savoir quoi mettre dans les registres, et c'est le pilote qui s'en charge. ==Les architectures Harvard et Von Neumann== Après avoir vu le processeur, les mémoires et les entrées-sorties, voyons voir comment le tout est interconnecté. Tous les ordinateurs ne sont pas organisés de la même manière, pour ce qui est de leurs bus. Mais pour comprendre pourquoi, nous devons regarder qui communique avec qui, dans un ordinateur. Pour rappel, les données sont placées en mémoire RAM, alors que les instructions sont placées en mémoire ROM. Le processeur lit des instructions dans la mémoire ROM, il lit et écrit dans la mémoire RAM, et accède aux registres d’interfaçage des entrées-sorties. Il y a donc besoins de trois interconnexions : CPU-ROM, CPU-RAM et CPU-IO. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] Il parait intéressant d'utiliser trois interconnexions, au minimum CPU-ROM, CPU-RAM et CPU-IO. Néanmoins, faire ainsi a de nombreux désavantages. Déjà, il faut pouvoir brancher tout ça sur le processeur. Et celui-ci n'a pas forcément assez de broches pour. Aussi, il est parfois préférable de mutualiser des bus, à savoir de connecter plusieurs composants sur un même bus. Par exemple, on peut mutualiser le bus pour la mémoire RAM et pour la mémoire ROM. Il faut dire que les deux bus sont des bus mémoire, avec un bus d'adresse, un bus de données, et surtout : des bus de commande similaires. Les mutualiser est alors très simple, et permet d'économiser pas mal de broches. [[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre et une architecture Harvard]] Cette mutualisation nous amène naturellement à parler de la distinction entre les architectures Harvard d'un côté et les architectures Von Neumann de l'autre. Elle est très liée au fait d'utiliser soit un bus mémoire unique, soit des bus séparés pour la ROM et la RAM. Voyons cela en détail. ===Les architectures Harvard et Von Neumann : des bus séparés ou unifiés=== Avec l''''architecture Harvard''', la mémoire ROM et la mémoire RAM sont reliées au processeur par deux bus séparés. Il y a un bus RAM pour la mémoire RAM, un bus ROM pour la mémoire ROM. L'avantage de cette architecture est qu'elle permet de charger une instruction et une donnée simultanément : une instruction chargée sur le bus relié à la mémoire programme, et une donnée chargée sur le bus relié à la mémoire de données. Et cela simplifie fortement la conception du processeur. [[File:Harvard Architecture.png|centre|vignette|upright=2|Architecture Harvard, avec une ROM et une RAM séparées.]] Avec l''''architecture Von Neumann''', mémoire ROM et mémoire RAM sont reliées au processeur par un bus unique. Le bus unique qui relie processeur, RAM et ROM, s'appelle le '''bus mémoire'''. Un défaut de ces architecture est qu'elles ne peuvent pas charger une instruction et une donnée en même temps. Et cela pose quelques problèmes pour la conception du processeur. Par contre, nous verrons dans ce qui suit qu'utiliser un bus mémoire partagé est bien plus flexible et permet des choses que les architectures Harvard ne peuvent pas faire. [[File:Architecture Von Neumann, avec deux bus séparés.png|centre|vignette|upright=2|Architecture Von Neumann, avec deux bus séparés.]] ===Les architectures Harvard et Von Neumann : des espaces d'adressage séparés ou unifiés=== La distinction précédente se base sur les connexions entre RAM, ROM et processeur. Mais il existe une autre distinction, très liée, qui est souvent utilisée comme seconde définition des architectures Harvard/Von Neumann. Elle est liée aux adresses mémoire que le processeur peut gérer. Prenons un processeur 16 bits, par exemple, qui gère naturellement des adresses de 16 bits. Il peut gérer 2^16 adresses, soit 64 kibioctets de mémoire. L'ensemble de ces adresses est appelé un '''espace d'adressage'''. Mais comment cet espace d'adressage est utilisé pour adresser une RAM et une ROM ? Sur les architectures Harvard, le processeur voit deux mémoires séparées avec leur lot d'adresses distinctes. Une même adresse peut donc correspondre soit à la mémoire ROM, soit à la mémoire RAM, suivant le bus utilisé. L'espace d'adressage est donc doublé, dupliqué, avec un pour la ROM, un autre pour la RAM. Rien d'étonnant à cela : il y a deux bus d'adresses, chacun correspondant à un espace d'adressage. [[File:Vision de la mémoire par un processeur sur une architecture Harvard.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Harvard.]] Avec l'architecture Von Neumann, la RAM et la ROM doivent se partager les adresses mémoires disponibles. Il n'y a qu'un seul espace d'adressage qui est coupé en deux, avec une partie pour la ROM et une autre pour la RAM. Une adresse correspond soit à la mémoire RAM, soit à la mémoire ROM, mais pas aux deux. Typiquement, la mémoire ROM occupe une partie des adresses, la mémoire RAM utilise le reste. La répartition des adresses est réalisée par les circuits de décodage d'adresse mentionnés plus haut. [[File:Vision de la mémoire par un processeur sur une architecture Von Neumann.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Von Neumann.]] Les '''architectures Harvard modifiées''' sont des intermédiaires entre architectures Harvard et architectures Von Neumann, bien qu'elles penchent bien plus du côté des architectures Harvard. Précisons que la terminologie n'est pas claire, beaucoup d'auteurs mettent des définitions différentes derrière ces deux termes. Mais dans ce cours, nous utiliserons une définition très stricte de ce qu'est une architecture Harvard modifiée. Une architecture Harvard modifiée est une architecture Harvard, où le processeur peut lire des données constantes depuis la mémoire ROM. Nous avions vu plus haut que les mémoires ROM peuvent mémoriser, en plus d'un programme exécutable, des données constantes, qui ne varient pas. Les architectures Harvard pures ne permettent pas de lire des données de ce genre depuis la mémoire ROM, alors que les architectures Harvard modifiées le permettent. Une architecture Harvard modifiée dispose d'une instruction pour lire les données en mémoire RWM, et d'une instruction pour lire des données en mémoire ROM. Il y a donc deux versions de l'instruction LOAD, qui copient la donnée dans un registre général, mais dont la source de la donnée est différente. Une autre possibilité, plus rare, est que une instruction de copie, qui copie une constante depuis la mémoire ROM vers la mémoire RAM. Le cas le plus commun est l'utilisation de deux instructions LOAD séparées. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Ceci étant dit, revenons à la distinction entre architecture Harvard et Von Neumann. Il faut noter que la RAM et la ROM n'ont pas forcément la même taille. Et ce que ce soit sur une architecture Harvard que sur une architecture Von Neumann, mais c'est plus facile à expliquer sur une architecture Harvard. On peut par exemple imaginer une architecture Harvard qui utilise des adresses de 16 bits pour la ROM, et seulement 8 bits pour la RAM. Le résultat est qu'il peut adresser 64 kibioctets de ROM, mais seulement 256 octets de RAM. Les deux bus d'adresse sont alors de taille différente, l'un faisant 8 bits, l'autre 16. Quelques processeurs 8 bits étaient dans ce cas, comme on le verra dans le chapitre sur les CPU 8bits. Mais d'autres processeurs utilisent des valeurs différentes, avec par exemple des adresses de 16 bits pour la RAM, mais de 20 bits pour la ROM, ou inversement. Sur une architecture Von Neumann, tout dépend de comment les adresses sont réparties. La solution la plus simple découpe l'espace d'adressage en deux parties égales, avec la RAM qui est dans la moitié basse (qui part de l'adresse 0 jusqu'à l'adresse au milieu), alors que la ROM est dans la moitié haute (entre l'adresse du milieu et l'adresse maximale). Mais ce n'est pas la seule possibilité, la limite entre RAM et ROM peut être mise n'importe où. Prenons par exemple un processeur 32 bits, capable de gérer 4 milliards d'adresse. Il est parfaitement possible de réserver 128 mébioctets de poids fort à la mémoire ROM, et de laisser le reste à la mémoire RAM. ===Le décodage d'adresse sur les architectures Von Neumann=== Pour résumer, les architectures Harvard et Von Neumann se distinguent sur deux points : * L'accès à la RAM et à la ROM se font par des bus séparés sur l'architecture Harvard, sur le même bus avec l'architecture Von Neumann. * Les adresses pour la mémoire ROM et la mémoire RAM sont séparées sur les architectures Harvard, partagées sur l’architecture Von Neumann. Les architectures Von Neumann utilisent donc un seul bus pour connecter la RAM et la ROM au processeur. Mais cela ne parait pas intuitif : comment deux composants peuvent se connecter aux mêmes fils ? Parce que c'est ce qu'implique le fait de partager un bus. Si je prends une mémoire RAM et une mémoire ROM, toutes deux de 8 bits, elles seront connectées à un bus mémoire de 8 bits. Intuitivement, on se dit qu'il y aura des conflits, du genre : la RAM et la ROM vont accéder au bus en même temps, comment savoir si une adresse est destinée à la RAM ou la ROM, etc ? Tous ces problèmes sont résolus avec une solution très simple : à chaque instant, seule une mémoire est connectée au bus. L'idée est que les mémoires sont connectées ou déconnectées du bus selon les besoins. Si le processeur veut envoyer lire une donnée en mémoire RAM, il déconnecte la mémoire ROM du bus. Et inversement, s'il veut lire une instruction, il déconnecte la RAM et connecte la ROM. Pour cela, les mémoires RAM et ROM possèdent une entrée ''Chip Select'' ou ''Output Enable'', qui agit comme une sorte de bouton ON/OFF. Lorsqu'on met un 1 sur cette entrée, la mémoire se connectera au bus. Ses entrées et sorties fonctionneront normalement, elle pourra recevoir des adresses, envoyer ou recevoir des données, tout sera normal. Par contre, si on met un 0 sur cette entrée, la mémoire se "désactive", ses entrée-sorties ne répondent plus aux sollicitations extérieures. Pire que ça : elles sont électriquement déconnectées. Au total, tout cela demande de gérer deux bit ''Chip Select''/''Output Enable'' : un pour la RAM, un pour la ROM. Et ces deux bits sont configurés pour chaque accès mémoire, pour chaque lecture ou écriture. Pour cela, un circuit de '''décodage d'adresse''' prend en entrée l'adresse mémoire à lire/écrire, et active/désactive les mémoires RAM/ROM selon les besoins. Il prend l'adresse et configure les bits ''Chip Select''/''Output Enable''. [[File:Décodage d'adresse sur une architecture Von Neumann.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann.]] L'implémentation la plus simple réserve la moitié des adresses pour la RAM, l'autre moitié pour la ROM. Typiquement, la ROM prend la moitié basse, la RAM la moitié haute. Dans ce cas, activer/désactiver la RAM et la ROM se fait avec seulement le bit de poids fort de l'adresse. Si le bit de poids fort est à 1, alors on accède à la RAM et la ROM doit être désactivée. Mais si ce bit est à 0, alors on accède à la moitié basse et il faut désactiver la RAM. Une remarque intéressante : le fait de séparer la mémoire en deux parts égales permet de simuler une architecture Harvard à partir d'une architecture Von Neumann. Par exemple, le tout premier processeur d'Intel, le 4004, était l'un de ceux là. La RAM et la ROM sont reliés au même bus, et il y a donc un unique espace d'adressage, qui est séparé en deux parties égales. Le truc est que le processeur traite les deux parties égales comme deux espaces d'adressage séparés. Le processeur se débrouille pour cacher le fait qu'il y a un espace d'adressage unique coupé en deux, ce qui fait que les programmeurs voient bien deux espaces d'adressages distincts. [[File:Décodage d'adresse sur une architecture Von Neumann basique.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann basique.]] Pour résumer, quand une adresse est envoyée sur le bus, les deux mémoires vont la recevoir mais une seule va répondre et se connecter au bus. Le décodage d'adresse garantit que seule la mémoire adéquate réponde à un accès mémoire. Le décodage d'adresse est réalisé par la carte mère, par un composant dédié. Le mécanisme peut être utilisé pour combiner plusieurs RAM en une seule, idem avec les ROM. Pour comprendre l'idée, je vais prendre l'exemple de l'IBM PC, un des tout premier PC existant. Nous étudierons ce PC dans une section dédiée, à la fin du chapitre, aussi je vais passer rapidement dessus. Tout ce que je vais faire est vous présenter la carte mère du PC, et vous demander de faire est de compter les mémoires ROM et mémoires RAM sur la carte mère : [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] Si vous remarquerez qu'il y a 5 mémoires ROM et 8 à 32 mémoires RAM. Le fait est que le processeur voit les différentes mémoires ROM comme une seule mémoire ROM. Idem avec les mémoires RAM : elle font chacune 2 kibioctets, et l'ensemble est vu par le processeur comme une seule RAM de 16 à 64 kibioctets. Et cela grâce aux circuits de décodage d'adresse, qui sont situés en haut à droite de la carte mère. Pour comprendre l'idée, prenons l'exemple d'un processeur 16 bits, capable de gérer 64 kibioctets de mémoire. L'espace d'adressage est découpé en quatre portions, de 16 kibioctets chacune. Une portion est réservée à une ROM de 16 kibioctet, les autres sont chacune réservée à une RAM de 16 kibioctet. Le décodage d'adresse sélectionne alors la mémoire adéquate en utilisant les deux bits de poids fort de l'adresse. * S'ils valent 00, alors c'est la mémoire ROM qui est activée, connectée au bus. * S'ils valent 01, alors c'est la première mémoire RAM qui est connectée au bus. * S'ils valent 10, alors c'est la seconde mémoire RAM qui est connectée au bus. * S'ils valent 11, alors c'est la troisième mémoire RAM qui est connectée au bus. [[File:Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM.png|centre|vignette|upright=3|Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM]] ===L'impact sur la conception du processeur=== Plus haut, j'ai parlé d'un des avantages des architectures Harvard : elles peuvent lire une instruction en même temps qu'elles accèdent à une donnée. La donnée est lue/écrite en RAM, alors que l'instruction est lue en ROM. Et cela permet de simplifier l'intérieur du processeur. Pas de beaucoup, mais c'est déjà ça de pris. Voyons maintenant comment cela impacte l'intérieur du processeur. Tout ce dont vous avez à vous rappeler est la séparation entre chemin de données et unité de contrôle, et que les registres généraux sont dans le premier, le ''program counter'' dans la seconde. Avec une architecture Harvard, les instructions et les données passent par des bus différent : bus ROM pour les instructions, bus RAM pour les données. L'intuition nous dit que le bus pour la mémoire ROM est connecté à l'unité de contrôle, alors que le bus pour la RAM est connecté au chemin de données. Et dans les grandes lignes, c'est vrai. La logique est imparable pour ce qui est des bus de données. Mais il y a une petite subtilité pour les bus d'adresse. Pour comprendre comment le processeur exploite ces deux bus, voyons ce qui transite dessus. Pour la mémoire ROM, elle reçoit l'adresse de l'instruction à lire, elle renvoie l'instruction adéquate. Pour cela, le ''program counter'' est envoyé sur le bus d'adresse, l'instruction sur le bus de données. Pour la mémoire RAM, elle échange des données avec les registres généraux, les registres pour les données. Les adresses utilisées pour la RAM viennent elles soit du chemin de données, soit de l'unité de contrôle, tout dépend du mode d'adressage. Mais le ''program counter'' n'est pas impliqué. [[File:Architecture Harvard - échanges de données.png|centre|vignette|upright=2|Architecture Harvard - échanges de données]] Les architectures Harvard modifiées doivent cependant rajouter une connexion entre le bus ROM et les registres généraux. C'est nécessaire pour charger une donnée constante depuis la mémoire ROM. Rappelons que la donnée constante est copiée dans un registre général, donc dans le chemin de données. [[File:Architecture Harvard modifiée - implémentation du processeur.png|centre|vignette|upright=2|Architecture Harvard modifiée - implémentation du processeur]] Avec les architectures Von Neumann, il y a un seul bus qui est relié à la fois au chemin de données et à l'unité de contrôle. Si le processeur lit une instruction, le bus doit être relié à l'unité de contrôle. Par contre, s'il accède à une donnée, il doit être relié au chemin de données (le bus d'adresse peut éventuellement être connecté au séquenceur, si celui-ci fournit l'adresse à lire). Il faut donc utiliser un paquet de multiplexeurs et de démultiplexeurs pour faire la connexion au bon endroit. [[File:Architecture Von Neumann - implémentation du processeur.png|centre|vignette|upright=2|Architecture Von Neumann - implémentation du processeur]] Une instruction se fait en deux temps : on charge l'instruction depuis la mémoire ROM, puis on l'exécute. Avec une architecture Harvard, tout cela se fait en un seul cycle d'horloge, vu que charger la ROM et accéder aux données peut se faire en même temps. Pas avec les architectures Von Neumann, qui doivent libérer le bus mémoire après avoir chargé une instruction. Elles n'ont pas le choix : elles chargent l'instruction lors d'un premier cycle d'horloge, puis l'exécutent lors du second. Pour cela, ils incorporent un registre appelé le '''registre d'instruction''', qui mémorise l'instruction chargée. L'instruction est copiée dans ce registre lors du premier cycle, puis est utilisée lors du second cycle. Le registre permet de ne pas oublier l’instruction entre les deux cycles. Le registre d'instruction est obligatoire sur les architectures Von Neumann. En comparaison, il est facultatif sur les architectures Harvard. Elles peuvent en avoir un, pour des raisons techniques, mais ce n'est pas obligatoire. [[File:Registre d'instruction.png|centre|vignette|upright=2|Registre d'instruction.]] ===Les architectures Von Neumann sont plus flexibles=== Sur les architectures Harvard, le processeur sait faire la distinction entre programme et données. Les données sont stockées dans la mémoire RAM, le programme est stocké dans la mémoire ROM. Les deux sont séparés, accédés par le processeur sur des bus séparés, et c'est ce qui permet de faire la différence entre les deux. Il est impossible que le processeur exécute des données ou modifie le programme. Du moins, tant que la mémoire qui stocke le programme est bien une ROM. Par contre, sur les architectures Von Neumann, il est impossible de distinguer programme et données, sauf en ajoutant des techniques de protection mémoire avancées. La raison est qu'il est impossible de faire la différence entre donnée et instruction, vu que rien ne ressemble plus à une suite de bits qu'une autre suite de bits. Et c'est à l'origine d'un des avantages majeur de l'architecture Von Neumann : il est possible que des programmes soient copiés dans la mémoire RWM et exécutés dans celle-ci. Un cas d'utilisation familier est celui de votre ordinateur personnel. Le système d'exploitation et les autres logiciels sont copiés en mémoire RAM à chaque fois que vous les lancez. Mais cet exemple implique un disque dur, ce qui rend les choses plus compliquées que prévu. Un autre exemple serait la compilation de code à la volée, mais il ne sera pas très parlant. Un exemple plus adapté serait celui où la ROM mémorise un programme compressée dans la mémoire ROM, qui est décompressé pour être exécuté en mémoire RAM. Le programme de décompression est stocké en mémoire ROM et est exécuté au lancement de l’ordinateur. Cette méthode permet d'utiliser une mémoire ROM très petite et très lente, tout en ayant un programme rapide (si la mémoire RWM est rapide). Il est aussi possible de créer des programmes qui modifient leurs propres instructions : cela s'appelle du '''code auto-modifiant'''. Ce genre de choses servait autrefois sur des ordinateurs rudimentaires, au tout début de l'informatique. À l'époque, les adresses à lire/écrire devaient être écrites en dur dans le programme, dans les instructions exécutées. Pour gérer certaines fonctionnalités des langages de programmation qui ont besoin d'adresses modifiables, comme les tableaux, on devait corriger les adresses au besoin avec du code auto-modifiant. De nos jours, le code automodifiant est utilisée occasionnellement pour rendre un programme indétectable dans la mémoire (les virus informatiques utilisent beaucoup ce genre de procédés). L'impossibilité de séparer données et instructions est à l'origine de problèmes assez fâcheux. Il est parfaitement possible que le processeur charge et exécute des données, qu'il prend par erreur pour des instructions. C'est le cas quand des pirates informatiques arrivent à exploiter des bugs. Il arrive que des pirates informatiques vous fournissent des données corrompues, qui contiennent un virus ou un programme malveillant est caché dans les données. Les bugs en question permettent d'exécuter ces données, donc virus. Pour éviter cela, le système d'exploitation peut marquer certaines zones de la mémoire comme non-exécutable, c’est-à-dire que le système d'exploitation interdit d’exécution de quoi que ce soit qui est dans cette zone. Mais ce n'est pas parfait. Toujours est-il que tout cela est impossible sur les architectures Harvard. Et ce serait très limitant. Imaginez : pas possible de lancer un programme depuis le disque dur ou une clé USB, le programme doit impérativement être dans une mémoire ROM, pas de compilation à la volée, etc. Que des techniques très utilisées dans l'informatique moderne. Malgré ses défauts, les architectures Von Neumann ne sont pas les plus utilisées pour rien. Les architectures Harvard sont concrètement utilisées uniquement dans l'informatique embarquée, sur des microcontrôleurs très spécifiques. ==Le bus de communication avec les entrées-sorties== Le processeur, la mémoire et les entrées-sorties sont connectées par un ou plusieurs '''bus de communication'''. Ce bus n'est rien d'autre qu'un ensemble de fils électriques sur lesquels on envoie des zéros ou des uns. Pour communiquer avec la mémoire, il y a trois prérequis qu'un bus doit respecter : pouvoir sélectionner la case mémoire (ou l'entrée-sortie) dont on a besoin, préciser à la mémoire s'il s'agit d'une lecture ou d'une écriture, et enfin pouvoir transférer la donnée. Pour cela, on doit donc avoir trois bus spécialisés, bien distincts, qu'on nommera le bus de commande, le bus d'adresse, et le bus de donnée. * Le '''bus de données''', sur lequel s'échangent les données entre les composants. * Le '''bus de commande''' pour configurer la mémoire et les entrées-sorties. * Le '''bus d'adresse''', facultatif, permet de préciser quelle adresse mémoire il faut lire/écrire. Chaque composant possède des entrées séparées pour le bus d'adresse, le bus de commande et le bus de données. Par exemple, une mémoire RAM possédera des entrées sur lesquelles brancher le bus d'adresse, d'autres sur lesquelles brancher le bus de commande, et des broches d'entrée-sortie pour le bus de données. Précisons cependant que le bus de commande n'est pas exactement le même entre des mémoires RAM/ROM et des entrées-sorties. [[File:Bus general schematic.svg|centre|vignette|upright=2|Contenu d'un bus, généralités.]] ===Le réseau d'interconnexion : généralités=== Reprenons où nous nous étions arrêté. Avant de voir les architectures Harvard et Von Neumann, nous avions dit que le processeur, les mémoires et les entrées-sorties sont reliées entre eux par un réseau d'interconnexion. Nous venons de voir qu'il est possible de mutualiser certains bus, notamment celui de la mémoire RAM et celui de la mémoire ROM. Mais il est possible de faire la même chose pour les entrées-sorties. Là encore, il est possible de regrouper le bus mémoire avec les bus pour les entrées-sorties. Voyons ce que cela implique. {| |[[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec une architecture Harvard.]] |[[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Interconnexions d'une architecture Von Neumann.]] |} Avant de poursuivre, nous devons préciser quelque chose d'important. Sur les ordinateurs modernes, les entrées-sorties peuvent accéder à la mémoire RAM. Les ordinateurs modernes intègrent des techniques de '''''Direct Memory Access''''' (DMA) qui permettent aux entrées-sorties de lire ou d'écrire en mémoire RAM. Les transferts DMA se font sans intervention du processeur. Ils permettent de copier un bloc de plusieurs octets, dans deux sens : de la mémoire RAM vers une entrée-sortie, ou inversement. Le DMA demande d'ajouter un circuit dédié sur la carte mère : le contrôleur DMA. Il effectue la copie d'un paquet d'octets de la RAM vers l'entrée-sortie ou dans l'autre sens. [[File:Réseau d'interconnexion avec un processeur au centre, et direct memory access.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre, et direct memory access]] ===Les bus systèmes=== La première solution utilise un bus unique, celui-ci est appelé le '''bus système''', aussi appelé ''backplane bus''. Le bus système est connecté à la mémoire RAM, la mémoire ROM, au processeur, et aux entrées-sorties. Tous les composants présents dans l'ordinateur sont connectés à ce bus, sans exception. De tels bus avaient pour avantage la simplicité. Le processeur n'est connecté qu'à un seul bus, ce qui utilise peu de broches et économise des fils. La mutualisation des bus est totale, le câblage est plus simple, la fabrication aussi. [[File:Architecture minimale d'un ordinateur.png|centre|vignette|upright=2|Architecture minimale d'un ordinateur.]] Un bus système contient un bus d'adresse, de données et de commande. Un bus système se marie bien avec des entrées-sorties mappées en mémoire. La conséquence est que le bus d'adresse ne sert pas que pour l'accès à la mémoire RAM/ROM, mais aussi pour l'accès aux entrées-sorties. Il y a moyen d'implémenter un système d'adresse séparés avec, mais c'est pas l'idéal. [[File:Architecture Von Neumann avec les bus.png|centre|vignette|upright=2|Architecture Von Neumann avec les bus.]] Un bus système n'a pas de limitations quant aux échanges de données. Le processeur peut communiquer directement avec les mémoires et les entrées-sorties, les entrées-sorties peuvent communiquer avec la mémoire RAM, etc. Notamment, un bus système peut implémenter le ''Direct Memory Access''. Il suffit juste de connecter un contrôleur DMA sur le bus système. Le contrôleur DMA est considéré comme une entrée-sortie, ses registres sont mappés en mémoire et sont donc accessibles directement par le processeur. [[File:Bus système avec controleur DMA.png|centre|vignette|upright=2|Bus système avec contrôleur DMA.]] Si on suit la définition à la lettre, un bus système est systématiquement une architecture Von Neumann, vu que la mémoire ROM et la mémoire RAM sont reliées sur le bus système. La conséquence est que les circuits de décodage d'adresse sont présents. Ils sont toujours sur la carte mère, et sont plus ou moins à côté du bus système. Cependant, le décodage d'adresse est parfois étendu pour tenir compte des entrées-sorties. Les entrées-sorties soudées sur la carte mère ont elles aussi des entrées ''Chip Select'' ou quelque chose de similaire. Le décodage d'adresse peut alors les activer ou les désactiver suivant l'adresse envoyée sur le bus d'adresse. C'est ce qui arrive quand le processeur écrit dans un registre d’interfaçage : il envoie l'adresse de ce registre sur le bus d'adresse, le circuit de décodage d'adresse active seulement l'entrée-sortie associée. Il faut noter que ce n'est pas systématique, il existe des techniques pour se passer de décodage d'adresse. Mais nous en reparlerons dans le chapitre sur les bus de communication. [[File:Chipselectfr.png|centre|vignette|upright=1.5|Exemple détaillé.]] Les bus systèmes sont certes très simples, mais ils ont aussi des désavantages. Par exemple, il faut éviter que le processeur et les entrées-sorties se marchent sur les pieds, ils ne peuvent pas utiliser le bus en même temps. De tels conflits d'accès au bus système sont fréquents et ils réduisent la performance, comme on le verra dans le chapitre sur les bus. De plus, un bus système a le fâcheux désavantage de relier des composants allant à des vitesses très différentes : il arrivait fréquemment qu'un composant rapide doive attendre qu'un composant lent libère le bus. Le processeur était le composant le plus touché par ces temps d'attente. Elle était utilisée sur les tout premiers ordinateurs, pour sa simplicité. Elle était parfaitement adaptée aux anciens composants, qui allaient tous à la même vitesse. De nos jours, les ordinateurs à haute performance ne l'utilisent plus trop, mais elle est encore utilisée sur certains systèmes embarqués, en informatique industrielle dans des systèmes très peu puissants. ===Les bus d'entrées-sorties=== Les bus systèmes ont de nombreux problèmes, ce qui fait que d'anciens ordinateurs faisaient autrement. À la place d'un bus système unique, ils utilisent un bus séparé pour les mémoires, et un autre séparé pour les entrées-sorties. Le bus spécialisé pour la mémoire est appelé le '''bus mémoire''', l'autre bus est appelé le '''bus d'entrées-sorties'''. Le bus mémoire est généralement relié à la fois à la mémoire RAM et à la mémoire ROM, les exceptions ne sont pas rares, cependant. [[File:Bus mémoire séparé du bus pour les IO.png|centre|vignette|upright=2|Bus mémoire séparé du bus pour les IO]] Les bus d'entrée-sorties peuvent être spécialisés et simplifiés. Par exemple, ils peuvent avoir un bus de commande différent de celui de la mémoire, qui utilise nettement moins de fils. Le bus d'adresse peut aussi être réduit, et utiliser des adresses plus courtes que celles du bus mémoire. Les bus de données peuvent aussi être de taille différentes. Il est ainsi possible d'avoir un bus mémoire capable de lire/écrire 64 bits à la fois, alors que la communication avec les entrées-sorties se fait octet par octet ! En général, les bus d'entrée-sortie sont assez petits, ils ont une taille de 8 ou 16 bits, même si le bus mémoire est plus grand. Cela permet de ne pas gaspiller trop de broches. Ajouter un bus d'entrée-sortie n'est donc pas très gourmand en broches et en fils. : Il est en théorie possible d'avoir une fréquence différente pour les deux bus, avec un bus mémoire ultra-rapide et un bus pour les entrées-sorties est un bus moins rapide. Mais il faut que le processeur soit prévu pour, et c'est très rare. Niveau performances, le processeur peut théoriquement accéder à la mémoire en attendant qu'une entrée/sortie réponde, mais il faut que le processeur soit prévu pour, et ce n'est pas de la tarte. Par contre, cela implique d'avoir des adresses séparées pour les registres d’interfaçage et la mémoire. En clair : pas d'entrée-sortie mappée en mémoire ! Un autre problème est que les entrées-sorties ne peuvent pas communiquer avec la mémoire directement, elles doivent passer par l'intermédiaire du processeur. En clair : pas de ''Direct Memory Access'' ! Les deux sont des défauts rédhibitoires pour les programmeurs système, notamment pour ceux qui codent les pilotes de périphériques. Pour résumer, les défauts sont assez problématiques : pas d'entrées-sorties mappées en mémoire, pas de ''Direct Memory Access'', économie de broches limitée. Les deux premiers sont des défauts majeurs, qui font que de tels bus ne sont pas utilisés dans les ordinateurs modernes. À la place, ils utilisent une troisième solution, distincte des bus systèmes et des bus d'entrée-sorties. ===Les bus avec répartiteur=== Il existe une méthode intermédiaire, qui garde deux bus séparés pour la mémoire et les entrées-sorties, mais élimine les problèmes de brochage sur le processeur. L'idée est d'intercaler, entre le processeur et les deux bus, un '''circuit répartiteur'''. Il récupère tous les accès et distribue ceux-ci soit sur le bus mémoire, soit sur le bus des périphériques. Le ou les répartiteurs s'appellent aussi le '''''chipset''''' de la carte mère. C'était ce qui était fait à l'époque des premiers Pentium. À l'époque, la puce de gestion du bus PCI faisait office de répartiteur. Elle mémorisait des plages mémoires entières, certaines étant attribuées à la RAM, les autres aux périphériques mappés en mémoire. Elles utilisaient ces plages pour faire la répartition. [[File:IO mappées en mémoire avec séparation des bus.png|centre|vignette|upright=2|IO mappées en mémoire avec séparation des bus]] Niveau adresses des registres d'interfacage, il est possible d'avoir soit des adresses unifiées avec les adresses mémoire, soit des adresses séparées. L'usage d'un répartiteur ne pose pas de problèmes particuliers pour implémenter le DMA. La seule contrainte est que le contrôleur DMA soit intégré dans le répartiteur. Les échanges entre IO et mémoire passent par le répartiteur, qui fait le pont entre bus mémoire et bus des IO. [[File:Implémentation du DMA avec un répartiteur.png|centre|vignette|upright=2|Implémentation du DMA avec un répartiteur]] ==Les microcontrôleurs et ''system on chip''== Parfois, on décide de regrouper la mémoire, les bus, le CPU et les ports d'entrée-sortie dans un seul circuit intégré, un seul boitier. L'ensemble forme alors ce qu'on appelle un '''''System on Chip''''' (système sur une puce), abrévié en SoC. Le nom est assez explicite : un SoC comprend un système informatique complet sur une seule puce de silicium, microprocesseurs, mémoires et périphériques inclus. Ils incorporent aussi des ''timers'', des compteurs, et autres circuits très utiles. [[File:ARMSoCBlockDiagram.svg|centre|vignette|upright=2|SoC basé sur un processeur ARM, avec des entrées-sorties typiques de celles d'un µ-contrôleur. Le support du bus CAN, d'Ethernet, du bus SPI, d'un circuit de PWM (génération de signaux spécifiques), de convertisseurs analogique-digital et inverse, sont typiques des µ-contrôleurs.]] Le terme SoC regroupe des circuits imprimés assez variés, aux usages foncièrement différents et à la conception distincte. Les plus simples d’entre eux sont des microcontrôleurs, qui sont utilisés pour des applications à base performance. Les plus complexes sont utilisés pour des applications qui demandent plus de puissance, nous les appellerons SoC haute performance. La relation entre SoC et microcontrôleurs est assez compliquée à expliquer, la terminologie n'est pas clairement établie. Il existe quelques cours/livres qui séparent les deux, d'autres qui pensent que les deux sont très liés. Dans ce cours, nous allons partir du principe que tous les systèmes qui regroupent processeur, mémoire et quelques périphériques/entrées-sorties sont des SoC. Les microcontrôleurs sont donc un cas particulier de SoC, en suivant cette définition. ===Les microcontrôleurs=== Les '''microcontrôleurs''' sont des composants utilisés dans l'embarqué ou d'informatique industrielle. Leur nom trahit leur rôle. Ils sont utilisés pour contrôler de l'électroménager, des chaines de fabrication dans une usine, des applications robotiques, les alarmes domestiques, les voitures. De manière générale, on les trouve dans tous les systèmes dits embarqués et/ou temps réel. Ils ont besoin de s'interconnecter à un grand nombre de composants et intègrent pour cela un grand nombre d'entrée-sorties. Les microcontrôleurs sont généralement peu puissants, et doivent consommer peu d'énergie/électricité. Fait amusant, on en trouve dans certains périphériques informatiques. Par exemple, les anciens disques durs intégraient un microcontrôleur qui contrôlait plusieurs moteurs/ Les moteurs pour faire tourner les plateaux magnétiques et les moteurs pour déplacer les têtes de lecture/écriture étaient commandés par ce microcontrôleur. Comme autre exemple, les claviers d'ordinateurs intègrent un microcontrôleur connecté aux touches, qui détecte quand les touches sont appuyées et qui communique avec l'ordinateur. Nous détaillerons ces deux exemples dans les chapitres dédiés aux périphériques et aux disques durs, tout deviendra plus clair à ce moment là. La majorité des périphériques ou des composants internes à un ordinateur contiennent des microcontrôleurs. [[File:Microcontroller 8051.gif|centre|vignette|upright=2.5|Microcontrôleur Intel 8051.]] Un microcontrôleur tend à intégrer des entrées-sorties assez spécifiques, qu'on ne retrouve pas dans les SoC destinés au grand public. Un microcontrôleur est typiquement relié à un paquet de senseurs et son rôle est de commander des moteurs ou d'autres composants. Et les entrées-sorties intégrées sont adaptées à cette tâche. Par exemple, ils tendent à intégrer de nombreux convertisseurs numériques-analogiques pour gérer des senseurs. Ils intègrent aussi des circuits de génération de signaux PWM spécialisés pour commander des moteurs, le processeur peut gérer des calculs trigonométriques (utiles pour commander la rotation d'un moteur), etc. [[File:C8051F340-9 A B C D.png|centre|vignette|upright=2|Exemple d'entrées-sorties intégrées à un microcontroleur.]] En plus des entrées-sorties intégrées, les microcontrôleurs ont souvent des '''ports d'entrées-sorties''' banalisés, à savoir qu'on peut brancher n'importe quoi dessus. Il était possible de brancher un capteur de température, un moteur à commander, un port série, un port parallèle, un écran, un clavier, une souris, peu importe. Les ports font souvent un octet et ils sont généralement reliées directement ou indirectement au processeur. Le logiciel qui s'exécute sur le processeur décide quoi envoyer sur des broches et comment interprète ce qui est reçu dessus. Les ports banalisés de ce type sont parfois appelés des '''GPIO''', abréviation de ''General Purpose Input/Output'', mais nous utiliserons le terme de ''port I/O''. Un port regroupe plusieurs broches qui peuvent être utilisés à volonté. C'est le logiciel qui s'exécute sur le processeur qui décide de la fonction de broches. Un port IO peut fonctionner soit en tant qu'entrée, soit en tant que sortie. Il est possible de changer de sens en cours de fonctionnement, pour passer d'une entrée à une sortie ou inversement. [[File:Afficheurs7seg.png|centre|vignette|upright=2|Exemple d'utilisation d'un port I/O. le port est connecté à un afficheur LCD dit 7-segments. Les 8 entrées de cet afficheur sont connectées à un port I/O d'un octet.]] ===Les SoC haute performance=== Les SoC les plus performants sont actuellement utilisés dans les téléphones mobiles, tablettes, ''Netbook'', ''smartphones'', ou tout appareil informatique grand public qui ne doit pas prendre beaucoup de place. La petite taille de ces appareils fait qu'ils gagnent à regrouper toute leur électronique dans un circuit imprimé unique. Mais les contraintes font qu'ils doivent être assez puissants. Ils incorporent des processeurs assez puissants, surtout ceux des ''smartphones''. C'est absolument nécessaire pour faire tourner le système d'exploitation du téléphone et les applications installées dessus. Niveau entrées-sorties, ils incorporent souvent des interfaces WIFI et cellulaires (4G/5G), des ports USB, des ports audio, et même des cartes graphiques pour les plus puissants d'entre eux. Les SoC incorporent des cartes graphiques pour gérer tout ce qui a trait à l'écran LCD/OLED, mais aussi pour gérer la caméra, voire le visionnage de vidéo (avec des décodeurs/encodeurs matériel). Par exemple, les SoC Tegra de NVIDIA incorporent une carte graphique, avec des interfaces HDMI et VGA, avec des décodeurs vidéo matériel H.264 & VC-1 gérant le 720p. Pour résumer, les périphériques sont adaptés à leur utilisation et sont donc foncièrement différents de ceux des microcontrôleurs. [[File:SOMblk.png|centre|vignette|upright=2|Exemple de SoC.] Un point important est que les processeurs d'un SoC haute performance sont... performants. Ils sont le plus souvent des processeurs de marque ARM, qui sont différents de ceux utilisés dans les PC fixe/portables grand public qui sont eux de type x86. Nous verrons dans quelques chapitres en quoi consistent ces différences, quand nous parlerons des jeux d'instruction du processeur. Autrefois réservé au monde des PCs, les processeurs multicœurs deviennent de plus en plus fréquents pour les SoC de haute performance. Il n'est pas rare qu'un SoC incorpore plusieurs cœurs. Il arrive même qu'ils soient foncièrement différents, avec plusieurs cœurs d'architecture différente. La frontière entre SoC haute performance et microcontrôleur est de plus en plus floue. De nombreux appareils du quotidien intègrent des SoC haute performance, d'autres des microcontrôleurs. Par exemple, les lecteurs CD/DVD/BR et certains trackers GPS intègrent un SoC ou des processeurs dont la performance est assez pêchue. À l'opposé, les systèmes domotiques intègrent souvent des microcontrôleurs simples. Malgré tout, les deux cas d'utilisation font que le SoC/microcontrôleur est connecté à un grand nombre d'entrées-sorties très divers, comme des capteurs, des écrans, des LEDs, etc. [[File:GPS tracker Hardware Architecture.png|centre|vignette|upright=2|Hardware d'un tracker GPS.]] ==Étude de quelques exemples d'architectures== Après avoir vu la théorie, nous allons voir des exemples réels d'ordinateurs. Dans ce qui suit, nous allons voir des ordinateurs assez anciens, pour une raison simple : ils collent assez bien à l''''architecture de base''' vue plus haut, avec un CPU, une RAM et une ROM, quelques entrées-sorties. Tous les ordinateurs modernes, mais aussi dans les smartphones, les consoles de jeu et autres, utilisent une architecture grandement modifiée et améliorée, avec un grand nombre de périphériques, disques durs/SSD, un grand nombre de mémoires différentes, etc. Il pourrait sembler pertinent d’étudier des microcontrôleurs ou des ''System On Chip'', en premier lieu. Mais nous éviterons soigneusement de tels systèmes pour le moment. La raison est qu'ils ont un grand nombre d'entrées-sorties, qui sont peu familières. Attendez-vous à avoir près d'une vingtaine ou centaine d'entrée-sorties différentes pour de tels systèmes. Le tout est très complexe, bien trop pour un premier exemple. À la place, nous allons voir précisément des exemples plus simples : les premiers PC, et des consoles de jeu 8 et 16 bits. Bien que ce soit des systèmes très simples, ils sont cependant plus complexes que l'architecture de base. Et leur avantages/désavantages sont un peu inverse l'un de l'autre. Si on devait résumer les différences, on aurait ceci : * Les PC ont plus d'entrées-sorties que les consoles, bien que nettement moins que pour les microcontrôleurs/SoC. * Les PC utilisent des disques durs, les consoles font avec soit des cartouches de jeu, soit des CD/DVD. * Les PC utilisent des cartes électroniques séparées pour le son et l'écran, les consoles utilisent des circuits soudés sur la carte mère, qui sont souvent des co-processeurs. * Les PC ont une mémoire ROM soudées sur la carte mère, les consoles 8 bits font sans. Les PC et micro-ordinateurs ont plus d'entrées-sorties que les consoles. Même si on mets de côté les périphériques, ils ont aussi beaucoup de composants soudées sur la carte mère. En comparaison, les consoles de jeu 8/16 bits se débrouillent avec : une cartouche de jeu et une manette en entrée, une sortie vidéo et une sortie son. Un autre point important est l'absence de disque dur ou de lecteur CD. La présence d'un disque dur ou d'un lecteur CD/DVD complexifie tout de suite l'architecture des PC. Il faut leur réserver un bus dédié ou les connecter à un bus système, cela demande d'ajouter des circuits sur la carte mère, etc. Et surtout, il faut expliquer comment l'ordinateur exécute des programmes, ce qui demande de parler de l'interaction avec le disque dur et la ROM du BIOS. Rien de tout cela sur les consoles de jeu 8 et 16 bits. Elles utilisent à la place des cartouches de jeu, qui intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Pas besoin de parler des mémoires de stockage, on est beaucoup plus proche de l'architecture de base avec une ROM unique. Par contre, n'allez pas croire que tout est rose avec les consoles 8/16 bits. Il y a quelques différences qui font qu'elles sont plus complexes qu'un PC sur certains points. Les PC utilisent des cartes électroniques à brancher sur la carte mère pour alimenter l'écran et les hauts-parleurs/casques, alors que les consoles de jeu utilisent des souvent co-processeurs dédiés pour le son et les graphismes. La différence parait mineure, mais elle avantage les consoles. Nous avons déjà expliqué ce que sont les co-processeurs plus haut, aussi les co-processeurs des consoles nous paraitrons familiers. On n'a pas à s’embêter à expliquer ce que sont les cartes d'extension, les bus associés et tout ce qui va avec, cela peut être retardé pour la section sur l'architecture des PC. La gestion de la cartouche de jeu est aussi un peu subtile à comprendre, bien que ce soit bien plus simple à comprendre qu'un système avec un disque dur. Les cartouches de jeu intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Et le processeur doit exécuter le code depuis cette mémoire ROM. La conséquence est que les consoles 8/16 bits utilisent une architecture Harvard, avec un bus relié à la cartouche pour lire les instructions. Mais si ce n'était que ça... Les cartouches mémorisent aussi les données pour les graphismes, ce qui fait que le co-processeur vidéo doit lui aussi lire la cartouche pour récupérer ces données... ===L'architecture de la TurboGraphX-16=== La console PC Engine, aussi appelée TurboGraphX, est une ancienne console 8 bits. Elle contient un processeur 65C02, 8 kibioctets de RAM, un port manettes, une carte son et une carte vidéo. La '''carte son''' est le composant qui s'occupe de commander les haut-parleurs et de gérer tout ce qui a rapport au son. La '''carte graphique''' est le composant qui est en charge de calculer les graphismes, tout ce qui s'affiche à l'écran. Sur cette console, les cartes son et graphique ne sont PAS des co-processeurs, ce sont des circuits électroniques dits fixes. C'est totalement différent de ce qu'on a sur les consoles modernes, aussi le préciser est important. Bien que la carte graphique ne soit pas un processeur, elle a 64 kibioctets de RAM rien que pour elle. La RAM en question est séparée de la RAM normale, c'est un circuit intégré séparé. Et c'est un cas très fréquent, qui reviendra par la suite. La majeure partie des cartes graphiques dispose de leur propre '''mémoire vidéo''', totalement réservée à la carte graphique. La RAM vidéo est connectée à la carte graphique via un bus séparé. Le processeur est souvent connecté à ce bus, afin de pouvoir écrire des données dedans, mais ce n'est pas le cas ici. [[File:Architecture de la PC Engine, aussi appelée TurboGrafx-16.png|centre|vignette|upright=2.5|Architecture de la PC Engine, aussi appelée TurboGrafx-16]] L'architecture de la console était particulièrement simple. Le processeur était le centre de l'architecture, tout était connecté dessus. Il y a un bus pour la cartouche de jeu, un autre pour la RAM, un autre pour les manettes, un autre pour carte son, et un dernier pour la carte graphique. Le fait d'avoir un bus par composant est assez rare et ce n'est le cas ici que parce des conditions particulières sont remplies. Déjà, il y a peu d'entrée-sorties. Ensuite, les bus font tous 8 bits, vu que le processeur est un CPU 8 bits. Avec 5 connexions de 8 bits, le tout utilise 40 broches, ce qui est beaucoup, mais totalement gérable. Par contre, les choses changerons pour les autres consoles. Au final, l'organisation des bus peut s'expliquer avec ce qu'on a vu dans la section sur les bus de communication. La console utilise une architecture Harvard, car la ROM et la RAM utilisent des bus différents. De plus, il y a des bus dédiés aux entrées-sorties, séparés des bus mémoire. Enfin, la carte graphique a droit à ses propres bus pour lire dans la cartouche et dans sa RAM vidéo dédiée. ===L'architecture de la console de jeu NES=== Maintenant, nous allons voir la console de Jeu Famicom, aussi appelée la NES en occident. Elle a une architecture centrée sur un processeur Ricoh 2A03, similaire au processeur 6502, un ancien processeur autrefois très utilisé et très populaire. Le processeur est associé à 2 KB de mémoire RAM. Sur certaines cartouches, on trouve une RAM utilisée pour les sauvegardes, qui est adressée par le processeur directement. Première variation par rapport à l'architecture de la console précédente : l'ajout de la RAM pour les sauvegardes dans les cartouches. Niveau carte graphique, une différence importante est que la carte graphique est connectée à la cartouche de jeu via un autre bus, afin de pouvoir lire les sprites et textures du jeu dans la cartouche. [[File:Architecture de la NES.png|centre|vignette|upright=2.5|Architecture de la NES]] La différence avec l'architecture précédente est que des bus ont été fusionnés. Comme dit plus haut, le système utilise une architecture Harvard, vu que la ROM est dans la cartouche, alors que la RAM est soudée à la carte mère. Par contre, la Famicon utilise un bus dédié aux entrées-sorties. Il est utilisé pour la carte son et la carte graphique, seules les manettes sont sur un bus à part. Ce qui fait qu'on devrait plutôt parler de bus de sorties, mais passons... L'essentiel est qu'on n'est plus tout à fait dans le cas de la console précédente, avec un bus par composant. ===L'architecture de la SNES=== L'architecture de la SNES est illustrée ci-dessous. Les changements pour le processeur et la RAM sont mineurs.La RAM a augmenté en taille et passe à 128 KB. Pareil pour la RAM de la carte vidéo, qui passe à 64 KB. Par contre, on remarque un changement complet au niveau des bus, de la carte graphique et de la carte son. [[File:Architecture de la SNES.png|centre|vignette|upright=2|Architecture de la SNES]] La console utilise un '''bus système unique''', sur lequel tout est connecté : ROM, RAM, entrées-sorties, etc. La seule exception est pour les manettes, qui sont encore connectées directement sur le processeur, via un bus séparé. La transition vers un bus système s'explique par le fait que la console est maintenant de 16 bits, ce qui fait que les bus doivent être plus larges. Le processeur adresse des mémoires RAM et ROM plus grandes, ce qui double la taille de leurs bus. De plus, les entrées-sorties aussi ont besoin d'un bus plus large. Le processeur n'ayant pas un nombre illimité de broches, la seule solution est de fusionner les bus en un seul bus système. Un autre changement est que la carte graphique est maintenant composée de deux circuits séparés. Encore une fois, il ne s'agit pas de coprocesseurs, mais de circuits non-programmables. Par contre, la carte son est remplacée par deux coprocesseurs audio ! De plus, les deux processeurs sont connectés à une mémoire RAM dédiée de 64 KB, comme pour la carte graphique. L'un est un processeur 8 bits (le DSP), l'autre est un processeur 16 bits. Un point très intéressant : certains jeux intégraient des coprocesseurs dans leurs cartouches de jeu ! Par exemple, les cartouches de Starfox et de Super Mario 2 contenait un coprocesseur Super FX, qui gérait des calculs de rendu 2D/3D. Le Cx4 faisait plus ou moins la même chose, il était spécialisé dans les calculs trigonométriques, et diverses opérations de rendu 2D/3D. En tout, il y a environ 16 coprocesseurs d'utiliser et on en trouve facilement la liste sur le net. La console était conçue pour, des pins sur les ports cartouches étaient prévues pour des fonctionnalités de cartouche annexes, dont ces coprocesseurs. Ces pins connectaient le coprocesseur au bus des entrées-sorties. Les coprocesseurs des cartouches de NES avaient souvent de la mémoire rien que pour eux, qui était intégrée dans la cartouche. ===L'architecture de la Megadrive et de la néo-géo=== Passons maintenant à la console de jeu Megadrive, une console 16 bits. Elle a une architecture similaire à celle de la néo-géo, une autre console bien plus puissante, sorti à peu près en même temps. Elles intègrent deux processeurs : un Motorola 68000 qui sert de processeur principal, un Z80 qui sert de processeur dédié à l'audio. Le Z80 et le Motorola 68000 étaient deux processeurs très populaires à l'époque. Le Z80 est une sorte de version améliorée de l'Intel 8088 utilisé sur les anciens PC et de nombreuses consoles utilisaient des Z80 comme processeur principal. Il était familier pour les programmeurs de l'époque, pour son cout réduit, sa bonne disponibilité, et bien d'autres avantages liés à sa production de masse. Le Z80 est utilisé comme co-processeur audio. Il commande un synthétiseur sonore, et est relié à sa propre mémoire, distincte de la mémoire principale. Le MC68000 est le processeur principal et a une relation maitre-esclave avec le Z80 : le MC68000 envoie des commandes au Z80, mais la communication ne va pas dans l'autre sens. Le Motorola 68000 était un processeur 16 bits, alors que le Z80 est un processeur 8 bits. Et cette différence fait que l'on ne peut pas connecter directement les deux sur le même bus, ou du moins pas facilement. La solution retenue est d'utiliser deux bus séparés : un bus de 16 bits connecté au 68000, un bus de 8 bits connecté au Z80. Le premier bus est un bus système sur lequel est connecté le 68000, 64 kibioctets de RAM, la cartouche de jeu, et la carte graphique. Le second bus est un bus de 8 bits, plus court, relié au Z80, à un synthétiseur sonore, et 8 kibioctets de RAM Les deux bus sont connectés à un '''''chipset''''', un circuit répartiteur, qui fait le pont entre les deux bus. Les manettes sont connectées sur le ''chipset''. Il contient un registre de 8 bits, dans lequel le MC68000 peut écrire dedans à sa guise, le registre étant adressable par le processeur. Lorsque le MC68000 écrit une valeur dedans, cela déclenche l’exécution automatique d'un programme pré-déterminé sur le Z80. : Pour ceux qui savent ce qu'est une interruption, les valeurs écrites dans ce registre sont des numéros d'interruption, qui indiquent quelle routine d'interruption exécuter. [[File:Architecture de la Megadrive et de la Néogeo.png|centre|vignette|upright=2.5|Architecture de la Megadrive et de la Néogeo]] Cet exemple nous montre que les bus systèmes sont certes très simples, mais aussi inflexibles. Ils fonctionnent bien quand les composants branchés dessus sont tous des composants 8 bits, ou sont tous de 16 bits, ou tous 32 bits. Mais dès qu'on mélange composants 8, 16, 32 ou 64 bits, les choses deviennent plus compliquées. Il est alors préférable d'utiliser des bus séparés, avec des répartiteurs pour faire le pont entre les différents bus. Et nous verrons que le problème s'est posé lui aussi sur les PC. ===L'architecture des anciennes consoles Playstation : beaucoup de co-processeurs=== Les consoles que nous venons d'aborder étaient des consoles 8 ou 16 bits. A partir des consoles 32 bits, leur architecture s'est rapprochée de celle des PC, avec un usage plus complexes de répartiteurs. La XBOX était très semblable à un PC : le processeur était un Pentium 3 modifié, la carte graphique était une Geforce 3 modifiée, les 64 mébioctets de RAM était la même mémoire DDR que celle des PC, le répartiteur secondaire était un ''chipset'' nForce de NVIDIA, etc. Mais les Playstation 1, 2 et 3 se distinguent de leur contemporains. Elles disposent de très nombreux co-processeurs, qui sont en plus très variés. La Playstation 1 a été une des premières console à utiliser les CD-ROM comme support de stockage, en remplacement des cartouches. La conséquence est que la console contient une mémoire ROM, soudée à la carte mère, de 512 kibioctets. Elle contient aussi 2 mébioctets de RAM, une carte graphique avec 1 mébioctet de mémoire vidéo, un processeur, et de quoi gérer les périphériques. Il y a un co-processeur audio spécialisé, avec 512 kibioctets de RAM, ce qui nous est familier. Par contre, les autres co-processeurs ne le sont pas. Déjà, le lecteur de CD-ROM est associé à des circuits sur la carte mère, il y a tout un sous-système dédié au lecteur de CD. Il y a un contrôleur qui sert d'interface avec le lecteur proprement dit, mais aussi deux co-processeurs audio et 32 kibioctets de RAM. Les co-processeurs audio servent à lire des CD sans trop utiliser le second co-processeur audio, ils lui servent de complément. Ensuite, le processeur incorpore plusieurs cœurs, avec un cœur principal et plusieurs co-processeurs. Le premier est un co-processeur système, qui est utilisé pour gérer la mémoire cache intégrée au processeur, pour des fonctionnalités appelées interruptions et exceptions, ainsi que pour configurer le processeur. Le second est un co-processeur arithmétique spécialisé dans les calculs en virgule flottante, très importants pour le rendu 3D. Enfin, il y a un décodeur vidéo, qui n'est pas un co-processeur, mais un circuit non-programmable, spécialisé dans le décodage vidéo. De nos jours, ce circuit aurait été intégré dans la carte graphique, mais il était intégré dans le processeur sur la Playstation 2. Pour le reste, le processeur est la figure centrale de la console. Il est connecté à 4 bus : un pour la RAM, un pour la carte graphique, un pour les manettes, un autre pour le reste. Le dernier bus est connecté au système audio et au système pour le lecteur CD. Ce serait un bus d'entrée-sortie, s'il n'était pas connecté à la mémoire ROM. Vous avez bien lu : la mémoire ROM est reliée au bus d'entrée-sortie. [[File:Architecture de la Playstation.png|centre|vignette|upright=2.5|Architecture de la Playstation]] La Playstation 2 est composé d'un processeur, couplé à 32 Mébioctets de RAM, et d'un paquet de co-processeurs. Plus de co-processeurs que la PS1. Le processeur principal n'est pas la même que celui de la PS1, mais il a une architecture similaire. Il intègre un décodeur vidéo sur le même circuit intégré, ainsi que deux co-processeur. Les co-processeurs ne sont cependant pas les mêmes. Le co-processeur système disparait et est remplacé par un second co-processeur arithmétique. Les deux co-processeurs arithmétiques sont spécialisés dans les nombres flottants, avec quelques différences entre les deux. Par exemple, le second co-processeur gérait des calculs trigonométriques, des exponentielles, des logarithmes, et d'autres fonctions complexes du genre ; mais pas le premier co-processeur. Ils sont reliés à 4 kibioctets de RAM pour le premier, 16 kibioctets de RAM pour le second ; qui sont intégrées dans le processeur et non-représentés dans le diagramme ci-dessous. La PS2 intègre aussi un co-processeur d'entrées-sorties. Pour information, il s'agit du processeur principal de la Playstation 1, qui est ici utilisé différemment, suivant que l'on place un jeu PS1 ou PS1 dans la console. Si on met un jeu PS1, il est utilisé pour émuler la Playstation 1, afin de faire tourner le jeu PS1 sur la PS2. Si on met un jeu PS2, il est utilisé comme co-processeur d'entrée-sortie et fait l'interface entre CPU et entrées-sorties. Il est relié à 2 mébioctets de RAM, soit exactement la même quantité de mémoire que la Playstation 1. Tous les périphériques sont connectés au co-processeur d'entrées-sortie. Pour cela, le co-processeur d'entrées-sortie est relié à deux bus dédiés aux périphériques. Le premier bus est relié aux manettes, aux ports USB et aux ports pour cartes mémoires. Le second bus est relié à la carte son, la carte réseau, le lecteur DVD, et un port PCMIA. Notons que la carte son intègre un co-processeur audio, qui n'est pas représenté dans le diagramme ci-dessous. [[File:Playstation 2 architecture.png|centre|vignette|upright=2.5|Playstation 2 architecture]] ==L'architecture des PC et son évolution== Après avoir vu les consoles, nous allons maintenant voir les anciens PC, des années 80 ou 90. Le tout premier PC était techniquement l''''IBM PC'''. Par la suite, de nombreux ordinateurs ont tenté de reproduire l'IBM PC originel, avec parfois quelques modifications mineures. De tels ordinateurs ''IBM PC compatibles'', ont été très nombreux, pour des raisons diverses. Le fait d'utiliser des composants banalisés, facilement disponibles, ainsi qu'une bonne documentation de l'IBM PC originel, a grandement aidé. Les IBM PC compatibles ont progressivement évolué pour donner les PC actuels. L'IBM PC compatible a donné naissance à de nombreux standards divers. ===L'IBM PC originel et l'IBM PC XT=== [[File:IBM PC XT 02.jpg|vignette|IBM PC XT.]] Nous allons commencer par voir l'IBM PC originel, et son successeur : l'IBM Personal Computer XT. Nous les appelerons tous deux l'IBM PC. L'IBM PC utilisait un processeur Intel 8088, qui était un processeur 8 bits. Ils utilisaient un bus système unique, appelé le '''bus XT'''. Le bus système allait à 4.77 MHz, soit la même fréquence que le processeur. C'était un bus de 8 bits, ce qui collait parfaitement avec les processeurs 8 bits commercialisés par Intel à l'époque. L'IBM PC comprenait une mémoire ROM avec de quoi faire fonctionner le PC. La ROM en question contenait un programme minimal, appelé le '''BIOS''', sans lequel le PC ne fonctionnait pas du tout. Il servait de base pour le système d'exploitation et MS-DOS ne fonctionnait pas sans elle. De nos jours, son rôle est plus limité : sans elle, le PC ne démarre pas. Mais nous détaillerons cela dans le prochain chapitre. En plus de la ROM pour le BIOS, l'IBM PC avait quatre mémoires ROM dédiée au langage de programmation BASIC. Lorsque le PC démarrait, il ne bootait pas un système d'exploitation, mais lançait l'interpréteur pour le langage BASIC. De nos jours, ce serait l'équivalent d'un ordinateur qui boote directement sur du Python, à savoir la console Python que vous avez peut-être déjà utilisé si vous avez testé Python. Ceux qui ont déjà touché à un ordinateur de l'époque savent ce que ca veut dire, mais c'est malheureusement très difficile à expliquer sans ce genre d'expérience. Toujours est-il que c'était une sorte de norme à l'époque : les ordinateurs bootaient généralement sur un interpréteur BASIC. [[File:XT Bus pins.svg|vignette|Connecteur du bus XT.]] Les PC étaient conçus pour qu'on branche des '''cartes d'extension''', à savoir des cartes électroniques qu'on branchait sur la carte mère, à l'intérieur du PC. Les cartes d'extension de l'époque étaient surtout des cartes son ou des cartes graphiques, mais aussi des cartes pour brancher des péripéhriques. par exemple, on pouvait ajouter deux cartes graphiques dans l'IBM PC originel : l'''IBM Monochrome Display Adapter'' et/ou la ''IBM Color Graphics Adapter''. De nos jours, les cartes son sont intégrées à la carte mère, mais les cartes graphiques sont restées des cartes d'extension. Les cartes d'extension étaient branchées sur un '''connecteur XT''', qui était directement relié au bus XT. Le connecteur XT est illustré ci-contre, mais ne vous en souciez pas trop pour le moment. La carte mère de l'IBM PC avait 5 connecteurs de ce type, qu'on pouvait peupler avec autant de cartes d'extension. L'IBM Personal Computer XT est passé à 8 connecteurs XT, soit trois de plus. Pour ce qui est des périphériques, l'IBM PC avait plusieurs connecteurs : un port série, un port parallèle, un port pour le clavier, et un port pour un lecteur cassette. Le clavier et le lecteur cassette étaient connectés directement sur la carte mère, qui contenait quelques circuits pour gérer le clavier. Par contre, les deux premiers n'étaient pas connectés à la carte mère. Le port série était en réalité une carte d'extension, branchée sur un connecteur XT. Et il en est de même pour le port parallèle. Pour ce qui est des supports de stockage, l'IBM PC originel n'avait pas de disque dur et n'avait que des lecteurs de disquette. De plus, le lecteur de disquette n'était pas connecté directement sur la carte mère, mais était connecté à une carte d'extension, branchée sur un connecteur XT. La carte d'extension avait deux connecteurs, un par lecteur de disquette, ce qui fait que les deux lecteurs de disquettes pouvaient être branchés sur une seule carte d'extension. L'IBM Personal Computer XT a ajouté un disque dur, sauf sur quelques sous-modèles spécifiques. Le PC avait aussi un petit haut-parleur capable de faire des bips. Pour résumer, l'IBM PC originel se reposait beaucoup sur les cartes d'extension, sa carte mère contenait peu de choses. Enfin, peu de choses... Il y avait un processeur Intel 8088, éventuellement un coprocesseur flottant 8087, de la RAM, de la ROM, et des circuits intégrés assez divers. En voici la liste, certains vous seront familiers, d'autres vous seront inconnus à ce stade du cours : * les circuits de décodage d'adresse ; * un contrôleur DMA intel 8273 ; * un contrôleur d'interruption 8259 ; * un contrôleur de bus Intel 8288 pour gérer le bus XT ; * un générateur d'horloge Intel 8284 et un diviseur de fréquence ; * un ''timer'' Intel 8253, le même que celui étudié dans le chapitre sur les ''timers'' ; * un contrôleur parallèle 8255. Les multiplexeurs, registres et portes logiques, sont des circuits de décodage d'adresse, qui permettent de combiner plusieurs RAM en une seule, idem avec la mémoire ROM. Si vous verrez qu'il y a 5 mémoires ROM : une ROM pour le BIOS, et quatre autres ROM pour le BASIC. Les 4 ROM du BASIC sont combinées en une seule mémoire ROM. Pour les RAM, il y en a 8 à 32, qui sont combinées en une seule RAM de 16 à 64 kibioctets. [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] ===L'architecture d'un IBM PC compatible 16 bits=== Les PC suivants sont passés à des processeurs 16 bits, mais c'était toujours des processeurs x86 d'Intel, à savoir des Intel 286 et 386. La RAM a grossi, quelques entrées-sorties ont été ajoutées, mais l'architecture globale est plus moins resté le même. C'est surtout au niveau du bus et des périphériques que les changements majeurs ont eu lieu. [[File:ISA Bus pins.svg|vignette|Connecteur ISA.]] Les PC 16 bits utilisaient un bus système unique, sur lequel tout était connecté : le processeur, la RAM, la ROM, les cartes d'extension et tout le reste. Le bus en question s'appelait le '''bus AT''', mais il a rapidement été renommé en '''bus ISA''' (''Industry Standard Architecture''). Le bus ISA était prévu pour avoir une compatibilité avec le bus 8 bits de l'IBM PC originel. D'ailleurs, cela se ressent jusque dans le connecteur utilisé : le connecteur ISA est un connecteur XT qu'on a fusionné avec un second connecteur pour l'étendre de 8 à 16 bits. Les PC 16 bits avaient toujours un port série, un port parallèle, un clavier, un lecteur de disquette et des cartes d'extension. Des disques durs pouvaient être ajoutés, aussi. Mais pour ces périphériques, un changement majeur a eu lieu comparé à l'IBM PC originel. L'IBM PC originel utilisait des cartes d'extension pour tout, sauf le clavier. Mais maintenant, les périphériques ne sont plus connectés à une carte d'extension. À la place, les circuits de la carte d'extension sont déplacés sur la carte mère. Mais n'allez pas croire qu'ils étaient connectés directement au bus ISA, il y avait des intermédiaires. Le clavier était relié à un '''contrôleur de clavier''', qui faisait l'interface entre le connecteur du clavier et le bus ISA. Le contrôleur de clavier était appelé le ''Keyboard Controler'', abrévié en KB. Il recevait ce qui est tapé au clavier et traduisait cela en quelque chose de compréhensible par l'ordinateur. Les autres périphériques étaient connectés à un circuit intégré dédié : l''''Intel 82091AA'''. Il était connecté au lecteur de disquette, au port série et au port parallèle. Il servait d'intermédiaire entre ces périphériques et le bus ISA. Vous pouvez le voir comme une sorte de répartiteur, mais qui ne serait pas connecté sur le processeur et la RAM Enfin, il ne faut pas oublier les autres composants présents sur l'IBM PC originel. Le BIOS est toujours là, de même que les ''timers'' Intel 8253 PIT, le contrôleur d'interruption Intel 8259 et le contrôleur DMA Intel 8237. Les PC 16 bits ont aussi intégré une ''Real Time Clock'' (RTC). Pour rappel, c'est un composant qui permet au PC de mémoriser la date et l'heure courante, à la seconde près. Le tout est résumé dans le schéma ci-dessous. [[File:Architecture de l'IBM PC compatible.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible]] Un point important est que le bus ISA allait à la même fréquence que le processeur, vu que c'était un bus système. Les processeurs de l'époque étaient des CPU 286 d'Intel, ou le 386 d'Intel. Les Intel 286 allaient de 4 MHz minimum, à 25 MHz maximum. Le 386, quant à lui, allait de 12 à 40 MHz. Le bus ISA devait aller à cette fréquence, il était synchrone avec le processeur. Par la suite, les processeurs ont gagné en performance, ce qui fait que le bus ISA est devenu trop lent pour le processeur. Une idée a alors été de conserver le bus ISA, pour des raisons de compatibilité, mais de le reléguer comme bus secondaire. L'ordinateur contient alors deux bus : un bus système, et un bus ISA secondaire. Le lien entre les deux est réalisé par un '''pont ISA''', ''ISA Bridge'' en anglais. Le bus ISA fonctionnait alors sa fréquence usuelle, alors que le bus système était beaucoup plus rapide. Le bus système fonctionnait à une fréquence bien plus élevée, ce qui fait que le processeur pouvait communiquer à pleine vitesse, notamment avec la RAM. Le processeur n'était alors plus forcé à aller à la même fréquence que le bus ISA [[File:Architecture de l'IBM PC compatible avec bridge ISA.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible avec bridge ISA]] Les PC de l'époque intégraient donc plusieurs bus séparés. Vous avez bien lu : plusieurs bus ! Ici, il s'agit de ce que j'appelle des '''bus en cascade''', à savoir qu'un bus est connecté à un autre bus par un intermédiaire. Au passage, si j'aborde ces exemples, car c'est pareil sur les ordinateurs modernes. Le pont ISA a été remplacé par des circuits différents, mais qui ont un rôle assez similaire. Le ''chipset'' de votre carte mère n'est qu'un lointain descendant du pont ISA, qui s'interface avec des bus différents. ===L'arrivée des standards AT et IDE pour les disques durs=== Initialement, les disques durs étaient placés dans l'ordinateur et étaient connectés sur le bus ISA, via une carte d'extension ISA. En clair, il fallait connecter le disque dur sur une carte d'extension, et non sur la carte mère. Les cartes d'extension en question permettaient de connecter un ou plusieurs disques durs, parfois des lecteurs de disquette supplémentaires. Les cartes ISA de ce type faisaient juste l'interface entre le bus ISA et les disques durs, rien de plus. L'interface en question a été standardisée, ce qui a donné le standard ''AT Bus Attachment'', qui a été abrévié en ATA. Et ce n'était pas que pour les disques durs, de nombreux composants étaient dans ce cas. Une carte d'extension servait d'intermédiaire entre eux et la carte mère. Les cartes d'extension en question étaient appelées des ''Host bus adapter''. [[File:Acculogic sIDE-4 Controller ISA.jpg|centre|vignette|upright=2|Carte ISA d'interface disque dur, de marque Acculogic.]] Mais les choses ont rapidement évoluées, que ce soit du côté des cartes mères que du côté des disques durs. Le '''standard IDE''' a permis de brancher un disque dur directement sur la carte mère, sans passer par une carte d'interface ISA. Pour cela, la carte mère réservait un connecteur ISA pour le disque dur, renommé '''connecteur ATA'''. Pour que cela soit possible, il a fallu rajouter des circuits sur la carte mère. Tout ce qui était sur les cartes d'interface ISA s'est retrouvé sur la carte mère. [[File:Ajout des ports IDE sur la carte mère.png|centre|vignette|upright=2|Ajout des ports IDE sur la carte mère]] En réalité, les connecteurs ATA étaient des connecteurs ISA simplifiés. Un connecteur ISA avait en tout 98 broches, alors qu'un connecteur ATA n'en contient que 40. Les broches qui étaient inutiles pour les disques durs ont simplement été enlevées. Et qui dit connecteur spécialisé, dit câble spécialisé. Les disques durs étaient branchés sur le connecteur AT grâce à un câble ATA, sur lequel on pouvait connecter deux disques durs. [[File:ATA Plug.svg|centre|vignette|upright=2|Connecteur ATA.]] [[File:ATA cables.jpg|centre|vignette|upright=2|Cable ATA.]] Il était donc possible de connecter deux disques durs sur un seul connecteur ATA. Et cette possibilité est devenue d'autant plus utile par la suite. A partir de la version 2, ATA supportait aussi les lecteurs de disquettes, les lecteurs de CD/DVD, et bien d'autres supports de stockage. Il était alors possible de connecter un lecteur CD et un disque dur sur un seul connecteur. Les cartes mères avaient généralement deux connecteurs ATA, et n'avaient pas besoin de plus. C'était suffisant pour connecter un disque dur, un lecteur de disquette et un lecteur CD, configuration courante entre les années 90 et 2000. Un câble est donc connecté à deux supports de stockage. Pour distinguer les deux, le standard ATA ajoute une possibilité de configuration. Sur un câble, il doit y avoir un support de stockage "maitre" et un support "esclave". C'était la terminologie de l'époque, que je reproduis ici, même si elle est fortement trompeuse. N'allez pas croire que cela implique que l'un ait des avantages sur l'autre. Le support 'maitre" n'a pas droit à plus de bande passante, il n'a pas la priorité sur l'autre, rien du tout. Il s'agit juste d'un nombre qui permet de savoir avec qui le processeur communique, qui vaut 0 pour le premier support, 1 pour l'autre. Une sorte d'adresse de 1 bit, si l'on veut. [[File:ATA-Konfiguration02.png|centre|vignette|upright=2|Configuration ATA.]] Pour configurer un support de stockage en mode "maitre" ou "esclave", le support de stockage avait quelques pins dédiés. Il suffisait de placer un détrompeur en plastique sur les pins adéquats. Les pins se trouvaient à l'arrière du disque dur ou du lecteur de CD/DVD/Disquette/autre. [[File:HDD Master and Slave Description.jpg|centre|vignette|upright=2|Configuration ''Master/Slave''.]] ===L'architecture d'un PC avec un processeur Intel 486=== Maintenant, passons aux ordinateurs 32 bits, avec l'exemple d'un PC avec un processeur 486 d'Intel. A cette époque, le bus ISA était devenu trop limité et était en place d'être remplacé par le bus PCI, qui avait la même fonction. De nombreuses cartes d'extension utilisaient déjà ce standard et étaient branchées sur des connecteurs PCI dédiés, différents des connecteurs ISA. Intuitivement, on se dit que le bus PCI remplaçait le bus ISA, mais les choses étaient plus compliquées. Les disques durs gardaient leur connecteur ATA, et ne passaient pas par le bus PCI. Ils avaient un bus IDE séparé, qui était un bus ISA modifié. Là encore, les processeurs étaient devenus beaucoup plus rapides que le bus PCI. Les deux allaient à des fréquences assez différentes, ce qui fait que le bus PCI était séparé du bus système. Il y avait alors deux implémentations possibles. * La première utilise un répartiteur unique, relié au processeur, à la RAM, au bus PCI, et au bus IDE. * La seconde utilise un bus système séparé du bus PCI, avec un '''pont PCI''' pour faire l'interface entre les deux. Le '''''System Controler''''' était un circuit intégré, placé sur la carte mère, qui peut servir soit de pont PCI, soit de répartiteur. Le répartiteur PCI sert d'intermédiaire avec le bus PCI, mais aussi avec le bus IDE, utilisé pour les disques durs, aussi appelé le bus ''Parallel ATA''. Il peut aussi être connecté au processeur, à la mémoire RAM, ainsi qu'à la mémoire cache, mais cela ne sert que quand il est utilisé comme répartiteur. [[File:Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur.png|centre|vignette|upright=2|Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur]] Pour des raisons de compatibilité, le bus ISA avait été conservé, aux côtés du bus PCI. Il y avait un pont ISA en plus du pont/répartiteur PCI. Une implémentation possible aurait été de connecter les deux ponts ISA et PCI à un bus système unique. Mais cette solution n'a pas été retenue. La raison est que le bus PCI et le bus ISA ont des performances très différentes. Le bus PCI est très rapide, le bus ISA beaucoup plus lent. La différence est d'un ordre de grandeur, environ. Dans ces conditions, il est possible de faire passer les communications ISA à travers le bus PCI. Pour cela, le pont ISA est directement connecté sur le pont PCI, comme illustré ci-dessous. Et il en est de même pour le bus dédié aux disques durs. En effet, les disques durs étaient autrefois reliés au bus ISA, mais cela a changé depuis. Ils disposent maintenant de leur propre bus dédié, le '''bus IDE''', qui est un bus ISA simplifié. Et ce bus ISA simplifié était connecté directement sur le pont PCI. [[File:Architecture de l'IBM PC compatible avec pont PCI.png|centre|vignette|upright=2|Architecture de l'IBM PC compatible avec pont PCI]] Dans ce qui va suivre, nous allons étudier un exemple qui utilise un bus système séparé, avec un pont PCI, sans répartiteur. Voilà pour les grandes lignes, mais le schéma ci-dessous montre que tout est plus complexe. Vous remarquerez des connexions optionnelles entre le pont PCI et la mémoire RAM et la mémoire cache. La raison est que le pont PCI peut aussi servir de répartiteur en remplacement du bus système. Concrètement, on peut alors retirer le bus système. La mémoire, le bus PCI, le bus ISA, le bus IDE, le processeur et la RAM sont alors connectés au répartiteur PCI, qui sert d'intermédiaire central entre tous ces composants. Mais ce n'est pas la solution qui a été retenue dans notre exemple. [[File:Intel486-Typ PCI System.png|centre|vignette|upright=2|PC IBM compatible avec un 486, un bus PCI et un bus ISA. Le ''host bus'' est le bus système.]] Le pont ISA sert ici d'intermédiaire entre le bus système et le bus ISA. De plus, il a été amélioré sur de nombreux points. Il inclut notamment des circuits qui étaient autrefois sur la carte mère, à savoir le contrôleur DMA 82C87 et le contrôleur d'interruption 82C59, ainsi que les ''timers'' Intel 82C54. Les composants restants sont eux reliés sur un quatrième bus : le bus X, l'ancêtre du bus ''Low Pin Count''. Le bus X était celui du BIOS, du contrôleur de clavier, de la ''Real Time Clock'', et du contrôleur de périphérique 82091AA d'Intel. [[File:ISA Bridge schematic.png|centre|vignette|upright=2|ISA Bridge.]] ===L'architecture des PC des années 90-2000=== Par la suite, les ponts PCI et ISA ont évolué avec l'évolution des bus de l'ordinateur. Le bus ISA a progressivement été remplacé par d'autres bus, comme le bus ''Low Pin Count'', le bus PCI a été remplacé par le PCI Express, d'autres bus ont été ajoutés, etc. Mais la séparation du ''chipset'' en deux a été conservée. [[File:Chipset schematic.svg|vignette|upright=1.0|Chipset séparé en northbridge et southbridge.]] Le pont PCI et le pont ISA ont été remplacés respectivement par le '''pont nord''' et le '''pont sud''', plus connus par leurs noms anglais de ''northbridge'' et de ''southbridge''. Le pont nord servait d'interface entre le processeur, la mémoire et la carte graphique et est connecté à chacun par un bus dédié. Il intégrait aussi le contrôleur mémoire. Le pont sud est le répartiteur pour les composants lents, à savoir l'USB, l'Ethernet, etc. Le bus qui relie le processeur au pont nord était appelé le '''''Front Side Bus''''', abrévié en FSB. [[File:IMac Chipset.png|centre|vignette|upright=2|Chipset séparé en northbridge et southbridge.]] Un point important est que le bus PCI est devenu un bus assez lent, ce qui fait qu'il a finit par être connecté au pont sud. Le pont PCI est donc devenu le pont sud, dans le courant des années 2000. Durant un moment, un équivalent du pont ISA a subsisté dans un circuit de '''''Super IO'''''. Concrètement, il s'occupait du lecteur de disquette, du port parallèle, du port série, et des ports PS/2 pour le clavier et la souris. Mais il ne gérait pas le bus ISA, mais son remplaçant, le bus ''Low Pin Count''. [[File:Motherboard diagram fr.svg|centre|vignette|upright=1.5|Carte mère avec circuit Super IO.]] ===L'architecture des PC depuis les années 2000=== Depuis la sortie du processeur AMD Athlon 64, le pont nord a été fusionné dans le processeur. La fusion ne s'est pas faite en une fois, des fonctionnalités ont progressivement été progressivement intégrées dans le processeur. Le pont sud est resté, mais il a alors été progressivement connecté directement au processeur. La raison derrière cette intégration est que les processeurs avaient de plus en plus de transistors à leur disposition. Ils en ont profité pour intégrer le pont nord. Et cela permettait de simplifier le câblage des cartes mères, sans pour autant rendre vraiment plus complexe la fabrication du processeur. Les industriels y trouvent leur compte. La première étape a été l'intégration du contrôleur mémoire a été intégré au processeur. Concrètement, le résultat était que la mémoire RAM n'était plus connectée au pont nord, mais était connectée directement au processeur ! Il y a donc eu un retour d'un bus mémoire, mais spécialisé pour la mémoire RAM. En théorie, une telle intégration permet diverses optimisations quant aux transferts avec la mémoire RAM. Les transferts ne passent pas par un répartiteur, ce qui réduit le temps d'accès à la mémoire RAM. Ajoutons de sombres histoires de prefetching, d'optimisation des commandes, et j'en passe. Toujours est-il que le pont nord ne servait alors d'intermédiaire que pour les ports PCI Express, et le pont sud. [[File:X58 Block Diagram.png|centre|vignette|upright=2|Chipset X58 d'Intel.]] Par la suite, la carte graphique fût aussi connectée directement sur le processeur. Le processeur incorpore pour cela des contrôleurs PCI-Express. Le pont nord a alors disparu complétement, son intégration dans le processeur était complète. Sur les cartes mères Intel récentes, le pont sdud subsiste, il est appelé le ''Platform Controler Hub'', ou PCH. L'organisation des bus sur la carte mère qui résulte de cette connexion du processeur à la carte graphique, est illustrée ci-dessous, avec l'exemple du PCH. [[File:Intel 5 Series architecture.png|centre|vignette|upright=2|Intel 5 Series architecture]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=L'interface électrique entre circuits intégrés et bus | prevText=L'interface électrique entre circuits intégrés et bus | next=La hiérarchie mémoire | nextText=La hiérarchie mémoire }} </noinclude> 39qa3k5ypc5nuye3p5kx1hxbw5tua99 765744 765743 2026-05-01T21:56:53Z Mewtow 31375 /* Les SoC haute performance */ 765744 wikitext text/x-wiki Dans les chapitres précédents, nous avons vu comment représenter de l'information, la traiter et la mémoriser avec des circuits. Mais un ordinateur n'est pas qu'un amoncellement de circuits et est organisé d'une manière bien précise. Il est structuré autour de trois circuits principaux : * un '''processeur''', qui manipule l'information et donne un résultat ; * une '''mémoire''' qui mémorise les données à manipuler ; * les '''entrées/sorties''', qui permettent à l'ordinateur de communiquer avec l'extérieur. [[File:Architecture Von Neumann.png|centre|vignette|upright=2|Architecture d'un système à mémoire.]] Pour faire simple, le processeur est un circuit qui s'occupe de faire des calculs. Rien d'étonnant à cela. Je rappelle que tout est codé par des nombres dans un ordinateur, ce qui fait que manipuler des nombres revient simplement à faire des calculs. Un ordinateur n'est donc qu'une grosse calculatrice améliorée, et le processeur est le composant qui fait les calculs. La mémoire s'occupe purement de la mémorisation des données, des nombres sur lesquelles faire des calculs. Pour être plus précis, il y a deux mémoires : une pour les données proprement dites, une autre pour le programme à exécuter. La première est la '''mémoire RAM''', la seconde est la '''mémoire ROM'''. Nous détaillerons ce que sont ces deux mémoires dans la suite du chapitre, mais sachez que nous avions déjà rencontré ces deux types de mémoires dans les chapitres sur les registres et les mémoires adressables. Les entrées-sorties permettent au processeur et à la mémoire de communiquer avec l'extérieur et d'échanger des informations avec des périphériques. Les '''périphériques''' regroupent, pour rappel, tout ce est branché sur un ordinateur, mais n'est pas à l'intérieur de celui-ci. Le processeur, les mémoires et les entrées-sorties communiquent ensemble via un '''réseau d'interconnexions'''. Le terme est assez barbare, mais rien de compliqué sur le principe. C'est juste un ensemble de fils électriques qui relie les différents éléments d'un ordinateur. Les interconnexions sont souvent appelées le bus de communication, mais le terme est un abus de langage, comme on le verra plus bas. Afin de simplifier les explications, on va supposer que le réseau d'interconnexion est le suivant. Tout est connecté au processeur. Il y a des interconnexions entre le processeur et la mémoire RAM, d'autres interconnexions entre processeur et mémoire ROM, et d'autres entre le processeur et les entrées-sorties. Nous verrons que d'autres réseaux d'interconnexions fusionnent certaines interconnexions, pour les partager entre la ROM et la RAM, par exemple. Mais pour le moment, gardez le schéma ci-dessous en tête. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ==Les mémoires RAM et ROM== La mémoire est le composant qui mémorise des informations, des données. Dans la majorité des cas, la mémoire est composée de plusieurs '''cases mémoire''', chacune mémorisant plusieurs bits, le nombre de bits étant identique pour toutes les cases mémoire. Dans le cas le plus simple, une case mémoire mémorise un '''octet''', un groupe de 8 bits. Mais les mémoires modernes mémorisent plusieurs octets par case mémoire : elles ont des cases mémoires de 16, 32 ou 64 bits, soit respectivement 2/4/8 octets. De rares mémoires assez anciennes utilisaient des cases mémoires contenant 1, 2, 3, 4, 5, 6 7, 13, 17, 23, 36 ou 48 bits. Mais ce n'était pas des mémoires électroniques, aussi nous allons les passer sous silence. Tout ce qu'il faut savoir est que la quasi-totalité des mémoires électronique a un ou plusieurs octets par case mémoire. Pour simplifier, vous pouvez imaginer qu'une mémoire RAM est un regroupement de registre, chacun étant une case mémoire. C'est une description pas trop mauvaise pour décrire les mémoires RAM, qu'on abordera dans ce qui suit. {|class="wikitable" |+ Contenu d'une mémoire, case mémoire de 16 bits (deux octets) |- ! Case mémoire N°1 | 0001 0110 1111 1110 |- ! Case mémoire N°2 | 1111 1110 0110 1111 |- ! Case mémoire N°3 | 0001 0000 0110 0001 |- ! Case mémoire N°4 | 1000 0110 0001 0000 |- ! Case mémoire N°5 | 1100 1010 0110 0001 |- ! ... | ... |- ! Case mémoire N°1023 | 0001 0110 0001 0110 |- ! Case mémoire N°1024 | 0001 0110 0001 0110 |} Dans ce cours, il nous arrivera de partir du principe qu'il y a un octet par case mémoire, par souci de simplification. Mais ce ne sera pas systématique. De plus, il nous arrivera d'utiliser le terme adresse pour parler en réalité de la case mémoire associée, par métonymie. ===La capacité mémoire=== Bien évidemment, une mémoire ne peut stocker qu'une quantité finie de données. Et à ce petit jeu, certaines mémoires s'en sortent mieux que d'autres et peuvent stocker beaucoup plus de données que les autres. La '''capacité''' d'une mémoire correspond à la quantité d'informations que celle-ci peut mémoriser. Plus précisément, il s'agit du nombre maximal de bits qu'une mémoire peut contenir. Elle est le produit entre le nombre de cases mémoire, et la taille en bit d'une case mémoire. Toutes les mémoires actuelles utilisant des cases mémoire d'un ou plusieurs octets, ce qui nous arrange pour compter la capacité d'une mémoire. Au lieu de compter cette capacité en bits, on préfère mesurer la capacité d'une mémoire avec le nombre d'octets qu'elle contient. Mais les mémoires des PC font plusieurs millions ou milliards d'octets. Pour se faciliter la tâche, on utilise des préfixes pour désigner les différentes capacités mémoires. Vous connaissez sûrement ces préfixes : kibioctets, mébioctets et gibioctets, notés respectivement Kio, Mio et Gio. {|class="wikitable" |- !Préfixe!!Capacité mémoire en octets!!Puissance de deux |- ||Kio||1024||2<sup>10</sup> octets |- ||Mio||1 048 576||2<sup>20</sup> octets |- ||Gio||1 073 741 824||2<sup>30</sup> octets |} On peut se demander pourquoi utiliser des puissances de 1024, et ne pas utiliser des puissances un peu plus communes ? Dans la majorité des situations, les électroniciens préfèrent manipuler des puissances de deux pour se faciliter la vie. Par convention, on utilise souvent des puissances de 1024, qui est la puissance de deux la plus proche de 1000. Or, dans le langage courant, kilo, méga et giga sont des multiples de 1000. Quand vous vous pesez sur votre balance et que celle-ci vous indique 58 kilogrammes, cela veut dire que vous pesez 58 000 grammes. De même, un kilomètre est égal à 1000 mètres, et non 1024 mètres. Autrefois, on utilisait les termes kilo, méga et giga à la place de nos kibi, mebi et gibi, par abus de langage. Mais peu de personnes sont au courant de l'existence de ces nouvelles unités, et celles-ci sont rarement utilisées. Et cette confusion permet aux fabricants de disques durs de nous « arnaquer » : Ceux-ci donnent la capacité des disques durs qu'ils vendent en kilo, méga ou giga octets : l’acheteur croit implicitement avoir une capacité exprimée en kibi, mébi ou gibi octets, et se retrouve avec un disque dur qui contient moins de mémoire que prévu. ===Lecture et écriture : mémoires ROM et RWM=== Pour simplifier grandement, on peut grossièrement classer les mémoires en deux types : les ''Read Only Memory'' et les ''Read Write Memory'', aussi appelées mémoires ROM et mémoires RWM. Pour les '''mémoires ROM''', on ne peut pas modifier leur contenu. On peut y récupérer une donnée ou une instruction : on dit qu'on y accède en lecture. Mais on ne peut pas modifier les données qu'elles contiennent. Quant aux '''mémoires RWM''', on peut y accéder en lecture (récupérer une donnée stockée en mémoire), mais aussi en écriture : on peut stocker une donnée dans la mémoire, ou modifier une donnée existante. Tout ordinateur contient au minimum une ROM et une RWM (souvent une mémoire RAM), les deux n'ont pas exactement le même rôle. Pour simplifier, la mémoire ROM mémorise le programme à exécuter, la mémoire RWM stocke des données. Il a existé des ordinateurs où la mémoire RWM était une mémoire magnétique, voire acoustique, mais ce n'est plus le cas de nos jours. Pour les ordinateurs modernes, la mémoire RWM est une mémoire électronique. Pour faire la différence avec ces anciennes mémoires RWM, elle est appelée la '''mémoire RAM'''. Il s'agit d'une mémoire qui stocke temporairement des données que le processeur doit manipuler (on dit qu'elle est volatile). Elle s'efface complètement quand on coupe l'alimentation de l'ordinateur. Il existe d'autres différences entre mémoire RWM et RAM : * la mémoire RWM peut ne pas être volatile et donc conserver les données écrites ; * la mémoire RAM possède un temps d'accès constant aux données (quelle que soit l'adresse), ce qui n'est pas garanti pour les mémoires RWM. Outre le programme à exécuter, la mémoire ROM peut mémoriser des constantes, des données qui ne changent pas. Elles ne sont jamais modifiées et gardent la même valeur quoi qu'il se passe lors de l'exécution du programme. En conséquence, elles ne sont jamais accédées en écriture durant l'exécution du programme, ce qui fait que leur place est dans une mémoire ROM. La mémoire RWM est alors destinée aux données temporaires, qui changent ou sont modifiées lors de l'exécution du programme, et qui sont donc manipulées aussi bien en lecture et en écriture. La mémoire RWM mémorise alors les variables du programme à exécuter, qui sont des données que le programme va manipuler. Pour les systèmes les plus simples, la mémoire RWM ne sert à rien de plus. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Pour donner un exemple de données stockées en ROM, on peut prendre l'exemple des anciennes consoles de jeu 8 et 16 bits. Les jeux vidéos sur ces consoles étaient placés dans des cartouches de jeu, précisément dans une mémoire ROM à l'intérieur de la cartouche de jeu. La ROM mémorisait non seulement le code du jeu, le programme du jeu vidéo, mais aussi les niveaux et les ''sprites'' et autres données graphiques. Une conséquence est que les consoles 8/16 bits n'avaient pas besoin de beaucoup de RAM, comparé aux ordinateurs de l'époque, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. À l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. ===L'adressage mémoire=== Sur une mémoire RAM ou ROM, on ne peut lire ou écrire qu'une case mémoire, qu'un registre à la fois : une lecture ou écriture ne peut lire ou modifier qu'une seule case mémoire. Techniquement, le processeur doit préciser à quel case mémoire il veut accéder à chaque lecture/écriture. Pour cela, chaque case mémoire se voit attribuer un nombre binaire unique, l''''adresse''', qui va permettre de le sélectionner et de l'identifier celle-ci parmi toutes les autres. En fait, on peut comparer une adresse à un numéro de téléphone (ou à une adresse d'appartement) : chacun de vos correspondants a un numéro de téléphone et vous savez que pour appeler telle personne, vous devez composer tel numéro. Les adresses mémoires en sont l'équivalent pour les cases mémoire. [[File:Adressage mémoire.png|centre|vignette|upright=2|Exemple : on demande à la mémoire de sélectionner la case mémoire d'adresse 1002 et on récupère son contenu (ici, 17).]] L'adresse mémoire est générée par le processeur. Le processeur peut parfaitement calculer des adresses, en extraire du programme qu'il exécute, et bien d'autres choses. Nous détaillerons d'ailleurs les mécanismes pour dans les chapitres portant sur les modes d'adressage du processeur. Mais pour le moment, nous avons juste besoin de savoir que c'est le processeur qui envoie des adresses aux mémoires RAM et ROM. Les adresses générées par le processeur sont alors envoyées à la RAM ou la ROM via une connexion dédiée, un ensemble de fils qui connecte le processeur à la mémoire : le '''bus d'adresse mémoire'''. L'adresse sélectionne une case mémoire, le processeur peut alors récupérer la donnée dedans pour une lecture, écrire une donnée pour l'écriture. Pour cela, un second ensemble de fil connecte le processeur à la RAM/ROM, mais cette fois-ci pour échanger des données. Il s'agit du '''bus de données mémoire'''. Les deux sont souvent regroupés sous le terme de '''bus mémoire'''. Un ordinateur contient toujours une RAM et une ROM, ce qui demande aux bus mémoire de s'adapter à la présence de deux mémoires. Il y a alors deux solutions, illustrées dans les deux schémas ci-dessous. Avec la première, il y a un seul bus mémoire partagé entre la RAM et la ROM, comme illustré ci-dessous. Une autre solution utilise deux bus séparés : un pour la RAM et un autre pour la ROM. Nous verrons les différences pratiques entre les deux à la fin du chapitre. Pour le moment, nous allons partir du principe qu'il y a un bus pour la mémoire ROM, et un autre bus pour la RAM. [[File:CPT-System-Architecture-gapfill1-ANS.svg|centre|vignette|upright=2|Architecture avec une ROM et une RAM.]] [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ===L'alignement mémoire : introduction=== Plus haut, nous avions dit qu'il y a une adresse par case mémoire, chaque case mémoire contenant un ou plusieurs octets. Mais les processeurs modernes partent du principe que la mémoire a un octet par adresse, pas plus. Et ce même si la mémoire reliée au processeur utilise des cases mémoires de 2, 3, 4 octets ou plus. D'ailleurs, la majorité des mémoires RAM actuelle a des cases mémoires de 64 bits, soit 8 octets par case mémoire. Les raisons à cela sont multiple, mais nous les verrons en détail dans le chapitre sur l'alignement mémoire. Toujours est-il qu'il faut distinguer les '''adresses mémoire''' et les '''adresses d'octet''' gérées par le processeur. Le processeur génère des adresses d'octet, qui permettent de sélectionner un octet bien précis. L'adresse d'octet permet de sélectionner un octet parmi tous les autres. Mais la mémoire ne comprend pas directement cette adresse d'octet. Heureusement, l'octet en question est dans une case mémoire bien précise, qui a elle-même une adresse mémoire bien précise. L'adresse d'octet est alors convertie en une adresse mémoire, qui sélectionne la case mémoire adéquate, celle qui contient l'octet voulu. La case mémoire entière est lue, puis le processeur ne récupère que les données adéquates. Pour cela, des circuits d'alignement mémoire se chargent de faire la conversion entre adresses du processeur et adresse mémoire. Nous verrons cela dans le détail dans le chapitre sur l'alignement mémoire. Il existe des mémoires qui n'utilisent pas d'adresses mémoire, mais passons : ce sera pour la suite du cours. ==Le processeur== Dans les ordinateurs, l'unité de traitement porte le nom de '''processeur''', ou encore de '''''Central Processing Unit''''', abrévié en CPU. Le rôle principal du processeur est de faire des calculs. La plupart des processeurs actuels supportent au minimum l'addition, la soustraction et la multiplication. Quelques processeurs ne gèrent pas la division, qui est une opération très gourmande en circuit, peu utilisée, très lente. Il arrive que des processeurs très peu performants ne gèrent pas la multiplication, mais c'est assez rare. Un processeur ne fait pas que des calculs. Tout processeur est conçu pour effectuer un nombre limité d'opérations bien précises, comme des calculs, des échanges de données avec la mémoire, etc. Ces opérations sont appelées des '''instructions'''. Les plus intuitives sont les '''instructions arithmétiques''', qui font des calculs, comme l'addition, la soustraction, la multiplication, la division. Mais il y a aussi des '''instructions d'accès mémoire''', qui échangent des données entre la mémoire RAM et le processeur. Les autres instructions ne sont pas très intuitives, aussi passons-les sous silence pour le moment, tout deviendra plus clair dans les chapitres sur le processeur. ===Le processeur exécute un programme, une suite d'instructions=== Tout processeur est conçu pour exécuter une suite d'instructions dans l'ordre demandé, cette suite s'appelant un '''programme'''. Ce que fait le processeur est défini par la suite d'instructions qu'il exécute, par le programme qu'on lui demande de faire. Les instructions sont exécutées dans un ordre bien précis, les unes après les autres. L'ordre en question est décidé par le programmeur. La totalité des logiciels présents sur un ordinateur sont des programmes comme les autres. Le programme à exécuter est stockée dans la mémoire de l'ordinateur. C'est ainsi que l'ordinateur est rendu programmable : modifier le contenu de la mémoire permet de changer le programme exécuté. Mine de rien, cette idée de stocker le programme en mémoire est ce qui a fait que l’informatique est ce qu'elle est aujourd’hui. C'est la définition même d'ordinateur : appareil programmable qui stocke son programme dans une mémoire modifiable. Une instruction est codée comme les données : sous la forme de suites de bits. Telle suite de bit indique qu'il faut faire une addition, telle autre demande de faire une soustraction, etc. Pour simplifier, nous allons supposer qu'il y a une instruction par adresse mémoire. Sur la grosse majorité des ordinateurs, les instructions sont placées les unes à la suite des autres dans l'ordre où elles doivent être exécutées. Un programme informatique n'est donc qu'une vulgaire suite d'instructions stockée quelque part dans la mémoire de l'ordinateur. {|class="wikitable" |+ Exemple de programme informatique |- ! Adresse ! Instruction |- ! 0 | Copier le contenu de l'adresse 0F05 dans le registre numéro 5 |- ! 1 | Charger le contenu de l'adresse 0555 dans le registre numéro 4 |- ! 2 | Additionner ces deux nombres |- ! 3 | Charger le contenu de l'adresse 0555 |- ! 4 | Faire en XOR avec le résultat antérieur |- ! ... | ... |- ! 5464 | Instruction d'arrêt |} Pour exécuter une suite d'instructions dans le bon ordre, le processeur détermine à chaque cycle quelle est la prochaine instruction à exécuter. Pour cela, le processeur mémorise l'adresse de l'instruction en cours dans un registre : le '''Program Counter'''. Je rappelle que des instructions consécutives sont dans des adresses consécutives. Pour passer à la prochaine instruction, il suffit donc d'incrémenter le ''program counter''. : Si une instruction prend plusieurs octets, plusieurs adresses, il suffit de l'incrémenter du nombre d'octets/adresses. D'autres processeurs font autrement : chaque instruction précise l'adresse de la suivante, directement dans la suite de bit représentant l'instruction en mémoire. Ces processeurs n'ont pas besoin de calculer une adresse qui leur est fournie sur un plateau d'argent. Sur des processeurs aussi bizarres, pas besoin de stocker les instructions en mémoire dans l'ordre dans lesquelles elles sont censées être exécutées. Mais ces processeurs sont très très rares et peuvent être considérés comme des exceptions à la règle. Nous venons de voir qu'un processeur contient un registre appelé le ''program counter''. Mais il n'est pas le seul. Pour pouvoir fonctionner, tout processeur doit mémoriser un certain nombre d’informations nécessaires à son fonctionnement, qui sont mémorisées dans des '''registres de contrôle'''. La plupart ont des noms assez barbares (registre d'état, ''program counter'') et nous ne pouvons pas en parler à ce moment du cours. Nous les verrons en temps voulu, mais il est important de préciser qu'ils existent. ===L'intérieur d'un processeur=== Fort de ce que nous savons, nous pouvons expliquer ce qu'il y a à l'intérieur d'un processeur. Le premier point est qu'un processeur fait des calculs, ce qui implique qu'il contient des circuits de calcul. Ils sont regroupés dans une ou plusieurs '''unités de calcul'''. Nous avons déjà vu comment fabriquer une unité de calcul simple, dans un chapitre dédié, et c'est la même qui est présente dans un processeur. Du moins dans les grandes lignes, les circuits des processeurs modernes étant particulièrement optimisés. Il en est de même pour les autres circuits de calcul comme ceux pour les multiplications/division/autres. Si le processeur fait des calculs, qu'en est-il des opérandes ? Et où sont mémorisés les résultats des opérations ? Pour cela, le processeur incorpore des '''registres généraux'''. Les registres généraux servent à mémoriser les opérandes et résultats des instructions. Ils mémorisent des données, contrairement aux registres de contrôle mentionnés plus haut. Le nombre de registres généraux dépend grandement du processeur. Les tout premiers processeurs se débrouillaient avec un seul registre, mais les processeurs actuels utilisent plusieurs registres, pour mémoriser plusieurs opérandes/résultats. Mais la présence de registres est source de pas mal de petites complications. Par exemple, il faut échanger les données entre la RAM et les registres, il faut gérer l'adressage des registres, etc. Il s'agit là de détails que nous expliquerons dans les chapitres sur le processeur. Le processeur contient enfin un circuit pour interpréter les instructions, appelé l''''unité de contrôle'''. Elle lit les instructions depuis la mémoire, interprète la suite de bit associée, et commande le reste du processeur pour qu'il exécute l'instruction. Ses fonctions sont assez variées, mais nous allons simplifier en disant qu'elle configure l'unité de calcul et les registres pour faire le bon calcul. Son rôle est d'analyser la suite de bit qui constitue l'instruction, et d'en déduire quelle opération effectuer. Elle gère aussi l'accès à la mémoire RAM, et notamment ce qui est envoyé sur son bus d'adresse. : Dans ce qui suit, on suppose que le ''program counter'' fait partie de l'unité de contrôle. Pour résumer, un processeur contient une unité de calcul, des registres et une interface avec la mémoire RAM. Le tout est interconnecté, afin de pouvoir échanger des données. L’ensemble forme le '''chemin de données''', nom qui trahit le fait que c'est là que les données se déplacent et sont traitées. Il faut aussi ajouter l'unité de contrôle pour commander le tout. Elle lit les instructions en mémoire, puis commande le chemin de données pour que l'instruction soit exécutée correctement. [[File:Microarchitecture d'un processeur.png|centre|vignette|upright=2|Microarchitecture d'un processeur]] Un processeur parait donc assez simple expliqué comme ça, mais il y a de nombreuses subtilités. L'une d'entre elle est liée aux registres, et notamment à la manière dont on les utilise. Pour expliquer ces subtilités, nous allons voir comment les premiers processeurs fonctionnaient, avant de passer aux processeurs un peu plus modernes. Les tout premiers processeurs n'utilisaient qu'un seul registre, ce qui fait que l'utilisation des registres était très simple. Le passage à plusieurs registres a complexifié le tout. ===D'où viennent les adresses ?=== Il est maintenant temps de répondre à une question qui s'était posée dans la section sur l'adressage : d'où viennent les adresses envoyées à la mémoire ? Pour ce qui est des adresses des instructions, on connait déjà la réponse : c'est le ''program counter'' qui gère tout. Mais pour les données, il y a deux possibilités, qui correspondent à deux types de données : les données statiques et les données dynamiques. Les '''données statiques''' sont les plus simples : elles existent durant toute la durée de vie du programme. Tant que celui-ci s'exécute, il aura besoin de ces données. En conséquence, il leur réserve une place en mémoire, qui est toujours la même. La donnée se situe donc à une adresse bien précise, qui ne change jamais. Attention cependant : les données peuvent être modifiées, changer de valeur. Le programme écrit dans les donnée statiques, c'est même assez fréquent. Ce sont ne sont pas forcément des données constantes ! Pour les données statiques, elles sont toujours placées à la même adresse mémoire. Pour le dire autrement, l'adresse mémoire est une constante, qui ne change pas. L'adresse est connue avant d’exécuter le programme, le programme a été codé pour utiliser cette adresse pour telle donnée, on a réservé une adresse pour la donnée voulue. Et même si vous quittez le programme et vous le relancez plusieurs jours après, l'adresse mémoire sera la même avant et après. Et cela permet d'utiliser l''''adressage direct'''. L'idée est que les instructions précisent donc l'adresse à lire ou écrire. Pour cela, l'adresse est intégrée dans l’instruction elle-même. Pour rappel, l'instruction est codée par une suite de bit en mémoire RAM/ROM, dont certains précisent l'opération à faire, les autres servant à autre chose. L'idée est que certains bits précisent l'adresse mémoire de la donnée à lire. Les instructions sont donc du genre : * ''LOAD 56'' - lit l'adresse numéro 56 et copie son contenu dans un registre; * ''STORE R5 , adress 99'', copie le registre R5 dans l'adresse 99 ; * ''ADD R5 , adress 209'' : additionne le registre R5 avec le contenu de l'adresse 209. S'il existe des données statiques, c'est signe qu'il existe des '''données dynamiques'''. Ces dernières sont des données qui sont créées ou détruites selon les besoins. Pour comprendre d'où viennent ces données dynamiques, prenons le cas d'une personne qui écrit du texte sur un ordinateur. Le texte qu'il écrit est mémorisé dans la RAM de l’ordinateur, puis est sauvegardé sur le disque dur quand il sauvegarde son document. Au fur et à mesure qu'il écrit du texte, la RAM utilisée par ce texte augmente. Donc, ce texte est une donnée dynamique, dont la taille varie dans le temps. Pour gérer des données dynamiques, la plupart des systèmes d'exploitation incorporent des fonctionnalités d''''allocation mémoire'''. Derrière ce nom barbare, se cache quelque chose de simple : les programmes peuvent réclamer de la mémoire au système d'exploitation, pour y placer les données qu'ils souhaitent. Les langages de programmation bas niveau supportent des fonctions comme malloc(), qui permettent de demander un bloc de mémoire de N octets à l'OS, qui doit alors accommoder la demande. De même, un programme peut libérer de la mémoire qu'il n'utilise plus avec des fonctions comme free(). Avec l'allocation mémoire, les données n'ont pas de place fixe en mémoire. Leur adresse mémoire peut varier d'une exécution du programme à l'autre. Pire que ça : les données peuvent être déplacées dans la mémoire RAM, si besoin. En clair : l'adresse est déterminée lors de l'exécution du programme. L'adresse est alors soit calculée, soit lue depuis la mémoire RAM, soit déterminée autrement. Toujours est-il qu'elle se retrouve dans un registre général. Pour gérer ces adresse variables, les processeurs utilisent l''''adressage indirect'''. L'adressage indirect permet d'utiliser une adresse qui est dans un registre de données. L'adresse en question peut être envoyée à la mémoire RAM sans problème, le processeur peut automatiquement connecter le registre adéquat sur le bus d'adresse. Au tout début de l'informatique, les processeurs ne supportaient que l'adressage direct, pas plus. L'adressage indirect n'était tout simplement pas possible. Avec l'adressage direct, l'adresse à lire est extraite directement des instructions, par l'unité de contrôle. Le bus d'adresse de la RAM est alors relié directement à l'unité de contrôle, le bus de données est relié aux registres. [[File:Architecture Harvard avec adressage direct uniquement.png|centre|vignette|upright=2|Architecture Harvard avec adressage direct uniquement]] Mais dès les années 70, l'adressage indirect est apparu, rendant la programmation bien plus simple. Mais cela a demandé quelques adaptation au niveau du processeur. Avec l'adressage indirect, le bus d'adresse est connecté aux registres. Il a donc fallu rajouter un multiplexeur pour que le processeur décide de relier le bus d'adresse soit aux registres, soit à l'unité de contrôle. ===Un ordinateur peut avoir plusieurs processeurs=== La plupart des ordinateurs n'ont qu'un seul processeur, ce qui fait qu'on désigne avec le terme d''''ordinateurs mono-processeur'''. Mais il a existé (et existe encore) des '''ordinateurs multi-processeurs''', avec plusieurs processeurs sur la même carte mère. L'idée était de gagner en performance : deux processeurs permettent de faire deux fois plus de calcul qu'un seul, quatre permettent d'en faire quatre fois plus, etc. C'est très courant sur les supercalculateurs, des ordinateurs très puissants conçus pour du calcul industriel ou scientifique, mais aussi sur les serveurs ! Dans le cas le plus courant, ils utilisent plusieurs processeurs identiques : on utilise deux processeurs Core i3 de même modèle, ou quatre Pentium 3, etc. Pour utiliser plusieurs processeurs, les programmes doivent être adaptés. Pour cela, il y a plusieurs possibilités : * Une première possibilité, assez intuitive, est d’exécuter des programmes différents sur des processeurs différents. Par exemple, on exécute le navigateur web sur un processeur, le lecteur vidéo sur un autre, etc. * La seconde option est de créer des programmes spéciaux, qui utilisent plusieurs processeurs. Ils répartissent les calculs à faire sur les différents processeurs. Un exemple est la lecture d'une vidéo sur le web : un processeur peut télécharger la vidéo pendant le visionnage et bufferiser celle-ci, un autre processeur peut décoder la vidéo, un autre décoder l'audio. De tels programmes restent des suites d'instructions, mais ils sont plus complexes que les programmes normaux, aussi nous les passons sous silence. * La troisième option est d’exécuter le même programme sur les différents processeurs, mais chaque processeur traite son propre ensemble de données. Par exemple, pour un programme de rendu 3D, quatre processeurs peuvent s'occuper chacun d'une portion de l'image. [[File:Architecture de Von Neumann Princeton multi processeurs.svg|centre|vignette|upright=2|Architecture de Von Neumann Princeton multi processeurs]] De nos jours, les ordinateurs grand public les plus utilisés sont dans un cas intermédiaire, ils ne sont ni mono-, ni multi-processeur. Ils n'ont qu'un seul processeur, dans le sens où si on ouvre l'ordinateur et qu'on regarde la carte mère, il n'y a qu'un seul processeur. Mais ce processeur est en réalité assez similaire à un regroupement de plusieurs processeurs dans le même boitier. Il s'agit de '''processeurs multicœurs''', qui contiennent plusieurs cœurs, chaque cœur pouvant exécuter un programme tout seul. La différence entre cœur et processeur est assez difficile à saisir, mais pour simplifier : un cœur est l'ensemble des circuits nécessaires pour exécuter un programme. Chaque cœur dispose de toute la machinerie électronique pour exécuter un programme, à savoir des circuits aux noms barbares comme : un séquenceur d'instruction, des registres, une unité de calcul. Par contre, certains circuits d'un processeur ne sont présents qu'en un seul exemplaire dans un processeur multicœur, comme les circuits de communication avec la mémoire ou les circuits d’interfaçage avec la carte mère. Suivant le nombre de cœurs présents dans notre processeur, celui-ci sera appelé un processeur double-cœur (deux cœurs), quadruple-cœur (4 cœurs), octuple-cœur (8 cœurs), etc. Un processeur double-cœur est équivalent à avoir deux processeurs dans l'ordinateur, un processeur quadruple-cœur est équivalent à avoir quatre processeurs dans l'ordinateur, etc. Ces processeurs sont devenus la norme dans les ordinateurs grand public et les logiciels et systèmes d'exploitation se sont adaptés. ===Les coprocesseurs=== Quelques ordinateurs assez anciens disposaient de '''coprocesseurs''', des processeurs qui complémentaient un processeur principal. Les ordinateurs de ce type avaient un processeur principal, le '''CPU''', qui était secondé par un ou plusieurs coprocesseurs. Sauf exception, le CPU et le coprocesseur exécutent des programmes différents, ils travaillent en parallèle. Les coprocesseurs les plus connus sont les '''coprocesseurs pour le rendu 2D/3D'''. Ils ont eu leur heure de gloire sur les anciennes consoles de jeux vidéo, comme Super Nintendo, la Playstation et autres consoles de cette génération ou antérieure. Ils s'occupaient respectivement de calculer les graphismes des jeux vidéos. De nos jours, ils ont été remplacés par des cartes graphiques, ou des ''Graphic Processing Units'', qui ne sont pas considérées comme des coprocesseurs. Les '''coprocesseurs sonores''' sont une sorte d'ancêtre des cartes son, utilisés sur les anciennes consoles de jeux vidéo, comme La Nintendo 64, la Playstation et autres consoles antérieures. Ils s'occupaient respectivement de calculer tout ce qui a trait au son. Pour donner un exemple, on peut citer la console Neo-géo, qui disposait de deux processeurs travaillant en parallèle : un processeur principal, et un coprocesseur sonore. Le processeur principal était un Motorola 68000, alors que le coprocesseur sonore était un processeur Z80. L'accès aux périphériques est quelque chose sur lequel nous passerons plusieurs chapitres dans ce cours. Mais sachez que l'accès aux périphériques peut demander pas mal de puissance de calculs. Le CPU principal peut faire ce genre de calculs par lui-même, mais il n'est pas rare qu'un '''coprocesseur d'IO''' soit dédié à l'accès aux périphériques. Un exemple assez récent est celui de la console de jeu Nintendo 3DS. Elle disposait d'un processeur principal de type ARM9, d'un coprocesseur pour les divisions qu'on abordera plus bas, et d'un second processeur ARM7. L'ARM 7 était utilisé comme coprocesseur d'I/O, ainsi que pour l'émulation de la console GBA. [[File:Asmp 2.gif|centre|vignette|upright=2|Co-processeur pour l'accès aux entrées-sorties.]] Les '''coprocesseurs arithmétiques''' sont un peu à part des autres. Ils sont spécialisés dans les calculs en virgule flottante. Ils étaient utilisés à une époque où les CPU ne géraient que des calculs entiers (en binaire ou en BCD). Un exemple est le coprocesseur flottant x87, complémentaire des premiers processeurs Intel x86. Il y a eu la même chose sur les processeurs Motorola 68000, avec deux coprocesseurs flottants appelés les Motorola 68881 et les Motorola 68882. Un exemple récent de coprocesseur est celui utilisé sur la console de jeu Nintendo DS. La console utilisait deux processeurs, un ARM9 et un ARM7, qui ne pouvaient pas faire de division entière. Il s'agit pourtant d'opérations importantes dans le cas du rendu 3D, ce qui fait que les concepteurs de la console ont rajouté un coprocesseur spécialisé dans les divisions entières et les racines carrées. Le coprocesseur était adressable directement par le processeur, comme peuvent l'être la RAM ou les périphériques. ==Les entrées-sorties== Tous les circuits vus précédemment traitent des données codées en binaire. Ceci dit, les données ne sortent pas de n'importe où : l'ordinateur contient des composants électroniques qui traduisent des informations venant de l’extérieur en nombres. Ces composants sont ce qu'on appelle des '''entrées'''. Par exemple, le clavier est une entrée : l'électronique du clavier attribue un nombre entier (''scancode'') à une touche, nombre qui sera communiqué à l’ordinateur lors de l'appui d'une touche. Pareil pour la souris : quand vous bougez la souris, celle-ci envoie des informations sur la position ou le mouvement du curseur, informations qui sont codées sous la forme de nombres. La carte son évoquée il y a quelques chapitres est bien sûr une entrée : elle est capable d'enregistrer un son, et de le restituer sous la forme de nombres. S’il y a des entrées, on trouve aussi des '''sorties''', des composants électroniques qui transforment des nombres présents dans l'ordinateur en quelque chose d'utile. Ces sorties effectuent la traduction inverse de celle faite par les entrées : si les entrées convertissent une information en nombre, les sorties font l'inverse : là où les entrées encodent, les sorties décodent. Par exemple, un écran LCD est un circuit de sortie : il reçoit des informations, et les transforme en image affichée à l'écran. Même chose pour une imprimante : elle reçoit des documents texte encodés sous forme de nombres, et permet de les imprimer sur du papier. Et la carte son est aussi une sortie, vu qu'elle transforme les sons d'un fichier audio en tensions destinées à un haut-parleur : c'est à la fois une entrée, et une sortie. Les '''entrées-sorties''' incluent toutes les entrées et sorties, et même certains composants qui sont les deux à la fois. Il s'agit d'un terme générique, qui regroupe des composants forts différents. Dans ce qui va suivre, nous allons parfois parler de périphériques au lieu d'entrées-sorties, mais les deux termes ne sont pas équivalents. Dans le détail, les entrées-sorties regroupent : * Les '''périphériques''' sont les composants connectés sur l'unité centrale. Exemple : les claviers, souris, webcam, imprimantes, écrans, clés USB, disques durs externes, la Box internet, etc. * Les '''cartes d'extension''', qui se connectent sur la carte mère via un connecteur, comme les cartes son ou les cartes graphiques. * D'autres composants sont soudés à la carte mère mais sont techniquement des entrées-sorties : les cartes sons soudées sur les cartes mères actuelles, par exemple. ===L'interface avec le reste de l'ordinateur=== Les entrées-sorties sont très diverses, fonctionnent très différemment les unes des autres. Mais du point de vue du reste de l'ordinateur, les choses sont relativement standardisées. Du point de vue du processeur, les entrées-sorties sont juste des paquets de registres ! Tous les périphériques, toutes les entrées-sorties contiennent des '''registres d’interfaçage''', qui permettent de faire l'intermédiaire entre l'entrée/sortie et le reste de l'ordinateur. L'entrée/sortie est conçu pour réagir automatiquement quand on écrit dans ces registres. [[File:Registres d'interfaçage.png|centre|vignette|upright=2|Registres d'interfaçage.]] Les registres d’interfaçage sont assez variés. Les plus évidents sont les '''registres de données''', qui permettent l'échange de données entre le processeur et les périphériques. Pour échanger des données avec l'entrée/sortie, le processeur a juste à lire ou écrire dans ces registres de données. On trouve généralement un registre de lecture et un registre d'écriture, mais il se peut que les deux soient fusionnés en un seul registre d’interfaçage de données. Si le processeur veut envoyer une donnée à une entrée/sortie, il a juste à écrire dans ces registres. Inversement, s'il veut lire une donnée, il a juste à lire le registre adéquat. Mais le processeur ne fait pas que transmettre des données à l'entrée/sortie. Le processeur lui envoie aussi des « commandes », des valeurs numériques auxquelles l'entrée/sortie répond en effectuant un ensemble d'actions préprogrammées. En clair, ce sont l'équivalent des instructions du processeur, mais pour l'entrée/sortie. Par exemple, les commandes envoyées à une carte graphique peuvent être : affiche l'image présente à cette adresse mémoire, calcule le rendu 3D à partir des données présentes dans ta mémoire, etc. Pour recevoir les commandes, l'entrée/sortie contient des ''registres de commande'' qui mémorisent les commandes envoyées par le processeur. Quand le processeur veut envoyer une commande à l'entrée/sortie, il écrit la commande en question dans ce ou ces registres. Enfin, beaucoup d'entrée/sortie ont un ''registre d'état'', lisible par le processeur, qui contient des informations sur l'état de l'entrée/sortie. Ils servent notamment à indiquer au processeur que l'entrée/sortie est disponible, qu'il est en train d’exécuter une commande, qu'il est occupé, qu'il y a un problème, qu'il y a une erreur de configuration, etc. ===Les adresses des registres d’interfaçage=== Les registres des périphériques sont identifiés par des adresses mémoires. Et les adresses sont conçues de façon à ce que les adresses des différentes entrées/sorties ne se marchent pas sur les pieds. Chaque entrée/sortie, chaque registre, chaque contrôleur a sa propre adresse. D'ordinaire, certains bits de l'adresse indiquent quel est le destinataire. Certains indiquent quel est l'entrée/sortie voulue, les restants indiquant le registre de destination. Il existe deux organisations possibles pour les adresses des registres d’interfaçages. La première possibilité est de séparer les adresses pour les registres d’interfaçage et les adresses pour la mémoire. Le processeur doit avoir des instructions séparées pour gérer les périphériques et adresser la mémoire. Il a des instructions de lecture/écriture pour lire/écrire en mémoire, et d'autres pour lire/écrire les registres d’interfaçage. Sans cela, le processeur ne saurait pas si une adresse est destinée à un périphérique ou à la mémoire. [[File:Espaces d'adressages séparés entre mémoire et périphérique.png|centre|vignette|upright=2.5|Espaces d'adressages séparés entre mémoire et périphérique]] L'autre méthode mélange les adresses mémoire et des entrées-sorties. Si on prend par exemple un processeur de 16 bits, où les adresses font 16 bits, alors les 65536 adresses possibles seront découpées en deux portions : une partie ira adresser la RAM/ROM, l'autre les périphériques. On parle alors d''''entrées-sorties mappées en mémoire'''. L'avantage est que le processeur n'a pas besoin d'avoir des instructions séparées pour les deux. [[File:IO mappées en mémoire.png|centre|vignette|upright=2.0|IO mappées en mémoire]] Pour résumer, communiquer avec une entrée/sortie est similaire à ce qu'on a avec les mémoires. Il suffit de lire ou écrire dans des registres d’interfaçage, qui ont chacun une adresse mémoire. Le problème est que le système d'exploitation ne connaît pas toujours le fonctionnement d'une entrée/sortie : il faut installer un programme qui va s'exécuter quand on souhaite communiquer avec l'entrée/sortie, et qui s'occupera de tout ce qui est nécessaire pour le transfert des données, l'adressage du périphérique, etc. Ce petit programme est appelé un driver ou '''pilote de périphérique'''. La « programmation » périphérique est très simple : il suffit de savoir quoi mettre dans les registres, et c'est le pilote qui s'en charge. ==Les architectures Harvard et Von Neumann== Après avoir vu le processeur, les mémoires et les entrées-sorties, voyons voir comment le tout est interconnecté. Tous les ordinateurs ne sont pas organisés de la même manière, pour ce qui est de leurs bus. Mais pour comprendre pourquoi, nous devons regarder qui communique avec qui, dans un ordinateur. Pour rappel, les données sont placées en mémoire RAM, alors que les instructions sont placées en mémoire ROM. Le processeur lit des instructions dans la mémoire ROM, il lit et écrit dans la mémoire RAM, et accède aux registres d’interfaçage des entrées-sorties. Il y a donc besoins de trois interconnexions : CPU-ROM, CPU-RAM et CPU-IO. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] Il parait intéressant d'utiliser trois interconnexions, au minimum CPU-ROM, CPU-RAM et CPU-IO. Néanmoins, faire ainsi a de nombreux désavantages. Déjà, il faut pouvoir brancher tout ça sur le processeur. Et celui-ci n'a pas forcément assez de broches pour. Aussi, il est parfois préférable de mutualiser des bus, à savoir de connecter plusieurs composants sur un même bus. Par exemple, on peut mutualiser le bus pour la mémoire RAM et pour la mémoire ROM. Il faut dire que les deux bus sont des bus mémoire, avec un bus d'adresse, un bus de données, et surtout : des bus de commande similaires. Les mutualiser est alors très simple, et permet d'économiser pas mal de broches. [[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre et une architecture Harvard]] Cette mutualisation nous amène naturellement à parler de la distinction entre les architectures Harvard d'un côté et les architectures Von Neumann de l'autre. Elle est très liée au fait d'utiliser soit un bus mémoire unique, soit des bus séparés pour la ROM et la RAM. Voyons cela en détail. ===Les architectures Harvard et Von Neumann : des bus séparés ou unifiés=== Avec l''''architecture Harvard''', la mémoire ROM et la mémoire RAM sont reliées au processeur par deux bus séparés. Il y a un bus RAM pour la mémoire RAM, un bus ROM pour la mémoire ROM. L'avantage de cette architecture est qu'elle permet de charger une instruction et une donnée simultanément : une instruction chargée sur le bus relié à la mémoire programme, et une donnée chargée sur le bus relié à la mémoire de données. Et cela simplifie fortement la conception du processeur. [[File:Harvard Architecture.png|centre|vignette|upright=2|Architecture Harvard, avec une ROM et une RAM séparées.]] Avec l''''architecture Von Neumann''', mémoire ROM et mémoire RAM sont reliées au processeur par un bus unique. Le bus unique qui relie processeur, RAM et ROM, s'appelle le '''bus mémoire'''. Un défaut de ces architecture est qu'elles ne peuvent pas charger une instruction et une donnée en même temps. Et cela pose quelques problèmes pour la conception du processeur. Par contre, nous verrons dans ce qui suit qu'utiliser un bus mémoire partagé est bien plus flexible et permet des choses que les architectures Harvard ne peuvent pas faire. [[File:Architecture Von Neumann, avec deux bus séparés.png|centre|vignette|upright=2|Architecture Von Neumann, avec deux bus séparés.]] ===Les architectures Harvard et Von Neumann : des espaces d'adressage séparés ou unifiés=== La distinction précédente se base sur les connexions entre RAM, ROM et processeur. Mais il existe une autre distinction, très liée, qui est souvent utilisée comme seconde définition des architectures Harvard/Von Neumann. Elle est liée aux adresses mémoire que le processeur peut gérer. Prenons un processeur 16 bits, par exemple, qui gère naturellement des adresses de 16 bits. Il peut gérer 2^16 adresses, soit 64 kibioctets de mémoire. L'ensemble de ces adresses est appelé un '''espace d'adressage'''. Mais comment cet espace d'adressage est utilisé pour adresser une RAM et une ROM ? Sur les architectures Harvard, le processeur voit deux mémoires séparées avec leur lot d'adresses distinctes. Une même adresse peut donc correspondre soit à la mémoire ROM, soit à la mémoire RAM, suivant le bus utilisé. L'espace d'adressage est donc doublé, dupliqué, avec un pour la ROM, un autre pour la RAM. Rien d'étonnant à cela : il y a deux bus d'adresses, chacun correspondant à un espace d'adressage. [[File:Vision de la mémoire par un processeur sur une architecture Harvard.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Harvard.]] Avec l'architecture Von Neumann, la RAM et la ROM doivent se partager les adresses mémoires disponibles. Il n'y a qu'un seul espace d'adressage qui est coupé en deux, avec une partie pour la ROM et une autre pour la RAM. Une adresse correspond soit à la mémoire RAM, soit à la mémoire ROM, mais pas aux deux. Typiquement, la mémoire ROM occupe une partie des adresses, la mémoire RAM utilise le reste. La répartition des adresses est réalisée par les circuits de décodage d'adresse mentionnés plus haut. [[File:Vision de la mémoire par un processeur sur une architecture Von Neumann.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Von Neumann.]] Les '''architectures Harvard modifiées''' sont des intermédiaires entre architectures Harvard et architectures Von Neumann, bien qu'elles penchent bien plus du côté des architectures Harvard. Précisons que la terminologie n'est pas claire, beaucoup d'auteurs mettent des définitions différentes derrière ces deux termes. Mais dans ce cours, nous utiliserons une définition très stricte de ce qu'est une architecture Harvard modifiée. Une architecture Harvard modifiée est une architecture Harvard, où le processeur peut lire des données constantes depuis la mémoire ROM. Nous avions vu plus haut que les mémoires ROM peuvent mémoriser, en plus d'un programme exécutable, des données constantes, qui ne varient pas. Les architectures Harvard pures ne permettent pas de lire des données de ce genre depuis la mémoire ROM, alors que les architectures Harvard modifiées le permettent. Une architecture Harvard modifiée dispose d'une instruction pour lire les données en mémoire RWM, et d'une instruction pour lire des données en mémoire ROM. Il y a donc deux versions de l'instruction LOAD, qui copient la donnée dans un registre général, mais dont la source de la donnée est différente. Une autre possibilité, plus rare, est que une instruction de copie, qui copie une constante depuis la mémoire ROM vers la mémoire RAM. Le cas le plus commun est l'utilisation de deux instructions LOAD séparées. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Ceci étant dit, revenons à la distinction entre architecture Harvard et Von Neumann. Il faut noter que la RAM et la ROM n'ont pas forcément la même taille. Et ce que ce soit sur une architecture Harvard que sur une architecture Von Neumann, mais c'est plus facile à expliquer sur une architecture Harvard. On peut par exemple imaginer une architecture Harvard qui utilise des adresses de 16 bits pour la ROM, et seulement 8 bits pour la RAM. Le résultat est qu'il peut adresser 64 kibioctets de ROM, mais seulement 256 octets de RAM. Les deux bus d'adresse sont alors de taille différente, l'un faisant 8 bits, l'autre 16. Quelques processeurs 8 bits étaient dans ce cas, comme on le verra dans le chapitre sur les CPU 8bits. Mais d'autres processeurs utilisent des valeurs différentes, avec par exemple des adresses de 16 bits pour la RAM, mais de 20 bits pour la ROM, ou inversement. Sur une architecture Von Neumann, tout dépend de comment les adresses sont réparties. La solution la plus simple découpe l'espace d'adressage en deux parties égales, avec la RAM qui est dans la moitié basse (qui part de l'adresse 0 jusqu'à l'adresse au milieu), alors que la ROM est dans la moitié haute (entre l'adresse du milieu et l'adresse maximale). Mais ce n'est pas la seule possibilité, la limite entre RAM et ROM peut être mise n'importe où. Prenons par exemple un processeur 32 bits, capable de gérer 4 milliards d'adresse. Il est parfaitement possible de réserver 128 mébioctets de poids fort à la mémoire ROM, et de laisser le reste à la mémoire RAM. ===Le décodage d'adresse sur les architectures Von Neumann=== Pour résumer, les architectures Harvard et Von Neumann se distinguent sur deux points : * L'accès à la RAM et à la ROM se font par des bus séparés sur l'architecture Harvard, sur le même bus avec l'architecture Von Neumann. * Les adresses pour la mémoire ROM et la mémoire RAM sont séparées sur les architectures Harvard, partagées sur l’architecture Von Neumann. Les architectures Von Neumann utilisent donc un seul bus pour connecter la RAM et la ROM au processeur. Mais cela ne parait pas intuitif : comment deux composants peuvent se connecter aux mêmes fils ? Parce que c'est ce qu'implique le fait de partager un bus. Si je prends une mémoire RAM et une mémoire ROM, toutes deux de 8 bits, elles seront connectées à un bus mémoire de 8 bits. Intuitivement, on se dit qu'il y aura des conflits, du genre : la RAM et la ROM vont accéder au bus en même temps, comment savoir si une adresse est destinée à la RAM ou la ROM, etc ? Tous ces problèmes sont résolus avec une solution très simple : à chaque instant, seule une mémoire est connectée au bus. L'idée est que les mémoires sont connectées ou déconnectées du bus selon les besoins. Si le processeur veut envoyer lire une donnée en mémoire RAM, il déconnecte la mémoire ROM du bus. Et inversement, s'il veut lire une instruction, il déconnecte la RAM et connecte la ROM. Pour cela, les mémoires RAM et ROM possèdent une entrée ''Chip Select'' ou ''Output Enable'', qui agit comme une sorte de bouton ON/OFF. Lorsqu'on met un 1 sur cette entrée, la mémoire se connectera au bus. Ses entrées et sorties fonctionneront normalement, elle pourra recevoir des adresses, envoyer ou recevoir des données, tout sera normal. Par contre, si on met un 0 sur cette entrée, la mémoire se "désactive", ses entrée-sorties ne répondent plus aux sollicitations extérieures. Pire que ça : elles sont électriquement déconnectées. Au total, tout cela demande de gérer deux bit ''Chip Select''/''Output Enable'' : un pour la RAM, un pour la ROM. Et ces deux bits sont configurés pour chaque accès mémoire, pour chaque lecture ou écriture. Pour cela, un circuit de '''décodage d'adresse''' prend en entrée l'adresse mémoire à lire/écrire, et active/désactive les mémoires RAM/ROM selon les besoins. Il prend l'adresse et configure les bits ''Chip Select''/''Output Enable''. [[File:Décodage d'adresse sur une architecture Von Neumann.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann.]] L'implémentation la plus simple réserve la moitié des adresses pour la RAM, l'autre moitié pour la ROM. Typiquement, la ROM prend la moitié basse, la RAM la moitié haute. Dans ce cas, activer/désactiver la RAM et la ROM se fait avec seulement le bit de poids fort de l'adresse. Si le bit de poids fort est à 1, alors on accède à la RAM et la ROM doit être désactivée. Mais si ce bit est à 0, alors on accède à la moitié basse et il faut désactiver la RAM. Une remarque intéressante : le fait de séparer la mémoire en deux parts égales permet de simuler une architecture Harvard à partir d'une architecture Von Neumann. Par exemple, le tout premier processeur d'Intel, le 4004, était l'un de ceux là. La RAM et la ROM sont reliés au même bus, et il y a donc un unique espace d'adressage, qui est séparé en deux parties égales. Le truc est que le processeur traite les deux parties égales comme deux espaces d'adressage séparés. Le processeur se débrouille pour cacher le fait qu'il y a un espace d'adressage unique coupé en deux, ce qui fait que les programmeurs voient bien deux espaces d'adressages distincts. [[File:Décodage d'adresse sur une architecture Von Neumann basique.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann basique.]] Pour résumer, quand une adresse est envoyée sur le bus, les deux mémoires vont la recevoir mais une seule va répondre et se connecter au bus. Le décodage d'adresse garantit que seule la mémoire adéquate réponde à un accès mémoire. Le décodage d'adresse est réalisé par la carte mère, par un composant dédié. Le mécanisme peut être utilisé pour combiner plusieurs RAM en une seule, idem avec les ROM. Pour comprendre l'idée, je vais prendre l'exemple de l'IBM PC, un des tout premier PC existant. Nous étudierons ce PC dans une section dédiée, à la fin du chapitre, aussi je vais passer rapidement dessus. Tout ce que je vais faire est vous présenter la carte mère du PC, et vous demander de faire est de compter les mémoires ROM et mémoires RAM sur la carte mère : [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] Si vous remarquerez qu'il y a 5 mémoires ROM et 8 à 32 mémoires RAM. Le fait est que le processeur voit les différentes mémoires ROM comme une seule mémoire ROM. Idem avec les mémoires RAM : elle font chacune 2 kibioctets, et l'ensemble est vu par le processeur comme une seule RAM de 16 à 64 kibioctets. Et cela grâce aux circuits de décodage d'adresse, qui sont situés en haut à droite de la carte mère. Pour comprendre l'idée, prenons l'exemple d'un processeur 16 bits, capable de gérer 64 kibioctets de mémoire. L'espace d'adressage est découpé en quatre portions, de 16 kibioctets chacune. Une portion est réservée à une ROM de 16 kibioctet, les autres sont chacune réservée à une RAM de 16 kibioctet. Le décodage d'adresse sélectionne alors la mémoire adéquate en utilisant les deux bits de poids fort de l'adresse. * S'ils valent 00, alors c'est la mémoire ROM qui est activée, connectée au bus. * S'ils valent 01, alors c'est la première mémoire RAM qui est connectée au bus. * S'ils valent 10, alors c'est la seconde mémoire RAM qui est connectée au bus. * S'ils valent 11, alors c'est la troisième mémoire RAM qui est connectée au bus. [[File:Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM.png|centre|vignette|upright=3|Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM]] ===L'impact sur la conception du processeur=== Plus haut, j'ai parlé d'un des avantages des architectures Harvard : elles peuvent lire une instruction en même temps qu'elles accèdent à une donnée. La donnée est lue/écrite en RAM, alors que l'instruction est lue en ROM. Et cela permet de simplifier l'intérieur du processeur. Pas de beaucoup, mais c'est déjà ça de pris. Voyons maintenant comment cela impacte l'intérieur du processeur. Tout ce dont vous avez à vous rappeler est la séparation entre chemin de données et unité de contrôle, et que les registres généraux sont dans le premier, le ''program counter'' dans la seconde. Avec une architecture Harvard, les instructions et les données passent par des bus différent : bus ROM pour les instructions, bus RAM pour les données. L'intuition nous dit que le bus pour la mémoire ROM est connecté à l'unité de contrôle, alors que le bus pour la RAM est connecté au chemin de données. Et dans les grandes lignes, c'est vrai. La logique est imparable pour ce qui est des bus de données. Mais il y a une petite subtilité pour les bus d'adresse. Pour comprendre comment le processeur exploite ces deux bus, voyons ce qui transite dessus. Pour la mémoire ROM, elle reçoit l'adresse de l'instruction à lire, elle renvoie l'instruction adéquate. Pour cela, le ''program counter'' est envoyé sur le bus d'adresse, l'instruction sur le bus de données. Pour la mémoire RAM, elle échange des données avec les registres généraux, les registres pour les données. Les adresses utilisées pour la RAM viennent elles soit du chemin de données, soit de l'unité de contrôle, tout dépend du mode d'adressage. Mais le ''program counter'' n'est pas impliqué. [[File:Architecture Harvard - échanges de données.png|centre|vignette|upright=2|Architecture Harvard - échanges de données]] Les architectures Harvard modifiées doivent cependant rajouter une connexion entre le bus ROM et les registres généraux. C'est nécessaire pour charger une donnée constante depuis la mémoire ROM. Rappelons que la donnée constante est copiée dans un registre général, donc dans le chemin de données. [[File:Architecture Harvard modifiée - implémentation du processeur.png|centre|vignette|upright=2|Architecture Harvard modifiée - implémentation du processeur]] Avec les architectures Von Neumann, il y a un seul bus qui est relié à la fois au chemin de données et à l'unité de contrôle. Si le processeur lit une instruction, le bus doit être relié à l'unité de contrôle. Par contre, s'il accède à une donnée, il doit être relié au chemin de données (le bus d'adresse peut éventuellement être connecté au séquenceur, si celui-ci fournit l'adresse à lire). Il faut donc utiliser un paquet de multiplexeurs et de démultiplexeurs pour faire la connexion au bon endroit. [[File:Architecture Von Neumann - implémentation du processeur.png|centre|vignette|upright=2|Architecture Von Neumann - implémentation du processeur]] Une instruction se fait en deux temps : on charge l'instruction depuis la mémoire ROM, puis on l'exécute. Avec une architecture Harvard, tout cela se fait en un seul cycle d'horloge, vu que charger la ROM et accéder aux données peut se faire en même temps. Pas avec les architectures Von Neumann, qui doivent libérer le bus mémoire après avoir chargé une instruction. Elles n'ont pas le choix : elles chargent l'instruction lors d'un premier cycle d'horloge, puis l'exécutent lors du second. Pour cela, ils incorporent un registre appelé le '''registre d'instruction''', qui mémorise l'instruction chargée. L'instruction est copiée dans ce registre lors du premier cycle, puis est utilisée lors du second cycle. Le registre permet de ne pas oublier l’instruction entre les deux cycles. Le registre d'instruction est obligatoire sur les architectures Von Neumann. En comparaison, il est facultatif sur les architectures Harvard. Elles peuvent en avoir un, pour des raisons techniques, mais ce n'est pas obligatoire. [[File:Registre d'instruction.png|centre|vignette|upright=2|Registre d'instruction.]] ===Les architectures Von Neumann sont plus flexibles=== Sur les architectures Harvard, le processeur sait faire la distinction entre programme et données. Les données sont stockées dans la mémoire RAM, le programme est stocké dans la mémoire ROM. Les deux sont séparés, accédés par le processeur sur des bus séparés, et c'est ce qui permet de faire la différence entre les deux. Il est impossible que le processeur exécute des données ou modifie le programme. Du moins, tant que la mémoire qui stocke le programme est bien une ROM. Par contre, sur les architectures Von Neumann, il est impossible de distinguer programme et données, sauf en ajoutant des techniques de protection mémoire avancées. La raison est qu'il est impossible de faire la différence entre donnée et instruction, vu que rien ne ressemble plus à une suite de bits qu'une autre suite de bits. Et c'est à l'origine d'un des avantages majeur de l'architecture Von Neumann : il est possible que des programmes soient copiés dans la mémoire RWM et exécutés dans celle-ci. Un cas d'utilisation familier est celui de votre ordinateur personnel. Le système d'exploitation et les autres logiciels sont copiés en mémoire RAM à chaque fois que vous les lancez. Mais cet exemple implique un disque dur, ce qui rend les choses plus compliquées que prévu. Un autre exemple serait la compilation de code à la volée, mais il ne sera pas très parlant. Un exemple plus adapté serait celui où la ROM mémorise un programme compressée dans la mémoire ROM, qui est décompressé pour être exécuté en mémoire RAM. Le programme de décompression est stocké en mémoire ROM et est exécuté au lancement de l’ordinateur. Cette méthode permet d'utiliser une mémoire ROM très petite et très lente, tout en ayant un programme rapide (si la mémoire RWM est rapide). Il est aussi possible de créer des programmes qui modifient leurs propres instructions : cela s'appelle du '''code auto-modifiant'''. Ce genre de choses servait autrefois sur des ordinateurs rudimentaires, au tout début de l'informatique. À l'époque, les adresses à lire/écrire devaient être écrites en dur dans le programme, dans les instructions exécutées. Pour gérer certaines fonctionnalités des langages de programmation qui ont besoin d'adresses modifiables, comme les tableaux, on devait corriger les adresses au besoin avec du code auto-modifiant. De nos jours, le code automodifiant est utilisée occasionnellement pour rendre un programme indétectable dans la mémoire (les virus informatiques utilisent beaucoup ce genre de procédés). L'impossibilité de séparer données et instructions est à l'origine de problèmes assez fâcheux. Il est parfaitement possible que le processeur charge et exécute des données, qu'il prend par erreur pour des instructions. C'est le cas quand des pirates informatiques arrivent à exploiter des bugs. Il arrive que des pirates informatiques vous fournissent des données corrompues, qui contiennent un virus ou un programme malveillant est caché dans les données. Les bugs en question permettent d'exécuter ces données, donc virus. Pour éviter cela, le système d'exploitation peut marquer certaines zones de la mémoire comme non-exécutable, c’est-à-dire que le système d'exploitation interdit d’exécution de quoi que ce soit qui est dans cette zone. Mais ce n'est pas parfait. Toujours est-il que tout cela est impossible sur les architectures Harvard. Et ce serait très limitant. Imaginez : pas possible de lancer un programme depuis le disque dur ou une clé USB, le programme doit impérativement être dans une mémoire ROM, pas de compilation à la volée, etc. Que des techniques très utilisées dans l'informatique moderne. Malgré ses défauts, les architectures Von Neumann ne sont pas les plus utilisées pour rien. Les architectures Harvard sont concrètement utilisées uniquement dans l'informatique embarquée, sur des microcontrôleurs très spécifiques. ==Le bus de communication avec les entrées-sorties== Le processeur, la mémoire et les entrées-sorties sont connectées par un ou plusieurs '''bus de communication'''. Ce bus n'est rien d'autre qu'un ensemble de fils électriques sur lesquels on envoie des zéros ou des uns. Pour communiquer avec la mémoire, il y a trois prérequis qu'un bus doit respecter : pouvoir sélectionner la case mémoire (ou l'entrée-sortie) dont on a besoin, préciser à la mémoire s'il s'agit d'une lecture ou d'une écriture, et enfin pouvoir transférer la donnée. Pour cela, on doit donc avoir trois bus spécialisés, bien distincts, qu'on nommera le bus de commande, le bus d'adresse, et le bus de donnée. * Le '''bus de données''', sur lequel s'échangent les données entre les composants. * Le '''bus de commande''' pour configurer la mémoire et les entrées-sorties. * Le '''bus d'adresse''', facultatif, permet de préciser quelle adresse mémoire il faut lire/écrire. Chaque composant possède des entrées séparées pour le bus d'adresse, le bus de commande et le bus de données. Par exemple, une mémoire RAM possédera des entrées sur lesquelles brancher le bus d'adresse, d'autres sur lesquelles brancher le bus de commande, et des broches d'entrée-sortie pour le bus de données. Précisons cependant que le bus de commande n'est pas exactement le même entre des mémoires RAM/ROM et des entrées-sorties. [[File:Bus general schematic.svg|centre|vignette|upright=2|Contenu d'un bus, généralités.]] ===Le réseau d'interconnexion : généralités=== Reprenons où nous nous étions arrêté. Avant de voir les architectures Harvard et Von Neumann, nous avions dit que le processeur, les mémoires et les entrées-sorties sont reliées entre eux par un réseau d'interconnexion. Nous venons de voir qu'il est possible de mutualiser certains bus, notamment celui de la mémoire RAM et celui de la mémoire ROM. Mais il est possible de faire la même chose pour les entrées-sorties. Là encore, il est possible de regrouper le bus mémoire avec les bus pour les entrées-sorties. Voyons ce que cela implique. {| |[[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec une architecture Harvard.]] |[[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Interconnexions d'une architecture Von Neumann.]] |} Avant de poursuivre, nous devons préciser quelque chose d'important. Sur les ordinateurs modernes, les entrées-sorties peuvent accéder à la mémoire RAM. Les ordinateurs modernes intègrent des techniques de '''''Direct Memory Access''''' (DMA) qui permettent aux entrées-sorties de lire ou d'écrire en mémoire RAM. Les transferts DMA se font sans intervention du processeur. Ils permettent de copier un bloc de plusieurs octets, dans deux sens : de la mémoire RAM vers une entrée-sortie, ou inversement. Le DMA demande d'ajouter un circuit dédié sur la carte mère : le contrôleur DMA. Il effectue la copie d'un paquet d'octets de la RAM vers l'entrée-sortie ou dans l'autre sens. [[File:Réseau d'interconnexion avec un processeur au centre, et direct memory access.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre, et direct memory access]] ===Les bus systèmes=== La première solution utilise un bus unique, celui-ci est appelé le '''bus système''', aussi appelé ''backplane bus''. Le bus système est connecté à la mémoire RAM, la mémoire ROM, au processeur, et aux entrées-sorties. Tous les composants présents dans l'ordinateur sont connectés à ce bus, sans exception. De tels bus avaient pour avantage la simplicité. Le processeur n'est connecté qu'à un seul bus, ce qui utilise peu de broches et économise des fils. La mutualisation des bus est totale, le câblage est plus simple, la fabrication aussi. [[File:Architecture minimale d'un ordinateur.png|centre|vignette|upright=2|Architecture minimale d'un ordinateur.]] Un bus système contient un bus d'adresse, de données et de commande. Un bus système se marie bien avec des entrées-sorties mappées en mémoire. La conséquence est que le bus d'adresse ne sert pas que pour l'accès à la mémoire RAM/ROM, mais aussi pour l'accès aux entrées-sorties. Il y a moyen d'implémenter un système d'adresse séparés avec, mais c'est pas l'idéal. [[File:Architecture Von Neumann avec les bus.png|centre|vignette|upright=2|Architecture Von Neumann avec les bus.]] Un bus système n'a pas de limitations quant aux échanges de données. Le processeur peut communiquer directement avec les mémoires et les entrées-sorties, les entrées-sorties peuvent communiquer avec la mémoire RAM, etc. Notamment, un bus système peut implémenter le ''Direct Memory Access''. Il suffit juste de connecter un contrôleur DMA sur le bus système. Le contrôleur DMA est considéré comme une entrée-sortie, ses registres sont mappés en mémoire et sont donc accessibles directement par le processeur. [[File:Bus système avec controleur DMA.png|centre|vignette|upright=2|Bus système avec contrôleur DMA.]] Si on suit la définition à la lettre, un bus système est systématiquement une architecture Von Neumann, vu que la mémoire ROM et la mémoire RAM sont reliées sur le bus système. La conséquence est que les circuits de décodage d'adresse sont présents. Ils sont toujours sur la carte mère, et sont plus ou moins à côté du bus système. Cependant, le décodage d'adresse est parfois étendu pour tenir compte des entrées-sorties. Les entrées-sorties soudées sur la carte mère ont elles aussi des entrées ''Chip Select'' ou quelque chose de similaire. Le décodage d'adresse peut alors les activer ou les désactiver suivant l'adresse envoyée sur le bus d'adresse. C'est ce qui arrive quand le processeur écrit dans un registre d’interfaçage : il envoie l'adresse de ce registre sur le bus d'adresse, le circuit de décodage d'adresse active seulement l'entrée-sortie associée. Il faut noter que ce n'est pas systématique, il existe des techniques pour se passer de décodage d'adresse. Mais nous en reparlerons dans le chapitre sur les bus de communication. [[File:Chipselectfr.png|centre|vignette|upright=1.5|Exemple détaillé.]] Les bus systèmes sont certes très simples, mais ils ont aussi des désavantages. Par exemple, il faut éviter que le processeur et les entrées-sorties se marchent sur les pieds, ils ne peuvent pas utiliser le bus en même temps. De tels conflits d'accès au bus système sont fréquents et ils réduisent la performance, comme on le verra dans le chapitre sur les bus. De plus, un bus système a le fâcheux désavantage de relier des composants allant à des vitesses très différentes : il arrivait fréquemment qu'un composant rapide doive attendre qu'un composant lent libère le bus. Le processeur était le composant le plus touché par ces temps d'attente. Elle était utilisée sur les tout premiers ordinateurs, pour sa simplicité. Elle était parfaitement adaptée aux anciens composants, qui allaient tous à la même vitesse. De nos jours, les ordinateurs à haute performance ne l'utilisent plus trop, mais elle est encore utilisée sur certains systèmes embarqués, en informatique industrielle dans des systèmes très peu puissants. ===Les bus d'entrées-sorties=== Les bus systèmes ont de nombreux problèmes, ce qui fait que d'anciens ordinateurs faisaient autrement. À la place d'un bus système unique, ils utilisent un bus séparé pour les mémoires, et un autre séparé pour les entrées-sorties. Le bus spécialisé pour la mémoire est appelé le '''bus mémoire''', l'autre bus est appelé le '''bus d'entrées-sorties'''. Le bus mémoire est généralement relié à la fois à la mémoire RAM et à la mémoire ROM, les exceptions ne sont pas rares, cependant. [[File:Bus mémoire séparé du bus pour les IO.png|centre|vignette|upright=2|Bus mémoire séparé du bus pour les IO]] Les bus d'entrée-sorties peuvent être spécialisés et simplifiés. Par exemple, ils peuvent avoir un bus de commande différent de celui de la mémoire, qui utilise nettement moins de fils. Le bus d'adresse peut aussi être réduit, et utiliser des adresses plus courtes que celles du bus mémoire. Les bus de données peuvent aussi être de taille différentes. Il est ainsi possible d'avoir un bus mémoire capable de lire/écrire 64 bits à la fois, alors que la communication avec les entrées-sorties se fait octet par octet ! En général, les bus d'entrée-sortie sont assez petits, ils ont une taille de 8 ou 16 bits, même si le bus mémoire est plus grand. Cela permet de ne pas gaspiller trop de broches. Ajouter un bus d'entrée-sortie n'est donc pas très gourmand en broches et en fils. : Il est en théorie possible d'avoir une fréquence différente pour les deux bus, avec un bus mémoire ultra-rapide et un bus pour les entrées-sorties est un bus moins rapide. Mais il faut que le processeur soit prévu pour, et c'est très rare. Niveau performances, le processeur peut théoriquement accéder à la mémoire en attendant qu'une entrée/sortie réponde, mais il faut que le processeur soit prévu pour, et ce n'est pas de la tarte. Par contre, cela implique d'avoir des adresses séparées pour les registres d’interfaçage et la mémoire. En clair : pas d'entrée-sortie mappée en mémoire ! Un autre problème est que les entrées-sorties ne peuvent pas communiquer avec la mémoire directement, elles doivent passer par l'intermédiaire du processeur. En clair : pas de ''Direct Memory Access'' ! Les deux sont des défauts rédhibitoires pour les programmeurs système, notamment pour ceux qui codent les pilotes de périphériques. Pour résumer, les défauts sont assez problématiques : pas d'entrées-sorties mappées en mémoire, pas de ''Direct Memory Access'', économie de broches limitée. Les deux premiers sont des défauts majeurs, qui font que de tels bus ne sont pas utilisés dans les ordinateurs modernes. À la place, ils utilisent une troisième solution, distincte des bus systèmes et des bus d'entrée-sorties. ===Les bus avec répartiteur=== Il existe une méthode intermédiaire, qui garde deux bus séparés pour la mémoire et les entrées-sorties, mais élimine les problèmes de brochage sur le processeur. L'idée est d'intercaler, entre le processeur et les deux bus, un '''circuit répartiteur'''. Il récupère tous les accès et distribue ceux-ci soit sur le bus mémoire, soit sur le bus des périphériques. Le ou les répartiteurs s'appellent aussi le '''''chipset''''' de la carte mère. C'était ce qui était fait à l'époque des premiers Pentium. À l'époque, la puce de gestion du bus PCI faisait office de répartiteur. Elle mémorisait des plages mémoires entières, certaines étant attribuées à la RAM, les autres aux périphériques mappés en mémoire. Elles utilisaient ces plages pour faire la répartition. [[File:IO mappées en mémoire avec séparation des bus.png|centre|vignette|upright=2|IO mappées en mémoire avec séparation des bus]] Niveau adresses des registres d'interfacage, il est possible d'avoir soit des adresses unifiées avec les adresses mémoire, soit des adresses séparées. L'usage d'un répartiteur ne pose pas de problèmes particuliers pour implémenter le DMA. La seule contrainte est que le contrôleur DMA soit intégré dans le répartiteur. Les échanges entre IO et mémoire passent par le répartiteur, qui fait le pont entre bus mémoire et bus des IO. [[File:Implémentation du DMA avec un répartiteur.png|centre|vignette|upright=2|Implémentation du DMA avec un répartiteur]] ==Les microcontrôleurs et ''system on chip''== Parfois, on décide de regrouper la mémoire, les bus, le CPU et les ports d'entrée-sortie dans un seul circuit intégré, un seul boitier. L'ensemble forme alors ce qu'on appelle un '''''System on Chip''''' (système sur une puce), abrévié en SoC. Le nom est assez explicite : un SoC comprend un système informatique complet sur une seule puce de silicium, microprocesseurs, mémoires et périphériques inclus. Ils incorporent aussi des ''timers'', des compteurs, et autres circuits très utiles. [[File:ARMSoCBlockDiagram.svg|centre|vignette|upright=2|SoC basé sur un processeur ARM, avec des entrées-sorties typiques de celles d'un µ-contrôleur. Le support du bus CAN, d'Ethernet, du bus SPI, d'un circuit de PWM (génération de signaux spécifiques), de convertisseurs analogique-digital et inverse, sont typiques des µ-contrôleurs.]] Le terme SoC regroupe des circuits imprimés assez variés, aux usages foncièrement différents et à la conception distincte. Les plus simples d’entre eux sont des microcontrôleurs, qui sont utilisés pour des applications à base performance. Les plus complexes sont utilisés pour des applications qui demandent plus de puissance, nous les appellerons SoC haute performance. La relation entre SoC et microcontrôleurs est assez compliquée à expliquer, la terminologie n'est pas clairement établie. Il existe quelques cours/livres qui séparent les deux, d'autres qui pensent que les deux sont très liés. Dans ce cours, nous allons partir du principe que tous les systèmes qui regroupent processeur, mémoire et quelques périphériques/entrées-sorties sont des SoC. Les microcontrôleurs sont donc un cas particulier de SoC, en suivant cette définition. ===Les microcontrôleurs=== Les '''microcontrôleurs''' sont des composants utilisés dans l'embarqué ou d'informatique industrielle. Leur nom trahit leur rôle. Ils sont utilisés pour contrôler de l'électroménager, des chaines de fabrication dans une usine, des applications robotiques, les alarmes domestiques, les voitures. De manière générale, on les trouve dans tous les systèmes dits embarqués et/ou temps réel. Ils ont besoin de s'interconnecter à un grand nombre de composants et intègrent pour cela un grand nombre d'entrée-sorties. Les microcontrôleurs sont généralement peu puissants, et doivent consommer peu d'énergie/électricité. Fait amusant, on en trouve dans certains périphériques informatiques. Par exemple, les anciens disques durs intégraient un microcontrôleur qui contrôlait plusieurs moteurs/ Les moteurs pour faire tourner les plateaux magnétiques et les moteurs pour déplacer les têtes de lecture/écriture étaient commandés par ce microcontrôleur. Comme autre exemple, les claviers d'ordinateurs intègrent un microcontrôleur connecté aux touches, qui détecte quand les touches sont appuyées et qui communique avec l'ordinateur. Nous détaillerons ces deux exemples dans les chapitres dédiés aux périphériques et aux disques durs, tout deviendra plus clair à ce moment là. La majorité des périphériques ou des composants internes à un ordinateur contiennent des microcontrôleurs. [[File:Microcontroller 8051.gif|centre|vignette|upright=2.5|Microcontrôleur Intel 8051.]] Un microcontrôleur tend à intégrer des entrées-sorties assez spécifiques, qu'on ne retrouve pas dans les SoC destinés au grand public. Un microcontrôleur est typiquement relié à un paquet de senseurs et son rôle est de commander des moteurs ou d'autres composants. Et les entrées-sorties intégrées sont adaptées à cette tâche. Par exemple, ils tendent à intégrer de nombreux convertisseurs numériques-analogiques pour gérer des senseurs. Ils intègrent aussi des circuits de génération de signaux PWM spécialisés pour commander des moteurs, le processeur peut gérer des calculs trigonométriques (utiles pour commander la rotation d'un moteur), etc. [[File:C8051F340-9 A B C D.png|centre|vignette|upright=2|Exemple d'entrées-sorties intégrées à un microcontroleur.]] En plus des entrées-sorties intégrées, les microcontrôleurs ont souvent des '''ports d'entrées-sorties''' banalisés, à savoir qu'on peut brancher n'importe quoi dessus. Il était possible de brancher un capteur de température, un moteur à commander, un port série, un port parallèle, un écran, un clavier, une souris, peu importe. Les ports font souvent un octet et ils sont généralement reliées directement ou indirectement au processeur. Le logiciel qui s'exécute sur le processeur décide quoi envoyer sur des broches et comment interprète ce qui est reçu dessus. Les ports banalisés de ce type sont parfois appelés des '''GPIO''', abréviation de ''General Purpose Input/Output'', mais nous utiliserons le terme de ''port I/O''. Un port regroupe plusieurs broches qui peuvent être utilisés à volonté. C'est le logiciel qui s'exécute sur le processeur qui décide de la fonction de broches. Un port IO peut fonctionner soit en tant qu'entrée, soit en tant que sortie. Il est possible de changer de sens en cours de fonctionnement, pour passer d'une entrée à une sortie ou inversement. [[File:Afficheurs7seg.png|centre|vignette|upright=2|Exemple d'utilisation d'un port I/O. le port est connecté à un afficheur LCD dit 7-segments. Les 8 entrées de cet afficheur sont connectées à un port I/O d'un octet.]] ===Les SoC haute performance=== Les SoC les plus performants sont actuellement utilisés dans les téléphones mobiles, tablettes, ''Netbook'', ''smartphones'', ou tout appareil informatique grand public qui ne doit pas prendre beaucoup de place. La petite taille de ces appareils fait qu'ils gagnent à regrouper toute leur électronique dans un circuit imprimé unique. Mais les contraintes font qu'ils doivent être assez puissants. Ils incorporent des processeurs assez puissants, surtout ceux des ''smartphones''. C'est absolument nécessaire pour faire tourner le système d'exploitation du téléphone et les applications installées dessus. Niveau entrées-sorties, ils incorporent souvent des interfaces WIFI et cellulaires (4G/5G), des ports USB, des ports audio, et même des cartes graphiques pour les plus puissants d'entre eux. Les SoC incorporent des cartes graphiques pour gérer tout ce qui a trait à l'écran LCD/OLED, mais aussi pour gérer la caméra, voire le visionnage de vidéo (avec des décodeurs/encodeurs matériel). Par exemple, les SoC Tegra de NVIDIA incorporent une carte graphique, avec des interfaces HDMI et VGA, avec des décodeurs vidéo matériel H.264 & VC-1 gérant le 720p. Pour résumer, les périphériques sont adaptés à leur utilisation et sont donc foncièrement différents de ceux des microcontrôleurs. [[File:SOMblk.png|centre|vignette|upright=3|Exemple de SoC.]] Un point important est que les processeurs d'un SoC haute performance sont... performants. Ils sont le plus souvent des processeurs de marque ARM, qui sont différents de ceux utilisés dans les PC fixe/portables grand public qui sont eux de type x86. Nous verrons dans quelques chapitres en quoi consistent ces différences, quand nous parlerons des jeux d'instruction du processeur. Autrefois réservé au monde des PCs, les processeurs multicœurs deviennent de plus en plus fréquents pour les SoC de haute performance. Il n'est pas rare qu'un SoC incorpore plusieurs cœurs. Il arrive même qu'ils soient foncièrement différents, avec plusieurs cœurs d'architecture différente. La frontière entre SoC haute performance et microcontrôleur est de plus en plus floue. De nombreux appareils du quotidien intègrent des SoC haute performance, d'autres des microcontrôleurs. Par exemple, les lecteurs CD/DVD/BR et certains trackers GPS intègrent un SoC ou des processeurs dont la performance est assez pêchue. À l'opposé, les systèmes domotiques intègrent souvent des microcontrôleurs simples. Malgré tout, les deux cas d'utilisation font que le SoC/microcontrôleur est connecté à un grand nombre d'entrées-sorties très divers, comme des capteurs, des écrans, des LEDs, etc. [[File:GPS tracker Hardware Architecture.png|centre|vignette|upright=2|Hardware d'un tracker GPS.]] ==Étude de quelques exemples d'architectures== Après avoir vu la théorie, nous allons voir des exemples réels d'ordinateurs. Dans ce qui suit, nous allons voir des ordinateurs assez anciens, pour une raison simple : ils collent assez bien à l''''architecture de base''' vue plus haut, avec un CPU, une RAM et une ROM, quelques entrées-sorties. Tous les ordinateurs modernes, mais aussi dans les smartphones, les consoles de jeu et autres, utilisent une architecture grandement modifiée et améliorée, avec un grand nombre de périphériques, disques durs/SSD, un grand nombre de mémoires différentes, etc. Il pourrait sembler pertinent d’étudier des microcontrôleurs ou des ''System On Chip'', en premier lieu. Mais nous éviterons soigneusement de tels systèmes pour le moment. La raison est qu'ils ont un grand nombre d'entrées-sorties, qui sont peu familières. Attendez-vous à avoir près d'une vingtaine ou centaine d'entrée-sorties différentes pour de tels systèmes. Le tout est très complexe, bien trop pour un premier exemple. À la place, nous allons voir précisément des exemples plus simples : les premiers PC, et des consoles de jeu 8 et 16 bits. Bien que ce soit des systèmes très simples, ils sont cependant plus complexes que l'architecture de base. Et leur avantages/désavantages sont un peu inverse l'un de l'autre. Si on devait résumer les différences, on aurait ceci : * Les PC ont plus d'entrées-sorties que les consoles, bien que nettement moins que pour les microcontrôleurs/SoC. * Les PC utilisent des disques durs, les consoles font avec soit des cartouches de jeu, soit des CD/DVD. * Les PC utilisent des cartes électroniques séparées pour le son et l'écran, les consoles utilisent des circuits soudés sur la carte mère, qui sont souvent des co-processeurs. * Les PC ont une mémoire ROM soudées sur la carte mère, les consoles 8 bits font sans. Les PC et micro-ordinateurs ont plus d'entrées-sorties que les consoles. Même si on mets de côté les périphériques, ils ont aussi beaucoup de composants soudées sur la carte mère. En comparaison, les consoles de jeu 8/16 bits se débrouillent avec : une cartouche de jeu et une manette en entrée, une sortie vidéo et une sortie son. Un autre point important est l'absence de disque dur ou de lecteur CD. La présence d'un disque dur ou d'un lecteur CD/DVD complexifie tout de suite l'architecture des PC. Il faut leur réserver un bus dédié ou les connecter à un bus système, cela demande d'ajouter des circuits sur la carte mère, etc. Et surtout, il faut expliquer comment l'ordinateur exécute des programmes, ce qui demande de parler de l'interaction avec le disque dur et la ROM du BIOS. Rien de tout cela sur les consoles de jeu 8 et 16 bits. Elles utilisent à la place des cartouches de jeu, qui intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Pas besoin de parler des mémoires de stockage, on est beaucoup plus proche de l'architecture de base avec une ROM unique. Par contre, n'allez pas croire que tout est rose avec les consoles 8/16 bits. Il y a quelques différences qui font qu'elles sont plus complexes qu'un PC sur certains points. Les PC utilisent des cartes électroniques à brancher sur la carte mère pour alimenter l'écran et les hauts-parleurs/casques, alors que les consoles de jeu utilisent des souvent co-processeurs dédiés pour le son et les graphismes. La différence parait mineure, mais elle avantage les consoles. Nous avons déjà expliqué ce que sont les co-processeurs plus haut, aussi les co-processeurs des consoles nous paraitrons familiers. On n'a pas à s’embêter à expliquer ce que sont les cartes d'extension, les bus associés et tout ce qui va avec, cela peut être retardé pour la section sur l'architecture des PC. La gestion de la cartouche de jeu est aussi un peu subtile à comprendre, bien que ce soit bien plus simple à comprendre qu'un système avec un disque dur. Les cartouches de jeu intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Et le processeur doit exécuter le code depuis cette mémoire ROM. La conséquence est que les consoles 8/16 bits utilisent une architecture Harvard, avec un bus relié à la cartouche pour lire les instructions. Mais si ce n'était que ça... Les cartouches mémorisent aussi les données pour les graphismes, ce qui fait que le co-processeur vidéo doit lui aussi lire la cartouche pour récupérer ces données... ===L'architecture de la TurboGraphX-16=== La console PC Engine, aussi appelée TurboGraphX, est une ancienne console 8 bits. Elle contient un processeur 65C02, 8 kibioctets de RAM, un port manettes, une carte son et une carte vidéo. La '''carte son''' est le composant qui s'occupe de commander les haut-parleurs et de gérer tout ce qui a rapport au son. La '''carte graphique''' est le composant qui est en charge de calculer les graphismes, tout ce qui s'affiche à l'écran. Sur cette console, les cartes son et graphique ne sont PAS des co-processeurs, ce sont des circuits électroniques dits fixes. C'est totalement différent de ce qu'on a sur les consoles modernes, aussi le préciser est important. Bien que la carte graphique ne soit pas un processeur, elle a 64 kibioctets de RAM rien que pour elle. La RAM en question est séparée de la RAM normale, c'est un circuit intégré séparé. Et c'est un cas très fréquent, qui reviendra par la suite. La majeure partie des cartes graphiques dispose de leur propre '''mémoire vidéo''', totalement réservée à la carte graphique. La RAM vidéo est connectée à la carte graphique via un bus séparé. Le processeur est souvent connecté à ce bus, afin de pouvoir écrire des données dedans, mais ce n'est pas le cas ici. [[File:Architecture de la PC Engine, aussi appelée TurboGrafx-16.png|centre|vignette|upright=2.5|Architecture de la PC Engine, aussi appelée TurboGrafx-16]] L'architecture de la console était particulièrement simple. Le processeur était le centre de l'architecture, tout était connecté dessus. Il y a un bus pour la cartouche de jeu, un autre pour la RAM, un autre pour les manettes, un autre pour carte son, et un dernier pour la carte graphique. Le fait d'avoir un bus par composant est assez rare et ce n'est le cas ici que parce des conditions particulières sont remplies. Déjà, il y a peu d'entrée-sorties. Ensuite, les bus font tous 8 bits, vu que le processeur est un CPU 8 bits. Avec 5 connexions de 8 bits, le tout utilise 40 broches, ce qui est beaucoup, mais totalement gérable. Par contre, les choses changerons pour les autres consoles. Au final, l'organisation des bus peut s'expliquer avec ce qu'on a vu dans la section sur les bus de communication. La console utilise une architecture Harvard, car la ROM et la RAM utilisent des bus différents. De plus, il y a des bus dédiés aux entrées-sorties, séparés des bus mémoire. Enfin, la carte graphique a droit à ses propres bus pour lire dans la cartouche et dans sa RAM vidéo dédiée. ===L'architecture de la console de jeu NES=== Maintenant, nous allons voir la console de Jeu Famicom, aussi appelée la NES en occident. Elle a une architecture centrée sur un processeur Ricoh 2A03, similaire au processeur 6502, un ancien processeur autrefois très utilisé et très populaire. Le processeur est associé à 2 KB de mémoire RAM. Sur certaines cartouches, on trouve une RAM utilisée pour les sauvegardes, qui est adressée par le processeur directement. Première variation par rapport à l'architecture de la console précédente : l'ajout de la RAM pour les sauvegardes dans les cartouches. Niveau carte graphique, une différence importante est que la carte graphique est connectée à la cartouche de jeu via un autre bus, afin de pouvoir lire les sprites et textures du jeu dans la cartouche. [[File:Architecture de la NES.png|centre|vignette|upright=2.5|Architecture de la NES]] La différence avec l'architecture précédente est que des bus ont été fusionnés. Comme dit plus haut, le système utilise une architecture Harvard, vu que la ROM est dans la cartouche, alors que la RAM est soudée à la carte mère. Par contre, la Famicon utilise un bus dédié aux entrées-sorties. Il est utilisé pour la carte son et la carte graphique, seules les manettes sont sur un bus à part. Ce qui fait qu'on devrait plutôt parler de bus de sorties, mais passons... L'essentiel est qu'on n'est plus tout à fait dans le cas de la console précédente, avec un bus par composant. ===L'architecture de la SNES=== L'architecture de la SNES est illustrée ci-dessous. Les changements pour le processeur et la RAM sont mineurs.La RAM a augmenté en taille et passe à 128 KB. Pareil pour la RAM de la carte vidéo, qui passe à 64 KB. Par contre, on remarque un changement complet au niveau des bus, de la carte graphique et de la carte son. [[File:Architecture de la SNES.png|centre|vignette|upright=2|Architecture de la SNES]] La console utilise un '''bus système unique''', sur lequel tout est connecté : ROM, RAM, entrées-sorties, etc. La seule exception est pour les manettes, qui sont encore connectées directement sur le processeur, via un bus séparé. La transition vers un bus système s'explique par le fait que la console est maintenant de 16 bits, ce qui fait que les bus doivent être plus larges. Le processeur adresse des mémoires RAM et ROM plus grandes, ce qui double la taille de leurs bus. De plus, les entrées-sorties aussi ont besoin d'un bus plus large. Le processeur n'ayant pas un nombre illimité de broches, la seule solution est de fusionner les bus en un seul bus système. Un autre changement est que la carte graphique est maintenant composée de deux circuits séparés. Encore une fois, il ne s'agit pas de coprocesseurs, mais de circuits non-programmables. Par contre, la carte son est remplacée par deux coprocesseurs audio ! De plus, les deux processeurs sont connectés à une mémoire RAM dédiée de 64 KB, comme pour la carte graphique. L'un est un processeur 8 bits (le DSP), l'autre est un processeur 16 bits. Un point très intéressant : certains jeux intégraient des coprocesseurs dans leurs cartouches de jeu ! Par exemple, les cartouches de Starfox et de Super Mario 2 contenait un coprocesseur Super FX, qui gérait des calculs de rendu 2D/3D. Le Cx4 faisait plus ou moins la même chose, il était spécialisé dans les calculs trigonométriques, et diverses opérations de rendu 2D/3D. En tout, il y a environ 16 coprocesseurs d'utiliser et on en trouve facilement la liste sur le net. La console était conçue pour, des pins sur les ports cartouches étaient prévues pour des fonctionnalités de cartouche annexes, dont ces coprocesseurs. Ces pins connectaient le coprocesseur au bus des entrées-sorties. Les coprocesseurs des cartouches de NES avaient souvent de la mémoire rien que pour eux, qui était intégrée dans la cartouche. ===L'architecture de la Megadrive et de la néo-géo=== Passons maintenant à la console de jeu Megadrive, une console 16 bits. Elle a une architecture similaire à celle de la néo-géo, une autre console bien plus puissante, sorti à peu près en même temps. Elles intègrent deux processeurs : un Motorola 68000 qui sert de processeur principal, un Z80 qui sert de processeur dédié à l'audio. Le Z80 et le Motorola 68000 étaient deux processeurs très populaires à l'époque. Le Z80 est une sorte de version améliorée de l'Intel 8088 utilisé sur les anciens PC et de nombreuses consoles utilisaient des Z80 comme processeur principal. Il était familier pour les programmeurs de l'époque, pour son cout réduit, sa bonne disponibilité, et bien d'autres avantages liés à sa production de masse. Le Z80 est utilisé comme co-processeur audio. Il commande un synthétiseur sonore, et est relié à sa propre mémoire, distincte de la mémoire principale. Le MC68000 est le processeur principal et a une relation maitre-esclave avec le Z80 : le MC68000 envoie des commandes au Z80, mais la communication ne va pas dans l'autre sens. Le Motorola 68000 était un processeur 16 bits, alors que le Z80 est un processeur 8 bits. Et cette différence fait que l'on ne peut pas connecter directement les deux sur le même bus, ou du moins pas facilement. La solution retenue est d'utiliser deux bus séparés : un bus de 16 bits connecté au 68000, un bus de 8 bits connecté au Z80. Le premier bus est un bus système sur lequel est connecté le 68000, 64 kibioctets de RAM, la cartouche de jeu, et la carte graphique. Le second bus est un bus de 8 bits, plus court, relié au Z80, à un synthétiseur sonore, et 8 kibioctets de RAM Les deux bus sont connectés à un '''''chipset''''', un circuit répartiteur, qui fait le pont entre les deux bus. Les manettes sont connectées sur le ''chipset''. Il contient un registre de 8 bits, dans lequel le MC68000 peut écrire dedans à sa guise, le registre étant adressable par le processeur. Lorsque le MC68000 écrit une valeur dedans, cela déclenche l’exécution automatique d'un programme pré-déterminé sur le Z80. : Pour ceux qui savent ce qu'est une interruption, les valeurs écrites dans ce registre sont des numéros d'interruption, qui indiquent quelle routine d'interruption exécuter. [[File:Architecture de la Megadrive et de la Néogeo.png|centre|vignette|upright=2.5|Architecture de la Megadrive et de la Néogeo]] Cet exemple nous montre que les bus systèmes sont certes très simples, mais aussi inflexibles. Ils fonctionnent bien quand les composants branchés dessus sont tous des composants 8 bits, ou sont tous de 16 bits, ou tous 32 bits. Mais dès qu'on mélange composants 8, 16, 32 ou 64 bits, les choses deviennent plus compliquées. Il est alors préférable d'utiliser des bus séparés, avec des répartiteurs pour faire le pont entre les différents bus. Et nous verrons que le problème s'est posé lui aussi sur les PC. ===L'architecture des anciennes consoles Playstation : beaucoup de co-processeurs=== Les consoles que nous venons d'aborder étaient des consoles 8 ou 16 bits. A partir des consoles 32 bits, leur architecture s'est rapprochée de celle des PC, avec un usage plus complexes de répartiteurs. La XBOX était très semblable à un PC : le processeur était un Pentium 3 modifié, la carte graphique était une Geforce 3 modifiée, les 64 mébioctets de RAM était la même mémoire DDR que celle des PC, le répartiteur secondaire était un ''chipset'' nForce de NVIDIA, etc. Mais les Playstation 1, 2 et 3 se distinguent de leur contemporains. Elles disposent de très nombreux co-processeurs, qui sont en plus très variés. La Playstation 1 a été une des premières console à utiliser les CD-ROM comme support de stockage, en remplacement des cartouches. La conséquence est que la console contient une mémoire ROM, soudée à la carte mère, de 512 kibioctets. Elle contient aussi 2 mébioctets de RAM, une carte graphique avec 1 mébioctet de mémoire vidéo, un processeur, et de quoi gérer les périphériques. Il y a un co-processeur audio spécialisé, avec 512 kibioctets de RAM, ce qui nous est familier. Par contre, les autres co-processeurs ne le sont pas. Déjà, le lecteur de CD-ROM est associé à des circuits sur la carte mère, il y a tout un sous-système dédié au lecteur de CD. Il y a un contrôleur qui sert d'interface avec le lecteur proprement dit, mais aussi deux co-processeurs audio et 32 kibioctets de RAM. Les co-processeurs audio servent à lire des CD sans trop utiliser le second co-processeur audio, ils lui servent de complément. Ensuite, le processeur incorpore plusieurs cœurs, avec un cœur principal et plusieurs co-processeurs. Le premier est un co-processeur système, qui est utilisé pour gérer la mémoire cache intégrée au processeur, pour des fonctionnalités appelées interruptions et exceptions, ainsi que pour configurer le processeur. Le second est un co-processeur arithmétique spécialisé dans les calculs en virgule flottante, très importants pour le rendu 3D. Enfin, il y a un décodeur vidéo, qui n'est pas un co-processeur, mais un circuit non-programmable, spécialisé dans le décodage vidéo. De nos jours, ce circuit aurait été intégré dans la carte graphique, mais il était intégré dans le processeur sur la Playstation 2. Pour le reste, le processeur est la figure centrale de la console. Il est connecté à 4 bus : un pour la RAM, un pour la carte graphique, un pour les manettes, un autre pour le reste. Le dernier bus est connecté au système audio et au système pour le lecteur CD. Ce serait un bus d'entrée-sortie, s'il n'était pas connecté à la mémoire ROM. Vous avez bien lu : la mémoire ROM est reliée au bus d'entrée-sortie. [[File:Architecture de la Playstation.png|centre|vignette|upright=2.5|Architecture de la Playstation]] La Playstation 2 est composé d'un processeur, couplé à 32 Mébioctets de RAM, et d'un paquet de co-processeurs. Plus de co-processeurs que la PS1. Le processeur principal n'est pas la même que celui de la PS1, mais il a une architecture similaire. Il intègre un décodeur vidéo sur le même circuit intégré, ainsi que deux co-processeur. Les co-processeurs ne sont cependant pas les mêmes. Le co-processeur système disparait et est remplacé par un second co-processeur arithmétique. Les deux co-processeurs arithmétiques sont spécialisés dans les nombres flottants, avec quelques différences entre les deux. Par exemple, le second co-processeur gérait des calculs trigonométriques, des exponentielles, des logarithmes, et d'autres fonctions complexes du genre ; mais pas le premier co-processeur. Ils sont reliés à 4 kibioctets de RAM pour le premier, 16 kibioctets de RAM pour le second ; qui sont intégrées dans le processeur et non-représentés dans le diagramme ci-dessous. La PS2 intègre aussi un co-processeur d'entrées-sorties. Pour information, il s'agit du processeur principal de la Playstation 1, qui est ici utilisé différemment, suivant que l'on place un jeu PS1 ou PS1 dans la console. Si on met un jeu PS1, il est utilisé pour émuler la Playstation 1, afin de faire tourner le jeu PS1 sur la PS2. Si on met un jeu PS2, il est utilisé comme co-processeur d'entrée-sortie et fait l'interface entre CPU et entrées-sorties. Il est relié à 2 mébioctets de RAM, soit exactement la même quantité de mémoire que la Playstation 1. Tous les périphériques sont connectés au co-processeur d'entrées-sortie. Pour cela, le co-processeur d'entrées-sortie est relié à deux bus dédiés aux périphériques. Le premier bus est relié aux manettes, aux ports USB et aux ports pour cartes mémoires. Le second bus est relié à la carte son, la carte réseau, le lecteur DVD, et un port PCMIA. Notons que la carte son intègre un co-processeur audio, qui n'est pas représenté dans le diagramme ci-dessous. [[File:Playstation 2 architecture.png|centre|vignette|upright=2.5|Playstation 2 architecture]] ==L'architecture des PC et son évolution== Après avoir vu les consoles, nous allons maintenant voir les anciens PC, des années 80 ou 90. Le tout premier PC était techniquement l''''IBM PC'''. Par la suite, de nombreux ordinateurs ont tenté de reproduire l'IBM PC originel, avec parfois quelques modifications mineures. De tels ordinateurs ''IBM PC compatibles'', ont été très nombreux, pour des raisons diverses. Le fait d'utiliser des composants banalisés, facilement disponibles, ainsi qu'une bonne documentation de l'IBM PC originel, a grandement aidé. Les IBM PC compatibles ont progressivement évolué pour donner les PC actuels. L'IBM PC compatible a donné naissance à de nombreux standards divers. ===L'IBM PC originel et l'IBM PC XT=== [[File:IBM PC XT 02.jpg|vignette|IBM PC XT.]] Nous allons commencer par voir l'IBM PC originel, et son successeur : l'IBM Personal Computer XT. Nous les appelerons tous deux l'IBM PC. L'IBM PC utilisait un processeur Intel 8088, qui était un processeur 8 bits. Ils utilisaient un bus système unique, appelé le '''bus XT'''. Le bus système allait à 4.77 MHz, soit la même fréquence que le processeur. C'était un bus de 8 bits, ce qui collait parfaitement avec les processeurs 8 bits commercialisés par Intel à l'époque. L'IBM PC comprenait une mémoire ROM avec de quoi faire fonctionner le PC. La ROM en question contenait un programme minimal, appelé le '''BIOS''', sans lequel le PC ne fonctionnait pas du tout. Il servait de base pour le système d'exploitation et MS-DOS ne fonctionnait pas sans elle. De nos jours, son rôle est plus limité : sans elle, le PC ne démarre pas. Mais nous détaillerons cela dans le prochain chapitre. En plus de la ROM pour le BIOS, l'IBM PC avait quatre mémoires ROM dédiée au langage de programmation BASIC. Lorsque le PC démarrait, il ne bootait pas un système d'exploitation, mais lançait l'interpréteur pour le langage BASIC. De nos jours, ce serait l'équivalent d'un ordinateur qui boote directement sur du Python, à savoir la console Python que vous avez peut-être déjà utilisé si vous avez testé Python. Ceux qui ont déjà touché à un ordinateur de l'époque savent ce que ca veut dire, mais c'est malheureusement très difficile à expliquer sans ce genre d'expérience. Toujours est-il que c'était une sorte de norme à l'époque : les ordinateurs bootaient généralement sur un interpréteur BASIC. [[File:XT Bus pins.svg|vignette|Connecteur du bus XT.]] Les PC étaient conçus pour qu'on branche des '''cartes d'extension''', à savoir des cartes électroniques qu'on branchait sur la carte mère, à l'intérieur du PC. Les cartes d'extension de l'époque étaient surtout des cartes son ou des cartes graphiques, mais aussi des cartes pour brancher des péripéhriques. par exemple, on pouvait ajouter deux cartes graphiques dans l'IBM PC originel : l'''IBM Monochrome Display Adapter'' et/ou la ''IBM Color Graphics Adapter''. De nos jours, les cartes son sont intégrées à la carte mère, mais les cartes graphiques sont restées des cartes d'extension. Les cartes d'extension étaient branchées sur un '''connecteur XT''', qui était directement relié au bus XT. Le connecteur XT est illustré ci-contre, mais ne vous en souciez pas trop pour le moment. La carte mère de l'IBM PC avait 5 connecteurs de ce type, qu'on pouvait peupler avec autant de cartes d'extension. L'IBM Personal Computer XT est passé à 8 connecteurs XT, soit trois de plus. Pour ce qui est des périphériques, l'IBM PC avait plusieurs connecteurs : un port série, un port parallèle, un port pour le clavier, et un port pour un lecteur cassette. Le clavier et le lecteur cassette étaient connectés directement sur la carte mère, qui contenait quelques circuits pour gérer le clavier. Par contre, les deux premiers n'étaient pas connectés à la carte mère. Le port série était en réalité une carte d'extension, branchée sur un connecteur XT. Et il en est de même pour le port parallèle. Pour ce qui est des supports de stockage, l'IBM PC originel n'avait pas de disque dur et n'avait que des lecteurs de disquette. De plus, le lecteur de disquette n'était pas connecté directement sur la carte mère, mais était connecté à une carte d'extension, branchée sur un connecteur XT. La carte d'extension avait deux connecteurs, un par lecteur de disquette, ce qui fait que les deux lecteurs de disquettes pouvaient être branchés sur une seule carte d'extension. L'IBM Personal Computer XT a ajouté un disque dur, sauf sur quelques sous-modèles spécifiques. Le PC avait aussi un petit haut-parleur capable de faire des bips. Pour résumer, l'IBM PC originel se reposait beaucoup sur les cartes d'extension, sa carte mère contenait peu de choses. Enfin, peu de choses... Il y avait un processeur Intel 8088, éventuellement un coprocesseur flottant 8087, de la RAM, de la ROM, et des circuits intégrés assez divers. En voici la liste, certains vous seront familiers, d'autres vous seront inconnus à ce stade du cours : * les circuits de décodage d'adresse ; * un contrôleur DMA intel 8273 ; * un contrôleur d'interruption 8259 ; * un contrôleur de bus Intel 8288 pour gérer le bus XT ; * un générateur d'horloge Intel 8284 et un diviseur de fréquence ; * un ''timer'' Intel 8253, le même que celui étudié dans le chapitre sur les ''timers'' ; * un contrôleur parallèle 8255. Les multiplexeurs, registres et portes logiques, sont des circuits de décodage d'adresse, qui permettent de combiner plusieurs RAM en une seule, idem avec la mémoire ROM. Si vous verrez qu'il y a 5 mémoires ROM : une ROM pour le BIOS, et quatre autres ROM pour le BASIC. Les 4 ROM du BASIC sont combinées en une seule mémoire ROM. Pour les RAM, il y en a 8 à 32, qui sont combinées en une seule RAM de 16 à 64 kibioctets. [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] ===L'architecture d'un IBM PC compatible 16 bits=== Les PC suivants sont passés à des processeurs 16 bits, mais c'était toujours des processeurs x86 d'Intel, à savoir des Intel 286 et 386. La RAM a grossi, quelques entrées-sorties ont été ajoutées, mais l'architecture globale est plus moins resté le même. C'est surtout au niveau du bus et des périphériques que les changements majeurs ont eu lieu. [[File:ISA Bus pins.svg|vignette|Connecteur ISA.]] Les PC 16 bits utilisaient un bus système unique, sur lequel tout était connecté : le processeur, la RAM, la ROM, les cartes d'extension et tout le reste. Le bus en question s'appelait le '''bus AT''', mais il a rapidement été renommé en '''bus ISA''' (''Industry Standard Architecture''). Le bus ISA était prévu pour avoir une compatibilité avec le bus 8 bits de l'IBM PC originel. D'ailleurs, cela se ressent jusque dans le connecteur utilisé : le connecteur ISA est un connecteur XT qu'on a fusionné avec un second connecteur pour l'étendre de 8 à 16 bits. Les PC 16 bits avaient toujours un port série, un port parallèle, un clavier, un lecteur de disquette et des cartes d'extension. Des disques durs pouvaient être ajoutés, aussi. Mais pour ces périphériques, un changement majeur a eu lieu comparé à l'IBM PC originel. L'IBM PC originel utilisait des cartes d'extension pour tout, sauf le clavier. Mais maintenant, les périphériques ne sont plus connectés à une carte d'extension. À la place, les circuits de la carte d'extension sont déplacés sur la carte mère. Mais n'allez pas croire qu'ils étaient connectés directement au bus ISA, il y avait des intermédiaires. Le clavier était relié à un '''contrôleur de clavier''', qui faisait l'interface entre le connecteur du clavier et le bus ISA. Le contrôleur de clavier était appelé le ''Keyboard Controler'', abrévié en KB. Il recevait ce qui est tapé au clavier et traduisait cela en quelque chose de compréhensible par l'ordinateur. Les autres périphériques étaient connectés à un circuit intégré dédié : l''''Intel 82091AA'''. Il était connecté au lecteur de disquette, au port série et au port parallèle. Il servait d'intermédiaire entre ces périphériques et le bus ISA. Vous pouvez le voir comme une sorte de répartiteur, mais qui ne serait pas connecté sur le processeur et la RAM Enfin, il ne faut pas oublier les autres composants présents sur l'IBM PC originel. Le BIOS est toujours là, de même que les ''timers'' Intel 8253 PIT, le contrôleur d'interruption Intel 8259 et le contrôleur DMA Intel 8237. Les PC 16 bits ont aussi intégré une ''Real Time Clock'' (RTC). Pour rappel, c'est un composant qui permet au PC de mémoriser la date et l'heure courante, à la seconde près. Le tout est résumé dans le schéma ci-dessous. [[File:Architecture de l'IBM PC compatible.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible]] Un point important est que le bus ISA allait à la même fréquence que le processeur, vu que c'était un bus système. Les processeurs de l'époque étaient des CPU 286 d'Intel, ou le 386 d'Intel. Les Intel 286 allaient de 4 MHz minimum, à 25 MHz maximum. Le 386, quant à lui, allait de 12 à 40 MHz. Le bus ISA devait aller à cette fréquence, il était synchrone avec le processeur. Par la suite, les processeurs ont gagné en performance, ce qui fait que le bus ISA est devenu trop lent pour le processeur. Une idée a alors été de conserver le bus ISA, pour des raisons de compatibilité, mais de le reléguer comme bus secondaire. L'ordinateur contient alors deux bus : un bus système, et un bus ISA secondaire. Le lien entre les deux est réalisé par un '''pont ISA''', ''ISA Bridge'' en anglais. Le bus ISA fonctionnait alors sa fréquence usuelle, alors que le bus système était beaucoup plus rapide. Le bus système fonctionnait à une fréquence bien plus élevée, ce qui fait que le processeur pouvait communiquer à pleine vitesse, notamment avec la RAM. Le processeur n'était alors plus forcé à aller à la même fréquence que le bus ISA [[File:Architecture de l'IBM PC compatible avec bridge ISA.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible avec bridge ISA]] Les PC de l'époque intégraient donc plusieurs bus séparés. Vous avez bien lu : plusieurs bus ! Ici, il s'agit de ce que j'appelle des '''bus en cascade''', à savoir qu'un bus est connecté à un autre bus par un intermédiaire. Au passage, si j'aborde ces exemples, car c'est pareil sur les ordinateurs modernes. Le pont ISA a été remplacé par des circuits différents, mais qui ont un rôle assez similaire. Le ''chipset'' de votre carte mère n'est qu'un lointain descendant du pont ISA, qui s'interface avec des bus différents. ===L'arrivée des standards AT et IDE pour les disques durs=== Initialement, les disques durs étaient placés dans l'ordinateur et étaient connectés sur le bus ISA, via une carte d'extension ISA. En clair, il fallait connecter le disque dur sur une carte d'extension, et non sur la carte mère. Les cartes d'extension en question permettaient de connecter un ou plusieurs disques durs, parfois des lecteurs de disquette supplémentaires. Les cartes ISA de ce type faisaient juste l'interface entre le bus ISA et les disques durs, rien de plus. L'interface en question a été standardisée, ce qui a donné le standard ''AT Bus Attachment'', qui a été abrévié en ATA. Et ce n'était pas que pour les disques durs, de nombreux composants étaient dans ce cas. Une carte d'extension servait d'intermédiaire entre eux et la carte mère. Les cartes d'extension en question étaient appelées des ''Host bus adapter''. [[File:Acculogic sIDE-4 Controller ISA.jpg|centre|vignette|upright=2|Carte ISA d'interface disque dur, de marque Acculogic.]] Mais les choses ont rapidement évoluées, que ce soit du côté des cartes mères que du côté des disques durs. Le '''standard IDE''' a permis de brancher un disque dur directement sur la carte mère, sans passer par une carte d'interface ISA. Pour cela, la carte mère réservait un connecteur ISA pour le disque dur, renommé '''connecteur ATA'''. Pour que cela soit possible, il a fallu rajouter des circuits sur la carte mère. Tout ce qui était sur les cartes d'interface ISA s'est retrouvé sur la carte mère. [[File:Ajout des ports IDE sur la carte mère.png|centre|vignette|upright=2|Ajout des ports IDE sur la carte mère]] En réalité, les connecteurs ATA étaient des connecteurs ISA simplifiés. Un connecteur ISA avait en tout 98 broches, alors qu'un connecteur ATA n'en contient que 40. Les broches qui étaient inutiles pour les disques durs ont simplement été enlevées. Et qui dit connecteur spécialisé, dit câble spécialisé. Les disques durs étaient branchés sur le connecteur AT grâce à un câble ATA, sur lequel on pouvait connecter deux disques durs. [[File:ATA Plug.svg|centre|vignette|upright=2|Connecteur ATA.]] [[File:ATA cables.jpg|centre|vignette|upright=2|Cable ATA.]] Il était donc possible de connecter deux disques durs sur un seul connecteur ATA. Et cette possibilité est devenue d'autant plus utile par la suite. A partir de la version 2, ATA supportait aussi les lecteurs de disquettes, les lecteurs de CD/DVD, et bien d'autres supports de stockage. Il était alors possible de connecter un lecteur CD et un disque dur sur un seul connecteur. Les cartes mères avaient généralement deux connecteurs ATA, et n'avaient pas besoin de plus. C'était suffisant pour connecter un disque dur, un lecteur de disquette et un lecteur CD, configuration courante entre les années 90 et 2000. Un câble est donc connecté à deux supports de stockage. Pour distinguer les deux, le standard ATA ajoute une possibilité de configuration. Sur un câble, il doit y avoir un support de stockage "maitre" et un support "esclave". C'était la terminologie de l'époque, que je reproduis ici, même si elle est fortement trompeuse. N'allez pas croire que cela implique que l'un ait des avantages sur l'autre. Le support 'maitre" n'a pas droit à plus de bande passante, il n'a pas la priorité sur l'autre, rien du tout. Il s'agit juste d'un nombre qui permet de savoir avec qui le processeur communique, qui vaut 0 pour le premier support, 1 pour l'autre. Une sorte d'adresse de 1 bit, si l'on veut. [[File:ATA-Konfiguration02.png|centre|vignette|upright=2|Configuration ATA.]] Pour configurer un support de stockage en mode "maitre" ou "esclave", le support de stockage avait quelques pins dédiés. Il suffisait de placer un détrompeur en plastique sur les pins adéquats. Les pins se trouvaient à l'arrière du disque dur ou du lecteur de CD/DVD/Disquette/autre. [[File:HDD Master and Slave Description.jpg|centre|vignette|upright=2|Configuration ''Master/Slave''.]] ===L'architecture d'un PC avec un processeur Intel 486=== Maintenant, passons aux ordinateurs 32 bits, avec l'exemple d'un PC avec un processeur 486 d'Intel. A cette époque, le bus ISA était devenu trop limité et était en place d'être remplacé par le bus PCI, qui avait la même fonction. De nombreuses cartes d'extension utilisaient déjà ce standard et étaient branchées sur des connecteurs PCI dédiés, différents des connecteurs ISA. Intuitivement, on se dit que le bus PCI remplaçait le bus ISA, mais les choses étaient plus compliquées. Les disques durs gardaient leur connecteur ATA, et ne passaient pas par le bus PCI. Ils avaient un bus IDE séparé, qui était un bus ISA modifié. Là encore, les processeurs étaient devenus beaucoup plus rapides que le bus PCI. Les deux allaient à des fréquences assez différentes, ce qui fait que le bus PCI était séparé du bus système. Il y avait alors deux implémentations possibles. * La première utilise un répartiteur unique, relié au processeur, à la RAM, au bus PCI, et au bus IDE. * La seconde utilise un bus système séparé du bus PCI, avec un '''pont PCI''' pour faire l'interface entre les deux. Le '''''System Controler''''' était un circuit intégré, placé sur la carte mère, qui peut servir soit de pont PCI, soit de répartiteur. Le répartiteur PCI sert d'intermédiaire avec le bus PCI, mais aussi avec le bus IDE, utilisé pour les disques durs, aussi appelé le bus ''Parallel ATA''. Il peut aussi être connecté au processeur, à la mémoire RAM, ainsi qu'à la mémoire cache, mais cela ne sert que quand il est utilisé comme répartiteur. [[File:Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur.png|centre|vignette|upright=2|Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur]] Pour des raisons de compatibilité, le bus ISA avait été conservé, aux côtés du bus PCI. Il y avait un pont ISA en plus du pont/répartiteur PCI. Une implémentation possible aurait été de connecter les deux ponts ISA et PCI à un bus système unique. Mais cette solution n'a pas été retenue. La raison est que le bus PCI et le bus ISA ont des performances très différentes. Le bus PCI est très rapide, le bus ISA beaucoup plus lent. La différence est d'un ordre de grandeur, environ. Dans ces conditions, il est possible de faire passer les communications ISA à travers le bus PCI. Pour cela, le pont ISA est directement connecté sur le pont PCI, comme illustré ci-dessous. Et il en est de même pour le bus dédié aux disques durs. En effet, les disques durs étaient autrefois reliés au bus ISA, mais cela a changé depuis. Ils disposent maintenant de leur propre bus dédié, le '''bus IDE''', qui est un bus ISA simplifié. Et ce bus ISA simplifié était connecté directement sur le pont PCI. [[File:Architecture de l'IBM PC compatible avec pont PCI.png|centre|vignette|upright=2|Architecture de l'IBM PC compatible avec pont PCI]] Dans ce qui va suivre, nous allons étudier un exemple qui utilise un bus système séparé, avec un pont PCI, sans répartiteur. Voilà pour les grandes lignes, mais le schéma ci-dessous montre que tout est plus complexe. Vous remarquerez des connexions optionnelles entre le pont PCI et la mémoire RAM et la mémoire cache. La raison est que le pont PCI peut aussi servir de répartiteur en remplacement du bus système. Concrètement, on peut alors retirer le bus système. La mémoire, le bus PCI, le bus ISA, le bus IDE, le processeur et la RAM sont alors connectés au répartiteur PCI, qui sert d'intermédiaire central entre tous ces composants. Mais ce n'est pas la solution qui a été retenue dans notre exemple. [[File:Intel486-Typ PCI System.png|centre|vignette|upright=2|PC IBM compatible avec un 486, un bus PCI et un bus ISA. Le ''host bus'' est le bus système.]] Le pont ISA sert ici d'intermédiaire entre le bus système et le bus ISA. De plus, il a été amélioré sur de nombreux points. Il inclut notamment des circuits qui étaient autrefois sur la carte mère, à savoir le contrôleur DMA 82C87 et le contrôleur d'interruption 82C59, ainsi que les ''timers'' Intel 82C54. Les composants restants sont eux reliés sur un quatrième bus : le bus X, l'ancêtre du bus ''Low Pin Count''. Le bus X était celui du BIOS, du contrôleur de clavier, de la ''Real Time Clock'', et du contrôleur de périphérique 82091AA d'Intel. [[File:ISA Bridge schematic.png|centre|vignette|upright=2|ISA Bridge.]] ===L'architecture des PC des années 90-2000=== Par la suite, les ponts PCI et ISA ont évolué avec l'évolution des bus de l'ordinateur. Le bus ISA a progressivement été remplacé par d'autres bus, comme le bus ''Low Pin Count'', le bus PCI a été remplacé par le PCI Express, d'autres bus ont été ajoutés, etc. Mais la séparation du ''chipset'' en deux a été conservée. [[File:Chipset schematic.svg|vignette|upright=1.0|Chipset séparé en northbridge et southbridge.]] Le pont PCI et le pont ISA ont été remplacés respectivement par le '''pont nord''' et le '''pont sud''', plus connus par leurs noms anglais de ''northbridge'' et de ''southbridge''. Le pont nord servait d'interface entre le processeur, la mémoire et la carte graphique et est connecté à chacun par un bus dédié. Il intégrait aussi le contrôleur mémoire. Le pont sud est le répartiteur pour les composants lents, à savoir l'USB, l'Ethernet, etc. Le bus qui relie le processeur au pont nord était appelé le '''''Front Side Bus''''', abrévié en FSB. [[File:IMac Chipset.png|centre|vignette|upright=2|Chipset séparé en northbridge et southbridge.]] Un point important est que le bus PCI est devenu un bus assez lent, ce qui fait qu'il a finit par être connecté au pont sud. Le pont PCI est donc devenu le pont sud, dans le courant des années 2000. Durant un moment, un équivalent du pont ISA a subsisté dans un circuit de '''''Super IO'''''. Concrètement, il s'occupait du lecteur de disquette, du port parallèle, du port série, et des ports PS/2 pour le clavier et la souris. Mais il ne gérait pas le bus ISA, mais son remplaçant, le bus ''Low Pin Count''. [[File:Motherboard diagram fr.svg|centre|vignette|upright=1.5|Carte mère avec circuit Super IO.]] ===L'architecture des PC depuis les années 2000=== Depuis la sortie du processeur AMD Athlon 64, le pont nord a été fusionné dans le processeur. La fusion ne s'est pas faite en une fois, des fonctionnalités ont progressivement été progressivement intégrées dans le processeur. Le pont sud est resté, mais il a alors été progressivement connecté directement au processeur. La raison derrière cette intégration est que les processeurs avaient de plus en plus de transistors à leur disposition. Ils en ont profité pour intégrer le pont nord. Et cela permettait de simplifier le câblage des cartes mères, sans pour autant rendre vraiment plus complexe la fabrication du processeur. Les industriels y trouvent leur compte. La première étape a été l'intégration du contrôleur mémoire a été intégré au processeur. Concrètement, le résultat était que la mémoire RAM n'était plus connectée au pont nord, mais était connectée directement au processeur ! Il y a donc eu un retour d'un bus mémoire, mais spécialisé pour la mémoire RAM. En théorie, une telle intégration permet diverses optimisations quant aux transferts avec la mémoire RAM. Les transferts ne passent pas par un répartiteur, ce qui réduit le temps d'accès à la mémoire RAM. Ajoutons de sombres histoires de prefetching, d'optimisation des commandes, et j'en passe. Toujours est-il que le pont nord ne servait alors d'intermédiaire que pour les ports PCI Express, et le pont sud. [[File:X58 Block Diagram.png|centre|vignette|upright=2|Chipset X58 d'Intel.]] Par la suite, la carte graphique fût aussi connectée directement sur le processeur. Le processeur incorpore pour cela des contrôleurs PCI-Express. Le pont nord a alors disparu complétement, son intégration dans le processeur était complète. Sur les cartes mères Intel récentes, le pont sdud subsiste, il est appelé le ''Platform Controler Hub'', ou PCH. L'organisation des bus sur la carte mère qui résulte de cette connexion du processeur à la carte graphique, est illustrée ci-dessous, avec l'exemple du PCH. [[File:Intel 5 Series architecture.png|centre|vignette|upright=2|Intel 5 Series architecture]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=L'interface électrique entre circuits intégrés et bus | prevText=L'interface électrique entre circuits intégrés et bus | next=La hiérarchie mémoire | nextText=La hiérarchie mémoire }} </noinclude> jkofu64ilyzkscj36k4t222rlccc4qc 765745 765744 2026-05-01T22:06:47Z Mewtow 31375 /* Les microcontrôleurs */ 765745 wikitext text/x-wiki Dans les chapitres précédents, nous avons vu comment représenter de l'information, la traiter et la mémoriser avec des circuits. Mais un ordinateur n'est pas qu'un amoncellement de circuits et est organisé d'une manière bien précise. Il est structuré autour de trois circuits principaux : * un '''processeur''', qui manipule l'information et donne un résultat ; * une '''mémoire''' qui mémorise les données à manipuler ; * les '''entrées/sorties''', qui permettent à l'ordinateur de communiquer avec l'extérieur. [[File:Architecture Von Neumann.png|centre|vignette|upright=2|Architecture d'un système à mémoire.]] Pour faire simple, le processeur est un circuit qui s'occupe de faire des calculs. Rien d'étonnant à cela. Je rappelle que tout est codé par des nombres dans un ordinateur, ce qui fait que manipuler des nombres revient simplement à faire des calculs. Un ordinateur n'est donc qu'une grosse calculatrice améliorée, et le processeur est le composant qui fait les calculs. La mémoire s'occupe purement de la mémorisation des données, des nombres sur lesquelles faire des calculs. Pour être plus précis, il y a deux mémoires : une pour les données proprement dites, une autre pour le programme à exécuter. La première est la '''mémoire RAM''', la seconde est la '''mémoire ROM'''. Nous détaillerons ce que sont ces deux mémoires dans la suite du chapitre, mais sachez que nous avions déjà rencontré ces deux types de mémoires dans les chapitres sur les registres et les mémoires adressables. Les entrées-sorties permettent au processeur et à la mémoire de communiquer avec l'extérieur et d'échanger des informations avec des périphériques. Les '''périphériques''' regroupent, pour rappel, tout ce est branché sur un ordinateur, mais n'est pas à l'intérieur de celui-ci. Le processeur, les mémoires et les entrées-sorties communiquent ensemble via un '''réseau d'interconnexions'''. Le terme est assez barbare, mais rien de compliqué sur le principe. C'est juste un ensemble de fils électriques qui relie les différents éléments d'un ordinateur. Les interconnexions sont souvent appelées le bus de communication, mais le terme est un abus de langage, comme on le verra plus bas. Afin de simplifier les explications, on va supposer que le réseau d'interconnexion est le suivant. Tout est connecté au processeur. Il y a des interconnexions entre le processeur et la mémoire RAM, d'autres interconnexions entre processeur et mémoire ROM, et d'autres entre le processeur et les entrées-sorties. Nous verrons que d'autres réseaux d'interconnexions fusionnent certaines interconnexions, pour les partager entre la ROM et la RAM, par exemple. Mais pour le moment, gardez le schéma ci-dessous en tête. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ==Les mémoires RAM et ROM== La mémoire est le composant qui mémorise des informations, des données. Dans la majorité des cas, la mémoire est composée de plusieurs '''cases mémoire''', chacune mémorisant plusieurs bits, le nombre de bits étant identique pour toutes les cases mémoire. Dans le cas le plus simple, une case mémoire mémorise un '''octet''', un groupe de 8 bits. Mais les mémoires modernes mémorisent plusieurs octets par case mémoire : elles ont des cases mémoires de 16, 32 ou 64 bits, soit respectivement 2/4/8 octets. De rares mémoires assez anciennes utilisaient des cases mémoires contenant 1, 2, 3, 4, 5, 6 7, 13, 17, 23, 36 ou 48 bits. Mais ce n'était pas des mémoires électroniques, aussi nous allons les passer sous silence. Tout ce qu'il faut savoir est que la quasi-totalité des mémoires électronique a un ou plusieurs octets par case mémoire. Pour simplifier, vous pouvez imaginer qu'une mémoire RAM est un regroupement de registre, chacun étant une case mémoire. C'est une description pas trop mauvaise pour décrire les mémoires RAM, qu'on abordera dans ce qui suit. {|class="wikitable" |+ Contenu d'une mémoire, case mémoire de 16 bits (deux octets) |- ! Case mémoire N°1 | 0001 0110 1111 1110 |- ! Case mémoire N°2 | 1111 1110 0110 1111 |- ! Case mémoire N°3 | 0001 0000 0110 0001 |- ! Case mémoire N°4 | 1000 0110 0001 0000 |- ! Case mémoire N°5 | 1100 1010 0110 0001 |- ! ... | ... |- ! Case mémoire N°1023 | 0001 0110 0001 0110 |- ! Case mémoire N°1024 | 0001 0110 0001 0110 |} Dans ce cours, il nous arrivera de partir du principe qu'il y a un octet par case mémoire, par souci de simplification. Mais ce ne sera pas systématique. De plus, il nous arrivera d'utiliser le terme adresse pour parler en réalité de la case mémoire associée, par métonymie. ===La capacité mémoire=== Bien évidemment, une mémoire ne peut stocker qu'une quantité finie de données. Et à ce petit jeu, certaines mémoires s'en sortent mieux que d'autres et peuvent stocker beaucoup plus de données que les autres. La '''capacité''' d'une mémoire correspond à la quantité d'informations que celle-ci peut mémoriser. Plus précisément, il s'agit du nombre maximal de bits qu'une mémoire peut contenir. Elle est le produit entre le nombre de cases mémoire, et la taille en bit d'une case mémoire. Toutes les mémoires actuelles utilisant des cases mémoire d'un ou plusieurs octets, ce qui nous arrange pour compter la capacité d'une mémoire. Au lieu de compter cette capacité en bits, on préfère mesurer la capacité d'une mémoire avec le nombre d'octets qu'elle contient. Mais les mémoires des PC font plusieurs millions ou milliards d'octets. Pour se faciliter la tâche, on utilise des préfixes pour désigner les différentes capacités mémoires. Vous connaissez sûrement ces préfixes : kibioctets, mébioctets et gibioctets, notés respectivement Kio, Mio et Gio. {|class="wikitable" |- !Préfixe!!Capacité mémoire en octets!!Puissance de deux |- ||Kio||1024||2<sup>10</sup> octets |- ||Mio||1 048 576||2<sup>20</sup> octets |- ||Gio||1 073 741 824||2<sup>30</sup> octets |} On peut se demander pourquoi utiliser des puissances de 1024, et ne pas utiliser des puissances un peu plus communes ? Dans la majorité des situations, les électroniciens préfèrent manipuler des puissances de deux pour se faciliter la vie. Par convention, on utilise souvent des puissances de 1024, qui est la puissance de deux la plus proche de 1000. Or, dans le langage courant, kilo, méga et giga sont des multiples de 1000. Quand vous vous pesez sur votre balance et que celle-ci vous indique 58 kilogrammes, cela veut dire que vous pesez 58 000 grammes. De même, un kilomètre est égal à 1000 mètres, et non 1024 mètres. Autrefois, on utilisait les termes kilo, méga et giga à la place de nos kibi, mebi et gibi, par abus de langage. Mais peu de personnes sont au courant de l'existence de ces nouvelles unités, et celles-ci sont rarement utilisées. Et cette confusion permet aux fabricants de disques durs de nous « arnaquer » : Ceux-ci donnent la capacité des disques durs qu'ils vendent en kilo, méga ou giga octets : l’acheteur croit implicitement avoir une capacité exprimée en kibi, mébi ou gibi octets, et se retrouve avec un disque dur qui contient moins de mémoire que prévu. ===Lecture et écriture : mémoires ROM et RWM=== Pour simplifier grandement, on peut grossièrement classer les mémoires en deux types : les ''Read Only Memory'' et les ''Read Write Memory'', aussi appelées mémoires ROM et mémoires RWM. Pour les '''mémoires ROM''', on ne peut pas modifier leur contenu. On peut y récupérer une donnée ou une instruction : on dit qu'on y accède en lecture. Mais on ne peut pas modifier les données qu'elles contiennent. Quant aux '''mémoires RWM''', on peut y accéder en lecture (récupérer une donnée stockée en mémoire), mais aussi en écriture : on peut stocker une donnée dans la mémoire, ou modifier une donnée existante. Tout ordinateur contient au minimum une ROM et une RWM (souvent une mémoire RAM), les deux n'ont pas exactement le même rôle. Pour simplifier, la mémoire ROM mémorise le programme à exécuter, la mémoire RWM stocke des données. Il a existé des ordinateurs où la mémoire RWM était une mémoire magnétique, voire acoustique, mais ce n'est plus le cas de nos jours. Pour les ordinateurs modernes, la mémoire RWM est une mémoire électronique. Pour faire la différence avec ces anciennes mémoires RWM, elle est appelée la '''mémoire RAM'''. Il s'agit d'une mémoire qui stocke temporairement des données que le processeur doit manipuler (on dit qu'elle est volatile). Elle s'efface complètement quand on coupe l'alimentation de l'ordinateur. Il existe d'autres différences entre mémoire RWM et RAM : * la mémoire RWM peut ne pas être volatile et donc conserver les données écrites ; * la mémoire RAM possède un temps d'accès constant aux données (quelle que soit l'adresse), ce qui n'est pas garanti pour les mémoires RWM. Outre le programme à exécuter, la mémoire ROM peut mémoriser des constantes, des données qui ne changent pas. Elles ne sont jamais modifiées et gardent la même valeur quoi qu'il se passe lors de l'exécution du programme. En conséquence, elles ne sont jamais accédées en écriture durant l'exécution du programme, ce qui fait que leur place est dans une mémoire ROM. La mémoire RWM est alors destinée aux données temporaires, qui changent ou sont modifiées lors de l'exécution du programme, et qui sont donc manipulées aussi bien en lecture et en écriture. La mémoire RWM mémorise alors les variables du programme à exécuter, qui sont des données que le programme va manipuler. Pour les systèmes les plus simples, la mémoire RWM ne sert à rien de plus. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Pour donner un exemple de données stockées en ROM, on peut prendre l'exemple des anciennes consoles de jeu 8 et 16 bits. Les jeux vidéos sur ces consoles étaient placés dans des cartouches de jeu, précisément dans une mémoire ROM à l'intérieur de la cartouche de jeu. La ROM mémorisait non seulement le code du jeu, le programme du jeu vidéo, mais aussi les niveaux et les ''sprites'' et autres données graphiques. Une conséquence est que les consoles 8/16 bits n'avaient pas besoin de beaucoup de RAM, comparé aux ordinateurs de l'époque, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. À l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. ===L'adressage mémoire=== Sur une mémoire RAM ou ROM, on ne peut lire ou écrire qu'une case mémoire, qu'un registre à la fois : une lecture ou écriture ne peut lire ou modifier qu'une seule case mémoire. Techniquement, le processeur doit préciser à quel case mémoire il veut accéder à chaque lecture/écriture. Pour cela, chaque case mémoire se voit attribuer un nombre binaire unique, l''''adresse''', qui va permettre de le sélectionner et de l'identifier celle-ci parmi toutes les autres. En fait, on peut comparer une adresse à un numéro de téléphone (ou à une adresse d'appartement) : chacun de vos correspondants a un numéro de téléphone et vous savez que pour appeler telle personne, vous devez composer tel numéro. Les adresses mémoires en sont l'équivalent pour les cases mémoire. [[File:Adressage mémoire.png|centre|vignette|upright=2|Exemple : on demande à la mémoire de sélectionner la case mémoire d'adresse 1002 et on récupère son contenu (ici, 17).]] L'adresse mémoire est générée par le processeur. Le processeur peut parfaitement calculer des adresses, en extraire du programme qu'il exécute, et bien d'autres choses. Nous détaillerons d'ailleurs les mécanismes pour dans les chapitres portant sur les modes d'adressage du processeur. Mais pour le moment, nous avons juste besoin de savoir que c'est le processeur qui envoie des adresses aux mémoires RAM et ROM. Les adresses générées par le processeur sont alors envoyées à la RAM ou la ROM via une connexion dédiée, un ensemble de fils qui connecte le processeur à la mémoire : le '''bus d'adresse mémoire'''. L'adresse sélectionne une case mémoire, le processeur peut alors récupérer la donnée dedans pour une lecture, écrire une donnée pour l'écriture. Pour cela, un second ensemble de fil connecte le processeur à la RAM/ROM, mais cette fois-ci pour échanger des données. Il s'agit du '''bus de données mémoire'''. Les deux sont souvent regroupés sous le terme de '''bus mémoire'''. Un ordinateur contient toujours une RAM et une ROM, ce qui demande aux bus mémoire de s'adapter à la présence de deux mémoires. Il y a alors deux solutions, illustrées dans les deux schémas ci-dessous. Avec la première, il y a un seul bus mémoire partagé entre la RAM et la ROM, comme illustré ci-dessous. Une autre solution utilise deux bus séparés : un pour la RAM et un autre pour la ROM. Nous verrons les différences pratiques entre les deux à la fin du chapitre. Pour le moment, nous allons partir du principe qu'il y a un bus pour la mémoire ROM, et un autre bus pour la RAM. [[File:CPT-System-Architecture-gapfill1-ANS.svg|centre|vignette|upright=2|Architecture avec une ROM et une RAM.]] [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ===L'alignement mémoire : introduction=== Plus haut, nous avions dit qu'il y a une adresse par case mémoire, chaque case mémoire contenant un ou plusieurs octets. Mais les processeurs modernes partent du principe que la mémoire a un octet par adresse, pas plus. Et ce même si la mémoire reliée au processeur utilise des cases mémoires de 2, 3, 4 octets ou plus. D'ailleurs, la majorité des mémoires RAM actuelle a des cases mémoires de 64 bits, soit 8 octets par case mémoire. Les raisons à cela sont multiple, mais nous les verrons en détail dans le chapitre sur l'alignement mémoire. Toujours est-il qu'il faut distinguer les '''adresses mémoire''' et les '''adresses d'octet''' gérées par le processeur. Le processeur génère des adresses d'octet, qui permettent de sélectionner un octet bien précis. L'adresse d'octet permet de sélectionner un octet parmi tous les autres. Mais la mémoire ne comprend pas directement cette adresse d'octet. Heureusement, l'octet en question est dans une case mémoire bien précise, qui a elle-même une adresse mémoire bien précise. L'adresse d'octet est alors convertie en une adresse mémoire, qui sélectionne la case mémoire adéquate, celle qui contient l'octet voulu. La case mémoire entière est lue, puis le processeur ne récupère que les données adéquates. Pour cela, des circuits d'alignement mémoire se chargent de faire la conversion entre adresses du processeur et adresse mémoire. Nous verrons cela dans le détail dans le chapitre sur l'alignement mémoire. Il existe des mémoires qui n'utilisent pas d'adresses mémoire, mais passons : ce sera pour la suite du cours. ==Le processeur== Dans les ordinateurs, l'unité de traitement porte le nom de '''processeur''', ou encore de '''''Central Processing Unit''''', abrévié en CPU. Le rôle principal du processeur est de faire des calculs. La plupart des processeurs actuels supportent au minimum l'addition, la soustraction et la multiplication. Quelques processeurs ne gèrent pas la division, qui est une opération très gourmande en circuit, peu utilisée, très lente. Il arrive que des processeurs très peu performants ne gèrent pas la multiplication, mais c'est assez rare. Un processeur ne fait pas que des calculs. Tout processeur est conçu pour effectuer un nombre limité d'opérations bien précises, comme des calculs, des échanges de données avec la mémoire, etc. Ces opérations sont appelées des '''instructions'''. Les plus intuitives sont les '''instructions arithmétiques''', qui font des calculs, comme l'addition, la soustraction, la multiplication, la division. Mais il y a aussi des '''instructions d'accès mémoire''', qui échangent des données entre la mémoire RAM et le processeur. Les autres instructions ne sont pas très intuitives, aussi passons-les sous silence pour le moment, tout deviendra plus clair dans les chapitres sur le processeur. ===Le processeur exécute un programme, une suite d'instructions=== Tout processeur est conçu pour exécuter une suite d'instructions dans l'ordre demandé, cette suite s'appelant un '''programme'''. Ce que fait le processeur est défini par la suite d'instructions qu'il exécute, par le programme qu'on lui demande de faire. Les instructions sont exécutées dans un ordre bien précis, les unes après les autres. L'ordre en question est décidé par le programmeur. La totalité des logiciels présents sur un ordinateur sont des programmes comme les autres. Le programme à exécuter est stockée dans la mémoire de l'ordinateur. C'est ainsi que l'ordinateur est rendu programmable : modifier le contenu de la mémoire permet de changer le programme exécuté. Mine de rien, cette idée de stocker le programme en mémoire est ce qui a fait que l’informatique est ce qu'elle est aujourd’hui. C'est la définition même d'ordinateur : appareil programmable qui stocke son programme dans une mémoire modifiable. Une instruction est codée comme les données : sous la forme de suites de bits. Telle suite de bit indique qu'il faut faire une addition, telle autre demande de faire une soustraction, etc. Pour simplifier, nous allons supposer qu'il y a une instruction par adresse mémoire. Sur la grosse majorité des ordinateurs, les instructions sont placées les unes à la suite des autres dans l'ordre où elles doivent être exécutées. Un programme informatique n'est donc qu'une vulgaire suite d'instructions stockée quelque part dans la mémoire de l'ordinateur. {|class="wikitable" |+ Exemple de programme informatique |- ! Adresse ! Instruction |- ! 0 | Copier le contenu de l'adresse 0F05 dans le registre numéro 5 |- ! 1 | Charger le contenu de l'adresse 0555 dans le registre numéro 4 |- ! 2 | Additionner ces deux nombres |- ! 3 | Charger le contenu de l'adresse 0555 |- ! 4 | Faire en XOR avec le résultat antérieur |- ! ... | ... |- ! 5464 | Instruction d'arrêt |} Pour exécuter une suite d'instructions dans le bon ordre, le processeur détermine à chaque cycle quelle est la prochaine instruction à exécuter. Pour cela, le processeur mémorise l'adresse de l'instruction en cours dans un registre : le '''Program Counter'''. Je rappelle que des instructions consécutives sont dans des adresses consécutives. Pour passer à la prochaine instruction, il suffit donc d'incrémenter le ''program counter''. : Si une instruction prend plusieurs octets, plusieurs adresses, il suffit de l'incrémenter du nombre d'octets/adresses. D'autres processeurs font autrement : chaque instruction précise l'adresse de la suivante, directement dans la suite de bit représentant l'instruction en mémoire. Ces processeurs n'ont pas besoin de calculer une adresse qui leur est fournie sur un plateau d'argent. Sur des processeurs aussi bizarres, pas besoin de stocker les instructions en mémoire dans l'ordre dans lesquelles elles sont censées être exécutées. Mais ces processeurs sont très très rares et peuvent être considérés comme des exceptions à la règle. Nous venons de voir qu'un processeur contient un registre appelé le ''program counter''. Mais il n'est pas le seul. Pour pouvoir fonctionner, tout processeur doit mémoriser un certain nombre d’informations nécessaires à son fonctionnement, qui sont mémorisées dans des '''registres de contrôle'''. La plupart ont des noms assez barbares (registre d'état, ''program counter'') et nous ne pouvons pas en parler à ce moment du cours. Nous les verrons en temps voulu, mais il est important de préciser qu'ils existent. ===L'intérieur d'un processeur=== Fort de ce que nous savons, nous pouvons expliquer ce qu'il y a à l'intérieur d'un processeur. Le premier point est qu'un processeur fait des calculs, ce qui implique qu'il contient des circuits de calcul. Ils sont regroupés dans une ou plusieurs '''unités de calcul'''. Nous avons déjà vu comment fabriquer une unité de calcul simple, dans un chapitre dédié, et c'est la même qui est présente dans un processeur. Du moins dans les grandes lignes, les circuits des processeurs modernes étant particulièrement optimisés. Il en est de même pour les autres circuits de calcul comme ceux pour les multiplications/division/autres. Si le processeur fait des calculs, qu'en est-il des opérandes ? Et où sont mémorisés les résultats des opérations ? Pour cela, le processeur incorpore des '''registres généraux'''. Les registres généraux servent à mémoriser les opérandes et résultats des instructions. Ils mémorisent des données, contrairement aux registres de contrôle mentionnés plus haut. Le nombre de registres généraux dépend grandement du processeur. Les tout premiers processeurs se débrouillaient avec un seul registre, mais les processeurs actuels utilisent plusieurs registres, pour mémoriser plusieurs opérandes/résultats. Mais la présence de registres est source de pas mal de petites complications. Par exemple, il faut échanger les données entre la RAM et les registres, il faut gérer l'adressage des registres, etc. Il s'agit là de détails que nous expliquerons dans les chapitres sur le processeur. Le processeur contient enfin un circuit pour interpréter les instructions, appelé l''''unité de contrôle'''. Elle lit les instructions depuis la mémoire, interprète la suite de bit associée, et commande le reste du processeur pour qu'il exécute l'instruction. Ses fonctions sont assez variées, mais nous allons simplifier en disant qu'elle configure l'unité de calcul et les registres pour faire le bon calcul. Son rôle est d'analyser la suite de bit qui constitue l'instruction, et d'en déduire quelle opération effectuer. Elle gère aussi l'accès à la mémoire RAM, et notamment ce qui est envoyé sur son bus d'adresse. : Dans ce qui suit, on suppose que le ''program counter'' fait partie de l'unité de contrôle. Pour résumer, un processeur contient une unité de calcul, des registres et une interface avec la mémoire RAM. Le tout est interconnecté, afin de pouvoir échanger des données. L’ensemble forme le '''chemin de données''', nom qui trahit le fait que c'est là que les données se déplacent et sont traitées. Il faut aussi ajouter l'unité de contrôle pour commander le tout. Elle lit les instructions en mémoire, puis commande le chemin de données pour que l'instruction soit exécutée correctement. [[File:Microarchitecture d'un processeur.png|centre|vignette|upright=2|Microarchitecture d'un processeur]] Un processeur parait donc assez simple expliqué comme ça, mais il y a de nombreuses subtilités. L'une d'entre elle est liée aux registres, et notamment à la manière dont on les utilise. Pour expliquer ces subtilités, nous allons voir comment les premiers processeurs fonctionnaient, avant de passer aux processeurs un peu plus modernes. Les tout premiers processeurs n'utilisaient qu'un seul registre, ce qui fait que l'utilisation des registres était très simple. Le passage à plusieurs registres a complexifié le tout. ===D'où viennent les adresses ?=== Il est maintenant temps de répondre à une question qui s'était posée dans la section sur l'adressage : d'où viennent les adresses envoyées à la mémoire ? Pour ce qui est des adresses des instructions, on connait déjà la réponse : c'est le ''program counter'' qui gère tout. Mais pour les données, il y a deux possibilités, qui correspondent à deux types de données : les données statiques et les données dynamiques. Les '''données statiques''' sont les plus simples : elles existent durant toute la durée de vie du programme. Tant que celui-ci s'exécute, il aura besoin de ces données. En conséquence, il leur réserve une place en mémoire, qui est toujours la même. La donnée se situe donc à une adresse bien précise, qui ne change jamais. Attention cependant : les données peuvent être modifiées, changer de valeur. Le programme écrit dans les donnée statiques, c'est même assez fréquent. Ce sont ne sont pas forcément des données constantes ! Pour les données statiques, elles sont toujours placées à la même adresse mémoire. Pour le dire autrement, l'adresse mémoire est une constante, qui ne change pas. L'adresse est connue avant d’exécuter le programme, le programme a été codé pour utiliser cette adresse pour telle donnée, on a réservé une adresse pour la donnée voulue. Et même si vous quittez le programme et vous le relancez plusieurs jours après, l'adresse mémoire sera la même avant et après. Et cela permet d'utiliser l''''adressage direct'''. L'idée est que les instructions précisent donc l'adresse à lire ou écrire. Pour cela, l'adresse est intégrée dans l’instruction elle-même. Pour rappel, l'instruction est codée par une suite de bit en mémoire RAM/ROM, dont certains précisent l'opération à faire, les autres servant à autre chose. L'idée est que certains bits précisent l'adresse mémoire de la donnée à lire. Les instructions sont donc du genre : * ''LOAD 56'' - lit l'adresse numéro 56 et copie son contenu dans un registre; * ''STORE R5 , adress 99'', copie le registre R5 dans l'adresse 99 ; * ''ADD R5 , adress 209'' : additionne le registre R5 avec le contenu de l'adresse 209. S'il existe des données statiques, c'est signe qu'il existe des '''données dynamiques'''. Ces dernières sont des données qui sont créées ou détruites selon les besoins. Pour comprendre d'où viennent ces données dynamiques, prenons le cas d'une personne qui écrit du texte sur un ordinateur. Le texte qu'il écrit est mémorisé dans la RAM de l’ordinateur, puis est sauvegardé sur le disque dur quand il sauvegarde son document. Au fur et à mesure qu'il écrit du texte, la RAM utilisée par ce texte augmente. Donc, ce texte est une donnée dynamique, dont la taille varie dans le temps. Pour gérer des données dynamiques, la plupart des systèmes d'exploitation incorporent des fonctionnalités d''''allocation mémoire'''. Derrière ce nom barbare, se cache quelque chose de simple : les programmes peuvent réclamer de la mémoire au système d'exploitation, pour y placer les données qu'ils souhaitent. Les langages de programmation bas niveau supportent des fonctions comme malloc(), qui permettent de demander un bloc de mémoire de N octets à l'OS, qui doit alors accommoder la demande. De même, un programme peut libérer de la mémoire qu'il n'utilise plus avec des fonctions comme free(). Avec l'allocation mémoire, les données n'ont pas de place fixe en mémoire. Leur adresse mémoire peut varier d'une exécution du programme à l'autre. Pire que ça : les données peuvent être déplacées dans la mémoire RAM, si besoin. En clair : l'adresse est déterminée lors de l'exécution du programme. L'adresse est alors soit calculée, soit lue depuis la mémoire RAM, soit déterminée autrement. Toujours est-il qu'elle se retrouve dans un registre général. Pour gérer ces adresse variables, les processeurs utilisent l''''adressage indirect'''. L'adressage indirect permet d'utiliser une adresse qui est dans un registre de données. L'adresse en question peut être envoyée à la mémoire RAM sans problème, le processeur peut automatiquement connecter le registre adéquat sur le bus d'adresse. Au tout début de l'informatique, les processeurs ne supportaient que l'adressage direct, pas plus. L'adressage indirect n'était tout simplement pas possible. Avec l'adressage direct, l'adresse à lire est extraite directement des instructions, par l'unité de contrôle. Le bus d'adresse de la RAM est alors relié directement à l'unité de contrôle, le bus de données est relié aux registres. [[File:Architecture Harvard avec adressage direct uniquement.png|centre|vignette|upright=2|Architecture Harvard avec adressage direct uniquement]] Mais dès les années 70, l'adressage indirect est apparu, rendant la programmation bien plus simple. Mais cela a demandé quelques adaptation au niveau du processeur. Avec l'adressage indirect, le bus d'adresse est connecté aux registres. Il a donc fallu rajouter un multiplexeur pour que le processeur décide de relier le bus d'adresse soit aux registres, soit à l'unité de contrôle. ===Un ordinateur peut avoir plusieurs processeurs=== La plupart des ordinateurs n'ont qu'un seul processeur, ce qui fait qu'on désigne avec le terme d''''ordinateurs mono-processeur'''. Mais il a existé (et existe encore) des '''ordinateurs multi-processeurs''', avec plusieurs processeurs sur la même carte mère. L'idée était de gagner en performance : deux processeurs permettent de faire deux fois plus de calcul qu'un seul, quatre permettent d'en faire quatre fois plus, etc. C'est très courant sur les supercalculateurs, des ordinateurs très puissants conçus pour du calcul industriel ou scientifique, mais aussi sur les serveurs ! Dans le cas le plus courant, ils utilisent plusieurs processeurs identiques : on utilise deux processeurs Core i3 de même modèle, ou quatre Pentium 3, etc. Pour utiliser plusieurs processeurs, les programmes doivent être adaptés. Pour cela, il y a plusieurs possibilités : * Une première possibilité, assez intuitive, est d’exécuter des programmes différents sur des processeurs différents. Par exemple, on exécute le navigateur web sur un processeur, le lecteur vidéo sur un autre, etc. * La seconde option est de créer des programmes spéciaux, qui utilisent plusieurs processeurs. Ils répartissent les calculs à faire sur les différents processeurs. Un exemple est la lecture d'une vidéo sur le web : un processeur peut télécharger la vidéo pendant le visionnage et bufferiser celle-ci, un autre processeur peut décoder la vidéo, un autre décoder l'audio. De tels programmes restent des suites d'instructions, mais ils sont plus complexes que les programmes normaux, aussi nous les passons sous silence. * La troisième option est d’exécuter le même programme sur les différents processeurs, mais chaque processeur traite son propre ensemble de données. Par exemple, pour un programme de rendu 3D, quatre processeurs peuvent s'occuper chacun d'une portion de l'image. [[File:Architecture de Von Neumann Princeton multi processeurs.svg|centre|vignette|upright=2|Architecture de Von Neumann Princeton multi processeurs]] De nos jours, les ordinateurs grand public les plus utilisés sont dans un cas intermédiaire, ils ne sont ni mono-, ni multi-processeur. Ils n'ont qu'un seul processeur, dans le sens où si on ouvre l'ordinateur et qu'on regarde la carte mère, il n'y a qu'un seul processeur. Mais ce processeur est en réalité assez similaire à un regroupement de plusieurs processeurs dans le même boitier. Il s'agit de '''processeurs multicœurs''', qui contiennent plusieurs cœurs, chaque cœur pouvant exécuter un programme tout seul. La différence entre cœur et processeur est assez difficile à saisir, mais pour simplifier : un cœur est l'ensemble des circuits nécessaires pour exécuter un programme. Chaque cœur dispose de toute la machinerie électronique pour exécuter un programme, à savoir des circuits aux noms barbares comme : un séquenceur d'instruction, des registres, une unité de calcul. Par contre, certains circuits d'un processeur ne sont présents qu'en un seul exemplaire dans un processeur multicœur, comme les circuits de communication avec la mémoire ou les circuits d’interfaçage avec la carte mère. Suivant le nombre de cœurs présents dans notre processeur, celui-ci sera appelé un processeur double-cœur (deux cœurs), quadruple-cœur (4 cœurs), octuple-cœur (8 cœurs), etc. Un processeur double-cœur est équivalent à avoir deux processeurs dans l'ordinateur, un processeur quadruple-cœur est équivalent à avoir quatre processeurs dans l'ordinateur, etc. Ces processeurs sont devenus la norme dans les ordinateurs grand public et les logiciels et systèmes d'exploitation se sont adaptés. ===Les coprocesseurs=== Quelques ordinateurs assez anciens disposaient de '''coprocesseurs''', des processeurs qui complémentaient un processeur principal. Les ordinateurs de ce type avaient un processeur principal, le '''CPU''', qui était secondé par un ou plusieurs coprocesseurs. Sauf exception, le CPU et le coprocesseur exécutent des programmes différents, ils travaillent en parallèle. Les coprocesseurs les plus connus sont les '''coprocesseurs pour le rendu 2D/3D'''. Ils ont eu leur heure de gloire sur les anciennes consoles de jeux vidéo, comme Super Nintendo, la Playstation et autres consoles de cette génération ou antérieure. Ils s'occupaient respectivement de calculer les graphismes des jeux vidéos. De nos jours, ils ont été remplacés par des cartes graphiques, ou des ''Graphic Processing Units'', qui ne sont pas considérées comme des coprocesseurs. Les '''coprocesseurs sonores''' sont une sorte d'ancêtre des cartes son, utilisés sur les anciennes consoles de jeux vidéo, comme La Nintendo 64, la Playstation et autres consoles antérieures. Ils s'occupaient respectivement de calculer tout ce qui a trait au son. Pour donner un exemple, on peut citer la console Neo-géo, qui disposait de deux processeurs travaillant en parallèle : un processeur principal, et un coprocesseur sonore. Le processeur principal était un Motorola 68000, alors que le coprocesseur sonore était un processeur Z80. L'accès aux périphériques est quelque chose sur lequel nous passerons plusieurs chapitres dans ce cours. Mais sachez que l'accès aux périphériques peut demander pas mal de puissance de calculs. Le CPU principal peut faire ce genre de calculs par lui-même, mais il n'est pas rare qu'un '''coprocesseur d'IO''' soit dédié à l'accès aux périphériques. Un exemple assez récent est celui de la console de jeu Nintendo 3DS. Elle disposait d'un processeur principal de type ARM9, d'un coprocesseur pour les divisions qu'on abordera plus bas, et d'un second processeur ARM7. L'ARM 7 était utilisé comme coprocesseur d'I/O, ainsi que pour l'émulation de la console GBA. [[File:Asmp 2.gif|centre|vignette|upright=2|Co-processeur pour l'accès aux entrées-sorties.]] Les '''coprocesseurs arithmétiques''' sont un peu à part des autres. Ils sont spécialisés dans les calculs en virgule flottante. Ils étaient utilisés à une époque où les CPU ne géraient que des calculs entiers (en binaire ou en BCD). Un exemple est le coprocesseur flottant x87, complémentaire des premiers processeurs Intel x86. Il y a eu la même chose sur les processeurs Motorola 68000, avec deux coprocesseurs flottants appelés les Motorola 68881 et les Motorola 68882. Un exemple récent de coprocesseur est celui utilisé sur la console de jeu Nintendo DS. La console utilisait deux processeurs, un ARM9 et un ARM7, qui ne pouvaient pas faire de division entière. Il s'agit pourtant d'opérations importantes dans le cas du rendu 3D, ce qui fait que les concepteurs de la console ont rajouté un coprocesseur spécialisé dans les divisions entières et les racines carrées. Le coprocesseur était adressable directement par le processeur, comme peuvent l'être la RAM ou les périphériques. ==Les entrées-sorties== Tous les circuits vus précédemment traitent des données codées en binaire. Ceci dit, les données ne sortent pas de n'importe où : l'ordinateur contient des composants électroniques qui traduisent des informations venant de l’extérieur en nombres. Ces composants sont ce qu'on appelle des '''entrées'''. Par exemple, le clavier est une entrée : l'électronique du clavier attribue un nombre entier (''scancode'') à une touche, nombre qui sera communiqué à l’ordinateur lors de l'appui d'une touche. Pareil pour la souris : quand vous bougez la souris, celle-ci envoie des informations sur la position ou le mouvement du curseur, informations qui sont codées sous la forme de nombres. La carte son évoquée il y a quelques chapitres est bien sûr une entrée : elle est capable d'enregistrer un son, et de le restituer sous la forme de nombres. S’il y a des entrées, on trouve aussi des '''sorties''', des composants électroniques qui transforment des nombres présents dans l'ordinateur en quelque chose d'utile. Ces sorties effectuent la traduction inverse de celle faite par les entrées : si les entrées convertissent une information en nombre, les sorties font l'inverse : là où les entrées encodent, les sorties décodent. Par exemple, un écran LCD est un circuit de sortie : il reçoit des informations, et les transforme en image affichée à l'écran. Même chose pour une imprimante : elle reçoit des documents texte encodés sous forme de nombres, et permet de les imprimer sur du papier. Et la carte son est aussi une sortie, vu qu'elle transforme les sons d'un fichier audio en tensions destinées à un haut-parleur : c'est à la fois une entrée, et une sortie. Les '''entrées-sorties''' incluent toutes les entrées et sorties, et même certains composants qui sont les deux à la fois. Il s'agit d'un terme générique, qui regroupe des composants forts différents. Dans ce qui va suivre, nous allons parfois parler de périphériques au lieu d'entrées-sorties, mais les deux termes ne sont pas équivalents. Dans le détail, les entrées-sorties regroupent : * Les '''périphériques''' sont les composants connectés sur l'unité centrale. Exemple : les claviers, souris, webcam, imprimantes, écrans, clés USB, disques durs externes, la Box internet, etc. * Les '''cartes d'extension''', qui se connectent sur la carte mère via un connecteur, comme les cartes son ou les cartes graphiques. * D'autres composants sont soudés à la carte mère mais sont techniquement des entrées-sorties : les cartes sons soudées sur les cartes mères actuelles, par exemple. ===L'interface avec le reste de l'ordinateur=== Les entrées-sorties sont très diverses, fonctionnent très différemment les unes des autres. Mais du point de vue du reste de l'ordinateur, les choses sont relativement standardisées. Du point de vue du processeur, les entrées-sorties sont juste des paquets de registres ! Tous les périphériques, toutes les entrées-sorties contiennent des '''registres d’interfaçage''', qui permettent de faire l'intermédiaire entre l'entrée/sortie et le reste de l'ordinateur. L'entrée/sortie est conçu pour réagir automatiquement quand on écrit dans ces registres. [[File:Registres d'interfaçage.png|centre|vignette|upright=2|Registres d'interfaçage.]] Les registres d’interfaçage sont assez variés. Les plus évidents sont les '''registres de données''', qui permettent l'échange de données entre le processeur et les périphériques. Pour échanger des données avec l'entrée/sortie, le processeur a juste à lire ou écrire dans ces registres de données. On trouve généralement un registre de lecture et un registre d'écriture, mais il se peut que les deux soient fusionnés en un seul registre d’interfaçage de données. Si le processeur veut envoyer une donnée à une entrée/sortie, il a juste à écrire dans ces registres. Inversement, s'il veut lire une donnée, il a juste à lire le registre adéquat. Mais le processeur ne fait pas que transmettre des données à l'entrée/sortie. Le processeur lui envoie aussi des « commandes », des valeurs numériques auxquelles l'entrée/sortie répond en effectuant un ensemble d'actions préprogrammées. En clair, ce sont l'équivalent des instructions du processeur, mais pour l'entrée/sortie. Par exemple, les commandes envoyées à une carte graphique peuvent être : affiche l'image présente à cette adresse mémoire, calcule le rendu 3D à partir des données présentes dans ta mémoire, etc. Pour recevoir les commandes, l'entrée/sortie contient des ''registres de commande'' qui mémorisent les commandes envoyées par le processeur. Quand le processeur veut envoyer une commande à l'entrée/sortie, il écrit la commande en question dans ce ou ces registres. Enfin, beaucoup d'entrée/sortie ont un ''registre d'état'', lisible par le processeur, qui contient des informations sur l'état de l'entrée/sortie. Ils servent notamment à indiquer au processeur que l'entrée/sortie est disponible, qu'il est en train d’exécuter une commande, qu'il est occupé, qu'il y a un problème, qu'il y a une erreur de configuration, etc. ===Les adresses des registres d’interfaçage=== Les registres des périphériques sont identifiés par des adresses mémoires. Et les adresses sont conçues de façon à ce que les adresses des différentes entrées/sorties ne se marchent pas sur les pieds. Chaque entrée/sortie, chaque registre, chaque contrôleur a sa propre adresse. D'ordinaire, certains bits de l'adresse indiquent quel est le destinataire. Certains indiquent quel est l'entrée/sortie voulue, les restants indiquant le registre de destination. Il existe deux organisations possibles pour les adresses des registres d’interfaçages. La première possibilité est de séparer les adresses pour les registres d’interfaçage et les adresses pour la mémoire. Le processeur doit avoir des instructions séparées pour gérer les périphériques et adresser la mémoire. Il a des instructions de lecture/écriture pour lire/écrire en mémoire, et d'autres pour lire/écrire les registres d’interfaçage. Sans cela, le processeur ne saurait pas si une adresse est destinée à un périphérique ou à la mémoire. [[File:Espaces d'adressages séparés entre mémoire et périphérique.png|centre|vignette|upright=2.5|Espaces d'adressages séparés entre mémoire et périphérique]] L'autre méthode mélange les adresses mémoire et des entrées-sorties. Si on prend par exemple un processeur de 16 bits, où les adresses font 16 bits, alors les 65536 adresses possibles seront découpées en deux portions : une partie ira adresser la RAM/ROM, l'autre les périphériques. On parle alors d''''entrées-sorties mappées en mémoire'''. L'avantage est que le processeur n'a pas besoin d'avoir des instructions séparées pour les deux. [[File:IO mappées en mémoire.png|centre|vignette|upright=2.0|IO mappées en mémoire]] Pour résumer, communiquer avec une entrée/sortie est similaire à ce qu'on a avec les mémoires. Il suffit de lire ou écrire dans des registres d’interfaçage, qui ont chacun une adresse mémoire. Le problème est que le système d'exploitation ne connaît pas toujours le fonctionnement d'une entrée/sortie : il faut installer un programme qui va s'exécuter quand on souhaite communiquer avec l'entrée/sortie, et qui s'occupera de tout ce qui est nécessaire pour le transfert des données, l'adressage du périphérique, etc. Ce petit programme est appelé un driver ou '''pilote de périphérique'''. La « programmation » périphérique est très simple : il suffit de savoir quoi mettre dans les registres, et c'est le pilote qui s'en charge. ==Les architectures Harvard et Von Neumann== Après avoir vu le processeur, les mémoires et les entrées-sorties, voyons voir comment le tout est interconnecté. Tous les ordinateurs ne sont pas organisés de la même manière, pour ce qui est de leurs bus. Mais pour comprendre pourquoi, nous devons regarder qui communique avec qui, dans un ordinateur. Pour rappel, les données sont placées en mémoire RAM, alors que les instructions sont placées en mémoire ROM. Le processeur lit des instructions dans la mémoire ROM, il lit et écrit dans la mémoire RAM, et accède aux registres d’interfaçage des entrées-sorties. Il y a donc besoins de trois interconnexions : CPU-ROM, CPU-RAM et CPU-IO. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] Il parait intéressant d'utiliser trois interconnexions, au minimum CPU-ROM, CPU-RAM et CPU-IO. Néanmoins, faire ainsi a de nombreux désavantages. Déjà, il faut pouvoir brancher tout ça sur le processeur. Et celui-ci n'a pas forcément assez de broches pour. Aussi, il est parfois préférable de mutualiser des bus, à savoir de connecter plusieurs composants sur un même bus. Par exemple, on peut mutualiser le bus pour la mémoire RAM et pour la mémoire ROM. Il faut dire que les deux bus sont des bus mémoire, avec un bus d'adresse, un bus de données, et surtout : des bus de commande similaires. Les mutualiser est alors très simple, et permet d'économiser pas mal de broches. [[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre et une architecture Harvard]] Cette mutualisation nous amène naturellement à parler de la distinction entre les architectures Harvard d'un côté et les architectures Von Neumann de l'autre. Elle est très liée au fait d'utiliser soit un bus mémoire unique, soit des bus séparés pour la ROM et la RAM. Voyons cela en détail. ===Les architectures Harvard et Von Neumann : des bus séparés ou unifiés=== Avec l''''architecture Harvard''', la mémoire ROM et la mémoire RAM sont reliées au processeur par deux bus séparés. Il y a un bus RAM pour la mémoire RAM, un bus ROM pour la mémoire ROM. L'avantage de cette architecture est qu'elle permet de charger une instruction et une donnée simultanément : une instruction chargée sur le bus relié à la mémoire programme, et une donnée chargée sur le bus relié à la mémoire de données. Et cela simplifie fortement la conception du processeur. [[File:Harvard Architecture.png|centre|vignette|upright=2|Architecture Harvard, avec une ROM et une RAM séparées.]] Avec l''''architecture Von Neumann''', mémoire ROM et mémoire RAM sont reliées au processeur par un bus unique. Le bus unique qui relie processeur, RAM et ROM, s'appelle le '''bus mémoire'''. Un défaut de ces architecture est qu'elles ne peuvent pas charger une instruction et une donnée en même temps. Et cela pose quelques problèmes pour la conception du processeur. Par contre, nous verrons dans ce qui suit qu'utiliser un bus mémoire partagé est bien plus flexible et permet des choses que les architectures Harvard ne peuvent pas faire. [[File:Architecture Von Neumann, avec deux bus séparés.png|centre|vignette|upright=2|Architecture Von Neumann, avec deux bus séparés.]] ===Les architectures Harvard et Von Neumann : des espaces d'adressage séparés ou unifiés=== La distinction précédente se base sur les connexions entre RAM, ROM et processeur. Mais il existe une autre distinction, très liée, qui est souvent utilisée comme seconde définition des architectures Harvard/Von Neumann. Elle est liée aux adresses mémoire que le processeur peut gérer. Prenons un processeur 16 bits, par exemple, qui gère naturellement des adresses de 16 bits. Il peut gérer 2^16 adresses, soit 64 kibioctets de mémoire. L'ensemble de ces adresses est appelé un '''espace d'adressage'''. Mais comment cet espace d'adressage est utilisé pour adresser une RAM et une ROM ? Sur les architectures Harvard, le processeur voit deux mémoires séparées avec leur lot d'adresses distinctes. Une même adresse peut donc correspondre soit à la mémoire ROM, soit à la mémoire RAM, suivant le bus utilisé. L'espace d'adressage est donc doublé, dupliqué, avec un pour la ROM, un autre pour la RAM. Rien d'étonnant à cela : il y a deux bus d'adresses, chacun correspondant à un espace d'adressage. [[File:Vision de la mémoire par un processeur sur une architecture Harvard.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Harvard.]] Avec l'architecture Von Neumann, la RAM et la ROM doivent se partager les adresses mémoires disponibles. Il n'y a qu'un seul espace d'adressage qui est coupé en deux, avec une partie pour la ROM et une autre pour la RAM. Une adresse correspond soit à la mémoire RAM, soit à la mémoire ROM, mais pas aux deux. Typiquement, la mémoire ROM occupe une partie des adresses, la mémoire RAM utilise le reste. La répartition des adresses est réalisée par les circuits de décodage d'adresse mentionnés plus haut. [[File:Vision de la mémoire par un processeur sur une architecture Von Neumann.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Von Neumann.]] Les '''architectures Harvard modifiées''' sont des intermédiaires entre architectures Harvard et architectures Von Neumann, bien qu'elles penchent bien plus du côté des architectures Harvard. Précisons que la terminologie n'est pas claire, beaucoup d'auteurs mettent des définitions différentes derrière ces deux termes. Mais dans ce cours, nous utiliserons une définition très stricte de ce qu'est une architecture Harvard modifiée. Une architecture Harvard modifiée est une architecture Harvard, où le processeur peut lire des données constantes depuis la mémoire ROM. Nous avions vu plus haut que les mémoires ROM peuvent mémoriser, en plus d'un programme exécutable, des données constantes, qui ne varient pas. Les architectures Harvard pures ne permettent pas de lire des données de ce genre depuis la mémoire ROM, alors que les architectures Harvard modifiées le permettent. Une architecture Harvard modifiée dispose d'une instruction pour lire les données en mémoire RWM, et d'une instruction pour lire des données en mémoire ROM. Il y a donc deux versions de l'instruction LOAD, qui copient la donnée dans un registre général, mais dont la source de la donnée est différente. Une autre possibilité, plus rare, est que une instruction de copie, qui copie une constante depuis la mémoire ROM vers la mémoire RAM. Le cas le plus commun est l'utilisation de deux instructions LOAD séparées. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Ceci étant dit, revenons à la distinction entre architecture Harvard et Von Neumann. Il faut noter que la RAM et la ROM n'ont pas forcément la même taille. Et ce que ce soit sur une architecture Harvard que sur une architecture Von Neumann, mais c'est plus facile à expliquer sur une architecture Harvard. On peut par exemple imaginer une architecture Harvard qui utilise des adresses de 16 bits pour la ROM, et seulement 8 bits pour la RAM. Le résultat est qu'il peut adresser 64 kibioctets de ROM, mais seulement 256 octets de RAM. Les deux bus d'adresse sont alors de taille différente, l'un faisant 8 bits, l'autre 16. Quelques processeurs 8 bits étaient dans ce cas, comme on le verra dans le chapitre sur les CPU 8bits. Mais d'autres processeurs utilisent des valeurs différentes, avec par exemple des adresses de 16 bits pour la RAM, mais de 20 bits pour la ROM, ou inversement. Sur une architecture Von Neumann, tout dépend de comment les adresses sont réparties. La solution la plus simple découpe l'espace d'adressage en deux parties égales, avec la RAM qui est dans la moitié basse (qui part de l'adresse 0 jusqu'à l'adresse au milieu), alors que la ROM est dans la moitié haute (entre l'adresse du milieu et l'adresse maximale). Mais ce n'est pas la seule possibilité, la limite entre RAM et ROM peut être mise n'importe où. Prenons par exemple un processeur 32 bits, capable de gérer 4 milliards d'adresse. Il est parfaitement possible de réserver 128 mébioctets de poids fort à la mémoire ROM, et de laisser le reste à la mémoire RAM. ===Le décodage d'adresse sur les architectures Von Neumann=== Pour résumer, les architectures Harvard et Von Neumann se distinguent sur deux points : * L'accès à la RAM et à la ROM se font par des bus séparés sur l'architecture Harvard, sur le même bus avec l'architecture Von Neumann. * Les adresses pour la mémoire ROM et la mémoire RAM sont séparées sur les architectures Harvard, partagées sur l’architecture Von Neumann. Les architectures Von Neumann utilisent donc un seul bus pour connecter la RAM et la ROM au processeur. Mais cela ne parait pas intuitif : comment deux composants peuvent se connecter aux mêmes fils ? Parce que c'est ce qu'implique le fait de partager un bus. Si je prends une mémoire RAM et une mémoire ROM, toutes deux de 8 bits, elles seront connectées à un bus mémoire de 8 bits. Intuitivement, on se dit qu'il y aura des conflits, du genre : la RAM et la ROM vont accéder au bus en même temps, comment savoir si une adresse est destinée à la RAM ou la ROM, etc ? Tous ces problèmes sont résolus avec une solution très simple : à chaque instant, seule une mémoire est connectée au bus. L'idée est que les mémoires sont connectées ou déconnectées du bus selon les besoins. Si le processeur veut envoyer lire une donnée en mémoire RAM, il déconnecte la mémoire ROM du bus. Et inversement, s'il veut lire une instruction, il déconnecte la RAM et connecte la ROM. Pour cela, les mémoires RAM et ROM possèdent une entrée ''Chip Select'' ou ''Output Enable'', qui agit comme une sorte de bouton ON/OFF. Lorsqu'on met un 1 sur cette entrée, la mémoire se connectera au bus. Ses entrées et sorties fonctionneront normalement, elle pourra recevoir des adresses, envoyer ou recevoir des données, tout sera normal. Par contre, si on met un 0 sur cette entrée, la mémoire se "désactive", ses entrée-sorties ne répondent plus aux sollicitations extérieures. Pire que ça : elles sont électriquement déconnectées. Au total, tout cela demande de gérer deux bit ''Chip Select''/''Output Enable'' : un pour la RAM, un pour la ROM. Et ces deux bits sont configurés pour chaque accès mémoire, pour chaque lecture ou écriture. Pour cela, un circuit de '''décodage d'adresse''' prend en entrée l'adresse mémoire à lire/écrire, et active/désactive les mémoires RAM/ROM selon les besoins. Il prend l'adresse et configure les bits ''Chip Select''/''Output Enable''. [[File:Décodage d'adresse sur une architecture Von Neumann.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann.]] L'implémentation la plus simple réserve la moitié des adresses pour la RAM, l'autre moitié pour la ROM. Typiquement, la ROM prend la moitié basse, la RAM la moitié haute. Dans ce cas, activer/désactiver la RAM et la ROM se fait avec seulement le bit de poids fort de l'adresse. Si le bit de poids fort est à 1, alors on accède à la RAM et la ROM doit être désactivée. Mais si ce bit est à 0, alors on accède à la moitié basse et il faut désactiver la RAM. Une remarque intéressante : le fait de séparer la mémoire en deux parts égales permet de simuler une architecture Harvard à partir d'une architecture Von Neumann. Par exemple, le tout premier processeur d'Intel, le 4004, était l'un de ceux là. La RAM et la ROM sont reliés au même bus, et il y a donc un unique espace d'adressage, qui est séparé en deux parties égales. Le truc est que le processeur traite les deux parties égales comme deux espaces d'adressage séparés. Le processeur se débrouille pour cacher le fait qu'il y a un espace d'adressage unique coupé en deux, ce qui fait que les programmeurs voient bien deux espaces d'adressages distincts. [[File:Décodage d'adresse sur une architecture Von Neumann basique.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann basique.]] Pour résumer, quand une adresse est envoyée sur le bus, les deux mémoires vont la recevoir mais une seule va répondre et se connecter au bus. Le décodage d'adresse garantit que seule la mémoire adéquate réponde à un accès mémoire. Le décodage d'adresse est réalisé par la carte mère, par un composant dédié. Le mécanisme peut être utilisé pour combiner plusieurs RAM en une seule, idem avec les ROM. Pour comprendre l'idée, je vais prendre l'exemple de l'IBM PC, un des tout premier PC existant. Nous étudierons ce PC dans une section dédiée, à la fin du chapitre, aussi je vais passer rapidement dessus. Tout ce que je vais faire est vous présenter la carte mère du PC, et vous demander de faire est de compter les mémoires ROM et mémoires RAM sur la carte mère : [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] Si vous remarquerez qu'il y a 5 mémoires ROM et 8 à 32 mémoires RAM. Le fait est que le processeur voit les différentes mémoires ROM comme une seule mémoire ROM. Idem avec les mémoires RAM : elle font chacune 2 kibioctets, et l'ensemble est vu par le processeur comme une seule RAM de 16 à 64 kibioctets. Et cela grâce aux circuits de décodage d'adresse, qui sont situés en haut à droite de la carte mère. Pour comprendre l'idée, prenons l'exemple d'un processeur 16 bits, capable de gérer 64 kibioctets de mémoire. L'espace d'adressage est découpé en quatre portions, de 16 kibioctets chacune. Une portion est réservée à une ROM de 16 kibioctet, les autres sont chacune réservée à une RAM de 16 kibioctet. Le décodage d'adresse sélectionne alors la mémoire adéquate en utilisant les deux bits de poids fort de l'adresse. * S'ils valent 00, alors c'est la mémoire ROM qui est activée, connectée au bus. * S'ils valent 01, alors c'est la première mémoire RAM qui est connectée au bus. * S'ils valent 10, alors c'est la seconde mémoire RAM qui est connectée au bus. * S'ils valent 11, alors c'est la troisième mémoire RAM qui est connectée au bus. [[File:Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM.png|centre|vignette|upright=3|Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM]] ===L'impact sur la conception du processeur=== Plus haut, j'ai parlé d'un des avantages des architectures Harvard : elles peuvent lire une instruction en même temps qu'elles accèdent à une donnée. La donnée est lue/écrite en RAM, alors que l'instruction est lue en ROM. Et cela permet de simplifier l'intérieur du processeur. Pas de beaucoup, mais c'est déjà ça de pris. Voyons maintenant comment cela impacte l'intérieur du processeur. Tout ce dont vous avez à vous rappeler est la séparation entre chemin de données et unité de contrôle, et que les registres généraux sont dans le premier, le ''program counter'' dans la seconde. Avec une architecture Harvard, les instructions et les données passent par des bus différent : bus ROM pour les instructions, bus RAM pour les données. L'intuition nous dit que le bus pour la mémoire ROM est connecté à l'unité de contrôle, alors que le bus pour la RAM est connecté au chemin de données. Et dans les grandes lignes, c'est vrai. La logique est imparable pour ce qui est des bus de données. Mais il y a une petite subtilité pour les bus d'adresse. Pour comprendre comment le processeur exploite ces deux bus, voyons ce qui transite dessus. Pour la mémoire ROM, elle reçoit l'adresse de l'instruction à lire, elle renvoie l'instruction adéquate. Pour cela, le ''program counter'' est envoyé sur le bus d'adresse, l'instruction sur le bus de données. Pour la mémoire RAM, elle échange des données avec les registres généraux, les registres pour les données. Les adresses utilisées pour la RAM viennent elles soit du chemin de données, soit de l'unité de contrôle, tout dépend du mode d'adressage. Mais le ''program counter'' n'est pas impliqué. [[File:Architecture Harvard - échanges de données.png|centre|vignette|upright=2|Architecture Harvard - échanges de données]] Les architectures Harvard modifiées doivent cependant rajouter une connexion entre le bus ROM et les registres généraux. C'est nécessaire pour charger une donnée constante depuis la mémoire ROM. Rappelons que la donnée constante est copiée dans un registre général, donc dans le chemin de données. [[File:Architecture Harvard modifiée - implémentation du processeur.png|centre|vignette|upright=2|Architecture Harvard modifiée - implémentation du processeur]] Avec les architectures Von Neumann, il y a un seul bus qui est relié à la fois au chemin de données et à l'unité de contrôle. Si le processeur lit une instruction, le bus doit être relié à l'unité de contrôle. Par contre, s'il accède à une donnée, il doit être relié au chemin de données (le bus d'adresse peut éventuellement être connecté au séquenceur, si celui-ci fournit l'adresse à lire). Il faut donc utiliser un paquet de multiplexeurs et de démultiplexeurs pour faire la connexion au bon endroit. [[File:Architecture Von Neumann - implémentation du processeur.png|centre|vignette|upright=2|Architecture Von Neumann - implémentation du processeur]] Une instruction se fait en deux temps : on charge l'instruction depuis la mémoire ROM, puis on l'exécute. Avec une architecture Harvard, tout cela se fait en un seul cycle d'horloge, vu que charger la ROM et accéder aux données peut se faire en même temps. Pas avec les architectures Von Neumann, qui doivent libérer le bus mémoire après avoir chargé une instruction. Elles n'ont pas le choix : elles chargent l'instruction lors d'un premier cycle d'horloge, puis l'exécutent lors du second. Pour cela, ils incorporent un registre appelé le '''registre d'instruction''', qui mémorise l'instruction chargée. L'instruction est copiée dans ce registre lors du premier cycle, puis est utilisée lors du second cycle. Le registre permet de ne pas oublier l’instruction entre les deux cycles. Le registre d'instruction est obligatoire sur les architectures Von Neumann. En comparaison, il est facultatif sur les architectures Harvard. Elles peuvent en avoir un, pour des raisons techniques, mais ce n'est pas obligatoire. [[File:Registre d'instruction.png|centre|vignette|upright=2|Registre d'instruction.]] ===Les architectures Von Neumann sont plus flexibles=== Sur les architectures Harvard, le processeur sait faire la distinction entre programme et données. Les données sont stockées dans la mémoire RAM, le programme est stocké dans la mémoire ROM. Les deux sont séparés, accédés par le processeur sur des bus séparés, et c'est ce qui permet de faire la différence entre les deux. Il est impossible que le processeur exécute des données ou modifie le programme. Du moins, tant que la mémoire qui stocke le programme est bien une ROM. Par contre, sur les architectures Von Neumann, il est impossible de distinguer programme et données, sauf en ajoutant des techniques de protection mémoire avancées. La raison est qu'il est impossible de faire la différence entre donnée et instruction, vu que rien ne ressemble plus à une suite de bits qu'une autre suite de bits. Et c'est à l'origine d'un des avantages majeur de l'architecture Von Neumann : il est possible que des programmes soient copiés dans la mémoire RWM et exécutés dans celle-ci. Un cas d'utilisation familier est celui de votre ordinateur personnel. Le système d'exploitation et les autres logiciels sont copiés en mémoire RAM à chaque fois que vous les lancez. Mais cet exemple implique un disque dur, ce qui rend les choses plus compliquées que prévu. Un autre exemple serait la compilation de code à la volée, mais il ne sera pas très parlant. Un exemple plus adapté serait celui où la ROM mémorise un programme compressée dans la mémoire ROM, qui est décompressé pour être exécuté en mémoire RAM. Le programme de décompression est stocké en mémoire ROM et est exécuté au lancement de l’ordinateur. Cette méthode permet d'utiliser une mémoire ROM très petite et très lente, tout en ayant un programme rapide (si la mémoire RWM est rapide). Il est aussi possible de créer des programmes qui modifient leurs propres instructions : cela s'appelle du '''code auto-modifiant'''. Ce genre de choses servait autrefois sur des ordinateurs rudimentaires, au tout début de l'informatique. À l'époque, les adresses à lire/écrire devaient être écrites en dur dans le programme, dans les instructions exécutées. Pour gérer certaines fonctionnalités des langages de programmation qui ont besoin d'adresses modifiables, comme les tableaux, on devait corriger les adresses au besoin avec du code auto-modifiant. De nos jours, le code automodifiant est utilisée occasionnellement pour rendre un programme indétectable dans la mémoire (les virus informatiques utilisent beaucoup ce genre de procédés). L'impossibilité de séparer données et instructions est à l'origine de problèmes assez fâcheux. Il est parfaitement possible que le processeur charge et exécute des données, qu'il prend par erreur pour des instructions. C'est le cas quand des pirates informatiques arrivent à exploiter des bugs. Il arrive que des pirates informatiques vous fournissent des données corrompues, qui contiennent un virus ou un programme malveillant est caché dans les données. Les bugs en question permettent d'exécuter ces données, donc virus. Pour éviter cela, le système d'exploitation peut marquer certaines zones de la mémoire comme non-exécutable, c’est-à-dire que le système d'exploitation interdit d’exécution de quoi que ce soit qui est dans cette zone. Mais ce n'est pas parfait. Toujours est-il que tout cela est impossible sur les architectures Harvard. Et ce serait très limitant. Imaginez : pas possible de lancer un programme depuis le disque dur ou une clé USB, le programme doit impérativement être dans une mémoire ROM, pas de compilation à la volée, etc. Que des techniques très utilisées dans l'informatique moderne. Malgré ses défauts, les architectures Von Neumann ne sont pas les plus utilisées pour rien. Les architectures Harvard sont concrètement utilisées uniquement dans l'informatique embarquée, sur des microcontrôleurs très spécifiques. ==Le bus de communication avec les entrées-sorties== Le processeur, la mémoire et les entrées-sorties sont connectées par un ou plusieurs '''bus de communication'''. Ce bus n'est rien d'autre qu'un ensemble de fils électriques sur lesquels on envoie des zéros ou des uns. Pour communiquer avec la mémoire, il y a trois prérequis qu'un bus doit respecter : pouvoir sélectionner la case mémoire (ou l'entrée-sortie) dont on a besoin, préciser à la mémoire s'il s'agit d'une lecture ou d'une écriture, et enfin pouvoir transférer la donnée. Pour cela, on doit donc avoir trois bus spécialisés, bien distincts, qu'on nommera le bus de commande, le bus d'adresse, et le bus de donnée. * Le '''bus de données''', sur lequel s'échangent les données entre les composants. * Le '''bus de commande''' pour configurer la mémoire et les entrées-sorties. * Le '''bus d'adresse''', facultatif, permet de préciser quelle adresse mémoire il faut lire/écrire. Chaque composant possède des entrées séparées pour le bus d'adresse, le bus de commande et le bus de données. Par exemple, une mémoire RAM possédera des entrées sur lesquelles brancher le bus d'adresse, d'autres sur lesquelles brancher le bus de commande, et des broches d'entrée-sortie pour le bus de données. Précisons cependant que le bus de commande n'est pas exactement le même entre des mémoires RAM/ROM et des entrées-sorties. [[File:Bus general schematic.svg|centre|vignette|upright=2|Contenu d'un bus, généralités.]] ===Le réseau d'interconnexion : généralités=== Reprenons où nous nous étions arrêté. Avant de voir les architectures Harvard et Von Neumann, nous avions dit que le processeur, les mémoires et les entrées-sorties sont reliées entre eux par un réseau d'interconnexion. Nous venons de voir qu'il est possible de mutualiser certains bus, notamment celui de la mémoire RAM et celui de la mémoire ROM. Mais il est possible de faire la même chose pour les entrées-sorties. Là encore, il est possible de regrouper le bus mémoire avec les bus pour les entrées-sorties. Voyons ce que cela implique. {| |[[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec une architecture Harvard.]] |[[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Interconnexions d'une architecture Von Neumann.]] |} Avant de poursuivre, nous devons préciser quelque chose d'important. Sur les ordinateurs modernes, les entrées-sorties peuvent accéder à la mémoire RAM. Les ordinateurs modernes intègrent des techniques de '''''Direct Memory Access''''' (DMA) qui permettent aux entrées-sorties de lire ou d'écrire en mémoire RAM. Les transferts DMA se font sans intervention du processeur. Ils permettent de copier un bloc de plusieurs octets, dans deux sens : de la mémoire RAM vers une entrée-sortie, ou inversement. Le DMA demande d'ajouter un circuit dédié sur la carte mère : le contrôleur DMA. Il effectue la copie d'un paquet d'octets de la RAM vers l'entrée-sortie ou dans l'autre sens. [[File:Réseau d'interconnexion avec un processeur au centre, et direct memory access.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre, et direct memory access]] ===Les bus systèmes=== La première solution utilise un bus unique, celui-ci est appelé le '''bus système''', aussi appelé ''backplane bus''. Le bus système est connecté à la mémoire RAM, la mémoire ROM, au processeur, et aux entrées-sorties. Tous les composants présents dans l'ordinateur sont connectés à ce bus, sans exception. De tels bus avaient pour avantage la simplicité. Le processeur n'est connecté qu'à un seul bus, ce qui utilise peu de broches et économise des fils. La mutualisation des bus est totale, le câblage est plus simple, la fabrication aussi. [[File:Architecture minimale d'un ordinateur.png|centre|vignette|upright=2|Architecture minimale d'un ordinateur.]] Un bus système contient un bus d'adresse, de données et de commande. Un bus système se marie bien avec des entrées-sorties mappées en mémoire. La conséquence est que le bus d'adresse ne sert pas que pour l'accès à la mémoire RAM/ROM, mais aussi pour l'accès aux entrées-sorties. Il y a moyen d'implémenter un système d'adresse séparés avec, mais c'est pas l'idéal. [[File:Architecture Von Neumann avec les bus.png|centre|vignette|upright=2|Architecture Von Neumann avec les bus.]] Un bus système n'a pas de limitations quant aux échanges de données. Le processeur peut communiquer directement avec les mémoires et les entrées-sorties, les entrées-sorties peuvent communiquer avec la mémoire RAM, etc. Notamment, un bus système peut implémenter le ''Direct Memory Access''. Il suffit juste de connecter un contrôleur DMA sur le bus système. Le contrôleur DMA est considéré comme une entrée-sortie, ses registres sont mappés en mémoire et sont donc accessibles directement par le processeur. [[File:Bus système avec controleur DMA.png|centre|vignette|upright=2|Bus système avec contrôleur DMA.]] Si on suit la définition à la lettre, un bus système est systématiquement une architecture Von Neumann, vu que la mémoire ROM et la mémoire RAM sont reliées sur le bus système. La conséquence est que les circuits de décodage d'adresse sont présents. Ils sont toujours sur la carte mère, et sont plus ou moins à côté du bus système. Cependant, le décodage d'adresse est parfois étendu pour tenir compte des entrées-sorties. Les entrées-sorties soudées sur la carte mère ont elles aussi des entrées ''Chip Select'' ou quelque chose de similaire. Le décodage d'adresse peut alors les activer ou les désactiver suivant l'adresse envoyée sur le bus d'adresse. C'est ce qui arrive quand le processeur écrit dans un registre d’interfaçage : il envoie l'adresse de ce registre sur le bus d'adresse, le circuit de décodage d'adresse active seulement l'entrée-sortie associée. Il faut noter que ce n'est pas systématique, il existe des techniques pour se passer de décodage d'adresse. Mais nous en reparlerons dans le chapitre sur les bus de communication. [[File:Chipselectfr.png|centre|vignette|upright=1.5|Exemple détaillé.]] Les bus systèmes sont certes très simples, mais ils ont aussi des désavantages. Par exemple, il faut éviter que le processeur et les entrées-sorties se marchent sur les pieds, ils ne peuvent pas utiliser le bus en même temps. De tels conflits d'accès au bus système sont fréquents et ils réduisent la performance, comme on le verra dans le chapitre sur les bus. De plus, un bus système a le fâcheux désavantage de relier des composants allant à des vitesses très différentes : il arrivait fréquemment qu'un composant rapide doive attendre qu'un composant lent libère le bus. Le processeur était le composant le plus touché par ces temps d'attente. Elle était utilisée sur les tout premiers ordinateurs, pour sa simplicité. Elle était parfaitement adaptée aux anciens composants, qui allaient tous à la même vitesse. De nos jours, les ordinateurs à haute performance ne l'utilisent plus trop, mais elle est encore utilisée sur certains systèmes embarqués, en informatique industrielle dans des systèmes très peu puissants. ===Les bus d'entrées-sorties=== Les bus systèmes ont de nombreux problèmes, ce qui fait que d'anciens ordinateurs faisaient autrement. À la place d'un bus système unique, ils utilisent un bus séparé pour les mémoires, et un autre séparé pour les entrées-sorties. Le bus spécialisé pour la mémoire est appelé le '''bus mémoire''', l'autre bus est appelé le '''bus d'entrées-sorties'''. Le bus mémoire est généralement relié à la fois à la mémoire RAM et à la mémoire ROM, les exceptions ne sont pas rares, cependant. [[File:Bus mémoire séparé du bus pour les IO.png|centre|vignette|upright=2|Bus mémoire séparé du bus pour les IO]] Les bus d'entrée-sorties peuvent être spécialisés et simplifiés. Par exemple, ils peuvent avoir un bus de commande différent de celui de la mémoire, qui utilise nettement moins de fils. Le bus d'adresse peut aussi être réduit, et utiliser des adresses plus courtes que celles du bus mémoire. Les bus de données peuvent aussi être de taille différentes. Il est ainsi possible d'avoir un bus mémoire capable de lire/écrire 64 bits à la fois, alors que la communication avec les entrées-sorties se fait octet par octet ! En général, les bus d'entrée-sortie sont assez petits, ils ont une taille de 8 ou 16 bits, même si le bus mémoire est plus grand. Cela permet de ne pas gaspiller trop de broches. Ajouter un bus d'entrée-sortie n'est donc pas très gourmand en broches et en fils. : Il est en théorie possible d'avoir une fréquence différente pour les deux bus, avec un bus mémoire ultra-rapide et un bus pour les entrées-sorties est un bus moins rapide. Mais il faut que le processeur soit prévu pour, et c'est très rare. Niveau performances, le processeur peut théoriquement accéder à la mémoire en attendant qu'une entrée/sortie réponde, mais il faut que le processeur soit prévu pour, et ce n'est pas de la tarte. Par contre, cela implique d'avoir des adresses séparées pour les registres d’interfaçage et la mémoire. En clair : pas d'entrée-sortie mappée en mémoire ! Un autre problème est que les entrées-sorties ne peuvent pas communiquer avec la mémoire directement, elles doivent passer par l'intermédiaire du processeur. En clair : pas de ''Direct Memory Access'' ! Les deux sont des défauts rédhibitoires pour les programmeurs système, notamment pour ceux qui codent les pilotes de périphériques. Pour résumer, les défauts sont assez problématiques : pas d'entrées-sorties mappées en mémoire, pas de ''Direct Memory Access'', économie de broches limitée. Les deux premiers sont des défauts majeurs, qui font que de tels bus ne sont pas utilisés dans les ordinateurs modernes. À la place, ils utilisent une troisième solution, distincte des bus systèmes et des bus d'entrée-sorties. ===Les bus avec répartiteur=== Il existe une méthode intermédiaire, qui garde deux bus séparés pour la mémoire et les entrées-sorties, mais élimine les problèmes de brochage sur le processeur. L'idée est d'intercaler, entre le processeur et les deux bus, un '''circuit répartiteur'''. Il récupère tous les accès et distribue ceux-ci soit sur le bus mémoire, soit sur le bus des périphériques. Le ou les répartiteurs s'appellent aussi le '''''chipset''''' de la carte mère. C'était ce qui était fait à l'époque des premiers Pentium. À l'époque, la puce de gestion du bus PCI faisait office de répartiteur. Elle mémorisait des plages mémoires entières, certaines étant attribuées à la RAM, les autres aux périphériques mappés en mémoire. Elles utilisaient ces plages pour faire la répartition. [[File:IO mappées en mémoire avec séparation des bus.png|centre|vignette|upright=2|IO mappées en mémoire avec séparation des bus]] Niveau adresses des registres d'interfacage, il est possible d'avoir soit des adresses unifiées avec les adresses mémoire, soit des adresses séparées. L'usage d'un répartiteur ne pose pas de problèmes particuliers pour implémenter le DMA. La seule contrainte est que le contrôleur DMA soit intégré dans le répartiteur. Les échanges entre IO et mémoire passent par le répartiteur, qui fait le pont entre bus mémoire et bus des IO. [[File:Implémentation du DMA avec un répartiteur.png|centre|vignette|upright=2|Implémentation du DMA avec un répartiteur]] ==Les microcontrôleurs et ''system on chip''== Parfois, on décide de regrouper la mémoire, les bus, le CPU et les ports d'entrée-sortie dans un seul circuit intégré, un seul boitier. L'ensemble forme alors ce qu'on appelle un '''''System on Chip''''' (système sur une puce), abrévié en SoC. Le nom est assez explicite : un SoC comprend un système informatique complet sur une seule puce de silicium, microprocesseurs, mémoires et périphériques inclus. Ils incorporent aussi des ''timers'', des compteurs, et autres circuits très utiles. [[File:ARMSoCBlockDiagram.svg|centre|vignette|upright=2|SoC basé sur un processeur ARM, avec des entrées-sorties typiques de celles d'un µ-contrôleur. Le support du bus CAN, d'Ethernet, du bus SPI, d'un circuit de PWM (génération de signaux spécifiques), de convertisseurs analogique-digital et inverse, sont typiques des µ-contrôleurs.]] Le terme SoC regroupe des circuits imprimés assez variés, aux usages foncièrement différents et à la conception distincte. Les plus simples d’entre eux sont des microcontrôleurs, qui sont utilisés pour des applications à base performance. Les plus complexes sont utilisés pour des applications qui demandent plus de puissance, nous les appellerons SoC haute performance. La relation entre SoC et microcontrôleurs est assez compliquée à expliquer, la terminologie n'est pas clairement établie. Il existe quelques cours/livres qui séparent les deux, d'autres qui pensent que les deux sont très liés. Dans ce cours, nous allons partir du principe que tous les systèmes qui regroupent processeur, mémoire et quelques périphériques/entrées-sorties sont des SoC. Les microcontrôleurs sont donc un cas particulier de SoC, en suivant cette définition. ===Les microcontrôleurs=== Les '''microcontrôleurs''' sont des composants utilisés dans l'embarqué ou d'informatique industrielle. Leur nom trahit leur rôle. Ils sont utilisés pour contrôler de l'électroménager, des chaines de fabrication dans une usine, des applications robotiques, les alarmes domestiques, les voitures. De manière générale, on les trouve dans tous les systèmes dits embarqués et/ou temps réel. Ils ont besoin de s'interconnecter à un grand nombre de composants et intègrent pour cela un grand nombre d'entrée-sorties. Les microcontrôleurs sont généralement peu puissants, et doivent consommer peu d'énergie/électricité. Fait amusant, on en trouve dans certains périphériques informatiques. Par exemple, les anciens disques durs intégraient un microcontrôleur qui contrôlait plusieurs moteurs/ Les moteurs pour faire tourner les plateaux magnétiques et les moteurs pour déplacer les têtes de lecture/écriture étaient commandés par ce microcontrôleur. Comme autre exemple, les claviers d'ordinateurs intègrent un microcontrôleur connecté aux touches, qui détecte quand les touches sont appuyées et qui communique avec l'ordinateur. Nous détaillerons ces deux exemples dans les chapitres dédiés aux périphériques et aux disques durs, tout deviendra plus clair à ce moment là. La majorité des périphériques ou des composants internes à un ordinateur contiennent des microcontrôleurs. Un microcontrôleur tend à intégrer des entrées-sorties assez spécifiques, qu'on ne retrouve pas dans les SoC destinés au grand public. Un microcontrôleur est typiquement relié à un paquet de senseurs et son rôle est de commander des moteurs ou d'autres composants. Et les entrées-sorties intégrées sont adaptées à cette tâche. Par exemple, ils tendent à intégrer de nombreux convertisseurs numériques-analogiques pour gérer des senseurs. Ils intègrent aussi des circuits de génération de signaux PWM spécialisés pour commander des moteurs, le processeur peut gérer des calculs trigonométriques (utiles pour commander la rotation d'un moteur), etc. [[File:C8051F340-9 A B C D.png|centre|vignette|upright=2|Exemple d'entrées-sorties intégrées à un microcontroleur.]] En plus des entrées-sorties intégrées, les microcontrôleurs ont souvent des '''ports d'entrées-sorties''' banalisés, à savoir qu'on peut brancher n'importe quoi dessus. Il était possible de brancher un capteur de température, un moteur à commander, un port série, un port parallèle, un écran, un clavier, une souris, peu importe. Les ports font souvent un octet et ils sont généralement reliées directement ou indirectement au processeur. Le logiciel qui s'exécute sur le processeur décide quoi envoyer sur des broches et comment interprète ce qui est reçu dessus. Les ports banalisés de ce type sont parfois appelés des '''GPIO''', abréviation de ''General Purpose Input/Output'', mais nous utiliserons le terme de ''port I/O''. Un port regroupe plusieurs broches qui peuvent être utilisés à volonté. C'est le logiciel qui s'exécute sur le processeur qui décide de la fonction de broches. Un port IO peut fonctionner soit en tant qu'entrée, soit en tant que sortie. Il est possible de changer de sens en cours de fonctionnement, pour passer d'une entrée à une sortie ou inversement. [[File:Afficheurs7seg.png|centre|vignette|upright=2|Exemple d'utilisation d'un port I/O. le port est connecté à un afficheur LCD dit 7-segments. Les 8 entrées de cet afficheur sont connectées à un port I/O d'un octet.]] ===Les SoC haute performance=== Les SoC les plus performants sont actuellement utilisés dans les téléphones mobiles, tablettes, ''Netbook'', ''smartphones'', ou tout appareil informatique grand public qui ne doit pas prendre beaucoup de place. La petite taille de ces appareils fait qu'ils gagnent à regrouper toute leur électronique dans un circuit imprimé unique. Mais les contraintes font qu'ils doivent être assez puissants. Ils incorporent des processeurs assez puissants, surtout ceux des ''smartphones''. C'est absolument nécessaire pour faire tourner le système d'exploitation du téléphone et les applications installées dessus. Niveau entrées-sorties, ils incorporent souvent des interfaces WIFI et cellulaires (4G/5G), des ports USB, des ports audio, et même des cartes graphiques pour les plus puissants d'entre eux. Les SoC incorporent des cartes graphiques pour gérer tout ce qui a trait à l'écran LCD/OLED, mais aussi pour gérer la caméra, voire le visionnage de vidéo (avec des décodeurs/encodeurs matériel). Par exemple, les SoC Tegra de NVIDIA incorporent une carte graphique, avec des interfaces HDMI et VGA, avec des décodeurs vidéo matériel H.264 & VC-1 gérant le 720p. Pour résumer, les périphériques sont adaptés à leur utilisation et sont donc foncièrement différents de ceux des microcontrôleurs. [[File:SOMblk.png|centre|vignette|upright=3|Exemple de SoC.]] Un point important est que les processeurs d'un SoC haute performance sont... performants. Ils sont le plus souvent des processeurs de marque ARM, qui sont différents de ceux utilisés dans les PC fixe/portables grand public qui sont eux de type x86. Nous verrons dans quelques chapitres en quoi consistent ces différences, quand nous parlerons des jeux d'instruction du processeur. Autrefois réservé au monde des PCs, les processeurs multicœurs deviennent de plus en plus fréquents pour les SoC de haute performance. Il n'est pas rare qu'un SoC incorpore plusieurs cœurs. Il arrive même qu'ils soient foncièrement différents, avec plusieurs cœurs d'architecture différente. La frontière entre SoC haute performance et microcontrôleur est de plus en plus floue. De nombreux appareils du quotidien intègrent des SoC haute performance, d'autres des microcontrôleurs. Par exemple, les lecteurs CD/DVD/BR et certains trackers GPS intègrent un SoC ou des processeurs dont la performance est assez pêchue. À l'opposé, les systèmes domotiques intègrent souvent des microcontrôleurs simples. Malgré tout, les deux cas d'utilisation font que le SoC/microcontrôleur est connecté à un grand nombre d'entrées-sorties très divers, comme des capteurs, des écrans, des LEDs, etc. [[File:GPS tracker Hardware Architecture.png|centre|vignette|upright=2|Hardware d'un tracker GPS.]] ==Étude de quelques exemples d'architectures== Après avoir vu la théorie, nous allons voir des exemples réels d'ordinateurs. Dans ce qui suit, nous allons voir des ordinateurs assez anciens, pour une raison simple : ils collent assez bien à l''''architecture de base''' vue plus haut, avec un CPU, une RAM et une ROM, quelques entrées-sorties. Tous les ordinateurs modernes, mais aussi dans les smartphones, les consoles de jeu et autres, utilisent une architecture grandement modifiée et améliorée, avec un grand nombre de périphériques, disques durs/SSD, un grand nombre de mémoires différentes, etc. Il pourrait sembler pertinent d’étudier des microcontrôleurs ou des ''System On Chip'', en premier lieu. Mais nous éviterons soigneusement de tels systèmes pour le moment. La raison est qu'ils ont un grand nombre d'entrées-sorties, qui sont peu familières. Attendez-vous à avoir près d'une vingtaine ou centaine d'entrée-sorties différentes pour de tels systèmes. Le tout est très complexe, bien trop pour un premier exemple. À la place, nous allons voir précisément des exemples plus simples : les premiers PC, et des consoles de jeu 8 et 16 bits. Bien que ce soit des systèmes très simples, ils sont cependant plus complexes que l'architecture de base. Et leur avantages/désavantages sont un peu inverse l'un de l'autre. Si on devait résumer les différences, on aurait ceci : * Les PC ont plus d'entrées-sorties que les consoles, bien que nettement moins que pour les microcontrôleurs/SoC. * Les PC utilisent des disques durs, les consoles font avec soit des cartouches de jeu, soit des CD/DVD. * Les PC utilisent des cartes électroniques séparées pour le son et l'écran, les consoles utilisent des circuits soudés sur la carte mère, qui sont souvent des co-processeurs. * Les PC ont une mémoire ROM soudées sur la carte mère, les consoles 8 bits font sans. Les PC et micro-ordinateurs ont plus d'entrées-sorties que les consoles. Même si on mets de côté les périphériques, ils ont aussi beaucoup de composants soudées sur la carte mère. En comparaison, les consoles de jeu 8/16 bits se débrouillent avec : une cartouche de jeu et une manette en entrée, une sortie vidéo et une sortie son. Un autre point important est l'absence de disque dur ou de lecteur CD. La présence d'un disque dur ou d'un lecteur CD/DVD complexifie tout de suite l'architecture des PC. Il faut leur réserver un bus dédié ou les connecter à un bus système, cela demande d'ajouter des circuits sur la carte mère, etc. Et surtout, il faut expliquer comment l'ordinateur exécute des programmes, ce qui demande de parler de l'interaction avec le disque dur et la ROM du BIOS. Rien de tout cela sur les consoles de jeu 8 et 16 bits. Elles utilisent à la place des cartouches de jeu, qui intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Pas besoin de parler des mémoires de stockage, on est beaucoup plus proche de l'architecture de base avec une ROM unique. Par contre, n'allez pas croire que tout est rose avec les consoles 8/16 bits. Il y a quelques différences qui font qu'elles sont plus complexes qu'un PC sur certains points. Les PC utilisent des cartes électroniques à brancher sur la carte mère pour alimenter l'écran et les hauts-parleurs/casques, alors que les consoles de jeu utilisent des souvent co-processeurs dédiés pour le son et les graphismes. La différence parait mineure, mais elle avantage les consoles. Nous avons déjà expliqué ce que sont les co-processeurs plus haut, aussi les co-processeurs des consoles nous paraitrons familiers. On n'a pas à s’embêter à expliquer ce que sont les cartes d'extension, les bus associés et tout ce qui va avec, cela peut être retardé pour la section sur l'architecture des PC. La gestion de la cartouche de jeu est aussi un peu subtile à comprendre, bien que ce soit bien plus simple à comprendre qu'un système avec un disque dur. Les cartouches de jeu intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Et le processeur doit exécuter le code depuis cette mémoire ROM. La conséquence est que les consoles 8/16 bits utilisent une architecture Harvard, avec un bus relié à la cartouche pour lire les instructions. Mais si ce n'était que ça... Les cartouches mémorisent aussi les données pour les graphismes, ce qui fait que le co-processeur vidéo doit lui aussi lire la cartouche pour récupérer ces données... ===L'architecture de la TurboGraphX-16=== La console PC Engine, aussi appelée TurboGraphX, est une ancienne console 8 bits. Elle contient un processeur 65C02, 8 kibioctets de RAM, un port manettes, une carte son et une carte vidéo. La '''carte son''' est le composant qui s'occupe de commander les haut-parleurs et de gérer tout ce qui a rapport au son. La '''carte graphique''' est le composant qui est en charge de calculer les graphismes, tout ce qui s'affiche à l'écran. Sur cette console, les cartes son et graphique ne sont PAS des co-processeurs, ce sont des circuits électroniques dits fixes. C'est totalement différent de ce qu'on a sur les consoles modernes, aussi le préciser est important. Bien que la carte graphique ne soit pas un processeur, elle a 64 kibioctets de RAM rien que pour elle. La RAM en question est séparée de la RAM normale, c'est un circuit intégré séparé. Et c'est un cas très fréquent, qui reviendra par la suite. La majeure partie des cartes graphiques dispose de leur propre '''mémoire vidéo''', totalement réservée à la carte graphique. La RAM vidéo est connectée à la carte graphique via un bus séparé. Le processeur est souvent connecté à ce bus, afin de pouvoir écrire des données dedans, mais ce n'est pas le cas ici. [[File:Architecture de la PC Engine, aussi appelée TurboGrafx-16.png|centre|vignette|upright=2.5|Architecture de la PC Engine, aussi appelée TurboGrafx-16]] L'architecture de la console était particulièrement simple. Le processeur était le centre de l'architecture, tout était connecté dessus. Il y a un bus pour la cartouche de jeu, un autre pour la RAM, un autre pour les manettes, un autre pour carte son, et un dernier pour la carte graphique. Le fait d'avoir un bus par composant est assez rare et ce n'est le cas ici que parce des conditions particulières sont remplies. Déjà, il y a peu d'entrée-sorties. Ensuite, les bus font tous 8 bits, vu que le processeur est un CPU 8 bits. Avec 5 connexions de 8 bits, le tout utilise 40 broches, ce qui est beaucoup, mais totalement gérable. Par contre, les choses changerons pour les autres consoles. Au final, l'organisation des bus peut s'expliquer avec ce qu'on a vu dans la section sur les bus de communication. La console utilise une architecture Harvard, car la ROM et la RAM utilisent des bus différents. De plus, il y a des bus dédiés aux entrées-sorties, séparés des bus mémoire. Enfin, la carte graphique a droit à ses propres bus pour lire dans la cartouche et dans sa RAM vidéo dédiée. ===L'architecture de la console de jeu NES=== Maintenant, nous allons voir la console de Jeu Famicom, aussi appelée la NES en occident. Elle a une architecture centrée sur un processeur Ricoh 2A03, similaire au processeur 6502, un ancien processeur autrefois très utilisé et très populaire. Le processeur est associé à 2 KB de mémoire RAM. Sur certaines cartouches, on trouve une RAM utilisée pour les sauvegardes, qui est adressée par le processeur directement. Première variation par rapport à l'architecture de la console précédente : l'ajout de la RAM pour les sauvegardes dans les cartouches. Niveau carte graphique, une différence importante est que la carte graphique est connectée à la cartouche de jeu via un autre bus, afin de pouvoir lire les sprites et textures du jeu dans la cartouche. [[File:Architecture de la NES.png|centre|vignette|upright=2.5|Architecture de la NES]] La différence avec l'architecture précédente est que des bus ont été fusionnés. Comme dit plus haut, le système utilise une architecture Harvard, vu que la ROM est dans la cartouche, alors que la RAM est soudée à la carte mère. Par contre, la Famicon utilise un bus dédié aux entrées-sorties. Il est utilisé pour la carte son et la carte graphique, seules les manettes sont sur un bus à part. Ce qui fait qu'on devrait plutôt parler de bus de sorties, mais passons... L'essentiel est qu'on n'est plus tout à fait dans le cas de la console précédente, avec un bus par composant. ===L'architecture de la SNES=== L'architecture de la SNES est illustrée ci-dessous. Les changements pour le processeur et la RAM sont mineurs.La RAM a augmenté en taille et passe à 128 KB. Pareil pour la RAM de la carte vidéo, qui passe à 64 KB. Par contre, on remarque un changement complet au niveau des bus, de la carte graphique et de la carte son. [[File:Architecture de la SNES.png|centre|vignette|upright=2|Architecture de la SNES]] La console utilise un '''bus système unique''', sur lequel tout est connecté : ROM, RAM, entrées-sorties, etc. La seule exception est pour les manettes, qui sont encore connectées directement sur le processeur, via un bus séparé. La transition vers un bus système s'explique par le fait que la console est maintenant de 16 bits, ce qui fait que les bus doivent être plus larges. Le processeur adresse des mémoires RAM et ROM plus grandes, ce qui double la taille de leurs bus. De plus, les entrées-sorties aussi ont besoin d'un bus plus large. Le processeur n'ayant pas un nombre illimité de broches, la seule solution est de fusionner les bus en un seul bus système. Un autre changement est que la carte graphique est maintenant composée de deux circuits séparés. Encore une fois, il ne s'agit pas de coprocesseurs, mais de circuits non-programmables. Par contre, la carte son est remplacée par deux coprocesseurs audio ! De plus, les deux processeurs sont connectés à une mémoire RAM dédiée de 64 KB, comme pour la carte graphique. L'un est un processeur 8 bits (le DSP), l'autre est un processeur 16 bits. Un point très intéressant : certains jeux intégraient des coprocesseurs dans leurs cartouches de jeu ! Par exemple, les cartouches de Starfox et de Super Mario 2 contenait un coprocesseur Super FX, qui gérait des calculs de rendu 2D/3D. Le Cx4 faisait plus ou moins la même chose, il était spécialisé dans les calculs trigonométriques, et diverses opérations de rendu 2D/3D. En tout, il y a environ 16 coprocesseurs d'utiliser et on en trouve facilement la liste sur le net. La console était conçue pour, des pins sur les ports cartouches étaient prévues pour des fonctionnalités de cartouche annexes, dont ces coprocesseurs. Ces pins connectaient le coprocesseur au bus des entrées-sorties. Les coprocesseurs des cartouches de NES avaient souvent de la mémoire rien que pour eux, qui était intégrée dans la cartouche. ===L'architecture de la Megadrive et de la néo-géo=== Passons maintenant à la console de jeu Megadrive, une console 16 bits. Elle a une architecture similaire à celle de la néo-géo, une autre console bien plus puissante, sorti à peu près en même temps. Elles intègrent deux processeurs : un Motorola 68000 qui sert de processeur principal, un Z80 qui sert de processeur dédié à l'audio. Le Z80 et le Motorola 68000 étaient deux processeurs très populaires à l'époque. Le Z80 est une sorte de version améliorée de l'Intel 8088 utilisé sur les anciens PC et de nombreuses consoles utilisaient des Z80 comme processeur principal. Il était familier pour les programmeurs de l'époque, pour son cout réduit, sa bonne disponibilité, et bien d'autres avantages liés à sa production de masse. Le Z80 est utilisé comme co-processeur audio. Il commande un synthétiseur sonore, et est relié à sa propre mémoire, distincte de la mémoire principale. Le MC68000 est le processeur principal et a une relation maitre-esclave avec le Z80 : le MC68000 envoie des commandes au Z80, mais la communication ne va pas dans l'autre sens. Le Motorola 68000 était un processeur 16 bits, alors que le Z80 est un processeur 8 bits. Et cette différence fait que l'on ne peut pas connecter directement les deux sur le même bus, ou du moins pas facilement. La solution retenue est d'utiliser deux bus séparés : un bus de 16 bits connecté au 68000, un bus de 8 bits connecté au Z80. Le premier bus est un bus système sur lequel est connecté le 68000, 64 kibioctets de RAM, la cartouche de jeu, et la carte graphique. Le second bus est un bus de 8 bits, plus court, relié au Z80, à un synthétiseur sonore, et 8 kibioctets de RAM Les deux bus sont connectés à un '''''chipset''''', un circuit répartiteur, qui fait le pont entre les deux bus. Les manettes sont connectées sur le ''chipset''. Il contient un registre de 8 bits, dans lequel le MC68000 peut écrire dedans à sa guise, le registre étant adressable par le processeur. Lorsque le MC68000 écrit une valeur dedans, cela déclenche l’exécution automatique d'un programme pré-déterminé sur le Z80. : Pour ceux qui savent ce qu'est une interruption, les valeurs écrites dans ce registre sont des numéros d'interruption, qui indiquent quelle routine d'interruption exécuter. [[File:Architecture de la Megadrive et de la Néogeo.png|centre|vignette|upright=2.5|Architecture de la Megadrive et de la Néogeo]] Cet exemple nous montre que les bus systèmes sont certes très simples, mais aussi inflexibles. Ils fonctionnent bien quand les composants branchés dessus sont tous des composants 8 bits, ou sont tous de 16 bits, ou tous 32 bits. Mais dès qu'on mélange composants 8, 16, 32 ou 64 bits, les choses deviennent plus compliquées. Il est alors préférable d'utiliser des bus séparés, avec des répartiteurs pour faire le pont entre les différents bus. Et nous verrons que le problème s'est posé lui aussi sur les PC. ===L'architecture des anciennes consoles Playstation : beaucoup de co-processeurs=== Les consoles que nous venons d'aborder étaient des consoles 8 ou 16 bits. A partir des consoles 32 bits, leur architecture s'est rapprochée de celle des PC, avec un usage plus complexes de répartiteurs. La XBOX était très semblable à un PC : le processeur était un Pentium 3 modifié, la carte graphique était une Geforce 3 modifiée, les 64 mébioctets de RAM était la même mémoire DDR que celle des PC, le répartiteur secondaire était un ''chipset'' nForce de NVIDIA, etc. Mais les Playstation 1, 2 et 3 se distinguent de leur contemporains. Elles disposent de très nombreux co-processeurs, qui sont en plus très variés. La Playstation 1 a été une des premières console à utiliser les CD-ROM comme support de stockage, en remplacement des cartouches. La conséquence est que la console contient une mémoire ROM, soudée à la carte mère, de 512 kibioctets. Elle contient aussi 2 mébioctets de RAM, une carte graphique avec 1 mébioctet de mémoire vidéo, un processeur, et de quoi gérer les périphériques. Il y a un co-processeur audio spécialisé, avec 512 kibioctets de RAM, ce qui nous est familier. Par contre, les autres co-processeurs ne le sont pas. Déjà, le lecteur de CD-ROM est associé à des circuits sur la carte mère, il y a tout un sous-système dédié au lecteur de CD. Il y a un contrôleur qui sert d'interface avec le lecteur proprement dit, mais aussi deux co-processeurs audio et 32 kibioctets de RAM. Les co-processeurs audio servent à lire des CD sans trop utiliser le second co-processeur audio, ils lui servent de complément. Ensuite, le processeur incorpore plusieurs cœurs, avec un cœur principal et plusieurs co-processeurs. Le premier est un co-processeur système, qui est utilisé pour gérer la mémoire cache intégrée au processeur, pour des fonctionnalités appelées interruptions et exceptions, ainsi que pour configurer le processeur. Le second est un co-processeur arithmétique spécialisé dans les calculs en virgule flottante, très importants pour le rendu 3D. Enfin, il y a un décodeur vidéo, qui n'est pas un co-processeur, mais un circuit non-programmable, spécialisé dans le décodage vidéo. De nos jours, ce circuit aurait été intégré dans la carte graphique, mais il était intégré dans le processeur sur la Playstation 2. Pour le reste, le processeur est la figure centrale de la console. Il est connecté à 4 bus : un pour la RAM, un pour la carte graphique, un pour les manettes, un autre pour le reste. Le dernier bus est connecté au système audio et au système pour le lecteur CD. Ce serait un bus d'entrée-sortie, s'il n'était pas connecté à la mémoire ROM. Vous avez bien lu : la mémoire ROM est reliée au bus d'entrée-sortie. [[File:Architecture de la Playstation.png|centre|vignette|upright=2.5|Architecture de la Playstation]] La Playstation 2 est composé d'un processeur, couplé à 32 Mébioctets de RAM, et d'un paquet de co-processeurs. Plus de co-processeurs que la PS1. Le processeur principal n'est pas la même que celui de la PS1, mais il a une architecture similaire. Il intègre un décodeur vidéo sur le même circuit intégré, ainsi que deux co-processeur. Les co-processeurs ne sont cependant pas les mêmes. Le co-processeur système disparait et est remplacé par un second co-processeur arithmétique. Les deux co-processeurs arithmétiques sont spécialisés dans les nombres flottants, avec quelques différences entre les deux. Par exemple, le second co-processeur gérait des calculs trigonométriques, des exponentielles, des logarithmes, et d'autres fonctions complexes du genre ; mais pas le premier co-processeur. Ils sont reliés à 4 kibioctets de RAM pour le premier, 16 kibioctets de RAM pour le second ; qui sont intégrées dans le processeur et non-représentés dans le diagramme ci-dessous. La PS2 intègre aussi un co-processeur d'entrées-sorties. Pour information, il s'agit du processeur principal de la Playstation 1, qui est ici utilisé différemment, suivant que l'on place un jeu PS1 ou PS1 dans la console. Si on met un jeu PS1, il est utilisé pour émuler la Playstation 1, afin de faire tourner le jeu PS1 sur la PS2. Si on met un jeu PS2, il est utilisé comme co-processeur d'entrée-sortie et fait l'interface entre CPU et entrées-sorties. Il est relié à 2 mébioctets de RAM, soit exactement la même quantité de mémoire que la Playstation 1. Tous les périphériques sont connectés au co-processeur d'entrées-sortie. Pour cela, le co-processeur d'entrées-sortie est relié à deux bus dédiés aux périphériques. Le premier bus est relié aux manettes, aux ports USB et aux ports pour cartes mémoires. Le second bus est relié à la carte son, la carte réseau, le lecteur DVD, et un port PCMIA. Notons que la carte son intègre un co-processeur audio, qui n'est pas représenté dans le diagramme ci-dessous. [[File:Playstation 2 architecture.png|centre|vignette|upright=2.5|Playstation 2 architecture]] ==L'architecture des PC et son évolution== Après avoir vu les consoles, nous allons maintenant voir les anciens PC, des années 80 ou 90. Le tout premier PC était techniquement l''''IBM PC'''. Par la suite, de nombreux ordinateurs ont tenté de reproduire l'IBM PC originel, avec parfois quelques modifications mineures. De tels ordinateurs ''IBM PC compatibles'', ont été très nombreux, pour des raisons diverses. Le fait d'utiliser des composants banalisés, facilement disponibles, ainsi qu'une bonne documentation de l'IBM PC originel, a grandement aidé. Les IBM PC compatibles ont progressivement évolué pour donner les PC actuels. L'IBM PC compatible a donné naissance à de nombreux standards divers. ===L'IBM PC originel et l'IBM PC XT=== [[File:IBM PC XT 02.jpg|vignette|IBM PC XT.]] Nous allons commencer par voir l'IBM PC originel, et son successeur : l'IBM Personal Computer XT. Nous les appelerons tous deux l'IBM PC. L'IBM PC utilisait un processeur Intel 8088, qui était un processeur 8 bits. Ils utilisaient un bus système unique, appelé le '''bus XT'''. Le bus système allait à 4.77 MHz, soit la même fréquence que le processeur. C'était un bus de 8 bits, ce qui collait parfaitement avec les processeurs 8 bits commercialisés par Intel à l'époque. L'IBM PC comprenait une mémoire ROM avec de quoi faire fonctionner le PC. La ROM en question contenait un programme minimal, appelé le '''BIOS''', sans lequel le PC ne fonctionnait pas du tout. Il servait de base pour le système d'exploitation et MS-DOS ne fonctionnait pas sans elle. De nos jours, son rôle est plus limité : sans elle, le PC ne démarre pas. Mais nous détaillerons cela dans le prochain chapitre. En plus de la ROM pour le BIOS, l'IBM PC avait quatre mémoires ROM dédiée au langage de programmation BASIC. Lorsque le PC démarrait, il ne bootait pas un système d'exploitation, mais lançait l'interpréteur pour le langage BASIC. De nos jours, ce serait l'équivalent d'un ordinateur qui boote directement sur du Python, à savoir la console Python que vous avez peut-être déjà utilisé si vous avez testé Python. Ceux qui ont déjà touché à un ordinateur de l'époque savent ce que ca veut dire, mais c'est malheureusement très difficile à expliquer sans ce genre d'expérience. Toujours est-il que c'était une sorte de norme à l'époque : les ordinateurs bootaient généralement sur un interpréteur BASIC. [[File:XT Bus pins.svg|vignette|Connecteur du bus XT.]] Les PC étaient conçus pour qu'on branche des '''cartes d'extension''', à savoir des cartes électroniques qu'on branchait sur la carte mère, à l'intérieur du PC. Les cartes d'extension de l'époque étaient surtout des cartes son ou des cartes graphiques, mais aussi des cartes pour brancher des péripéhriques. par exemple, on pouvait ajouter deux cartes graphiques dans l'IBM PC originel : l'''IBM Monochrome Display Adapter'' et/ou la ''IBM Color Graphics Adapter''. De nos jours, les cartes son sont intégrées à la carte mère, mais les cartes graphiques sont restées des cartes d'extension. Les cartes d'extension étaient branchées sur un '''connecteur XT''', qui était directement relié au bus XT. Le connecteur XT est illustré ci-contre, mais ne vous en souciez pas trop pour le moment. La carte mère de l'IBM PC avait 5 connecteurs de ce type, qu'on pouvait peupler avec autant de cartes d'extension. L'IBM Personal Computer XT est passé à 8 connecteurs XT, soit trois de plus. Pour ce qui est des périphériques, l'IBM PC avait plusieurs connecteurs : un port série, un port parallèle, un port pour le clavier, et un port pour un lecteur cassette. Le clavier et le lecteur cassette étaient connectés directement sur la carte mère, qui contenait quelques circuits pour gérer le clavier. Par contre, les deux premiers n'étaient pas connectés à la carte mère. Le port série était en réalité une carte d'extension, branchée sur un connecteur XT. Et il en est de même pour le port parallèle. Pour ce qui est des supports de stockage, l'IBM PC originel n'avait pas de disque dur et n'avait que des lecteurs de disquette. De plus, le lecteur de disquette n'était pas connecté directement sur la carte mère, mais était connecté à une carte d'extension, branchée sur un connecteur XT. La carte d'extension avait deux connecteurs, un par lecteur de disquette, ce qui fait que les deux lecteurs de disquettes pouvaient être branchés sur une seule carte d'extension. L'IBM Personal Computer XT a ajouté un disque dur, sauf sur quelques sous-modèles spécifiques. Le PC avait aussi un petit haut-parleur capable de faire des bips. Pour résumer, l'IBM PC originel se reposait beaucoup sur les cartes d'extension, sa carte mère contenait peu de choses. Enfin, peu de choses... Il y avait un processeur Intel 8088, éventuellement un coprocesseur flottant 8087, de la RAM, de la ROM, et des circuits intégrés assez divers. En voici la liste, certains vous seront familiers, d'autres vous seront inconnus à ce stade du cours : * les circuits de décodage d'adresse ; * un contrôleur DMA intel 8273 ; * un contrôleur d'interruption 8259 ; * un contrôleur de bus Intel 8288 pour gérer le bus XT ; * un générateur d'horloge Intel 8284 et un diviseur de fréquence ; * un ''timer'' Intel 8253, le même que celui étudié dans le chapitre sur les ''timers'' ; * un contrôleur parallèle 8255. Les multiplexeurs, registres et portes logiques, sont des circuits de décodage d'adresse, qui permettent de combiner plusieurs RAM en une seule, idem avec la mémoire ROM. Si vous verrez qu'il y a 5 mémoires ROM : une ROM pour le BIOS, et quatre autres ROM pour le BASIC. Les 4 ROM du BASIC sont combinées en une seule mémoire ROM. Pour les RAM, il y en a 8 à 32, qui sont combinées en une seule RAM de 16 à 64 kibioctets. [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] ===L'architecture d'un IBM PC compatible 16 bits=== Les PC suivants sont passés à des processeurs 16 bits, mais c'était toujours des processeurs x86 d'Intel, à savoir des Intel 286 et 386. La RAM a grossi, quelques entrées-sorties ont été ajoutées, mais l'architecture globale est plus moins resté le même. C'est surtout au niveau du bus et des périphériques que les changements majeurs ont eu lieu. [[File:ISA Bus pins.svg|vignette|Connecteur ISA.]] Les PC 16 bits utilisaient un bus système unique, sur lequel tout était connecté : le processeur, la RAM, la ROM, les cartes d'extension et tout le reste. Le bus en question s'appelait le '''bus AT''', mais il a rapidement été renommé en '''bus ISA''' (''Industry Standard Architecture''). Le bus ISA était prévu pour avoir une compatibilité avec le bus 8 bits de l'IBM PC originel. D'ailleurs, cela se ressent jusque dans le connecteur utilisé : le connecteur ISA est un connecteur XT qu'on a fusionné avec un second connecteur pour l'étendre de 8 à 16 bits. Les PC 16 bits avaient toujours un port série, un port parallèle, un clavier, un lecteur de disquette et des cartes d'extension. Des disques durs pouvaient être ajoutés, aussi. Mais pour ces périphériques, un changement majeur a eu lieu comparé à l'IBM PC originel. L'IBM PC originel utilisait des cartes d'extension pour tout, sauf le clavier. Mais maintenant, les périphériques ne sont plus connectés à une carte d'extension. À la place, les circuits de la carte d'extension sont déplacés sur la carte mère. Mais n'allez pas croire qu'ils étaient connectés directement au bus ISA, il y avait des intermédiaires. Le clavier était relié à un '''contrôleur de clavier''', qui faisait l'interface entre le connecteur du clavier et le bus ISA. Le contrôleur de clavier était appelé le ''Keyboard Controler'', abrévié en KB. Il recevait ce qui est tapé au clavier et traduisait cela en quelque chose de compréhensible par l'ordinateur. Les autres périphériques étaient connectés à un circuit intégré dédié : l''''Intel 82091AA'''. Il était connecté au lecteur de disquette, au port série et au port parallèle. Il servait d'intermédiaire entre ces périphériques et le bus ISA. Vous pouvez le voir comme une sorte de répartiteur, mais qui ne serait pas connecté sur le processeur et la RAM Enfin, il ne faut pas oublier les autres composants présents sur l'IBM PC originel. Le BIOS est toujours là, de même que les ''timers'' Intel 8253 PIT, le contrôleur d'interruption Intel 8259 et le contrôleur DMA Intel 8237. Les PC 16 bits ont aussi intégré une ''Real Time Clock'' (RTC). Pour rappel, c'est un composant qui permet au PC de mémoriser la date et l'heure courante, à la seconde près. Le tout est résumé dans le schéma ci-dessous. [[File:Architecture de l'IBM PC compatible.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible]] Un point important est que le bus ISA allait à la même fréquence que le processeur, vu que c'était un bus système. Les processeurs de l'époque étaient des CPU 286 d'Intel, ou le 386 d'Intel. Les Intel 286 allaient de 4 MHz minimum, à 25 MHz maximum. Le 386, quant à lui, allait de 12 à 40 MHz. Le bus ISA devait aller à cette fréquence, il était synchrone avec le processeur. Par la suite, les processeurs ont gagné en performance, ce qui fait que le bus ISA est devenu trop lent pour le processeur. Une idée a alors été de conserver le bus ISA, pour des raisons de compatibilité, mais de le reléguer comme bus secondaire. L'ordinateur contient alors deux bus : un bus système, et un bus ISA secondaire. Le lien entre les deux est réalisé par un '''pont ISA''', ''ISA Bridge'' en anglais. Le bus ISA fonctionnait alors sa fréquence usuelle, alors que le bus système était beaucoup plus rapide. Le bus système fonctionnait à une fréquence bien plus élevée, ce qui fait que le processeur pouvait communiquer à pleine vitesse, notamment avec la RAM. Le processeur n'était alors plus forcé à aller à la même fréquence que le bus ISA [[File:Architecture de l'IBM PC compatible avec bridge ISA.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible avec bridge ISA]] Les PC de l'époque intégraient donc plusieurs bus séparés. Vous avez bien lu : plusieurs bus ! Ici, il s'agit de ce que j'appelle des '''bus en cascade''', à savoir qu'un bus est connecté à un autre bus par un intermédiaire. Au passage, si j'aborde ces exemples, car c'est pareil sur les ordinateurs modernes. Le pont ISA a été remplacé par des circuits différents, mais qui ont un rôle assez similaire. Le ''chipset'' de votre carte mère n'est qu'un lointain descendant du pont ISA, qui s'interface avec des bus différents. ===L'arrivée des standards AT et IDE pour les disques durs=== Initialement, les disques durs étaient placés dans l'ordinateur et étaient connectés sur le bus ISA, via une carte d'extension ISA. En clair, il fallait connecter le disque dur sur une carte d'extension, et non sur la carte mère. Les cartes d'extension en question permettaient de connecter un ou plusieurs disques durs, parfois des lecteurs de disquette supplémentaires. Les cartes ISA de ce type faisaient juste l'interface entre le bus ISA et les disques durs, rien de plus. L'interface en question a été standardisée, ce qui a donné le standard ''AT Bus Attachment'', qui a été abrévié en ATA. Et ce n'était pas que pour les disques durs, de nombreux composants étaient dans ce cas. Une carte d'extension servait d'intermédiaire entre eux et la carte mère. Les cartes d'extension en question étaient appelées des ''Host bus adapter''. [[File:Acculogic sIDE-4 Controller ISA.jpg|centre|vignette|upright=2|Carte ISA d'interface disque dur, de marque Acculogic.]] Mais les choses ont rapidement évoluées, que ce soit du côté des cartes mères que du côté des disques durs. Le '''standard IDE''' a permis de brancher un disque dur directement sur la carte mère, sans passer par une carte d'interface ISA. Pour cela, la carte mère réservait un connecteur ISA pour le disque dur, renommé '''connecteur ATA'''. Pour que cela soit possible, il a fallu rajouter des circuits sur la carte mère. Tout ce qui était sur les cartes d'interface ISA s'est retrouvé sur la carte mère. [[File:Ajout des ports IDE sur la carte mère.png|centre|vignette|upright=2|Ajout des ports IDE sur la carte mère]] En réalité, les connecteurs ATA étaient des connecteurs ISA simplifiés. Un connecteur ISA avait en tout 98 broches, alors qu'un connecteur ATA n'en contient que 40. Les broches qui étaient inutiles pour les disques durs ont simplement été enlevées. Et qui dit connecteur spécialisé, dit câble spécialisé. Les disques durs étaient branchés sur le connecteur AT grâce à un câble ATA, sur lequel on pouvait connecter deux disques durs. [[File:ATA Plug.svg|centre|vignette|upright=2|Connecteur ATA.]] [[File:ATA cables.jpg|centre|vignette|upright=2|Cable ATA.]] Il était donc possible de connecter deux disques durs sur un seul connecteur ATA. Et cette possibilité est devenue d'autant plus utile par la suite. A partir de la version 2, ATA supportait aussi les lecteurs de disquettes, les lecteurs de CD/DVD, et bien d'autres supports de stockage. Il était alors possible de connecter un lecteur CD et un disque dur sur un seul connecteur. Les cartes mères avaient généralement deux connecteurs ATA, et n'avaient pas besoin de plus. C'était suffisant pour connecter un disque dur, un lecteur de disquette et un lecteur CD, configuration courante entre les années 90 et 2000. Un câble est donc connecté à deux supports de stockage. Pour distinguer les deux, le standard ATA ajoute une possibilité de configuration. Sur un câble, il doit y avoir un support de stockage "maitre" et un support "esclave". C'était la terminologie de l'époque, que je reproduis ici, même si elle est fortement trompeuse. N'allez pas croire que cela implique que l'un ait des avantages sur l'autre. Le support 'maitre" n'a pas droit à plus de bande passante, il n'a pas la priorité sur l'autre, rien du tout. Il s'agit juste d'un nombre qui permet de savoir avec qui le processeur communique, qui vaut 0 pour le premier support, 1 pour l'autre. Une sorte d'adresse de 1 bit, si l'on veut. [[File:ATA-Konfiguration02.png|centre|vignette|upright=2|Configuration ATA.]] Pour configurer un support de stockage en mode "maitre" ou "esclave", le support de stockage avait quelques pins dédiés. Il suffisait de placer un détrompeur en plastique sur les pins adéquats. Les pins se trouvaient à l'arrière du disque dur ou du lecteur de CD/DVD/Disquette/autre. [[File:HDD Master and Slave Description.jpg|centre|vignette|upright=2|Configuration ''Master/Slave''.]] ===L'architecture d'un PC avec un processeur Intel 486=== Maintenant, passons aux ordinateurs 32 bits, avec l'exemple d'un PC avec un processeur 486 d'Intel. A cette époque, le bus ISA était devenu trop limité et était en place d'être remplacé par le bus PCI, qui avait la même fonction. De nombreuses cartes d'extension utilisaient déjà ce standard et étaient branchées sur des connecteurs PCI dédiés, différents des connecteurs ISA. Intuitivement, on se dit que le bus PCI remplaçait le bus ISA, mais les choses étaient plus compliquées. Les disques durs gardaient leur connecteur ATA, et ne passaient pas par le bus PCI. Ils avaient un bus IDE séparé, qui était un bus ISA modifié. Là encore, les processeurs étaient devenus beaucoup plus rapides que le bus PCI. Les deux allaient à des fréquences assez différentes, ce qui fait que le bus PCI était séparé du bus système. Il y avait alors deux implémentations possibles. * La première utilise un répartiteur unique, relié au processeur, à la RAM, au bus PCI, et au bus IDE. * La seconde utilise un bus système séparé du bus PCI, avec un '''pont PCI''' pour faire l'interface entre les deux. Le '''''System Controler''''' était un circuit intégré, placé sur la carte mère, qui peut servir soit de pont PCI, soit de répartiteur. Le répartiteur PCI sert d'intermédiaire avec le bus PCI, mais aussi avec le bus IDE, utilisé pour les disques durs, aussi appelé le bus ''Parallel ATA''. Il peut aussi être connecté au processeur, à la mémoire RAM, ainsi qu'à la mémoire cache, mais cela ne sert que quand il est utilisé comme répartiteur. [[File:Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur.png|centre|vignette|upright=2|Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur]] Pour des raisons de compatibilité, le bus ISA avait été conservé, aux côtés du bus PCI. Il y avait un pont ISA en plus du pont/répartiteur PCI. Une implémentation possible aurait été de connecter les deux ponts ISA et PCI à un bus système unique. Mais cette solution n'a pas été retenue. La raison est que le bus PCI et le bus ISA ont des performances très différentes. Le bus PCI est très rapide, le bus ISA beaucoup plus lent. La différence est d'un ordre de grandeur, environ. Dans ces conditions, il est possible de faire passer les communications ISA à travers le bus PCI. Pour cela, le pont ISA est directement connecté sur le pont PCI, comme illustré ci-dessous. Et il en est de même pour le bus dédié aux disques durs. En effet, les disques durs étaient autrefois reliés au bus ISA, mais cela a changé depuis. Ils disposent maintenant de leur propre bus dédié, le '''bus IDE''', qui est un bus ISA simplifié. Et ce bus ISA simplifié était connecté directement sur le pont PCI. [[File:Architecture de l'IBM PC compatible avec pont PCI.png|centre|vignette|upright=2|Architecture de l'IBM PC compatible avec pont PCI]] Dans ce qui va suivre, nous allons étudier un exemple qui utilise un bus système séparé, avec un pont PCI, sans répartiteur. Voilà pour les grandes lignes, mais le schéma ci-dessous montre que tout est plus complexe. Vous remarquerez des connexions optionnelles entre le pont PCI et la mémoire RAM et la mémoire cache. La raison est que le pont PCI peut aussi servir de répartiteur en remplacement du bus système. Concrètement, on peut alors retirer le bus système. La mémoire, le bus PCI, le bus ISA, le bus IDE, le processeur et la RAM sont alors connectés au répartiteur PCI, qui sert d'intermédiaire central entre tous ces composants. Mais ce n'est pas la solution qui a été retenue dans notre exemple. [[File:Intel486-Typ PCI System.png|centre|vignette|upright=2|PC IBM compatible avec un 486, un bus PCI et un bus ISA. Le ''host bus'' est le bus système.]] Le pont ISA sert ici d'intermédiaire entre le bus système et le bus ISA. De plus, il a été amélioré sur de nombreux points. Il inclut notamment des circuits qui étaient autrefois sur la carte mère, à savoir le contrôleur DMA 82C87 et le contrôleur d'interruption 82C59, ainsi que les ''timers'' Intel 82C54. Les composants restants sont eux reliés sur un quatrième bus : le bus X, l'ancêtre du bus ''Low Pin Count''. Le bus X était celui du BIOS, du contrôleur de clavier, de la ''Real Time Clock'', et du contrôleur de périphérique 82091AA d'Intel. [[File:ISA Bridge schematic.png|centre|vignette|upright=2|ISA Bridge.]] ===L'architecture des PC des années 90-2000=== Par la suite, les ponts PCI et ISA ont évolué avec l'évolution des bus de l'ordinateur. Le bus ISA a progressivement été remplacé par d'autres bus, comme le bus ''Low Pin Count'', le bus PCI a été remplacé par le PCI Express, d'autres bus ont été ajoutés, etc. Mais la séparation du ''chipset'' en deux a été conservée. [[File:Chipset schematic.svg|vignette|upright=1.0|Chipset séparé en northbridge et southbridge.]] Le pont PCI et le pont ISA ont été remplacés respectivement par le '''pont nord''' et le '''pont sud''', plus connus par leurs noms anglais de ''northbridge'' et de ''southbridge''. Le pont nord servait d'interface entre le processeur, la mémoire et la carte graphique et est connecté à chacun par un bus dédié. Il intégrait aussi le contrôleur mémoire. Le pont sud est le répartiteur pour les composants lents, à savoir l'USB, l'Ethernet, etc. Le bus qui relie le processeur au pont nord était appelé le '''''Front Side Bus''''', abrévié en FSB. [[File:IMac Chipset.png|centre|vignette|upright=2|Chipset séparé en northbridge et southbridge.]] Un point important est que le bus PCI est devenu un bus assez lent, ce qui fait qu'il a finit par être connecté au pont sud. Le pont PCI est donc devenu le pont sud, dans le courant des années 2000. Durant un moment, un équivalent du pont ISA a subsisté dans un circuit de '''''Super IO'''''. Concrètement, il s'occupait du lecteur de disquette, du port parallèle, du port série, et des ports PS/2 pour le clavier et la souris. Mais il ne gérait pas le bus ISA, mais son remplaçant, le bus ''Low Pin Count''. [[File:Motherboard diagram fr.svg|centre|vignette|upright=1.5|Carte mère avec circuit Super IO.]] ===L'architecture des PC depuis les années 2000=== Depuis la sortie du processeur AMD Athlon 64, le pont nord a été fusionné dans le processeur. La fusion ne s'est pas faite en une fois, des fonctionnalités ont progressivement été progressivement intégrées dans le processeur. Le pont sud est resté, mais il a alors été progressivement connecté directement au processeur. La raison derrière cette intégration est que les processeurs avaient de plus en plus de transistors à leur disposition. Ils en ont profité pour intégrer le pont nord. Et cela permettait de simplifier le câblage des cartes mères, sans pour autant rendre vraiment plus complexe la fabrication du processeur. Les industriels y trouvent leur compte. La première étape a été l'intégration du contrôleur mémoire a été intégré au processeur. Concrètement, le résultat était que la mémoire RAM n'était plus connectée au pont nord, mais était connectée directement au processeur ! Il y a donc eu un retour d'un bus mémoire, mais spécialisé pour la mémoire RAM. En théorie, une telle intégration permet diverses optimisations quant aux transferts avec la mémoire RAM. Les transferts ne passent pas par un répartiteur, ce qui réduit le temps d'accès à la mémoire RAM. Ajoutons de sombres histoires de prefetching, d'optimisation des commandes, et j'en passe. Toujours est-il que le pont nord ne servait alors d'intermédiaire que pour les ports PCI Express, et le pont sud. [[File:X58 Block Diagram.png|centre|vignette|upright=2|Chipset X58 d'Intel.]] Par la suite, la carte graphique fût aussi connectée directement sur le processeur. Le processeur incorpore pour cela des contrôleurs PCI-Express. Le pont nord a alors disparu complétement, son intégration dans le processeur était complète. Sur les cartes mères Intel récentes, le pont sdud subsiste, il est appelé le ''Platform Controler Hub'', ou PCH. L'organisation des bus sur la carte mère qui résulte de cette connexion du processeur à la carte graphique, est illustrée ci-dessous, avec l'exemple du PCH. [[File:Intel 5 Series architecture.png|centre|vignette|upright=2|Intel 5 Series architecture]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=L'interface électrique entre circuits intégrés et bus | prevText=L'interface électrique entre circuits intégrés et bus | next=La hiérarchie mémoire | nextText=La hiérarchie mémoire }} </noinclude> 3shu86pw486wrpn8ude2n0cvc149ihz 765746 765745 2026-05-01T22:09:49Z Mewtow 31375 /* Étude de quelques exemples d'architectures */ 765746 wikitext text/x-wiki Dans les chapitres précédents, nous avons vu comment représenter de l'information, la traiter et la mémoriser avec des circuits. Mais un ordinateur n'est pas qu'un amoncellement de circuits et est organisé d'une manière bien précise. Il est structuré autour de trois circuits principaux : * un '''processeur''', qui manipule l'information et donne un résultat ; * une '''mémoire''' qui mémorise les données à manipuler ; * les '''entrées/sorties''', qui permettent à l'ordinateur de communiquer avec l'extérieur. [[File:Architecture Von Neumann.png|centre|vignette|upright=2|Architecture d'un système à mémoire.]] Pour faire simple, le processeur est un circuit qui s'occupe de faire des calculs. Rien d'étonnant à cela. Je rappelle que tout est codé par des nombres dans un ordinateur, ce qui fait que manipuler des nombres revient simplement à faire des calculs. Un ordinateur n'est donc qu'une grosse calculatrice améliorée, et le processeur est le composant qui fait les calculs. La mémoire s'occupe purement de la mémorisation des données, des nombres sur lesquelles faire des calculs. Pour être plus précis, il y a deux mémoires : une pour les données proprement dites, une autre pour le programme à exécuter. La première est la '''mémoire RAM''', la seconde est la '''mémoire ROM'''. Nous détaillerons ce que sont ces deux mémoires dans la suite du chapitre, mais sachez que nous avions déjà rencontré ces deux types de mémoires dans les chapitres sur les registres et les mémoires adressables. Les entrées-sorties permettent au processeur et à la mémoire de communiquer avec l'extérieur et d'échanger des informations avec des périphériques. Les '''périphériques''' regroupent, pour rappel, tout ce est branché sur un ordinateur, mais n'est pas à l'intérieur de celui-ci. Le processeur, les mémoires et les entrées-sorties communiquent ensemble via un '''réseau d'interconnexions'''. Le terme est assez barbare, mais rien de compliqué sur le principe. C'est juste un ensemble de fils électriques qui relie les différents éléments d'un ordinateur. Les interconnexions sont souvent appelées le bus de communication, mais le terme est un abus de langage, comme on le verra plus bas. Afin de simplifier les explications, on va supposer que le réseau d'interconnexion est le suivant. Tout est connecté au processeur. Il y a des interconnexions entre le processeur et la mémoire RAM, d'autres interconnexions entre processeur et mémoire ROM, et d'autres entre le processeur et les entrées-sorties. Nous verrons que d'autres réseaux d'interconnexions fusionnent certaines interconnexions, pour les partager entre la ROM et la RAM, par exemple. Mais pour le moment, gardez le schéma ci-dessous en tête. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ==Les mémoires RAM et ROM== La mémoire est le composant qui mémorise des informations, des données. Dans la majorité des cas, la mémoire est composée de plusieurs '''cases mémoire''', chacune mémorisant plusieurs bits, le nombre de bits étant identique pour toutes les cases mémoire. Dans le cas le plus simple, une case mémoire mémorise un '''octet''', un groupe de 8 bits. Mais les mémoires modernes mémorisent plusieurs octets par case mémoire : elles ont des cases mémoires de 16, 32 ou 64 bits, soit respectivement 2/4/8 octets. De rares mémoires assez anciennes utilisaient des cases mémoires contenant 1, 2, 3, 4, 5, 6 7, 13, 17, 23, 36 ou 48 bits. Mais ce n'était pas des mémoires électroniques, aussi nous allons les passer sous silence. Tout ce qu'il faut savoir est que la quasi-totalité des mémoires électronique a un ou plusieurs octets par case mémoire. Pour simplifier, vous pouvez imaginer qu'une mémoire RAM est un regroupement de registre, chacun étant une case mémoire. C'est une description pas trop mauvaise pour décrire les mémoires RAM, qu'on abordera dans ce qui suit. {|class="wikitable" |+ Contenu d'une mémoire, case mémoire de 16 bits (deux octets) |- ! Case mémoire N°1 | 0001 0110 1111 1110 |- ! Case mémoire N°2 | 1111 1110 0110 1111 |- ! Case mémoire N°3 | 0001 0000 0110 0001 |- ! Case mémoire N°4 | 1000 0110 0001 0000 |- ! Case mémoire N°5 | 1100 1010 0110 0001 |- ! ... | ... |- ! Case mémoire N°1023 | 0001 0110 0001 0110 |- ! Case mémoire N°1024 | 0001 0110 0001 0110 |} Dans ce cours, il nous arrivera de partir du principe qu'il y a un octet par case mémoire, par souci de simplification. Mais ce ne sera pas systématique. De plus, il nous arrivera d'utiliser le terme adresse pour parler en réalité de la case mémoire associée, par métonymie. ===La capacité mémoire=== Bien évidemment, une mémoire ne peut stocker qu'une quantité finie de données. Et à ce petit jeu, certaines mémoires s'en sortent mieux que d'autres et peuvent stocker beaucoup plus de données que les autres. La '''capacité''' d'une mémoire correspond à la quantité d'informations que celle-ci peut mémoriser. Plus précisément, il s'agit du nombre maximal de bits qu'une mémoire peut contenir. Elle est le produit entre le nombre de cases mémoire, et la taille en bit d'une case mémoire. Toutes les mémoires actuelles utilisant des cases mémoire d'un ou plusieurs octets, ce qui nous arrange pour compter la capacité d'une mémoire. Au lieu de compter cette capacité en bits, on préfère mesurer la capacité d'une mémoire avec le nombre d'octets qu'elle contient. Mais les mémoires des PC font plusieurs millions ou milliards d'octets. Pour se faciliter la tâche, on utilise des préfixes pour désigner les différentes capacités mémoires. Vous connaissez sûrement ces préfixes : kibioctets, mébioctets et gibioctets, notés respectivement Kio, Mio et Gio. {|class="wikitable" |- !Préfixe!!Capacité mémoire en octets!!Puissance de deux |- ||Kio||1024||2<sup>10</sup> octets |- ||Mio||1 048 576||2<sup>20</sup> octets |- ||Gio||1 073 741 824||2<sup>30</sup> octets |} On peut se demander pourquoi utiliser des puissances de 1024, et ne pas utiliser des puissances un peu plus communes ? Dans la majorité des situations, les électroniciens préfèrent manipuler des puissances de deux pour se faciliter la vie. Par convention, on utilise souvent des puissances de 1024, qui est la puissance de deux la plus proche de 1000. Or, dans le langage courant, kilo, méga et giga sont des multiples de 1000. Quand vous vous pesez sur votre balance et que celle-ci vous indique 58 kilogrammes, cela veut dire que vous pesez 58 000 grammes. De même, un kilomètre est égal à 1000 mètres, et non 1024 mètres. Autrefois, on utilisait les termes kilo, méga et giga à la place de nos kibi, mebi et gibi, par abus de langage. Mais peu de personnes sont au courant de l'existence de ces nouvelles unités, et celles-ci sont rarement utilisées. Et cette confusion permet aux fabricants de disques durs de nous « arnaquer » : Ceux-ci donnent la capacité des disques durs qu'ils vendent en kilo, méga ou giga octets : l’acheteur croit implicitement avoir une capacité exprimée en kibi, mébi ou gibi octets, et se retrouve avec un disque dur qui contient moins de mémoire que prévu. ===Lecture et écriture : mémoires ROM et RWM=== Pour simplifier grandement, on peut grossièrement classer les mémoires en deux types : les ''Read Only Memory'' et les ''Read Write Memory'', aussi appelées mémoires ROM et mémoires RWM. Pour les '''mémoires ROM''', on ne peut pas modifier leur contenu. On peut y récupérer une donnée ou une instruction : on dit qu'on y accède en lecture. Mais on ne peut pas modifier les données qu'elles contiennent. Quant aux '''mémoires RWM''', on peut y accéder en lecture (récupérer une donnée stockée en mémoire), mais aussi en écriture : on peut stocker une donnée dans la mémoire, ou modifier une donnée existante. Tout ordinateur contient au minimum une ROM et une RWM (souvent une mémoire RAM), les deux n'ont pas exactement le même rôle. Pour simplifier, la mémoire ROM mémorise le programme à exécuter, la mémoire RWM stocke des données. Il a existé des ordinateurs où la mémoire RWM était une mémoire magnétique, voire acoustique, mais ce n'est plus le cas de nos jours. Pour les ordinateurs modernes, la mémoire RWM est une mémoire électronique. Pour faire la différence avec ces anciennes mémoires RWM, elle est appelée la '''mémoire RAM'''. Il s'agit d'une mémoire qui stocke temporairement des données que le processeur doit manipuler (on dit qu'elle est volatile). Elle s'efface complètement quand on coupe l'alimentation de l'ordinateur. Il existe d'autres différences entre mémoire RWM et RAM : * la mémoire RWM peut ne pas être volatile et donc conserver les données écrites ; * la mémoire RAM possède un temps d'accès constant aux données (quelle que soit l'adresse), ce qui n'est pas garanti pour les mémoires RWM. Outre le programme à exécuter, la mémoire ROM peut mémoriser des constantes, des données qui ne changent pas. Elles ne sont jamais modifiées et gardent la même valeur quoi qu'il se passe lors de l'exécution du programme. En conséquence, elles ne sont jamais accédées en écriture durant l'exécution du programme, ce qui fait que leur place est dans une mémoire ROM. La mémoire RWM est alors destinée aux données temporaires, qui changent ou sont modifiées lors de l'exécution du programme, et qui sont donc manipulées aussi bien en lecture et en écriture. La mémoire RWM mémorise alors les variables du programme à exécuter, qui sont des données que le programme va manipuler. Pour les systèmes les plus simples, la mémoire RWM ne sert à rien de plus. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Pour donner un exemple de données stockées en ROM, on peut prendre l'exemple des anciennes consoles de jeu 8 et 16 bits. Les jeux vidéos sur ces consoles étaient placés dans des cartouches de jeu, précisément dans une mémoire ROM à l'intérieur de la cartouche de jeu. La ROM mémorisait non seulement le code du jeu, le programme du jeu vidéo, mais aussi les niveaux et les ''sprites'' et autres données graphiques. Une conséquence est que les consoles 8/16 bits n'avaient pas besoin de beaucoup de RAM, comparé aux ordinateurs de l'époque, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. À l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. ===L'adressage mémoire=== Sur une mémoire RAM ou ROM, on ne peut lire ou écrire qu'une case mémoire, qu'un registre à la fois : une lecture ou écriture ne peut lire ou modifier qu'une seule case mémoire. Techniquement, le processeur doit préciser à quel case mémoire il veut accéder à chaque lecture/écriture. Pour cela, chaque case mémoire se voit attribuer un nombre binaire unique, l''''adresse''', qui va permettre de le sélectionner et de l'identifier celle-ci parmi toutes les autres. En fait, on peut comparer une adresse à un numéro de téléphone (ou à une adresse d'appartement) : chacun de vos correspondants a un numéro de téléphone et vous savez que pour appeler telle personne, vous devez composer tel numéro. Les adresses mémoires en sont l'équivalent pour les cases mémoire. [[File:Adressage mémoire.png|centre|vignette|upright=2|Exemple : on demande à la mémoire de sélectionner la case mémoire d'adresse 1002 et on récupère son contenu (ici, 17).]] L'adresse mémoire est générée par le processeur. Le processeur peut parfaitement calculer des adresses, en extraire du programme qu'il exécute, et bien d'autres choses. Nous détaillerons d'ailleurs les mécanismes pour dans les chapitres portant sur les modes d'adressage du processeur. Mais pour le moment, nous avons juste besoin de savoir que c'est le processeur qui envoie des adresses aux mémoires RAM et ROM. Les adresses générées par le processeur sont alors envoyées à la RAM ou la ROM via une connexion dédiée, un ensemble de fils qui connecte le processeur à la mémoire : le '''bus d'adresse mémoire'''. L'adresse sélectionne une case mémoire, le processeur peut alors récupérer la donnée dedans pour une lecture, écrire une donnée pour l'écriture. Pour cela, un second ensemble de fil connecte le processeur à la RAM/ROM, mais cette fois-ci pour échanger des données. Il s'agit du '''bus de données mémoire'''. Les deux sont souvent regroupés sous le terme de '''bus mémoire'''. Un ordinateur contient toujours une RAM et une ROM, ce qui demande aux bus mémoire de s'adapter à la présence de deux mémoires. Il y a alors deux solutions, illustrées dans les deux schémas ci-dessous. Avec la première, il y a un seul bus mémoire partagé entre la RAM et la ROM, comme illustré ci-dessous. Une autre solution utilise deux bus séparés : un pour la RAM et un autre pour la ROM. Nous verrons les différences pratiques entre les deux à la fin du chapitre. Pour le moment, nous allons partir du principe qu'il y a un bus pour la mémoire ROM, et un autre bus pour la RAM. [[File:CPT-System-Architecture-gapfill1-ANS.svg|centre|vignette|upright=2|Architecture avec une ROM et une RAM.]] [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ===L'alignement mémoire : introduction=== Plus haut, nous avions dit qu'il y a une adresse par case mémoire, chaque case mémoire contenant un ou plusieurs octets. Mais les processeurs modernes partent du principe que la mémoire a un octet par adresse, pas plus. Et ce même si la mémoire reliée au processeur utilise des cases mémoires de 2, 3, 4 octets ou plus. D'ailleurs, la majorité des mémoires RAM actuelle a des cases mémoires de 64 bits, soit 8 octets par case mémoire. Les raisons à cela sont multiple, mais nous les verrons en détail dans le chapitre sur l'alignement mémoire. Toujours est-il qu'il faut distinguer les '''adresses mémoire''' et les '''adresses d'octet''' gérées par le processeur. Le processeur génère des adresses d'octet, qui permettent de sélectionner un octet bien précis. L'adresse d'octet permet de sélectionner un octet parmi tous les autres. Mais la mémoire ne comprend pas directement cette adresse d'octet. Heureusement, l'octet en question est dans une case mémoire bien précise, qui a elle-même une adresse mémoire bien précise. L'adresse d'octet est alors convertie en une adresse mémoire, qui sélectionne la case mémoire adéquate, celle qui contient l'octet voulu. La case mémoire entière est lue, puis le processeur ne récupère que les données adéquates. Pour cela, des circuits d'alignement mémoire se chargent de faire la conversion entre adresses du processeur et adresse mémoire. Nous verrons cela dans le détail dans le chapitre sur l'alignement mémoire. Il existe des mémoires qui n'utilisent pas d'adresses mémoire, mais passons : ce sera pour la suite du cours. ==Le processeur== Dans les ordinateurs, l'unité de traitement porte le nom de '''processeur''', ou encore de '''''Central Processing Unit''''', abrévié en CPU. Le rôle principal du processeur est de faire des calculs. La plupart des processeurs actuels supportent au minimum l'addition, la soustraction et la multiplication. Quelques processeurs ne gèrent pas la division, qui est une opération très gourmande en circuit, peu utilisée, très lente. Il arrive que des processeurs très peu performants ne gèrent pas la multiplication, mais c'est assez rare. Un processeur ne fait pas que des calculs. Tout processeur est conçu pour effectuer un nombre limité d'opérations bien précises, comme des calculs, des échanges de données avec la mémoire, etc. Ces opérations sont appelées des '''instructions'''. Les plus intuitives sont les '''instructions arithmétiques''', qui font des calculs, comme l'addition, la soustraction, la multiplication, la division. Mais il y a aussi des '''instructions d'accès mémoire''', qui échangent des données entre la mémoire RAM et le processeur. Les autres instructions ne sont pas très intuitives, aussi passons-les sous silence pour le moment, tout deviendra plus clair dans les chapitres sur le processeur. ===Le processeur exécute un programme, une suite d'instructions=== Tout processeur est conçu pour exécuter une suite d'instructions dans l'ordre demandé, cette suite s'appelant un '''programme'''. Ce que fait le processeur est défini par la suite d'instructions qu'il exécute, par le programme qu'on lui demande de faire. Les instructions sont exécutées dans un ordre bien précis, les unes après les autres. L'ordre en question est décidé par le programmeur. La totalité des logiciels présents sur un ordinateur sont des programmes comme les autres. Le programme à exécuter est stockée dans la mémoire de l'ordinateur. C'est ainsi que l'ordinateur est rendu programmable : modifier le contenu de la mémoire permet de changer le programme exécuté. Mine de rien, cette idée de stocker le programme en mémoire est ce qui a fait que l’informatique est ce qu'elle est aujourd’hui. C'est la définition même d'ordinateur : appareil programmable qui stocke son programme dans une mémoire modifiable. Une instruction est codée comme les données : sous la forme de suites de bits. Telle suite de bit indique qu'il faut faire une addition, telle autre demande de faire une soustraction, etc. Pour simplifier, nous allons supposer qu'il y a une instruction par adresse mémoire. Sur la grosse majorité des ordinateurs, les instructions sont placées les unes à la suite des autres dans l'ordre où elles doivent être exécutées. Un programme informatique n'est donc qu'une vulgaire suite d'instructions stockée quelque part dans la mémoire de l'ordinateur. {|class="wikitable" |+ Exemple de programme informatique |- ! Adresse ! Instruction |- ! 0 | Copier le contenu de l'adresse 0F05 dans le registre numéro 5 |- ! 1 | Charger le contenu de l'adresse 0555 dans le registre numéro 4 |- ! 2 | Additionner ces deux nombres |- ! 3 | Charger le contenu de l'adresse 0555 |- ! 4 | Faire en XOR avec le résultat antérieur |- ! ... | ... |- ! 5464 | Instruction d'arrêt |} Pour exécuter une suite d'instructions dans le bon ordre, le processeur détermine à chaque cycle quelle est la prochaine instruction à exécuter. Pour cela, le processeur mémorise l'adresse de l'instruction en cours dans un registre : le '''Program Counter'''. Je rappelle que des instructions consécutives sont dans des adresses consécutives. Pour passer à la prochaine instruction, il suffit donc d'incrémenter le ''program counter''. : Si une instruction prend plusieurs octets, plusieurs adresses, il suffit de l'incrémenter du nombre d'octets/adresses. D'autres processeurs font autrement : chaque instruction précise l'adresse de la suivante, directement dans la suite de bit représentant l'instruction en mémoire. Ces processeurs n'ont pas besoin de calculer une adresse qui leur est fournie sur un plateau d'argent. Sur des processeurs aussi bizarres, pas besoin de stocker les instructions en mémoire dans l'ordre dans lesquelles elles sont censées être exécutées. Mais ces processeurs sont très très rares et peuvent être considérés comme des exceptions à la règle. Nous venons de voir qu'un processeur contient un registre appelé le ''program counter''. Mais il n'est pas le seul. Pour pouvoir fonctionner, tout processeur doit mémoriser un certain nombre d’informations nécessaires à son fonctionnement, qui sont mémorisées dans des '''registres de contrôle'''. La plupart ont des noms assez barbares (registre d'état, ''program counter'') et nous ne pouvons pas en parler à ce moment du cours. Nous les verrons en temps voulu, mais il est important de préciser qu'ils existent. ===L'intérieur d'un processeur=== Fort de ce que nous savons, nous pouvons expliquer ce qu'il y a à l'intérieur d'un processeur. Le premier point est qu'un processeur fait des calculs, ce qui implique qu'il contient des circuits de calcul. Ils sont regroupés dans une ou plusieurs '''unités de calcul'''. Nous avons déjà vu comment fabriquer une unité de calcul simple, dans un chapitre dédié, et c'est la même qui est présente dans un processeur. Du moins dans les grandes lignes, les circuits des processeurs modernes étant particulièrement optimisés. Il en est de même pour les autres circuits de calcul comme ceux pour les multiplications/division/autres. Si le processeur fait des calculs, qu'en est-il des opérandes ? Et où sont mémorisés les résultats des opérations ? Pour cela, le processeur incorpore des '''registres généraux'''. Les registres généraux servent à mémoriser les opérandes et résultats des instructions. Ils mémorisent des données, contrairement aux registres de contrôle mentionnés plus haut. Le nombre de registres généraux dépend grandement du processeur. Les tout premiers processeurs se débrouillaient avec un seul registre, mais les processeurs actuels utilisent plusieurs registres, pour mémoriser plusieurs opérandes/résultats. Mais la présence de registres est source de pas mal de petites complications. Par exemple, il faut échanger les données entre la RAM et les registres, il faut gérer l'adressage des registres, etc. Il s'agit là de détails que nous expliquerons dans les chapitres sur le processeur. Le processeur contient enfin un circuit pour interpréter les instructions, appelé l''''unité de contrôle'''. Elle lit les instructions depuis la mémoire, interprète la suite de bit associée, et commande le reste du processeur pour qu'il exécute l'instruction. Ses fonctions sont assez variées, mais nous allons simplifier en disant qu'elle configure l'unité de calcul et les registres pour faire le bon calcul. Son rôle est d'analyser la suite de bit qui constitue l'instruction, et d'en déduire quelle opération effectuer. Elle gère aussi l'accès à la mémoire RAM, et notamment ce qui est envoyé sur son bus d'adresse. : Dans ce qui suit, on suppose que le ''program counter'' fait partie de l'unité de contrôle. Pour résumer, un processeur contient une unité de calcul, des registres et une interface avec la mémoire RAM. Le tout est interconnecté, afin de pouvoir échanger des données. L’ensemble forme le '''chemin de données''', nom qui trahit le fait que c'est là que les données se déplacent et sont traitées. Il faut aussi ajouter l'unité de contrôle pour commander le tout. Elle lit les instructions en mémoire, puis commande le chemin de données pour que l'instruction soit exécutée correctement. [[File:Microarchitecture d'un processeur.png|centre|vignette|upright=2|Microarchitecture d'un processeur]] Un processeur parait donc assez simple expliqué comme ça, mais il y a de nombreuses subtilités. L'une d'entre elle est liée aux registres, et notamment à la manière dont on les utilise. Pour expliquer ces subtilités, nous allons voir comment les premiers processeurs fonctionnaient, avant de passer aux processeurs un peu plus modernes. Les tout premiers processeurs n'utilisaient qu'un seul registre, ce qui fait que l'utilisation des registres était très simple. Le passage à plusieurs registres a complexifié le tout. ===D'où viennent les adresses ?=== Il est maintenant temps de répondre à une question qui s'était posée dans la section sur l'adressage : d'où viennent les adresses envoyées à la mémoire ? Pour ce qui est des adresses des instructions, on connait déjà la réponse : c'est le ''program counter'' qui gère tout. Mais pour les données, il y a deux possibilités, qui correspondent à deux types de données : les données statiques et les données dynamiques. Les '''données statiques''' sont les plus simples : elles existent durant toute la durée de vie du programme. Tant que celui-ci s'exécute, il aura besoin de ces données. En conséquence, il leur réserve une place en mémoire, qui est toujours la même. La donnée se situe donc à une adresse bien précise, qui ne change jamais. Attention cependant : les données peuvent être modifiées, changer de valeur. Le programme écrit dans les donnée statiques, c'est même assez fréquent. Ce sont ne sont pas forcément des données constantes ! Pour les données statiques, elles sont toujours placées à la même adresse mémoire. Pour le dire autrement, l'adresse mémoire est une constante, qui ne change pas. L'adresse est connue avant d’exécuter le programme, le programme a été codé pour utiliser cette adresse pour telle donnée, on a réservé une adresse pour la donnée voulue. Et même si vous quittez le programme et vous le relancez plusieurs jours après, l'adresse mémoire sera la même avant et après. Et cela permet d'utiliser l''''adressage direct'''. L'idée est que les instructions précisent donc l'adresse à lire ou écrire. Pour cela, l'adresse est intégrée dans l’instruction elle-même. Pour rappel, l'instruction est codée par une suite de bit en mémoire RAM/ROM, dont certains précisent l'opération à faire, les autres servant à autre chose. L'idée est que certains bits précisent l'adresse mémoire de la donnée à lire. Les instructions sont donc du genre : * ''LOAD 56'' - lit l'adresse numéro 56 et copie son contenu dans un registre; * ''STORE R5 , adress 99'', copie le registre R5 dans l'adresse 99 ; * ''ADD R5 , adress 209'' : additionne le registre R5 avec le contenu de l'adresse 209. S'il existe des données statiques, c'est signe qu'il existe des '''données dynamiques'''. Ces dernières sont des données qui sont créées ou détruites selon les besoins. Pour comprendre d'où viennent ces données dynamiques, prenons le cas d'une personne qui écrit du texte sur un ordinateur. Le texte qu'il écrit est mémorisé dans la RAM de l’ordinateur, puis est sauvegardé sur le disque dur quand il sauvegarde son document. Au fur et à mesure qu'il écrit du texte, la RAM utilisée par ce texte augmente. Donc, ce texte est une donnée dynamique, dont la taille varie dans le temps. Pour gérer des données dynamiques, la plupart des systèmes d'exploitation incorporent des fonctionnalités d''''allocation mémoire'''. Derrière ce nom barbare, se cache quelque chose de simple : les programmes peuvent réclamer de la mémoire au système d'exploitation, pour y placer les données qu'ils souhaitent. Les langages de programmation bas niveau supportent des fonctions comme malloc(), qui permettent de demander un bloc de mémoire de N octets à l'OS, qui doit alors accommoder la demande. De même, un programme peut libérer de la mémoire qu'il n'utilise plus avec des fonctions comme free(). Avec l'allocation mémoire, les données n'ont pas de place fixe en mémoire. Leur adresse mémoire peut varier d'une exécution du programme à l'autre. Pire que ça : les données peuvent être déplacées dans la mémoire RAM, si besoin. En clair : l'adresse est déterminée lors de l'exécution du programme. L'adresse est alors soit calculée, soit lue depuis la mémoire RAM, soit déterminée autrement. Toujours est-il qu'elle se retrouve dans un registre général. Pour gérer ces adresse variables, les processeurs utilisent l''''adressage indirect'''. L'adressage indirect permet d'utiliser une adresse qui est dans un registre de données. L'adresse en question peut être envoyée à la mémoire RAM sans problème, le processeur peut automatiquement connecter le registre adéquat sur le bus d'adresse. Au tout début de l'informatique, les processeurs ne supportaient que l'adressage direct, pas plus. L'adressage indirect n'était tout simplement pas possible. Avec l'adressage direct, l'adresse à lire est extraite directement des instructions, par l'unité de contrôle. Le bus d'adresse de la RAM est alors relié directement à l'unité de contrôle, le bus de données est relié aux registres. [[File:Architecture Harvard avec adressage direct uniquement.png|centre|vignette|upright=2|Architecture Harvard avec adressage direct uniquement]] Mais dès les années 70, l'adressage indirect est apparu, rendant la programmation bien plus simple. Mais cela a demandé quelques adaptation au niveau du processeur. Avec l'adressage indirect, le bus d'adresse est connecté aux registres. Il a donc fallu rajouter un multiplexeur pour que le processeur décide de relier le bus d'adresse soit aux registres, soit à l'unité de contrôle. ===Un ordinateur peut avoir plusieurs processeurs=== La plupart des ordinateurs n'ont qu'un seul processeur, ce qui fait qu'on désigne avec le terme d''''ordinateurs mono-processeur'''. Mais il a existé (et existe encore) des '''ordinateurs multi-processeurs''', avec plusieurs processeurs sur la même carte mère. L'idée était de gagner en performance : deux processeurs permettent de faire deux fois plus de calcul qu'un seul, quatre permettent d'en faire quatre fois plus, etc. C'est très courant sur les supercalculateurs, des ordinateurs très puissants conçus pour du calcul industriel ou scientifique, mais aussi sur les serveurs ! Dans le cas le plus courant, ils utilisent plusieurs processeurs identiques : on utilise deux processeurs Core i3 de même modèle, ou quatre Pentium 3, etc. Pour utiliser plusieurs processeurs, les programmes doivent être adaptés. Pour cela, il y a plusieurs possibilités : * Une première possibilité, assez intuitive, est d’exécuter des programmes différents sur des processeurs différents. Par exemple, on exécute le navigateur web sur un processeur, le lecteur vidéo sur un autre, etc. * La seconde option est de créer des programmes spéciaux, qui utilisent plusieurs processeurs. Ils répartissent les calculs à faire sur les différents processeurs. Un exemple est la lecture d'une vidéo sur le web : un processeur peut télécharger la vidéo pendant le visionnage et bufferiser celle-ci, un autre processeur peut décoder la vidéo, un autre décoder l'audio. De tels programmes restent des suites d'instructions, mais ils sont plus complexes que les programmes normaux, aussi nous les passons sous silence. * La troisième option est d’exécuter le même programme sur les différents processeurs, mais chaque processeur traite son propre ensemble de données. Par exemple, pour un programme de rendu 3D, quatre processeurs peuvent s'occuper chacun d'une portion de l'image. [[File:Architecture de Von Neumann Princeton multi processeurs.svg|centre|vignette|upright=2|Architecture de Von Neumann Princeton multi processeurs]] De nos jours, les ordinateurs grand public les plus utilisés sont dans un cas intermédiaire, ils ne sont ni mono-, ni multi-processeur. Ils n'ont qu'un seul processeur, dans le sens où si on ouvre l'ordinateur et qu'on regarde la carte mère, il n'y a qu'un seul processeur. Mais ce processeur est en réalité assez similaire à un regroupement de plusieurs processeurs dans le même boitier. Il s'agit de '''processeurs multicœurs''', qui contiennent plusieurs cœurs, chaque cœur pouvant exécuter un programme tout seul. La différence entre cœur et processeur est assez difficile à saisir, mais pour simplifier : un cœur est l'ensemble des circuits nécessaires pour exécuter un programme. Chaque cœur dispose de toute la machinerie électronique pour exécuter un programme, à savoir des circuits aux noms barbares comme : un séquenceur d'instruction, des registres, une unité de calcul. Par contre, certains circuits d'un processeur ne sont présents qu'en un seul exemplaire dans un processeur multicœur, comme les circuits de communication avec la mémoire ou les circuits d’interfaçage avec la carte mère. Suivant le nombre de cœurs présents dans notre processeur, celui-ci sera appelé un processeur double-cœur (deux cœurs), quadruple-cœur (4 cœurs), octuple-cœur (8 cœurs), etc. Un processeur double-cœur est équivalent à avoir deux processeurs dans l'ordinateur, un processeur quadruple-cœur est équivalent à avoir quatre processeurs dans l'ordinateur, etc. Ces processeurs sont devenus la norme dans les ordinateurs grand public et les logiciels et systèmes d'exploitation se sont adaptés. ===Les coprocesseurs=== Quelques ordinateurs assez anciens disposaient de '''coprocesseurs''', des processeurs qui complémentaient un processeur principal. Les ordinateurs de ce type avaient un processeur principal, le '''CPU''', qui était secondé par un ou plusieurs coprocesseurs. Sauf exception, le CPU et le coprocesseur exécutent des programmes différents, ils travaillent en parallèle. Les coprocesseurs les plus connus sont les '''coprocesseurs pour le rendu 2D/3D'''. Ils ont eu leur heure de gloire sur les anciennes consoles de jeux vidéo, comme Super Nintendo, la Playstation et autres consoles de cette génération ou antérieure. Ils s'occupaient respectivement de calculer les graphismes des jeux vidéos. De nos jours, ils ont été remplacés par des cartes graphiques, ou des ''Graphic Processing Units'', qui ne sont pas considérées comme des coprocesseurs. Les '''coprocesseurs sonores''' sont une sorte d'ancêtre des cartes son, utilisés sur les anciennes consoles de jeux vidéo, comme La Nintendo 64, la Playstation et autres consoles antérieures. Ils s'occupaient respectivement de calculer tout ce qui a trait au son. Pour donner un exemple, on peut citer la console Neo-géo, qui disposait de deux processeurs travaillant en parallèle : un processeur principal, et un coprocesseur sonore. Le processeur principal était un Motorola 68000, alors que le coprocesseur sonore était un processeur Z80. L'accès aux périphériques est quelque chose sur lequel nous passerons plusieurs chapitres dans ce cours. Mais sachez que l'accès aux périphériques peut demander pas mal de puissance de calculs. Le CPU principal peut faire ce genre de calculs par lui-même, mais il n'est pas rare qu'un '''coprocesseur d'IO''' soit dédié à l'accès aux périphériques. Un exemple assez récent est celui de la console de jeu Nintendo 3DS. Elle disposait d'un processeur principal de type ARM9, d'un coprocesseur pour les divisions qu'on abordera plus bas, et d'un second processeur ARM7. L'ARM 7 était utilisé comme coprocesseur d'I/O, ainsi que pour l'émulation de la console GBA. [[File:Asmp 2.gif|centre|vignette|upright=2|Co-processeur pour l'accès aux entrées-sorties.]] Les '''coprocesseurs arithmétiques''' sont un peu à part des autres. Ils sont spécialisés dans les calculs en virgule flottante. Ils étaient utilisés à une époque où les CPU ne géraient que des calculs entiers (en binaire ou en BCD). Un exemple est le coprocesseur flottant x87, complémentaire des premiers processeurs Intel x86. Il y a eu la même chose sur les processeurs Motorola 68000, avec deux coprocesseurs flottants appelés les Motorola 68881 et les Motorola 68882. Un exemple récent de coprocesseur est celui utilisé sur la console de jeu Nintendo DS. La console utilisait deux processeurs, un ARM9 et un ARM7, qui ne pouvaient pas faire de division entière. Il s'agit pourtant d'opérations importantes dans le cas du rendu 3D, ce qui fait que les concepteurs de la console ont rajouté un coprocesseur spécialisé dans les divisions entières et les racines carrées. Le coprocesseur était adressable directement par le processeur, comme peuvent l'être la RAM ou les périphériques. ==Les entrées-sorties== Tous les circuits vus précédemment traitent des données codées en binaire. Ceci dit, les données ne sortent pas de n'importe où : l'ordinateur contient des composants électroniques qui traduisent des informations venant de l’extérieur en nombres. Ces composants sont ce qu'on appelle des '''entrées'''. Par exemple, le clavier est une entrée : l'électronique du clavier attribue un nombre entier (''scancode'') à une touche, nombre qui sera communiqué à l’ordinateur lors de l'appui d'une touche. Pareil pour la souris : quand vous bougez la souris, celle-ci envoie des informations sur la position ou le mouvement du curseur, informations qui sont codées sous la forme de nombres. La carte son évoquée il y a quelques chapitres est bien sûr une entrée : elle est capable d'enregistrer un son, et de le restituer sous la forme de nombres. S’il y a des entrées, on trouve aussi des '''sorties''', des composants électroniques qui transforment des nombres présents dans l'ordinateur en quelque chose d'utile. Ces sorties effectuent la traduction inverse de celle faite par les entrées : si les entrées convertissent une information en nombre, les sorties font l'inverse : là où les entrées encodent, les sorties décodent. Par exemple, un écran LCD est un circuit de sortie : il reçoit des informations, et les transforme en image affichée à l'écran. Même chose pour une imprimante : elle reçoit des documents texte encodés sous forme de nombres, et permet de les imprimer sur du papier. Et la carte son est aussi une sortie, vu qu'elle transforme les sons d'un fichier audio en tensions destinées à un haut-parleur : c'est à la fois une entrée, et une sortie. Les '''entrées-sorties''' incluent toutes les entrées et sorties, et même certains composants qui sont les deux à la fois. Il s'agit d'un terme générique, qui regroupe des composants forts différents. Dans ce qui va suivre, nous allons parfois parler de périphériques au lieu d'entrées-sorties, mais les deux termes ne sont pas équivalents. Dans le détail, les entrées-sorties regroupent : * Les '''périphériques''' sont les composants connectés sur l'unité centrale. Exemple : les claviers, souris, webcam, imprimantes, écrans, clés USB, disques durs externes, la Box internet, etc. * Les '''cartes d'extension''', qui se connectent sur la carte mère via un connecteur, comme les cartes son ou les cartes graphiques. * D'autres composants sont soudés à la carte mère mais sont techniquement des entrées-sorties : les cartes sons soudées sur les cartes mères actuelles, par exemple. ===L'interface avec le reste de l'ordinateur=== Les entrées-sorties sont très diverses, fonctionnent très différemment les unes des autres. Mais du point de vue du reste de l'ordinateur, les choses sont relativement standardisées. Du point de vue du processeur, les entrées-sorties sont juste des paquets de registres ! Tous les périphériques, toutes les entrées-sorties contiennent des '''registres d’interfaçage''', qui permettent de faire l'intermédiaire entre l'entrée/sortie et le reste de l'ordinateur. L'entrée/sortie est conçu pour réagir automatiquement quand on écrit dans ces registres. [[File:Registres d'interfaçage.png|centre|vignette|upright=2|Registres d'interfaçage.]] Les registres d’interfaçage sont assez variés. Les plus évidents sont les '''registres de données''', qui permettent l'échange de données entre le processeur et les périphériques. Pour échanger des données avec l'entrée/sortie, le processeur a juste à lire ou écrire dans ces registres de données. On trouve généralement un registre de lecture et un registre d'écriture, mais il se peut que les deux soient fusionnés en un seul registre d’interfaçage de données. Si le processeur veut envoyer une donnée à une entrée/sortie, il a juste à écrire dans ces registres. Inversement, s'il veut lire une donnée, il a juste à lire le registre adéquat. Mais le processeur ne fait pas que transmettre des données à l'entrée/sortie. Le processeur lui envoie aussi des « commandes », des valeurs numériques auxquelles l'entrée/sortie répond en effectuant un ensemble d'actions préprogrammées. En clair, ce sont l'équivalent des instructions du processeur, mais pour l'entrée/sortie. Par exemple, les commandes envoyées à une carte graphique peuvent être : affiche l'image présente à cette adresse mémoire, calcule le rendu 3D à partir des données présentes dans ta mémoire, etc. Pour recevoir les commandes, l'entrée/sortie contient des ''registres de commande'' qui mémorisent les commandes envoyées par le processeur. Quand le processeur veut envoyer une commande à l'entrée/sortie, il écrit la commande en question dans ce ou ces registres. Enfin, beaucoup d'entrée/sortie ont un ''registre d'état'', lisible par le processeur, qui contient des informations sur l'état de l'entrée/sortie. Ils servent notamment à indiquer au processeur que l'entrée/sortie est disponible, qu'il est en train d’exécuter une commande, qu'il est occupé, qu'il y a un problème, qu'il y a une erreur de configuration, etc. ===Les adresses des registres d’interfaçage=== Les registres des périphériques sont identifiés par des adresses mémoires. Et les adresses sont conçues de façon à ce que les adresses des différentes entrées/sorties ne se marchent pas sur les pieds. Chaque entrée/sortie, chaque registre, chaque contrôleur a sa propre adresse. D'ordinaire, certains bits de l'adresse indiquent quel est le destinataire. Certains indiquent quel est l'entrée/sortie voulue, les restants indiquant le registre de destination. Il existe deux organisations possibles pour les adresses des registres d’interfaçages. La première possibilité est de séparer les adresses pour les registres d’interfaçage et les adresses pour la mémoire. Le processeur doit avoir des instructions séparées pour gérer les périphériques et adresser la mémoire. Il a des instructions de lecture/écriture pour lire/écrire en mémoire, et d'autres pour lire/écrire les registres d’interfaçage. Sans cela, le processeur ne saurait pas si une adresse est destinée à un périphérique ou à la mémoire. [[File:Espaces d'adressages séparés entre mémoire et périphérique.png|centre|vignette|upright=2.5|Espaces d'adressages séparés entre mémoire et périphérique]] L'autre méthode mélange les adresses mémoire et des entrées-sorties. Si on prend par exemple un processeur de 16 bits, où les adresses font 16 bits, alors les 65536 adresses possibles seront découpées en deux portions : une partie ira adresser la RAM/ROM, l'autre les périphériques. On parle alors d''''entrées-sorties mappées en mémoire'''. L'avantage est que le processeur n'a pas besoin d'avoir des instructions séparées pour les deux. [[File:IO mappées en mémoire.png|centre|vignette|upright=2.0|IO mappées en mémoire]] Pour résumer, communiquer avec une entrée/sortie est similaire à ce qu'on a avec les mémoires. Il suffit de lire ou écrire dans des registres d’interfaçage, qui ont chacun une adresse mémoire. Le problème est que le système d'exploitation ne connaît pas toujours le fonctionnement d'une entrée/sortie : il faut installer un programme qui va s'exécuter quand on souhaite communiquer avec l'entrée/sortie, et qui s'occupera de tout ce qui est nécessaire pour le transfert des données, l'adressage du périphérique, etc. Ce petit programme est appelé un driver ou '''pilote de périphérique'''. La « programmation » périphérique est très simple : il suffit de savoir quoi mettre dans les registres, et c'est le pilote qui s'en charge. ==Les architectures Harvard et Von Neumann== Après avoir vu le processeur, les mémoires et les entrées-sorties, voyons voir comment le tout est interconnecté. Tous les ordinateurs ne sont pas organisés de la même manière, pour ce qui est de leurs bus. Mais pour comprendre pourquoi, nous devons regarder qui communique avec qui, dans un ordinateur. Pour rappel, les données sont placées en mémoire RAM, alors que les instructions sont placées en mémoire ROM. Le processeur lit des instructions dans la mémoire ROM, il lit et écrit dans la mémoire RAM, et accède aux registres d’interfaçage des entrées-sorties. Il y a donc besoins de trois interconnexions : CPU-ROM, CPU-RAM et CPU-IO. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] Il parait intéressant d'utiliser trois interconnexions, au minimum CPU-ROM, CPU-RAM et CPU-IO. Néanmoins, faire ainsi a de nombreux désavantages. Déjà, il faut pouvoir brancher tout ça sur le processeur. Et celui-ci n'a pas forcément assez de broches pour. Aussi, il est parfois préférable de mutualiser des bus, à savoir de connecter plusieurs composants sur un même bus. Par exemple, on peut mutualiser le bus pour la mémoire RAM et pour la mémoire ROM. Il faut dire que les deux bus sont des bus mémoire, avec un bus d'adresse, un bus de données, et surtout : des bus de commande similaires. Les mutualiser est alors très simple, et permet d'économiser pas mal de broches. [[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre et une architecture Harvard]] Cette mutualisation nous amène naturellement à parler de la distinction entre les architectures Harvard d'un côté et les architectures Von Neumann de l'autre. Elle est très liée au fait d'utiliser soit un bus mémoire unique, soit des bus séparés pour la ROM et la RAM. Voyons cela en détail. ===Les architectures Harvard et Von Neumann : des bus séparés ou unifiés=== Avec l''''architecture Harvard''', la mémoire ROM et la mémoire RAM sont reliées au processeur par deux bus séparés. Il y a un bus RAM pour la mémoire RAM, un bus ROM pour la mémoire ROM. L'avantage de cette architecture est qu'elle permet de charger une instruction et une donnée simultanément : une instruction chargée sur le bus relié à la mémoire programme, et une donnée chargée sur le bus relié à la mémoire de données. Et cela simplifie fortement la conception du processeur. [[File:Harvard Architecture.png|centre|vignette|upright=2|Architecture Harvard, avec une ROM et une RAM séparées.]] Avec l''''architecture Von Neumann''', mémoire ROM et mémoire RAM sont reliées au processeur par un bus unique. Le bus unique qui relie processeur, RAM et ROM, s'appelle le '''bus mémoire'''. Un défaut de ces architecture est qu'elles ne peuvent pas charger une instruction et une donnée en même temps. Et cela pose quelques problèmes pour la conception du processeur. Par contre, nous verrons dans ce qui suit qu'utiliser un bus mémoire partagé est bien plus flexible et permet des choses que les architectures Harvard ne peuvent pas faire. [[File:Architecture Von Neumann, avec deux bus séparés.png|centre|vignette|upright=2|Architecture Von Neumann, avec deux bus séparés.]] ===Les architectures Harvard et Von Neumann : des espaces d'adressage séparés ou unifiés=== La distinction précédente se base sur les connexions entre RAM, ROM et processeur. Mais il existe une autre distinction, très liée, qui est souvent utilisée comme seconde définition des architectures Harvard/Von Neumann. Elle est liée aux adresses mémoire que le processeur peut gérer. Prenons un processeur 16 bits, par exemple, qui gère naturellement des adresses de 16 bits. Il peut gérer 2^16 adresses, soit 64 kibioctets de mémoire. L'ensemble de ces adresses est appelé un '''espace d'adressage'''. Mais comment cet espace d'adressage est utilisé pour adresser une RAM et une ROM ? Sur les architectures Harvard, le processeur voit deux mémoires séparées avec leur lot d'adresses distinctes. Une même adresse peut donc correspondre soit à la mémoire ROM, soit à la mémoire RAM, suivant le bus utilisé. L'espace d'adressage est donc doublé, dupliqué, avec un pour la ROM, un autre pour la RAM. Rien d'étonnant à cela : il y a deux bus d'adresses, chacun correspondant à un espace d'adressage. [[File:Vision de la mémoire par un processeur sur une architecture Harvard.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Harvard.]] Avec l'architecture Von Neumann, la RAM et la ROM doivent se partager les adresses mémoires disponibles. Il n'y a qu'un seul espace d'adressage qui est coupé en deux, avec une partie pour la ROM et une autre pour la RAM. Une adresse correspond soit à la mémoire RAM, soit à la mémoire ROM, mais pas aux deux. Typiquement, la mémoire ROM occupe une partie des adresses, la mémoire RAM utilise le reste. La répartition des adresses est réalisée par les circuits de décodage d'adresse mentionnés plus haut. [[File:Vision de la mémoire par un processeur sur une architecture Von Neumann.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Von Neumann.]] Les '''architectures Harvard modifiées''' sont des intermédiaires entre architectures Harvard et architectures Von Neumann, bien qu'elles penchent bien plus du côté des architectures Harvard. Précisons que la terminologie n'est pas claire, beaucoup d'auteurs mettent des définitions différentes derrière ces deux termes. Mais dans ce cours, nous utiliserons une définition très stricte de ce qu'est une architecture Harvard modifiée. Une architecture Harvard modifiée est une architecture Harvard, où le processeur peut lire des données constantes depuis la mémoire ROM. Nous avions vu plus haut que les mémoires ROM peuvent mémoriser, en plus d'un programme exécutable, des données constantes, qui ne varient pas. Les architectures Harvard pures ne permettent pas de lire des données de ce genre depuis la mémoire ROM, alors que les architectures Harvard modifiées le permettent. Une architecture Harvard modifiée dispose d'une instruction pour lire les données en mémoire RWM, et d'une instruction pour lire des données en mémoire ROM. Il y a donc deux versions de l'instruction LOAD, qui copient la donnée dans un registre général, mais dont la source de la donnée est différente. Une autre possibilité, plus rare, est que une instruction de copie, qui copie une constante depuis la mémoire ROM vers la mémoire RAM. Le cas le plus commun est l'utilisation de deux instructions LOAD séparées. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Ceci étant dit, revenons à la distinction entre architecture Harvard et Von Neumann. Il faut noter que la RAM et la ROM n'ont pas forcément la même taille. Et ce que ce soit sur une architecture Harvard que sur une architecture Von Neumann, mais c'est plus facile à expliquer sur une architecture Harvard. On peut par exemple imaginer une architecture Harvard qui utilise des adresses de 16 bits pour la ROM, et seulement 8 bits pour la RAM. Le résultat est qu'il peut adresser 64 kibioctets de ROM, mais seulement 256 octets de RAM. Les deux bus d'adresse sont alors de taille différente, l'un faisant 8 bits, l'autre 16. Quelques processeurs 8 bits étaient dans ce cas, comme on le verra dans le chapitre sur les CPU 8bits. Mais d'autres processeurs utilisent des valeurs différentes, avec par exemple des adresses de 16 bits pour la RAM, mais de 20 bits pour la ROM, ou inversement. Sur une architecture Von Neumann, tout dépend de comment les adresses sont réparties. La solution la plus simple découpe l'espace d'adressage en deux parties égales, avec la RAM qui est dans la moitié basse (qui part de l'adresse 0 jusqu'à l'adresse au milieu), alors que la ROM est dans la moitié haute (entre l'adresse du milieu et l'adresse maximale). Mais ce n'est pas la seule possibilité, la limite entre RAM et ROM peut être mise n'importe où. Prenons par exemple un processeur 32 bits, capable de gérer 4 milliards d'adresse. Il est parfaitement possible de réserver 128 mébioctets de poids fort à la mémoire ROM, et de laisser le reste à la mémoire RAM. ===Le décodage d'adresse sur les architectures Von Neumann=== Pour résumer, les architectures Harvard et Von Neumann se distinguent sur deux points : * L'accès à la RAM et à la ROM se font par des bus séparés sur l'architecture Harvard, sur le même bus avec l'architecture Von Neumann. * Les adresses pour la mémoire ROM et la mémoire RAM sont séparées sur les architectures Harvard, partagées sur l’architecture Von Neumann. Les architectures Von Neumann utilisent donc un seul bus pour connecter la RAM et la ROM au processeur. Mais cela ne parait pas intuitif : comment deux composants peuvent se connecter aux mêmes fils ? Parce que c'est ce qu'implique le fait de partager un bus. Si je prends une mémoire RAM et une mémoire ROM, toutes deux de 8 bits, elles seront connectées à un bus mémoire de 8 bits. Intuitivement, on se dit qu'il y aura des conflits, du genre : la RAM et la ROM vont accéder au bus en même temps, comment savoir si une adresse est destinée à la RAM ou la ROM, etc ? Tous ces problèmes sont résolus avec une solution très simple : à chaque instant, seule une mémoire est connectée au bus. L'idée est que les mémoires sont connectées ou déconnectées du bus selon les besoins. Si le processeur veut envoyer lire une donnée en mémoire RAM, il déconnecte la mémoire ROM du bus. Et inversement, s'il veut lire une instruction, il déconnecte la RAM et connecte la ROM. Pour cela, les mémoires RAM et ROM possèdent une entrée ''Chip Select'' ou ''Output Enable'', qui agit comme une sorte de bouton ON/OFF. Lorsqu'on met un 1 sur cette entrée, la mémoire se connectera au bus. Ses entrées et sorties fonctionneront normalement, elle pourra recevoir des adresses, envoyer ou recevoir des données, tout sera normal. Par contre, si on met un 0 sur cette entrée, la mémoire se "désactive", ses entrée-sorties ne répondent plus aux sollicitations extérieures. Pire que ça : elles sont électriquement déconnectées. Au total, tout cela demande de gérer deux bit ''Chip Select''/''Output Enable'' : un pour la RAM, un pour la ROM. Et ces deux bits sont configurés pour chaque accès mémoire, pour chaque lecture ou écriture. Pour cela, un circuit de '''décodage d'adresse''' prend en entrée l'adresse mémoire à lire/écrire, et active/désactive les mémoires RAM/ROM selon les besoins. Il prend l'adresse et configure les bits ''Chip Select''/''Output Enable''. [[File:Décodage d'adresse sur une architecture Von Neumann.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann.]] L'implémentation la plus simple réserve la moitié des adresses pour la RAM, l'autre moitié pour la ROM. Typiquement, la ROM prend la moitié basse, la RAM la moitié haute. Dans ce cas, activer/désactiver la RAM et la ROM se fait avec seulement le bit de poids fort de l'adresse. Si le bit de poids fort est à 1, alors on accède à la RAM et la ROM doit être désactivée. Mais si ce bit est à 0, alors on accède à la moitié basse et il faut désactiver la RAM. Une remarque intéressante : le fait de séparer la mémoire en deux parts égales permet de simuler une architecture Harvard à partir d'une architecture Von Neumann. Par exemple, le tout premier processeur d'Intel, le 4004, était l'un de ceux là. La RAM et la ROM sont reliés au même bus, et il y a donc un unique espace d'adressage, qui est séparé en deux parties égales. Le truc est que le processeur traite les deux parties égales comme deux espaces d'adressage séparés. Le processeur se débrouille pour cacher le fait qu'il y a un espace d'adressage unique coupé en deux, ce qui fait que les programmeurs voient bien deux espaces d'adressages distincts. [[File:Décodage d'adresse sur une architecture Von Neumann basique.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann basique.]] Pour résumer, quand une adresse est envoyée sur le bus, les deux mémoires vont la recevoir mais une seule va répondre et se connecter au bus. Le décodage d'adresse garantit que seule la mémoire adéquate réponde à un accès mémoire. Le décodage d'adresse est réalisé par la carte mère, par un composant dédié. Le mécanisme peut être utilisé pour combiner plusieurs RAM en une seule, idem avec les ROM. Pour comprendre l'idée, je vais prendre l'exemple de l'IBM PC, un des tout premier PC existant. Nous étudierons ce PC dans une section dédiée, à la fin du chapitre, aussi je vais passer rapidement dessus. Tout ce que je vais faire est vous présenter la carte mère du PC, et vous demander de faire est de compter les mémoires ROM et mémoires RAM sur la carte mère : [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] Si vous remarquerez qu'il y a 5 mémoires ROM et 8 à 32 mémoires RAM. Le fait est que le processeur voit les différentes mémoires ROM comme une seule mémoire ROM. Idem avec les mémoires RAM : elle font chacune 2 kibioctets, et l'ensemble est vu par le processeur comme une seule RAM de 16 à 64 kibioctets. Et cela grâce aux circuits de décodage d'adresse, qui sont situés en haut à droite de la carte mère. Pour comprendre l'idée, prenons l'exemple d'un processeur 16 bits, capable de gérer 64 kibioctets de mémoire. L'espace d'adressage est découpé en quatre portions, de 16 kibioctets chacune. Une portion est réservée à une ROM de 16 kibioctet, les autres sont chacune réservée à une RAM de 16 kibioctet. Le décodage d'adresse sélectionne alors la mémoire adéquate en utilisant les deux bits de poids fort de l'adresse. * S'ils valent 00, alors c'est la mémoire ROM qui est activée, connectée au bus. * S'ils valent 01, alors c'est la première mémoire RAM qui est connectée au bus. * S'ils valent 10, alors c'est la seconde mémoire RAM qui est connectée au bus. * S'ils valent 11, alors c'est la troisième mémoire RAM qui est connectée au bus. [[File:Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM.png|centre|vignette|upright=3|Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM]] ===L'impact sur la conception du processeur=== Plus haut, j'ai parlé d'un des avantages des architectures Harvard : elles peuvent lire une instruction en même temps qu'elles accèdent à une donnée. La donnée est lue/écrite en RAM, alors que l'instruction est lue en ROM. Et cela permet de simplifier l'intérieur du processeur. Pas de beaucoup, mais c'est déjà ça de pris. Voyons maintenant comment cela impacte l'intérieur du processeur. Tout ce dont vous avez à vous rappeler est la séparation entre chemin de données et unité de contrôle, et que les registres généraux sont dans le premier, le ''program counter'' dans la seconde. Avec une architecture Harvard, les instructions et les données passent par des bus différent : bus ROM pour les instructions, bus RAM pour les données. L'intuition nous dit que le bus pour la mémoire ROM est connecté à l'unité de contrôle, alors que le bus pour la RAM est connecté au chemin de données. Et dans les grandes lignes, c'est vrai. La logique est imparable pour ce qui est des bus de données. Mais il y a une petite subtilité pour les bus d'adresse. Pour comprendre comment le processeur exploite ces deux bus, voyons ce qui transite dessus. Pour la mémoire ROM, elle reçoit l'adresse de l'instruction à lire, elle renvoie l'instruction adéquate. Pour cela, le ''program counter'' est envoyé sur le bus d'adresse, l'instruction sur le bus de données. Pour la mémoire RAM, elle échange des données avec les registres généraux, les registres pour les données. Les adresses utilisées pour la RAM viennent elles soit du chemin de données, soit de l'unité de contrôle, tout dépend du mode d'adressage. Mais le ''program counter'' n'est pas impliqué. [[File:Architecture Harvard - échanges de données.png|centre|vignette|upright=2|Architecture Harvard - échanges de données]] Les architectures Harvard modifiées doivent cependant rajouter une connexion entre le bus ROM et les registres généraux. C'est nécessaire pour charger une donnée constante depuis la mémoire ROM. Rappelons que la donnée constante est copiée dans un registre général, donc dans le chemin de données. [[File:Architecture Harvard modifiée - implémentation du processeur.png|centre|vignette|upright=2|Architecture Harvard modifiée - implémentation du processeur]] Avec les architectures Von Neumann, il y a un seul bus qui est relié à la fois au chemin de données et à l'unité de contrôle. Si le processeur lit une instruction, le bus doit être relié à l'unité de contrôle. Par contre, s'il accède à une donnée, il doit être relié au chemin de données (le bus d'adresse peut éventuellement être connecté au séquenceur, si celui-ci fournit l'adresse à lire). Il faut donc utiliser un paquet de multiplexeurs et de démultiplexeurs pour faire la connexion au bon endroit. [[File:Architecture Von Neumann - implémentation du processeur.png|centre|vignette|upright=2|Architecture Von Neumann - implémentation du processeur]] Une instruction se fait en deux temps : on charge l'instruction depuis la mémoire ROM, puis on l'exécute. Avec une architecture Harvard, tout cela se fait en un seul cycle d'horloge, vu que charger la ROM et accéder aux données peut se faire en même temps. Pas avec les architectures Von Neumann, qui doivent libérer le bus mémoire après avoir chargé une instruction. Elles n'ont pas le choix : elles chargent l'instruction lors d'un premier cycle d'horloge, puis l'exécutent lors du second. Pour cela, ils incorporent un registre appelé le '''registre d'instruction''', qui mémorise l'instruction chargée. L'instruction est copiée dans ce registre lors du premier cycle, puis est utilisée lors du second cycle. Le registre permet de ne pas oublier l’instruction entre les deux cycles. Le registre d'instruction est obligatoire sur les architectures Von Neumann. En comparaison, il est facultatif sur les architectures Harvard. Elles peuvent en avoir un, pour des raisons techniques, mais ce n'est pas obligatoire. [[File:Registre d'instruction.png|centre|vignette|upright=2|Registre d'instruction.]] ===Les architectures Von Neumann sont plus flexibles=== Sur les architectures Harvard, le processeur sait faire la distinction entre programme et données. Les données sont stockées dans la mémoire RAM, le programme est stocké dans la mémoire ROM. Les deux sont séparés, accédés par le processeur sur des bus séparés, et c'est ce qui permet de faire la différence entre les deux. Il est impossible que le processeur exécute des données ou modifie le programme. Du moins, tant que la mémoire qui stocke le programme est bien une ROM. Par contre, sur les architectures Von Neumann, il est impossible de distinguer programme et données, sauf en ajoutant des techniques de protection mémoire avancées. La raison est qu'il est impossible de faire la différence entre donnée et instruction, vu que rien ne ressemble plus à une suite de bits qu'une autre suite de bits. Et c'est à l'origine d'un des avantages majeur de l'architecture Von Neumann : il est possible que des programmes soient copiés dans la mémoire RWM et exécutés dans celle-ci. Un cas d'utilisation familier est celui de votre ordinateur personnel. Le système d'exploitation et les autres logiciels sont copiés en mémoire RAM à chaque fois que vous les lancez. Mais cet exemple implique un disque dur, ce qui rend les choses plus compliquées que prévu. Un autre exemple serait la compilation de code à la volée, mais il ne sera pas très parlant. Un exemple plus adapté serait celui où la ROM mémorise un programme compressée dans la mémoire ROM, qui est décompressé pour être exécuté en mémoire RAM. Le programme de décompression est stocké en mémoire ROM et est exécuté au lancement de l’ordinateur. Cette méthode permet d'utiliser une mémoire ROM très petite et très lente, tout en ayant un programme rapide (si la mémoire RWM est rapide). Il est aussi possible de créer des programmes qui modifient leurs propres instructions : cela s'appelle du '''code auto-modifiant'''. Ce genre de choses servait autrefois sur des ordinateurs rudimentaires, au tout début de l'informatique. À l'époque, les adresses à lire/écrire devaient être écrites en dur dans le programme, dans les instructions exécutées. Pour gérer certaines fonctionnalités des langages de programmation qui ont besoin d'adresses modifiables, comme les tableaux, on devait corriger les adresses au besoin avec du code auto-modifiant. De nos jours, le code automodifiant est utilisée occasionnellement pour rendre un programme indétectable dans la mémoire (les virus informatiques utilisent beaucoup ce genre de procédés). L'impossibilité de séparer données et instructions est à l'origine de problèmes assez fâcheux. Il est parfaitement possible que le processeur charge et exécute des données, qu'il prend par erreur pour des instructions. C'est le cas quand des pirates informatiques arrivent à exploiter des bugs. Il arrive que des pirates informatiques vous fournissent des données corrompues, qui contiennent un virus ou un programme malveillant est caché dans les données. Les bugs en question permettent d'exécuter ces données, donc virus. Pour éviter cela, le système d'exploitation peut marquer certaines zones de la mémoire comme non-exécutable, c’est-à-dire que le système d'exploitation interdit d’exécution de quoi que ce soit qui est dans cette zone. Mais ce n'est pas parfait. Toujours est-il que tout cela est impossible sur les architectures Harvard. Et ce serait très limitant. Imaginez : pas possible de lancer un programme depuis le disque dur ou une clé USB, le programme doit impérativement être dans une mémoire ROM, pas de compilation à la volée, etc. Que des techniques très utilisées dans l'informatique moderne. Malgré ses défauts, les architectures Von Neumann ne sont pas les plus utilisées pour rien. Les architectures Harvard sont concrètement utilisées uniquement dans l'informatique embarquée, sur des microcontrôleurs très spécifiques. ==Le bus de communication avec les entrées-sorties== Le processeur, la mémoire et les entrées-sorties sont connectées par un ou plusieurs '''bus de communication'''. Ce bus n'est rien d'autre qu'un ensemble de fils électriques sur lesquels on envoie des zéros ou des uns. Pour communiquer avec la mémoire, il y a trois prérequis qu'un bus doit respecter : pouvoir sélectionner la case mémoire (ou l'entrée-sortie) dont on a besoin, préciser à la mémoire s'il s'agit d'une lecture ou d'une écriture, et enfin pouvoir transférer la donnée. Pour cela, on doit donc avoir trois bus spécialisés, bien distincts, qu'on nommera le bus de commande, le bus d'adresse, et le bus de donnée. * Le '''bus de données''', sur lequel s'échangent les données entre les composants. * Le '''bus de commande''' pour configurer la mémoire et les entrées-sorties. * Le '''bus d'adresse''', facultatif, permet de préciser quelle adresse mémoire il faut lire/écrire. Chaque composant possède des entrées séparées pour le bus d'adresse, le bus de commande et le bus de données. Par exemple, une mémoire RAM possédera des entrées sur lesquelles brancher le bus d'adresse, d'autres sur lesquelles brancher le bus de commande, et des broches d'entrée-sortie pour le bus de données. Précisons cependant que le bus de commande n'est pas exactement le même entre des mémoires RAM/ROM et des entrées-sorties. [[File:Bus general schematic.svg|centre|vignette|upright=2|Contenu d'un bus, généralités.]] ===Le réseau d'interconnexion : généralités=== Reprenons où nous nous étions arrêté. Avant de voir les architectures Harvard et Von Neumann, nous avions dit que le processeur, les mémoires et les entrées-sorties sont reliées entre eux par un réseau d'interconnexion. Nous venons de voir qu'il est possible de mutualiser certains bus, notamment celui de la mémoire RAM et celui de la mémoire ROM. Mais il est possible de faire la même chose pour les entrées-sorties. Là encore, il est possible de regrouper le bus mémoire avec les bus pour les entrées-sorties. Voyons ce que cela implique. {| |[[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec une architecture Harvard.]] |[[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Interconnexions d'une architecture Von Neumann.]] |} Avant de poursuivre, nous devons préciser quelque chose d'important. Sur les ordinateurs modernes, les entrées-sorties peuvent accéder à la mémoire RAM. Les ordinateurs modernes intègrent des techniques de '''''Direct Memory Access''''' (DMA) qui permettent aux entrées-sorties de lire ou d'écrire en mémoire RAM. Les transferts DMA se font sans intervention du processeur. Ils permettent de copier un bloc de plusieurs octets, dans deux sens : de la mémoire RAM vers une entrée-sortie, ou inversement. Le DMA demande d'ajouter un circuit dédié sur la carte mère : le contrôleur DMA. Il effectue la copie d'un paquet d'octets de la RAM vers l'entrée-sortie ou dans l'autre sens. [[File:Réseau d'interconnexion avec un processeur au centre, et direct memory access.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre, et direct memory access]] ===Les bus systèmes=== La première solution utilise un bus unique, celui-ci est appelé le '''bus système''', aussi appelé ''backplane bus''. Le bus système est connecté à la mémoire RAM, la mémoire ROM, au processeur, et aux entrées-sorties. Tous les composants présents dans l'ordinateur sont connectés à ce bus, sans exception. De tels bus avaient pour avantage la simplicité. Le processeur n'est connecté qu'à un seul bus, ce qui utilise peu de broches et économise des fils. La mutualisation des bus est totale, le câblage est plus simple, la fabrication aussi. [[File:Architecture minimale d'un ordinateur.png|centre|vignette|upright=2|Architecture minimale d'un ordinateur.]] Un bus système contient un bus d'adresse, de données et de commande. Un bus système se marie bien avec des entrées-sorties mappées en mémoire. La conséquence est que le bus d'adresse ne sert pas que pour l'accès à la mémoire RAM/ROM, mais aussi pour l'accès aux entrées-sorties. Il y a moyen d'implémenter un système d'adresse séparés avec, mais c'est pas l'idéal. [[File:Architecture Von Neumann avec les bus.png|centre|vignette|upright=2|Architecture Von Neumann avec les bus.]] Un bus système n'a pas de limitations quant aux échanges de données. Le processeur peut communiquer directement avec les mémoires et les entrées-sorties, les entrées-sorties peuvent communiquer avec la mémoire RAM, etc. Notamment, un bus système peut implémenter le ''Direct Memory Access''. Il suffit juste de connecter un contrôleur DMA sur le bus système. Le contrôleur DMA est considéré comme une entrée-sortie, ses registres sont mappés en mémoire et sont donc accessibles directement par le processeur. [[File:Bus système avec controleur DMA.png|centre|vignette|upright=2|Bus système avec contrôleur DMA.]] Si on suit la définition à la lettre, un bus système est systématiquement une architecture Von Neumann, vu que la mémoire ROM et la mémoire RAM sont reliées sur le bus système. La conséquence est que les circuits de décodage d'adresse sont présents. Ils sont toujours sur la carte mère, et sont plus ou moins à côté du bus système. Cependant, le décodage d'adresse est parfois étendu pour tenir compte des entrées-sorties. Les entrées-sorties soudées sur la carte mère ont elles aussi des entrées ''Chip Select'' ou quelque chose de similaire. Le décodage d'adresse peut alors les activer ou les désactiver suivant l'adresse envoyée sur le bus d'adresse. C'est ce qui arrive quand le processeur écrit dans un registre d’interfaçage : il envoie l'adresse de ce registre sur le bus d'adresse, le circuit de décodage d'adresse active seulement l'entrée-sortie associée. Il faut noter que ce n'est pas systématique, il existe des techniques pour se passer de décodage d'adresse. Mais nous en reparlerons dans le chapitre sur les bus de communication. [[File:Chipselectfr.png|centre|vignette|upright=1.5|Exemple détaillé.]] Les bus systèmes sont certes très simples, mais ils ont aussi des désavantages. Par exemple, il faut éviter que le processeur et les entrées-sorties se marchent sur les pieds, ils ne peuvent pas utiliser le bus en même temps. De tels conflits d'accès au bus système sont fréquents et ils réduisent la performance, comme on le verra dans le chapitre sur les bus. De plus, un bus système a le fâcheux désavantage de relier des composants allant à des vitesses très différentes : il arrivait fréquemment qu'un composant rapide doive attendre qu'un composant lent libère le bus. Le processeur était le composant le plus touché par ces temps d'attente. Elle était utilisée sur les tout premiers ordinateurs, pour sa simplicité. Elle était parfaitement adaptée aux anciens composants, qui allaient tous à la même vitesse. De nos jours, les ordinateurs à haute performance ne l'utilisent plus trop, mais elle est encore utilisée sur certains systèmes embarqués, en informatique industrielle dans des systèmes très peu puissants. ===Les bus d'entrées-sorties=== Les bus systèmes ont de nombreux problèmes, ce qui fait que d'anciens ordinateurs faisaient autrement. À la place d'un bus système unique, ils utilisent un bus séparé pour les mémoires, et un autre séparé pour les entrées-sorties. Le bus spécialisé pour la mémoire est appelé le '''bus mémoire''', l'autre bus est appelé le '''bus d'entrées-sorties'''. Le bus mémoire est généralement relié à la fois à la mémoire RAM et à la mémoire ROM, les exceptions ne sont pas rares, cependant. [[File:Bus mémoire séparé du bus pour les IO.png|centre|vignette|upright=2|Bus mémoire séparé du bus pour les IO]] Les bus d'entrée-sorties peuvent être spécialisés et simplifiés. Par exemple, ils peuvent avoir un bus de commande différent de celui de la mémoire, qui utilise nettement moins de fils. Le bus d'adresse peut aussi être réduit, et utiliser des adresses plus courtes que celles du bus mémoire. Les bus de données peuvent aussi être de taille différentes. Il est ainsi possible d'avoir un bus mémoire capable de lire/écrire 64 bits à la fois, alors que la communication avec les entrées-sorties se fait octet par octet ! En général, les bus d'entrée-sortie sont assez petits, ils ont une taille de 8 ou 16 bits, même si le bus mémoire est plus grand. Cela permet de ne pas gaspiller trop de broches. Ajouter un bus d'entrée-sortie n'est donc pas très gourmand en broches et en fils. : Il est en théorie possible d'avoir une fréquence différente pour les deux bus, avec un bus mémoire ultra-rapide et un bus pour les entrées-sorties est un bus moins rapide. Mais il faut que le processeur soit prévu pour, et c'est très rare. Niveau performances, le processeur peut théoriquement accéder à la mémoire en attendant qu'une entrée/sortie réponde, mais il faut que le processeur soit prévu pour, et ce n'est pas de la tarte. Par contre, cela implique d'avoir des adresses séparées pour les registres d’interfaçage et la mémoire. En clair : pas d'entrée-sortie mappée en mémoire ! Un autre problème est que les entrées-sorties ne peuvent pas communiquer avec la mémoire directement, elles doivent passer par l'intermédiaire du processeur. En clair : pas de ''Direct Memory Access'' ! Les deux sont des défauts rédhibitoires pour les programmeurs système, notamment pour ceux qui codent les pilotes de périphériques. Pour résumer, les défauts sont assez problématiques : pas d'entrées-sorties mappées en mémoire, pas de ''Direct Memory Access'', économie de broches limitée. Les deux premiers sont des défauts majeurs, qui font que de tels bus ne sont pas utilisés dans les ordinateurs modernes. À la place, ils utilisent une troisième solution, distincte des bus systèmes et des bus d'entrée-sorties. ===Les bus avec répartiteur=== Il existe une méthode intermédiaire, qui garde deux bus séparés pour la mémoire et les entrées-sorties, mais élimine les problèmes de brochage sur le processeur. L'idée est d'intercaler, entre le processeur et les deux bus, un '''circuit répartiteur'''. Il récupère tous les accès et distribue ceux-ci soit sur le bus mémoire, soit sur le bus des périphériques. Le ou les répartiteurs s'appellent aussi le '''''chipset''''' de la carte mère. C'était ce qui était fait à l'époque des premiers Pentium. À l'époque, la puce de gestion du bus PCI faisait office de répartiteur. Elle mémorisait des plages mémoires entières, certaines étant attribuées à la RAM, les autres aux périphériques mappés en mémoire. Elles utilisaient ces plages pour faire la répartition. [[File:IO mappées en mémoire avec séparation des bus.png|centre|vignette|upright=2|IO mappées en mémoire avec séparation des bus]] Niveau adresses des registres d'interfacage, il est possible d'avoir soit des adresses unifiées avec les adresses mémoire, soit des adresses séparées. L'usage d'un répartiteur ne pose pas de problèmes particuliers pour implémenter le DMA. La seule contrainte est que le contrôleur DMA soit intégré dans le répartiteur. Les échanges entre IO et mémoire passent par le répartiteur, qui fait le pont entre bus mémoire et bus des IO. [[File:Implémentation du DMA avec un répartiteur.png|centre|vignette|upright=2|Implémentation du DMA avec un répartiteur]] ==Les microcontrôleurs et ''system on chip''== Parfois, on décide de regrouper la mémoire, les bus, le CPU et les ports d'entrée-sortie dans un seul circuit intégré, un seul boitier. L'ensemble forme alors ce qu'on appelle un '''''System on Chip''''' (système sur une puce), abrévié en SoC. Le nom est assez explicite : un SoC comprend un système informatique complet sur une seule puce de silicium, microprocesseurs, mémoires et périphériques inclus. Ils incorporent aussi des ''timers'', des compteurs, et autres circuits très utiles. [[File:ARMSoCBlockDiagram.svg|centre|vignette|upright=2|SoC basé sur un processeur ARM, avec des entrées-sorties typiques de celles d'un µ-contrôleur. Le support du bus CAN, d'Ethernet, du bus SPI, d'un circuit de PWM (génération de signaux spécifiques), de convertisseurs analogique-digital et inverse, sont typiques des µ-contrôleurs.]] Le terme SoC regroupe des circuits imprimés assez variés, aux usages foncièrement différents et à la conception distincte. Les plus simples d’entre eux sont des microcontrôleurs, qui sont utilisés pour des applications à base performance. Les plus complexes sont utilisés pour des applications qui demandent plus de puissance, nous les appellerons SoC haute performance. La relation entre SoC et microcontrôleurs est assez compliquée à expliquer, la terminologie n'est pas clairement établie. Il existe quelques cours/livres qui séparent les deux, d'autres qui pensent que les deux sont très liés. Dans ce cours, nous allons partir du principe que tous les systèmes qui regroupent processeur, mémoire et quelques périphériques/entrées-sorties sont des SoC. Les microcontrôleurs sont donc un cas particulier de SoC, en suivant cette définition. ===Les microcontrôleurs=== Les '''microcontrôleurs''' sont des composants utilisés dans l'embarqué ou d'informatique industrielle. Leur nom trahit leur rôle. Ils sont utilisés pour contrôler de l'électroménager, des chaines de fabrication dans une usine, des applications robotiques, les alarmes domestiques, les voitures. De manière générale, on les trouve dans tous les systèmes dits embarqués et/ou temps réel. Ils ont besoin de s'interconnecter à un grand nombre de composants et intègrent pour cela un grand nombre d'entrée-sorties. Les microcontrôleurs sont généralement peu puissants, et doivent consommer peu d'énergie/électricité. Fait amusant, on en trouve dans certains périphériques informatiques. Par exemple, les anciens disques durs intégraient un microcontrôleur qui contrôlait plusieurs moteurs/ Les moteurs pour faire tourner les plateaux magnétiques et les moteurs pour déplacer les têtes de lecture/écriture étaient commandés par ce microcontrôleur. Comme autre exemple, les claviers d'ordinateurs intègrent un microcontrôleur connecté aux touches, qui détecte quand les touches sont appuyées et qui communique avec l'ordinateur. Nous détaillerons ces deux exemples dans les chapitres dédiés aux périphériques et aux disques durs, tout deviendra plus clair à ce moment là. La majorité des périphériques ou des composants internes à un ordinateur contiennent des microcontrôleurs. Un microcontrôleur tend à intégrer des entrées-sorties assez spécifiques, qu'on ne retrouve pas dans les SoC destinés au grand public. Un microcontrôleur est typiquement relié à un paquet de senseurs et son rôle est de commander des moteurs ou d'autres composants. Et les entrées-sorties intégrées sont adaptées à cette tâche. Par exemple, ils tendent à intégrer de nombreux convertisseurs numériques-analogiques pour gérer des senseurs. Ils intègrent aussi des circuits de génération de signaux PWM spécialisés pour commander des moteurs, le processeur peut gérer des calculs trigonométriques (utiles pour commander la rotation d'un moteur), etc. [[File:C8051F340-9 A B C D.png|centre|vignette|upright=2|Exemple d'entrées-sorties intégrées à un microcontroleur.]] En plus des entrées-sorties intégrées, les microcontrôleurs ont souvent des '''ports d'entrées-sorties''' banalisés, à savoir qu'on peut brancher n'importe quoi dessus. Il était possible de brancher un capteur de température, un moteur à commander, un port série, un port parallèle, un écran, un clavier, une souris, peu importe. Les ports font souvent un octet et ils sont généralement reliées directement ou indirectement au processeur. Le logiciel qui s'exécute sur le processeur décide quoi envoyer sur des broches et comment interprète ce qui est reçu dessus. Les ports banalisés de ce type sont parfois appelés des '''GPIO''', abréviation de ''General Purpose Input/Output'', mais nous utiliserons le terme de ''port I/O''. Un port regroupe plusieurs broches qui peuvent être utilisés à volonté. C'est le logiciel qui s'exécute sur le processeur qui décide de la fonction de broches. Un port IO peut fonctionner soit en tant qu'entrée, soit en tant que sortie. Il est possible de changer de sens en cours de fonctionnement, pour passer d'une entrée à une sortie ou inversement. [[File:Afficheurs7seg.png|centre|vignette|upright=2|Exemple d'utilisation d'un port I/O. le port est connecté à un afficheur LCD dit 7-segments. Les 8 entrées de cet afficheur sont connectées à un port I/O d'un octet.]] ===Les SoC haute performance=== Les SoC les plus performants sont actuellement utilisés dans les téléphones mobiles, tablettes, ''Netbook'', ''smartphones'', ou tout appareil informatique grand public qui ne doit pas prendre beaucoup de place. La petite taille de ces appareils fait qu'ils gagnent à regrouper toute leur électronique dans un circuit imprimé unique. Mais les contraintes font qu'ils doivent être assez puissants. Ils incorporent des processeurs assez puissants, surtout ceux des ''smartphones''. C'est absolument nécessaire pour faire tourner le système d'exploitation du téléphone et les applications installées dessus. Niveau entrées-sorties, ils incorporent souvent des interfaces WIFI et cellulaires (4G/5G), des ports USB, des ports audio, et même des cartes graphiques pour les plus puissants d'entre eux. Les SoC incorporent des cartes graphiques pour gérer tout ce qui a trait à l'écran LCD/OLED, mais aussi pour gérer la caméra, voire le visionnage de vidéo (avec des décodeurs/encodeurs matériel). Par exemple, les SoC Tegra de NVIDIA incorporent une carte graphique, avec des interfaces HDMI et VGA, avec des décodeurs vidéo matériel H.264 & VC-1 gérant le 720p. Pour résumer, les périphériques sont adaptés à leur utilisation et sont donc foncièrement différents de ceux des microcontrôleurs. [[File:SOMblk.png|centre|vignette|upright=3|Exemple de SoC.]] Un point important est que les processeurs d'un SoC haute performance sont... performants. Ils sont le plus souvent des processeurs de marque ARM, qui sont différents de ceux utilisés dans les PC fixe/portables grand public qui sont eux de type x86. Nous verrons dans quelques chapitres en quoi consistent ces différences, quand nous parlerons des jeux d'instruction du processeur. Autrefois réservé au monde des PCs, les processeurs multicœurs deviennent de plus en plus fréquents pour les SoC de haute performance. Il n'est pas rare qu'un SoC incorpore plusieurs cœurs. Il arrive même qu'ils soient foncièrement différents, avec plusieurs cœurs d'architecture différente. La frontière entre SoC haute performance et microcontrôleur est de plus en plus floue. De nombreux appareils du quotidien intègrent des SoC haute performance, d'autres des microcontrôleurs. Par exemple, les lecteurs CD/DVD/BR et certains trackers GPS intègrent un SoC ou des processeurs dont la performance est assez pêchue. À l'opposé, les systèmes domotiques intègrent souvent des microcontrôleurs simples. Malgré tout, les deux cas d'utilisation font que le SoC/microcontrôleur est connecté à un grand nombre d'entrées-sorties très divers, comme des capteurs, des écrans, des LEDs, etc. [[File:GPS tracker Hardware Architecture.png|centre|vignette|upright=2|Hardware d'un tracker GPS.]] ==Étude de l'architecture de quelques consoles de jeu== Après avoir vu la théorie, nous allons voir des exemples réels d'ordinateurs. Dans ce qui suit, nous allons voir des ordinateurs qui collent assez bien à l''''architecture de base''' vue plus haut, avec un CPU, une RAM et une ROM, quelques entrées-sorties. Tous les ordinateurs modernes, mais aussi dans les smartphones, les consoles de jeu et autres, utilisent une architecture grandement modifiée et améliorée, avec un grand nombre de périphériques, des disques durs/SSD, un grand nombre de mémoires différentes, etc. Il pourrait sembler pertinent d’étudier des microcontrôleurs ou des ''System On Chip'', en premier lieu. Mais nous éviterons soigneusement de tels systèmes pour le moment. La raison est qu'ils ont un grand nombre d'entrées-sorties, qui sont peu familières. Attendez-vous à avoir près d'une vingtaine ou centaine d'entrée-sorties différentes pour de tels systèmes. Le tout est très complexe, bien trop pour un premier exemple. À la place, nous allons voir précisément des exemples plus simples : les premiers PC, et des consoles de jeu 8 et 16 bits. Bien que ce soit des systèmes très simples, ils sont cependant plus complexes que l'architecture de base. Et leur avantages/désavantages sont un peu inverse l'un de l'autre. Si on devait résumer les différences, on aurait ceci : * Les PC ont plus d'entrées-sorties que les consoles, bien que nettement moins que pour les microcontrôleurs/SoC. * Les PC utilisent des disques durs, les consoles font avec soit des cartouches de jeu, soit des CD/DVD. * Les PC utilisent des cartes électroniques séparées pour le son et l'écran, les consoles utilisent des circuits soudés sur la carte mère, qui sont souvent des co-processeurs. * Les PC ont une mémoire ROM soudées sur la carte mère, les consoles 8 bits font sans. Les PC et micro-ordinateurs ont plus d'entrées-sorties que les consoles. Même si on mets de côté les périphériques, ils ont aussi beaucoup de composants soudées sur la carte mère. En comparaison, les consoles de jeu 8/16 bits se débrouillent avec : une cartouche de jeu et une manette en entrée, une sortie vidéo et une sortie son. Un autre point important est l'absence de disque dur ou de lecteur CD. La présence d'un disque dur ou d'un lecteur CD/DVD complexifie tout de suite l'architecture des PC. Il faut leur réserver un bus dédié ou les connecter à un bus système, cela demande d'ajouter des circuits sur la carte mère, etc. Et surtout, il faut expliquer comment l'ordinateur exécute des programmes, ce qui demande de parler de l'interaction avec le disque dur et la ROM du BIOS. Rien de tout cela sur les consoles de jeu 8 et 16 bits. Elles utilisent à la place des cartouches de jeu, qui intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Pas besoin de parler des mémoires de stockage, on est beaucoup plus proche de l'architecture de base avec une ROM unique. Par contre, n'allez pas croire que tout est rose avec les consoles 8/16 bits. Il y a quelques différences qui font qu'elles sont plus complexes qu'un PC sur certains points. Les PC utilisent des cartes électroniques à brancher sur la carte mère pour alimenter l'écran et les hauts-parleurs/casques, alors que les consoles de jeu utilisent des souvent co-processeurs dédiés pour le son et les graphismes. La différence parait mineure, mais elle avantage les consoles. Nous avons déjà expliqué ce que sont les co-processeurs plus haut, aussi les co-processeurs des consoles nous paraitrons familiers. On n'a pas à s’embêter à expliquer ce que sont les cartes d'extension, les bus associés et tout ce qui va avec, cela peut être retardé pour la section sur l'architecture des PC. La gestion de la cartouche de jeu est aussi un peu subtile à comprendre, bien que ce soit bien plus simple à comprendre qu'un système avec un disque dur. Les cartouches de jeu intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Et le processeur doit exécuter le code depuis cette mémoire ROM. La conséquence est que les consoles 8/16 bits utilisent une architecture Harvard, avec un bus relié à la cartouche pour lire les instructions. Mais si ce n'était que ça... Les cartouches mémorisent aussi les données pour les graphismes, ce qui fait que le co-processeur vidéo doit lui aussi lire la cartouche pour récupérer ces données... ===L'architecture de la TurboGraphX-16=== La console PC Engine, aussi appelée TurboGraphX, est une ancienne console 8 bits. Elle contient un processeur 65C02, 8 kibioctets de RAM, un port manettes, une carte son et une carte vidéo. La '''carte son''' est le composant qui s'occupe de commander les haut-parleurs et de gérer tout ce qui a rapport au son. La '''carte graphique''' est le composant qui est en charge de calculer les graphismes, tout ce qui s'affiche à l'écran. Sur cette console, les cartes son et graphique ne sont PAS des co-processeurs, ce sont des circuits électroniques dits fixes. C'est totalement différent de ce qu'on a sur les consoles modernes, aussi le préciser est important. Bien que la carte graphique ne soit pas un processeur, elle a 64 kibioctets de RAM rien que pour elle. La RAM en question est séparée de la RAM normale, c'est un circuit intégré séparé. Et c'est un cas très fréquent, qui reviendra par la suite. La majeure partie des cartes graphiques dispose de leur propre '''mémoire vidéo''', totalement réservée à la carte graphique. La RAM vidéo est connectée à la carte graphique via un bus séparé. Le processeur est souvent connecté à ce bus, afin de pouvoir écrire des données dedans, mais ce n'est pas le cas ici. [[File:Architecture de la PC Engine, aussi appelée TurboGrafx-16.png|centre|vignette|upright=2.5|Architecture de la PC Engine, aussi appelée TurboGrafx-16]] L'architecture de la console était particulièrement simple. Le processeur était le centre de l'architecture, tout était connecté dessus. Il y a un bus pour la cartouche de jeu, un autre pour la RAM, un autre pour les manettes, un autre pour carte son, et un dernier pour la carte graphique. Le fait d'avoir un bus par composant est assez rare et ce n'est le cas ici que parce des conditions particulières sont remplies. Déjà, il y a peu d'entrée-sorties. Ensuite, les bus font tous 8 bits, vu que le processeur est un CPU 8 bits. Avec 5 connexions de 8 bits, le tout utilise 40 broches, ce qui est beaucoup, mais totalement gérable. Par contre, les choses changerons pour les autres consoles. Au final, l'organisation des bus peut s'expliquer avec ce qu'on a vu dans la section sur les bus de communication. La console utilise une architecture Harvard, car la ROM et la RAM utilisent des bus différents. De plus, il y a des bus dédiés aux entrées-sorties, séparés des bus mémoire. Enfin, la carte graphique a droit à ses propres bus pour lire dans la cartouche et dans sa RAM vidéo dédiée. ===L'architecture de la console de jeu NES=== Maintenant, nous allons voir la console de Jeu Famicom, aussi appelée la NES en occident. Elle a une architecture centrée sur un processeur Ricoh 2A03, similaire au processeur 6502, un ancien processeur autrefois très utilisé et très populaire. Le processeur est associé à 2 KB de mémoire RAM. Sur certaines cartouches, on trouve une RAM utilisée pour les sauvegardes, qui est adressée par le processeur directement. Première variation par rapport à l'architecture de la console précédente : l'ajout de la RAM pour les sauvegardes dans les cartouches. Niveau carte graphique, une différence importante est que la carte graphique est connectée à la cartouche de jeu via un autre bus, afin de pouvoir lire les sprites et textures du jeu dans la cartouche. [[File:Architecture de la NES.png|centre|vignette|upright=2.5|Architecture de la NES]] La différence avec l'architecture précédente est que des bus ont été fusionnés. Comme dit plus haut, le système utilise une architecture Harvard, vu que la ROM est dans la cartouche, alors que la RAM est soudée à la carte mère. Par contre, la Famicon utilise un bus dédié aux entrées-sorties. Il est utilisé pour la carte son et la carte graphique, seules les manettes sont sur un bus à part. Ce qui fait qu'on devrait plutôt parler de bus de sorties, mais passons... L'essentiel est qu'on n'est plus tout à fait dans le cas de la console précédente, avec un bus par composant. ===L'architecture de la SNES=== L'architecture de la SNES est illustrée ci-dessous. Les changements pour le processeur et la RAM sont mineurs.La RAM a augmenté en taille et passe à 128 KB. Pareil pour la RAM de la carte vidéo, qui passe à 64 KB. Par contre, on remarque un changement complet au niveau des bus, de la carte graphique et de la carte son. [[File:Architecture de la SNES.png|centre|vignette|upright=2|Architecture de la SNES]] La console utilise un '''bus système unique''', sur lequel tout est connecté : ROM, RAM, entrées-sorties, etc. La seule exception est pour les manettes, qui sont encore connectées directement sur le processeur, via un bus séparé. La transition vers un bus système s'explique par le fait que la console est maintenant de 16 bits, ce qui fait que les bus doivent être plus larges. Le processeur adresse des mémoires RAM et ROM plus grandes, ce qui double la taille de leurs bus. De plus, les entrées-sorties aussi ont besoin d'un bus plus large. Le processeur n'ayant pas un nombre illimité de broches, la seule solution est de fusionner les bus en un seul bus système. Un autre changement est que la carte graphique est maintenant composée de deux circuits séparés. Encore une fois, il ne s'agit pas de coprocesseurs, mais de circuits non-programmables. Par contre, la carte son est remplacée par deux coprocesseurs audio ! De plus, les deux processeurs sont connectés à une mémoire RAM dédiée de 64 KB, comme pour la carte graphique. L'un est un processeur 8 bits (le DSP), l'autre est un processeur 16 bits. Un point très intéressant : certains jeux intégraient des coprocesseurs dans leurs cartouches de jeu ! Par exemple, les cartouches de Starfox et de Super Mario 2 contenait un coprocesseur Super FX, qui gérait des calculs de rendu 2D/3D. Le Cx4 faisait plus ou moins la même chose, il était spécialisé dans les calculs trigonométriques, et diverses opérations de rendu 2D/3D. En tout, il y a environ 16 coprocesseurs d'utiliser et on en trouve facilement la liste sur le net. La console était conçue pour, des pins sur les ports cartouches étaient prévues pour des fonctionnalités de cartouche annexes, dont ces coprocesseurs. Ces pins connectaient le coprocesseur au bus des entrées-sorties. Les coprocesseurs des cartouches de NES avaient souvent de la mémoire rien que pour eux, qui était intégrée dans la cartouche. ===L'architecture de la Megadrive et de la néo-géo=== Passons maintenant à la console de jeu Megadrive, une console 16 bits. Elle a une architecture similaire à celle de la néo-géo, une autre console bien plus puissante, sorti à peu près en même temps. Elles intègrent deux processeurs : un Motorola 68000 qui sert de processeur principal, un Z80 qui sert de processeur dédié à l'audio. Le Z80 et le Motorola 68000 étaient deux processeurs très populaires à l'époque. Le Z80 est une sorte de version améliorée de l'Intel 8088 utilisé sur les anciens PC et de nombreuses consoles utilisaient des Z80 comme processeur principal. Il était familier pour les programmeurs de l'époque, pour son cout réduit, sa bonne disponibilité, et bien d'autres avantages liés à sa production de masse. Le Z80 est utilisé comme co-processeur audio. Il commande un synthétiseur sonore, et est relié à sa propre mémoire, distincte de la mémoire principale. Le MC68000 est le processeur principal et a une relation maitre-esclave avec le Z80 : le MC68000 envoie des commandes au Z80, mais la communication ne va pas dans l'autre sens. Le Motorola 68000 était un processeur 16 bits, alors que le Z80 est un processeur 8 bits. Et cette différence fait que l'on ne peut pas connecter directement les deux sur le même bus, ou du moins pas facilement. La solution retenue est d'utiliser deux bus séparés : un bus de 16 bits connecté au 68000, un bus de 8 bits connecté au Z80. Le premier bus est un bus système sur lequel est connecté le 68000, 64 kibioctets de RAM, la cartouche de jeu, et la carte graphique. Le second bus est un bus de 8 bits, plus court, relié au Z80, à un synthétiseur sonore, et 8 kibioctets de RAM Les deux bus sont connectés à un '''''chipset''''', un circuit répartiteur, qui fait le pont entre les deux bus. Les manettes sont connectées sur le ''chipset''. Il contient un registre de 8 bits, dans lequel le MC68000 peut écrire dedans à sa guise, le registre étant adressable par le processeur. Lorsque le MC68000 écrit une valeur dedans, cela déclenche l’exécution automatique d'un programme pré-déterminé sur le Z80. : Pour ceux qui savent ce qu'est une interruption, les valeurs écrites dans ce registre sont des numéros d'interruption, qui indiquent quelle routine d'interruption exécuter. [[File:Architecture de la Megadrive et de la Néogeo.png|centre|vignette|upright=2.5|Architecture de la Megadrive et de la Néogeo]] Cet exemple nous montre que les bus systèmes sont certes très simples, mais aussi inflexibles. Ils fonctionnent bien quand les composants branchés dessus sont tous des composants 8 bits, ou sont tous de 16 bits, ou tous 32 bits. Mais dès qu'on mélange composants 8, 16, 32 ou 64 bits, les choses deviennent plus compliquées. Il est alors préférable d'utiliser des bus séparés, avec des répartiteurs pour faire le pont entre les différents bus. Et nous verrons que le problème s'est posé lui aussi sur les PC. ===L'architecture des anciennes consoles Playstation : beaucoup de co-processeurs=== Les consoles que nous venons d'aborder étaient des consoles 8 ou 16 bits. A partir des consoles 32 bits, leur architecture s'est rapprochée de celle des PC, avec un usage plus complexes de répartiteurs. La XBOX était très semblable à un PC : le processeur était un Pentium 3 modifié, la carte graphique était une Geforce 3 modifiée, les 64 mébioctets de RAM était la même mémoire DDR que celle des PC, le répartiteur secondaire était un ''chipset'' nForce de NVIDIA, etc. Mais les Playstation 1, 2 et 3 se distinguent de leur contemporains. Elles disposent de très nombreux co-processeurs, qui sont en plus très variés. La Playstation 1 a été une des premières console à utiliser les CD-ROM comme support de stockage, en remplacement des cartouches. La conséquence est que la console contient une mémoire ROM, soudée à la carte mère, de 512 kibioctets. Elle contient aussi 2 mébioctets de RAM, une carte graphique avec 1 mébioctet de mémoire vidéo, un processeur, et de quoi gérer les périphériques. Il y a un co-processeur audio spécialisé, avec 512 kibioctets de RAM, ce qui nous est familier. Par contre, les autres co-processeurs ne le sont pas. Déjà, le lecteur de CD-ROM est associé à des circuits sur la carte mère, il y a tout un sous-système dédié au lecteur de CD. Il y a un contrôleur qui sert d'interface avec le lecteur proprement dit, mais aussi deux co-processeurs audio et 32 kibioctets de RAM. Les co-processeurs audio servent à lire des CD sans trop utiliser le second co-processeur audio, ils lui servent de complément. Ensuite, le processeur incorpore plusieurs cœurs, avec un cœur principal et plusieurs co-processeurs. Le premier est un co-processeur système, qui est utilisé pour gérer la mémoire cache intégrée au processeur, pour des fonctionnalités appelées interruptions et exceptions, ainsi que pour configurer le processeur. Le second est un co-processeur arithmétique spécialisé dans les calculs en virgule flottante, très importants pour le rendu 3D. Enfin, il y a un décodeur vidéo, qui n'est pas un co-processeur, mais un circuit non-programmable, spécialisé dans le décodage vidéo. De nos jours, ce circuit aurait été intégré dans la carte graphique, mais il était intégré dans le processeur sur la Playstation 2. Pour le reste, le processeur est la figure centrale de la console. Il est connecté à 4 bus : un pour la RAM, un pour la carte graphique, un pour les manettes, un autre pour le reste. Le dernier bus est connecté au système audio et au système pour le lecteur CD. Ce serait un bus d'entrée-sortie, s'il n'était pas connecté à la mémoire ROM. Vous avez bien lu : la mémoire ROM est reliée au bus d'entrée-sortie. [[File:Architecture de la Playstation.png|centre|vignette|upright=2.5|Architecture de la Playstation]] La Playstation 2 est composé d'un processeur, couplé à 32 Mébioctets de RAM, et d'un paquet de co-processeurs. Plus de co-processeurs que la PS1. Le processeur principal n'est pas la même que celui de la PS1, mais il a une architecture similaire. Il intègre un décodeur vidéo sur le même circuit intégré, ainsi que deux co-processeur. Les co-processeurs ne sont cependant pas les mêmes. Le co-processeur système disparait et est remplacé par un second co-processeur arithmétique. Les deux co-processeurs arithmétiques sont spécialisés dans les nombres flottants, avec quelques différences entre les deux. Par exemple, le second co-processeur gérait des calculs trigonométriques, des exponentielles, des logarithmes, et d'autres fonctions complexes du genre ; mais pas le premier co-processeur. Ils sont reliés à 4 kibioctets de RAM pour le premier, 16 kibioctets de RAM pour le second ; qui sont intégrées dans le processeur et non-représentés dans le diagramme ci-dessous. La PS2 intègre aussi un co-processeur d'entrées-sorties. Pour information, il s'agit du processeur principal de la Playstation 1, qui est ici utilisé différemment, suivant que l'on place un jeu PS1 ou PS1 dans la console. Si on met un jeu PS1, il est utilisé pour émuler la Playstation 1, afin de faire tourner le jeu PS1 sur la PS2. Si on met un jeu PS2, il est utilisé comme co-processeur d'entrée-sortie et fait l'interface entre CPU et entrées-sorties. Il est relié à 2 mébioctets de RAM, soit exactement la même quantité de mémoire que la Playstation 1. Tous les périphériques sont connectés au co-processeur d'entrées-sortie. Pour cela, le co-processeur d'entrées-sortie est relié à deux bus dédiés aux périphériques. Le premier bus est relié aux manettes, aux ports USB et aux ports pour cartes mémoires. Le second bus est relié à la carte son, la carte réseau, le lecteur DVD, et un port PCMIA. Notons que la carte son intègre un co-processeur audio, qui n'est pas représenté dans le diagramme ci-dessous. [[File:Playstation 2 architecture.png|centre|vignette|upright=2.5|Playstation 2 architecture]] ==L'architecture des PC et son évolution== Après avoir vu les consoles, nous allons maintenant voir les anciens PC, des années 80 ou 90. Le tout premier PC était techniquement l''''IBM PC'''. Par la suite, de nombreux ordinateurs ont tenté de reproduire l'IBM PC originel, avec parfois quelques modifications mineures. De tels ordinateurs ''IBM PC compatibles'', ont été très nombreux, pour des raisons diverses. Le fait d'utiliser des composants banalisés, facilement disponibles, ainsi qu'une bonne documentation de l'IBM PC originel, a grandement aidé. Les IBM PC compatibles ont progressivement évolué pour donner les PC actuels. L'IBM PC compatible a donné naissance à de nombreux standards divers. ===L'IBM PC originel et l'IBM PC XT=== [[File:IBM PC XT 02.jpg|vignette|IBM PC XT.]] Nous allons commencer par voir l'IBM PC originel, et son successeur : l'IBM Personal Computer XT. Nous les appelerons tous deux l'IBM PC. L'IBM PC utilisait un processeur Intel 8088, qui était un processeur 8 bits. Ils utilisaient un bus système unique, appelé le '''bus XT'''. Le bus système allait à 4.77 MHz, soit la même fréquence que le processeur. C'était un bus de 8 bits, ce qui collait parfaitement avec les processeurs 8 bits commercialisés par Intel à l'époque. L'IBM PC comprenait une mémoire ROM avec de quoi faire fonctionner le PC. La ROM en question contenait un programme minimal, appelé le '''BIOS''', sans lequel le PC ne fonctionnait pas du tout. Il servait de base pour le système d'exploitation et MS-DOS ne fonctionnait pas sans elle. De nos jours, son rôle est plus limité : sans elle, le PC ne démarre pas. Mais nous détaillerons cela dans le prochain chapitre. En plus de la ROM pour le BIOS, l'IBM PC avait quatre mémoires ROM dédiée au langage de programmation BASIC. Lorsque le PC démarrait, il ne bootait pas un système d'exploitation, mais lançait l'interpréteur pour le langage BASIC. De nos jours, ce serait l'équivalent d'un ordinateur qui boote directement sur du Python, à savoir la console Python que vous avez peut-être déjà utilisé si vous avez testé Python. Ceux qui ont déjà touché à un ordinateur de l'époque savent ce que ca veut dire, mais c'est malheureusement très difficile à expliquer sans ce genre d'expérience. Toujours est-il que c'était une sorte de norme à l'époque : les ordinateurs bootaient généralement sur un interpréteur BASIC. [[File:XT Bus pins.svg|vignette|Connecteur du bus XT.]] Les PC étaient conçus pour qu'on branche des '''cartes d'extension''', à savoir des cartes électroniques qu'on branchait sur la carte mère, à l'intérieur du PC. Les cartes d'extension de l'époque étaient surtout des cartes son ou des cartes graphiques, mais aussi des cartes pour brancher des péripéhriques. par exemple, on pouvait ajouter deux cartes graphiques dans l'IBM PC originel : l'''IBM Monochrome Display Adapter'' et/ou la ''IBM Color Graphics Adapter''. De nos jours, les cartes son sont intégrées à la carte mère, mais les cartes graphiques sont restées des cartes d'extension. Les cartes d'extension étaient branchées sur un '''connecteur XT''', qui était directement relié au bus XT. Le connecteur XT est illustré ci-contre, mais ne vous en souciez pas trop pour le moment. La carte mère de l'IBM PC avait 5 connecteurs de ce type, qu'on pouvait peupler avec autant de cartes d'extension. L'IBM Personal Computer XT est passé à 8 connecteurs XT, soit trois de plus. Pour ce qui est des périphériques, l'IBM PC avait plusieurs connecteurs : un port série, un port parallèle, un port pour le clavier, et un port pour un lecteur cassette. Le clavier et le lecteur cassette étaient connectés directement sur la carte mère, qui contenait quelques circuits pour gérer le clavier. Par contre, les deux premiers n'étaient pas connectés à la carte mère. Le port série était en réalité une carte d'extension, branchée sur un connecteur XT. Et il en est de même pour le port parallèle. Pour ce qui est des supports de stockage, l'IBM PC originel n'avait pas de disque dur et n'avait que des lecteurs de disquette. De plus, le lecteur de disquette n'était pas connecté directement sur la carte mère, mais était connecté à une carte d'extension, branchée sur un connecteur XT. La carte d'extension avait deux connecteurs, un par lecteur de disquette, ce qui fait que les deux lecteurs de disquettes pouvaient être branchés sur une seule carte d'extension. L'IBM Personal Computer XT a ajouté un disque dur, sauf sur quelques sous-modèles spécifiques. Le PC avait aussi un petit haut-parleur capable de faire des bips. Pour résumer, l'IBM PC originel se reposait beaucoup sur les cartes d'extension, sa carte mère contenait peu de choses. Enfin, peu de choses... Il y avait un processeur Intel 8088, éventuellement un coprocesseur flottant 8087, de la RAM, de la ROM, et des circuits intégrés assez divers. En voici la liste, certains vous seront familiers, d'autres vous seront inconnus à ce stade du cours : * les circuits de décodage d'adresse ; * un contrôleur DMA intel 8273 ; * un contrôleur d'interruption 8259 ; * un contrôleur de bus Intel 8288 pour gérer le bus XT ; * un générateur d'horloge Intel 8284 et un diviseur de fréquence ; * un ''timer'' Intel 8253, le même que celui étudié dans le chapitre sur les ''timers'' ; * un contrôleur parallèle 8255. Les multiplexeurs, registres et portes logiques, sont des circuits de décodage d'adresse, qui permettent de combiner plusieurs RAM en une seule, idem avec la mémoire ROM. Si vous verrez qu'il y a 5 mémoires ROM : une ROM pour le BIOS, et quatre autres ROM pour le BASIC. Les 4 ROM du BASIC sont combinées en une seule mémoire ROM. Pour les RAM, il y en a 8 à 32, qui sont combinées en une seule RAM de 16 à 64 kibioctets. [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] ===L'architecture d'un IBM PC compatible 16 bits=== Les PC suivants sont passés à des processeurs 16 bits, mais c'était toujours des processeurs x86 d'Intel, à savoir des Intel 286 et 386. La RAM a grossi, quelques entrées-sorties ont été ajoutées, mais l'architecture globale est plus moins resté le même. C'est surtout au niveau du bus et des périphériques que les changements majeurs ont eu lieu. [[File:ISA Bus pins.svg|vignette|Connecteur ISA.]] Les PC 16 bits utilisaient un bus système unique, sur lequel tout était connecté : le processeur, la RAM, la ROM, les cartes d'extension et tout le reste. Le bus en question s'appelait le '''bus AT''', mais il a rapidement été renommé en '''bus ISA''' (''Industry Standard Architecture''). Le bus ISA était prévu pour avoir une compatibilité avec le bus 8 bits de l'IBM PC originel. D'ailleurs, cela se ressent jusque dans le connecteur utilisé : le connecteur ISA est un connecteur XT qu'on a fusionné avec un second connecteur pour l'étendre de 8 à 16 bits. Les PC 16 bits avaient toujours un port série, un port parallèle, un clavier, un lecteur de disquette et des cartes d'extension. Des disques durs pouvaient être ajoutés, aussi. Mais pour ces périphériques, un changement majeur a eu lieu comparé à l'IBM PC originel. L'IBM PC originel utilisait des cartes d'extension pour tout, sauf le clavier. Mais maintenant, les périphériques ne sont plus connectés à une carte d'extension. À la place, les circuits de la carte d'extension sont déplacés sur la carte mère. Mais n'allez pas croire qu'ils étaient connectés directement au bus ISA, il y avait des intermédiaires. Le clavier était relié à un '''contrôleur de clavier''', qui faisait l'interface entre le connecteur du clavier et le bus ISA. Le contrôleur de clavier était appelé le ''Keyboard Controler'', abrévié en KB. Il recevait ce qui est tapé au clavier et traduisait cela en quelque chose de compréhensible par l'ordinateur. Les autres périphériques étaient connectés à un circuit intégré dédié : l''''Intel 82091AA'''. Il était connecté au lecteur de disquette, au port série et au port parallèle. Il servait d'intermédiaire entre ces périphériques et le bus ISA. Vous pouvez le voir comme une sorte de répartiteur, mais qui ne serait pas connecté sur le processeur et la RAM Enfin, il ne faut pas oublier les autres composants présents sur l'IBM PC originel. Le BIOS est toujours là, de même que les ''timers'' Intel 8253 PIT, le contrôleur d'interruption Intel 8259 et le contrôleur DMA Intel 8237. Les PC 16 bits ont aussi intégré une ''Real Time Clock'' (RTC). Pour rappel, c'est un composant qui permet au PC de mémoriser la date et l'heure courante, à la seconde près. Le tout est résumé dans le schéma ci-dessous. [[File:Architecture de l'IBM PC compatible.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible]] Un point important est que le bus ISA allait à la même fréquence que le processeur, vu que c'était un bus système. Les processeurs de l'époque étaient des CPU 286 d'Intel, ou le 386 d'Intel. Les Intel 286 allaient de 4 MHz minimum, à 25 MHz maximum. Le 386, quant à lui, allait de 12 à 40 MHz. Le bus ISA devait aller à cette fréquence, il était synchrone avec le processeur. Par la suite, les processeurs ont gagné en performance, ce qui fait que le bus ISA est devenu trop lent pour le processeur. Une idée a alors été de conserver le bus ISA, pour des raisons de compatibilité, mais de le reléguer comme bus secondaire. L'ordinateur contient alors deux bus : un bus système, et un bus ISA secondaire. Le lien entre les deux est réalisé par un '''pont ISA''', ''ISA Bridge'' en anglais. Le bus ISA fonctionnait alors sa fréquence usuelle, alors que le bus système était beaucoup plus rapide. Le bus système fonctionnait à une fréquence bien plus élevée, ce qui fait que le processeur pouvait communiquer à pleine vitesse, notamment avec la RAM. Le processeur n'était alors plus forcé à aller à la même fréquence que le bus ISA [[File:Architecture de l'IBM PC compatible avec bridge ISA.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible avec bridge ISA]] Les PC de l'époque intégraient donc plusieurs bus séparés. Vous avez bien lu : plusieurs bus ! Ici, il s'agit de ce que j'appelle des '''bus en cascade''', à savoir qu'un bus est connecté à un autre bus par un intermédiaire. Au passage, si j'aborde ces exemples, car c'est pareil sur les ordinateurs modernes. Le pont ISA a été remplacé par des circuits différents, mais qui ont un rôle assez similaire. Le ''chipset'' de votre carte mère n'est qu'un lointain descendant du pont ISA, qui s'interface avec des bus différents. ===L'arrivée des standards AT et IDE pour les disques durs=== Initialement, les disques durs étaient placés dans l'ordinateur et étaient connectés sur le bus ISA, via une carte d'extension ISA. En clair, il fallait connecter le disque dur sur une carte d'extension, et non sur la carte mère. Les cartes d'extension en question permettaient de connecter un ou plusieurs disques durs, parfois des lecteurs de disquette supplémentaires. Les cartes ISA de ce type faisaient juste l'interface entre le bus ISA et les disques durs, rien de plus. L'interface en question a été standardisée, ce qui a donné le standard ''AT Bus Attachment'', qui a été abrévié en ATA. Et ce n'était pas que pour les disques durs, de nombreux composants étaient dans ce cas. Une carte d'extension servait d'intermédiaire entre eux et la carte mère. Les cartes d'extension en question étaient appelées des ''Host bus adapter''. [[File:Acculogic sIDE-4 Controller ISA.jpg|centre|vignette|upright=2|Carte ISA d'interface disque dur, de marque Acculogic.]] Mais les choses ont rapidement évoluées, que ce soit du côté des cartes mères que du côté des disques durs. Le '''standard IDE''' a permis de brancher un disque dur directement sur la carte mère, sans passer par une carte d'interface ISA. Pour cela, la carte mère réservait un connecteur ISA pour le disque dur, renommé '''connecteur ATA'''. Pour que cela soit possible, il a fallu rajouter des circuits sur la carte mère. Tout ce qui était sur les cartes d'interface ISA s'est retrouvé sur la carte mère. [[File:Ajout des ports IDE sur la carte mère.png|centre|vignette|upright=2|Ajout des ports IDE sur la carte mère]] En réalité, les connecteurs ATA étaient des connecteurs ISA simplifiés. Un connecteur ISA avait en tout 98 broches, alors qu'un connecteur ATA n'en contient que 40. Les broches qui étaient inutiles pour les disques durs ont simplement été enlevées. Et qui dit connecteur spécialisé, dit câble spécialisé. Les disques durs étaient branchés sur le connecteur AT grâce à un câble ATA, sur lequel on pouvait connecter deux disques durs. [[File:ATA Plug.svg|centre|vignette|upright=2|Connecteur ATA.]] [[File:ATA cables.jpg|centre|vignette|upright=2|Cable ATA.]] Il était donc possible de connecter deux disques durs sur un seul connecteur ATA. Et cette possibilité est devenue d'autant plus utile par la suite. A partir de la version 2, ATA supportait aussi les lecteurs de disquettes, les lecteurs de CD/DVD, et bien d'autres supports de stockage. Il était alors possible de connecter un lecteur CD et un disque dur sur un seul connecteur. Les cartes mères avaient généralement deux connecteurs ATA, et n'avaient pas besoin de plus. C'était suffisant pour connecter un disque dur, un lecteur de disquette et un lecteur CD, configuration courante entre les années 90 et 2000. Un câble est donc connecté à deux supports de stockage. Pour distinguer les deux, le standard ATA ajoute une possibilité de configuration. Sur un câble, il doit y avoir un support de stockage "maitre" et un support "esclave". C'était la terminologie de l'époque, que je reproduis ici, même si elle est fortement trompeuse. N'allez pas croire que cela implique que l'un ait des avantages sur l'autre. Le support 'maitre" n'a pas droit à plus de bande passante, il n'a pas la priorité sur l'autre, rien du tout. Il s'agit juste d'un nombre qui permet de savoir avec qui le processeur communique, qui vaut 0 pour le premier support, 1 pour l'autre. Une sorte d'adresse de 1 bit, si l'on veut. [[File:ATA-Konfiguration02.png|centre|vignette|upright=2|Configuration ATA.]] Pour configurer un support de stockage en mode "maitre" ou "esclave", le support de stockage avait quelques pins dédiés. Il suffisait de placer un détrompeur en plastique sur les pins adéquats. Les pins se trouvaient à l'arrière du disque dur ou du lecteur de CD/DVD/Disquette/autre. [[File:HDD Master and Slave Description.jpg|centre|vignette|upright=2|Configuration ''Master/Slave''.]] ===L'architecture d'un PC avec un processeur Intel 486=== Maintenant, passons aux ordinateurs 32 bits, avec l'exemple d'un PC avec un processeur 486 d'Intel. A cette époque, le bus ISA était devenu trop limité et était en place d'être remplacé par le bus PCI, qui avait la même fonction. De nombreuses cartes d'extension utilisaient déjà ce standard et étaient branchées sur des connecteurs PCI dédiés, différents des connecteurs ISA. Intuitivement, on se dit que le bus PCI remplaçait le bus ISA, mais les choses étaient plus compliquées. Les disques durs gardaient leur connecteur ATA, et ne passaient pas par le bus PCI. Ils avaient un bus IDE séparé, qui était un bus ISA modifié. Là encore, les processeurs étaient devenus beaucoup plus rapides que le bus PCI. Les deux allaient à des fréquences assez différentes, ce qui fait que le bus PCI était séparé du bus système. Il y avait alors deux implémentations possibles. * La première utilise un répartiteur unique, relié au processeur, à la RAM, au bus PCI, et au bus IDE. * La seconde utilise un bus système séparé du bus PCI, avec un '''pont PCI''' pour faire l'interface entre les deux. Le '''''System Controler''''' était un circuit intégré, placé sur la carte mère, qui peut servir soit de pont PCI, soit de répartiteur. Le répartiteur PCI sert d'intermédiaire avec le bus PCI, mais aussi avec le bus IDE, utilisé pour les disques durs, aussi appelé le bus ''Parallel ATA''. Il peut aussi être connecté au processeur, à la mémoire RAM, ainsi qu'à la mémoire cache, mais cela ne sert que quand il est utilisé comme répartiteur. [[File:Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur.png|centre|vignette|upright=2|Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur]] Pour des raisons de compatibilité, le bus ISA avait été conservé, aux côtés du bus PCI. Il y avait un pont ISA en plus du pont/répartiteur PCI. Une implémentation possible aurait été de connecter les deux ponts ISA et PCI à un bus système unique. Mais cette solution n'a pas été retenue. La raison est que le bus PCI et le bus ISA ont des performances très différentes. Le bus PCI est très rapide, le bus ISA beaucoup plus lent. La différence est d'un ordre de grandeur, environ. Dans ces conditions, il est possible de faire passer les communications ISA à travers le bus PCI. Pour cela, le pont ISA est directement connecté sur le pont PCI, comme illustré ci-dessous. Et il en est de même pour le bus dédié aux disques durs. En effet, les disques durs étaient autrefois reliés au bus ISA, mais cela a changé depuis. Ils disposent maintenant de leur propre bus dédié, le '''bus IDE''', qui est un bus ISA simplifié. Et ce bus ISA simplifié était connecté directement sur le pont PCI. [[File:Architecture de l'IBM PC compatible avec pont PCI.png|centre|vignette|upright=2|Architecture de l'IBM PC compatible avec pont PCI]] Dans ce qui va suivre, nous allons étudier un exemple qui utilise un bus système séparé, avec un pont PCI, sans répartiteur. Voilà pour les grandes lignes, mais le schéma ci-dessous montre que tout est plus complexe. Vous remarquerez des connexions optionnelles entre le pont PCI et la mémoire RAM et la mémoire cache. La raison est que le pont PCI peut aussi servir de répartiteur en remplacement du bus système. Concrètement, on peut alors retirer le bus système. La mémoire, le bus PCI, le bus ISA, le bus IDE, le processeur et la RAM sont alors connectés au répartiteur PCI, qui sert d'intermédiaire central entre tous ces composants. Mais ce n'est pas la solution qui a été retenue dans notre exemple. [[File:Intel486-Typ PCI System.png|centre|vignette|upright=2|PC IBM compatible avec un 486, un bus PCI et un bus ISA. Le ''host bus'' est le bus système.]] Le pont ISA sert ici d'intermédiaire entre le bus système et le bus ISA. De plus, il a été amélioré sur de nombreux points. Il inclut notamment des circuits qui étaient autrefois sur la carte mère, à savoir le contrôleur DMA 82C87 et le contrôleur d'interruption 82C59, ainsi que les ''timers'' Intel 82C54. Les composants restants sont eux reliés sur un quatrième bus : le bus X, l'ancêtre du bus ''Low Pin Count''. Le bus X était celui du BIOS, du contrôleur de clavier, de la ''Real Time Clock'', et du contrôleur de périphérique 82091AA d'Intel. [[File:ISA Bridge schematic.png|centre|vignette|upright=2|ISA Bridge.]] ===L'architecture des PC des années 90-2000=== Par la suite, les ponts PCI et ISA ont évolué avec l'évolution des bus de l'ordinateur. Le bus ISA a progressivement été remplacé par d'autres bus, comme le bus ''Low Pin Count'', le bus PCI a été remplacé par le PCI Express, d'autres bus ont été ajoutés, etc. Mais la séparation du ''chipset'' en deux a été conservée. [[File:Chipset schematic.svg|vignette|upright=1.0|Chipset séparé en northbridge et southbridge.]] Le pont PCI et le pont ISA ont été remplacés respectivement par le '''pont nord''' et le '''pont sud''', plus connus par leurs noms anglais de ''northbridge'' et de ''southbridge''. Le pont nord servait d'interface entre le processeur, la mémoire et la carte graphique et est connecté à chacun par un bus dédié. Il intégrait aussi le contrôleur mémoire. Le pont sud est le répartiteur pour les composants lents, à savoir l'USB, l'Ethernet, etc. Le bus qui relie le processeur au pont nord était appelé le '''''Front Side Bus''''', abrévié en FSB. [[File:IMac Chipset.png|centre|vignette|upright=2|Chipset séparé en northbridge et southbridge.]] Un point important est que le bus PCI est devenu un bus assez lent, ce qui fait qu'il a finit par être connecté au pont sud. Le pont PCI est donc devenu le pont sud, dans le courant des années 2000. Durant un moment, un équivalent du pont ISA a subsisté dans un circuit de '''''Super IO'''''. Concrètement, il s'occupait du lecteur de disquette, du port parallèle, du port série, et des ports PS/2 pour le clavier et la souris. Mais il ne gérait pas le bus ISA, mais son remplaçant, le bus ''Low Pin Count''. [[File:Motherboard diagram fr.svg|centre|vignette|upright=1.5|Carte mère avec circuit Super IO.]] ===L'architecture des PC depuis les années 2000=== Depuis la sortie du processeur AMD Athlon 64, le pont nord a été fusionné dans le processeur. La fusion ne s'est pas faite en une fois, des fonctionnalités ont progressivement été progressivement intégrées dans le processeur. Le pont sud est resté, mais il a alors été progressivement connecté directement au processeur. La raison derrière cette intégration est que les processeurs avaient de plus en plus de transistors à leur disposition. Ils en ont profité pour intégrer le pont nord. Et cela permettait de simplifier le câblage des cartes mères, sans pour autant rendre vraiment plus complexe la fabrication du processeur. Les industriels y trouvent leur compte. La première étape a été l'intégration du contrôleur mémoire a été intégré au processeur. Concrètement, le résultat était que la mémoire RAM n'était plus connectée au pont nord, mais était connectée directement au processeur ! Il y a donc eu un retour d'un bus mémoire, mais spécialisé pour la mémoire RAM. En théorie, une telle intégration permet diverses optimisations quant aux transferts avec la mémoire RAM. Les transferts ne passent pas par un répartiteur, ce qui réduit le temps d'accès à la mémoire RAM. Ajoutons de sombres histoires de prefetching, d'optimisation des commandes, et j'en passe. Toujours est-il que le pont nord ne servait alors d'intermédiaire que pour les ports PCI Express, et le pont sud. [[File:X58 Block Diagram.png|centre|vignette|upright=2|Chipset X58 d'Intel.]] Par la suite, la carte graphique fût aussi connectée directement sur le processeur. Le processeur incorpore pour cela des contrôleurs PCI-Express. Le pont nord a alors disparu complétement, son intégration dans le processeur était complète. Sur les cartes mères Intel récentes, le pont sdud subsiste, il est appelé le ''Platform Controler Hub'', ou PCH. L'organisation des bus sur la carte mère qui résulte de cette connexion du processeur à la carte graphique, est illustrée ci-dessous, avec l'exemple du PCH. [[File:Intel 5 Series architecture.png|centre|vignette|upright=2|Intel 5 Series architecture]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=L'interface électrique entre circuits intégrés et bus | prevText=L'interface électrique entre circuits intégrés et bus | next=La hiérarchie mémoire | nextText=La hiérarchie mémoire }} </noinclude> 4lt3q6nkxdvm99j2moueyv1rnqpeoyy 765747 765746 2026-05-01T22:11:21Z Mewtow 31375 /* Étude de l'architecture de quelques consoles de jeu */ 765747 wikitext text/x-wiki Dans les chapitres précédents, nous avons vu comment représenter de l'information, la traiter et la mémoriser avec des circuits. Mais un ordinateur n'est pas qu'un amoncellement de circuits et est organisé d'une manière bien précise. Il est structuré autour de trois circuits principaux : * un '''processeur''', qui manipule l'information et donne un résultat ; * une '''mémoire''' qui mémorise les données à manipuler ; * les '''entrées/sorties''', qui permettent à l'ordinateur de communiquer avec l'extérieur. [[File:Architecture Von Neumann.png|centre|vignette|upright=2|Architecture d'un système à mémoire.]] Pour faire simple, le processeur est un circuit qui s'occupe de faire des calculs. Rien d'étonnant à cela. Je rappelle que tout est codé par des nombres dans un ordinateur, ce qui fait que manipuler des nombres revient simplement à faire des calculs. Un ordinateur n'est donc qu'une grosse calculatrice améliorée, et le processeur est le composant qui fait les calculs. La mémoire s'occupe purement de la mémorisation des données, des nombres sur lesquelles faire des calculs. Pour être plus précis, il y a deux mémoires : une pour les données proprement dites, une autre pour le programme à exécuter. La première est la '''mémoire RAM''', la seconde est la '''mémoire ROM'''. Nous détaillerons ce que sont ces deux mémoires dans la suite du chapitre, mais sachez que nous avions déjà rencontré ces deux types de mémoires dans les chapitres sur les registres et les mémoires adressables. Les entrées-sorties permettent au processeur et à la mémoire de communiquer avec l'extérieur et d'échanger des informations avec des périphériques. Les '''périphériques''' regroupent, pour rappel, tout ce est branché sur un ordinateur, mais n'est pas à l'intérieur de celui-ci. Le processeur, les mémoires et les entrées-sorties communiquent ensemble via un '''réseau d'interconnexions'''. Le terme est assez barbare, mais rien de compliqué sur le principe. C'est juste un ensemble de fils électriques qui relie les différents éléments d'un ordinateur. Les interconnexions sont souvent appelées le bus de communication, mais le terme est un abus de langage, comme on le verra plus bas. Afin de simplifier les explications, on va supposer que le réseau d'interconnexion est le suivant. Tout est connecté au processeur. Il y a des interconnexions entre le processeur et la mémoire RAM, d'autres interconnexions entre processeur et mémoire ROM, et d'autres entre le processeur et les entrées-sorties. Nous verrons que d'autres réseaux d'interconnexions fusionnent certaines interconnexions, pour les partager entre la ROM et la RAM, par exemple. Mais pour le moment, gardez le schéma ci-dessous en tête. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ==Les mémoires RAM et ROM== La mémoire est le composant qui mémorise des informations, des données. Dans la majorité des cas, la mémoire est composée de plusieurs '''cases mémoire''', chacune mémorisant plusieurs bits, le nombre de bits étant identique pour toutes les cases mémoire. Dans le cas le plus simple, une case mémoire mémorise un '''octet''', un groupe de 8 bits. Mais les mémoires modernes mémorisent plusieurs octets par case mémoire : elles ont des cases mémoires de 16, 32 ou 64 bits, soit respectivement 2/4/8 octets. De rares mémoires assez anciennes utilisaient des cases mémoires contenant 1, 2, 3, 4, 5, 6 7, 13, 17, 23, 36 ou 48 bits. Mais ce n'était pas des mémoires électroniques, aussi nous allons les passer sous silence. Tout ce qu'il faut savoir est que la quasi-totalité des mémoires électronique a un ou plusieurs octets par case mémoire. Pour simplifier, vous pouvez imaginer qu'une mémoire RAM est un regroupement de registre, chacun étant une case mémoire. C'est une description pas trop mauvaise pour décrire les mémoires RAM, qu'on abordera dans ce qui suit. {|class="wikitable" |+ Contenu d'une mémoire, case mémoire de 16 bits (deux octets) |- ! Case mémoire N°1 | 0001 0110 1111 1110 |- ! Case mémoire N°2 | 1111 1110 0110 1111 |- ! Case mémoire N°3 | 0001 0000 0110 0001 |- ! Case mémoire N°4 | 1000 0110 0001 0000 |- ! Case mémoire N°5 | 1100 1010 0110 0001 |- ! ... | ... |- ! Case mémoire N°1023 | 0001 0110 0001 0110 |- ! Case mémoire N°1024 | 0001 0110 0001 0110 |} Dans ce cours, il nous arrivera de partir du principe qu'il y a un octet par case mémoire, par souci de simplification. Mais ce ne sera pas systématique. De plus, il nous arrivera d'utiliser le terme adresse pour parler en réalité de la case mémoire associée, par métonymie. ===La capacité mémoire=== Bien évidemment, une mémoire ne peut stocker qu'une quantité finie de données. Et à ce petit jeu, certaines mémoires s'en sortent mieux que d'autres et peuvent stocker beaucoup plus de données que les autres. La '''capacité''' d'une mémoire correspond à la quantité d'informations que celle-ci peut mémoriser. Plus précisément, il s'agit du nombre maximal de bits qu'une mémoire peut contenir. Elle est le produit entre le nombre de cases mémoire, et la taille en bit d'une case mémoire. Toutes les mémoires actuelles utilisant des cases mémoire d'un ou plusieurs octets, ce qui nous arrange pour compter la capacité d'une mémoire. Au lieu de compter cette capacité en bits, on préfère mesurer la capacité d'une mémoire avec le nombre d'octets qu'elle contient. Mais les mémoires des PC font plusieurs millions ou milliards d'octets. Pour se faciliter la tâche, on utilise des préfixes pour désigner les différentes capacités mémoires. Vous connaissez sûrement ces préfixes : kibioctets, mébioctets et gibioctets, notés respectivement Kio, Mio et Gio. {|class="wikitable" |- !Préfixe!!Capacité mémoire en octets!!Puissance de deux |- ||Kio||1024||2<sup>10</sup> octets |- ||Mio||1 048 576||2<sup>20</sup> octets |- ||Gio||1 073 741 824||2<sup>30</sup> octets |} On peut se demander pourquoi utiliser des puissances de 1024, et ne pas utiliser des puissances un peu plus communes ? Dans la majorité des situations, les électroniciens préfèrent manipuler des puissances de deux pour se faciliter la vie. Par convention, on utilise souvent des puissances de 1024, qui est la puissance de deux la plus proche de 1000. Or, dans le langage courant, kilo, méga et giga sont des multiples de 1000. Quand vous vous pesez sur votre balance et que celle-ci vous indique 58 kilogrammes, cela veut dire que vous pesez 58 000 grammes. De même, un kilomètre est égal à 1000 mètres, et non 1024 mètres. Autrefois, on utilisait les termes kilo, méga et giga à la place de nos kibi, mebi et gibi, par abus de langage. Mais peu de personnes sont au courant de l'existence de ces nouvelles unités, et celles-ci sont rarement utilisées. Et cette confusion permet aux fabricants de disques durs de nous « arnaquer » : Ceux-ci donnent la capacité des disques durs qu'ils vendent en kilo, méga ou giga octets : l’acheteur croit implicitement avoir une capacité exprimée en kibi, mébi ou gibi octets, et se retrouve avec un disque dur qui contient moins de mémoire que prévu. ===Lecture et écriture : mémoires ROM et RWM=== Pour simplifier grandement, on peut grossièrement classer les mémoires en deux types : les ''Read Only Memory'' et les ''Read Write Memory'', aussi appelées mémoires ROM et mémoires RWM. Pour les '''mémoires ROM''', on ne peut pas modifier leur contenu. On peut y récupérer une donnée ou une instruction : on dit qu'on y accède en lecture. Mais on ne peut pas modifier les données qu'elles contiennent. Quant aux '''mémoires RWM''', on peut y accéder en lecture (récupérer une donnée stockée en mémoire), mais aussi en écriture : on peut stocker une donnée dans la mémoire, ou modifier une donnée existante. Tout ordinateur contient au minimum une ROM et une RWM (souvent une mémoire RAM), les deux n'ont pas exactement le même rôle. Pour simplifier, la mémoire ROM mémorise le programme à exécuter, la mémoire RWM stocke des données. Il a existé des ordinateurs où la mémoire RWM était une mémoire magnétique, voire acoustique, mais ce n'est plus le cas de nos jours. Pour les ordinateurs modernes, la mémoire RWM est une mémoire électronique. Pour faire la différence avec ces anciennes mémoires RWM, elle est appelée la '''mémoire RAM'''. Il s'agit d'une mémoire qui stocke temporairement des données que le processeur doit manipuler (on dit qu'elle est volatile). Elle s'efface complètement quand on coupe l'alimentation de l'ordinateur. Il existe d'autres différences entre mémoire RWM et RAM : * la mémoire RWM peut ne pas être volatile et donc conserver les données écrites ; * la mémoire RAM possède un temps d'accès constant aux données (quelle que soit l'adresse), ce qui n'est pas garanti pour les mémoires RWM. Outre le programme à exécuter, la mémoire ROM peut mémoriser des constantes, des données qui ne changent pas. Elles ne sont jamais modifiées et gardent la même valeur quoi qu'il se passe lors de l'exécution du programme. En conséquence, elles ne sont jamais accédées en écriture durant l'exécution du programme, ce qui fait que leur place est dans une mémoire ROM. La mémoire RWM est alors destinée aux données temporaires, qui changent ou sont modifiées lors de l'exécution du programme, et qui sont donc manipulées aussi bien en lecture et en écriture. La mémoire RWM mémorise alors les variables du programme à exécuter, qui sont des données que le programme va manipuler. Pour les systèmes les plus simples, la mémoire RWM ne sert à rien de plus. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Pour donner un exemple de données stockées en ROM, on peut prendre l'exemple des anciennes consoles de jeu 8 et 16 bits. Les jeux vidéos sur ces consoles étaient placés dans des cartouches de jeu, précisément dans une mémoire ROM à l'intérieur de la cartouche de jeu. La ROM mémorisait non seulement le code du jeu, le programme du jeu vidéo, mais aussi les niveaux et les ''sprites'' et autres données graphiques. Une conséquence est que les consoles 8/16 bits n'avaient pas besoin de beaucoup de RAM, comparé aux ordinateurs de l'époque, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. À l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. ===L'adressage mémoire=== Sur une mémoire RAM ou ROM, on ne peut lire ou écrire qu'une case mémoire, qu'un registre à la fois : une lecture ou écriture ne peut lire ou modifier qu'une seule case mémoire. Techniquement, le processeur doit préciser à quel case mémoire il veut accéder à chaque lecture/écriture. Pour cela, chaque case mémoire se voit attribuer un nombre binaire unique, l''''adresse''', qui va permettre de le sélectionner et de l'identifier celle-ci parmi toutes les autres. En fait, on peut comparer une adresse à un numéro de téléphone (ou à une adresse d'appartement) : chacun de vos correspondants a un numéro de téléphone et vous savez que pour appeler telle personne, vous devez composer tel numéro. Les adresses mémoires en sont l'équivalent pour les cases mémoire. [[File:Adressage mémoire.png|centre|vignette|upright=2|Exemple : on demande à la mémoire de sélectionner la case mémoire d'adresse 1002 et on récupère son contenu (ici, 17).]] L'adresse mémoire est générée par le processeur. Le processeur peut parfaitement calculer des adresses, en extraire du programme qu'il exécute, et bien d'autres choses. Nous détaillerons d'ailleurs les mécanismes pour dans les chapitres portant sur les modes d'adressage du processeur. Mais pour le moment, nous avons juste besoin de savoir que c'est le processeur qui envoie des adresses aux mémoires RAM et ROM. Les adresses générées par le processeur sont alors envoyées à la RAM ou la ROM via une connexion dédiée, un ensemble de fils qui connecte le processeur à la mémoire : le '''bus d'adresse mémoire'''. L'adresse sélectionne une case mémoire, le processeur peut alors récupérer la donnée dedans pour une lecture, écrire une donnée pour l'écriture. Pour cela, un second ensemble de fil connecte le processeur à la RAM/ROM, mais cette fois-ci pour échanger des données. Il s'agit du '''bus de données mémoire'''. Les deux sont souvent regroupés sous le terme de '''bus mémoire'''. Un ordinateur contient toujours une RAM et une ROM, ce qui demande aux bus mémoire de s'adapter à la présence de deux mémoires. Il y a alors deux solutions, illustrées dans les deux schémas ci-dessous. Avec la première, il y a un seul bus mémoire partagé entre la RAM et la ROM, comme illustré ci-dessous. Une autre solution utilise deux bus séparés : un pour la RAM et un autre pour la ROM. Nous verrons les différences pratiques entre les deux à la fin du chapitre. Pour le moment, nous allons partir du principe qu'il y a un bus pour la mémoire ROM, et un autre bus pour la RAM. [[File:CPT-System-Architecture-gapfill1-ANS.svg|centre|vignette|upright=2|Architecture avec une ROM et une RAM.]] [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ===L'alignement mémoire : introduction=== Plus haut, nous avions dit qu'il y a une adresse par case mémoire, chaque case mémoire contenant un ou plusieurs octets. Mais les processeurs modernes partent du principe que la mémoire a un octet par adresse, pas plus. Et ce même si la mémoire reliée au processeur utilise des cases mémoires de 2, 3, 4 octets ou plus. D'ailleurs, la majorité des mémoires RAM actuelle a des cases mémoires de 64 bits, soit 8 octets par case mémoire. Les raisons à cela sont multiple, mais nous les verrons en détail dans le chapitre sur l'alignement mémoire. Toujours est-il qu'il faut distinguer les '''adresses mémoire''' et les '''adresses d'octet''' gérées par le processeur. Le processeur génère des adresses d'octet, qui permettent de sélectionner un octet bien précis. L'adresse d'octet permet de sélectionner un octet parmi tous les autres. Mais la mémoire ne comprend pas directement cette adresse d'octet. Heureusement, l'octet en question est dans une case mémoire bien précise, qui a elle-même une adresse mémoire bien précise. L'adresse d'octet est alors convertie en une adresse mémoire, qui sélectionne la case mémoire adéquate, celle qui contient l'octet voulu. La case mémoire entière est lue, puis le processeur ne récupère que les données adéquates. Pour cela, des circuits d'alignement mémoire se chargent de faire la conversion entre adresses du processeur et adresse mémoire. Nous verrons cela dans le détail dans le chapitre sur l'alignement mémoire. Il existe des mémoires qui n'utilisent pas d'adresses mémoire, mais passons : ce sera pour la suite du cours. ==Le processeur== Dans les ordinateurs, l'unité de traitement porte le nom de '''processeur''', ou encore de '''''Central Processing Unit''''', abrévié en CPU. Le rôle principal du processeur est de faire des calculs. La plupart des processeurs actuels supportent au minimum l'addition, la soustraction et la multiplication. Quelques processeurs ne gèrent pas la division, qui est une opération très gourmande en circuit, peu utilisée, très lente. Il arrive que des processeurs très peu performants ne gèrent pas la multiplication, mais c'est assez rare. Un processeur ne fait pas que des calculs. Tout processeur est conçu pour effectuer un nombre limité d'opérations bien précises, comme des calculs, des échanges de données avec la mémoire, etc. Ces opérations sont appelées des '''instructions'''. Les plus intuitives sont les '''instructions arithmétiques''', qui font des calculs, comme l'addition, la soustraction, la multiplication, la division. Mais il y a aussi des '''instructions d'accès mémoire''', qui échangent des données entre la mémoire RAM et le processeur. Les autres instructions ne sont pas très intuitives, aussi passons-les sous silence pour le moment, tout deviendra plus clair dans les chapitres sur le processeur. ===Le processeur exécute un programme, une suite d'instructions=== Tout processeur est conçu pour exécuter une suite d'instructions dans l'ordre demandé, cette suite s'appelant un '''programme'''. Ce que fait le processeur est défini par la suite d'instructions qu'il exécute, par le programme qu'on lui demande de faire. Les instructions sont exécutées dans un ordre bien précis, les unes après les autres. L'ordre en question est décidé par le programmeur. La totalité des logiciels présents sur un ordinateur sont des programmes comme les autres. Le programme à exécuter est stockée dans la mémoire de l'ordinateur. C'est ainsi que l'ordinateur est rendu programmable : modifier le contenu de la mémoire permet de changer le programme exécuté. Mine de rien, cette idée de stocker le programme en mémoire est ce qui a fait que l’informatique est ce qu'elle est aujourd’hui. C'est la définition même d'ordinateur : appareil programmable qui stocke son programme dans une mémoire modifiable. Une instruction est codée comme les données : sous la forme de suites de bits. Telle suite de bit indique qu'il faut faire une addition, telle autre demande de faire une soustraction, etc. Pour simplifier, nous allons supposer qu'il y a une instruction par adresse mémoire. Sur la grosse majorité des ordinateurs, les instructions sont placées les unes à la suite des autres dans l'ordre où elles doivent être exécutées. Un programme informatique n'est donc qu'une vulgaire suite d'instructions stockée quelque part dans la mémoire de l'ordinateur. {|class="wikitable" |+ Exemple de programme informatique |- ! Adresse ! Instruction |- ! 0 | Copier le contenu de l'adresse 0F05 dans le registre numéro 5 |- ! 1 | Charger le contenu de l'adresse 0555 dans le registre numéro 4 |- ! 2 | Additionner ces deux nombres |- ! 3 | Charger le contenu de l'adresse 0555 |- ! 4 | Faire en XOR avec le résultat antérieur |- ! ... | ... |- ! 5464 | Instruction d'arrêt |} Pour exécuter une suite d'instructions dans le bon ordre, le processeur détermine à chaque cycle quelle est la prochaine instruction à exécuter. Pour cela, le processeur mémorise l'adresse de l'instruction en cours dans un registre : le '''Program Counter'''. Je rappelle que des instructions consécutives sont dans des adresses consécutives. Pour passer à la prochaine instruction, il suffit donc d'incrémenter le ''program counter''. : Si une instruction prend plusieurs octets, plusieurs adresses, il suffit de l'incrémenter du nombre d'octets/adresses. D'autres processeurs font autrement : chaque instruction précise l'adresse de la suivante, directement dans la suite de bit représentant l'instruction en mémoire. Ces processeurs n'ont pas besoin de calculer une adresse qui leur est fournie sur un plateau d'argent. Sur des processeurs aussi bizarres, pas besoin de stocker les instructions en mémoire dans l'ordre dans lesquelles elles sont censées être exécutées. Mais ces processeurs sont très très rares et peuvent être considérés comme des exceptions à la règle. Nous venons de voir qu'un processeur contient un registre appelé le ''program counter''. Mais il n'est pas le seul. Pour pouvoir fonctionner, tout processeur doit mémoriser un certain nombre d’informations nécessaires à son fonctionnement, qui sont mémorisées dans des '''registres de contrôle'''. La plupart ont des noms assez barbares (registre d'état, ''program counter'') et nous ne pouvons pas en parler à ce moment du cours. Nous les verrons en temps voulu, mais il est important de préciser qu'ils existent. ===L'intérieur d'un processeur=== Fort de ce que nous savons, nous pouvons expliquer ce qu'il y a à l'intérieur d'un processeur. Le premier point est qu'un processeur fait des calculs, ce qui implique qu'il contient des circuits de calcul. Ils sont regroupés dans une ou plusieurs '''unités de calcul'''. Nous avons déjà vu comment fabriquer une unité de calcul simple, dans un chapitre dédié, et c'est la même qui est présente dans un processeur. Du moins dans les grandes lignes, les circuits des processeurs modernes étant particulièrement optimisés. Il en est de même pour les autres circuits de calcul comme ceux pour les multiplications/division/autres. Si le processeur fait des calculs, qu'en est-il des opérandes ? Et où sont mémorisés les résultats des opérations ? Pour cela, le processeur incorpore des '''registres généraux'''. Les registres généraux servent à mémoriser les opérandes et résultats des instructions. Ils mémorisent des données, contrairement aux registres de contrôle mentionnés plus haut. Le nombre de registres généraux dépend grandement du processeur. Les tout premiers processeurs se débrouillaient avec un seul registre, mais les processeurs actuels utilisent plusieurs registres, pour mémoriser plusieurs opérandes/résultats. Mais la présence de registres est source de pas mal de petites complications. Par exemple, il faut échanger les données entre la RAM et les registres, il faut gérer l'adressage des registres, etc. Il s'agit là de détails que nous expliquerons dans les chapitres sur le processeur. Le processeur contient enfin un circuit pour interpréter les instructions, appelé l''''unité de contrôle'''. Elle lit les instructions depuis la mémoire, interprète la suite de bit associée, et commande le reste du processeur pour qu'il exécute l'instruction. Ses fonctions sont assez variées, mais nous allons simplifier en disant qu'elle configure l'unité de calcul et les registres pour faire le bon calcul. Son rôle est d'analyser la suite de bit qui constitue l'instruction, et d'en déduire quelle opération effectuer. Elle gère aussi l'accès à la mémoire RAM, et notamment ce qui est envoyé sur son bus d'adresse. : Dans ce qui suit, on suppose que le ''program counter'' fait partie de l'unité de contrôle. Pour résumer, un processeur contient une unité de calcul, des registres et une interface avec la mémoire RAM. Le tout est interconnecté, afin de pouvoir échanger des données. L’ensemble forme le '''chemin de données''', nom qui trahit le fait que c'est là que les données se déplacent et sont traitées. Il faut aussi ajouter l'unité de contrôle pour commander le tout. Elle lit les instructions en mémoire, puis commande le chemin de données pour que l'instruction soit exécutée correctement. [[File:Microarchitecture d'un processeur.png|centre|vignette|upright=2|Microarchitecture d'un processeur]] Un processeur parait donc assez simple expliqué comme ça, mais il y a de nombreuses subtilités. L'une d'entre elle est liée aux registres, et notamment à la manière dont on les utilise. Pour expliquer ces subtilités, nous allons voir comment les premiers processeurs fonctionnaient, avant de passer aux processeurs un peu plus modernes. Les tout premiers processeurs n'utilisaient qu'un seul registre, ce qui fait que l'utilisation des registres était très simple. Le passage à plusieurs registres a complexifié le tout. ===D'où viennent les adresses ?=== Il est maintenant temps de répondre à une question qui s'était posée dans la section sur l'adressage : d'où viennent les adresses envoyées à la mémoire ? Pour ce qui est des adresses des instructions, on connait déjà la réponse : c'est le ''program counter'' qui gère tout. Mais pour les données, il y a deux possibilités, qui correspondent à deux types de données : les données statiques et les données dynamiques. Les '''données statiques''' sont les plus simples : elles existent durant toute la durée de vie du programme. Tant que celui-ci s'exécute, il aura besoin de ces données. En conséquence, il leur réserve une place en mémoire, qui est toujours la même. La donnée se situe donc à une adresse bien précise, qui ne change jamais. Attention cependant : les données peuvent être modifiées, changer de valeur. Le programme écrit dans les donnée statiques, c'est même assez fréquent. Ce sont ne sont pas forcément des données constantes ! Pour les données statiques, elles sont toujours placées à la même adresse mémoire. Pour le dire autrement, l'adresse mémoire est une constante, qui ne change pas. L'adresse est connue avant d’exécuter le programme, le programme a été codé pour utiliser cette adresse pour telle donnée, on a réservé une adresse pour la donnée voulue. Et même si vous quittez le programme et vous le relancez plusieurs jours après, l'adresse mémoire sera la même avant et après. Et cela permet d'utiliser l''''adressage direct'''. L'idée est que les instructions précisent donc l'adresse à lire ou écrire. Pour cela, l'adresse est intégrée dans l’instruction elle-même. Pour rappel, l'instruction est codée par une suite de bit en mémoire RAM/ROM, dont certains précisent l'opération à faire, les autres servant à autre chose. L'idée est que certains bits précisent l'adresse mémoire de la donnée à lire. Les instructions sont donc du genre : * ''LOAD 56'' - lit l'adresse numéro 56 et copie son contenu dans un registre; * ''STORE R5 , adress 99'', copie le registre R5 dans l'adresse 99 ; * ''ADD R5 , adress 209'' : additionne le registre R5 avec le contenu de l'adresse 209. S'il existe des données statiques, c'est signe qu'il existe des '''données dynamiques'''. Ces dernières sont des données qui sont créées ou détruites selon les besoins. Pour comprendre d'où viennent ces données dynamiques, prenons le cas d'une personne qui écrit du texte sur un ordinateur. Le texte qu'il écrit est mémorisé dans la RAM de l’ordinateur, puis est sauvegardé sur le disque dur quand il sauvegarde son document. Au fur et à mesure qu'il écrit du texte, la RAM utilisée par ce texte augmente. Donc, ce texte est une donnée dynamique, dont la taille varie dans le temps. Pour gérer des données dynamiques, la plupart des systèmes d'exploitation incorporent des fonctionnalités d''''allocation mémoire'''. Derrière ce nom barbare, se cache quelque chose de simple : les programmes peuvent réclamer de la mémoire au système d'exploitation, pour y placer les données qu'ils souhaitent. Les langages de programmation bas niveau supportent des fonctions comme malloc(), qui permettent de demander un bloc de mémoire de N octets à l'OS, qui doit alors accommoder la demande. De même, un programme peut libérer de la mémoire qu'il n'utilise plus avec des fonctions comme free(). Avec l'allocation mémoire, les données n'ont pas de place fixe en mémoire. Leur adresse mémoire peut varier d'une exécution du programme à l'autre. Pire que ça : les données peuvent être déplacées dans la mémoire RAM, si besoin. En clair : l'adresse est déterminée lors de l'exécution du programme. L'adresse est alors soit calculée, soit lue depuis la mémoire RAM, soit déterminée autrement. Toujours est-il qu'elle se retrouve dans un registre général. Pour gérer ces adresse variables, les processeurs utilisent l''''adressage indirect'''. L'adressage indirect permet d'utiliser une adresse qui est dans un registre de données. L'adresse en question peut être envoyée à la mémoire RAM sans problème, le processeur peut automatiquement connecter le registre adéquat sur le bus d'adresse. Au tout début de l'informatique, les processeurs ne supportaient que l'adressage direct, pas plus. L'adressage indirect n'était tout simplement pas possible. Avec l'adressage direct, l'adresse à lire est extraite directement des instructions, par l'unité de contrôle. Le bus d'adresse de la RAM est alors relié directement à l'unité de contrôle, le bus de données est relié aux registres. [[File:Architecture Harvard avec adressage direct uniquement.png|centre|vignette|upright=2|Architecture Harvard avec adressage direct uniquement]] Mais dès les années 70, l'adressage indirect est apparu, rendant la programmation bien plus simple. Mais cela a demandé quelques adaptation au niveau du processeur. Avec l'adressage indirect, le bus d'adresse est connecté aux registres. Il a donc fallu rajouter un multiplexeur pour que le processeur décide de relier le bus d'adresse soit aux registres, soit à l'unité de contrôle. ===Un ordinateur peut avoir plusieurs processeurs=== La plupart des ordinateurs n'ont qu'un seul processeur, ce qui fait qu'on désigne avec le terme d''''ordinateurs mono-processeur'''. Mais il a existé (et existe encore) des '''ordinateurs multi-processeurs''', avec plusieurs processeurs sur la même carte mère. L'idée était de gagner en performance : deux processeurs permettent de faire deux fois plus de calcul qu'un seul, quatre permettent d'en faire quatre fois plus, etc. C'est très courant sur les supercalculateurs, des ordinateurs très puissants conçus pour du calcul industriel ou scientifique, mais aussi sur les serveurs ! Dans le cas le plus courant, ils utilisent plusieurs processeurs identiques : on utilise deux processeurs Core i3 de même modèle, ou quatre Pentium 3, etc. Pour utiliser plusieurs processeurs, les programmes doivent être adaptés. Pour cela, il y a plusieurs possibilités : * Une première possibilité, assez intuitive, est d’exécuter des programmes différents sur des processeurs différents. Par exemple, on exécute le navigateur web sur un processeur, le lecteur vidéo sur un autre, etc. * La seconde option est de créer des programmes spéciaux, qui utilisent plusieurs processeurs. Ils répartissent les calculs à faire sur les différents processeurs. Un exemple est la lecture d'une vidéo sur le web : un processeur peut télécharger la vidéo pendant le visionnage et bufferiser celle-ci, un autre processeur peut décoder la vidéo, un autre décoder l'audio. De tels programmes restent des suites d'instructions, mais ils sont plus complexes que les programmes normaux, aussi nous les passons sous silence. * La troisième option est d’exécuter le même programme sur les différents processeurs, mais chaque processeur traite son propre ensemble de données. Par exemple, pour un programme de rendu 3D, quatre processeurs peuvent s'occuper chacun d'une portion de l'image. [[File:Architecture de Von Neumann Princeton multi processeurs.svg|centre|vignette|upright=2|Architecture de Von Neumann Princeton multi processeurs]] De nos jours, les ordinateurs grand public les plus utilisés sont dans un cas intermédiaire, ils ne sont ni mono-, ni multi-processeur. Ils n'ont qu'un seul processeur, dans le sens où si on ouvre l'ordinateur et qu'on regarde la carte mère, il n'y a qu'un seul processeur. Mais ce processeur est en réalité assez similaire à un regroupement de plusieurs processeurs dans le même boitier. Il s'agit de '''processeurs multicœurs''', qui contiennent plusieurs cœurs, chaque cœur pouvant exécuter un programme tout seul. La différence entre cœur et processeur est assez difficile à saisir, mais pour simplifier : un cœur est l'ensemble des circuits nécessaires pour exécuter un programme. Chaque cœur dispose de toute la machinerie électronique pour exécuter un programme, à savoir des circuits aux noms barbares comme : un séquenceur d'instruction, des registres, une unité de calcul. Par contre, certains circuits d'un processeur ne sont présents qu'en un seul exemplaire dans un processeur multicœur, comme les circuits de communication avec la mémoire ou les circuits d’interfaçage avec la carte mère. Suivant le nombre de cœurs présents dans notre processeur, celui-ci sera appelé un processeur double-cœur (deux cœurs), quadruple-cœur (4 cœurs), octuple-cœur (8 cœurs), etc. Un processeur double-cœur est équivalent à avoir deux processeurs dans l'ordinateur, un processeur quadruple-cœur est équivalent à avoir quatre processeurs dans l'ordinateur, etc. Ces processeurs sont devenus la norme dans les ordinateurs grand public et les logiciels et systèmes d'exploitation se sont adaptés. ===Les coprocesseurs=== Quelques ordinateurs assez anciens disposaient de '''coprocesseurs''', des processeurs qui complémentaient un processeur principal. Les ordinateurs de ce type avaient un processeur principal, le '''CPU''', qui était secondé par un ou plusieurs coprocesseurs. Sauf exception, le CPU et le coprocesseur exécutent des programmes différents, ils travaillent en parallèle. Les coprocesseurs les plus connus sont les '''coprocesseurs pour le rendu 2D/3D'''. Ils ont eu leur heure de gloire sur les anciennes consoles de jeux vidéo, comme Super Nintendo, la Playstation et autres consoles de cette génération ou antérieure. Ils s'occupaient respectivement de calculer les graphismes des jeux vidéos. De nos jours, ils ont été remplacés par des cartes graphiques, ou des ''Graphic Processing Units'', qui ne sont pas considérées comme des coprocesseurs. Les '''coprocesseurs sonores''' sont une sorte d'ancêtre des cartes son, utilisés sur les anciennes consoles de jeux vidéo, comme La Nintendo 64, la Playstation et autres consoles antérieures. Ils s'occupaient respectivement de calculer tout ce qui a trait au son. Pour donner un exemple, on peut citer la console Neo-géo, qui disposait de deux processeurs travaillant en parallèle : un processeur principal, et un coprocesseur sonore. Le processeur principal était un Motorola 68000, alors que le coprocesseur sonore était un processeur Z80. L'accès aux périphériques est quelque chose sur lequel nous passerons plusieurs chapitres dans ce cours. Mais sachez que l'accès aux périphériques peut demander pas mal de puissance de calculs. Le CPU principal peut faire ce genre de calculs par lui-même, mais il n'est pas rare qu'un '''coprocesseur d'IO''' soit dédié à l'accès aux périphériques. Un exemple assez récent est celui de la console de jeu Nintendo 3DS. Elle disposait d'un processeur principal de type ARM9, d'un coprocesseur pour les divisions qu'on abordera plus bas, et d'un second processeur ARM7. L'ARM 7 était utilisé comme coprocesseur d'I/O, ainsi que pour l'émulation de la console GBA. [[File:Asmp 2.gif|centre|vignette|upright=2|Co-processeur pour l'accès aux entrées-sorties.]] Les '''coprocesseurs arithmétiques''' sont un peu à part des autres. Ils sont spécialisés dans les calculs en virgule flottante. Ils étaient utilisés à une époque où les CPU ne géraient que des calculs entiers (en binaire ou en BCD). Un exemple est le coprocesseur flottant x87, complémentaire des premiers processeurs Intel x86. Il y a eu la même chose sur les processeurs Motorola 68000, avec deux coprocesseurs flottants appelés les Motorola 68881 et les Motorola 68882. Un exemple récent de coprocesseur est celui utilisé sur la console de jeu Nintendo DS. La console utilisait deux processeurs, un ARM9 et un ARM7, qui ne pouvaient pas faire de division entière. Il s'agit pourtant d'opérations importantes dans le cas du rendu 3D, ce qui fait que les concepteurs de la console ont rajouté un coprocesseur spécialisé dans les divisions entières et les racines carrées. Le coprocesseur était adressable directement par le processeur, comme peuvent l'être la RAM ou les périphériques. ==Les entrées-sorties== Tous les circuits vus précédemment traitent des données codées en binaire. Ceci dit, les données ne sortent pas de n'importe où : l'ordinateur contient des composants électroniques qui traduisent des informations venant de l’extérieur en nombres. Ces composants sont ce qu'on appelle des '''entrées'''. Par exemple, le clavier est une entrée : l'électronique du clavier attribue un nombre entier (''scancode'') à une touche, nombre qui sera communiqué à l’ordinateur lors de l'appui d'une touche. Pareil pour la souris : quand vous bougez la souris, celle-ci envoie des informations sur la position ou le mouvement du curseur, informations qui sont codées sous la forme de nombres. La carte son évoquée il y a quelques chapitres est bien sûr une entrée : elle est capable d'enregistrer un son, et de le restituer sous la forme de nombres. S’il y a des entrées, on trouve aussi des '''sorties''', des composants électroniques qui transforment des nombres présents dans l'ordinateur en quelque chose d'utile. Ces sorties effectuent la traduction inverse de celle faite par les entrées : si les entrées convertissent une information en nombre, les sorties font l'inverse : là où les entrées encodent, les sorties décodent. Par exemple, un écran LCD est un circuit de sortie : il reçoit des informations, et les transforme en image affichée à l'écran. Même chose pour une imprimante : elle reçoit des documents texte encodés sous forme de nombres, et permet de les imprimer sur du papier. Et la carte son est aussi une sortie, vu qu'elle transforme les sons d'un fichier audio en tensions destinées à un haut-parleur : c'est à la fois une entrée, et une sortie. Les '''entrées-sorties''' incluent toutes les entrées et sorties, et même certains composants qui sont les deux à la fois. Il s'agit d'un terme générique, qui regroupe des composants forts différents. Dans ce qui va suivre, nous allons parfois parler de périphériques au lieu d'entrées-sorties, mais les deux termes ne sont pas équivalents. Dans le détail, les entrées-sorties regroupent : * Les '''périphériques''' sont les composants connectés sur l'unité centrale. Exemple : les claviers, souris, webcam, imprimantes, écrans, clés USB, disques durs externes, la Box internet, etc. * Les '''cartes d'extension''', qui se connectent sur la carte mère via un connecteur, comme les cartes son ou les cartes graphiques. * D'autres composants sont soudés à la carte mère mais sont techniquement des entrées-sorties : les cartes sons soudées sur les cartes mères actuelles, par exemple. ===L'interface avec le reste de l'ordinateur=== Les entrées-sorties sont très diverses, fonctionnent très différemment les unes des autres. Mais du point de vue du reste de l'ordinateur, les choses sont relativement standardisées. Du point de vue du processeur, les entrées-sorties sont juste des paquets de registres ! Tous les périphériques, toutes les entrées-sorties contiennent des '''registres d’interfaçage''', qui permettent de faire l'intermédiaire entre l'entrée/sortie et le reste de l'ordinateur. L'entrée/sortie est conçu pour réagir automatiquement quand on écrit dans ces registres. [[File:Registres d'interfaçage.png|centre|vignette|upright=2|Registres d'interfaçage.]] Les registres d’interfaçage sont assez variés. Les plus évidents sont les '''registres de données''', qui permettent l'échange de données entre le processeur et les périphériques. Pour échanger des données avec l'entrée/sortie, le processeur a juste à lire ou écrire dans ces registres de données. On trouve généralement un registre de lecture et un registre d'écriture, mais il se peut que les deux soient fusionnés en un seul registre d’interfaçage de données. Si le processeur veut envoyer une donnée à une entrée/sortie, il a juste à écrire dans ces registres. Inversement, s'il veut lire une donnée, il a juste à lire le registre adéquat. Mais le processeur ne fait pas que transmettre des données à l'entrée/sortie. Le processeur lui envoie aussi des « commandes », des valeurs numériques auxquelles l'entrée/sortie répond en effectuant un ensemble d'actions préprogrammées. En clair, ce sont l'équivalent des instructions du processeur, mais pour l'entrée/sortie. Par exemple, les commandes envoyées à une carte graphique peuvent être : affiche l'image présente à cette adresse mémoire, calcule le rendu 3D à partir des données présentes dans ta mémoire, etc. Pour recevoir les commandes, l'entrée/sortie contient des ''registres de commande'' qui mémorisent les commandes envoyées par le processeur. Quand le processeur veut envoyer une commande à l'entrée/sortie, il écrit la commande en question dans ce ou ces registres. Enfin, beaucoup d'entrée/sortie ont un ''registre d'état'', lisible par le processeur, qui contient des informations sur l'état de l'entrée/sortie. Ils servent notamment à indiquer au processeur que l'entrée/sortie est disponible, qu'il est en train d’exécuter une commande, qu'il est occupé, qu'il y a un problème, qu'il y a une erreur de configuration, etc. ===Les adresses des registres d’interfaçage=== Les registres des périphériques sont identifiés par des adresses mémoires. Et les adresses sont conçues de façon à ce que les adresses des différentes entrées/sorties ne se marchent pas sur les pieds. Chaque entrée/sortie, chaque registre, chaque contrôleur a sa propre adresse. D'ordinaire, certains bits de l'adresse indiquent quel est le destinataire. Certains indiquent quel est l'entrée/sortie voulue, les restants indiquant le registre de destination. Il existe deux organisations possibles pour les adresses des registres d’interfaçages. La première possibilité est de séparer les adresses pour les registres d’interfaçage et les adresses pour la mémoire. Le processeur doit avoir des instructions séparées pour gérer les périphériques et adresser la mémoire. Il a des instructions de lecture/écriture pour lire/écrire en mémoire, et d'autres pour lire/écrire les registres d’interfaçage. Sans cela, le processeur ne saurait pas si une adresse est destinée à un périphérique ou à la mémoire. [[File:Espaces d'adressages séparés entre mémoire et périphérique.png|centre|vignette|upright=2.5|Espaces d'adressages séparés entre mémoire et périphérique]] L'autre méthode mélange les adresses mémoire et des entrées-sorties. Si on prend par exemple un processeur de 16 bits, où les adresses font 16 bits, alors les 65536 adresses possibles seront découpées en deux portions : une partie ira adresser la RAM/ROM, l'autre les périphériques. On parle alors d''''entrées-sorties mappées en mémoire'''. L'avantage est que le processeur n'a pas besoin d'avoir des instructions séparées pour les deux. [[File:IO mappées en mémoire.png|centre|vignette|upright=2.0|IO mappées en mémoire]] Pour résumer, communiquer avec une entrée/sortie est similaire à ce qu'on a avec les mémoires. Il suffit de lire ou écrire dans des registres d’interfaçage, qui ont chacun une adresse mémoire. Le problème est que le système d'exploitation ne connaît pas toujours le fonctionnement d'une entrée/sortie : il faut installer un programme qui va s'exécuter quand on souhaite communiquer avec l'entrée/sortie, et qui s'occupera de tout ce qui est nécessaire pour le transfert des données, l'adressage du périphérique, etc. Ce petit programme est appelé un driver ou '''pilote de périphérique'''. La « programmation » périphérique est très simple : il suffit de savoir quoi mettre dans les registres, et c'est le pilote qui s'en charge. ==Les architectures Harvard et Von Neumann== Après avoir vu le processeur, les mémoires et les entrées-sorties, voyons voir comment le tout est interconnecté. Tous les ordinateurs ne sont pas organisés de la même manière, pour ce qui est de leurs bus. Mais pour comprendre pourquoi, nous devons regarder qui communique avec qui, dans un ordinateur. Pour rappel, les données sont placées en mémoire RAM, alors que les instructions sont placées en mémoire ROM. Le processeur lit des instructions dans la mémoire ROM, il lit et écrit dans la mémoire RAM, et accède aux registres d’interfaçage des entrées-sorties. Il y a donc besoins de trois interconnexions : CPU-ROM, CPU-RAM et CPU-IO. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] Il parait intéressant d'utiliser trois interconnexions, au minimum CPU-ROM, CPU-RAM et CPU-IO. Néanmoins, faire ainsi a de nombreux désavantages. Déjà, il faut pouvoir brancher tout ça sur le processeur. Et celui-ci n'a pas forcément assez de broches pour. Aussi, il est parfois préférable de mutualiser des bus, à savoir de connecter plusieurs composants sur un même bus. Par exemple, on peut mutualiser le bus pour la mémoire RAM et pour la mémoire ROM. Il faut dire que les deux bus sont des bus mémoire, avec un bus d'adresse, un bus de données, et surtout : des bus de commande similaires. Les mutualiser est alors très simple, et permet d'économiser pas mal de broches. [[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre et une architecture Harvard]] Cette mutualisation nous amène naturellement à parler de la distinction entre les architectures Harvard d'un côté et les architectures Von Neumann de l'autre. Elle est très liée au fait d'utiliser soit un bus mémoire unique, soit des bus séparés pour la ROM et la RAM. Voyons cela en détail. ===Les architectures Harvard et Von Neumann : des bus séparés ou unifiés=== Avec l''''architecture Harvard''', la mémoire ROM et la mémoire RAM sont reliées au processeur par deux bus séparés. Il y a un bus RAM pour la mémoire RAM, un bus ROM pour la mémoire ROM. L'avantage de cette architecture est qu'elle permet de charger une instruction et une donnée simultanément : une instruction chargée sur le bus relié à la mémoire programme, et une donnée chargée sur le bus relié à la mémoire de données. Et cela simplifie fortement la conception du processeur. [[File:Harvard Architecture.png|centre|vignette|upright=2|Architecture Harvard, avec une ROM et une RAM séparées.]] Avec l''''architecture Von Neumann''', mémoire ROM et mémoire RAM sont reliées au processeur par un bus unique. Le bus unique qui relie processeur, RAM et ROM, s'appelle le '''bus mémoire'''. Un défaut de ces architecture est qu'elles ne peuvent pas charger une instruction et une donnée en même temps. Et cela pose quelques problèmes pour la conception du processeur. Par contre, nous verrons dans ce qui suit qu'utiliser un bus mémoire partagé est bien plus flexible et permet des choses que les architectures Harvard ne peuvent pas faire. [[File:Architecture Von Neumann, avec deux bus séparés.png|centre|vignette|upright=2|Architecture Von Neumann, avec deux bus séparés.]] ===Les architectures Harvard et Von Neumann : des espaces d'adressage séparés ou unifiés=== La distinction précédente se base sur les connexions entre RAM, ROM et processeur. Mais il existe une autre distinction, très liée, qui est souvent utilisée comme seconde définition des architectures Harvard/Von Neumann. Elle est liée aux adresses mémoire que le processeur peut gérer. Prenons un processeur 16 bits, par exemple, qui gère naturellement des adresses de 16 bits. Il peut gérer 2^16 adresses, soit 64 kibioctets de mémoire. L'ensemble de ces adresses est appelé un '''espace d'adressage'''. Mais comment cet espace d'adressage est utilisé pour adresser une RAM et une ROM ? Sur les architectures Harvard, le processeur voit deux mémoires séparées avec leur lot d'adresses distinctes. Une même adresse peut donc correspondre soit à la mémoire ROM, soit à la mémoire RAM, suivant le bus utilisé. L'espace d'adressage est donc doublé, dupliqué, avec un pour la ROM, un autre pour la RAM. Rien d'étonnant à cela : il y a deux bus d'adresses, chacun correspondant à un espace d'adressage. [[File:Vision de la mémoire par un processeur sur une architecture Harvard.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Harvard.]] Avec l'architecture Von Neumann, la RAM et la ROM doivent se partager les adresses mémoires disponibles. Il n'y a qu'un seul espace d'adressage qui est coupé en deux, avec une partie pour la ROM et une autre pour la RAM. Une adresse correspond soit à la mémoire RAM, soit à la mémoire ROM, mais pas aux deux. Typiquement, la mémoire ROM occupe une partie des adresses, la mémoire RAM utilise le reste. La répartition des adresses est réalisée par les circuits de décodage d'adresse mentionnés plus haut. [[File:Vision de la mémoire par un processeur sur une architecture Von Neumann.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Von Neumann.]] Les '''architectures Harvard modifiées''' sont des intermédiaires entre architectures Harvard et architectures Von Neumann, bien qu'elles penchent bien plus du côté des architectures Harvard. Précisons que la terminologie n'est pas claire, beaucoup d'auteurs mettent des définitions différentes derrière ces deux termes. Mais dans ce cours, nous utiliserons une définition très stricte de ce qu'est une architecture Harvard modifiée. Une architecture Harvard modifiée est une architecture Harvard, où le processeur peut lire des données constantes depuis la mémoire ROM. Nous avions vu plus haut que les mémoires ROM peuvent mémoriser, en plus d'un programme exécutable, des données constantes, qui ne varient pas. Les architectures Harvard pures ne permettent pas de lire des données de ce genre depuis la mémoire ROM, alors que les architectures Harvard modifiées le permettent. Une architecture Harvard modifiée dispose d'une instruction pour lire les données en mémoire RWM, et d'une instruction pour lire des données en mémoire ROM. Il y a donc deux versions de l'instruction LOAD, qui copient la donnée dans un registre général, mais dont la source de la donnée est différente. Une autre possibilité, plus rare, est que une instruction de copie, qui copie une constante depuis la mémoire ROM vers la mémoire RAM. Le cas le plus commun est l'utilisation de deux instructions LOAD séparées. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Ceci étant dit, revenons à la distinction entre architecture Harvard et Von Neumann. Il faut noter que la RAM et la ROM n'ont pas forcément la même taille. Et ce que ce soit sur une architecture Harvard que sur une architecture Von Neumann, mais c'est plus facile à expliquer sur une architecture Harvard. On peut par exemple imaginer une architecture Harvard qui utilise des adresses de 16 bits pour la ROM, et seulement 8 bits pour la RAM. Le résultat est qu'il peut adresser 64 kibioctets de ROM, mais seulement 256 octets de RAM. Les deux bus d'adresse sont alors de taille différente, l'un faisant 8 bits, l'autre 16. Quelques processeurs 8 bits étaient dans ce cas, comme on le verra dans le chapitre sur les CPU 8bits. Mais d'autres processeurs utilisent des valeurs différentes, avec par exemple des adresses de 16 bits pour la RAM, mais de 20 bits pour la ROM, ou inversement. Sur une architecture Von Neumann, tout dépend de comment les adresses sont réparties. La solution la plus simple découpe l'espace d'adressage en deux parties égales, avec la RAM qui est dans la moitié basse (qui part de l'adresse 0 jusqu'à l'adresse au milieu), alors que la ROM est dans la moitié haute (entre l'adresse du milieu et l'adresse maximale). Mais ce n'est pas la seule possibilité, la limite entre RAM et ROM peut être mise n'importe où. Prenons par exemple un processeur 32 bits, capable de gérer 4 milliards d'adresse. Il est parfaitement possible de réserver 128 mébioctets de poids fort à la mémoire ROM, et de laisser le reste à la mémoire RAM. ===Le décodage d'adresse sur les architectures Von Neumann=== Pour résumer, les architectures Harvard et Von Neumann se distinguent sur deux points : * L'accès à la RAM et à la ROM se font par des bus séparés sur l'architecture Harvard, sur le même bus avec l'architecture Von Neumann. * Les adresses pour la mémoire ROM et la mémoire RAM sont séparées sur les architectures Harvard, partagées sur l’architecture Von Neumann. Les architectures Von Neumann utilisent donc un seul bus pour connecter la RAM et la ROM au processeur. Mais cela ne parait pas intuitif : comment deux composants peuvent se connecter aux mêmes fils ? Parce que c'est ce qu'implique le fait de partager un bus. Si je prends une mémoire RAM et une mémoire ROM, toutes deux de 8 bits, elles seront connectées à un bus mémoire de 8 bits. Intuitivement, on se dit qu'il y aura des conflits, du genre : la RAM et la ROM vont accéder au bus en même temps, comment savoir si une adresse est destinée à la RAM ou la ROM, etc ? Tous ces problèmes sont résolus avec une solution très simple : à chaque instant, seule une mémoire est connectée au bus. L'idée est que les mémoires sont connectées ou déconnectées du bus selon les besoins. Si le processeur veut envoyer lire une donnée en mémoire RAM, il déconnecte la mémoire ROM du bus. Et inversement, s'il veut lire une instruction, il déconnecte la RAM et connecte la ROM. Pour cela, les mémoires RAM et ROM possèdent une entrée ''Chip Select'' ou ''Output Enable'', qui agit comme une sorte de bouton ON/OFF. Lorsqu'on met un 1 sur cette entrée, la mémoire se connectera au bus. Ses entrées et sorties fonctionneront normalement, elle pourra recevoir des adresses, envoyer ou recevoir des données, tout sera normal. Par contre, si on met un 0 sur cette entrée, la mémoire se "désactive", ses entrée-sorties ne répondent plus aux sollicitations extérieures. Pire que ça : elles sont électriquement déconnectées. Au total, tout cela demande de gérer deux bit ''Chip Select''/''Output Enable'' : un pour la RAM, un pour la ROM. Et ces deux bits sont configurés pour chaque accès mémoire, pour chaque lecture ou écriture. Pour cela, un circuit de '''décodage d'adresse''' prend en entrée l'adresse mémoire à lire/écrire, et active/désactive les mémoires RAM/ROM selon les besoins. Il prend l'adresse et configure les bits ''Chip Select''/''Output Enable''. [[File:Décodage d'adresse sur une architecture Von Neumann.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann.]] L'implémentation la plus simple réserve la moitié des adresses pour la RAM, l'autre moitié pour la ROM. Typiquement, la ROM prend la moitié basse, la RAM la moitié haute. Dans ce cas, activer/désactiver la RAM et la ROM se fait avec seulement le bit de poids fort de l'adresse. Si le bit de poids fort est à 1, alors on accède à la RAM et la ROM doit être désactivée. Mais si ce bit est à 0, alors on accède à la moitié basse et il faut désactiver la RAM. Une remarque intéressante : le fait de séparer la mémoire en deux parts égales permet de simuler une architecture Harvard à partir d'une architecture Von Neumann. Par exemple, le tout premier processeur d'Intel, le 4004, était l'un de ceux là. La RAM et la ROM sont reliés au même bus, et il y a donc un unique espace d'adressage, qui est séparé en deux parties égales. Le truc est que le processeur traite les deux parties égales comme deux espaces d'adressage séparés. Le processeur se débrouille pour cacher le fait qu'il y a un espace d'adressage unique coupé en deux, ce qui fait que les programmeurs voient bien deux espaces d'adressages distincts. [[File:Décodage d'adresse sur une architecture Von Neumann basique.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann basique.]] Pour résumer, quand une adresse est envoyée sur le bus, les deux mémoires vont la recevoir mais une seule va répondre et se connecter au bus. Le décodage d'adresse garantit que seule la mémoire adéquate réponde à un accès mémoire. Le décodage d'adresse est réalisé par la carte mère, par un composant dédié. Le mécanisme peut être utilisé pour combiner plusieurs RAM en une seule, idem avec les ROM. Pour comprendre l'idée, je vais prendre l'exemple de l'IBM PC, un des tout premier PC existant. Nous étudierons ce PC dans une section dédiée, à la fin du chapitre, aussi je vais passer rapidement dessus. Tout ce que je vais faire est vous présenter la carte mère du PC, et vous demander de faire est de compter les mémoires ROM et mémoires RAM sur la carte mère : [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] Si vous remarquerez qu'il y a 5 mémoires ROM et 8 à 32 mémoires RAM. Le fait est que le processeur voit les différentes mémoires ROM comme une seule mémoire ROM. Idem avec les mémoires RAM : elle font chacune 2 kibioctets, et l'ensemble est vu par le processeur comme une seule RAM de 16 à 64 kibioctets. Et cela grâce aux circuits de décodage d'adresse, qui sont situés en haut à droite de la carte mère. Pour comprendre l'idée, prenons l'exemple d'un processeur 16 bits, capable de gérer 64 kibioctets de mémoire. L'espace d'adressage est découpé en quatre portions, de 16 kibioctets chacune. Une portion est réservée à une ROM de 16 kibioctet, les autres sont chacune réservée à une RAM de 16 kibioctet. Le décodage d'adresse sélectionne alors la mémoire adéquate en utilisant les deux bits de poids fort de l'adresse. * S'ils valent 00, alors c'est la mémoire ROM qui est activée, connectée au bus. * S'ils valent 01, alors c'est la première mémoire RAM qui est connectée au bus. * S'ils valent 10, alors c'est la seconde mémoire RAM qui est connectée au bus. * S'ils valent 11, alors c'est la troisième mémoire RAM qui est connectée au bus. [[File:Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM.png|centre|vignette|upright=3|Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM]] ===L'impact sur la conception du processeur=== Plus haut, j'ai parlé d'un des avantages des architectures Harvard : elles peuvent lire une instruction en même temps qu'elles accèdent à une donnée. La donnée est lue/écrite en RAM, alors que l'instruction est lue en ROM. Et cela permet de simplifier l'intérieur du processeur. Pas de beaucoup, mais c'est déjà ça de pris. Voyons maintenant comment cela impacte l'intérieur du processeur. Tout ce dont vous avez à vous rappeler est la séparation entre chemin de données et unité de contrôle, et que les registres généraux sont dans le premier, le ''program counter'' dans la seconde. Avec une architecture Harvard, les instructions et les données passent par des bus différent : bus ROM pour les instructions, bus RAM pour les données. L'intuition nous dit que le bus pour la mémoire ROM est connecté à l'unité de contrôle, alors que le bus pour la RAM est connecté au chemin de données. Et dans les grandes lignes, c'est vrai. La logique est imparable pour ce qui est des bus de données. Mais il y a une petite subtilité pour les bus d'adresse. Pour comprendre comment le processeur exploite ces deux bus, voyons ce qui transite dessus. Pour la mémoire ROM, elle reçoit l'adresse de l'instruction à lire, elle renvoie l'instruction adéquate. Pour cela, le ''program counter'' est envoyé sur le bus d'adresse, l'instruction sur le bus de données. Pour la mémoire RAM, elle échange des données avec les registres généraux, les registres pour les données. Les adresses utilisées pour la RAM viennent elles soit du chemin de données, soit de l'unité de contrôle, tout dépend du mode d'adressage. Mais le ''program counter'' n'est pas impliqué. [[File:Architecture Harvard - échanges de données.png|centre|vignette|upright=2|Architecture Harvard - échanges de données]] Les architectures Harvard modifiées doivent cependant rajouter une connexion entre le bus ROM et les registres généraux. C'est nécessaire pour charger une donnée constante depuis la mémoire ROM. Rappelons que la donnée constante est copiée dans un registre général, donc dans le chemin de données. [[File:Architecture Harvard modifiée - implémentation du processeur.png|centre|vignette|upright=2|Architecture Harvard modifiée - implémentation du processeur]] Avec les architectures Von Neumann, il y a un seul bus qui est relié à la fois au chemin de données et à l'unité de contrôle. Si le processeur lit une instruction, le bus doit être relié à l'unité de contrôle. Par contre, s'il accède à une donnée, il doit être relié au chemin de données (le bus d'adresse peut éventuellement être connecté au séquenceur, si celui-ci fournit l'adresse à lire). Il faut donc utiliser un paquet de multiplexeurs et de démultiplexeurs pour faire la connexion au bon endroit. [[File:Architecture Von Neumann - implémentation du processeur.png|centre|vignette|upright=2|Architecture Von Neumann - implémentation du processeur]] Une instruction se fait en deux temps : on charge l'instruction depuis la mémoire ROM, puis on l'exécute. Avec une architecture Harvard, tout cela se fait en un seul cycle d'horloge, vu que charger la ROM et accéder aux données peut se faire en même temps. Pas avec les architectures Von Neumann, qui doivent libérer le bus mémoire après avoir chargé une instruction. Elles n'ont pas le choix : elles chargent l'instruction lors d'un premier cycle d'horloge, puis l'exécutent lors du second. Pour cela, ils incorporent un registre appelé le '''registre d'instruction''', qui mémorise l'instruction chargée. L'instruction est copiée dans ce registre lors du premier cycle, puis est utilisée lors du second cycle. Le registre permet de ne pas oublier l’instruction entre les deux cycles. Le registre d'instruction est obligatoire sur les architectures Von Neumann. En comparaison, il est facultatif sur les architectures Harvard. Elles peuvent en avoir un, pour des raisons techniques, mais ce n'est pas obligatoire. [[File:Registre d'instruction.png|centre|vignette|upright=2|Registre d'instruction.]] ===Les architectures Von Neumann sont plus flexibles=== Sur les architectures Harvard, le processeur sait faire la distinction entre programme et données. Les données sont stockées dans la mémoire RAM, le programme est stocké dans la mémoire ROM. Les deux sont séparés, accédés par le processeur sur des bus séparés, et c'est ce qui permet de faire la différence entre les deux. Il est impossible que le processeur exécute des données ou modifie le programme. Du moins, tant que la mémoire qui stocke le programme est bien une ROM. Par contre, sur les architectures Von Neumann, il est impossible de distinguer programme et données, sauf en ajoutant des techniques de protection mémoire avancées. La raison est qu'il est impossible de faire la différence entre donnée et instruction, vu que rien ne ressemble plus à une suite de bits qu'une autre suite de bits. Et c'est à l'origine d'un des avantages majeur de l'architecture Von Neumann : il est possible que des programmes soient copiés dans la mémoire RWM et exécutés dans celle-ci. Un cas d'utilisation familier est celui de votre ordinateur personnel. Le système d'exploitation et les autres logiciels sont copiés en mémoire RAM à chaque fois que vous les lancez. Mais cet exemple implique un disque dur, ce qui rend les choses plus compliquées que prévu. Un autre exemple serait la compilation de code à la volée, mais il ne sera pas très parlant. Un exemple plus adapté serait celui où la ROM mémorise un programme compressée dans la mémoire ROM, qui est décompressé pour être exécuté en mémoire RAM. Le programme de décompression est stocké en mémoire ROM et est exécuté au lancement de l’ordinateur. Cette méthode permet d'utiliser une mémoire ROM très petite et très lente, tout en ayant un programme rapide (si la mémoire RWM est rapide). Il est aussi possible de créer des programmes qui modifient leurs propres instructions : cela s'appelle du '''code auto-modifiant'''. Ce genre de choses servait autrefois sur des ordinateurs rudimentaires, au tout début de l'informatique. À l'époque, les adresses à lire/écrire devaient être écrites en dur dans le programme, dans les instructions exécutées. Pour gérer certaines fonctionnalités des langages de programmation qui ont besoin d'adresses modifiables, comme les tableaux, on devait corriger les adresses au besoin avec du code auto-modifiant. De nos jours, le code automodifiant est utilisée occasionnellement pour rendre un programme indétectable dans la mémoire (les virus informatiques utilisent beaucoup ce genre de procédés). L'impossibilité de séparer données et instructions est à l'origine de problèmes assez fâcheux. Il est parfaitement possible que le processeur charge et exécute des données, qu'il prend par erreur pour des instructions. C'est le cas quand des pirates informatiques arrivent à exploiter des bugs. Il arrive que des pirates informatiques vous fournissent des données corrompues, qui contiennent un virus ou un programme malveillant est caché dans les données. Les bugs en question permettent d'exécuter ces données, donc virus. Pour éviter cela, le système d'exploitation peut marquer certaines zones de la mémoire comme non-exécutable, c’est-à-dire que le système d'exploitation interdit d’exécution de quoi que ce soit qui est dans cette zone. Mais ce n'est pas parfait. Toujours est-il que tout cela est impossible sur les architectures Harvard. Et ce serait très limitant. Imaginez : pas possible de lancer un programme depuis le disque dur ou une clé USB, le programme doit impérativement être dans une mémoire ROM, pas de compilation à la volée, etc. Que des techniques très utilisées dans l'informatique moderne. Malgré ses défauts, les architectures Von Neumann ne sont pas les plus utilisées pour rien. Les architectures Harvard sont concrètement utilisées uniquement dans l'informatique embarquée, sur des microcontrôleurs très spécifiques. ==Le bus de communication avec les entrées-sorties== Le processeur, la mémoire et les entrées-sorties sont connectées par un ou plusieurs '''bus de communication'''. Ce bus n'est rien d'autre qu'un ensemble de fils électriques sur lesquels on envoie des zéros ou des uns. Pour communiquer avec la mémoire, il y a trois prérequis qu'un bus doit respecter : pouvoir sélectionner la case mémoire (ou l'entrée-sortie) dont on a besoin, préciser à la mémoire s'il s'agit d'une lecture ou d'une écriture, et enfin pouvoir transférer la donnée. Pour cela, on doit donc avoir trois bus spécialisés, bien distincts, qu'on nommera le bus de commande, le bus d'adresse, et le bus de donnée. * Le '''bus de données''', sur lequel s'échangent les données entre les composants. * Le '''bus de commande''' pour configurer la mémoire et les entrées-sorties. * Le '''bus d'adresse''', facultatif, permet de préciser quelle adresse mémoire il faut lire/écrire. Chaque composant possède des entrées séparées pour le bus d'adresse, le bus de commande et le bus de données. Par exemple, une mémoire RAM possédera des entrées sur lesquelles brancher le bus d'adresse, d'autres sur lesquelles brancher le bus de commande, et des broches d'entrée-sortie pour le bus de données. Précisons cependant que le bus de commande n'est pas exactement le même entre des mémoires RAM/ROM et des entrées-sorties. [[File:Bus general schematic.svg|centre|vignette|upright=2|Contenu d'un bus, généralités.]] ===Le réseau d'interconnexion : généralités=== Reprenons où nous nous étions arrêté. Avant de voir les architectures Harvard et Von Neumann, nous avions dit que le processeur, les mémoires et les entrées-sorties sont reliées entre eux par un réseau d'interconnexion. Nous venons de voir qu'il est possible de mutualiser certains bus, notamment celui de la mémoire RAM et celui de la mémoire ROM. Mais il est possible de faire la même chose pour les entrées-sorties. Là encore, il est possible de regrouper le bus mémoire avec les bus pour les entrées-sorties. Voyons ce que cela implique. {| |[[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec une architecture Harvard.]] |[[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Interconnexions d'une architecture Von Neumann.]] |} Avant de poursuivre, nous devons préciser quelque chose d'important. Sur les ordinateurs modernes, les entrées-sorties peuvent accéder à la mémoire RAM. Les ordinateurs modernes intègrent des techniques de '''''Direct Memory Access''''' (DMA) qui permettent aux entrées-sorties de lire ou d'écrire en mémoire RAM. Les transferts DMA se font sans intervention du processeur. Ils permettent de copier un bloc de plusieurs octets, dans deux sens : de la mémoire RAM vers une entrée-sortie, ou inversement. Le DMA demande d'ajouter un circuit dédié sur la carte mère : le contrôleur DMA. Il effectue la copie d'un paquet d'octets de la RAM vers l'entrée-sortie ou dans l'autre sens. [[File:Réseau d'interconnexion avec un processeur au centre, et direct memory access.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre, et direct memory access]] ===Les bus systèmes=== La première solution utilise un bus unique, celui-ci est appelé le '''bus système''', aussi appelé ''backplane bus''. Le bus système est connecté à la mémoire RAM, la mémoire ROM, au processeur, et aux entrées-sorties. Tous les composants présents dans l'ordinateur sont connectés à ce bus, sans exception. De tels bus avaient pour avantage la simplicité. Le processeur n'est connecté qu'à un seul bus, ce qui utilise peu de broches et économise des fils. La mutualisation des bus est totale, le câblage est plus simple, la fabrication aussi. [[File:Architecture minimale d'un ordinateur.png|centre|vignette|upright=2|Architecture minimale d'un ordinateur.]] Un bus système contient un bus d'adresse, de données et de commande. Un bus système se marie bien avec des entrées-sorties mappées en mémoire. La conséquence est que le bus d'adresse ne sert pas que pour l'accès à la mémoire RAM/ROM, mais aussi pour l'accès aux entrées-sorties. Il y a moyen d'implémenter un système d'adresse séparés avec, mais c'est pas l'idéal. [[File:Architecture Von Neumann avec les bus.png|centre|vignette|upright=2|Architecture Von Neumann avec les bus.]] Un bus système n'a pas de limitations quant aux échanges de données. Le processeur peut communiquer directement avec les mémoires et les entrées-sorties, les entrées-sorties peuvent communiquer avec la mémoire RAM, etc. Notamment, un bus système peut implémenter le ''Direct Memory Access''. Il suffit juste de connecter un contrôleur DMA sur le bus système. Le contrôleur DMA est considéré comme une entrée-sortie, ses registres sont mappés en mémoire et sont donc accessibles directement par le processeur. [[File:Bus système avec controleur DMA.png|centre|vignette|upright=2|Bus système avec contrôleur DMA.]] Si on suit la définition à la lettre, un bus système est systématiquement une architecture Von Neumann, vu que la mémoire ROM et la mémoire RAM sont reliées sur le bus système. La conséquence est que les circuits de décodage d'adresse sont présents. Ils sont toujours sur la carte mère, et sont plus ou moins à côté du bus système. Cependant, le décodage d'adresse est parfois étendu pour tenir compte des entrées-sorties. Les entrées-sorties soudées sur la carte mère ont elles aussi des entrées ''Chip Select'' ou quelque chose de similaire. Le décodage d'adresse peut alors les activer ou les désactiver suivant l'adresse envoyée sur le bus d'adresse. C'est ce qui arrive quand le processeur écrit dans un registre d’interfaçage : il envoie l'adresse de ce registre sur le bus d'adresse, le circuit de décodage d'adresse active seulement l'entrée-sortie associée. Il faut noter que ce n'est pas systématique, il existe des techniques pour se passer de décodage d'adresse. Mais nous en reparlerons dans le chapitre sur les bus de communication. [[File:Chipselectfr.png|centre|vignette|upright=1.5|Exemple détaillé.]] Les bus systèmes sont certes très simples, mais ils ont aussi des désavantages. Par exemple, il faut éviter que le processeur et les entrées-sorties se marchent sur les pieds, ils ne peuvent pas utiliser le bus en même temps. De tels conflits d'accès au bus système sont fréquents et ils réduisent la performance, comme on le verra dans le chapitre sur les bus. De plus, un bus système a le fâcheux désavantage de relier des composants allant à des vitesses très différentes : il arrivait fréquemment qu'un composant rapide doive attendre qu'un composant lent libère le bus. Le processeur était le composant le plus touché par ces temps d'attente. Elle était utilisée sur les tout premiers ordinateurs, pour sa simplicité. Elle était parfaitement adaptée aux anciens composants, qui allaient tous à la même vitesse. De nos jours, les ordinateurs à haute performance ne l'utilisent plus trop, mais elle est encore utilisée sur certains systèmes embarqués, en informatique industrielle dans des systèmes très peu puissants. ===Les bus d'entrées-sorties=== Les bus systèmes ont de nombreux problèmes, ce qui fait que d'anciens ordinateurs faisaient autrement. À la place d'un bus système unique, ils utilisent un bus séparé pour les mémoires, et un autre séparé pour les entrées-sorties. Le bus spécialisé pour la mémoire est appelé le '''bus mémoire''', l'autre bus est appelé le '''bus d'entrées-sorties'''. Le bus mémoire est généralement relié à la fois à la mémoire RAM et à la mémoire ROM, les exceptions ne sont pas rares, cependant. [[File:Bus mémoire séparé du bus pour les IO.png|centre|vignette|upright=2|Bus mémoire séparé du bus pour les IO]] Les bus d'entrée-sorties peuvent être spécialisés et simplifiés. Par exemple, ils peuvent avoir un bus de commande différent de celui de la mémoire, qui utilise nettement moins de fils. Le bus d'adresse peut aussi être réduit, et utiliser des adresses plus courtes que celles du bus mémoire. Les bus de données peuvent aussi être de taille différentes. Il est ainsi possible d'avoir un bus mémoire capable de lire/écrire 64 bits à la fois, alors que la communication avec les entrées-sorties se fait octet par octet ! En général, les bus d'entrée-sortie sont assez petits, ils ont une taille de 8 ou 16 bits, même si le bus mémoire est plus grand. Cela permet de ne pas gaspiller trop de broches. Ajouter un bus d'entrée-sortie n'est donc pas très gourmand en broches et en fils. : Il est en théorie possible d'avoir une fréquence différente pour les deux bus, avec un bus mémoire ultra-rapide et un bus pour les entrées-sorties est un bus moins rapide. Mais il faut que le processeur soit prévu pour, et c'est très rare. Niveau performances, le processeur peut théoriquement accéder à la mémoire en attendant qu'une entrée/sortie réponde, mais il faut que le processeur soit prévu pour, et ce n'est pas de la tarte. Par contre, cela implique d'avoir des adresses séparées pour les registres d’interfaçage et la mémoire. En clair : pas d'entrée-sortie mappée en mémoire ! Un autre problème est que les entrées-sorties ne peuvent pas communiquer avec la mémoire directement, elles doivent passer par l'intermédiaire du processeur. En clair : pas de ''Direct Memory Access'' ! Les deux sont des défauts rédhibitoires pour les programmeurs système, notamment pour ceux qui codent les pilotes de périphériques. Pour résumer, les défauts sont assez problématiques : pas d'entrées-sorties mappées en mémoire, pas de ''Direct Memory Access'', économie de broches limitée. Les deux premiers sont des défauts majeurs, qui font que de tels bus ne sont pas utilisés dans les ordinateurs modernes. À la place, ils utilisent une troisième solution, distincte des bus systèmes et des bus d'entrée-sorties. ===Les bus avec répartiteur=== Il existe une méthode intermédiaire, qui garde deux bus séparés pour la mémoire et les entrées-sorties, mais élimine les problèmes de brochage sur le processeur. L'idée est d'intercaler, entre le processeur et les deux bus, un '''circuit répartiteur'''. Il récupère tous les accès et distribue ceux-ci soit sur le bus mémoire, soit sur le bus des périphériques. Le ou les répartiteurs s'appellent aussi le '''''chipset''''' de la carte mère. C'était ce qui était fait à l'époque des premiers Pentium. À l'époque, la puce de gestion du bus PCI faisait office de répartiteur. Elle mémorisait des plages mémoires entières, certaines étant attribuées à la RAM, les autres aux périphériques mappés en mémoire. Elles utilisaient ces plages pour faire la répartition. [[File:IO mappées en mémoire avec séparation des bus.png|centre|vignette|upright=2|IO mappées en mémoire avec séparation des bus]] Niveau adresses des registres d'interfacage, il est possible d'avoir soit des adresses unifiées avec les adresses mémoire, soit des adresses séparées. L'usage d'un répartiteur ne pose pas de problèmes particuliers pour implémenter le DMA. La seule contrainte est que le contrôleur DMA soit intégré dans le répartiteur. Les échanges entre IO et mémoire passent par le répartiteur, qui fait le pont entre bus mémoire et bus des IO. [[File:Implémentation du DMA avec un répartiteur.png|centre|vignette|upright=2|Implémentation du DMA avec un répartiteur]] ==Les microcontrôleurs et ''system on chip''== Parfois, on décide de regrouper la mémoire, les bus, le CPU et les ports d'entrée-sortie dans un seul circuit intégré, un seul boitier. L'ensemble forme alors ce qu'on appelle un '''''System on Chip''''' (système sur une puce), abrévié en SoC. Le nom est assez explicite : un SoC comprend un système informatique complet sur une seule puce de silicium, microprocesseurs, mémoires et périphériques inclus. Ils incorporent aussi des ''timers'', des compteurs, et autres circuits très utiles. [[File:ARMSoCBlockDiagram.svg|centre|vignette|upright=2|SoC basé sur un processeur ARM, avec des entrées-sorties typiques de celles d'un µ-contrôleur. Le support du bus CAN, d'Ethernet, du bus SPI, d'un circuit de PWM (génération de signaux spécifiques), de convertisseurs analogique-digital et inverse, sont typiques des µ-contrôleurs.]] Le terme SoC regroupe des circuits imprimés assez variés, aux usages foncièrement différents et à la conception distincte. Les plus simples d’entre eux sont des microcontrôleurs, qui sont utilisés pour des applications à base performance. Les plus complexes sont utilisés pour des applications qui demandent plus de puissance, nous les appellerons SoC haute performance. La relation entre SoC et microcontrôleurs est assez compliquée à expliquer, la terminologie n'est pas clairement établie. Il existe quelques cours/livres qui séparent les deux, d'autres qui pensent que les deux sont très liés. Dans ce cours, nous allons partir du principe que tous les systèmes qui regroupent processeur, mémoire et quelques périphériques/entrées-sorties sont des SoC. Les microcontrôleurs sont donc un cas particulier de SoC, en suivant cette définition. ===Les microcontrôleurs=== Les '''microcontrôleurs''' sont des composants utilisés dans l'embarqué ou d'informatique industrielle. Leur nom trahit leur rôle. Ils sont utilisés pour contrôler de l'électroménager, des chaines de fabrication dans une usine, des applications robotiques, les alarmes domestiques, les voitures. De manière générale, on les trouve dans tous les systèmes dits embarqués et/ou temps réel. Ils ont besoin de s'interconnecter à un grand nombre de composants et intègrent pour cela un grand nombre d'entrée-sorties. Les microcontrôleurs sont généralement peu puissants, et doivent consommer peu d'énergie/électricité. Fait amusant, on en trouve dans certains périphériques informatiques. Par exemple, les anciens disques durs intégraient un microcontrôleur qui contrôlait plusieurs moteurs/ Les moteurs pour faire tourner les plateaux magnétiques et les moteurs pour déplacer les têtes de lecture/écriture étaient commandés par ce microcontrôleur. Comme autre exemple, les claviers d'ordinateurs intègrent un microcontrôleur connecté aux touches, qui détecte quand les touches sont appuyées et qui communique avec l'ordinateur. Nous détaillerons ces deux exemples dans les chapitres dédiés aux périphériques et aux disques durs, tout deviendra plus clair à ce moment là. La majorité des périphériques ou des composants internes à un ordinateur contiennent des microcontrôleurs. Un microcontrôleur tend à intégrer des entrées-sorties assez spécifiques, qu'on ne retrouve pas dans les SoC destinés au grand public. Un microcontrôleur est typiquement relié à un paquet de senseurs et son rôle est de commander des moteurs ou d'autres composants. Et les entrées-sorties intégrées sont adaptées à cette tâche. Par exemple, ils tendent à intégrer de nombreux convertisseurs numériques-analogiques pour gérer des senseurs. Ils intègrent aussi des circuits de génération de signaux PWM spécialisés pour commander des moteurs, le processeur peut gérer des calculs trigonométriques (utiles pour commander la rotation d'un moteur), etc. [[File:C8051F340-9 A B C D.png|centre|vignette|upright=2|Exemple d'entrées-sorties intégrées à un microcontroleur.]] En plus des entrées-sorties intégrées, les microcontrôleurs ont souvent des '''ports d'entrées-sorties''' banalisés, à savoir qu'on peut brancher n'importe quoi dessus. Il était possible de brancher un capteur de température, un moteur à commander, un port série, un port parallèle, un écran, un clavier, une souris, peu importe. Les ports font souvent un octet et ils sont généralement reliées directement ou indirectement au processeur. Le logiciel qui s'exécute sur le processeur décide quoi envoyer sur des broches et comment interprète ce qui est reçu dessus. Les ports banalisés de ce type sont parfois appelés des '''GPIO''', abréviation de ''General Purpose Input/Output'', mais nous utiliserons le terme de ''port I/O''. Un port regroupe plusieurs broches qui peuvent être utilisés à volonté. C'est le logiciel qui s'exécute sur le processeur qui décide de la fonction de broches. Un port IO peut fonctionner soit en tant qu'entrée, soit en tant que sortie. Il est possible de changer de sens en cours de fonctionnement, pour passer d'une entrée à une sortie ou inversement. [[File:Afficheurs7seg.png|centre|vignette|upright=2|Exemple d'utilisation d'un port I/O. le port est connecté à un afficheur LCD dit 7-segments. Les 8 entrées de cet afficheur sont connectées à un port I/O d'un octet.]] ===Les SoC haute performance=== Les SoC les plus performants sont actuellement utilisés dans les téléphones mobiles, tablettes, ''Netbook'', ''smartphones'', ou tout appareil informatique grand public qui ne doit pas prendre beaucoup de place. La petite taille de ces appareils fait qu'ils gagnent à regrouper toute leur électronique dans un circuit imprimé unique. Mais les contraintes font qu'ils doivent être assez puissants. Ils incorporent des processeurs assez puissants, surtout ceux des ''smartphones''. C'est absolument nécessaire pour faire tourner le système d'exploitation du téléphone et les applications installées dessus. Niveau entrées-sorties, ils incorporent souvent des interfaces WIFI et cellulaires (4G/5G), des ports USB, des ports audio, et même des cartes graphiques pour les plus puissants d'entre eux. Les SoC incorporent des cartes graphiques pour gérer tout ce qui a trait à l'écran LCD/OLED, mais aussi pour gérer la caméra, voire le visionnage de vidéo (avec des décodeurs/encodeurs matériel). Par exemple, les SoC Tegra de NVIDIA incorporent une carte graphique, avec des interfaces HDMI et VGA, avec des décodeurs vidéo matériel H.264 & VC-1 gérant le 720p. Pour résumer, les périphériques sont adaptés à leur utilisation et sont donc foncièrement différents de ceux des microcontrôleurs. [[File:SOMblk.png|centre|vignette|upright=3|Exemple de SoC.]] Un point important est que les processeurs d'un SoC haute performance sont... performants. Ils sont le plus souvent des processeurs de marque ARM, qui sont différents de ceux utilisés dans les PC fixe/portables grand public qui sont eux de type x86. Nous verrons dans quelques chapitres en quoi consistent ces différences, quand nous parlerons des jeux d'instruction du processeur. Autrefois réservé au monde des PCs, les processeurs multicœurs deviennent de plus en plus fréquents pour les SoC de haute performance. Il n'est pas rare qu'un SoC incorpore plusieurs cœurs. Il arrive même qu'ils soient foncièrement différents, avec plusieurs cœurs d'architecture différente. La frontière entre SoC haute performance et microcontrôleur est de plus en plus floue. De nombreux appareils du quotidien intègrent des SoC haute performance, d'autres des microcontrôleurs. Par exemple, les lecteurs CD/DVD/BR et certains trackers GPS intègrent un SoC ou des processeurs dont la performance est assez pêchue. À l'opposé, les systèmes domotiques intègrent souvent des microcontrôleurs simples. Malgré tout, les deux cas d'utilisation font que le SoC/microcontrôleur est connecté à un grand nombre d'entrées-sorties très divers, comme des capteurs, des écrans, des LEDs, etc. [[File:GPS tracker Hardware Architecture.png|centre|vignette|upright=2|Hardware d'un tracker GPS.]] ==Étude de l'architecture de quelques consoles de jeu== Après avoir vu la théorie, nous allons voir des exemples réels d'ordinateurs. Dans ce qui suit, nous allons voir des ordinateurs qui collent assez bien à l''''architecture de base''' vue plus haut, avec un CPU, une RAM et une ROM, quelques entrées-sorties. Tous les ordinateurs modernes, mais aussi dans les smartphones, les consoles de jeu et autres, utilisent une architecture grandement modifiée et améliorée, avec un grand nombre de périphériques, des disques durs/SSD, un grand nombre de mémoires différentes, etc. Il pourrait sembler pertinent d’étudier des microcontrôleurs ou des ''System On Chip'', en premier lieu. Mais nous éviterons soigneusement de tels systèmes pour le moment. La raison est qu'ils ont un grand nombre d'entrées-sorties, qui sont peu familières. Attendez-vous à avoir près d'une vingtaine ou centaine d'entrée-sorties différentes pour de tels systèmes. Le tout est très complexe, bien trop pour un premier exemple. À la place, nous allons voir précisément des exemples plus simples : les premiers PC, et des consoles de jeu 8 et 16 bits. Bien que ce soit des systèmes très simples, ils sont cependant plus complexes que l'architecture de base. Et leur avantages/désavantages sont un peu inverse l'un de l'autre. Si on devait résumer les différences, on aurait ceci : * Les PC ont plus d'entrées-sorties que les consoles, bien que nettement moins que pour les microcontrôleurs/SoC. * Les PC utilisent des disques durs, les consoles font avec soit des cartouches de jeu, soit des CD/DVD. * Les PC utilisent des cartes électroniques séparées pour le son et l'écran, les consoles utilisent des circuits soudés sur la carte mère, qui sont souvent des co-processeurs. * Les PC ont une mémoire ROM soudées sur la carte mère, les consoles 8 bits font sans. Les PC et micro-ordinateurs ont plus d'entrées-sorties que les consoles. Même si on mets de côté les périphériques, ils ont aussi beaucoup d'entrées-sorties soudées sur la carte mère. En comparaison, les consoles de jeu 8/16 bits se débrouillent avec : une cartouche de jeu et une manette en entrée, une sortie vidéo et une sortie son. Un autre point important est l'absence de disque dur ou de lecteur CD. La présence d'un disque dur ou d'un lecteur CD/DVD complexifie tout de suite l'architecture des PC. Il faut leur réserver un bus dédié ou les connecter à un bus système, cela demande d'ajouter des circuits sur la carte mère, etc. Et surtout, il faut expliquer comment l'ordinateur exécute des programmes, ce qui demande de parler de l'interaction avec le disque dur et la ROM du BIOS. Rien de tout cela sur les consoles de jeu 8 et 16 bits. Elles utilisent à la place des cartouches de jeu, qui intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Pas besoin de parler des mémoires de stockage, on est beaucoup plus proche de l'architecture de base avec une ROM unique. Par contre, n'allez pas croire que tout est rose avec les consoles 8/16 bits. Il y a quelques différences qui font qu'elles sont plus complexes qu'un PC sur certains points. Les PC utilisent des cartes électroniques à brancher sur la carte mère pour alimenter l'écran et les hauts-parleurs/casques, alors que les consoles de jeu utilisent des souvent co-processeurs dédiés pour le son et les graphismes. La différence parait mineure, mais elle avantage les consoles. Nous avons déjà expliqué ce que sont les co-processeurs plus haut, aussi les co-processeurs des consoles nous paraitrons familiers. On n'a pas à s’embêter à expliquer ce que sont les cartes d'extension, les bus associés et tout ce qui va avec, cela peut être retardé pour la section sur l'architecture des PC. La gestion de la cartouche de jeu est aussi un peu subtile à comprendre, bien que ce soit bien plus simple à comprendre qu'un système avec un disque dur. Les cartouches de jeu intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Et le processeur doit exécuter le code depuis cette mémoire ROM. La conséquence est que les consoles 8/16 bits utilisent une architecture Harvard, avec un bus relié à la cartouche pour lire les instructions. Mais si ce n'était que ça... Les cartouches mémorisent aussi les données pour les graphismes, ce qui fait que le co-processeur vidéo doit lui aussi lire la cartouche pour récupérer ces données... ===L'architecture de la TurboGraphX-16=== La console PC Engine, aussi appelée TurboGraphX, est une ancienne console 8 bits. Elle contient un processeur 65C02, 8 kibioctets de RAM, un port manettes, une carte son et une carte vidéo. La '''carte son''' est le composant qui s'occupe de commander les haut-parleurs et de gérer tout ce qui a rapport au son. La '''carte graphique''' est le composant qui est en charge de calculer les graphismes, tout ce qui s'affiche à l'écran. Sur cette console, les cartes son et graphique ne sont PAS des co-processeurs, ce sont des circuits électroniques dits fixes. C'est totalement différent de ce qu'on a sur les consoles modernes, aussi le préciser est important. Bien que la carte graphique ne soit pas un processeur, elle a 64 kibioctets de RAM rien que pour elle. La RAM en question est séparée de la RAM normale, c'est un circuit intégré séparé. Et c'est un cas très fréquent, qui reviendra par la suite. La majeure partie des cartes graphiques dispose de leur propre '''mémoire vidéo''', totalement réservée à la carte graphique. La RAM vidéo est connectée à la carte graphique via un bus séparé. Le processeur est souvent connecté à ce bus, afin de pouvoir écrire des données dedans, mais ce n'est pas le cas ici. [[File:Architecture de la PC Engine, aussi appelée TurboGrafx-16.png|centre|vignette|upright=2.5|Architecture de la PC Engine, aussi appelée TurboGrafx-16]] L'architecture de la console était particulièrement simple. Le processeur était le centre de l'architecture, tout était connecté dessus. Il y a un bus pour la cartouche de jeu, un autre pour la RAM, un autre pour les manettes, un autre pour carte son, et un dernier pour la carte graphique. Le fait d'avoir un bus par composant est assez rare et ce n'est le cas ici que parce des conditions particulières sont remplies. Déjà, il y a peu d'entrée-sorties. Ensuite, les bus font tous 8 bits, vu que le processeur est un CPU 8 bits. Avec 5 connexions de 8 bits, le tout utilise 40 broches, ce qui est beaucoup, mais totalement gérable. Par contre, les choses changerons pour les autres consoles. Au final, l'organisation des bus peut s'expliquer avec ce qu'on a vu dans la section sur les bus de communication. La console utilise une architecture Harvard, car la ROM et la RAM utilisent des bus différents. De plus, il y a des bus dédiés aux entrées-sorties, séparés des bus mémoire. Enfin, la carte graphique a droit à ses propres bus pour lire dans la cartouche et dans sa RAM vidéo dédiée. ===L'architecture de la console de jeu NES=== Maintenant, nous allons voir la console de Jeu Famicom, aussi appelée la NES en occident. Elle a une architecture centrée sur un processeur Ricoh 2A03, similaire au processeur 6502, un ancien processeur autrefois très utilisé et très populaire. Le processeur est associé à 2 KB de mémoire RAM. Sur certaines cartouches, on trouve une RAM utilisée pour les sauvegardes, qui est adressée par le processeur directement. Première variation par rapport à l'architecture de la console précédente : l'ajout de la RAM pour les sauvegardes dans les cartouches. Niveau carte graphique, une différence importante est que la carte graphique est connectée à la cartouche de jeu via un autre bus, afin de pouvoir lire les sprites et textures du jeu dans la cartouche. [[File:Architecture de la NES.png|centre|vignette|upright=2.5|Architecture de la NES]] La différence avec l'architecture précédente est que des bus ont été fusionnés. Comme dit plus haut, le système utilise une architecture Harvard, vu que la ROM est dans la cartouche, alors que la RAM est soudée à la carte mère. Par contre, la Famicon utilise un bus dédié aux entrées-sorties. Il est utilisé pour la carte son et la carte graphique, seules les manettes sont sur un bus à part. Ce qui fait qu'on devrait plutôt parler de bus de sorties, mais passons... L'essentiel est qu'on n'est plus tout à fait dans le cas de la console précédente, avec un bus par composant. ===L'architecture de la SNES=== L'architecture de la SNES est illustrée ci-dessous. Les changements pour le processeur et la RAM sont mineurs.La RAM a augmenté en taille et passe à 128 KB. Pareil pour la RAM de la carte vidéo, qui passe à 64 KB. Par contre, on remarque un changement complet au niveau des bus, de la carte graphique et de la carte son. [[File:Architecture de la SNES.png|centre|vignette|upright=2|Architecture de la SNES]] La console utilise un '''bus système unique''', sur lequel tout est connecté : ROM, RAM, entrées-sorties, etc. La seule exception est pour les manettes, qui sont encore connectées directement sur le processeur, via un bus séparé. La transition vers un bus système s'explique par le fait que la console est maintenant de 16 bits, ce qui fait que les bus doivent être plus larges. Le processeur adresse des mémoires RAM et ROM plus grandes, ce qui double la taille de leurs bus. De plus, les entrées-sorties aussi ont besoin d'un bus plus large. Le processeur n'ayant pas un nombre illimité de broches, la seule solution est de fusionner les bus en un seul bus système. Un autre changement est que la carte graphique est maintenant composée de deux circuits séparés. Encore une fois, il ne s'agit pas de coprocesseurs, mais de circuits non-programmables. Par contre, la carte son est remplacée par deux coprocesseurs audio ! De plus, les deux processeurs sont connectés à une mémoire RAM dédiée de 64 KB, comme pour la carte graphique. L'un est un processeur 8 bits (le DSP), l'autre est un processeur 16 bits. Un point très intéressant : certains jeux intégraient des coprocesseurs dans leurs cartouches de jeu ! Par exemple, les cartouches de Starfox et de Super Mario 2 contenait un coprocesseur Super FX, qui gérait des calculs de rendu 2D/3D. Le Cx4 faisait plus ou moins la même chose, il était spécialisé dans les calculs trigonométriques, et diverses opérations de rendu 2D/3D. En tout, il y a environ 16 coprocesseurs d'utiliser et on en trouve facilement la liste sur le net. La console était conçue pour, des pins sur les ports cartouches étaient prévues pour des fonctionnalités de cartouche annexes, dont ces coprocesseurs. Ces pins connectaient le coprocesseur au bus des entrées-sorties. Les coprocesseurs des cartouches de NES avaient souvent de la mémoire rien que pour eux, qui était intégrée dans la cartouche. ===L'architecture de la Megadrive et de la néo-géo=== Passons maintenant à la console de jeu Megadrive, une console 16 bits. Elle a une architecture similaire à celle de la néo-géo, une autre console bien plus puissante, sorti à peu près en même temps. Elles intègrent deux processeurs : un Motorola 68000 qui sert de processeur principal, un Z80 qui sert de processeur dédié à l'audio. Le Z80 et le Motorola 68000 étaient deux processeurs très populaires à l'époque. Le Z80 est une sorte de version améliorée de l'Intel 8088 utilisé sur les anciens PC et de nombreuses consoles utilisaient des Z80 comme processeur principal. Il était familier pour les programmeurs de l'époque, pour son cout réduit, sa bonne disponibilité, et bien d'autres avantages liés à sa production de masse. Le Z80 est utilisé comme co-processeur audio. Il commande un synthétiseur sonore, et est relié à sa propre mémoire, distincte de la mémoire principale. Le MC68000 est le processeur principal et a une relation maitre-esclave avec le Z80 : le MC68000 envoie des commandes au Z80, mais la communication ne va pas dans l'autre sens. Le Motorola 68000 était un processeur 16 bits, alors que le Z80 est un processeur 8 bits. Et cette différence fait que l'on ne peut pas connecter directement les deux sur le même bus, ou du moins pas facilement. La solution retenue est d'utiliser deux bus séparés : un bus de 16 bits connecté au 68000, un bus de 8 bits connecté au Z80. Le premier bus est un bus système sur lequel est connecté le 68000, 64 kibioctets de RAM, la cartouche de jeu, et la carte graphique. Le second bus est un bus de 8 bits, plus court, relié au Z80, à un synthétiseur sonore, et 8 kibioctets de RAM Les deux bus sont connectés à un '''''chipset''''', un circuit répartiteur, qui fait le pont entre les deux bus. Les manettes sont connectées sur le ''chipset''. Il contient un registre de 8 bits, dans lequel le MC68000 peut écrire dedans à sa guise, le registre étant adressable par le processeur. Lorsque le MC68000 écrit une valeur dedans, cela déclenche l’exécution automatique d'un programme pré-déterminé sur le Z80. : Pour ceux qui savent ce qu'est une interruption, les valeurs écrites dans ce registre sont des numéros d'interruption, qui indiquent quelle routine d'interruption exécuter. [[File:Architecture de la Megadrive et de la Néogeo.png|centre|vignette|upright=2.5|Architecture de la Megadrive et de la Néogeo]] Cet exemple nous montre que les bus systèmes sont certes très simples, mais aussi inflexibles. Ils fonctionnent bien quand les composants branchés dessus sont tous des composants 8 bits, ou sont tous de 16 bits, ou tous 32 bits. Mais dès qu'on mélange composants 8, 16, 32 ou 64 bits, les choses deviennent plus compliquées. Il est alors préférable d'utiliser des bus séparés, avec des répartiteurs pour faire le pont entre les différents bus. Et nous verrons que le problème s'est posé lui aussi sur les PC. ===L'architecture des anciennes consoles Playstation : beaucoup de co-processeurs=== Les consoles que nous venons d'aborder étaient des consoles 8 ou 16 bits. A partir des consoles 32 bits, leur architecture s'est rapprochée de celle des PC, avec un usage plus complexes de répartiteurs. La XBOX était très semblable à un PC : le processeur était un Pentium 3 modifié, la carte graphique était une Geforce 3 modifiée, les 64 mébioctets de RAM était la même mémoire DDR que celle des PC, le répartiteur secondaire était un ''chipset'' nForce de NVIDIA, etc. Mais les Playstation 1, 2 et 3 se distinguent de leur contemporains. Elles disposent de très nombreux co-processeurs, qui sont en plus très variés. La Playstation 1 a été une des premières console à utiliser les CD-ROM comme support de stockage, en remplacement des cartouches. La conséquence est que la console contient une mémoire ROM, soudée à la carte mère, de 512 kibioctets. Elle contient aussi 2 mébioctets de RAM, une carte graphique avec 1 mébioctet de mémoire vidéo, un processeur, et de quoi gérer les périphériques. Il y a un co-processeur audio spécialisé, avec 512 kibioctets de RAM, ce qui nous est familier. Par contre, les autres co-processeurs ne le sont pas. Déjà, le lecteur de CD-ROM est associé à des circuits sur la carte mère, il y a tout un sous-système dédié au lecteur de CD. Il y a un contrôleur qui sert d'interface avec le lecteur proprement dit, mais aussi deux co-processeurs audio et 32 kibioctets de RAM. Les co-processeurs audio servent à lire des CD sans trop utiliser le second co-processeur audio, ils lui servent de complément. Ensuite, le processeur incorpore plusieurs cœurs, avec un cœur principal et plusieurs co-processeurs. Le premier est un co-processeur système, qui est utilisé pour gérer la mémoire cache intégrée au processeur, pour des fonctionnalités appelées interruptions et exceptions, ainsi que pour configurer le processeur. Le second est un co-processeur arithmétique spécialisé dans les calculs en virgule flottante, très importants pour le rendu 3D. Enfin, il y a un décodeur vidéo, qui n'est pas un co-processeur, mais un circuit non-programmable, spécialisé dans le décodage vidéo. De nos jours, ce circuit aurait été intégré dans la carte graphique, mais il était intégré dans le processeur sur la Playstation 2. Pour le reste, le processeur est la figure centrale de la console. Il est connecté à 4 bus : un pour la RAM, un pour la carte graphique, un pour les manettes, un autre pour le reste. Le dernier bus est connecté au système audio et au système pour le lecteur CD. Ce serait un bus d'entrée-sortie, s'il n'était pas connecté à la mémoire ROM. Vous avez bien lu : la mémoire ROM est reliée au bus d'entrée-sortie. [[File:Architecture de la Playstation.png|centre|vignette|upright=2.5|Architecture de la Playstation]] La Playstation 2 est composé d'un processeur, couplé à 32 Mébioctets de RAM, et d'un paquet de co-processeurs. Plus de co-processeurs que la PS1. Le processeur principal n'est pas la même que celui de la PS1, mais il a une architecture similaire. Il intègre un décodeur vidéo sur le même circuit intégré, ainsi que deux co-processeur. Les co-processeurs ne sont cependant pas les mêmes. Le co-processeur système disparait et est remplacé par un second co-processeur arithmétique. Les deux co-processeurs arithmétiques sont spécialisés dans les nombres flottants, avec quelques différences entre les deux. Par exemple, le second co-processeur gérait des calculs trigonométriques, des exponentielles, des logarithmes, et d'autres fonctions complexes du genre ; mais pas le premier co-processeur. Ils sont reliés à 4 kibioctets de RAM pour le premier, 16 kibioctets de RAM pour le second ; qui sont intégrées dans le processeur et non-représentés dans le diagramme ci-dessous. La PS2 intègre aussi un co-processeur d'entrées-sorties. Pour information, il s'agit du processeur principal de la Playstation 1, qui est ici utilisé différemment, suivant que l'on place un jeu PS1 ou PS1 dans la console. Si on met un jeu PS1, il est utilisé pour émuler la Playstation 1, afin de faire tourner le jeu PS1 sur la PS2. Si on met un jeu PS2, il est utilisé comme co-processeur d'entrée-sortie et fait l'interface entre CPU et entrées-sorties. Il est relié à 2 mébioctets de RAM, soit exactement la même quantité de mémoire que la Playstation 1. Tous les périphériques sont connectés au co-processeur d'entrées-sortie. Pour cela, le co-processeur d'entrées-sortie est relié à deux bus dédiés aux périphériques. Le premier bus est relié aux manettes, aux ports USB et aux ports pour cartes mémoires. Le second bus est relié à la carte son, la carte réseau, le lecteur DVD, et un port PCMIA. Notons que la carte son intègre un co-processeur audio, qui n'est pas représenté dans le diagramme ci-dessous. [[File:Playstation 2 architecture.png|centre|vignette|upright=2.5|Playstation 2 architecture]] ==L'architecture des PC et son évolution== Après avoir vu les consoles, nous allons maintenant voir les anciens PC, des années 80 ou 90. Le tout premier PC était techniquement l''''IBM PC'''. Par la suite, de nombreux ordinateurs ont tenté de reproduire l'IBM PC originel, avec parfois quelques modifications mineures. De tels ordinateurs ''IBM PC compatibles'', ont été très nombreux, pour des raisons diverses. Le fait d'utiliser des composants banalisés, facilement disponibles, ainsi qu'une bonne documentation de l'IBM PC originel, a grandement aidé. Les IBM PC compatibles ont progressivement évolué pour donner les PC actuels. L'IBM PC compatible a donné naissance à de nombreux standards divers. ===L'IBM PC originel et l'IBM PC XT=== [[File:IBM PC XT 02.jpg|vignette|IBM PC XT.]] Nous allons commencer par voir l'IBM PC originel, et son successeur : l'IBM Personal Computer XT. Nous les appelerons tous deux l'IBM PC. L'IBM PC utilisait un processeur Intel 8088, qui était un processeur 8 bits. Ils utilisaient un bus système unique, appelé le '''bus XT'''. Le bus système allait à 4.77 MHz, soit la même fréquence que le processeur. C'était un bus de 8 bits, ce qui collait parfaitement avec les processeurs 8 bits commercialisés par Intel à l'époque. L'IBM PC comprenait une mémoire ROM avec de quoi faire fonctionner le PC. La ROM en question contenait un programme minimal, appelé le '''BIOS''', sans lequel le PC ne fonctionnait pas du tout. Il servait de base pour le système d'exploitation et MS-DOS ne fonctionnait pas sans elle. De nos jours, son rôle est plus limité : sans elle, le PC ne démarre pas. Mais nous détaillerons cela dans le prochain chapitre. En plus de la ROM pour le BIOS, l'IBM PC avait quatre mémoires ROM dédiée au langage de programmation BASIC. Lorsque le PC démarrait, il ne bootait pas un système d'exploitation, mais lançait l'interpréteur pour le langage BASIC. De nos jours, ce serait l'équivalent d'un ordinateur qui boote directement sur du Python, à savoir la console Python que vous avez peut-être déjà utilisé si vous avez testé Python. Ceux qui ont déjà touché à un ordinateur de l'époque savent ce que ca veut dire, mais c'est malheureusement très difficile à expliquer sans ce genre d'expérience. Toujours est-il que c'était une sorte de norme à l'époque : les ordinateurs bootaient généralement sur un interpréteur BASIC. [[File:XT Bus pins.svg|vignette|Connecteur du bus XT.]] Les PC étaient conçus pour qu'on branche des '''cartes d'extension''', à savoir des cartes électroniques qu'on branchait sur la carte mère, à l'intérieur du PC. Les cartes d'extension de l'époque étaient surtout des cartes son ou des cartes graphiques, mais aussi des cartes pour brancher des péripéhriques. par exemple, on pouvait ajouter deux cartes graphiques dans l'IBM PC originel : l'''IBM Monochrome Display Adapter'' et/ou la ''IBM Color Graphics Adapter''. De nos jours, les cartes son sont intégrées à la carte mère, mais les cartes graphiques sont restées des cartes d'extension. Les cartes d'extension étaient branchées sur un '''connecteur XT''', qui était directement relié au bus XT. Le connecteur XT est illustré ci-contre, mais ne vous en souciez pas trop pour le moment. La carte mère de l'IBM PC avait 5 connecteurs de ce type, qu'on pouvait peupler avec autant de cartes d'extension. L'IBM Personal Computer XT est passé à 8 connecteurs XT, soit trois de plus. Pour ce qui est des périphériques, l'IBM PC avait plusieurs connecteurs : un port série, un port parallèle, un port pour le clavier, et un port pour un lecteur cassette. Le clavier et le lecteur cassette étaient connectés directement sur la carte mère, qui contenait quelques circuits pour gérer le clavier. Par contre, les deux premiers n'étaient pas connectés à la carte mère. Le port série était en réalité une carte d'extension, branchée sur un connecteur XT. Et il en est de même pour le port parallèle. Pour ce qui est des supports de stockage, l'IBM PC originel n'avait pas de disque dur et n'avait que des lecteurs de disquette. De plus, le lecteur de disquette n'était pas connecté directement sur la carte mère, mais était connecté à une carte d'extension, branchée sur un connecteur XT. La carte d'extension avait deux connecteurs, un par lecteur de disquette, ce qui fait que les deux lecteurs de disquettes pouvaient être branchés sur une seule carte d'extension. L'IBM Personal Computer XT a ajouté un disque dur, sauf sur quelques sous-modèles spécifiques. Le PC avait aussi un petit haut-parleur capable de faire des bips. Pour résumer, l'IBM PC originel se reposait beaucoup sur les cartes d'extension, sa carte mère contenait peu de choses. Enfin, peu de choses... Il y avait un processeur Intel 8088, éventuellement un coprocesseur flottant 8087, de la RAM, de la ROM, et des circuits intégrés assez divers. En voici la liste, certains vous seront familiers, d'autres vous seront inconnus à ce stade du cours : * les circuits de décodage d'adresse ; * un contrôleur DMA intel 8273 ; * un contrôleur d'interruption 8259 ; * un contrôleur de bus Intel 8288 pour gérer le bus XT ; * un générateur d'horloge Intel 8284 et un diviseur de fréquence ; * un ''timer'' Intel 8253, le même que celui étudié dans le chapitre sur les ''timers'' ; * un contrôleur parallèle 8255. Les multiplexeurs, registres et portes logiques, sont des circuits de décodage d'adresse, qui permettent de combiner plusieurs RAM en une seule, idem avec la mémoire ROM. Si vous verrez qu'il y a 5 mémoires ROM : une ROM pour le BIOS, et quatre autres ROM pour le BASIC. Les 4 ROM du BASIC sont combinées en une seule mémoire ROM. Pour les RAM, il y en a 8 à 32, qui sont combinées en une seule RAM de 16 à 64 kibioctets. [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] ===L'architecture d'un IBM PC compatible 16 bits=== Les PC suivants sont passés à des processeurs 16 bits, mais c'était toujours des processeurs x86 d'Intel, à savoir des Intel 286 et 386. La RAM a grossi, quelques entrées-sorties ont été ajoutées, mais l'architecture globale est plus moins resté le même. C'est surtout au niveau du bus et des périphériques que les changements majeurs ont eu lieu. [[File:ISA Bus pins.svg|vignette|Connecteur ISA.]] Les PC 16 bits utilisaient un bus système unique, sur lequel tout était connecté : le processeur, la RAM, la ROM, les cartes d'extension et tout le reste. Le bus en question s'appelait le '''bus AT''', mais il a rapidement été renommé en '''bus ISA''' (''Industry Standard Architecture''). Le bus ISA était prévu pour avoir une compatibilité avec le bus 8 bits de l'IBM PC originel. D'ailleurs, cela se ressent jusque dans le connecteur utilisé : le connecteur ISA est un connecteur XT qu'on a fusionné avec un second connecteur pour l'étendre de 8 à 16 bits. Les PC 16 bits avaient toujours un port série, un port parallèle, un clavier, un lecteur de disquette et des cartes d'extension. Des disques durs pouvaient être ajoutés, aussi. Mais pour ces périphériques, un changement majeur a eu lieu comparé à l'IBM PC originel. L'IBM PC originel utilisait des cartes d'extension pour tout, sauf le clavier. Mais maintenant, les périphériques ne sont plus connectés à une carte d'extension. À la place, les circuits de la carte d'extension sont déplacés sur la carte mère. Mais n'allez pas croire qu'ils étaient connectés directement au bus ISA, il y avait des intermédiaires. Le clavier était relié à un '''contrôleur de clavier''', qui faisait l'interface entre le connecteur du clavier et le bus ISA. Le contrôleur de clavier était appelé le ''Keyboard Controler'', abrévié en KB. Il recevait ce qui est tapé au clavier et traduisait cela en quelque chose de compréhensible par l'ordinateur. Les autres périphériques étaient connectés à un circuit intégré dédié : l''''Intel 82091AA'''. Il était connecté au lecteur de disquette, au port série et au port parallèle. Il servait d'intermédiaire entre ces périphériques et le bus ISA. Vous pouvez le voir comme une sorte de répartiteur, mais qui ne serait pas connecté sur le processeur et la RAM Enfin, il ne faut pas oublier les autres composants présents sur l'IBM PC originel. Le BIOS est toujours là, de même que les ''timers'' Intel 8253 PIT, le contrôleur d'interruption Intel 8259 et le contrôleur DMA Intel 8237. Les PC 16 bits ont aussi intégré une ''Real Time Clock'' (RTC). Pour rappel, c'est un composant qui permet au PC de mémoriser la date et l'heure courante, à la seconde près. Le tout est résumé dans le schéma ci-dessous. [[File:Architecture de l'IBM PC compatible.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible]] Un point important est que le bus ISA allait à la même fréquence que le processeur, vu que c'était un bus système. Les processeurs de l'époque étaient des CPU 286 d'Intel, ou le 386 d'Intel. Les Intel 286 allaient de 4 MHz minimum, à 25 MHz maximum. Le 386, quant à lui, allait de 12 à 40 MHz. Le bus ISA devait aller à cette fréquence, il était synchrone avec le processeur. Par la suite, les processeurs ont gagné en performance, ce qui fait que le bus ISA est devenu trop lent pour le processeur. Une idée a alors été de conserver le bus ISA, pour des raisons de compatibilité, mais de le reléguer comme bus secondaire. L'ordinateur contient alors deux bus : un bus système, et un bus ISA secondaire. Le lien entre les deux est réalisé par un '''pont ISA''', ''ISA Bridge'' en anglais. Le bus ISA fonctionnait alors sa fréquence usuelle, alors que le bus système était beaucoup plus rapide. Le bus système fonctionnait à une fréquence bien plus élevée, ce qui fait que le processeur pouvait communiquer à pleine vitesse, notamment avec la RAM. Le processeur n'était alors plus forcé à aller à la même fréquence que le bus ISA [[File:Architecture de l'IBM PC compatible avec bridge ISA.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible avec bridge ISA]] Les PC de l'époque intégraient donc plusieurs bus séparés. Vous avez bien lu : plusieurs bus ! Ici, il s'agit de ce que j'appelle des '''bus en cascade''', à savoir qu'un bus est connecté à un autre bus par un intermédiaire. Au passage, si j'aborde ces exemples, car c'est pareil sur les ordinateurs modernes. Le pont ISA a été remplacé par des circuits différents, mais qui ont un rôle assez similaire. Le ''chipset'' de votre carte mère n'est qu'un lointain descendant du pont ISA, qui s'interface avec des bus différents. ===L'arrivée des standards AT et IDE pour les disques durs=== Initialement, les disques durs étaient placés dans l'ordinateur et étaient connectés sur le bus ISA, via une carte d'extension ISA. En clair, il fallait connecter le disque dur sur une carte d'extension, et non sur la carte mère. Les cartes d'extension en question permettaient de connecter un ou plusieurs disques durs, parfois des lecteurs de disquette supplémentaires. Les cartes ISA de ce type faisaient juste l'interface entre le bus ISA et les disques durs, rien de plus. L'interface en question a été standardisée, ce qui a donné le standard ''AT Bus Attachment'', qui a été abrévié en ATA. Et ce n'était pas que pour les disques durs, de nombreux composants étaient dans ce cas. Une carte d'extension servait d'intermédiaire entre eux et la carte mère. Les cartes d'extension en question étaient appelées des ''Host bus adapter''. [[File:Acculogic sIDE-4 Controller ISA.jpg|centre|vignette|upright=2|Carte ISA d'interface disque dur, de marque Acculogic.]] Mais les choses ont rapidement évoluées, que ce soit du côté des cartes mères que du côté des disques durs. Le '''standard IDE''' a permis de brancher un disque dur directement sur la carte mère, sans passer par une carte d'interface ISA. Pour cela, la carte mère réservait un connecteur ISA pour le disque dur, renommé '''connecteur ATA'''. Pour que cela soit possible, il a fallu rajouter des circuits sur la carte mère. Tout ce qui était sur les cartes d'interface ISA s'est retrouvé sur la carte mère. [[File:Ajout des ports IDE sur la carte mère.png|centre|vignette|upright=2|Ajout des ports IDE sur la carte mère]] En réalité, les connecteurs ATA étaient des connecteurs ISA simplifiés. Un connecteur ISA avait en tout 98 broches, alors qu'un connecteur ATA n'en contient que 40. Les broches qui étaient inutiles pour les disques durs ont simplement été enlevées. Et qui dit connecteur spécialisé, dit câble spécialisé. Les disques durs étaient branchés sur le connecteur AT grâce à un câble ATA, sur lequel on pouvait connecter deux disques durs. [[File:ATA Plug.svg|centre|vignette|upright=2|Connecteur ATA.]] [[File:ATA cables.jpg|centre|vignette|upright=2|Cable ATA.]] Il était donc possible de connecter deux disques durs sur un seul connecteur ATA. Et cette possibilité est devenue d'autant plus utile par la suite. A partir de la version 2, ATA supportait aussi les lecteurs de disquettes, les lecteurs de CD/DVD, et bien d'autres supports de stockage. Il était alors possible de connecter un lecteur CD et un disque dur sur un seul connecteur. Les cartes mères avaient généralement deux connecteurs ATA, et n'avaient pas besoin de plus. C'était suffisant pour connecter un disque dur, un lecteur de disquette et un lecteur CD, configuration courante entre les années 90 et 2000. Un câble est donc connecté à deux supports de stockage. Pour distinguer les deux, le standard ATA ajoute une possibilité de configuration. Sur un câble, il doit y avoir un support de stockage "maitre" et un support "esclave". C'était la terminologie de l'époque, que je reproduis ici, même si elle est fortement trompeuse. N'allez pas croire que cela implique que l'un ait des avantages sur l'autre. Le support 'maitre" n'a pas droit à plus de bande passante, il n'a pas la priorité sur l'autre, rien du tout. Il s'agit juste d'un nombre qui permet de savoir avec qui le processeur communique, qui vaut 0 pour le premier support, 1 pour l'autre. Une sorte d'adresse de 1 bit, si l'on veut. [[File:ATA-Konfiguration02.png|centre|vignette|upright=2|Configuration ATA.]] Pour configurer un support de stockage en mode "maitre" ou "esclave", le support de stockage avait quelques pins dédiés. Il suffisait de placer un détrompeur en plastique sur les pins adéquats. Les pins se trouvaient à l'arrière du disque dur ou du lecteur de CD/DVD/Disquette/autre. [[File:HDD Master and Slave Description.jpg|centre|vignette|upright=2|Configuration ''Master/Slave''.]] ===L'architecture d'un PC avec un processeur Intel 486=== Maintenant, passons aux ordinateurs 32 bits, avec l'exemple d'un PC avec un processeur 486 d'Intel. A cette époque, le bus ISA était devenu trop limité et était en place d'être remplacé par le bus PCI, qui avait la même fonction. De nombreuses cartes d'extension utilisaient déjà ce standard et étaient branchées sur des connecteurs PCI dédiés, différents des connecteurs ISA. Intuitivement, on se dit que le bus PCI remplaçait le bus ISA, mais les choses étaient plus compliquées. Les disques durs gardaient leur connecteur ATA, et ne passaient pas par le bus PCI. Ils avaient un bus IDE séparé, qui était un bus ISA modifié. Là encore, les processeurs étaient devenus beaucoup plus rapides que le bus PCI. Les deux allaient à des fréquences assez différentes, ce qui fait que le bus PCI était séparé du bus système. Il y avait alors deux implémentations possibles. * La première utilise un répartiteur unique, relié au processeur, à la RAM, au bus PCI, et au bus IDE. * La seconde utilise un bus système séparé du bus PCI, avec un '''pont PCI''' pour faire l'interface entre les deux. Le '''''System Controler''''' était un circuit intégré, placé sur la carte mère, qui peut servir soit de pont PCI, soit de répartiteur. Le répartiteur PCI sert d'intermédiaire avec le bus PCI, mais aussi avec le bus IDE, utilisé pour les disques durs, aussi appelé le bus ''Parallel ATA''. Il peut aussi être connecté au processeur, à la mémoire RAM, ainsi qu'à la mémoire cache, mais cela ne sert que quand il est utilisé comme répartiteur. [[File:Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur.png|centre|vignette|upright=2|Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur]] Pour des raisons de compatibilité, le bus ISA avait été conservé, aux côtés du bus PCI. Il y avait un pont ISA en plus du pont/répartiteur PCI. Une implémentation possible aurait été de connecter les deux ponts ISA et PCI à un bus système unique. Mais cette solution n'a pas été retenue. La raison est que le bus PCI et le bus ISA ont des performances très différentes. Le bus PCI est très rapide, le bus ISA beaucoup plus lent. La différence est d'un ordre de grandeur, environ. Dans ces conditions, il est possible de faire passer les communications ISA à travers le bus PCI. Pour cela, le pont ISA est directement connecté sur le pont PCI, comme illustré ci-dessous. Et il en est de même pour le bus dédié aux disques durs. En effet, les disques durs étaient autrefois reliés au bus ISA, mais cela a changé depuis. Ils disposent maintenant de leur propre bus dédié, le '''bus IDE''', qui est un bus ISA simplifié. Et ce bus ISA simplifié était connecté directement sur le pont PCI. [[File:Architecture de l'IBM PC compatible avec pont PCI.png|centre|vignette|upright=2|Architecture de l'IBM PC compatible avec pont PCI]] Dans ce qui va suivre, nous allons étudier un exemple qui utilise un bus système séparé, avec un pont PCI, sans répartiteur. Voilà pour les grandes lignes, mais le schéma ci-dessous montre que tout est plus complexe. Vous remarquerez des connexions optionnelles entre le pont PCI et la mémoire RAM et la mémoire cache. La raison est que le pont PCI peut aussi servir de répartiteur en remplacement du bus système. Concrètement, on peut alors retirer le bus système. La mémoire, le bus PCI, le bus ISA, le bus IDE, le processeur et la RAM sont alors connectés au répartiteur PCI, qui sert d'intermédiaire central entre tous ces composants. Mais ce n'est pas la solution qui a été retenue dans notre exemple. [[File:Intel486-Typ PCI System.png|centre|vignette|upright=2|PC IBM compatible avec un 486, un bus PCI et un bus ISA. Le ''host bus'' est le bus système.]] Le pont ISA sert ici d'intermédiaire entre le bus système et le bus ISA. De plus, il a été amélioré sur de nombreux points. Il inclut notamment des circuits qui étaient autrefois sur la carte mère, à savoir le contrôleur DMA 82C87 et le contrôleur d'interruption 82C59, ainsi que les ''timers'' Intel 82C54. Les composants restants sont eux reliés sur un quatrième bus : le bus X, l'ancêtre du bus ''Low Pin Count''. Le bus X était celui du BIOS, du contrôleur de clavier, de la ''Real Time Clock'', et du contrôleur de périphérique 82091AA d'Intel. [[File:ISA Bridge schematic.png|centre|vignette|upright=2|ISA Bridge.]] ===L'architecture des PC des années 90-2000=== Par la suite, les ponts PCI et ISA ont évolué avec l'évolution des bus de l'ordinateur. Le bus ISA a progressivement été remplacé par d'autres bus, comme le bus ''Low Pin Count'', le bus PCI a été remplacé par le PCI Express, d'autres bus ont été ajoutés, etc. Mais la séparation du ''chipset'' en deux a été conservée. [[File:Chipset schematic.svg|vignette|upright=1.0|Chipset séparé en northbridge et southbridge.]] Le pont PCI et le pont ISA ont été remplacés respectivement par le '''pont nord''' et le '''pont sud''', plus connus par leurs noms anglais de ''northbridge'' et de ''southbridge''. Le pont nord servait d'interface entre le processeur, la mémoire et la carte graphique et est connecté à chacun par un bus dédié. Il intégrait aussi le contrôleur mémoire. Le pont sud est le répartiteur pour les composants lents, à savoir l'USB, l'Ethernet, etc. Le bus qui relie le processeur au pont nord était appelé le '''''Front Side Bus''''', abrévié en FSB. [[File:IMac Chipset.png|centre|vignette|upright=2|Chipset séparé en northbridge et southbridge.]] Un point important est que le bus PCI est devenu un bus assez lent, ce qui fait qu'il a finit par être connecté au pont sud. Le pont PCI est donc devenu le pont sud, dans le courant des années 2000. Durant un moment, un équivalent du pont ISA a subsisté dans un circuit de '''''Super IO'''''. Concrètement, il s'occupait du lecteur de disquette, du port parallèle, du port série, et des ports PS/2 pour le clavier et la souris. Mais il ne gérait pas le bus ISA, mais son remplaçant, le bus ''Low Pin Count''. [[File:Motherboard diagram fr.svg|centre|vignette|upright=1.5|Carte mère avec circuit Super IO.]] ===L'architecture des PC depuis les années 2000=== Depuis la sortie du processeur AMD Athlon 64, le pont nord a été fusionné dans le processeur. La fusion ne s'est pas faite en une fois, des fonctionnalités ont progressivement été progressivement intégrées dans le processeur. Le pont sud est resté, mais il a alors été progressivement connecté directement au processeur. La raison derrière cette intégration est que les processeurs avaient de plus en plus de transistors à leur disposition. Ils en ont profité pour intégrer le pont nord. Et cela permettait de simplifier le câblage des cartes mères, sans pour autant rendre vraiment plus complexe la fabrication du processeur. Les industriels y trouvent leur compte. La première étape a été l'intégration du contrôleur mémoire a été intégré au processeur. Concrètement, le résultat était que la mémoire RAM n'était plus connectée au pont nord, mais était connectée directement au processeur ! Il y a donc eu un retour d'un bus mémoire, mais spécialisé pour la mémoire RAM. En théorie, une telle intégration permet diverses optimisations quant aux transferts avec la mémoire RAM. Les transferts ne passent pas par un répartiteur, ce qui réduit le temps d'accès à la mémoire RAM. Ajoutons de sombres histoires de prefetching, d'optimisation des commandes, et j'en passe. Toujours est-il que le pont nord ne servait alors d'intermédiaire que pour les ports PCI Express, et le pont sud. [[File:X58 Block Diagram.png|centre|vignette|upright=2|Chipset X58 d'Intel.]] Par la suite, la carte graphique fût aussi connectée directement sur le processeur. Le processeur incorpore pour cela des contrôleurs PCI-Express. Le pont nord a alors disparu complétement, son intégration dans le processeur était complète. Sur les cartes mères Intel récentes, le pont sdud subsiste, il est appelé le ''Platform Controler Hub'', ou PCH. L'organisation des bus sur la carte mère qui résulte de cette connexion du processeur à la carte graphique, est illustrée ci-dessous, avec l'exemple du PCH. [[File:Intel 5 Series architecture.png|centre|vignette|upright=2|Intel 5 Series architecture]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=L'interface électrique entre circuits intégrés et bus | prevText=L'interface électrique entre circuits intégrés et bus | next=La hiérarchie mémoire | nextText=La hiérarchie mémoire }} </noinclude> myc9gb0w5701y7qj4bbhhevdtkf827c 765748 765747 2026-05-01T22:13:58Z Mewtow 31375 /* Étude de l'architecture de quelques consoles de jeu */ 765748 wikitext text/x-wiki Dans les chapitres précédents, nous avons vu comment représenter de l'information, la traiter et la mémoriser avec des circuits. Mais un ordinateur n'est pas qu'un amoncellement de circuits et est organisé d'une manière bien précise. Il est structuré autour de trois circuits principaux : * un '''processeur''', qui manipule l'information et donne un résultat ; * une '''mémoire''' qui mémorise les données à manipuler ; * les '''entrées/sorties''', qui permettent à l'ordinateur de communiquer avec l'extérieur. [[File:Architecture Von Neumann.png|centre|vignette|upright=2|Architecture d'un système à mémoire.]] Pour faire simple, le processeur est un circuit qui s'occupe de faire des calculs. Rien d'étonnant à cela. Je rappelle que tout est codé par des nombres dans un ordinateur, ce qui fait que manipuler des nombres revient simplement à faire des calculs. Un ordinateur n'est donc qu'une grosse calculatrice améliorée, et le processeur est le composant qui fait les calculs. La mémoire s'occupe purement de la mémorisation des données, des nombres sur lesquelles faire des calculs. Pour être plus précis, il y a deux mémoires : une pour les données proprement dites, une autre pour le programme à exécuter. La première est la '''mémoire RAM''', la seconde est la '''mémoire ROM'''. Nous détaillerons ce que sont ces deux mémoires dans la suite du chapitre, mais sachez que nous avions déjà rencontré ces deux types de mémoires dans les chapitres sur les registres et les mémoires adressables. Les entrées-sorties permettent au processeur et à la mémoire de communiquer avec l'extérieur et d'échanger des informations avec des périphériques. Les '''périphériques''' regroupent, pour rappel, tout ce est branché sur un ordinateur, mais n'est pas à l'intérieur de celui-ci. Le processeur, les mémoires et les entrées-sorties communiquent ensemble via un '''réseau d'interconnexions'''. Le terme est assez barbare, mais rien de compliqué sur le principe. C'est juste un ensemble de fils électriques qui relie les différents éléments d'un ordinateur. Les interconnexions sont souvent appelées le bus de communication, mais le terme est un abus de langage, comme on le verra plus bas. Afin de simplifier les explications, on va supposer que le réseau d'interconnexion est le suivant. Tout est connecté au processeur. Il y a des interconnexions entre le processeur et la mémoire RAM, d'autres interconnexions entre processeur et mémoire ROM, et d'autres entre le processeur et les entrées-sorties. Nous verrons que d'autres réseaux d'interconnexions fusionnent certaines interconnexions, pour les partager entre la ROM et la RAM, par exemple. Mais pour le moment, gardez le schéma ci-dessous en tête. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ==Les mémoires RAM et ROM== La mémoire est le composant qui mémorise des informations, des données. Dans la majorité des cas, la mémoire est composée de plusieurs '''cases mémoire''', chacune mémorisant plusieurs bits, le nombre de bits étant identique pour toutes les cases mémoire. Dans le cas le plus simple, une case mémoire mémorise un '''octet''', un groupe de 8 bits. Mais les mémoires modernes mémorisent plusieurs octets par case mémoire : elles ont des cases mémoires de 16, 32 ou 64 bits, soit respectivement 2/4/8 octets. De rares mémoires assez anciennes utilisaient des cases mémoires contenant 1, 2, 3, 4, 5, 6 7, 13, 17, 23, 36 ou 48 bits. Mais ce n'était pas des mémoires électroniques, aussi nous allons les passer sous silence. Tout ce qu'il faut savoir est que la quasi-totalité des mémoires électronique a un ou plusieurs octets par case mémoire. Pour simplifier, vous pouvez imaginer qu'une mémoire RAM est un regroupement de registre, chacun étant une case mémoire. C'est une description pas trop mauvaise pour décrire les mémoires RAM, qu'on abordera dans ce qui suit. {|class="wikitable" |+ Contenu d'une mémoire, case mémoire de 16 bits (deux octets) |- ! Case mémoire N°1 | 0001 0110 1111 1110 |- ! Case mémoire N°2 | 1111 1110 0110 1111 |- ! Case mémoire N°3 | 0001 0000 0110 0001 |- ! Case mémoire N°4 | 1000 0110 0001 0000 |- ! Case mémoire N°5 | 1100 1010 0110 0001 |- ! ... | ... |- ! Case mémoire N°1023 | 0001 0110 0001 0110 |- ! Case mémoire N°1024 | 0001 0110 0001 0110 |} Dans ce cours, il nous arrivera de partir du principe qu'il y a un octet par case mémoire, par souci de simplification. Mais ce ne sera pas systématique. De plus, il nous arrivera d'utiliser le terme adresse pour parler en réalité de la case mémoire associée, par métonymie. ===La capacité mémoire=== Bien évidemment, une mémoire ne peut stocker qu'une quantité finie de données. Et à ce petit jeu, certaines mémoires s'en sortent mieux que d'autres et peuvent stocker beaucoup plus de données que les autres. La '''capacité''' d'une mémoire correspond à la quantité d'informations que celle-ci peut mémoriser. Plus précisément, il s'agit du nombre maximal de bits qu'une mémoire peut contenir. Elle est le produit entre le nombre de cases mémoire, et la taille en bit d'une case mémoire. Toutes les mémoires actuelles utilisant des cases mémoire d'un ou plusieurs octets, ce qui nous arrange pour compter la capacité d'une mémoire. Au lieu de compter cette capacité en bits, on préfère mesurer la capacité d'une mémoire avec le nombre d'octets qu'elle contient. Mais les mémoires des PC font plusieurs millions ou milliards d'octets. Pour se faciliter la tâche, on utilise des préfixes pour désigner les différentes capacités mémoires. Vous connaissez sûrement ces préfixes : kibioctets, mébioctets et gibioctets, notés respectivement Kio, Mio et Gio. {|class="wikitable" |- !Préfixe!!Capacité mémoire en octets!!Puissance de deux |- ||Kio||1024||2<sup>10</sup> octets |- ||Mio||1 048 576||2<sup>20</sup> octets |- ||Gio||1 073 741 824||2<sup>30</sup> octets |} On peut se demander pourquoi utiliser des puissances de 1024, et ne pas utiliser des puissances un peu plus communes ? Dans la majorité des situations, les électroniciens préfèrent manipuler des puissances de deux pour se faciliter la vie. Par convention, on utilise souvent des puissances de 1024, qui est la puissance de deux la plus proche de 1000. Or, dans le langage courant, kilo, méga et giga sont des multiples de 1000. Quand vous vous pesez sur votre balance et que celle-ci vous indique 58 kilogrammes, cela veut dire que vous pesez 58 000 grammes. De même, un kilomètre est égal à 1000 mètres, et non 1024 mètres. Autrefois, on utilisait les termes kilo, méga et giga à la place de nos kibi, mebi et gibi, par abus de langage. Mais peu de personnes sont au courant de l'existence de ces nouvelles unités, et celles-ci sont rarement utilisées. Et cette confusion permet aux fabricants de disques durs de nous « arnaquer » : Ceux-ci donnent la capacité des disques durs qu'ils vendent en kilo, méga ou giga octets : l’acheteur croit implicitement avoir une capacité exprimée en kibi, mébi ou gibi octets, et se retrouve avec un disque dur qui contient moins de mémoire que prévu. ===Lecture et écriture : mémoires ROM et RWM=== Pour simplifier grandement, on peut grossièrement classer les mémoires en deux types : les ''Read Only Memory'' et les ''Read Write Memory'', aussi appelées mémoires ROM et mémoires RWM. Pour les '''mémoires ROM''', on ne peut pas modifier leur contenu. On peut y récupérer une donnée ou une instruction : on dit qu'on y accède en lecture. Mais on ne peut pas modifier les données qu'elles contiennent. Quant aux '''mémoires RWM''', on peut y accéder en lecture (récupérer une donnée stockée en mémoire), mais aussi en écriture : on peut stocker une donnée dans la mémoire, ou modifier une donnée existante. Tout ordinateur contient au minimum une ROM et une RWM (souvent une mémoire RAM), les deux n'ont pas exactement le même rôle. Pour simplifier, la mémoire ROM mémorise le programme à exécuter, la mémoire RWM stocke des données. Il a existé des ordinateurs où la mémoire RWM était une mémoire magnétique, voire acoustique, mais ce n'est plus le cas de nos jours. Pour les ordinateurs modernes, la mémoire RWM est une mémoire électronique. Pour faire la différence avec ces anciennes mémoires RWM, elle est appelée la '''mémoire RAM'''. Il s'agit d'une mémoire qui stocke temporairement des données que le processeur doit manipuler (on dit qu'elle est volatile). Elle s'efface complètement quand on coupe l'alimentation de l'ordinateur. Il existe d'autres différences entre mémoire RWM et RAM : * la mémoire RWM peut ne pas être volatile et donc conserver les données écrites ; * la mémoire RAM possède un temps d'accès constant aux données (quelle que soit l'adresse), ce qui n'est pas garanti pour les mémoires RWM. Outre le programme à exécuter, la mémoire ROM peut mémoriser des constantes, des données qui ne changent pas. Elles ne sont jamais modifiées et gardent la même valeur quoi qu'il se passe lors de l'exécution du programme. En conséquence, elles ne sont jamais accédées en écriture durant l'exécution du programme, ce qui fait que leur place est dans une mémoire ROM. La mémoire RWM est alors destinée aux données temporaires, qui changent ou sont modifiées lors de l'exécution du programme, et qui sont donc manipulées aussi bien en lecture et en écriture. La mémoire RWM mémorise alors les variables du programme à exécuter, qui sont des données que le programme va manipuler. Pour les systèmes les plus simples, la mémoire RWM ne sert à rien de plus. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Pour donner un exemple de données stockées en ROM, on peut prendre l'exemple des anciennes consoles de jeu 8 et 16 bits. Les jeux vidéos sur ces consoles étaient placés dans des cartouches de jeu, précisément dans une mémoire ROM à l'intérieur de la cartouche de jeu. La ROM mémorisait non seulement le code du jeu, le programme du jeu vidéo, mais aussi les niveaux et les ''sprites'' et autres données graphiques. Une conséquence est que les consoles 8/16 bits n'avaient pas besoin de beaucoup de RAM, comparé aux ordinateurs de l'époque, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. À l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. ===L'adressage mémoire=== Sur une mémoire RAM ou ROM, on ne peut lire ou écrire qu'une case mémoire, qu'un registre à la fois : une lecture ou écriture ne peut lire ou modifier qu'une seule case mémoire. Techniquement, le processeur doit préciser à quel case mémoire il veut accéder à chaque lecture/écriture. Pour cela, chaque case mémoire se voit attribuer un nombre binaire unique, l''''adresse''', qui va permettre de le sélectionner et de l'identifier celle-ci parmi toutes les autres. En fait, on peut comparer une adresse à un numéro de téléphone (ou à une adresse d'appartement) : chacun de vos correspondants a un numéro de téléphone et vous savez que pour appeler telle personne, vous devez composer tel numéro. Les adresses mémoires en sont l'équivalent pour les cases mémoire. [[File:Adressage mémoire.png|centre|vignette|upright=2|Exemple : on demande à la mémoire de sélectionner la case mémoire d'adresse 1002 et on récupère son contenu (ici, 17).]] L'adresse mémoire est générée par le processeur. Le processeur peut parfaitement calculer des adresses, en extraire du programme qu'il exécute, et bien d'autres choses. Nous détaillerons d'ailleurs les mécanismes pour dans les chapitres portant sur les modes d'adressage du processeur. Mais pour le moment, nous avons juste besoin de savoir que c'est le processeur qui envoie des adresses aux mémoires RAM et ROM. Les adresses générées par le processeur sont alors envoyées à la RAM ou la ROM via une connexion dédiée, un ensemble de fils qui connecte le processeur à la mémoire : le '''bus d'adresse mémoire'''. L'adresse sélectionne une case mémoire, le processeur peut alors récupérer la donnée dedans pour une lecture, écrire une donnée pour l'écriture. Pour cela, un second ensemble de fil connecte le processeur à la RAM/ROM, mais cette fois-ci pour échanger des données. Il s'agit du '''bus de données mémoire'''. Les deux sont souvent regroupés sous le terme de '''bus mémoire'''. Un ordinateur contient toujours une RAM et une ROM, ce qui demande aux bus mémoire de s'adapter à la présence de deux mémoires. Il y a alors deux solutions, illustrées dans les deux schémas ci-dessous. Avec la première, il y a un seul bus mémoire partagé entre la RAM et la ROM, comme illustré ci-dessous. Une autre solution utilise deux bus séparés : un pour la RAM et un autre pour la ROM. Nous verrons les différences pratiques entre les deux à la fin du chapitre. Pour le moment, nous allons partir du principe qu'il y a un bus pour la mémoire ROM, et un autre bus pour la RAM. [[File:CPT-System-Architecture-gapfill1-ANS.svg|centre|vignette|upright=2|Architecture avec une ROM et une RAM.]] [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ===L'alignement mémoire : introduction=== Plus haut, nous avions dit qu'il y a une adresse par case mémoire, chaque case mémoire contenant un ou plusieurs octets. Mais les processeurs modernes partent du principe que la mémoire a un octet par adresse, pas plus. Et ce même si la mémoire reliée au processeur utilise des cases mémoires de 2, 3, 4 octets ou plus. D'ailleurs, la majorité des mémoires RAM actuelle a des cases mémoires de 64 bits, soit 8 octets par case mémoire. Les raisons à cela sont multiple, mais nous les verrons en détail dans le chapitre sur l'alignement mémoire. Toujours est-il qu'il faut distinguer les '''adresses mémoire''' et les '''adresses d'octet''' gérées par le processeur. Le processeur génère des adresses d'octet, qui permettent de sélectionner un octet bien précis. L'adresse d'octet permet de sélectionner un octet parmi tous les autres. Mais la mémoire ne comprend pas directement cette adresse d'octet. Heureusement, l'octet en question est dans une case mémoire bien précise, qui a elle-même une adresse mémoire bien précise. L'adresse d'octet est alors convertie en une adresse mémoire, qui sélectionne la case mémoire adéquate, celle qui contient l'octet voulu. La case mémoire entière est lue, puis le processeur ne récupère que les données adéquates. Pour cela, des circuits d'alignement mémoire se chargent de faire la conversion entre adresses du processeur et adresse mémoire. Nous verrons cela dans le détail dans le chapitre sur l'alignement mémoire. Il existe des mémoires qui n'utilisent pas d'adresses mémoire, mais passons : ce sera pour la suite du cours. ==Le processeur== Dans les ordinateurs, l'unité de traitement porte le nom de '''processeur''', ou encore de '''''Central Processing Unit''''', abrévié en CPU. Le rôle principal du processeur est de faire des calculs. La plupart des processeurs actuels supportent au minimum l'addition, la soustraction et la multiplication. Quelques processeurs ne gèrent pas la division, qui est une opération très gourmande en circuit, peu utilisée, très lente. Il arrive que des processeurs très peu performants ne gèrent pas la multiplication, mais c'est assez rare. Un processeur ne fait pas que des calculs. Tout processeur est conçu pour effectuer un nombre limité d'opérations bien précises, comme des calculs, des échanges de données avec la mémoire, etc. Ces opérations sont appelées des '''instructions'''. Les plus intuitives sont les '''instructions arithmétiques''', qui font des calculs, comme l'addition, la soustraction, la multiplication, la division. Mais il y a aussi des '''instructions d'accès mémoire''', qui échangent des données entre la mémoire RAM et le processeur. Les autres instructions ne sont pas très intuitives, aussi passons-les sous silence pour le moment, tout deviendra plus clair dans les chapitres sur le processeur. ===Le processeur exécute un programme, une suite d'instructions=== Tout processeur est conçu pour exécuter une suite d'instructions dans l'ordre demandé, cette suite s'appelant un '''programme'''. Ce que fait le processeur est défini par la suite d'instructions qu'il exécute, par le programme qu'on lui demande de faire. Les instructions sont exécutées dans un ordre bien précis, les unes après les autres. L'ordre en question est décidé par le programmeur. La totalité des logiciels présents sur un ordinateur sont des programmes comme les autres. Le programme à exécuter est stockée dans la mémoire de l'ordinateur. C'est ainsi que l'ordinateur est rendu programmable : modifier le contenu de la mémoire permet de changer le programme exécuté. Mine de rien, cette idée de stocker le programme en mémoire est ce qui a fait que l’informatique est ce qu'elle est aujourd’hui. C'est la définition même d'ordinateur : appareil programmable qui stocke son programme dans une mémoire modifiable. Une instruction est codée comme les données : sous la forme de suites de bits. Telle suite de bit indique qu'il faut faire une addition, telle autre demande de faire une soustraction, etc. Pour simplifier, nous allons supposer qu'il y a une instruction par adresse mémoire. Sur la grosse majorité des ordinateurs, les instructions sont placées les unes à la suite des autres dans l'ordre où elles doivent être exécutées. Un programme informatique n'est donc qu'une vulgaire suite d'instructions stockée quelque part dans la mémoire de l'ordinateur. {|class="wikitable" |+ Exemple de programme informatique |- ! Adresse ! Instruction |- ! 0 | Copier le contenu de l'adresse 0F05 dans le registre numéro 5 |- ! 1 | Charger le contenu de l'adresse 0555 dans le registre numéro 4 |- ! 2 | Additionner ces deux nombres |- ! 3 | Charger le contenu de l'adresse 0555 |- ! 4 | Faire en XOR avec le résultat antérieur |- ! ... | ... |- ! 5464 | Instruction d'arrêt |} Pour exécuter une suite d'instructions dans le bon ordre, le processeur détermine à chaque cycle quelle est la prochaine instruction à exécuter. Pour cela, le processeur mémorise l'adresse de l'instruction en cours dans un registre : le '''Program Counter'''. Je rappelle que des instructions consécutives sont dans des adresses consécutives. Pour passer à la prochaine instruction, il suffit donc d'incrémenter le ''program counter''. : Si une instruction prend plusieurs octets, plusieurs adresses, il suffit de l'incrémenter du nombre d'octets/adresses. D'autres processeurs font autrement : chaque instruction précise l'adresse de la suivante, directement dans la suite de bit représentant l'instruction en mémoire. Ces processeurs n'ont pas besoin de calculer une adresse qui leur est fournie sur un plateau d'argent. Sur des processeurs aussi bizarres, pas besoin de stocker les instructions en mémoire dans l'ordre dans lesquelles elles sont censées être exécutées. Mais ces processeurs sont très très rares et peuvent être considérés comme des exceptions à la règle. Nous venons de voir qu'un processeur contient un registre appelé le ''program counter''. Mais il n'est pas le seul. Pour pouvoir fonctionner, tout processeur doit mémoriser un certain nombre d’informations nécessaires à son fonctionnement, qui sont mémorisées dans des '''registres de contrôle'''. La plupart ont des noms assez barbares (registre d'état, ''program counter'') et nous ne pouvons pas en parler à ce moment du cours. Nous les verrons en temps voulu, mais il est important de préciser qu'ils existent. ===L'intérieur d'un processeur=== Fort de ce que nous savons, nous pouvons expliquer ce qu'il y a à l'intérieur d'un processeur. Le premier point est qu'un processeur fait des calculs, ce qui implique qu'il contient des circuits de calcul. Ils sont regroupés dans une ou plusieurs '''unités de calcul'''. Nous avons déjà vu comment fabriquer une unité de calcul simple, dans un chapitre dédié, et c'est la même qui est présente dans un processeur. Du moins dans les grandes lignes, les circuits des processeurs modernes étant particulièrement optimisés. Il en est de même pour les autres circuits de calcul comme ceux pour les multiplications/division/autres. Si le processeur fait des calculs, qu'en est-il des opérandes ? Et où sont mémorisés les résultats des opérations ? Pour cela, le processeur incorpore des '''registres généraux'''. Les registres généraux servent à mémoriser les opérandes et résultats des instructions. Ils mémorisent des données, contrairement aux registres de contrôle mentionnés plus haut. Le nombre de registres généraux dépend grandement du processeur. Les tout premiers processeurs se débrouillaient avec un seul registre, mais les processeurs actuels utilisent plusieurs registres, pour mémoriser plusieurs opérandes/résultats. Mais la présence de registres est source de pas mal de petites complications. Par exemple, il faut échanger les données entre la RAM et les registres, il faut gérer l'adressage des registres, etc. Il s'agit là de détails que nous expliquerons dans les chapitres sur le processeur. Le processeur contient enfin un circuit pour interpréter les instructions, appelé l''''unité de contrôle'''. Elle lit les instructions depuis la mémoire, interprète la suite de bit associée, et commande le reste du processeur pour qu'il exécute l'instruction. Ses fonctions sont assez variées, mais nous allons simplifier en disant qu'elle configure l'unité de calcul et les registres pour faire le bon calcul. Son rôle est d'analyser la suite de bit qui constitue l'instruction, et d'en déduire quelle opération effectuer. Elle gère aussi l'accès à la mémoire RAM, et notamment ce qui est envoyé sur son bus d'adresse. : Dans ce qui suit, on suppose que le ''program counter'' fait partie de l'unité de contrôle. Pour résumer, un processeur contient une unité de calcul, des registres et une interface avec la mémoire RAM. Le tout est interconnecté, afin de pouvoir échanger des données. L’ensemble forme le '''chemin de données''', nom qui trahit le fait que c'est là que les données se déplacent et sont traitées. Il faut aussi ajouter l'unité de contrôle pour commander le tout. Elle lit les instructions en mémoire, puis commande le chemin de données pour que l'instruction soit exécutée correctement. [[File:Microarchitecture d'un processeur.png|centre|vignette|upright=2|Microarchitecture d'un processeur]] Un processeur parait donc assez simple expliqué comme ça, mais il y a de nombreuses subtilités. L'une d'entre elle est liée aux registres, et notamment à la manière dont on les utilise. Pour expliquer ces subtilités, nous allons voir comment les premiers processeurs fonctionnaient, avant de passer aux processeurs un peu plus modernes. Les tout premiers processeurs n'utilisaient qu'un seul registre, ce qui fait que l'utilisation des registres était très simple. Le passage à plusieurs registres a complexifié le tout. ===D'où viennent les adresses ?=== Il est maintenant temps de répondre à une question qui s'était posée dans la section sur l'adressage : d'où viennent les adresses envoyées à la mémoire ? Pour ce qui est des adresses des instructions, on connait déjà la réponse : c'est le ''program counter'' qui gère tout. Mais pour les données, il y a deux possibilités, qui correspondent à deux types de données : les données statiques et les données dynamiques. Les '''données statiques''' sont les plus simples : elles existent durant toute la durée de vie du programme. Tant que celui-ci s'exécute, il aura besoin de ces données. En conséquence, il leur réserve une place en mémoire, qui est toujours la même. La donnée se situe donc à une adresse bien précise, qui ne change jamais. Attention cependant : les données peuvent être modifiées, changer de valeur. Le programme écrit dans les donnée statiques, c'est même assez fréquent. Ce sont ne sont pas forcément des données constantes ! Pour les données statiques, elles sont toujours placées à la même adresse mémoire. Pour le dire autrement, l'adresse mémoire est une constante, qui ne change pas. L'adresse est connue avant d’exécuter le programme, le programme a été codé pour utiliser cette adresse pour telle donnée, on a réservé une adresse pour la donnée voulue. Et même si vous quittez le programme et vous le relancez plusieurs jours après, l'adresse mémoire sera la même avant et après. Et cela permet d'utiliser l''''adressage direct'''. L'idée est que les instructions précisent donc l'adresse à lire ou écrire. Pour cela, l'adresse est intégrée dans l’instruction elle-même. Pour rappel, l'instruction est codée par une suite de bit en mémoire RAM/ROM, dont certains précisent l'opération à faire, les autres servant à autre chose. L'idée est que certains bits précisent l'adresse mémoire de la donnée à lire. Les instructions sont donc du genre : * ''LOAD 56'' - lit l'adresse numéro 56 et copie son contenu dans un registre; * ''STORE R5 , adress 99'', copie le registre R5 dans l'adresse 99 ; * ''ADD R5 , adress 209'' : additionne le registre R5 avec le contenu de l'adresse 209. S'il existe des données statiques, c'est signe qu'il existe des '''données dynamiques'''. Ces dernières sont des données qui sont créées ou détruites selon les besoins. Pour comprendre d'où viennent ces données dynamiques, prenons le cas d'une personne qui écrit du texte sur un ordinateur. Le texte qu'il écrit est mémorisé dans la RAM de l’ordinateur, puis est sauvegardé sur le disque dur quand il sauvegarde son document. Au fur et à mesure qu'il écrit du texte, la RAM utilisée par ce texte augmente. Donc, ce texte est une donnée dynamique, dont la taille varie dans le temps. Pour gérer des données dynamiques, la plupart des systèmes d'exploitation incorporent des fonctionnalités d''''allocation mémoire'''. Derrière ce nom barbare, se cache quelque chose de simple : les programmes peuvent réclamer de la mémoire au système d'exploitation, pour y placer les données qu'ils souhaitent. Les langages de programmation bas niveau supportent des fonctions comme malloc(), qui permettent de demander un bloc de mémoire de N octets à l'OS, qui doit alors accommoder la demande. De même, un programme peut libérer de la mémoire qu'il n'utilise plus avec des fonctions comme free(). Avec l'allocation mémoire, les données n'ont pas de place fixe en mémoire. Leur adresse mémoire peut varier d'une exécution du programme à l'autre. Pire que ça : les données peuvent être déplacées dans la mémoire RAM, si besoin. En clair : l'adresse est déterminée lors de l'exécution du programme. L'adresse est alors soit calculée, soit lue depuis la mémoire RAM, soit déterminée autrement. Toujours est-il qu'elle se retrouve dans un registre général. Pour gérer ces adresse variables, les processeurs utilisent l''''adressage indirect'''. L'adressage indirect permet d'utiliser une adresse qui est dans un registre de données. L'adresse en question peut être envoyée à la mémoire RAM sans problème, le processeur peut automatiquement connecter le registre adéquat sur le bus d'adresse. Au tout début de l'informatique, les processeurs ne supportaient que l'adressage direct, pas plus. L'adressage indirect n'était tout simplement pas possible. Avec l'adressage direct, l'adresse à lire est extraite directement des instructions, par l'unité de contrôle. Le bus d'adresse de la RAM est alors relié directement à l'unité de contrôle, le bus de données est relié aux registres. [[File:Architecture Harvard avec adressage direct uniquement.png|centre|vignette|upright=2|Architecture Harvard avec adressage direct uniquement]] Mais dès les années 70, l'adressage indirect est apparu, rendant la programmation bien plus simple. Mais cela a demandé quelques adaptation au niveau du processeur. Avec l'adressage indirect, le bus d'adresse est connecté aux registres. Il a donc fallu rajouter un multiplexeur pour que le processeur décide de relier le bus d'adresse soit aux registres, soit à l'unité de contrôle. ===Un ordinateur peut avoir plusieurs processeurs=== La plupart des ordinateurs n'ont qu'un seul processeur, ce qui fait qu'on désigne avec le terme d''''ordinateurs mono-processeur'''. Mais il a existé (et existe encore) des '''ordinateurs multi-processeurs''', avec plusieurs processeurs sur la même carte mère. L'idée était de gagner en performance : deux processeurs permettent de faire deux fois plus de calcul qu'un seul, quatre permettent d'en faire quatre fois plus, etc. C'est très courant sur les supercalculateurs, des ordinateurs très puissants conçus pour du calcul industriel ou scientifique, mais aussi sur les serveurs ! Dans le cas le plus courant, ils utilisent plusieurs processeurs identiques : on utilise deux processeurs Core i3 de même modèle, ou quatre Pentium 3, etc. Pour utiliser plusieurs processeurs, les programmes doivent être adaptés. Pour cela, il y a plusieurs possibilités : * Une première possibilité, assez intuitive, est d’exécuter des programmes différents sur des processeurs différents. Par exemple, on exécute le navigateur web sur un processeur, le lecteur vidéo sur un autre, etc. * La seconde option est de créer des programmes spéciaux, qui utilisent plusieurs processeurs. Ils répartissent les calculs à faire sur les différents processeurs. Un exemple est la lecture d'une vidéo sur le web : un processeur peut télécharger la vidéo pendant le visionnage et bufferiser celle-ci, un autre processeur peut décoder la vidéo, un autre décoder l'audio. De tels programmes restent des suites d'instructions, mais ils sont plus complexes que les programmes normaux, aussi nous les passons sous silence. * La troisième option est d’exécuter le même programme sur les différents processeurs, mais chaque processeur traite son propre ensemble de données. Par exemple, pour un programme de rendu 3D, quatre processeurs peuvent s'occuper chacun d'une portion de l'image. [[File:Architecture de Von Neumann Princeton multi processeurs.svg|centre|vignette|upright=2|Architecture de Von Neumann Princeton multi processeurs]] De nos jours, les ordinateurs grand public les plus utilisés sont dans un cas intermédiaire, ils ne sont ni mono-, ni multi-processeur. Ils n'ont qu'un seul processeur, dans le sens où si on ouvre l'ordinateur et qu'on regarde la carte mère, il n'y a qu'un seul processeur. Mais ce processeur est en réalité assez similaire à un regroupement de plusieurs processeurs dans le même boitier. Il s'agit de '''processeurs multicœurs''', qui contiennent plusieurs cœurs, chaque cœur pouvant exécuter un programme tout seul. La différence entre cœur et processeur est assez difficile à saisir, mais pour simplifier : un cœur est l'ensemble des circuits nécessaires pour exécuter un programme. Chaque cœur dispose de toute la machinerie électronique pour exécuter un programme, à savoir des circuits aux noms barbares comme : un séquenceur d'instruction, des registres, une unité de calcul. Par contre, certains circuits d'un processeur ne sont présents qu'en un seul exemplaire dans un processeur multicœur, comme les circuits de communication avec la mémoire ou les circuits d’interfaçage avec la carte mère. Suivant le nombre de cœurs présents dans notre processeur, celui-ci sera appelé un processeur double-cœur (deux cœurs), quadruple-cœur (4 cœurs), octuple-cœur (8 cœurs), etc. Un processeur double-cœur est équivalent à avoir deux processeurs dans l'ordinateur, un processeur quadruple-cœur est équivalent à avoir quatre processeurs dans l'ordinateur, etc. Ces processeurs sont devenus la norme dans les ordinateurs grand public et les logiciels et systèmes d'exploitation se sont adaptés. ===Les coprocesseurs=== Quelques ordinateurs assez anciens disposaient de '''coprocesseurs''', des processeurs qui complémentaient un processeur principal. Les ordinateurs de ce type avaient un processeur principal, le '''CPU''', qui était secondé par un ou plusieurs coprocesseurs. Sauf exception, le CPU et le coprocesseur exécutent des programmes différents, ils travaillent en parallèle. Les coprocesseurs les plus connus sont les '''coprocesseurs pour le rendu 2D/3D'''. Ils ont eu leur heure de gloire sur les anciennes consoles de jeux vidéo, comme Super Nintendo, la Playstation et autres consoles de cette génération ou antérieure. Ils s'occupaient respectivement de calculer les graphismes des jeux vidéos. De nos jours, ils ont été remplacés par des cartes graphiques, ou des ''Graphic Processing Units'', qui ne sont pas considérées comme des coprocesseurs. Les '''coprocesseurs sonores''' sont une sorte d'ancêtre des cartes son, utilisés sur les anciennes consoles de jeux vidéo, comme La Nintendo 64, la Playstation et autres consoles antérieures. Ils s'occupaient respectivement de calculer tout ce qui a trait au son. Pour donner un exemple, on peut citer la console Neo-géo, qui disposait de deux processeurs travaillant en parallèle : un processeur principal, et un coprocesseur sonore. Le processeur principal était un Motorola 68000, alors que le coprocesseur sonore était un processeur Z80. L'accès aux périphériques est quelque chose sur lequel nous passerons plusieurs chapitres dans ce cours. Mais sachez que l'accès aux périphériques peut demander pas mal de puissance de calculs. Le CPU principal peut faire ce genre de calculs par lui-même, mais il n'est pas rare qu'un '''coprocesseur d'IO''' soit dédié à l'accès aux périphériques. Un exemple assez récent est celui de la console de jeu Nintendo 3DS. Elle disposait d'un processeur principal de type ARM9, d'un coprocesseur pour les divisions qu'on abordera plus bas, et d'un second processeur ARM7. L'ARM 7 était utilisé comme coprocesseur d'I/O, ainsi que pour l'émulation de la console GBA. [[File:Asmp 2.gif|centre|vignette|upright=2|Co-processeur pour l'accès aux entrées-sorties.]] Les '''coprocesseurs arithmétiques''' sont un peu à part des autres. Ils sont spécialisés dans les calculs en virgule flottante. Ils étaient utilisés à une époque où les CPU ne géraient que des calculs entiers (en binaire ou en BCD). Un exemple est le coprocesseur flottant x87, complémentaire des premiers processeurs Intel x86. Il y a eu la même chose sur les processeurs Motorola 68000, avec deux coprocesseurs flottants appelés les Motorola 68881 et les Motorola 68882. Un exemple récent de coprocesseur est celui utilisé sur la console de jeu Nintendo DS. La console utilisait deux processeurs, un ARM9 et un ARM7, qui ne pouvaient pas faire de division entière. Il s'agit pourtant d'opérations importantes dans le cas du rendu 3D, ce qui fait que les concepteurs de la console ont rajouté un coprocesseur spécialisé dans les divisions entières et les racines carrées. Le coprocesseur était adressable directement par le processeur, comme peuvent l'être la RAM ou les périphériques. ==Les entrées-sorties== Tous les circuits vus précédemment traitent des données codées en binaire. Ceci dit, les données ne sortent pas de n'importe où : l'ordinateur contient des composants électroniques qui traduisent des informations venant de l’extérieur en nombres. Ces composants sont ce qu'on appelle des '''entrées'''. Par exemple, le clavier est une entrée : l'électronique du clavier attribue un nombre entier (''scancode'') à une touche, nombre qui sera communiqué à l’ordinateur lors de l'appui d'une touche. Pareil pour la souris : quand vous bougez la souris, celle-ci envoie des informations sur la position ou le mouvement du curseur, informations qui sont codées sous la forme de nombres. La carte son évoquée il y a quelques chapitres est bien sûr une entrée : elle est capable d'enregistrer un son, et de le restituer sous la forme de nombres. S’il y a des entrées, on trouve aussi des '''sorties''', des composants électroniques qui transforment des nombres présents dans l'ordinateur en quelque chose d'utile. Ces sorties effectuent la traduction inverse de celle faite par les entrées : si les entrées convertissent une information en nombre, les sorties font l'inverse : là où les entrées encodent, les sorties décodent. Par exemple, un écran LCD est un circuit de sortie : il reçoit des informations, et les transforme en image affichée à l'écran. Même chose pour une imprimante : elle reçoit des documents texte encodés sous forme de nombres, et permet de les imprimer sur du papier. Et la carte son est aussi une sortie, vu qu'elle transforme les sons d'un fichier audio en tensions destinées à un haut-parleur : c'est à la fois une entrée, et une sortie. Les '''entrées-sorties''' incluent toutes les entrées et sorties, et même certains composants qui sont les deux à la fois. Il s'agit d'un terme générique, qui regroupe des composants forts différents. Dans ce qui va suivre, nous allons parfois parler de périphériques au lieu d'entrées-sorties, mais les deux termes ne sont pas équivalents. Dans le détail, les entrées-sorties regroupent : * Les '''périphériques''' sont les composants connectés sur l'unité centrale. Exemple : les claviers, souris, webcam, imprimantes, écrans, clés USB, disques durs externes, la Box internet, etc. * Les '''cartes d'extension''', qui se connectent sur la carte mère via un connecteur, comme les cartes son ou les cartes graphiques. * D'autres composants sont soudés à la carte mère mais sont techniquement des entrées-sorties : les cartes sons soudées sur les cartes mères actuelles, par exemple. ===L'interface avec le reste de l'ordinateur=== Les entrées-sorties sont très diverses, fonctionnent très différemment les unes des autres. Mais du point de vue du reste de l'ordinateur, les choses sont relativement standardisées. Du point de vue du processeur, les entrées-sorties sont juste des paquets de registres ! Tous les périphériques, toutes les entrées-sorties contiennent des '''registres d’interfaçage''', qui permettent de faire l'intermédiaire entre l'entrée/sortie et le reste de l'ordinateur. L'entrée/sortie est conçu pour réagir automatiquement quand on écrit dans ces registres. [[File:Registres d'interfaçage.png|centre|vignette|upright=2|Registres d'interfaçage.]] Les registres d’interfaçage sont assez variés. Les plus évidents sont les '''registres de données''', qui permettent l'échange de données entre le processeur et les périphériques. Pour échanger des données avec l'entrée/sortie, le processeur a juste à lire ou écrire dans ces registres de données. On trouve généralement un registre de lecture et un registre d'écriture, mais il se peut que les deux soient fusionnés en un seul registre d’interfaçage de données. Si le processeur veut envoyer une donnée à une entrée/sortie, il a juste à écrire dans ces registres. Inversement, s'il veut lire une donnée, il a juste à lire le registre adéquat. Mais le processeur ne fait pas que transmettre des données à l'entrée/sortie. Le processeur lui envoie aussi des « commandes », des valeurs numériques auxquelles l'entrée/sortie répond en effectuant un ensemble d'actions préprogrammées. En clair, ce sont l'équivalent des instructions du processeur, mais pour l'entrée/sortie. Par exemple, les commandes envoyées à une carte graphique peuvent être : affiche l'image présente à cette adresse mémoire, calcule le rendu 3D à partir des données présentes dans ta mémoire, etc. Pour recevoir les commandes, l'entrée/sortie contient des ''registres de commande'' qui mémorisent les commandes envoyées par le processeur. Quand le processeur veut envoyer une commande à l'entrée/sortie, il écrit la commande en question dans ce ou ces registres. Enfin, beaucoup d'entrée/sortie ont un ''registre d'état'', lisible par le processeur, qui contient des informations sur l'état de l'entrée/sortie. Ils servent notamment à indiquer au processeur que l'entrée/sortie est disponible, qu'il est en train d’exécuter une commande, qu'il est occupé, qu'il y a un problème, qu'il y a une erreur de configuration, etc. ===Les adresses des registres d’interfaçage=== Les registres des périphériques sont identifiés par des adresses mémoires. Et les adresses sont conçues de façon à ce que les adresses des différentes entrées/sorties ne se marchent pas sur les pieds. Chaque entrée/sortie, chaque registre, chaque contrôleur a sa propre adresse. D'ordinaire, certains bits de l'adresse indiquent quel est le destinataire. Certains indiquent quel est l'entrée/sortie voulue, les restants indiquant le registre de destination. Il existe deux organisations possibles pour les adresses des registres d’interfaçages. La première possibilité est de séparer les adresses pour les registres d’interfaçage et les adresses pour la mémoire. Le processeur doit avoir des instructions séparées pour gérer les périphériques et adresser la mémoire. Il a des instructions de lecture/écriture pour lire/écrire en mémoire, et d'autres pour lire/écrire les registres d’interfaçage. Sans cela, le processeur ne saurait pas si une adresse est destinée à un périphérique ou à la mémoire. [[File:Espaces d'adressages séparés entre mémoire et périphérique.png|centre|vignette|upright=2.5|Espaces d'adressages séparés entre mémoire et périphérique]] L'autre méthode mélange les adresses mémoire et des entrées-sorties. Si on prend par exemple un processeur de 16 bits, où les adresses font 16 bits, alors les 65536 adresses possibles seront découpées en deux portions : une partie ira adresser la RAM/ROM, l'autre les périphériques. On parle alors d''''entrées-sorties mappées en mémoire'''. L'avantage est que le processeur n'a pas besoin d'avoir des instructions séparées pour les deux. [[File:IO mappées en mémoire.png|centre|vignette|upright=2.0|IO mappées en mémoire]] Pour résumer, communiquer avec une entrée/sortie est similaire à ce qu'on a avec les mémoires. Il suffit de lire ou écrire dans des registres d’interfaçage, qui ont chacun une adresse mémoire. Le problème est que le système d'exploitation ne connaît pas toujours le fonctionnement d'une entrée/sortie : il faut installer un programme qui va s'exécuter quand on souhaite communiquer avec l'entrée/sortie, et qui s'occupera de tout ce qui est nécessaire pour le transfert des données, l'adressage du périphérique, etc. Ce petit programme est appelé un driver ou '''pilote de périphérique'''. La « programmation » périphérique est très simple : il suffit de savoir quoi mettre dans les registres, et c'est le pilote qui s'en charge. ==Les architectures Harvard et Von Neumann== Après avoir vu le processeur, les mémoires et les entrées-sorties, voyons voir comment le tout est interconnecté. Tous les ordinateurs ne sont pas organisés de la même manière, pour ce qui est de leurs bus. Mais pour comprendre pourquoi, nous devons regarder qui communique avec qui, dans un ordinateur. Pour rappel, les données sont placées en mémoire RAM, alors que les instructions sont placées en mémoire ROM. Le processeur lit des instructions dans la mémoire ROM, il lit et écrit dans la mémoire RAM, et accède aux registres d’interfaçage des entrées-sorties. Il y a donc besoins de trois interconnexions : CPU-ROM, CPU-RAM et CPU-IO. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] Il parait intéressant d'utiliser trois interconnexions, au minimum CPU-ROM, CPU-RAM et CPU-IO. Néanmoins, faire ainsi a de nombreux désavantages. Déjà, il faut pouvoir brancher tout ça sur le processeur. Et celui-ci n'a pas forcément assez de broches pour. Aussi, il est parfois préférable de mutualiser des bus, à savoir de connecter plusieurs composants sur un même bus. Par exemple, on peut mutualiser le bus pour la mémoire RAM et pour la mémoire ROM. Il faut dire que les deux bus sont des bus mémoire, avec un bus d'adresse, un bus de données, et surtout : des bus de commande similaires. Les mutualiser est alors très simple, et permet d'économiser pas mal de broches. [[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre et une architecture Harvard]] Cette mutualisation nous amène naturellement à parler de la distinction entre les architectures Harvard d'un côté et les architectures Von Neumann de l'autre. Elle est très liée au fait d'utiliser soit un bus mémoire unique, soit des bus séparés pour la ROM et la RAM. Voyons cela en détail. ===Les architectures Harvard et Von Neumann : des bus séparés ou unifiés=== Avec l''''architecture Harvard''', la mémoire ROM et la mémoire RAM sont reliées au processeur par deux bus séparés. Il y a un bus RAM pour la mémoire RAM, un bus ROM pour la mémoire ROM. L'avantage de cette architecture est qu'elle permet de charger une instruction et une donnée simultanément : une instruction chargée sur le bus relié à la mémoire programme, et une donnée chargée sur le bus relié à la mémoire de données. Et cela simplifie fortement la conception du processeur. [[File:Harvard Architecture.png|centre|vignette|upright=2|Architecture Harvard, avec une ROM et une RAM séparées.]] Avec l''''architecture Von Neumann''', mémoire ROM et mémoire RAM sont reliées au processeur par un bus unique. Le bus unique qui relie processeur, RAM et ROM, s'appelle le '''bus mémoire'''. Un défaut de ces architecture est qu'elles ne peuvent pas charger une instruction et une donnée en même temps. Et cela pose quelques problèmes pour la conception du processeur. Par contre, nous verrons dans ce qui suit qu'utiliser un bus mémoire partagé est bien plus flexible et permet des choses que les architectures Harvard ne peuvent pas faire. [[File:Architecture Von Neumann, avec deux bus séparés.png|centre|vignette|upright=2|Architecture Von Neumann, avec deux bus séparés.]] ===Les architectures Harvard et Von Neumann : des espaces d'adressage séparés ou unifiés=== La distinction précédente se base sur les connexions entre RAM, ROM et processeur. Mais il existe une autre distinction, très liée, qui est souvent utilisée comme seconde définition des architectures Harvard/Von Neumann. Elle est liée aux adresses mémoire que le processeur peut gérer. Prenons un processeur 16 bits, par exemple, qui gère naturellement des adresses de 16 bits. Il peut gérer 2^16 adresses, soit 64 kibioctets de mémoire. L'ensemble de ces adresses est appelé un '''espace d'adressage'''. Mais comment cet espace d'adressage est utilisé pour adresser une RAM et une ROM ? Sur les architectures Harvard, le processeur voit deux mémoires séparées avec leur lot d'adresses distinctes. Une même adresse peut donc correspondre soit à la mémoire ROM, soit à la mémoire RAM, suivant le bus utilisé. L'espace d'adressage est donc doublé, dupliqué, avec un pour la ROM, un autre pour la RAM. Rien d'étonnant à cela : il y a deux bus d'adresses, chacun correspondant à un espace d'adressage. [[File:Vision de la mémoire par un processeur sur une architecture Harvard.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Harvard.]] Avec l'architecture Von Neumann, la RAM et la ROM doivent se partager les adresses mémoires disponibles. Il n'y a qu'un seul espace d'adressage qui est coupé en deux, avec une partie pour la ROM et une autre pour la RAM. Une adresse correspond soit à la mémoire RAM, soit à la mémoire ROM, mais pas aux deux. Typiquement, la mémoire ROM occupe une partie des adresses, la mémoire RAM utilise le reste. La répartition des adresses est réalisée par les circuits de décodage d'adresse mentionnés plus haut. [[File:Vision de la mémoire par un processeur sur une architecture Von Neumann.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Von Neumann.]] Les '''architectures Harvard modifiées''' sont des intermédiaires entre architectures Harvard et architectures Von Neumann, bien qu'elles penchent bien plus du côté des architectures Harvard. Précisons que la terminologie n'est pas claire, beaucoup d'auteurs mettent des définitions différentes derrière ces deux termes. Mais dans ce cours, nous utiliserons une définition très stricte de ce qu'est une architecture Harvard modifiée. Une architecture Harvard modifiée est une architecture Harvard, où le processeur peut lire des données constantes depuis la mémoire ROM. Nous avions vu plus haut que les mémoires ROM peuvent mémoriser, en plus d'un programme exécutable, des données constantes, qui ne varient pas. Les architectures Harvard pures ne permettent pas de lire des données de ce genre depuis la mémoire ROM, alors que les architectures Harvard modifiées le permettent. Une architecture Harvard modifiée dispose d'une instruction pour lire les données en mémoire RWM, et d'une instruction pour lire des données en mémoire ROM. Il y a donc deux versions de l'instruction LOAD, qui copient la donnée dans un registre général, mais dont la source de la donnée est différente. Une autre possibilité, plus rare, est que une instruction de copie, qui copie une constante depuis la mémoire ROM vers la mémoire RAM. Le cas le plus commun est l'utilisation de deux instructions LOAD séparées. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Ceci étant dit, revenons à la distinction entre architecture Harvard et Von Neumann. Il faut noter que la RAM et la ROM n'ont pas forcément la même taille. Et ce que ce soit sur une architecture Harvard que sur une architecture Von Neumann, mais c'est plus facile à expliquer sur une architecture Harvard. On peut par exemple imaginer une architecture Harvard qui utilise des adresses de 16 bits pour la ROM, et seulement 8 bits pour la RAM. Le résultat est qu'il peut adresser 64 kibioctets de ROM, mais seulement 256 octets de RAM. Les deux bus d'adresse sont alors de taille différente, l'un faisant 8 bits, l'autre 16. Quelques processeurs 8 bits étaient dans ce cas, comme on le verra dans le chapitre sur les CPU 8bits. Mais d'autres processeurs utilisent des valeurs différentes, avec par exemple des adresses de 16 bits pour la RAM, mais de 20 bits pour la ROM, ou inversement. Sur une architecture Von Neumann, tout dépend de comment les adresses sont réparties. La solution la plus simple découpe l'espace d'adressage en deux parties égales, avec la RAM qui est dans la moitié basse (qui part de l'adresse 0 jusqu'à l'adresse au milieu), alors que la ROM est dans la moitié haute (entre l'adresse du milieu et l'adresse maximale). Mais ce n'est pas la seule possibilité, la limite entre RAM et ROM peut être mise n'importe où. Prenons par exemple un processeur 32 bits, capable de gérer 4 milliards d'adresse. Il est parfaitement possible de réserver 128 mébioctets de poids fort à la mémoire ROM, et de laisser le reste à la mémoire RAM. ===Le décodage d'adresse sur les architectures Von Neumann=== Pour résumer, les architectures Harvard et Von Neumann se distinguent sur deux points : * L'accès à la RAM et à la ROM se font par des bus séparés sur l'architecture Harvard, sur le même bus avec l'architecture Von Neumann. * Les adresses pour la mémoire ROM et la mémoire RAM sont séparées sur les architectures Harvard, partagées sur l’architecture Von Neumann. Les architectures Von Neumann utilisent donc un seul bus pour connecter la RAM et la ROM au processeur. Mais cela ne parait pas intuitif : comment deux composants peuvent se connecter aux mêmes fils ? Parce que c'est ce qu'implique le fait de partager un bus. Si je prends une mémoire RAM et une mémoire ROM, toutes deux de 8 bits, elles seront connectées à un bus mémoire de 8 bits. Intuitivement, on se dit qu'il y aura des conflits, du genre : la RAM et la ROM vont accéder au bus en même temps, comment savoir si une adresse est destinée à la RAM ou la ROM, etc ? Tous ces problèmes sont résolus avec une solution très simple : à chaque instant, seule une mémoire est connectée au bus. L'idée est que les mémoires sont connectées ou déconnectées du bus selon les besoins. Si le processeur veut envoyer lire une donnée en mémoire RAM, il déconnecte la mémoire ROM du bus. Et inversement, s'il veut lire une instruction, il déconnecte la RAM et connecte la ROM. Pour cela, les mémoires RAM et ROM possèdent une entrée ''Chip Select'' ou ''Output Enable'', qui agit comme une sorte de bouton ON/OFF. Lorsqu'on met un 1 sur cette entrée, la mémoire se connectera au bus. Ses entrées et sorties fonctionneront normalement, elle pourra recevoir des adresses, envoyer ou recevoir des données, tout sera normal. Par contre, si on met un 0 sur cette entrée, la mémoire se "désactive", ses entrée-sorties ne répondent plus aux sollicitations extérieures. Pire que ça : elles sont électriquement déconnectées. Au total, tout cela demande de gérer deux bit ''Chip Select''/''Output Enable'' : un pour la RAM, un pour la ROM. Et ces deux bits sont configurés pour chaque accès mémoire, pour chaque lecture ou écriture. Pour cela, un circuit de '''décodage d'adresse''' prend en entrée l'adresse mémoire à lire/écrire, et active/désactive les mémoires RAM/ROM selon les besoins. Il prend l'adresse et configure les bits ''Chip Select''/''Output Enable''. [[File:Décodage d'adresse sur une architecture Von Neumann.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann.]] L'implémentation la plus simple réserve la moitié des adresses pour la RAM, l'autre moitié pour la ROM. Typiquement, la ROM prend la moitié basse, la RAM la moitié haute. Dans ce cas, activer/désactiver la RAM et la ROM se fait avec seulement le bit de poids fort de l'adresse. Si le bit de poids fort est à 1, alors on accède à la RAM et la ROM doit être désactivée. Mais si ce bit est à 0, alors on accède à la moitié basse et il faut désactiver la RAM. Une remarque intéressante : le fait de séparer la mémoire en deux parts égales permet de simuler une architecture Harvard à partir d'une architecture Von Neumann. Par exemple, le tout premier processeur d'Intel, le 4004, était l'un de ceux là. La RAM et la ROM sont reliés au même bus, et il y a donc un unique espace d'adressage, qui est séparé en deux parties égales. Le truc est que le processeur traite les deux parties égales comme deux espaces d'adressage séparés. Le processeur se débrouille pour cacher le fait qu'il y a un espace d'adressage unique coupé en deux, ce qui fait que les programmeurs voient bien deux espaces d'adressages distincts. [[File:Décodage d'adresse sur une architecture Von Neumann basique.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann basique.]] Pour résumer, quand une adresse est envoyée sur le bus, les deux mémoires vont la recevoir mais une seule va répondre et se connecter au bus. Le décodage d'adresse garantit que seule la mémoire adéquate réponde à un accès mémoire. Le décodage d'adresse est réalisé par la carte mère, par un composant dédié. Le mécanisme peut être utilisé pour combiner plusieurs RAM en une seule, idem avec les ROM. Pour comprendre l'idée, je vais prendre l'exemple de l'IBM PC, un des tout premier PC existant. Nous étudierons ce PC dans une section dédiée, à la fin du chapitre, aussi je vais passer rapidement dessus. Tout ce que je vais faire est vous présenter la carte mère du PC, et vous demander de faire est de compter les mémoires ROM et mémoires RAM sur la carte mère : [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] Si vous remarquerez qu'il y a 5 mémoires ROM et 8 à 32 mémoires RAM. Le fait est que le processeur voit les différentes mémoires ROM comme une seule mémoire ROM. Idem avec les mémoires RAM : elle font chacune 2 kibioctets, et l'ensemble est vu par le processeur comme une seule RAM de 16 à 64 kibioctets. Et cela grâce aux circuits de décodage d'adresse, qui sont situés en haut à droite de la carte mère. Pour comprendre l'idée, prenons l'exemple d'un processeur 16 bits, capable de gérer 64 kibioctets de mémoire. L'espace d'adressage est découpé en quatre portions, de 16 kibioctets chacune. Une portion est réservée à une ROM de 16 kibioctet, les autres sont chacune réservée à une RAM de 16 kibioctet. Le décodage d'adresse sélectionne alors la mémoire adéquate en utilisant les deux bits de poids fort de l'adresse. * S'ils valent 00, alors c'est la mémoire ROM qui est activée, connectée au bus. * S'ils valent 01, alors c'est la première mémoire RAM qui est connectée au bus. * S'ils valent 10, alors c'est la seconde mémoire RAM qui est connectée au bus. * S'ils valent 11, alors c'est la troisième mémoire RAM qui est connectée au bus. [[File:Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM.png|centre|vignette|upright=3|Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM]] ===L'impact sur la conception du processeur=== Plus haut, j'ai parlé d'un des avantages des architectures Harvard : elles peuvent lire une instruction en même temps qu'elles accèdent à une donnée. La donnée est lue/écrite en RAM, alors que l'instruction est lue en ROM. Et cela permet de simplifier l'intérieur du processeur. Pas de beaucoup, mais c'est déjà ça de pris. Voyons maintenant comment cela impacte l'intérieur du processeur. Tout ce dont vous avez à vous rappeler est la séparation entre chemin de données et unité de contrôle, et que les registres généraux sont dans le premier, le ''program counter'' dans la seconde. Avec une architecture Harvard, les instructions et les données passent par des bus différent : bus ROM pour les instructions, bus RAM pour les données. L'intuition nous dit que le bus pour la mémoire ROM est connecté à l'unité de contrôle, alors que le bus pour la RAM est connecté au chemin de données. Et dans les grandes lignes, c'est vrai. La logique est imparable pour ce qui est des bus de données. Mais il y a une petite subtilité pour les bus d'adresse. Pour comprendre comment le processeur exploite ces deux bus, voyons ce qui transite dessus. Pour la mémoire ROM, elle reçoit l'adresse de l'instruction à lire, elle renvoie l'instruction adéquate. Pour cela, le ''program counter'' est envoyé sur le bus d'adresse, l'instruction sur le bus de données. Pour la mémoire RAM, elle échange des données avec les registres généraux, les registres pour les données. Les adresses utilisées pour la RAM viennent elles soit du chemin de données, soit de l'unité de contrôle, tout dépend du mode d'adressage. Mais le ''program counter'' n'est pas impliqué. [[File:Architecture Harvard - échanges de données.png|centre|vignette|upright=2|Architecture Harvard - échanges de données]] Les architectures Harvard modifiées doivent cependant rajouter une connexion entre le bus ROM et les registres généraux. C'est nécessaire pour charger une donnée constante depuis la mémoire ROM. Rappelons que la donnée constante est copiée dans un registre général, donc dans le chemin de données. [[File:Architecture Harvard modifiée - implémentation du processeur.png|centre|vignette|upright=2|Architecture Harvard modifiée - implémentation du processeur]] Avec les architectures Von Neumann, il y a un seul bus qui est relié à la fois au chemin de données et à l'unité de contrôle. Si le processeur lit une instruction, le bus doit être relié à l'unité de contrôle. Par contre, s'il accède à une donnée, il doit être relié au chemin de données (le bus d'adresse peut éventuellement être connecté au séquenceur, si celui-ci fournit l'adresse à lire). Il faut donc utiliser un paquet de multiplexeurs et de démultiplexeurs pour faire la connexion au bon endroit. [[File:Architecture Von Neumann - implémentation du processeur.png|centre|vignette|upright=2|Architecture Von Neumann - implémentation du processeur]] Une instruction se fait en deux temps : on charge l'instruction depuis la mémoire ROM, puis on l'exécute. Avec une architecture Harvard, tout cela se fait en un seul cycle d'horloge, vu que charger la ROM et accéder aux données peut se faire en même temps. Pas avec les architectures Von Neumann, qui doivent libérer le bus mémoire après avoir chargé une instruction. Elles n'ont pas le choix : elles chargent l'instruction lors d'un premier cycle d'horloge, puis l'exécutent lors du second. Pour cela, ils incorporent un registre appelé le '''registre d'instruction''', qui mémorise l'instruction chargée. L'instruction est copiée dans ce registre lors du premier cycle, puis est utilisée lors du second cycle. Le registre permet de ne pas oublier l’instruction entre les deux cycles. Le registre d'instruction est obligatoire sur les architectures Von Neumann. En comparaison, il est facultatif sur les architectures Harvard. Elles peuvent en avoir un, pour des raisons techniques, mais ce n'est pas obligatoire. [[File:Registre d'instruction.png|centre|vignette|upright=2|Registre d'instruction.]] ===Les architectures Von Neumann sont plus flexibles=== Sur les architectures Harvard, le processeur sait faire la distinction entre programme et données. Les données sont stockées dans la mémoire RAM, le programme est stocké dans la mémoire ROM. Les deux sont séparés, accédés par le processeur sur des bus séparés, et c'est ce qui permet de faire la différence entre les deux. Il est impossible que le processeur exécute des données ou modifie le programme. Du moins, tant que la mémoire qui stocke le programme est bien une ROM. Par contre, sur les architectures Von Neumann, il est impossible de distinguer programme et données, sauf en ajoutant des techniques de protection mémoire avancées. La raison est qu'il est impossible de faire la différence entre donnée et instruction, vu que rien ne ressemble plus à une suite de bits qu'une autre suite de bits. Et c'est à l'origine d'un des avantages majeur de l'architecture Von Neumann : il est possible que des programmes soient copiés dans la mémoire RWM et exécutés dans celle-ci. Un cas d'utilisation familier est celui de votre ordinateur personnel. Le système d'exploitation et les autres logiciels sont copiés en mémoire RAM à chaque fois que vous les lancez. Mais cet exemple implique un disque dur, ce qui rend les choses plus compliquées que prévu. Un autre exemple serait la compilation de code à la volée, mais il ne sera pas très parlant. Un exemple plus adapté serait celui où la ROM mémorise un programme compressée dans la mémoire ROM, qui est décompressé pour être exécuté en mémoire RAM. Le programme de décompression est stocké en mémoire ROM et est exécuté au lancement de l’ordinateur. Cette méthode permet d'utiliser une mémoire ROM très petite et très lente, tout en ayant un programme rapide (si la mémoire RWM est rapide). Il est aussi possible de créer des programmes qui modifient leurs propres instructions : cela s'appelle du '''code auto-modifiant'''. Ce genre de choses servait autrefois sur des ordinateurs rudimentaires, au tout début de l'informatique. À l'époque, les adresses à lire/écrire devaient être écrites en dur dans le programme, dans les instructions exécutées. Pour gérer certaines fonctionnalités des langages de programmation qui ont besoin d'adresses modifiables, comme les tableaux, on devait corriger les adresses au besoin avec du code auto-modifiant. De nos jours, le code automodifiant est utilisée occasionnellement pour rendre un programme indétectable dans la mémoire (les virus informatiques utilisent beaucoup ce genre de procédés). L'impossibilité de séparer données et instructions est à l'origine de problèmes assez fâcheux. Il est parfaitement possible que le processeur charge et exécute des données, qu'il prend par erreur pour des instructions. C'est le cas quand des pirates informatiques arrivent à exploiter des bugs. Il arrive que des pirates informatiques vous fournissent des données corrompues, qui contiennent un virus ou un programme malveillant est caché dans les données. Les bugs en question permettent d'exécuter ces données, donc virus. Pour éviter cela, le système d'exploitation peut marquer certaines zones de la mémoire comme non-exécutable, c’est-à-dire que le système d'exploitation interdit d’exécution de quoi que ce soit qui est dans cette zone. Mais ce n'est pas parfait. Toujours est-il que tout cela est impossible sur les architectures Harvard. Et ce serait très limitant. Imaginez : pas possible de lancer un programme depuis le disque dur ou une clé USB, le programme doit impérativement être dans une mémoire ROM, pas de compilation à la volée, etc. Que des techniques très utilisées dans l'informatique moderne. Malgré ses défauts, les architectures Von Neumann ne sont pas les plus utilisées pour rien. Les architectures Harvard sont concrètement utilisées uniquement dans l'informatique embarquée, sur des microcontrôleurs très spécifiques. ==Le bus de communication avec les entrées-sorties== Le processeur, la mémoire et les entrées-sorties sont connectées par un ou plusieurs '''bus de communication'''. Ce bus n'est rien d'autre qu'un ensemble de fils électriques sur lesquels on envoie des zéros ou des uns. Pour communiquer avec la mémoire, il y a trois prérequis qu'un bus doit respecter : pouvoir sélectionner la case mémoire (ou l'entrée-sortie) dont on a besoin, préciser à la mémoire s'il s'agit d'une lecture ou d'une écriture, et enfin pouvoir transférer la donnée. Pour cela, on doit donc avoir trois bus spécialisés, bien distincts, qu'on nommera le bus de commande, le bus d'adresse, et le bus de donnée. * Le '''bus de données''', sur lequel s'échangent les données entre les composants. * Le '''bus de commande''' pour configurer la mémoire et les entrées-sorties. * Le '''bus d'adresse''', facultatif, permet de préciser quelle adresse mémoire il faut lire/écrire. Chaque composant possède des entrées séparées pour le bus d'adresse, le bus de commande et le bus de données. Par exemple, une mémoire RAM possédera des entrées sur lesquelles brancher le bus d'adresse, d'autres sur lesquelles brancher le bus de commande, et des broches d'entrée-sortie pour le bus de données. Précisons cependant que le bus de commande n'est pas exactement le même entre des mémoires RAM/ROM et des entrées-sorties. [[File:Bus general schematic.svg|centre|vignette|upright=2|Contenu d'un bus, généralités.]] ===Le réseau d'interconnexion : généralités=== Reprenons où nous nous étions arrêté. Avant de voir les architectures Harvard et Von Neumann, nous avions dit que le processeur, les mémoires et les entrées-sorties sont reliées entre eux par un réseau d'interconnexion. Nous venons de voir qu'il est possible de mutualiser certains bus, notamment celui de la mémoire RAM et celui de la mémoire ROM. Mais il est possible de faire la même chose pour les entrées-sorties. Là encore, il est possible de regrouper le bus mémoire avec les bus pour les entrées-sorties. Voyons ce que cela implique. {| |[[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec une architecture Harvard.]] |[[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Interconnexions d'une architecture Von Neumann.]] |} Avant de poursuivre, nous devons préciser quelque chose d'important. Sur les ordinateurs modernes, les entrées-sorties peuvent accéder à la mémoire RAM. Les ordinateurs modernes intègrent des techniques de '''''Direct Memory Access''''' (DMA) qui permettent aux entrées-sorties de lire ou d'écrire en mémoire RAM. Les transferts DMA se font sans intervention du processeur. Ils permettent de copier un bloc de plusieurs octets, dans deux sens : de la mémoire RAM vers une entrée-sortie, ou inversement. Le DMA demande d'ajouter un circuit dédié sur la carte mère : le contrôleur DMA. Il effectue la copie d'un paquet d'octets de la RAM vers l'entrée-sortie ou dans l'autre sens. [[File:Réseau d'interconnexion avec un processeur au centre, et direct memory access.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre, et direct memory access]] ===Les bus systèmes=== La première solution utilise un bus unique, celui-ci est appelé le '''bus système''', aussi appelé ''backplane bus''. Le bus système est connecté à la mémoire RAM, la mémoire ROM, au processeur, et aux entrées-sorties. Tous les composants présents dans l'ordinateur sont connectés à ce bus, sans exception. De tels bus avaient pour avantage la simplicité. Le processeur n'est connecté qu'à un seul bus, ce qui utilise peu de broches et économise des fils. La mutualisation des bus est totale, le câblage est plus simple, la fabrication aussi. [[File:Architecture minimale d'un ordinateur.png|centre|vignette|upright=2|Architecture minimale d'un ordinateur.]] Un bus système contient un bus d'adresse, de données et de commande. Un bus système se marie bien avec des entrées-sorties mappées en mémoire. La conséquence est que le bus d'adresse ne sert pas que pour l'accès à la mémoire RAM/ROM, mais aussi pour l'accès aux entrées-sorties. Il y a moyen d'implémenter un système d'adresse séparés avec, mais c'est pas l'idéal. [[File:Architecture Von Neumann avec les bus.png|centre|vignette|upright=2|Architecture Von Neumann avec les bus.]] Un bus système n'a pas de limitations quant aux échanges de données. Le processeur peut communiquer directement avec les mémoires et les entrées-sorties, les entrées-sorties peuvent communiquer avec la mémoire RAM, etc. Notamment, un bus système peut implémenter le ''Direct Memory Access''. Il suffit juste de connecter un contrôleur DMA sur le bus système. Le contrôleur DMA est considéré comme une entrée-sortie, ses registres sont mappés en mémoire et sont donc accessibles directement par le processeur. [[File:Bus système avec controleur DMA.png|centre|vignette|upright=2|Bus système avec contrôleur DMA.]] Si on suit la définition à la lettre, un bus système est systématiquement une architecture Von Neumann, vu que la mémoire ROM et la mémoire RAM sont reliées sur le bus système. La conséquence est que les circuits de décodage d'adresse sont présents. Ils sont toujours sur la carte mère, et sont plus ou moins à côté du bus système. Cependant, le décodage d'adresse est parfois étendu pour tenir compte des entrées-sorties. Les entrées-sorties soudées sur la carte mère ont elles aussi des entrées ''Chip Select'' ou quelque chose de similaire. Le décodage d'adresse peut alors les activer ou les désactiver suivant l'adresse envoyée sur le bus d'adresse. C'est ce qui arrive quand le processeur écrit dans un registre d’interfaçage : il envoie l'adresse de ce registre sur le bus d'adresse, le circuit de décodage d'adresse active seulement l'entrée-sortie associée. Il faut noter que ce n'est pas systématique, il existe des techniques pour se passer de décodage d'adresse. Mais nous en reparlerons dans le chapitre sur les bus de communication. [[File:Chipselectfr.png|centre|vignette|upright=1.5|Exemple détaillé.]] Les bus systèmes sont certes très simples, mais ils ont aussi des désavantages. Par exemple, il faut éviter que le processeur et les entrées-sorties se marchent sur les pieds, ils ne peuvent pas utiliser le bus en même temps. De tels conflits d'accès au bus système sont fréquents et ils réduisent la performance, comme on le verra dans le chapitre sur les bus. De plus, un bus système a le fâcheux désavantage de relier des composants allant à des vitesses très différentes : il arrivait fréquemment qu'un composant rapide doive attendre qu'un composant lent libère le bus. Le processeur était le composant le plus touché par ces temps d'attente. Elle était utilisée sur les tout premiers ordinateurs, pour sa simplicité. Elle était parfaitement adaptée aux anciens composants, qui allaient tous à la même vitesse. De nos jours, les ordinateurs à haute performance ne l'utilisent plus trop, mais elle est encore utilisée sur certains systèmes embarqués, en informatique industrielle dans des systèmes très peu puissants. ===Les bus d'entrées-sorties=== Les bus systèmes ont de nombreux problèmes, ce qui fait que d'anciens ordinateurs faisaient autrement. À la place d'un bus système unique, ils utilisent un bus séparé pour les mémoires, et un autre séparé pour les entrées-sorties. Le bus spécialisé pour la mémoire est appelé le '''bus mémoire''', l'autre bus est appelé le '''bus d'entrées-sorties'''. Le bus mémoire est généralement relié à la fois à la mémoire RAM et à la mémoire ROM, les exceptions ne sont pas rares, cependant. [[File:Bus mémoire séparé du bus pour les IO.png|centre|vignette|upright=2|Bus mémoire séparé du bus pour les IO]] Les bus d'entrée-sorties peuvent être spécialisés et simplifiés. Par exemple, ils peuvent avoir un bus de commande différent de celui de la mémoire, qui utilise nettement moins de fils. Le bus d'adresse peut aussi être réduit, et utiliser des adresses plus courtes que celles du bus mémoire. Les bus de données peuvent aussi être de taille différentes. Il est ainsi possible d'avoir un bus mémoire capable de lire/écrire 64 bits à la fois, alors que la communication avec les entrées-sorties se fait octet par octet ! En général, les bus d'entrée-sortie sont assez petits, ils ont une taille de 8 ou 16 bits, même si le bus mémoire est plus grand. Cela permet de ne pas gaspiller trop de broches. Ajouter un bus d'entrée-sortie n'est donc pas très gourmand en broches et en fils. : Il est en théorie possible d'avoir une fréquence différente pour les deux bus, avec un bus mémoire ultra-rapide et un bus pour les entrées-sorties est un bus moins rapide. Mais il faut que le processeur soit prévu pour, et c'est très rare. Niveau performances, le processeur peut théoriquement accéder à la mémoire en attendant qu'une entrée/sortie réponde, mais il faut que le processeur soit prévu pour, et ce n'est pas de la tarte. Par contre, cela implique d'avoir des adresses séparées pour les registres d’interfaçage et la mémoire. En clair : pas d'entrée-sortie mappée en mémoire ! Un autre problème est que les entrées-sorties ne peuvent pas communiquer avec la mémoire directement, elles doivent passer par l'intermédiaire du processeur. En clair : pas de ''Direct Memory Access'' ! Les deux sont des défauts rédhibitoires pour les programmeurs système, notamment pour ceux qui codent les pilotes de périphériques. Pour résumer, les défauts sont assez problématiques : pas d'entrées-sorties mappées en mémoire, pas de ''Direct Memory Access'', économie de broches limitée. Les deux premiers sont des défauts majeurs, qui font que de tels bus ne sont pas utilisés dans les ordinateurs modernes. À la place, ils utilisent une troisième solution, distincte des bus systèmes et des bus d'entrée-sorties. ===Les bus avec répartiteur=== Il existe une méthode intermédiaire, qui garde deux bus séparés pour la mémoire et les entrées-sorties, mais élimine les problèmes de brochage sur le processeur. L'idée est d'intercaler, entre le processeur et les deux bus, un '''circuit répartiteur'''. Il récupère tous les accès et distribue ceux-ci soit sur le bus mémoire, soit sur le bus des périphériques. Le ou les répartiteurs s'appellent aussi le '''''chipset''''' de la carte mère. C'était ce qui était fait à l'époque des premiers Pentium. À l'époque, la puce de gestion du bus PCI faisait office de répartiteur. Elle mémorisait des plages mémoires entières, certaines étant attribuées à la RAM, les autres aux périphériques mappés en mémoire. Elles utilisaient ces plages pour faire la répartition. [[File:IO mappées en mémoire avec séparation des bus.png|centre|vignette|upright=2|IO mappées en mémoire avec séparation des bus]] Niveau adresses des registres d'interfacage, il est possible d'avoir soit des adresses unifiées avec les adresses mémoire, soit des adresses séparées. L'usage d'un répartiteur ne pose pas de problèmes particuliers pour implémenter le DMA. La seule contrainte est que le contrôleur DMA soit intégré dans le répartiteur. Les échanges entre IO et mémoire passent par le répartiteur, qui fait le pont entre bus mémoire et bus des IO. [[File:Implémentation du DMA avec un répartiteur.png|centre|vignette|upright=2|Implémentation du DMA avec un répartiteur]] ==Les microcontrôleurs et ''system on chip''== Parfois, on décide de regrouper la mémoire, les bus, le CPU et les ports d'entrée-sortie dans un seul circuit intégré, un seul boitier. L'ensemble forme alors ce qu'on appelle un '''''System on Chip''''' (système sur une puce), abrévié en SoC. Le nom est assez explicite : un SoC comprend un système informatique complet sur une seule puce de silicium, microprocesseurs, mémoires et périphériques inclus. Ils incorporent aussi des ''timers'', des compteurs, et autres circuits très utiles. [[File:ARMSoCBlockDiagram.svg|centre|vignette|upright=2|SoC basé sur un processeur ARM, avec des entrées-sorties typiques de celles d'un µ-contrôleur. Le support du bus CAN, d'Ethernet, du bus SPI, d'un circuit de PWM (génération de signaux spécifiques), de convertisseurs analogique-digital et inverse, sont typiques des µ-contrôleurs.]] Le terme SoC regroupe des circuits imprimés assez variés, aux usages foncièrement différents et à la conception distincte. Les plus simples d’entre eux sont des microcontrôleurs, qui sont utilisés pour des applications à base performance. Les plus complexes sont utilisés pour des applications qui demandent plus de puissance, nous les appellerons SoC haute performance. La relation entre SoC et microcontrôleurs est assez compliquée à expliquer, la terminologie n'est pas clairement établie. Il existe quelques cours/livres qui séparent les deux, d'autres qui pensent que les deux sont très liés. Dans ce cours, nous allons partir du principe que tous les systèmes qui regroupent processeur, mémoire et quelques périphériques/entrées-sorties sont des SoC. Les microcontrôleurs sont donc un cas particulier de SoC, en suivant cette définition. ===Les microcontrôleurs=== Les '''microcontrôleurs''' sont des composants utilisés dans l'embarqué ou d'informatique industrielle. Leur nom trahit leur rôle. Ils sont utilisés pour contrôler de l'électroménager, des chaines de fabrication dans une usine, des applications robotiques, les alarmes domestiques, les voitures. De manière générale, on les trouve dans tous les systèmes dits embarqués et/ou temps réel. Ils ont besoin de s'interconnecter à un grand nombre de composants et intègrent pour cela un grand nombre d'entrée-sorties. Les microcontrôleurs sont généralement peu puissants, et doivent consommer peu d'énergie/électricité. Fait amusant, on en trouve dans certains périphériques informatiques. Par exemple, les anciens disques durs intégraient un microcontrôleur qui contrôlait plusieurs moteurs/ Les moteurs pour faire tourner les plateaux magnétiques et les moteurs pour déplacer les têtes de lecture/écriture étaient commandés par ce microcontrôleur. Comme autre exemple, les claviers d'ordinateurs intègrent un microcontrôleur connecté aux touches, qui détecte quand les touches sont appuyées et qui communique avec l'ordinateur. Nous détaillerons ces deux exemples dans les chapitres dédiés aux périphériques et aux disques durs, tout deviendra plus clair à ce moment là. La majorité des périphériques ou des composants internes à un ordinateur contiennent des microcontrôleurs. Un microcontrôleur tend à intégrer des entrées-sorties assez spécifiques, qu'on ne retrouve pas dans les SoC destinés au grand public. Un microcontrôleur est typiquement relié à un paquet de senseurs et son rôle est de commander des moteurs ou d'autres composants. Et les entrées-sorties intégrées sont adaptées à cette tâche. Par exemple, ils tendent à intégrer de nombreux convertisseurs numériques-analogiques pour gérer des senseurs. Ils intègrent aussi des circuits de génération de signaux PWM spécialisés pour commander des moteurs, le processeur peut gérer des calculs trigonométriques (utiles pour commander la rotation d'un moteur), etc. [[File:C8051F340-9 A B C D.png|centre|vignette|upright=2|Exemple d'entrées-sorties intégrées à un microcontroleur.]] En plus des entrées-sorties intégrées, les microcontrôleurs ont souvent des '''ports d'entrées-sorties''' banalisés, à savoir qu'on peut brancher n'importe quoi dessus. Il était possible de brancher un capteur de température, un moteur à commander, un port série, un port parallèle, un écran, un clavier, une souris, peu importe. Les ports font souvent un octet et ils sont généralement reliées directement ou indirectement au processeur. Le logiciel qui s'exécute sur le processeur décide quoi envoyer sur des broches et comment interprète ce qui est reçu dessus. Les ports banalisés de ce type sont parfois appelés des '''GPIO''', abréviation de ''General Purpose Input/Output'', mais nous utiliserons le terme de ''port I/O''. Un port regroupe plusieurs broches qui peuvent être utilisés à volonté. C'est le logiciel qui s'exécute sur le processeur qui décide de la fonction de broches. Un port IO peut fonctionner soit en tant qu'entrée, soit en tant que sortie. Il est possible de changer de sens en cours de fonctionnement, pour passer d'une entrée à une sortie ou inversement. [[File:Afficheurs7seg.png|centre|vignette|upright=2|Exemple d'utilisation d'un port I/O. le port est connecté à un afficheur LCD dit 7-segments. Les 8 entrées de cet afficheur sont connectées à un port I/O d'un octet.]] ===Les SoC haute performance=== Les SoC les plus performants sont actuellement utilisés dans les téléphones mobiles, tablettes, ''Netbook'', ''smartphones'', ou tout appareil informatique grand public qui ne doit pas prendre beaucoup de place. La petite taille de ces appareils fait qu'ils gagnent à regrouper toute leur électronique dans un circuit imprimé unique. Mais les contraintes font qu'ils doivent être assez puissants. Ils incorporent des processeurs assez puissants, surtout ceux des ''smartphones''. C'est absolument nécessaire pour faire tourner le système d'exploitation du téléphone et les applications installées dessus. Niveau entrées-sorties, ils incorporent souvent des interfaces WIFI et cellulaires (4G/5G), des ports USB, des ports audio, et même des cartes graphiques pour les plus puissants d'entre eux. Les SoC incorporent des cartes graphiques pour gérer tout ce qui a trait à l'écran LCD/OLED, mais aussi pour gérer la caméra, voire le visionnage de vidéo (avec des décodeurs/encodeurs matériel). Par exemple, les SoC Tegra de NVIDIA incorporent une carte graphique, avec des interfaces HDMI et VGA, avec des décodeurs vidéo matériel H.264 & VC-1 gérant le 720p. Pour résumer, les périphériques sont adaptés à leur utilisation et sont donc foncièrement différents de ceux des microcontrôleurs. [[File:SOMblk.png|centre|vignette|upright=3|Exemple de SoC.]] Un point important est que les processeurs d'un SoC haute performance sont... performants. Ils sont le plus souvent des processeurs de marque ARM, qui sont différents de ceux utilisés dans les PC fixe/portables grand public qui sont eux de type x86. Nous verrons dans quelques chapitres en quoi consistent ces différences, quand nous parlerons des jeux d'instruction du processeur. Autrefois réservé au monde des PCs, les processeurs multicœurs deviennent de plus en plus fréquents pour les SoC de haute performance. Il n'est pas rare qu'un SoC incorpore plusieurs cœurs. Il arrive même qu'ils soient foncièrement différents, avec plusieurs cœurs d'architecture différente. La frontière entre SoC haute performance et microcontrôleur est de plus en plus floue. De nombreux appareils du quotidien intègrent des SoC haute performance, d'autres des microcontrôleurs. Par exemple, les lecteurs CD/DVD/BR et certains trackers GPS intègrent un SoC ou des processeurs dont la performance est assez pêchue. À l'opposé, les systèmes domotiques intègrent souvent des microcontrôleurs simples. Malgré tout, les deux cas d'utilisation font que le SoC/microcontrôleur est connecté à un grand nombre d'entrées-sorties très divers, comme des capteurs, des écrans, des LEDs, etc. [[File:GPS tracker Hardware Architecture.png|centre|vignette|upright=2|Hardware d'un tracker GPS.]] ==Étude de l'architecture de quelques consoles de jeu== Après avoir vu la théorie, nous allons voir des exemples réels d'ordinateurs. Dans ce qui suit, nous allons voir des ordinateurs qui collent assez bien à l''''architecture de base''' vue plus haut, avec un CPU, une RAM et une ROM, quelques entrées-sorties. Tous les ordinateurs modernes, mais aussi dans les smartphones, les consoles de jeu et autres, utilisent une architecture grandement modifiée et améliorée, avec un grand nombre de périphériques, des disques durs/SSD, un grand nombre de mémoires différentes, etc. Il pourrait sembler pertinent d’étudier des microcontrôleurs ou des ''System On Chip'', en premier lieu. Mais nous éviterons soigneusement de tels systèmes pour le moment. La raison est qu'ils ont un grand nombre d'entrées-sorties, qui sont peu familières. Attendez-vous à avoir près d'une vingtaine ou centaine d'entrée-sorties différentes pour de tels systèmes. Le tout est très complexe, bien trop pour un premier exemple. À la place, nous allons voir précisément des exemples plus simples : les premiers PC, et des consoles de jeu 8 et 16 bits. Bien que ce soit des systèmes très simples, ils sont cependant plus complexes que l'architecture de base. Et leur avantages/désavantages sont un peu inverse l'un de l'autre. Si on devait résumer les différences, on aurait ceci : * Les PC ont plus d'entrées-sorties que les consoles, bien que nettement moins que pour les microcontrôleurs/SoC. * Les PC utilisent des disques durs, les consoles font avec soit des cartouches de jeu, soit des CD/DVD. * Les PC utilisent des cartes électroniques séparées pour le son et l'écran, les consoles utilisent des circuits soudés sur la carte mère, qui sont souvent des co-processeurs. * Les PC ont une mémoire ROM soudées sur la carte mère, les consoles 8 bits font sans. Les PC et micro-ordinateurs ont plus d'entrées-sorties que les consoles. Même si on mets de côté les périphériques, ils ont aussi beaucoup d'entrées-sorties soudées sur la carte mère. En comparaison, les consoles de jeu 8/16 bits se débrouillent avec : une cartouche de jeu et une manette en entrée, une sortie vidéo et une sortie son. Un autre point important est l'absence de disque dur ou de lecteur CD. La présence d'un disque dur ou d'un lecteur CD/DVD complexifie tout de suite l'architecture des PC. Il faut leur réserver un bus dédié ou les connecter à un bus système, cela demande d'ajouter des circuits sur la carte mère, etc. Et surtout, il faut expliquer comment l'ordinateur exécute des programmes, ce qui demande de parler de l'interaction avec le disque dur et la ROM du BIOS. Rien de tout cela sur les consoles de jeu 8 et 16 bits. Elles utilisent à la place des cartouches de jeu, qui intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Pas besoin de parler des mémoires de stockage, on est beaucoup plus proche de l'architecture de base avec une ROM unique. Les PC utilisent des cartes électroniques à brancher sur la carte mère pour alimenter l'écran et les hauts-parleurs/casques, alors que les consoles de jeu utilisent des co-processeurs dédiés pour le son et les graphismes. Nous avons déjà expliqué ce que sont les co-processeurs plus haut, aussi les co-processeurs des consoles nous paraitrons familiers. On n'a pas à s’embêter à expliquer ce que sont les cartes d'extension, les bus associés et tout ce qui va avec, cela peut être retardé pour la section sur l'architecture des PC. Par contre, n'allez pas croire que tout est rose avec les consoles 8/16 bits. Il y a quelques différences qui font qu'elles sont plus complexes qu'un PC sur certains points. La gestion de la cartouche de jeu est notamment un peu subtile à comprendre, bien que ce soit bien plus simple à comprendre qu'un système avec un disque dur. Les cartouches de jeu intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Et le processeur doit exécuter le code depuis cette mémoire ROM. La conséquence est que les consoles 8/16 bits utilisent une architecture Harvard, avec un bus relié à la cartouche pour lire les instructions. Mais si ce n'était que ça... Les cartouches mémorisent aussi les données pour les graphismes, ce qui fait que le co-processeur vidéo doit lui aussi lire la cartouche pour récupérer ces données... ===L'architecture de la TurboGraphX-16=== La console PC Engine, aussi appelée TurboGraphX, est une ancienne console 8 bits. Elle contient un processeur 65C02, 8 kibioctets de RAM, un port manettes, une carte son et une carte vidéo. La '''carte son''' est le composant qui s'occupe de commander les haut-parleurs et de gérer tout ce qui a rapport au son. La '''carte graphique''' est le composant qui est en charge de calculer les graphismes, tout ce qui s'affiche à l'écran. Sur cette console, les cartes son et graphique ne sont PAS des co-processeurs, ce sont des circuits électroniques dits fixes. C'est totalement différent de ce qu'on a sur les consoles modernes, aussi le préciser est important. Bien que la carte graphique ne soit pas un processeur, elle a 64 kibioctets de RAM rien que pour elle. La RAM en question est séparée de la RAM normale, c'est un circuit intégré séparé. Et c'est un cas très fréquent, qui reviendra par la suite. La majeure partie des cartes graphiques dispose de leur propre '''mémoire vidéo''', totalement réservée à la carte graphique. La RAM vidéo est connectée à la carte graphique via un bus séparé. Le processeur est souvent connecté à ce bus, afin de pouvoir écrire des données dedans, mais ce n'est pas le cas ici. [[File:Architecture de la PC Engine, aussi appelée TurboGrafx-16.png|centre|vignette|upright=2.5|Architecture de la PC Engine, aussi appelée TurboGrafx-16]] L'architecture de la console était particulièrement simple. Le processeur était le centre de l'architecture, tout était connecté dessus. Il y a un bus pour la cartouche de jeu, un autre pour la RAM, un autre pour les manettes, un autre pour carte son, et un dernier pour la carte graphique. Le fait d'avoir un bus par composant est assez rare et ce n'est le cas ici que parce des conditions particulières sont remplies. Déjà, il y a peu d'entrée-sorties. Ensuite, les bus font tous 8 bits, vu que le processeur est un CPU 8 bits. Avec 5 connexions de 8 bits, le tout utilise 40 broches, ce qui est beaucoup, mais totalement gérable. Par contre, les choses changerons pour les autres consoles. Au final, l'organisation des bus peut s'expliquer avec ce qu'on a vu dans la section sur les bus de communication. La console utilise une architecture Harvard, car la ROM et la RAM utilisent des bus différents. De plus, il y a des bus dédiés aux entrées-sorties, séparés des bus mémoire. Enfin, la carte graphique a droit à ses propres bus pour lire dans la cartouche et dans sa RAM vidéo dédiée. ===L'architecture de la console de jeu NES=== Maintenant, nous allons voir la console de Jeu Famicom, aussi appelée la NES en occident. Elle a une architecture centrée sur un processeur Ricoh 2A03, similaire au processeur 6502, un ancien processeur autrefois très utilisé et très populaire. Le processeur est associé à 2 KB de mémoire RAM. Sur certaines cartouches, on trouve une RAM utilisée pour les sauvegardes, qui est adressée par le processeur directement. Première variation par rapport à l'architecture de la console précédente : l'ajout de la RAM pour les sauvegardes dans les cartouches. Niveau carte graphique, une différence importante est que la carte graphique est connectée à la cartouche de jeu via un autre bus, afin de pouvoir lire les sprites et textures du jeu dans la cartouche. [[File:Architecture de la NES.png|centre|vignette|upright=2.5|Architecture de la NES]] La différence avec l'architecture précédente est que des bus ont été fusionnés. Comme dit plus haut, le système utilise une architecture Harvard, vu que la ROM est dans la cartouche, alors que la RAM est soudée à la carte mère. Par contre, la Famicon utilise un bus dédié aux entrées-sorties. Il est utilisé pour la carte son et la carte graphique, seules les manettes sont sur un bus à part. Ce qui fait qu'on devrait plutôt parler de bus de sorties, mais passons... L'essentiel est qu'on n'est plus tout à fait dans le cas de la console précédente, avec un bus par composant. ===L'architecture de la SNES=== L'architecture de la SNES est illustrée ci-dessous. Les changements pour le processeur et la RAM sont mineurs.La RAM a augmenté en taille et passe à 128 KB. Pareil pour la RAM de la carte vidéo, qui passe à 64 KB. Par contre, on remarque un changement complet au niveau des bus, de la carte graphique et de la carte son. [[File:Architecture de la SNES.png|centre|vignette|upright=2|Architecture de la SNES]] La console utilise un '''bus système unique''', sur lequel tout est connecté : ROM, RAM, entrées-sorties, etc. La seule exception est pour les manettes, qui sont encore connectées directement sur le processeur, via un bus séparé. La transition vers un bus système s'explique par le fait que la console est maintenant de 16 bits, ce qui fait que les bus doivent être plus larges. Le processeur adresse des mémoires RAM et ROM plus grandes, ce qui double la taille de leurs bus. De plus, les entrées-sorties aussi ont besoin d'un bus plus large. Le processeur n'ayant pas un nombre illimité de broches, la seule solution est de fusionner les bus en un seul bus système. Un autre changement est que la carte graphique est maintenant composée de deux circuits séparés. Encore une fois, il ne s'agit pas de coprocesseurs, mais de circuits non-programmables. Par contre, la carte son est remplacée par deux coprocesseurs audio ! De plus, les deux processeurs sont connectés à une mémoire RAM dédiée de 64 KB, comme pour la carte graphique. L'un est un processeur 8 bits (le DSP), l'autre est un processeur 16 bits. Un point très intéressant : certains jeux intégraient des coprocesseurs dans leurs cartouches de jeu ! Par exemple, les cartouches de Starfox et de Super Mario 2 contenait un coprocesseur Super FX, qui gérait des calculs de rendu 2D/3D. Le Cx4 faisait plus ou moins la même chose, il était spécialisé dans les calculs trigonométriques, et diverses opérations de rendu 2D/3D. En tout, il y a environ 16 coprocesseurs d'utiliser et on en trouve facilement la liste sur le net. La console était conçue pour, des pins sur les ports cartouches étaient prévues pour des fonctionnalités de cartouche annexes, dont ces coprocesseurs. Ces pins connectaient le coprocesseur au bus des entrées-sorties. Les coprocesseurs des cartouches de NES avaient souvent de la mémoire rien que pour eux, qui était intégrée dans la cartouche. ===L'architecture de la Megadrive et de la néo-géo=== Passons maintenant à la console de jeu Megadrive, une console 16 bits. Elle a une architecture similaire à celle de la néo-géo, une autre console bien plus puissante, sorti à peu près en même temps. Elles intègrent deux processeurs : un Motorola 68000 qui sert de processeur principal, un Z80 qui sert de processeur dédié à l'audio. Le Z80 et le Motorola 68000 étaient deux processeurs très populaires à l'époque. Le Z80 est une sorte de version améliorée de l'Intel 8088 utilisé sur les anciens PC et de nombreuses consoles utilisaient des Z80 comme processeur principal. Il était familier pour les programmeurs de l'époque, pour son cout réduit, sa bonne disponibilité, et bien d'autres avantages liés à sa production de masse. Le Z80 est utilisé comme co-processeur audio. Il commande un synthétiseur sonore, et est relié à sa propre mémoire, distincte de la mémoire principale. Le MC68000 est le processeur principal et a une relation maitre-esclave avec le Z80 : le MC68000 envoie des commandes au Z80, mais la communication ne va pas dans l'autre sens. Le Motorola 68000 était un processeur 16 bits, alors que le Z80 est un processeur 8 bits. Et cette différence fait que l'on ne peut pas connecter directement les deux sur le même bus, ou du moins pas facilement. La solution retenue est d'utiliser deux bus séparés : un bus de 16 bits connecté au 68000, un bus de 8 bits connecté au Z80. Le premier bus est un bus système sur lequel est connecté le 68000, 64 kibioctets de RAM, la cartouche de jeu, et la carte graphique. Le second bus est un bus de 8 bits, plus court, relié au Z80, à un synthétiseur sonore, et 8 kibioctets de RAM Les deux bus sont connectés à un '''''chipset''''', un circuit répartiteur, qui fait le pont entre les deux bus. Les manettes sont connectées sur le ''chipset''. Il contient un registre de 8 bits, dans lequel le MC68000 peut écrire dedans à sa guise, le registre étant adressable par le processeur. Lorsque le MC68000 écrit une valeur dedans, cela déclenche l’exécution automatique d'un programme pré-déterminé sur le Z80. : Pour ceux qui savent ce qu'est une interruption, les valeurs écrites dans ce registre sont des numéros d'interruption, qui indiquent quelle routine d'interruption exécuter. [[File:Architecture de la Megadrive et de la Néogeo.png|centre|vignette|upright=2.5|Architecture de la Megadrive et de la Néogeo]] Cet exemple nous montre que les bus systèmes sont certes très simples, mais aussi inflexibles. Ils fonctionnent bien quand les composants branchés dessus sont tous des composants 8 bits, ou sont tous de 16 bits, ou tous 32 bits. Mais dès qu'on mélange composants 8, 16, 32 ou 64 bits, les choses deviennent plus compliquées. Il est alors préférable d'utiliser des bus séparés, avec des répartiteurs pour faire le pont entre les différents bus. Et nous verrons que le problème s'est posé lui aussi sur les PC. ===L'architecture des anciennes consoles Playstation : beaucoup de co-processeurs=== Les consoles que nous venons d'aborder étaient des consoles 8 ou 16 bits. A partir des consoles 32 bits, leur architecture s'est rapprochée de celle des PC, avec un usage plus complexes de répartiteurs. La XBOX était très semblable à un PC : le processeur était un Pentium 3 modifié, la carte graphique était une Geforce 3 modifiée, les 64 mébioctets de RAM était la même mémoire DDR que celle des PC, le répartiteur secondaire était un ''chipset'' nForce de NVIDIA, etc. Mais les Playstation 1, 2 et 3 se distinguent de leur contemporains. Elles disposent de très nombreux co-processeurs, qui sont en plus très variés. La Playstation 1 a été une des premières console à utiliser les CD-ROM comme support de stockage, en remplacement des cartouches. La conséquence est que la console contient une mémoire ROM, soudée à la carte mère, de 512 kibioctets. Elle contient aussi 2 mébioctets de RAM, une carte graphique avec 1 mébioctet de mémoire vidéo, un processeur, et de quoi gérer les périphériques. Il y a un co-processeur audio spécialisé, avec 512 kibioctets de RAM, ce qui nous est familier. Par contre, les autres co-processeurs ne le sont pas. Déjà, le lecteur de CD-ROM est associé à des circuits sur la carte mère, il y a tout un sous-système dédié au lecteur de CD. Il y a un contrôleur qui sert d'interface avec le lecteur proprement dit, mais aussi deux co-processeurs audio et 32 kibioctets de RAM. Les co-processeurs audio servent à lire des CD sans trop utiliser le second co-processeur audio, ils lui servent de complément. Ensuite, le processeur incorpore plusieurs cœurs, avec un cœur principal et plusieurs co-processeurs. Le premier est un co-processeur système, qui est utilisé pour gérer la mémoire cache intégrée au processeur, pour des fonctionnalités appelées interruptions et exceptions, ainsi que pour configurer le processeur. Le second est un co-processeur arithmétique spécialisé dans les calculs en virgule flottante, très importants pour le rendu 3D. Enfin, il y a un décodeur vidéo, qui n'est pas un co-processeur, mais un circuit non-programmable, spécialisé dans le décodage vidéo. De nos jours, ce circuit aurait été intégré dans la carte graphique, mais il était intégré dans le processeur sur la Playstation 2. Pour le reste, le processeur est la figure centrale de la console. Il est connecté à 4 bus : un pour la RAM, un pour la carte graphique, un pour les manettes, un autre pour le reste. Le dernier bus est connecté au système audio et au système pour le lecteur CD. Ce serait un bus d'entrée-sortie, s'il n'était pas connecté à la mémoire ROM. Vous avez bien lu : la mémoire ROM est reliée au bus d'entrée-sortie. [[File:Architecture de la Playstation.png|centre|vignette|upright=2.5|Architecture de la Playstation]] La Playstation 2 est composé d'un processeur, couplé à 32 Mébioctets de RAM, et d'un paquet de co-processeurs. Plus de co-processeurs que la PS1. Le processeur principal n'est pas la même que celui de la PS1, mais il a une architecture similaire. Il intègre un décodeur vidéo sur le même circuit intégré, ainsi que deux co-processeur. Les co-processeurs ne sont cependant pas les mêmes. Le co-processeur système disparait et est remplacé par un second co-processeur arithmétique. Les deux co-processeurs arithmétiques sont spécialisés dans les nombres flottants, avec quelques différences entre les deux. Par exemple, le second co-processeur gérait des calculs trigonométriques, des exponentielles, des logarithmes, et d'autres fonctions complexes du genre ; mais pas le premier co-processeur. Ils sont reliés à 4 kibioctets de RAM pour le premier, 16 kibioctets de RAM pour le second ; qui sont intégrées dans le processeur et non-représentés dans le diagramme ci-dessous. La PS2 intègre aussi un co-processeur d'entrées-sorties. Pour information, il s'agit du processeur principal de la Playstation 1, qui est ici utilisé différemment, suivant que l'on place un jeu PS1 ou PS1 dans la console. Si on met un jeu PS1, il est utilisé pour émuler la Playstation 1, afin de faire tourner le jeu PS1 sur la PS2. Si on met un jeu PS2, il est utilisé comme co-processeur d'entrée-sortie et fait l'interface entre CPU et entrées-sorties. Il est relié à 2 mébioctets de RAM, soit exactement la même quantité de mémoire que la Playstation 1. Tous les périphériques sont connectés au co-processeur d'entrées-sortie. Pour cela, le co-processeur d'entrées-sortie est relié à deux bus dédiés aux périphériques. Le premier bus est relié aux manettes, aux ports USB et aux ports pour cartes mémoires. Le second bus est relié à la carte son, la carte réseau, le lecteur DVD, et un port PCMIA. Notons que la carte son intègre un co-processeur audio, qui n'est pas représenté dans le diagramme ci-dessous. [[File:Playstation 2 architecture.png|centre|vignette|upright=2.5|Playstation 2 architecture]] ==L'architecture des PC et son évolution== Après avoir vu les consoles, nous allons maintenant voir les anciens PC, des années 80 ou 90. Le tout premier PC était techniquement l''''IBM PC'''. Par la suite, de nombreux ordinateurs ont tenté de reproduire l'IBM PC originel, avec parfois quelques modifications mineures. De tels ordinateurs ''IBM PC compatibles'', ont été très nombreux, pour des raisons diverses. Le fait d'utiliser des composants banalisés, facilement disponibles, ainsi qu'une bonne documentation de l'IBM PC originel, a grandement aidé. Les IBM PC compatibles ont progressivement évolué pour donner les PC actuels. L'IBM PC compatible a donné naissance à de nombreux standards divers. ===L'IBM PC originel et l'IBM PC XT=== [[File:IBM PC XT 02.jpg|vignette|IBM PC XT.]] Nous allons commencer par voir l'IBM PC originel, et son successeur : l'IBM Personal Computer XT. Nous les appelerons tous deux l'IBM PC. L'IBM PC utilisait un processeur Intel 8088, qui était un processeur 8 bits. Ils utilisaient un bus système unique, appelé le '''bus XT'''. Le bus système allait à 4.77 MHz, soit la même fréquence que le processeur. C'était un bus de 8 bits, ce qui collait parfaitement avec les processeurs 8 bits commercialisés par Intel à l'époque. L'IBM PC comprenait une mémoire ROM avec de quoi faire fonctionner le PC. La ROM en question contenait un programme minimal, appelé le '''BIOS''', sans lequel le PC ne fonctionnait pas du tout. Il servait de base pour le système d'exploitation et MS-DOS ne fonctionnait pas sans elle. De nos jours, son rôle est plus limité : sans elle, le PC ne démarre pas. Mais nous détaillerons cela dans le prochain chapitre. En plus de la ROM pour le BIOS, l'IBM PC avait quatre mémoires ROM dédiée au langage de programmation BASIC. Lorsque le PC démarrait, il ne bootait pas un système d'exploitation, mais lançait l'interpréteur pour le langage BASIC. De nos jours, ce serait l'équivalent d'un ordinateur qui boote directement sur du Python, à savoir la console Python que vous avez peut-être déjà utilisé si vous avez testé Python. Ceux qui ont déjà touché à un ordinateur de l'époque savent ce que ca veut dire, mais c'est malheureusement très difficile à expliquer sans ce genre d'expérience. Toujours est-il que c'était une sorte de norme à l'époque : les ordinateurs bootaient généralement sur un interpréteur BASIC. [[File:XT Bus pins.svg|vignette|Connecteur du bus XT.]] Les PC étaient conçus pour qu'on branche des '''cartes d'extension''', à savoir des cartes électroniques qu'on branchait sur la carte mère, à l'intérieur du PC. Les cartes d'extension de l'époque étaient surtout des cartes son ou des cartes graphiques, mais aussi des cartes pour brancher des péripéhriques. par exemple, on pouvait ajouter deux cartes graphiques dans l'IBM PC originel : l'''IBM Monochrome Display Adapter'' et/ou la ''IBM Color Graphics Adapter''. De nos jours, les cartes son sont intégrées à la carte mère, mais les cartes graphiques sont restées des cartes d'extension. Les cartes d'extension étaient branchées sur un '''connecteur XT''', qui était directement relié au bus XT. Le connecteur XT est illustré ci-contre, mais ne vous en souciez pas trop pour le moment. La carte mère de l'IBM PC avait 5 connecteurs de ce type, qu'on pouvait peupler avec autant de cartes d'extension. L'IBM Personal Computer XT est passé à 8 connecteurs XT, soit trois de plus. Pour ce qui est des périphériques, l'IBM PC avait plusieurs connecteurs : un port série, un port parallèle, un port pour le clavier, et un port pour un lecteur cassette. Le clavier et le lecteur cassette étaient connectés directement sur la carte mère, qui contenait quelques circuits pour gérer le clavier. Par contre, les deux premiers n'étaient pas connectés à la carte mère. Le port série était en réalité une carte d'extension, branchée sur un connecteur XT. Et il en est de même pour le port parallèle. Pour ce qui est des supports de stockage, l'IBM PC originel n'avait pas de disque dur et n'avait que des lecteurs de disquette. De plus, le lecteur de disquette n'était pas connecté directement sur la carte mère, mais était connecté à une carte d'extension, branchée sur un connecteur XT. La carte d'extension avait deux connecteurs, un par lecteur de disquette, ce qui fait que les deux lecteurs de disquettes pouvaient être branchés sur une seule carte d'extension. L'IBM Personal Computer XT a ajouté un disque dur, sauf sur quelques sous-modèles spécifiques. Le PC avait aussi un petit haut-parleur capable de faire des bips. Pour résumer, l'IBM PC originel se reposait beaucoup sur les cartes d'extension, sa carte mère contenait peu de choses. Enfin, peu de choses... Il y avait un processeur Intel 8088, éventuellement un coprocesseur flottant 8087, de la RAM, de la ROM, et des circuits intégrés assez divers. En voici la liste, certains vous seront familiers, d'autres vous seront inconnus à ce stade du cours : * les circuits de décodage d'adresse ; * un contrôleur DMA intel 8273 ; * un contrôleur d'interruption 8259 ; * un contrôleur de bus Intel 8288 pour gérer le bus XT ; * un générateur d'horloge Intel 8284 et un diviseur de fréquence ; * un ''timer'' Intel 8253, le même que celui étudié dans le chapitre sur les ''timers'' ; * un contrôleur parallèle 8255. Les multiplexeurs, registres et portes logiques, sont des circuits de décodage d'adresse, qui permettent de combiner plusieurs RAM en une seule, idem avec la mémoire ROM. Si vous verrez qu'il y a 5 mémoires ROM : une ROM pour le BIOS, et quatre autres ROM pour le BASIC. Les 4 ROM du BASIC sont combinées en une seule mémoire ROM. Pour les RAM, il y en a 8 à 32, qui sont combinées en une seule RAM de 16 à 64 kibioctets. [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] ===L'architecture d'un IBM PC compatible 16 bits=== Les PC suivants sont passés à des processeurs 16 bits, mais c'était toujours des processeurs x86 d'Intel, à savoir des Intel 286 et 386. La RAM a grossi, quelques entrées-sorties ont été ajoutées, mais l'architecture globale est plus moins resté le même. C'est surtout au niveau du bus et des périphériques que les changements majeurs ont eu lieu. [[File:ISA Bus pins.svg|vignette|Connecteur ISA.]] Les PC 16 bits utilisaient un bus système unique, sur lequel tout était connecté : le processeur, la RAM, la ROM, les cartes d'extension et tout le reste. Le bus en question s'appelait le '''bus AT''', mais il a rapidement été renommé en '''bus ISA''' (''Industry Standard Architecture''). Le bus ISA était prévu pour avoir une compatibilité avec le bus 8 bits de l'IBM PC originel. D'ailleurs, cela se ressent jusque dans le connecteur utilisé : le connecteur ISA est un connecteur XT qu'on a fusionné avec un second connecteur pour l'étendre de 8 à 16 bits. Les PC 16 bits avaient toujours un port série, un port parallèle, un clavier, un lecteur de disquette et des cartes d'extension. Des disques durs pouvaient être ajoutés, aussi. Mais pour ces périphériques, un changement majeur a eu lieu comparé à l'IBM PC originel. L'IBM PC originel utilisait des cartes d'extension pour tout, sauf le clavier. Mais maintenant, les périphériques ne sont plus connectés à une carte d'extension. À la place, les circuits de la carte d'extension sont déplacés sur la carte mère. Mais n'allez pas croire qu'ils étaient connectés directement au bus ISA, il y avait des intermédiaires. Le clavier était relié à un '''contrôleur de clavier''', qui faisait l'interface entre le connecteur du clavier et le bus ISA. Le contrôleur de clavier était appelé le ''Keyboard Controler'', abrévié en KB. Il recevait ce qui est tapé au clavier et traduisait cela en quelque chose de compréhensible par l'ordinateur. Les autres périphériques étaient connectés à un circuit intégré dédié : l''''Intel 82091AA'''. Il était connecté au lecteur de disquette, au port série et au port parallèle. Il servait d'intermédiaire entre ces périphériques et le bus ISA. Vous pouvez le voir comme une sorte de répartiteur, mais qui ne serait pas connecté sur le processeur et la RAM Enfin, il ne faut pas oublier les autres composants présents sur l'IBM PC originel. Le BIOS est toujours là, de même que les ''timers'' Intel 8253 PIT, le contrôleur d'interruption Intel 8259 et le contrôleur DMA Intel 8237. Les PC 16 bits ont aussi intégré une ''Real Time Clock'' (RTC). Pour rappel, c'est un composant qui permet au PC de mémoriser la date et l'heure courante, à la seconde près. Le tout est résumé dans le schéma ci-dessous. [[File:Architecture de l'IBM PC compatible.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible]] Un point important est que le bus ISA allait à la même fréquence que le processeur, vu que c'était un bus système. Les processeurs de l'époque étaient des CPU 286 d'Intel, ou le 386 d'Intel. Les Intel 286 allaient de 4 MHz minimum, à 25 MHz maximum. Le 386, quant à lui, allait de 12 à 40 MHz. Le bus ISA devait aller à cette fréquence, il était synchrone avec le processeur. Par la suite, les processeurs ont gagné en performance, ce qui fait que le bus ISA est devenu trop lent pour le processeur. Une idée a alors été de conserver le bus ISA, pour des raisons de compatibilité, mais de le reléguer comme bus secondaire. L'ordinateur contient alors deux bus : un bus système, et un bus ISA secondaire. Le lien entre les deux est réalisé par un '''pont ISA''', ''ISA Bridge'' en anglais. Le bus ISA fonctionnait alors sa fréquence usuelle, alors que le bus système était beaucoup plus rapide. Le bus système fonctionnait à une fréquence bien plus élevée, ce qui fait que le processeur pouvait communiquer à pleine vitesse, notamment avec la RAM. Le processeur n'était alors plus forcé à aller à la même fréquence que le bus ISA [[File:Architecture de l'IBM PC compatible avec bridge ISA.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible avec bridge ISA]] Les PC de l'époque intégraient donc plusieurs bus séparés. Vous avez bien lu : plusieurs bus ! Ici, il s'agit de ce que j'appelle des '''bus en cascade''', à savoir qu'un bus est connecté à un autre bus par un intermédiaire. Au passage, si j'aborde ces exemples, car c'est pareil sur les ordinateurs modernes. Le pont ISA a été remplacé par des circuits différents, mais qui ont un rôle assez similaire. Le ''chipset'' de votre carte mère n'est qu'un lointain descendant du pont ISA, qui s'interface avec des bus différents. ===L'arrivée des standards AT et IDE pour les disques durs=== Initialement, les disques durs étaient placés dans l'ordinateur et étaient connectés sur le bus ISA, via une carte d'extension ISA. En clair, il fallait connecter le disque dur sur une carte d'extension, et non sur la carte mère. Les cartes d'extension en question permettaient de connecter un ou plusieurs disques durs, parfois des lecteurs de disquette supplémentaires. Les cartes ISA de ce type faisaient juste l'interface entre le bus ISA et les disques durs, rien de plus. L'interface en question a été standardisée, ce qui a donné le standard ''AT Bus Attachment'', qui a été abrévié en ATA. Et ce n'était pas que pour les disques durs, de nombreux composants étaient dans ce cas. Une carte d'extension servait d'intermédiaire entre eux et la carte mère. Les cartes d'extension en question étaient appelées des ''Host bus adapter''. [[File:Acculogic sIDE-4 Controller ISA.jpg|centre|vignette|upright=2|Carte ISA d'interface disque dur, de marque Acculogic.]] Mais les choses ont rapidement évoluées, que ce soit du côté des cartes mères que du côté des disques durs. Le '''standard IDE''' a permis de brancher un disque dur directement sur la carte mère, sans passer par une carte d'interface ISA. Pour cela, la carte mère réservait un connecteur ISA pour le disque dur, renommé '''connecteur ATA'''. Pour que cela soit possible, il a fallu rajouter des circuits sur la carte mère. Tout ce qui était sur les cartes d'interface ISA s'est retrouvé sur la carte mère. [[File:Ajout des ports IDE sur la carte mère.png|centre|vignette|upright=2|Ajout des ports IDE sur la carte mère]] En réalité, les connecteurs ATA étaient des connecteurs ISA simplifiés. Un connecteur ISA avait en tout 98 broches, alors qu'un connecteur ATA n'en contient que 40. Les broches qui étaient inutiles pour les disques durs ont simplement été enlevées. Et qui dit connecteur spécialisé, dit câble spécialisé. Les disques durs étaient branchés sur le connecteur AT grâce à un câble ATA, sur lequel on pouvait connecter deux disques durs. [[File:ATA Plug.svg|centre|vignette|upright=2|Connecteur ATA.]] [[File:ATA cables.jpg|centre|vignette|upright=2|Cable ATA.]] Il était donc possible de connecter deux disques durs sur un seul connecteur ATA. Et cette possibilité est devenue d'autant plus utile par la suite. A partir de la version 2, ATA supportait aussi les lecteurs de disquettes, les lecteurs de CD/DVD, et bien d'autres supports de stockage. Il était alors possible de connecter un lecteur CD et un disque dur sur un seul connecteur. Les cartes mères avaient généralement deux connecteurs ATA, et n'avaient pas besoin de plus. C'était suffisant pour connecter un disque dur, un lecteur de disquette et un lecteur CD, configuration courante entre les années 90 et 2000. Un câble est donc connecté à deux supports de stockage. Pour distinguer les deux, le standard ATA ajoute une possibilité de configuration. Sur un câble, il doit y avoir un support de stockage "maitre" et un support "esclave". C'était la terminologie de l'époque, que je reproduis ici, même si elle est fortement trompeuse. N'allez pas croire que cela implique que l'un ait des avantages sur l'autre. Le support 'maitre" n'a pas droit à plus de bande passante, il n'a pas la priorité sur l'autre, rien du tout. Il s'agit juste d'un nombre qui permet de savoir avec qui le processeur communique, qui vaut 0 pour le premier support, 1 pour l'autre. Une sorte d'adresse de 1 bit, si l'on veut. [[File:ATA-Konfiguration02.png|centre|vignette|upright=2|Configuration ATA.]] Pour configurer un support de stockage en mode "maitre" ou "esclave", le support de stockage avait quelques pins dédiés. Il suffisait de placer un détrompeur en plastique sur les pins adéquats. Les pins se trouvaient à l'arrière du disque dur ou du lecteur de CD/DVD/Disquette/autre. [[File:HDD Master and Slave Description.jpg|centre|vignette|upright=2|Configuration ''Master/Slave''.]] ===L'architecture d'un PC avec un processeur Intel 486=== Maintenant, passons aux ordinateurs 32 bits, avec l'exemple d'un PC avec un processeur 486 d'Intel. A cette époque, le bus ISA était devenu trop limité et était en place d'être remplacé par le bus PCI, qui avait la même fonction. De nombreuses cartes d'extension utilisaient déjà ce standard et étaient branchées sur des connecteurs PCI dédiés, différents des connecteurs ISA. Intuitivement, on se dit que le bus PCI remplaçait le bus ISA, mais les choses étaient plus compliquées. Les disques durs gardaient leur connecteur ATA, et ne passaient pas par le bus PCI. Ils avaient un bus IDE séparé, qui était un bus ISA modifié. Là encore, les processeurs étaient devenus beaucoup plus rapides que le bus PCI. Les deux allaient à des fréquences assez différentes, ce qui fait que le bus PCI était séparé du bus système. Il y avait alors deux implémentations possibles. * La première utilise un répartiteur unique, relié au processeur, à la RAM, au bus PCI, et au bus IDE. * La seconde utilise un bus système séparé du bus PCI, avec un '''pont PCI''' pour faire l'interface entre les deux. Le '''''System Controler''''' était un circuit intégré, placé sur la carte mère, qui peut servir soit de pont PCI, soit de répartiteur. Le répartiteur PCI sert d'intermédiaire avec le bus PCI, mais aussi avec le bus IDE, utilisé pour les disques durs, aussi appelé le bus ''Parallel ATA''. Il peut aussi être connecté au processeur, à la mémoire RAM, ainsi qu'à la mémoire cache, mais cela ne sert que quand il est utilisé comme répartiteur. [[File:Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur.png|centre|vignette|upright=2|Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur]] Pour des raisons de compatibilité, le bus ISA avait été conservé, aux côtés du bus PCI. Il y avait un pont ISA en plus du pont/répartiteur PCI. Une implémentation possible aurait été de connecter les deux ponts ISA et PCI à un bus système unique. Mais cette solution n'a pas été retenue. La raison est que le bus PCI et le bus ISA ont des performances très différentes. Le bus PCI est très rapide, le bus ISA beaucoup plus lent. La différence est d'un ordre de grandeur, environ. Dans ces conditions, il est possible de faire passer les communications ISA à travers le bus PCI. Pour cela, le pont ISA est directement connecté sur le pont PCI, comme illustré ci-dessous. Et il en est de même pour le bus dédié aux disques durs. En effet, les disques durs étaient autrefois reliés au bus ISA, mais cela a changé depuis. Ils disposent maintenant de leur propre bus dédié, le '''bus IDE''', qui est un bus ISA simplifié. Et ce bus ISA simplifié était connecté directement sur le pont PCI. [[File:Architecture de l'IBM PC compatible avec pont PCI.png|centre|vignette|upright=2|Architecture de l'IBM PC compatible avec pont PCI]] Dans ce qui va suivre, nous allons étudier un exemple qui utilise un bus système séparé, avec un pont PCI, sans répartiteur. Voilà pour les grandes lignes, mais le schéma ci-dessous montre que tout est plus complexe. Vous remarquerez des connexions optionnelles entre le pont PCI et la mémoire RAM et la mémoire cache. La raison est que le pont PCI peut aussi servir de répartiteur en remplacement du bus système. Concrètement, on peut alors retirer le bus système. La mémoire, le bus PCI, le bus ISA, le bus IDE, le processeur et la RAM sont alors connectés au répartiteur PCI, qui sert d'intermédiaire central entre tous ces composants. Mais ce n'est pas la solution qui a été retenue dans notre exemple. [[File:Intel486-Typ PCI System.png|centre|vignette|upright=2|PC IBM compatible avec un 486, un bus PCI et un bus ISA. Le ''host bus'' est le bus système.]] Le pont ISA sert ici d'intermédiaire entre le bus système et le bus ISA. De plus, il a été amélioré sur de nombreux points. Il inclut notamment des circuits qui étaient autrefois sur la carte mère, à savoir le contrôleur DMA 82C87 et le contrôleur d'interruption 82C59, ainsi que les ''timers'' Intel 82C54. Les composants restants sont eux reliés sur un quatrième bus : le bus X, l'ancêtre du bus ''Low Pin Count''. Le bus X était celui du BIOS, du contrôleur de clavier, de la ''Real Time Clock'', et du contrôleur de périphérique 82091AA d'Intel. [[File:ISA Bridge schematic.png|centre|vignette|upright=2|ISA Bridge.]] ===L'architecture des PC des années 90-2000=== Par la suite, les ponts PCI et ISA ont évolué avec l'évolution des bus de l'ordinateur. Le bus ISA a progressivement été remplacé par d'autres bus, comme le bus ''Low Pin Count'', le bus PCI a été remplacé par le PCI Express, d'autres bus ont été ajoutés, etc. Mais la séparation du ''chipset'' en deux a été conservée. [[File:Chipset schematic.svg|vignette|upright=1.0|Chipset séparé en northbridge et southbridge.]] Le pont PCI et le pont ISA ont été remplacés respectivement par le '''pont nord''' et le '''pont sud''', plus connus par leurs noms anglais de ''northbridge'' et de ''southbridge''. Le pont nord servait d'interface entre le processeur, la mémoire et la carte graphique et est connecté à chacun par un bus dédié. Il intégrait aussi le contrôleur mémoire. Le pont sud est le répartiteur pour les composants lents, à savoir l'USB, l'Ethernet, etc. Le bus qui relie le processeur au pont nord était appelé le '''''Front Side Bus''''', abrévié en FSB. [[File:IMac Chipset.png|centre|vignette|upright=2|Chipset séparé en northbridge et southbridge.]] Un point important est que le bus PCI est devenu un bus assez lent, ce qui fait qu'il a finit par être connecté au pont sud. Le pont PCI est donc devenu le pont sud, dans le courant des années 2000. Durant un moment, un équivalent du pont ISA a subsisté dans un circuit de '''''Super IO'''''. Concrètement, il s'occupait du lecteur de disquette, du port parallèle, du port série, et des ports PS/2 pour le clavier et la souris. Mais il ne gérait pas le bus ISA, mais son remplaçant, le bus ''Low Pin Count''. [[File:Motherboard diagram fr.svg|centre|vignette|upright=1.5|Carte mère avec circuit Super IO.]] ===L'architecture des PC depuis les années 2000=== Depuis la sortie du processeur AMD Athlon 64, le pont nord a été fusionné dans le processeur. La fusion ne s'est pas faite en une fois, des fonctionnalités ont progressivement été progressivement intégrées dans le processeur. Le pont sud est resté, mais il a alors été progressivement connecté directement au processeur. La raison derrière cette intégration est que les processeurs avaient de plus en plus de transistors à leur disposition. Ils en ont profité pour intégrer le pont nord. Et cela permettait de simplifier le câblage des cartes mères, sans pour autant rendre vraiment plus complexe la fabrication du processeur. Les industriels y trouvent leur compte. La première étape a été l'intégration du contrôleur mémoire a été intégré au processeur. Concrètement, le résultat était que la mémoire RAM n'était plus connectée au pont nord, mais était connectée directement au processeur ! Il y a donc eu un retour d'un bus mémoire, mais spécialisé pour la mémoire RAM. En théorie, une telle intégration permet diverses optimisations quant aux transferts avec la mémoire RAM. Les transferts ne passent pas par un répartiteur, ce qui réduit le temps d'accès à la mémoire RAM. Ajoutons de sombres histoires de prefetching, d'optimisation des commandes, et j'en passe. Toujours est-il que le pont nord ne servait alors d'intermédiaire que pour les ports PCI Express, et le pont sud. [[File:X58 Block Diagram.png|centre|vignette|upright=2|Chipset X58 d'Intel.]] Par la suite, la carte graphique fût aussi connectée directement sur le processeur. Le processeur incorpore pour cela des contrôleurs PCI-Express. Le pont nord a alors disparu complétement, son intégration dans le processeur était complète. Sur les cartes mères Intel récentes, le pont sdud subsiste, il est appelé le ''Platform Controler Hub'', ou PCH. L'organisation des bus sur la carte mère qui résulte de cette connexion du processeur à la carte graphique, est illustrée ci-dessous, avec l'exemple du PCH. [[File:Intel 5 Series architecture.png|centre|vignette|upright=2|Intel 5 Series architecture]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=L'interface électrique entre circuits intégrés et bus | prevText=L'interface électrique entre circuits intégrés et bus | next=La hiérarchie mémoire | nextText=La hiérarchie mémoire }} </noinclude> r6i7sial6825cb8g1r8hqsnvqkywu6r 765749 765748 2026-05-01T22:15:15Z Mewtow 31375 /* Étude de l'architecture de quelques consoles de jeu */ 765749 wikitext text/x-wiki Dans les chapitres précédents, nous avons vu comment représenter de l'information, la traiter et la mémoriser avec des circuits. Mais un ordinateur n'est pas qu'un amoncellement de circuits et est organisé d'une manière bien précise. Il est structuré autour de trois circuits principaux : * un '''processeur''', qui manipule l'information et donne un résultat ; * une '''mémoire''' qui mémorise les données à manipuler ; * les '''entrées/sorties''', qui permettent à l'ordinateur de communiquer avec l'extérieur. [[File:Architecture Von Neumann.png|centre|vignette|upright=2|Architecture d'un système à mémoire.]] Pour faire simple, le processeur est un circuit qui s'occupe de faire des calculs. Rien d'étonnant à cela. Je rappelle que tout est codé par des nombres dans un ordinateur, ce qui fait que manipuler des nombres revient simplement à faire des calculs. Un ordinateur n'est donc qu'une grosse calculatrice améliorée, et le processeur est le composant qui fait les calculs. La mémoire s'occupe purement de la mémorisation des données, des nombres sur lesquelles faire des calculs. Pour être plus précis, il y a deux mémoires : une pour les données proprement dites, une autre pour le programme à exécuter. La première est la '''mémoire RAM''', la seconde est la '''mémoire ROM'''. Nous détaillerons ce que sont ces deux mémoires dans la suite du chapitre, mais sachez que nous avions déjà rencontré ces deux types de mémoires dans les chapitres sur les registres et les mémoires adressables. Les entrées-sorties permettent au processeur et à la mémoire de communiquer avec l'extérieur et d'échanger des informations avec des périphériques. Les '''périphériques''' regroupent, pour rappel, tout ce est branché sur un ordinateur, mais n'est pas à l'intérieur de celui-ci. Le processeur, les mémoires et les entrées-sorties communiquent ensemble via un '''réseau d'interconnexions'''. Le terme est assez barbare, mais rien de compliqué sur le principe. C'est juste un ensemble de fils électriques qui relie les différents éléments d'un ordinateur. Les interconnexions sont souvent appelées le bus de communication, mais le terme est un abus de langage, comme on le verra plus bas. Afin de simplifier les explications, on va supposer que le réseau d'interconnexion est le suivant. Tout est connecté au processeur. Il y a des interconnexions entre le processeur et la mémoire RAM, d'autres interconnexions entre processeur et mémoire ROM, et d'autres entre le processeur et les entrées-sorties. Nous verrons que d'autres réseaux d'interconnexions fusionnent certaines interconnexions, pour les partager entre la ROM et la RAM, par exemple. Mais pour le moment, gardez le schéma ci-dessous en tête. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ==Les mémoires RAM et ROM== La mémoire est le composant qui mémorise des informations, des données. Dans la majorité des cas, la mémoire est composée de plusieurs '''cases mémoire''', chacune mémorisant plusieurs bits, le nombre de bits étant identique pour toutes les cases mémoire. Dans le cas le plus simple, une case mémoire mémorise un '''octet''', un groupe de 8 bits. Mais les mémoires modernes mémorisent plusieurs octets par case mémoire : elles ont des cases mémoires de 16, 32 ou 64 bits, soit respectivement 2/4/8 octets. De rares mémoires assez anciennes utilisaient des cases mémoires contenant 1, 2, 3, 4, 5, 6 7, 13, 17, 23, 36 ou 48 bits. Mais ce n'était pas des mémoires électroniques, aussi nous allons les passer sous silence. Tout ce qu'il faut savoir est que la quasi-totalité des mémoires électronique a un ou plusieurs octets par case mémoire. Pour simplifier, vous pouvez imaginer qu'une mémoire RAM est un regroupement de registre, chacun étant une case mémoire. C'est une description pas trop mauvaise pour décrire les mémoires RAM, qu'on abordera dans ce qui suit. {|class="wikitable" |+ Contenu d'une mémoire, case mémoire de 16 bits (deux octets) |- ! Case mémoire N°1 | 0001 0110 1111 1110 |- ! Case mémoire N°2 | 1111 1110 0110 1111 |- ! Case mémoire N°3 | 0001 0000 0110 0001 |- ! Case mémoire N°4 | 1000 0110 0001 0000 |- ! Case mémoire N°5 | 1100 1010 0110 0001 |- ! ... | ... |- ! Case mémoire N°1023 | 0001 0110 0001 0110 |- ! Case mémoire N°1024 | 0001 0110 0001 0110 |} Dans ce cours, il nous arrivera de partir du principe qu'il y a un octet par case mémoire, par souci de simplification. Mais ce ne sera pas systématique. De plus, il nous arrivera d'utiliser le terme adresse pour parler en réalité de la case mémoire associée, par métonymie. ===La capacité mémoire=== Bien évidemment, une mémoire ne peut stocker qu'une quantité finie de données. Et à ce petit jeu, certaines mémoires s'en sortent mieux que d'autres et peuvent stocker beaucoup plus de données que les autres. La '''capacité''' d'une mémoire correspond à la quantité d'informations que celle-ci peut mémoriser. Plus précisément, il s'agit du nombre maximal de bits qu'une mémoire peut contenir. Elle est le produit entre le nombre de cases mémoire, et la taille en bit d'une case mémoire. Toutes les mémoires actuelles utilisant des cases mémoire d'un ou plusieurs octets, ce qui nous arrange pour compter la capacité d'une mémoire. Au lieu de compter cette capacité en bits, on préfère mesurer la capacité d'une mémoire avec le nombre d'octets qu'elle contient. Mais les mémoires des PC font plusieurs millions ou milliards d'octets. Pour se faciliter la tâche, on utilise des préfixes pour désigner les différentes capacités mémoires. Vous connaissez sûrement ces préfixes : kibioctets, mébioctets et gibioctets, notés respectivement Kio, Mio et Gio. {|class="wikitable" |- !Préfixe!!Capacité mémoire en octets!!Puissance de deux |- ||Kio||1024||2<sup>10</sup> octets |- ||Mio||1 048 576||2<sup>20</sup> octets |- ||Gio||1 073 741 824||2<sup>30</sup> octets |} On peut se demander pourquoi utiliser des puissances de 1024, et ne pas utiliser des puissances un peu plus communes ? Dans la majorité des situations, les électroniciens préfèrent manipuler des puissances de deux pour se faciliter la vie. Par convention, on utilise souvent des puissances de 1024, qui est la puissance de deux la plus proche de 1000. Or, dans le langage courant, kilo, méga et giga sont des multiples de 1000. Quand vous vous pesez sur votre balance et que celle-ci vous indique 58 kilogrammes, cela veut dire que vous pesez 58 000 grammes. De même, un kilomètre est égal à 1000 mètres, et non 1024 mètres. Autrefois, on utilisait les termes kilo, méga et giga à la place de nos kibi, mebi et gibi, par abus de langage. Mais peu de personnes sont au courant de l'existence de ces nouvelles unités, et celles-ci sont rarement utilisées. Et cette confusion permet aux fabricants de disques durs de nous « arnaquer » : Ceux-ci donnent la capacité des disques durs qu'ils vendent en kilo, méga ou giga octets : l’acheteur croit implicitement avoir une capacité exprimée en kibi, mébi ou gibi octets, et se retrouve avec un disque dur qui contient moins de mémoire que prévu. ===Lecture et écriture : mémoires ROM et RWM=== Pour simplifier grandement, on peut grossièrement classer les mémoires en deux types : les ''Read Only Memory'' et les ''Read Write Memory'', aussi appelées mémoires ROM et mémoires RWM. Pour les '''mémoires ROM''', on ne peut pas modifier leur contenu. On peut y récupérer une donnée ou une instruction : on dit qu'on y accède en lecture. Mais on ne peut pas modifier les données qu'elles contiennent. Quant aux '''mémoires RWM''', on peut y accéder en lecture (récupérer une donnée stockée en mémoire), mais aussi en écriture : on peut stocker une donnée dans la mémoire, ou modifier une donnée existante. Tout ordinateur contient au minimum une ROM et une RWM (souvent une mémoire RAM), les deux n'ont pas exactement le même rôle. Pour simplifier, la mémoire ROM mémorise le programme à exécuter, la mémoire RWM stocke des données. Il a existé des ordinateurs où la mémoire RWM était une mémoire magnétique, voire acoustique, mais ce n'est plus le cas de nos jours. Pour les ordinateurs modernes, la mémoire RWM est une mémoire électronique. Pour faire la différence avec ces anciennes mémoires RWM, elle est appelée la '''mémoire RAM'''. Il s'agit d'une mémoire qui stocke temporairement des données que le processeur doit manipuler (on dit qu'elle est volatile). Elle s'efface complètement quand on coupe l'alimentation de l'ordinateur. Il existe d'autres différences entre mémoire RWM et RAM : * la mémoire RWM peut ne pas être volatile et donc conserver les données écrites ; * la mémoire RAM possède un temps d'accès constant aux données (quelle que soit l'adresse), ce qui n'est pas garanti pour les mémoires RWM. Outre le programme à exécuter, la mémoire ROM peut mémoriser des constantes, des données qui ne changent pas. Elles ne sont jamais modifiées et gardent la même valeur quoi qu'il se passe lors de l'exécution du programme. En conséquence, elles ne sont jamais accédées en écriture durant l'exécution du programme, ce qui fait que leur place est dans une mémoire ROM. La mémoire RWM est alors destinée aux données temporaires, qui changent ou sont modifiées lors de l'exécution du programme, et qui sont donc manipulées aussi bien en lecture et en écriture. La mémoire RWM mémorise alors les variables du programme à exécuter, qui sont des données que le programme va manipuler. Pour les systèmes les plus simples, la mémoire RWM ne sert à rien de plus. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Pour donner un exemple de données stockées en ROM, on peut prendre l'exemple des anciennes consoles de jeu 8 et 16 bits. Les jeux vidéos sur ces consoles étaient placés dans des cartouches de jeu, précisément dans une mémoire ROM à l'intérieur de la cartouche de jeu. La ROM mémorisait non seulement le code du jeu, le programme du jeu vidéo, mais aussi les niveaux et les ''sprites'' et autres données graphiques. Une conséquence est que les consoles 8/16 bits n'avaient pas besoin de beaucoup de RAM, comparé aux ordinateurs de l'époque, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. À l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. ===L'adressage mémoire=== Sur une mémoire RAM ou ROM, on ne peut lire ou écrire qu'une case mémoire, qu'un registre à la fois : une lecture ou écriture ne peut lire ou modifier qu'une seule case mémoire. Techniquement, le processeur doit préciser à quel case mémoire il veut accéder à chaque lecture/écriture. Pour cela, chaque case mémoire se voit attribuer un nombre binaire unique, l''''adresse''', qui va permettre de le sélectionner et de l'identifier celle-ci parmi toutes les autres. En fait, on peut comparer une adresse à un numéro de téléphone (ou à une adresse d'appartement) : chacun de vos correspondants a un numéro de téléphone et vous savez que pour appeler telle personne, vous devez composer tel numéro. Les adresses mémoires en sont l'équivalent pour les cases mémoire. [[File:Adressage mémoire.png|centre|vignette|upright=2|Exemple : on demande à la mémoire de sélectionner la case mémoire d'adresse 1002 et on récupère son contenu (ici, 17).]] L'adresse mémoire est générée par le processeur. Le processeur peut parfaitement calculer des adresses, en extraire du programme qu'il exécute, et bien d'autres choses. Nous détaillerons d'ailleurs les mécanismes pour dans les chapitres portant sur les modes d'adressage du processeur. Mais pour le moment, nous avons juste besoin de savoir que c'est le processeur qui envoie des adresses aux mémoires RAM et ROM. Les adresses générées par le processeur sont alors envoyées à la RAM ou la ROM via une connexion dédiée, un ensemble de fils qui connecte le processeur à la mémoire : le '''bus d'adresse mémoire'''. L'adresse sélectionne une case mémoire, le processeur peut alors récupérer la donnée dedans pour une lecture, écrire une donnée pour l'écriture. Pour cela, un second ensemble de fil connecte le processeur à la RAM/ROM, mais cette fois-ci pour échanger des données. Il s'agit du '''bus de données mémoire'''. Les deux sont souvent regroupés sous le terme de '''bus mémoire'''. Un ordinateur contient toujours une RAM et une ROM, ce qui demande aux bus mémoire de s'adapter à la présence de deux mémoires. Il y a alors deux solutions, illustrées dans les deux schémas ci-dessous. Avec la première, il y a un seul bus mémoire partagé entre la RAM et la ROM, comme illustré ci-dessous. Une autre solution utilise deux bus séparés : un pour la RAM et un autre pour la ROM. Nous verrons les différences pratiques entre les deux à la fin du chapitre. Pour le moment, nous allons partir du principe qu'il y a un bus pour la mémoire ROM, et un autre bus pour la RAM. [[File:CPT-System-Architecture-gapfill1-ANS.svg|centre|vignette|upright=2|Architecture avec une ROM et une RAM.]] [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ===L'alignement mémoire : introduction=== Plus haut, nous avions dit qu'il y a une adresse par case mémoire, chaque case mémoire contenant un ou plusieurs octets. Mais les processeurs modernes partent du principe que la mémoire a un octet par adresse, pas plus. Et ce même si la mémoire reliée au processeur utilise des cases mémoires de 2, 3, 4 octets ou plus. D'ailleurs, la majorité des mémoires RAM actuelle a des cases mémoires de 64 bits, soit 8 octets par case mémoire. Les raisons à cela sont multiple, mais nous les verrons en détail dans le chapitre sur l'alignement mémoire. Toujours est-il qu'il faut distinguer les '''adresses mémoire''' et les '''adresses d'octet''' gérées par le processeur. Le processeur génère des adresses d'octet, qui permettent de sélectionner un octet bien précis. L'adresse d'octet permet de sélectionner un octet parmi tous les autres. Mais la mémoire ne comprend pas directement cette adresse d'octet. Heureusement, l'octet en question est dans une case mémoire bien précise, qui a elle-même une adresse mémoire bien précise. L'adresse d'octet est alors convertie en une adresse mémoire, qui sélectionne la case mémoire adéquate, celle qui contient l'octet voulu. La case mémoire entière est lue, puis le processeur ne récupère que les données adéquates. Pour cela, des circuits d'alignement mémoire se chargent de faire la conversion entre adresses du processeur et adresse mémoire. Nous verrons cela dans le détail dans le chapitre sur l'alignement mémoire. Il existe des mémoires qui n'utilisent pas d'adresses mémoire, mais passons : ce sera pour la suite du cours. ==Le processeur== Dans les ordinateurs, l'unité de traitement porte le nom de '''processeur''', ou encore de '''''Central Processing Unit''''', abrévié en CPU. Le rôle principal du processeur est de faire des calculs. La plupart des processeurs actuels supportent au minimum l'addition, la soustraction et la multiplication. Quelques processeurs ne gèrent pas la division, qui est une opération très gourmande en circuit, peu utilisée, très lente. Il arrive que des processeurs très peu performants ne gèrent pas la multiplication, mais c'est assez rare. Un processeur ne fait pas que des calculs. Tout processeur est conçu pour effectuer un nombre limité d'opérations bien précises, comme des calculs, des échanges de données avec la mémoire, etc. Ces opérations sont appelées des '''instructions'''. Les plus intuitives sont les '''instructions arithmétiques''', qui font des calculs, comme l'addition, la soustraction, la multiplication, la division. Mais il y a aussi des '''instructions d'accès mémoire''', qui échangent des données entre la mémoire RAM et le processeur. Les autres instructions ne sont pas très intuitives, aussi passons-les sous silence pour le moment, tout deviendra plus clair dans les chapitres sur le processeur. ===Le processeur exécute un programme, une suite d'instructions=== Tout processeur est conçu pour exécuter une suite d'instructions dans l'ordre demandé, cette suite s'appelant un '''programme'''. Ce que fait le processeur est défini par la suite d'instructions qu'il exécute, par le programme qu'on lui demande de faire. Les instructions sont exécutées dans un ordre bien précis, les unes après les autres. L'ordre en question est décidé par le programmeur. La totalité des logiciels présents sur un ordinateur sont des programmes comme les autres. Le programme à exécuter est stockée dans la mémoire de l'ordinateur. C'est ainsi que l'ordinateur est rendu programmable : modifier le contenu de la mémoire permet de changer le programme exécuté. Mine de rien, cette idée de stocker le programme en mémoire est ce qui a fait que l’informatique est ce qu'elle est aujourd’hui. C'est la définition même d'ordinateur : appareil programmable qui stocke son programme dans une mémoire modifiable. Une instruction est codée comme les données : sous la forme de suites de bits. Telle suite de bit indique qu'il faut faire une addition, telle autre demande de faire une soustraction, etc. Pour simplifier, nous allons supposer qu'il y a une instruction par adresse mémoire. Sur la grosse majorité des ordinateurs, les instructions sont placées les unes à la suite des autres dans l'ordre où elles doivent être exécutées. Un programme informatique n'est donc qu'une vulgaire suite d'instructions stockée quelque part dans la mémoire de l'ordinateur. {|class="wikitable" |+ Exemple de programme informatique |- ! Adresse ! Instruction |- ! 0 | Copier le contenu de l'adresse 0F05 dans le registre numéro 5 |- ! 1 | Charger le contenu de l'adresse 0555 dans le registre numéro 4 |- ! 2 | Additionner ces deux nombres |- ! 3 | Charger le contenu de l'adresse 0555 |- ! 4 | Faire en XOR avec le résultat antérieur |- ! ... | ... |- ! 5464 | Instruction d'arrêt |} Pour exécuter une suite d'instructions dans le bon ordre, le processeur détermine à chaque cycle quelle est la prochaine instruction à exécuter. Pour cela, le processeur mémorise l'adresse de l'instruction en cours dans un registre : le '''Program Counter'''. Je rappelle que des instructions consécutives sont dans des adresses consécutives. Pour passer à la prochaine instruction, il suffit donc d'incrémenter le ''program counter''. : Si une instruction prend plusieurs octets, plusieurs adresses, il suffit de l'incrémenter du nombre d'octets/adresses. D'autres processeurs font autrement : chaque instruction précise l'adresse de la suivante, directement dans la suite de bit représentant l'instruction en mémoire. Ces processeurs n'ont pas besoin de calculer une adresse qui leur est fournie sur un plateau d'argent. Sur des processeurs aussi bizarres, pas besoin de stocker les instructions en mémoire dans l'ordre dans lesquelles elles sont censées être exécutées. Mais ces processeurs sont très très rares et peuvent être considérés comme des exceptions à la règle. Nous venons de voir qu'un processeur contient un registre appelé le ''program counter''. Mais il n'est pas le seul. Pour pouvoir fonctionner, tout processeur doit mémoriser un certain nombre d’informations nécessaires à son fonctionnement, qui sont mémorisées dans des '''registres de contrôle'''. La plupart ont des noms assez barbares (registre d'état, ''program counter'') et nous ne pouvons pas en parler à ce moment du cours. Nous les verrons en temps voulu, mais il est important de préciser qu'ils existent. ===L'intérieur d'un processeur=== Fort de ce que nous savons, nous pouvons expliquer ce qu'il y a à l'intérieur d'un processeur. Le premier point est qu'un processeur fait des calculs, ce qui implique qu'il contient des circuits de calcul. Ils sont regroupés dans une ou plusieurs '''unités de calcul'''. Nous avons déjà vu comment fabriquer une unité de calcul simple, dans un chapitre dédié, et c'est la même qui est présente dans un processeur. Du moins dans les grandes lignes, les circuits des processeurs modernes étant particulièrement optimisés. Il en est de même pour les autres circuits de calcul comme ceux pour les multiplications/division/autres. Si le processeur fait des calculs, qu'en est-il des opérandes ? Et où sont mémorisés les résultats des opérations ? Pour cela, le processeur incorpore des '''registres généraux'''. Les registres généraux servent à mémoriser les opérandes et résultats des instructions. Ils mémorisent des données, contrairement aux registres de contrôle mentionnés plus haut. Le nombre de registres généraux dépend grandement du processeur. Les tout premiers processeurs se débrouillaient avec un seul registre, mais les processeurs actuels utilisent plusieurs registres, pour mémoriser plusieurs opérandes/résultats. Mais la présence de registres est source de pas mal de petites complications. Par exemple, il faut échanger les données entre la RAM et les registres, il faut gérer l'adressage des registres, etc. Il s'agit là de détails que nous expliquerons dans les chapitres sur le processeur. Le processeur contient enfin un circuit pour interpréter les instructions, appelé l''''unité de contrôle'''. Elle lit les instructions depuis la mémoire, interprète la suite de bit associée, et commande le reste du processeur pour qu'il exécute l'instruction. Ses fonctions sont assez variées, mais nous allons simplifier en disant qu'elle configure l'unité de calcul et les registres pour faire le bon calcul. Son rôle est d'analyser la suite de bit qui constitue l'instruction, et d'en déduire quelle opération effectuer. Elle gère aussi l'accès à la mémoire RAM, et notamment ce qui est envoyé sur son bus d'adresse. : Dans ce qui suit, on suppose que le ''program counter'' fait partie de l'unité de contrôle. Pour résumer, un processeur contient une unité de calcul, des registres et une interface avec la mémoire RAM. Le tout est interconnecté, afin de pouvoir échanger des données. L’ensemble forme le '''chemin de données''', nom qui trahit le fait que c'est là que les données se déplacent et sont traitées. Il faut aussi ajouter l'unité de contrôle pour commander le tout. Elle lit les instructions en mémoire, puis commande le chemin de données pour que l'instruction soit exécutée correctement. [[File:Microarchitecture d'un processeur.png|centre|vignette|upright=2|Microarchitecture d'un processeur]] Un processeur parait donc assez simple expliqué comme ça, mais il y a de nombreuses subtilités. L'une d'entre elle est liée aux registres, et notamment à la manière dont on les utilise. Pour expliquer ces subtilités, nous allons voir comment les premiers processeurs fonctionnaient, avant de passer aux processeurs un peu plus modernes. Les tout premiers processeurs n'utilisaient qu'un seul registre, ce qui fait que l'utilisation des registres était très simple. Le passage à plusieurs registres a complexifié le tout. ===D'où viennent les adresses ?=== Il est maintenant temps de répondre à une question qui s'était posée dans la section sur l'adressage : d'où viennent les adresses envoyées à la mémoire ? Pour ce qui est des adresses des instructions, on connait déjà la réponse : c'est le ''program counter'' qui gère tout. Mais pour les données, il y a deux possibilités, qui correspondent à deux types de données : les données statiques et les données dynamiques. Les '''données statiques''' sont les plus simples : elles existent durant toute la durée de vie du programme. Tant que celui-ci s'exécute, il aura besoin de ces données. En conséquence, il leur réserve une place en mémoire, qui est toujours la même. La donnée se situe donc à une adresse bien précise, qui ne change jamais. Attention cependant : les données peuvent être modifiées, changer de valeur. Le programme écrit dans les donnée statiques, c'est même assez fréquent. Ce sont ne sont pas forcément des données constantes ! Pour les données statiques, elles sont toujours placées à la même adresse mémoire. Pour le dire autrement, l'adresse mémoire est une constante, qui ne change pas. L'adresse est connue avant d’exécuter le programme, le programme a été codé pour utiliser cette adresse pour telle donnée, on a réservé une adresse pour la donnée voulue. Et même si vous quittez le programme et vous le relancez plusieurs jours après, l'adresse mémoire sera la même avant et après. Et cela permet d'utiliser l''''adressage direct'''. L'idée est que les instructions précisent donc l'adresse à lire ou écrire. Pour cela, l'adresse est intégrée dans l’instruction elle-même. Pour rappel, l'instruction est codée par une suite de bit en mémoire RAM/ROM, dont certains précisent l'opération à faire, les autres servant à autre chose. L'idée est que certains bits précisent l'adresse mémoire de la donnée à lire. Les instructions sont donc du genre : * ''LOAD 56'' - lit l'adresse numéro 56 et copie son contenu dans un registre; * ''STORE R5 , adress 99'', copie le registre R5 dans l'adresse 99 ; * ''ADD R5 , adress 209'' : additionne le registre R5 avec le contenu de l'adresse 209. S'il existe des données statiques, c'est signe qu'il existe des '''données dynamiques'''. Ces dernières sont des données qui sont créées ou détruites selon les besoins. Pour comprendre d'où viennent ces données dynamiques, prenons le cas d'une personne qui écrit du texte sur un ordinateur. Le texte qu'il écrit est mémorisé dans la RAM de l’ordinateur, puis est sauvegardé sur le disque dur quand il sauvegarde son document. Au fur et à mesure qu'il écrit du texte, la RAM utilisée par ce texte augmente. Donc, ce texte est une donnée dynamique, dont la taille varie dans le temps. Pour gérer des données dynamiques, la plupart des systèmes d'exploitation incorporent des fonctionnalités d''''allocation mémoire'''. Derrière ce nom barbare, se cache quelque chose de simple : les programmes peuvent réclamer de la mémoire au système d'exploitation, pour y placer les données qu'ils souhaitent. Les langages de programmation bas niveau supportent des fonctions comme malloc(), qui permettent de demander un bloc de mémoire de N octets à l'OS, qui doit alors accommoder la demande. De même, un programme peut libérer de la mémoire qu'il n'utilise plus avec des fonctions comme free(). Avec l'allocation mémoire, les données n'ont pas de place fixe en mémoire. Leur adresse mémoire peut varier d'une exécution du programme à l'autre. Pire que ça : les données peuvent être déplacées dans la mémoire RAM, si besoin. En clair : l'adresse est déterminée lors de l'exécution du programme. L'adresse est alors soit calculée, soit lue depuis la mémoire RAM, soit déterminée autrement. Toujours est-il qu'elle se retrouve dans un registre général. Pour gérer ces adresse variables, les processeurs utilisent l''''adressage indirect'''. L'adressage indirect permet d'utiliser une adresse qui est dans un registre de données. L'adresse en question peut être envoyée à la mémoire RAM sans problème, le processeur peut automatiquement connecter le registre adéquat sur le bus d'adresse. Au tout début de l'informatique, les processeurs ne supportaient que l'adressage direct, pas plus. L'adressage indirect n'était tout simplement pas possible. Avec l'adressage direct, l'adresse à lire est extraite directement des instructions, par l'unité de contrôle. Le bus d'adresse de la RAM est alors relié directement à l'unité de contrôle, le bus de données est relié aux registres. [[File:Architecture Harvard avec adressage direct uniquement.png|centre|vignette|upright=2|Architecture Harvard avec adressage direct uniquement]] Mais dès les années 70, l'adressage indirect est apparu, rendant la programmation bien plus simple. Mais cela a demandé quelques adaptation au niveau du processeur. Avec l'adressage indirect, le bus d'adresse est connecté aux registres. Il a donc fallu rajouter un multiplexeur pour que le processeur décide de relier le bus d'adresse soit aux registres, soit à l'unité de contrôle. ===Un ordinateur peut avoir plusieurs processeurs=== La plupart des ordinateurs n'ont qu'un seul processeur, ce qui fait qu'on désigne avec le terme d''''ordinateurs mono-processeur'''. Mais il a existé (et existe encore) des '''ordinateurs multi-processeurs''', avec plusieurs processeurs sur la même carte mère. L'idée était de gagner en performance : deux processeurs permettent de faire deux fois plus de calcul qu'un seul, quatre permettent d'en faire quatre fois plus, etc. C'est très courant sur les supercalculateurs, des ordinateurs très puissants conçus pour du calcul industriel ou scientifique, mais aussi sur les serveurs ! Dans le cas le plus courant, ils utilisent plusieurs processeurs identiques : on utilise deux processeurs Core i3 de même modèle, ou quatre Pentium 3, etc. Pour utiliser plusieurs processeurs, les programmes doivent être adaptés. Pour cela, il y a plusieurs possibilités : * Une première possibilité, assez intuitive, est d’exécuter des programmes différents sur des processeurs différents. Par exemple, on exécute le navigateur web sur un processeur, le lecteur vidéo sur un autre, etc. * La seconde option est de créer des programmes spéciaux, qui utilisent plusieurs processeurs. Ils répartissent les calculs à faire sur les différents processeurs. Un exemple est la lecture d'une vidéo sur le web : un processeur peut télécharger la vidéo pendant le visionnage et bufferiser celle-ci, un autre processeur peut décoder la vidéo, un autre décoder l'audio. De tels programmes restent des suites d'instructions, mais ils sont plus complexes que les programmes normaux, aussi nous les passons sous silence. * La troisième option est d’exécuter le même programme sur les différents processeurs, mais chaque processeur traite son propre ensemble de données. Par exemple, pour un programme de rendu 3D, quatre processeurs peuvent s'occuper chacun d'une portion de l'image. [[File:Architecture de Von Neumann Princeton multi processeurs.svg|centre|vignette|upright=2|Architecture de Von Neumann Princeton multi processeurs]] De nos jours, les ordinateurs grand public les plus utilisés sont dans un cas intermédiaire, ils ne sont ni mono-, ni multi-processeur. Ils n'ont qu'un seul processeur, dans le sens où si on ouvre l'ordinateur et qu'on regarde la carte mère, il n'y a qu'un seul processeur. Mais ce processeur est en réalité assez similaire à un regroupement de plusieurs processeurs dans le même boitier. Il s'agit de '''processeurs multicœurs''', qui contiennent plusieurs cœurs, chaque cœur pouvant exécuter un programme tout seul. La différence entre cœur et processeur est assez difficile à saisir, mais pour simplifier : un cœur est l'ensemble des circuits nécessaires pour exécuter un programme. Chaque cœur dispose de toute la machinerie électronique pour exécuter un programme, à savoir des circuits aux noms barbares comme : un séquenceur d'instruction, des registres, une unité de calcul. Par contre, certains circuits d'un processeur ne sont présents qu'en un seul exemplaire dans un processeur multicœur, comme les circuits de communication avec la mémoire ou les circuits d’interfaçage avec la carte mère. Suivant le nombre de cœurs présents dans notre processeur, celui-ci sera appelé un processeur double-cœur (deux cœurs), quadruple-cœur (4 cœurs), octuple-cœur (8 cœurs), etc. Un processeur double-cœur est équivalent à avoir deux processeurs dans l'ordinateur, un processeur quadruple-cœur est équivalent à avoir quatre processeurs dans l'ordinateur, etc. Ces processeurs sont devenus la norme dans les ordinateurs grand public et les logiciels et systèmes d'exploitation se sont adaptés. ===Les coprocesseurs=== Quelques ordinateurs assez anciens disposaient de '''coprocesseurs''', des processeurs qui complémentaient un processeur principal. Les ordinateurs de ce type avaient un processeur principal, le '''CPU''', qui était secondé par un ou plusieurs coprocesseurs. Sauf exception, le CPU et le coprocesseur exécutent des programmes différents, ils travaillent en parallèle. Les coprocesseurs les plus connus sont les '''coprocesseurs pour le rendu 2D/3D'''. Ils ont eu leur heure de gloire sur les anciennes consoles de jeux vidéo, comme Super Nintendo, la Playstation et autres consoles de cette génération ou antérieure. Ils s'occupaient respectivement de calculer les graphismes des jeux vidéos. De nos jours, ils ont été remplacés par des cartes graphiques, ou des ''Graphic Processing Units'', qui ne sont pas considérées comme des coprocesseurs. Les '''coprocesseurs sonores''' sont une sorte d'ancêtre des cartes son, utilisés sur les anciennes consoles de jeux vidéo, comme La Nintendo 64, la Playstation et autres consoles antérieures. Ils s'occupaient respectivement de calculer tout ce qui a trait au son. Pour donner un exemple, on peut citer la console Neo-géo, qui disposait de deux processeurs travaillant en parallèle : un processeur principal, et un coprocesseur sonore. Le processeur principal était un Motorola 68000, alors que le coprocesseur sonore était un processeur Z80. L'accès aux périphériques est quelque chose sur lequel nous passerons plusieurs chapitres dans ce cours. Mais sachez que l'accès aux périphériques peut demander pas mal de puissance de calculs. Le CPU principal peut faire ce genre de calculs par lui-même, mais il n'est pas rare qu'un '''coprocesseur d'IO''' soit dédié à l'accès aux périphériques. Un exemple assez récent est celui de la console de jeu Nintendo 3DS. Elle disposait d'un processeur principal de type ARM9, d'un coprocesseur pour les divisions qu'on abordera plus bas, et d'un second processeur ARM7. L'ARM 7 était utilisé comme coprocesseur d'I/O, ainsi que pour l'émulation de la console GBA. [[File:Asmp 2.gif|centre|vignette|upright=2|Co-processeur pour l'accès aux entrées-sorties.]] Les '''coprocesseurs arithmétiques''' sont un peu à part des autres. Ils sont spécialisés dans les calculs en virgule flottante. Ils étaient utilisés à une époque où les CPU ne géraient que des calculs entiers (en binaire ou en BCD). Un exemple est le coprocesseur flottant x87, complémentaire des premiers processeurs Intel x86. Il y a eu la même chose sur les processeurs Motorola 68000, avec deux coprocesseurs flottants appelés les Motorola 68881 et les Motorola 68882. Un exemple récent de coprocesseur est celui utilisé sur la console de jeu Nintendo DS. La console utilisait deux processeurs, un ARM9 et un ARM7, qui ne pouvaient pas faire de division entière. Il s'agit pourtant d'opérations importantes dans le cas du rendu 3D, ce qui fait que les concepteurs de la console ont rajouté un coprocesseur spécialisé dans les divisions entières et les racines carrées. Le coprocesseur était adressable directement par le processeur, comme peuvent l'être la RAM ou les périphériques. ==Les entrées-sorties== Tous les circuits vus précédemment traitent des données codées en binaire. Ceci dit, les données ne sortent pas de n'importe où : l'ordinateur contient des composants électroniques qui traduisent des informations venant de l’extérieur en nombres. Ces composants sont ce qu'on appelle des '''entrées'''. Par exemple, le clavier est une entrée : l'électronique du clavier attribue un nombre entier (''scancode'') à une touche, nombre qui sera communiqué à l’ordinateur lors de l'appui d'une touche. Pareil pour la souris : quand vous bougez la souris, celle-ci envoie des informations sur la position ou le mouvement du curseur, informations qui sont codées sous la forme de nombres. La carte son évoquée il y a quelques chapitres est bien sûr une entrée : elle est capable d'enregistrer un son, et de le restituer sous la forme de nombres. S’il y a des entrées, on trouve aussi des '''sorties''', des composants électroniques qui transforment des nombres présents dans l'ordinateur en quelque chose d'utile. Ces sorties effectuent la traduction inverse de celle faite par les entrées : si les entrées convertissent une information en nombre, les sorties font l'inverse : là où les entrées encodent, les sorties décodent. Par exemple, un écran LCD est un circuit de sortie : il reçoit des informations, et les transforme en image affichée à l'écran. Même chose pour une imprimante : elle reçoit des documents texte encodés sous forme de nombres, et permet de les imprimer sur du papier. Et la carte son est aussi une sortie, vu qu'elle transforme les sons d'un fichier audio en tensions destinées à un haut-parleur : c'est à la fois une entrée, et une sortie. Les '''entrées-sorties''' incluent toutes les entrées et sorties, et même certains composants qui sont les deux à la fois. Il s'agit d'un terme générique, qui regroupe des composants forts différents. Dans ce qui va suivre, nous allons parfois parler de périphériques au lieu d'entrées-sorties, mais les deux termes ne sont pas équivalents. Dans le détail, les entrées-sorties regroupent : * Les '''périphériques''' sont les composants connectés sur l'unité centrale. Exemple : les claviers, souris, webcam, imprimantes, écrans, clés USB, disques durs externes, la Box internet, etc. * Les '''cartes d'extension''', qui se connectent sur la carte mère via un connecteur, comme les cartes son ou les cartes graphiques. * D'autres composants sont soudés à la carte mère mais sont techniquement des entrées-sorties : les cartes sons soudées sur les cartes mères actuelles, par exemple. ===L'interface avec le reste de l'ordinateur=== Les entrées-sorties sont très diverses, fonctionnent très différemment les unes des autres. Mais du point de vue du reste de l'ordinateur, les choses sont relativement standardisées. Du point de vue du processeur, les entrées-sorties sont juste des paquets de registres ! Tous les périphériques, toutes les entrées-sorties contiennent des '''registres d’interfaçage''', qui permettent de faire l'intermédiaire entre l'entrée/sortie et le reste de l'ordinateur. L'entrée/sortie est conçu pour réagir automatiquement quand on écrit dans ces registres. [[File:Registres d'interfaçage.png|centre|vignette|upright=2|Registres d'interfaçage.]] Les registres d’interfaçage sont assez variés. Les plus évidents sont les '''registres de données''', qui permettent l'échange de données entre le processeur et les périphériques. Pour échanger des données avec l'entrée/sortie, le processeur a juste à lire ou écrire dans ces registres de données. On trouve généralement un registre de lecture et un registre d'écriture, mais il se peut que les deux soient fusionnés en un seul registre d’interfaçage de données. Si le processeur veut envoyer une donnée à une entrée/sortie, il a juste à écrire dans ces registres. Inversement, s'il veut lire une donnée, il a juste à lire le registre adéquat. Mais le processeur ne fait pas que transmettre des données à l'entrée/sortie. Le processeur lui envoie aussi des « commandes », des valeurs numériques auxquelles l'entrée/sortie répond en effectuant un ensemble d'actions préprogrammées. En clair, ce sont l'équivalent des instructions du processeur, mais pour l'entrée/sortie. Par exemple, les commandes envoyées à une carte graphique peuvent être : affiche l'image présente à cette adresse mémoire, calcule le rendu 3D à partir des données présentes dans ta mémoire, etc. Pour recevoir les commandes, l'entrée/sortie contient des ''registres de commande'' qui mémorisent les commandes envoyées par le processeur. Quand le processeur veut envoyer une commande à l'entrée/sortie, il écrit la commande en question dans ce ou ces registres. Enfin, beaucoup d'entrée/sortie ont un ''registre d'état'', lisible par le processeur, qui contient des informations sur l'état de l'entrée/sortie. Ils servent notamment à indiquer au processeur que l'entrée/sortie est disponible, qu'il est en train d’exécuter une commande, qu'il est occupé, qu'il y a un problème, qu'il y a une erreur de configuration, etc. ===Les adresses des registres d’interfaçage=== Les registres des périphériques sont identifiés par des adresses mémoires. Et les adresses sont conçues de façon à ce que les adresses des différentes entrées/sorties ne se marchent pas sur les pieds. Chaque entrée/sortie, chaque registre, chaque contrôleur a sa propre adresse. D'ordinaire, certains bits de l'adresse indiquent quel est le destinataire. Certains indiquent quel est l'entrée/sortie voulue, les restants indiquant le registre de destination. Il existe deux organisations possibles pour les adresses des registres d’interfaçages. La première possibilité est de séparer les adresses pour les registres d’interfaçage et les adresses pour la mémoire. Le processeur doit avoir des instructions séparées pour gérer les périphériques et adresser la mémoire. Il a des instructions de lecture/écriture pour lire/écrire en mémoire, et d'autres pour lire/écrire les registres d’interfaçage. Sans cela, le processeur ne saurait pas si une adresse est destinée à un périphérique ou à la mémoire. [[File:Espaces d'adressages séparés entre mémoire et périphérique.png|centre|vignette|upright=2.5|Espaces d'adressages séparés entre mémoire et périphérique]] L'autre méthode mélange les adresses mémoire et des entrées-sorties. Si on prend par exemple un processeur de 16 bits, où les adresses font 16 bits, alors les 65536 adresses possibles seront découpées en deux portions : une partie ira adresser la RAM/ROM, l'autre les périphériques. On parle alors d''''entrées-sorties mappées en mémoire'''. L'avantage est que le processeur n'a pas besoin d'avoir des instructions séparées pour les deux. [[File:IO mappées en mémoire.png|centre|vignette|upright=2.0|IO mappées en mémoire]] Pour résumer, communiquer avec une entrée/sortie est similaire à ce qu'on a avec les mémoires. Il suffit de lire ou écrire dans des registres d’interfaçage, qui ont chacun une adresse mémoire. Le problème est que le système d'exploitation ne connaît pas toujours le fonctionnement d'une entrée/sortie : il faut installer un programme qui va s'exécuter quand on souhaite communiquer avec l'entrée/sortie, et qui s'occupera de tout ce qui est nécessaire pour le transfert des données, l'adressage du périphérique, etc. Ce petit programme est appelé un driver ou '''pilote de périphérique'''. La « programmation » périphérique est très simple : il suffit de savoir quoi mettre dans les registres, et c'est le pilote qui s'en charge. ==Les architectures Harvard et Von Neumann== Après avoir vu le processeur, les mémoires et les entrées-sorties, voyons voir comment le tout est interconnecté. Tous les ordinateurs ne sont pas organisés de la même manière, pour ce qui est de leurs bus. Mais pour comprendre pourquoi, nous devons regarder qui communique avec qui, dans un ordinateur. Pour rappel, les données sont placées en mémoire RAM, alors que les instructions sont placées en mémoire ROM. Le processeur lit des instructions dans la mémoire ROM, il lit et écrit dans la mémoire RAM, et accède aux registres d’interfaçage des entrées-sorties. Il y a donc besoins de trois interconnexions : CPU-ROM, CPU-RAM et CPU-IO. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] Il parait intéressant d'utiliser trois interconnexions, au minimum CPU-ROM, CPU-RAM et CPU-IO. Néanmoins, faire ainsi a de nombreux désavantages. Déjà, il faut pouvoir brancher tout ça sur le processeur. Et celui-ci n'a pas forcément assez de broches pour. Aussi, il est parfois préférable de mutualiser des bus, à savoir de connecter plusieurs composants sur un même bus. Par exemple, on peut mutualiser le bus pour la mémoire RAM et pour la mémoire ROM. Il faut dire que les deux bus sont des bus mémoire, avec un bus d'adresse, un bus de données, et surtout : des bus de commande similaires. Les mutualiser est alors très simple, et permet d'économiser pas mal de broches. [[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre et une architecture Harvard]] Cette mutualisation nous amène naturellement à parler de la distinction entre les architectures Harvard d'un côté et les architectures Von Neumann de l'autre. Elle est très liée au fait d'utiliser soit un bus mémoire unique, soit des bus séparés pour la ROM et la RAM. Voyons cela en détail. ===Les architectures Harvard et Von Neumann : des bus séparés ou unifiés=== Avec l''''architecture Harvard''', la mémoire ROM et la mémoire RAM sont reliées au processeur par deux bus séparés. Il y a un bus RAM pour la mémoire RAM, un bus ROM pour la mémoire ROM. L'avantage de cette architecture est qu'elle permet de charger une instruction et une donnée simultanément : une instruction chargée sur le bus relié à la mémoire programme, et une donnée chargée sur le bus relié à la mémoire de données. Et cela simplifie fortement la conception du processeur. [[File:Harvard Architecture.png|centre|vignette|upright=2|Architecture Harvard, avec une ROM et une RAM séparées.]] Avec l''''architecture Von Neumann''', mémoire ROM et mémoire RAM sont reliées au processeur par un bus unique. Le bus unique qui relie processeur, RAM et ROM, s'appelle le '''bus mémoire'''. Un défaut de ces architecture est qu'elles ne peuvent pas charger une instruction et une donnée en même temps. Et cela pose quelques problèmes pour la conception du processeur. Par contre, nous verrons dans ce qui suit qu'utiliser un bus mémoire partagé est bien plus flexible et permet des choses que les architectures Harvard ne peuvent pas faire. [[File:Architecture Von Neumann, avec deux bus séparés.png|centre|vignette|upright=2|Architecture Von Neumann, avec deux bus séparés.]] ===Les architectures Harvard et Von Neumann : des espaces d'adressage séparés ou unifiés=== La distinction précédente se base sur les connexions entre RAM, ROM et processeur. Mais il existe une autre distinction, très liée, qui est souvent utilisée comme seconde définition des architectures Harvard/Von Neumann. Elle est liée aux adresses mémoire que le processeur peut gérer. Prenons un processeur 16 bits, par exemple, qui gère naturellement des adresses de 16 bits. Il peut gérer 2^16 adresses, soit 64 kibioctets de mémoire. L'ensemble de ces adresses est appelé un '''espace d'adressage'''. Mais comment cet espace d'adressage est utilisé pour adresser une RAM et une ROM ? Sur les architectures Harvard, le processeur voit deux mémoires séparées avec leur lot d'adresses distinctes. Une même adresse peut donc correspondre soit à la mémoire ROM, soit à la mémoire RAM, suivant le bus utilisé. L'espace d'adressage est donc doublé, dupliqué, avec un pour la ROM, un autre pour la RAM. Rien d'étonnant à cela : il y a deux bus d'adresses, chacun correspondant à un espace d'adressage. [[File:Vision de la mémoire par un processeur sur une architecture Harvard.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Harvard.]] Avec l'architecture Von Neumann, la RAM et la ROM doivent se partager les adresses mémoires disponibles. Il n'y a qu'un seul espace d'adressage qui est coupé en deux, avec une partie pour la ROM et une autre pour la RAM. Une adresse correspond soit à la mémoire RAM, soit à la mémoire ROM, mais pas aux deux. Typiquement, la mémoire ROM occupe une partie des adresses, la mémoire RAM utilise le reste. La répartition des adresses est réalisée par les circuits de décodage d'adresse mentionnés plus haut. [[File:Vision de la mémoire par un processeur sur une architecture Von Neumann.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Von Neumann.]] Les '''architectures Harvard modifiées''' sont des intermédiaires entre architectures Harvard et architectures Von Neumann, bien qu'elles penchent bien plus du côté des architectures Harvard. Précisons que la terminologie n'est pas claire, beaucoup d'auteurs mettent des définitions différentes derrière ces deux termes. Mais dans ce cours, nous utiliserons une définition très stricte de ce qu'est une architecture Harvard modifiée. Une architecture Harvard modifiée est une architecture Harvard, où le processeur peut lire des données constantes depuis la mémoire ROM. Nous avions vu plus haut que les mémoires ROM peuvent mémoriser, en plus d'un programme exécutable, des données constantes, qui ne varient pas. Les architectures Harvard pures ne permettent pas de lire des données de ce genre depuis la mémoire ROM, alors que les architectures Harvard modifiées le permettent. Une architecture Harvard modifiée dispose d'une instruction pour lire les données en mémoire RWM, et d'une instruction pour lire des données en mémoire ROM. Il y a donc deux versions de l'instruction LOAD, qui copient la donnée dans un registre général, mais dont la source de la donnée est différente. Une autre possibilité, plus rare, est que une instruction de copie, qui copie une constante depuis la mémoire ROM vers la mémoire RAM. Le cas le plus commun est l'utilisation de deux instructions LOAD séparées. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Ceci étant dit, revenons à la distinction entre architecture Harvard et Von Neumann. Il faut noter que la RAM et la ROM n'ont pas forcément la même taille. Et ce que ce soit sur une architecture Harvard que sur une architecture Von Neumann, mais c'est plus facile à expliquer sur une architecture Harvard. On peut par exemple imaginer une architecture Harvard qui utilise des adresses de 16 bits pour la ROM, et seulement 8 bits pour la RAM. Le résultat est qu'il peut adresser 64 kibioctets de ROM, mais seulement 256 octets de RAM. Les deux bus d'adresse sont alors de taille différente, l'un faisant 8 bits, l'autre 16. Quelques processeurs 8 bits étaient dans ce cas, comme on le verra dans le chapitre sur les CPU 8bits. Mais d'autres processeurs utilisent des valeurs différentes, avec par exemple des adresses de 16 bits pour la RAM, mais de 20 bits pour la ROM, ou inversement. Sur une architecture Von Neumann, tout dépend de comment les adresses sont réparties. La solution la plus simple découpe l'espace d'adressage en deux parties égales, avec la RAM qui est dans la moitié basse (qui part de l'adresse 0 jusqu'à l'adresse au milieu), alors que la ROM est dans la moitié haute (entre l'adresse du milieu et l'adresse maximale). Mais ce n'est pas la seule possibilité, la limite entre RAM et ROM peut être mise n'importe où. Prenons par exemple un processeur 32 bits, capable de gérer 4 milliards d'adresse. Il est parfaitement possible de réserver 128 mébioctets de poids fort à la mémoire ROM, et de laisser le reste à la mémoire RAM. ===Le décodage d'adresse sur les architectures Von Neumann=== Pour résumer, les architectures Harvard et Von Neumann se distinguent sur deux points : * L'accès à la RAM et à la ROM se font par des bus séparés sur l'architecture Harvard, sur le même bus avec l'architecture Von Neumann. * Les adresses pour la mémoire ROM et la mémoire RAM sont séparées sur les architectures Harvard, partagées sur l’architecture Von Neumann. Les architectures Von Neumann utilisent donc un seul bus pour connecter la RAM et la ROM au processeur. Mais cela ne parait pas intuitif : comment deux composants peuvent se connecter aux mêmes fils ? Parce que c'est ce qu'implique le fait de partager un bus. Si je prends une mémoire RAM et une mémoire ROM, toutes deux de 8 bits, elles seront connectées à un bus mémoire de 8 bits. Intuitivement, on se dit qu'il y aura des conflits, du genre : la RAM et la ROM vont accéder au bus en même temps, comment savoir si une adresse est destinée à la RAM ou la ROM, etc ? Tous ces problèmes sont résolus avec une solution très simple : à chaque instant, seule une mémoire est connectée au bus. L'idée est que les mémoires sont connectées ou déconnectées du bus selon les besoins. Si le processeur veut envoyer lire une donnée en mémoire RAM, il déconnecte la mémoire ROM du bus. Et inversement, s'il veut lire une instruction, il déconnecte la RAM et connecte la ROM. Pour cela, les mémoires RAM et ROM possèdent une entrée ''Chip Select'' ou ''Output Enable'', qui agit comme une sorte de bouton ON/OFF. Lorsqu'on met un 1 sur cette entrée, la mémoire se connectera au bus. Ses entrées et sorties fonctionneront normalement, elle pourra recevoir des adresses, envoyer ou recevoir des données, tout sera normal. Par contre, si on met un 0 sur cette entrée, la mémoire se "désactive", ses entrée-sorties ne répondent plus aux sollicitations extérieures. Pire que ça : elles sont électriquement déconnectées. Au total, tout cela demande de gérer deux bit ''Chip Select''/''Output Enable'' : un pour la RAM, un pour la ROM. Et ces deux bits sont configurés pour chaque accès mémoire, pour chaque lecture ou écriture. Pour cela, un circuit de '''décodage d'adresse''' prend en entrée l'adresse mémoire à lire/écrire, et active/désactive les mémoires RAM/ROM selon les besoins. Il prend l'adresse et configure les bits ''Chip Select''/''Output Enable''. [[File:Décodage d'adresse sur une architecture Von Neumann.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann.]] L'implémentation la plus simple réserve la moitié des adresses pour la RAM, l'autre moitié pour la ROM. Typiquement, la ROM prend la moitié basse, la RAM la moitié haute. Dans ce cas, activer/désactiver la RAM et la ROM se fait avec seulement le bit de poids fort de l'adresse. Si le bit de poids fort est à 1, alors on accède à la RAM et la ROM doit être désactivée. Mais si ce bit est à 0, alors on accède à la moitié basse et il faut désactiver la RAM. Une remarque intéressante : le fait de séparer la mémoire en deux parts égales permet de simuler une architecture Harvard à partir d'une architecture Von Neumann. Par exemple, le tout premier processeur d'Intel, le 4004, était l'un de ceux là. La RAM et la ROM sont reliés au même bus, et il y a donc un unique espace d'adressage, qui est séparé en deux parties égales. Le truc est que le processeur traite les deux parties égales comme deux espaces d'adressage séparés. Le processeur se débrouille pour cacher le fait qu'il y a un espace d'adressage unique coupé en deux, ce qui fait que les programmeurs voient bien deux espaces d'adressages distincts. [[File:Décodage d'adresse sur une architecture Von Neumann basique.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann basique.]] Pour résumer, quand une adresse est envoyée sur le bus, les deux mémoires vont la recevoir mais une seule va répondre et se connecter au bus. Le décodage d'adresse garantit que seule la mémoire adéquate réponde à un accès mémoire. Le décodage d'adresse est réalisé par la carte mère, par un composant dédié. Le mécanisme peut être utilisé pour combiner plusieurs RAM en une seule, idem avec les ROM. Pour comprendre l'idée, je vais prendre l'exemple de l'IBM PC, un des tout premier PC existant. Nous étudierons ce PC dans une section dédiée, à la fin du chapitre, aussi je vais passer rapidement dessus. Tout ce que je vais faire est vous présenter la carte mère du PC, et vous demander de faire est de compter les mémoires ROM et mémoires RAM sur la carte mère : [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] Si vous remarquerez qu'il y a 5 mémoires ROM et 8 à 32 mémoires RAM. Le fait est que le processeur voit les différentes mémoires ROM comme une seule mémoire ROM. Idem avec les mémoires RAM : elle font chacune 2 kibioctets, et l'ensemble est vu par le processeur comme une seule RAM de 16 à 64 kibioctets. Et cela grâce aux circuits de décodage d'adresse, qui sont situés en haut à droite de la carte mère. Pour comprendre l'idée, prenons l'exemple d'un processeur 16 bits, capable de gérer 64 kibioctets de mémoire. L'espace d'adressage est découpé en quatre portions, de 16 kibioctets chacune. Une portion est réservée à une ROM de 16 kibioctet, les autres sont chacune réservée à une RAM de 16 kibioctet. Le décodage d'adresse sélectionne alors la mémoire adéquate en utilisant les deux bits de poids fort de l'adresse. * S'ils valent 00, alors c'est la mémoire ROM qui est activée, connectée au bus. * S'ils valent 01, alors c'est la première mémoire RAM qui est connectée au bus. * S'ils valent 10, alors c'est la seconde mémoire RAM qui est connectée au bus. * S'ils valent 11, alors c'est la troisième mémoire RAM qui est connectée au bus. [[File:Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM.png|centre|vignette|upright=3|Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM]] ===L'impact sur la conception du processeur=== Plus haut, j'ai parlé d'un des avantages des architectures Harvard : elles peuvent lire une instruction en même temps qu'elles accèdent à une donnée. La donnée est lue/écrite en RAM, alors que l'instruction est lue en ROM. Et cela permet de simplifier l'intérieur du processeur. Pas de beaucoup, mais c'est déjà ça de pris. Voyons maintenant comment cela impacte l'intérieur du processeur. Tout ce dont vous avez à vous rappeler est la séparation entre chemin de données et unité de contrôle, et que les registres généraux sont dans le premier, le ''program counter'' dans la seconde. Avec une architecture Harvard, les instructions et les données passent par des bus différent : bus ROM pour les instructions, bus RAM pour les données. L'intuition nous dit que le bus pour la mémoire ROM est connecté à l'unité de contrôle, alors que le bus pour la RAM est connecté au chemin de données. Et dans les grandes lignes, c'est vrai. La logique est imparable pour ce qui est des bus de données. Mais il y a une petite subtilité pour les bus d'adresse. Pour comprendre comment le processeur exploite ces deux bus, voyons ce qui transite dessus. Pour la mémoire ROM, elle reçoit l'adresse de l'instruction à lire, elle renvoie l'instruction adéquate. Pour cela, le ''program counter'' est envoyé sur le bus d'adresse, l'instruction sur le bus de données. Pour la mémoire RAM, elle échange des données avec les registres généraux, les registres pour les données. Les adresses utilisées pour la RAM viennent elles soit du chemin de données, soit de l'unité de contrôle, tout dépend du mode d'adressage. Mais le ''program counter'' n'est pas impliqué. [[File:Architecture Harvard - échanges de données.png|centre|vignette|upright=2|Architecture Harvard - échanges de données]] Les architectures Harvard modifiées doivent cependant rajouter une connexion entre le bus ROM et les registres généraux. C'est nécessaire pour charger une donnée constante depuis la mémoire ROM. Rappelons que la donnée constante est copiée dans un registre général, donc dans le chemin de données. [[File:Architecture Harvard modifiée - implémentation du processeur.png|centre|vignette|upright=2|Architecture Harvard modifiée - implémentation du processeur]] Avec les architectures Von Neumann, il y a un seul bus qui est relié à la fois au chemin de données et à l'unité de contrôle. Si le processeur lit une instruction, le bus doit être relié à l'unité de contrôle. Par contre, s'il accède à une donnée, il doit être relié au chemin de données (le bus d'adresse peut éventuellement être connecté au séquenceur, si celui-ci fournit l'adresse à lire). Il faut donc utiliser un paquet de multiplexeurs et de démultiplexeurs pour faire la connexion au bon endroit. [[File:Architecture Von Neumann - implémentation du processeur.png|centre|vignette|upright=2|Architecture Von Neumann - implémentation du processeur]] Une instruction se fait en deux temps : on charge l'instruction depuis la mémoire ROM, puis on l'exécute. Avec une architecture Harvard, tout cela se fait en un seul cycle d'horloge, vu que charger la ROM et accéder aux données peut se faire en même temps. Pas avec les architectures Von Neumann, qui doivent libérer le bus mémoire après avoir chargé une instruction. Elles n'ont pas le choix : elles chargent l'instruction lors d'un premier cycle d'horloge, puis l'exécutent lors du second. Pour cela, ils incorporent un registre appelé le '''registre d'instruction''', qui mémorise l'instruction chargée. L'instruction est copiée dans ce registre lors du premier cycle, puis est utilisée lors du second cycle. Le registre permet de ne pas oublier l’instruction entre les deux cycles. Le registre d'instruction est obligatoire sur les architectures Von Neumann. En comparaison, il est facultatif sur les architectures Harvard. Elles peuvent en avoir un, pour des raisons techniques, mais ce n'est pas obligatoire. [[File:Registre d'instruction.png|centre|vignette|upright=2|Registre d'instruction.]] ===Les architectures Von Neumann sont plus flexibles=== Sur les architectures Harvard, le processeur sait faire la distinction entre programme et données. Les données sont stockées dans la mémoire RAM, le programme est stocké dans la mémoire ROM. Les deux sont séparés, accédés par le processeur sur des bus séparés, et c'est ce qui permet de faire la différence entre les deux. Il est impossible que le processeur exécute des données ou modifie le programme. Du moins, tant que la mémoire qui stocke le programme est bien une ROM. Par contre, sur les architectures Von Neumann, il est impossible de distinguer programme et données, sauf en ajoutant des techniques de protection mémoire avancées. La raison est qu'il est impossible de faire la différence entre donnée et instruction, vu que rien ne ressemble plus à une suite de bits qu'une autre suite de bits. Et c'est à l'origine d'un des avantages majeur de l'architecture Von Neumann : il est possible que des programmes soient copiés dans la mémoire RWM et exécutés dans celle-ci. Un cas d'utilisation familier est celui de votre ordinateur personnel. Le système d'exploitation et les autres logiciels sont copiés en mémoire RAM à chaque fois que vous les lancez. Mais cet exemple implique un disque dur, ce qui rend les choses plus compliquées que prévu. Un autre exemple serait la compilation de code à la volée, mais il ne sera pas très parlant. Un exemple plus adapté serait celui où la ROM mémorise un programme compressée dans la mémoire ROM, qui est décompressé pour être exécuté en mémoire RAM. Le programme de décompression est stocké en mémoire ROM et est exécuté au lancement de l’ordinateur. Cette méthode permet d'utiliser une mémoire ROM très petite et très lente, tout en ayant un programme rapide (si la mémoire RWM est rapide). Il est aussi possible de créer des programmes qui modifient leurs propres instructions : cela s'appelle du '''code auto-modifiant'''. Ce genre de choses servait autrefois sur des ordinateurs rudimentaires, au tout début de l'informatique. À l'époque, les adresses à lire/écrire devaient être écrites en dur dans le programme, dans les instructions exécutées. Pour gérer certaines fonctionnalités des langages de programmation qui ont besoin d'adresses modifiables, comme les tableaux, on devait corriger les adresses au besoin avec du code auto-modifiant. De nos jours, le code automodifiant est utilisée occasionnellement pour rendre un programme indétectable dans la mémoire (les virus informatiques utilisent beaucoup ce genre de procédés). L'impossibilité de séparer données et instructions est à l'origine de problèmes assez fâcheux. Il est parfaitement possible que le processeur charge et exécute des données, qu'il prend par erreur pour des instructions. C'est le cas quand des pirates informatiques arrivent à exploiter des bugs. Il arrive que des pirates informatiques vous fournissent des données corrompues, qui contiennent un virus ou un programme malveillant est caché dans les données. Les bugs en question permettent d'exécuter ces données, donc virus. Pour éviter cela, le système d'exploitation peut marquer certaines zones de la mémoire comme non-exécutable, c’est-à-dire que le système d'exploitation interdit d’exécution de quoi que ce soit qui est dans cette zone. Mais ce n'est pas parfait. Toujours est-il que tout cela est impossible sur les architectures Harvard. Et ce serait très limitant. Imaginez : pas possible de lancer un programme depuis le disque dur ou une clé USB, le programme doit impérativement être dans une mémoire ROM, pas de compilation à la volée, etc. Que des techniques très utilisées dans l'informatique moderne. Malgré ses défauts, les architectures Von Neumann ne sont pas les plus utilisées pour rien. Les architectures Harvard sont concrètement utilisées uniquement dans l'informatique embarquée, sur des microcontrôleurs très spécifiques. ==Le bus de communication avec les entrées-sorties== Le processeur, la mémoire et les entrées-sorties sont connectées par un ou plusieurs '''bus de communication'''. Ce bus n'est rien d'autre qu'un ensemble de fils électriques sur lesquels on envoie des zéros ou des uns. Pour communiquer avec la mémoire, il y a trois prérequis qu'un bus doit respecter : pouvoir sélectionner la case mémoire (ou l'entrée-sortie) dont on a besoin, préciser à la mémoire s'il s'agit d'une lecture ou d'une écriture, et enfin pouvoir transférer la donnée. Pour cela, on doit donc avoir trois bus spécialisés, bien distincts, qu'on nommera le bus de commande, le bus d'adresse, et le bus de donnée. * Le '''bus de données''', sur lequel s'échangent les données entre les composants. * Le '''bus de commande''' pour configurer la mémoire et les entrées-sorties. * Le '''bus d'adresse''', facultatif, permet de préciser quelle adresse mémoire il faut lire/écrire. Chaque composant possède des entrées séparées pour le bus d'adresse, le bus de commande et le bus de données. Par exemple, une mémoire RAM possédera des entrées sur lesquelles brancher le bus d'adresse, d'autres sur lesquelles brancher le bus de commande, et des broches d'entrée-sortie pour le bus de données. Précisons cependant que le bus de commande n'est pas exactement le même entre des mémoires RAM/ROM et des entrées-sorties. [[File:Bus general schematic.svg|centre|vignette|upright=2|Contenu d'un bus, généralités.]] ===Le réseau d'interconnexion : généralités=== Reprenons où nous nous étions arrêté. Avant de voir les architectures Harvard et Von Neumann, nous avions dit que le processeur, les mémoires et les entrées-sorties sont reliées entre eux par un réseau d'interconnexion. Nous venons de voir qu'il est possible de mutualiser certains bus, notamment celui de la mémoire RAM et celui de la mémoire ROM. Mais il est possible de faire la même chose pour les entrées-sorties. Là encore, il est possible de regrouper le bus mémoire avec les bus pour les entrées-sorties. Voyons ce que cela implique. {| |[[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec une architecture Harvard.]] |[[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Interconnexions d'une architecture Von Neumann.]] |} Avant de poursuivre, nous devons préciser quelque chose d'important. Sur les ordinateurs modernes, les entrées-sorties peuvent accéder à la mémoire RAM. Les ordinateurs modernes intègrent des techniques de '''''Direct Memory Access''''' (DMA) qui permettent aux entrées-sorties de lire ou d'écrire en mémoire RAM. Les transferts DMA se font sans intervention du processeur. Ils permettent de copier un bloc de plusieurs octets, dans deux sens : de la mémoire RAM vers une entrée-sortie, ou inversement. Le DMA demande d'ajouter un circuit dédié sur la carte mère : le contrôleur DMA. Il effectue la copie d'un paquet d'octets de la RAM vers l'entrée-sortie ou dans l'autre sens. [[File:Réseau d'interconnexion avec un processeur au centre, et direct memory access.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre, et direct memory access]] ===Les bus systèmes=== La première solution utilise un bus unique, celui-ci est appelé le '''bus système''', aussi appelé ''backplane bus''. Le bus système est connecté à la mémoire RAM, la mémoire ROM, au processeur, et aux entrées-sorties. Tous les composants présents dans l'ordinateur sont connectés à ce bus, sans exception. De tels bus avaient pour avantage la simplicité. Le processeur n'est connecté qu'à un seul bus, ce qui utilise peu de broches et économise des fils. La mutualisation des bus est totale, le câblage est plus simple, la fabrication aussi. [[File:Architecture minimale d'un ordinateur.png|centre|vignette|upright=2|Architecture minimale d'un ordinateur.]] Un bus système contient un bus d'adresse, de données et de commande. Un bus système se marie bien avec des entrées-sorties mappées en mémoire. La conséquence est que le bus d'adresse ne sert pas que pour l'accès à la mémoire RAM/ROM, mais aussi pour l'accès aux entrées-sorties. Il y a moyen d'implémenter un système d'adresse séparés avec, mais c'est pas l'idéal. [[File:Architecture Von Neumann avec les bus.png|centre|vignette|upright=2|Architecture Von Neumann avec les bus.]] Un bus système n'a pas de limitations quant aux échanges de données. Le processeur peut communiquer directement avec les mémoires et les entrées-sorties, les entrées-sorties peuvent communiquer avec la mémoire RAM, etc. Notamment, un bus système peut implémenter le ''Direct Memory Access''. Il suffit juste de connecter un contrôleur DMA sur le bus système. Le contrôleur DMA est considéré comme une entrée-sortie, ses registres sont mappés en mémoire et sont donc accessibles directement par le processeur. [[File:Bus système avec controleur DMA.png|centre|vignette|upright=2|Bus système avec contrôleur DMA.]] Si on suit la définition à la lettre, un bus système est systématiquement une architecture Von Neumann, vu que la mémoire ROM et la mémoire RAM sont reliées sur le bus système. La conséquence est que les circuits de décodage d'adresse sont présents. Ils sont toujours sur la carte mère, et sont plus ou moins à côté du bus système. Cependant, le décodage d'adresse est parfois étendu pour tenir compte des entrées-sorties. Les entrées-sorties soudées sur la carte mère ont elles aussi des entrées ''Chip Select'' ou quelque chose de similaire. Le décodage d'adresse peut alors les activer ou les désactiver suivant l'adresse envoyée sur le bus d'adresse. C'est ce qui arrive quand le processeur écrit dans un registre d’interfaçage : il envoie l'adresse de ce registre sur le bus d'adresse, le circuit de décodage d'adresse active seulement l'entrée-sortie associée. Il faut noter que ce n'est pas systématique, il existe des techniques pour se passer de décodage d'adresse. Mais nous en reparlerons dans le chapitre sur les bus de communication. [[File:Chipselectfr.png|centre|vignette|upright=1.5|Exemple détaillé.]] Les bus systèmes sont certes très simples, mais ils ont aussi des désavantages. Par exemple, il faut éviter que le processeur et les entrées-sorties se marchent sur les pieds, ils ne peuvent pas utiliser le bus en même temps. De tels conflits d'accès au bus système sont fréquents et ils réduisent la performance, comme on le verra dans le chapitre sur les bus. De plus, un bus système a le fâcheux désavantage de relier des composants allant à des vitesses très différentes : il arrivait fréquemment qu'un composant rapide doive attendre qu'un composant lent libère le bus. Le processeur était le composant le plus touché par ces temps d'attente. Elle était utilisée sur les tout premiers ordinateurs, pour sa simplicité. Elle était parfaitement adaptée aux anciens composants, qui allaient tous à la même vitesse. De nos jours, les ordinateurs à haute performance ne l'utilisent plus trop, mais elle est encore utilisée sur certains systèmes embarqués, en informatique industrielle dans des systèmes très peu puissants. ===Les bus d'entrées-sorties=== Les bus systèmes ont de nombreux problèmes, ce qui fait que d'anciens ordinateurs faisaient autrement. À la place d'un bus système unique, ils utilisent un bus séparé pour les mémoires, et un autre séparé pour les entrées-sorties. Le bus spécialisé pour la mémoire est appelé le '''bus mémoire''', l'autre bus est appelé le '''bus d'entrées-sorties'''. Le bus mémoire est généralement relié à la fois à la mémoire RAM et à la mémoire ROM, les exceptions ne sont pas rares, cependant. [[File:Bus mémoire séparé du bus pour les IO.png|centre|vignette|upright=2|Bus mémoire séparé du bus pour les IO]] Les bus d'entrée-sorties peuvent être spécialisés et simplifiés. Par exemple, ils peuvent avoir un bus de commande différent de celui de la mémoire, qui utilise nettement moins de fils. Le bus d'adresse peut aussi être réduit, et utiliser des adresses plus courtes que celles du bus mémoire. Les bus de données peuvent aussi être de taille différentes. Il est ainsi possible d'avoir un bus mémoire capable de lire/écrire 64 bits à la fois, alors que la communication avec les entrées-sorties se fait octet par octet ! En général, les bus d'entrée-sortie sont assez petits, ils ont une taille de 8 ou 16 bits, même si le bus mémoire est plus grand. Cela permet de ne pas gaspiller trop de broches. Ajouter un bus d'entrée-sortie n'est donc pas très gourmand en broches et en fils. : Il est en théorie possible d'avoir une fréquence différente pour les deux bus, avec un bus mémoire ultra-rapide et un bus pour les entrées-sorties est un bus moins rapide. Mais il faut que le processeur soit prévu pour, et c'est très rare. Niveau performances, le processeur peut théoriquement accéder à la mémoire en attendant qu'une entrée/sortie réponde, mais il faut que le processeur soit prévu pour, et ce n'est pas de la tarte. Par contre, cela implique d'avoir des adresses séparées pour les registres d’interfaçage et la mémoire. En clair : pas d'entrée-sortie mappée en mémoire ! Un autre problème est que les entrées-sorties ne peuvent pas communiquer avec la mémoire directement, elles doivent passer par l'intermédiaire du processeur. En clair : pas de ''Direct Memory Access'' ! Les deux sont des défauts rédhibitoires pour les programmeurs système, notamment pour ceux qui codent les pilotes de périphériques. Pour résumer, les défauts sont assez problématiques : pas d'entrées-sorties mappées en mémoire, pas de ''Direct Memory Access'', économie de broches limitée. Les deux premiers sont des défauts majeurs, qui font que de tels bus ne sont pas utilisés dans les ordinateurs modernes. À la place, ils utilisent une troisième solution, distincte des bus systèmes et des bus d'entrée-sorties. ===Les bus avec répartiteur=== Il existe une méthode intermédiaire, qui garde deux bus séparés pour la mémoire et les entrées-sorties, mais élimine les problèmes de brochage sur le processeur. L'idée est d'intercaler, entre le processeur et les deux bus, un '''circuit répartiteur'''. Il récupère tous les accès et distribue ceux-ci soit sur le bus mémoire, soit sur le bus des périphériques. Le ou les répartiteurs s'appellent aussi le '''''chipset''''' de la carte mère. C'était ce qui était fait à l'époque des premiers Pentium. À l'époque, la puce de gestion du bus PCI faisait office de répartiteur. Elle mémorisait des plages mémoires entières, certaines étant attribuées à la RAM, les autres aux périphériques mappés en mémoire. Elles utilisaient ces plages pour faire la répartition. [[File:IO mappées en mémoire avec séparation des bus.png|centre|vignette|upright=2|IO mappées en mémoire avec séparation des bus]] Niveau adresses des registres d'interfacage, il est possible d'avoir soit des adresses unifiées avec les adresses mémoire, soit des adresses séparées. L'usage d'un répartiteur ne pose pas de problèmes particuliers pour implémenter le DMA. La seule contrainte est que le contrôleur DMA soit intégré dans le répartiteur. Les échanges entre IO et mémoire passent par le répartiteur, qui fait le pont entre bus mémoire et bus des IO. [[File:Implémentation du DMA avec un répartiteur.png|centre|vignette|upright=2|Implémentation du DMA avec un répartiteur]] ==Les microcontrôleurs et ''system on chip''== Parfois, on décide de regrouper la mémoire, les bus, le CPU et les ports d'entrée-sortie dans un seul circuit intégré, un seul boitier. L'ensemble forme alors ce qu'on appelle un '''''System on Chip''''' (système sur une puce), abrévié en SoC. Le nom est assez explicite : un SoC comprend un système informatique complet sur une seule puce de silicium, microprocesseurs, mémoires et périphériques inclus. Ils incorporent aussi des ''timers'', des compteurs, et autres circuits très utiles. [[File:ARMSoCBlockDiagram.svg|centre|vignette|upright=2|SoC basé sur un processeur ARM, avec des entrées-sorties typiques de celles d'un µ-contrôleur. Le support du bus CAN, d'Ethernet, du bus SPI, d'un circuit de PWM (génération de signaux spécifiques), de convertisseurs analogique-digital et inverse, sont typiques des µ-contrôleurs.]] Le terme SoC regroupe des circuits imprimés assez variés, aux usages foncièrement différents et à la conception distincte. Les plus simples d’entre eux sont des microcontrôleurs, qui sont utilisés pour des applications à base performance. Les plus complexes sont utilisés pour des applications qui demandent plus de puissance, nous les appellerons SoC haute performance. La relation entre SoC et microcontrôleurs est assez compliquée à expliquer, la terminologie n'est pas clairement établie. Il existe quelques cours/livres qui séparent les deux, d'autres qui pensent que les deux sont très liés. Dans ce cours, nous allons partir du principe que tous les systèmes qui regroupent processeur, mémoire et quelques périphériques/entrées-sorties sont des SoC. Les microcontrôleurs sont donc un cas particulier de SoC, en suivant cette définition. ===Les microcontrôleurs=== Les '''microcontrôleurs''' sont des composants utilisés dans l'embarqué ou d'informatique industrielle. Leur nom trahit leur rôle. Ils sont utilisés pour contrôler de l'électroménager, des chaines de fabrication dans une usine, des applications robotiques, les alarmes domestiques, les voitures. De manière générale, on les trouve dans tous les systèmes dits embarqués et/ou temps réel. Ils ont besoin de s'interconnecter à un grand nombre de composants et intègrent pour cela un grand nombre d'entrée-sorties. Les microcontrôleurs sont généralement peu puissants, et doivent consommer peu d'énergie/électricité. Fait amusant, on en trouve dans certains périphériques informatiques. Par exemple, les anciens disques durs intégraient un microcontrôleur qui contrôlait plusieurs moteurs/ Les moteurs pour faire tourner les plateaux magnétiques et les moteurs pour déplacer les têtes de lecture/écriture étaient commandés par ce microcontrôleur. Comme autre exemple, les claviers d'ordinateurs intègrent un microcontrôleur connecté aux touches, qui détecte quand les touches sont appuyées et qui communique avec l'ordinateur. Nous détaillerons ces deux exemples dans les chapitres dédiés aux périphériques et aux disques durs, tout deviendra plus clair à ce moment là. La majorité des périphériques ou des composants internes à un ordinateur contiennent des microcontrôleurs. Un microcontrôleur tend à intégrer des entrées-sorties assez spécifiques, qu'on ne retrouve pas dans les SoC destinés au grand public. Un microcontrôleur est typiquement relié à un paquet de senseurs et son rôle est de commander des moteurs ou d'autres composants. Et les entrées-sorties intégrées sont adaptées à cette tâche. Par exemple, ils tendent à intégrer de nombreux convertisseurs numériques-analogiques pour gérer des senseurs. Ils intègrent aussi des circuits de génération de signaux PWM spécialisés pour commander des moteurs, le processeur peut gérer des calculs trigonométriques (utiles pour commander la rotation d'un moteur), etc. [[File:C8051F340-9 A B C D.png|centre|vignette|upright=2|Exemple d'entrées-sorties intégrées à un microcontroleur.]] En plus des entrées-sorties intégrées, les microcontrôleurs ont souvent des '''ports d'entrées-sorties''' banalisés, à savoir qu'on peut brancher n'importe quoi dessus. Il était possible de brancher un capteur de température, un moteur à commander, un port série, un port parallèle, un écran, un clavier, une souris, peu importe. Les ports font souvent un octet et ils sont généralement reliées directement ou indirectement au processeur. Le logiciel qui s'exécute sur le processeur décide quoi envoyer sur des broches et comment interprète ce qui est reçu dessus. Les ports banalisés de ce type sont parfois appelés des '''GPIO''', abréviation de ''General Purpose Input/Output'', mais nous utiliserons le terme de ''port I/O''. Un port regroupe plusieurs broches qui peuvent être utilisés à volonté. C'est le logiciel qui s'exécute sur le processeur qui décide de la fonction de broches. Un port IO peut fonctionner soit en tant qu'entrée, soit en tant que sortie. Il est possible de changer de sens en cours de fonctionnement, pour passer d'une entrée à une sortie ou inversement. [[File:Afficheurs7seg.png|centre|vignette|upright=2|Exemple d'utilisation d'un port I/O. le port est connecté à un afficheur LCD dit 7-segments. Les 8 entrées de cet afficheur sont connectées à un port I/O d'un octet.]] ===Les SoC haute performance=== Les SoC les plus performants sont actuellement utilisés dans les téléphones mobiles, tablettes, ''Netbook'', ''smartphones'', ou tout appareil informatique grand public qui ne doit pas prendre beaucoup de place. La petite taille de ces appareils fait qu'ils gagnent à regrouper toute leur électronique dans un circuit imprimé unique. Mais les contraintes font qu'ils doivent être assez puissants. Ils incorporent des processeurs assez puissants, surtout ceux des ''smartphones''. C'est absolument nécessaire pour faire tourner le système d'exploitation du téléphone et les applications installées dessus. Niveau entrées-sorties, ils incorporent souvent des interfaces WIFI et cellulaires (4G/5G), des ports USB, des ports audio, et même des cartes graphiques pour les plus puissants d'entre eux. Les SoC incorporent des cartes graphiques pour gérer tout ce qui a trait à l'écran LCD/OLED, mais aussi pour gérer la caméra, voire le visionnage de vidéo (avec des décodeurs/encodeurs matériel). Par exemple, les SoC Tegra de NVIDIA incorporent une carte graphique, avec des interfaces HDMI et VGA, avec des décodeurs vidéo matériel H.264 & VC-1 gérant le 720p. Pour résumer, les périphériques sont adaptés à leur utilisation et sont donc foncièrement différents de ceux des microcontrôleurs. [[File:SOMblk.png|centre|vignette|upright=3|Exemple de SoC.]] Un point important est que les processeurs d'un SoC haute performance sont... performants. Ils sont le plus souvent des processeurs de marque ARM, qui sont différents de ceux utilisés dans les PC fixe/portables grand public qui sont eux de type x86. Nous verrons dans quelques chapitres en quoi consistent ces différences, quand nous parlerons des jeux d'instruction du processeur. Autrefois réservé au monde des PCs, les processeurs multicœurs deviennent de plus en plus fréquents pour les SoC de haute performance. Il n'est pas rare qu'un SoC incorpore plusieurs cœurs. Il arrive même qu'ils soient foncièrement différents, avec plusieurs cœurs d'architecture différente. La frontière entre SoC haute performance et microcontrôleur est de plus en plus floue. De nombreux appareils du quotidien intègrent des SoC haute performance, d'autres des microcontrôleurs. Par exemple, les lecteurs CD/DVD/BR et certains trackers GPS intègrent un SoC ou des processeurs dont la performance est assez pêchue. À l'opposé, les systèmes domotiques intègrent souvent des microcontrôleurs simples. Malgré tout, les deux cas d'utilisation font que le SoC/microcontrôleur est connecté à un grand nombre d'entrées-sorties très divers, comme des capteurs, des écrans, des LEDs, etc. [[File:GPS tracker Hardware Architecture.png|centre|vignette|upright=2|Hardware d'un tracker GPS.]] ==Étude de l'architecture de quelques consoles de jeu== Après avoir vu la théorie, nous allons voir des exemples réels d'ordinateurs. Dans ce qui suit, nous allons voir des ordinateurs qui collent assez bien à l''''architecture de base''' vue plus haut, avec un CPU, une RAM et une ROM, quelques entrées-sorties. Tous les ordinateurs modernes, mais aussi dans les smartphones, les consoles de jeu et autres, utilisent une architecture grandement modifiée et améliorée, avec un grand nombre de périphériques, des disques durs/SSD, un grand nombre de mémoires différentes, etc. Il pourrait sembler pertinent d’étudier des microcontrôleurs ou des ''System On Chip'', en premier lieu. Mais nous éviterons soigneusement de tels systèmes pour le moment. La raison est qu'ils ont un grand nombre d'entrées-sorties, qui sont peu familières. Attendez-vous à avoir près d'une vingtaine ou centaine d'entrée-sorties différentes pour de tels systèmes. Le tout est très complexe, bien trop pour un premier exemple. À la place, nous allons voir précisément des exemples plus simples : les premiers PC, et des consoles de jeu 8 et 16 bits. Bien que ce soit des systèmes très simples, ils sont cependant plus complexes que l'architecture de base. Et leur avantages/désavantages sont un peu inverse l'un de l'autre. Si on devait résumer les différences, on aurait ceci : * Les PC ont plus d'entrées-sorties que les consoles, bien que nettement moins que pour les microcontrôleurs/SoC. * Les PC utilisent des disques durs, les consoles font avec soit des cartouches de jeu, soit des CD/DVD. * Les PC utilisent des cartes électroniques séparées pour le son et l'écran, les consoles utilisent des circuits soudés sur la carte mère, qui sont souvent des co-processeurs. * Les PC ont une mémoire ROM soudées sur la carte mère, les consoles 8 bits font sans. Les PC et micro-ordinateurs ont plus d'entrées-sorties que les consoles. Même si on mets de côté les périphériques, ils ont aussi beaucoup d'entrées-sorties soudées sur la carte mère. En comparaison, les consoles de jeu 8/16 bits se débrouillent avec : une cartouche de jeu et une manette en entrée, une sortie vidéo et une sortie son. Un autre point important est l'absence de disque dur ou de lecteur CD. La présence d'un disque dur ou d'un lecteur CD/DVD complexifie tout de suite l'architecture des PC. Il faut leur réserver un bus dédié ou les connecter à un bus système, ajouter des circuits sur la carte mère, etc. Et surtout, il faut expliquer comment l'ordinateur exécute des programmes, ce qui demande de parler de l'interaction avec le disque dur et la ROM du BIOS. Rien de tout cela sur les consoles de jeu 8 et 16 bits. Elles utilisent à la place une mémoire ROM, dans la cartouche de jeu, pour mémoriser le code du jeu. Pas besoin de parler des mémoires de stockage, on est beaucoup plus proche de l'architecture de base avec une ROM unique. Autre différence : les PC utilisent des cartes électroniques à brancher sur la carte mère pour alimenter l'écran et les hauts-parleurs/casques, alors que les consoles de jeu utilisent des co-processeurs dédiés pour le son et les graphismes. Nous avons déjà expliqué ce que sont les co-processeurs plus haut, aussi les co-processeurs des consoles nous paraitrons familiers. On n'a pas à s’embêter à expliquer ce que sont les cartes d'extension, les bus associés et tout ce qui va avec, cela peut être retardé pour la section sur l'architecture des PC. Par contre, n'allez pas croire que tout est rose avec les consoles 8/16 bits. Il y a quelques différences qui font qu'elles sont plus complexes qu'un PC sur certains points. La gestion de la cartouche de jeu est notamment un peu subtile à comprendre, bien que ce soit bien plus simple à comprendre qu'un système avec un disque dur. Les cartouches de jeu intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Et le processeur doit exécuter le code depuis cette mémoire ROM. La conséquence est que les consoles 8/16 bits utilisent une architecture Harvard, avec un bus relié à la cartouche pour lire les instructions. Mais si ce n'était que ça... Les cartouches mémorisent aussi les données pour les graphismes, ce qui fait que le co-processeur vidéo doit lui aussi lire la cartouche pour récupérer ces données... ===L'architecture de la TurboGraphX-16=== La console PC Engine, aussi appelée TurboGraphX, est une ancienne console 8 bits. Elle contient un processeur 65C02, 8 kibioctets de RAM, un port manettes, une carte son et une carte vidéo. La '''carte son''' est le composant qui s'occupe de commander les haut-parleurs et de gérer tout ce qui a rapport au son. La '''carte graphique''' est le composant qui est en charge de calculer les graphismes, tout ce qui s'affiche à l'écran. Sur cette console, les cartes son et graphique ne sont PAS des co-processeurs, ce sont des circuits électroniques dits fixes. C'est totalement différent de ce qu'on a sur les consoles modernes, aussi le préciser est important. Bien que la carte graphique ne soit pas un processeur, elle a 64 kibioctets de RAM rien que pour elle. La RAM en question est séparée de la RAM normale, c'est un circuit intégré séparé. Et c'est un cas très fréquent, qui reviendra par la suite. La majeure partie des cartes graphiques dispose de leur propre '''mémoire vidéo''', totalement réservée à la carte graphique. La RAM vidéo est connectée à la carte graphique via un bus séparé. Le processeur est souvent connecté à ce bus, afin de pouvoir écrire des données dedans, mais ce n'est pas le cas ici. [[File:Architecture de la PC Engine, aussi appelée TurboGrafx-16.png|centre|vignette|upright=2.5|Architecture de la PC Engine, aussi appelée TurboGrafx-16]] L'architecture de la console était particulièrement simple. Le processeur était le centre de l'architecture, tout était connecté dessus. Il y a un bus pour la cartouche de jeu, un autre pour la RAM, un autre pour les manettes, un autre pour carte son, et un dernier pour la carte graphique. Le fait d'avoir un bus par composant est assez rare et ce n'est le cas ici que parce des conditions particulières sont remplies. Déjà, il y a peu d'entrée-sorties. Ensuite, les bus font tous 8 bits, vu que le processeur est un CPU 8 bits. Avec 5 connexions de 8 bits, le tout utilise 40 broches, ce qui est beaucoup, mais totalement gérable. Par contre, les choses changerons pour les autres consoles. Au final, l'organisation des bus peut s'expliquer avec ce qu'on a vu dans la section sur les bus de communication. La console utilise une architecture Harvard, car la ROM et la RAM utilisent des bus différents. De plus, il y a des bus dédiés aux entrées-sorties, séparés des bus mémoire. Enfin, la carte graphique a droit à ses propres bus pour lire dans la cartouche et dans sa RAM vidéo dédiée. ===L'architecture de la console de jeu NES=== Maintenant, nous allons voir la console de Jeu Famicom, aussi appelée la NES en occident. Elle a une architecture centrée sur un processeur Ricoh 2A03, similaire au processeur 6502, un ancien processeur autrefois très utilisé et très populaire. Le processeur est associé à 2 KB de mémoire RAM. Sur certaines cartouches, on trouve une RAM utilisée pour les sauvegardes, qui est adressée par le processeur directement. Première variation par rapport à l'architecture de la console précédente : l'ajout de la RAM pour les sauvegardes dans les cartouches. Niveau carte graphique, une différence importante est que la carte graphique est connectée à la cartouche de jeu via un autre bus, afin de pouvoir lire les sprites et textures du jeu dans la cartouche. [[File:Architecture de la NES.png|centre|vignette|upright=2.5|Architecture de la NES]] La différence avec l'architecture précédente est que des bus ont été fusionnés. Comme dit plus haut, le système utilise une architecture Harvard, vu que la ROM est dans la cartouche, alors que la RAM est soudée à la carte mère. Par contre, la Famicon utilise un bus dédié aux entrées-sorties. Il est utilisé pour la carte son et la carte graphique, seules les manettes sont sur un bus à part. Ce qui fait qu'on devrait plutôt parler de bus de sorties, mais passons... L'essentiel est qu'on n'est plus tout à fait dans le cas de la console précédente, avec un bus par composant. ===L'architecture de la SNES=== L'architecture de la SNES est illustrée ci-dessous. Les changements pour le processeur et la RAM sont mineurs.La RAM a augmenté en taille et passe à 128 KB. Pareil pour la RAM de la carte vidéo, qui passe à 64 KB. Par contre, on remarque un changement complet au niveau des bus, de la carte graphique et de la carte son. [[File:Architecture de la SNES.png|centre|vignette|upright=2|Architecture de la SNES]] La console utilise un '''bus système unique''', sur lequel tout est connecté : ROM, RAM, entrées-sorties, etc. La seule exception est pour les manettes, qui sont encore connectées directement sur le processeur, via un bus séparé. La transition vers un bus système s'explique par le fait que la console est maintenant de 16 bits, ce qui fait que les bus doivent être plus larges. Le processeur adresse des mémoires RAM et ROM plus grandes, ce qui double la taille de leurs bus. De plus, les entrées-sorties aussi ont besoin d'un bus plus large. Le processeur n'ayant pas un nombre illimité de broches, la seule solution est de fusionner les bus en un seul bus système. Un autre changement est que la carte graphique est maintenant composée de deux circuits séparés. Encore une fois, il ne s'agit pas de coprocesseurs, mais de circuits non-programmables. Par contre, la carte son est remplacée par deux coprocesseurs audio ! De plus, les deux processeurs sont connectés à une mémoire RAM dédiée de 64 KB, comme pour la carte graphique. L'un est un processeur 8 bits (le DSP), l'autre est un processeur 16 bits. Un point très intéressant : certains jeux intégraient des coprocesseurs dans leurs cartouches de jeu ! Par exemple, les cartouches de Starfox et de Super Mario 2 contenait un coprocesseur Super FX, qui gérait des calculs de rendu 2D/3D. Le Cx4 faisait plus ou moins la même chose, il était spécialisé dans les calculs trigonométriques, et diverses opérations de rendu 2D/3D. En tout, il y a environ 16 coprocesseurs d'utiliser et on en trouve facilement la liste sur le net. La console était conçue pour, des pins sur les ports cartouches étaient prévues pour des fonctionnalités de cartouche annexes, dont ces coprocesseurs. Ces pins connectaient le coprocesseur au bus des entrées-sorties. Les coprocesseurs des cartouches de NES avaient souvent de la mémoire rien que pour eux, qui était intégrée dans la cartouche. ===L'architecture de la Megadrive et de la néo-géo=== Passons maintenant à la console de jeu Megadrive, une console 16 bits. Elle a une architecture similaire à celle de la néo-géo, une autre console bien plus puissante, sorti à peu près en même temps. Elles intègrent deux processeurs : un Motorola 68000 qui sert de processeur principal, un Z80 qui sert de processeur dédié à l'audio. Le Z80 et le Motorola 68000 étaient deux processeurs très populaires à l'époque. Le Z80 est une sorte de version améliorée de l'Intel 8088 utilisé sur les anciens PC et de nombreuses consoles utilisaient des Z80 comme processeur principal. Il était familier pour les programmeurs de l'époque, pour son cout réduit, sa bonne disponibilité, et bien d'autres avantages liés à sa production de masse. Le Z80 est utilisé comme co-processeur audio. Il commande un synthétiseur sonore, et est relié à sa propre mémoire, distincte de la mémoire principale. Le MC68000 est le processeur principal et a une relation maitre-esclave avec le Z80 : le MC68000 envoie des commandes au Z80, mais la communication ne va pas dans l'autre sens. Le Motorola 68000 était un processeur 16 bits, alors que le Z80 est un processeur 8 bits. Et cette différence fait que l'on ne peut pas connecter directement les deux sur le même bus, ou du moins pas facilement. La solution retenue est d'utiliser deux bus séparés : un bus de 16 bits connecté au 68000, un bus de 8 bits connecté au Z80. Le premier bus est un bus système sur lequel est connecté le 68000, 64 kibioctets de RAM, la cartouche de jeu, et la carte graphique. Le second bus est un bus de 8 bits, plus court, relié au Z80, à un synthétiseur sonore, et 8 kibioctets de RAM Les deux bus sont connectés à un '''''chipset''''', un circuit répartiteur, qui fait le pont entre les deux bus. Les manettes sont connectées sur le ''chipset''. Il contient un registre de 8 bits, dans lequel le MC68000 peut écrire dedans à sa guise, le registre étant adressable par le processeur. Lorsque le MC68000 écrit une valeur dedans, cela déclenche l’exécution automatique d'un programme pré-déterminé sur le Z80. : Pour ceux qui savent ce qu'est une interruption, les valeurs écrites dans ce registre sont des numéros d'interruption, qui indiquent quelle routine d'interruption exécuter. [[File:Architecture de la Megadrive et de la Néogeo.png|centre|vignette|upright=2.5|Architecture de la Megadrive et de la Néogeo]] Cet exemple nous montre que les bus systèmes sont certes très simples, mais aussi inflexibles. Ils fonctionnent bien quand les composants branchés dessus sont tous des composants 8 bits, ou sont tous de 16 bits, ou tous 32 bits. Mais dès qu'on mélange composants 8, 16, 32 ou 64 bits, les choses deviennent plus compliquées. Il est alors préférable d'utiliser des bus séparés, avec des répartiteurs pour faire le pont entre les différents bus. Et nous verrons que le problème s'est posé lui aussi sur les PC. ===L'architecture des anciennes consoles Playstation : beaucoup de co-processeurs=== Les consoles que nous venons d'aborder étaient des consoles 8 ou 16 bits. A partir des consoles 32 bits, leur architecture s'est rapprochée de celle des PC, avec un usage plus complexes de répartiteurs. La XBOX était très semblable à un PC : le processeur était un Pentium 3 modifié, la carte graphique était une Geforce 3 modifiée, les 64 mébioctets de RAM était la même mémoire DDR que celle des PC, le répartiteur secondaire était un ''chipset'' nForce de NVIDIA, etc. Mais les Playstation 1, 2 et 3 se distinguent de leur contemporains. Elles disposent de très nombreux co-processeurs, qui sont en plus très variés. La Playstation 1 a été une des premières console à utiliser les CD-ROM comme support de stockage, en remplacement des cartouches. La conséquence est que la console contient une mémoire ROM, soudée à la carte mère, de 512 kibioctets. Elle contient aussi 2 mébioctets de RAM, une carte graphique avec 1 mébioctet de mémoire vidéo, un processeur, et de quoi gérer les périphériques. Il y a un co-processeur audio spécialisé, avec 512 kibioctets de RAM, ce qui nous est familier. Par contre, les autres co-processeurs ne le sont pas. Déjà, le lecteur de CD-ROM est associé à des circuits sur la carte mère, il y a tout un sous-système dédié au lecteur de CD. Il y a un contrôleur qui sert d'interface avec le lecteur proprement dit, mais aussi deux co-processeurs audio et 32 kibioctets de RAM. Les co-processeurs audio servent à lire des CD sans trop utiliser le second co-processeur audio, ils lui servent de complément. Ensuite, le processeur incorpore plusieurs cœurs, avec un cœur principal et plusieurs co-processeurs. Le premier est un co-processeur système, qui est utilisé pour gérer la mémoire cache intégrée au processeur, pour des fonctionnalités appelées interruptions et exceptions, ainsi que pour configurer le processeur. Le second est un co-processeur arithmétique spécialisé dans les calculs en virgule flottante, très importants pour le rendu 3D. Enfin, il y a un décodeur vidéo, qui n'est pas un co-processeur, mais un circuit non-programmable, spécialisé dans le décodage vidéo. De nos jours, ce circuit aurait été intégré dans la carte graphique, mais il était intégré dans le processeur sur la Playstation 2. Pour le reste, le processeur est la figure centrale de la console. Il est connecté à 4 bus : un pour la RAM, un pour la carte graphique, un pour les manettes, un autre pour le reste. Le dernier bus est connecté au système audio et au système pour le lecteur CD. Ce serait un bus d'entrée-sortie, s'il n'était pas connecté à la mémoire ROM. Vous avez bien lu : la mémoire ROM est reliée au bus d'entrée-sortie. [[File:Architecture de la Playstation.png|centre|vignette|upright=2.5|Architecture de la Playstation]] La Playstation 2 est composé d'un processeur, couplé à 32 Mébioctets de RAM, et d'un paquet de co-processeurs. Plus de co-processeurs que la PS1. Le processeur principal n'est pas la même que celui de la PS1, mais il a une architecture similaire. Il intègre un décodeur vidéo sur le même circuit intégré, ainsi que deux co-processeur. Les co-processeurs ne sont cependant pas les mêmes. Le co-processeur système disparait et est remplacé par un second co-processeur arithmétique. Les deux co-processeurs arithmétiques sont spécialisés dans les nombres flottants, avec quelques différences entre les deux. Par exemple, le second co-processeur gérait des calculs trigonométriques, des exponentielles, des logarithmes, et d'autres fonctions complexes du genre ; mais pas le premier co-processeur. Ils sont reliés à 4 kibioctets de RAM pour le premier, 16 kibioctets de RAM pour le second ; qui sont intégrées dans le processeur et non-représentés dans le diagramme ci-dessous. La PS2 intègre aussi un co-processeur d'entrées-sorties. Pour information, il s'agit du processeur principal de la Playstation 1, qui est ici utilisé différemment, suivant que l'on place un jeu PS1 ou PS1 dans la console. Si on met un jeu PS1, il est utilisé pour émuler la Playstation 1, afin de faire tourner le jeu PS1 sur la PS2. Si on met un jeu PS2, il est utilisé comme co-processeur d'entrée-sortie et fait l'interface entre CPU et entrées-sorties. Il est relié à 2 mébioctets de RAM, soit exactement la même quantité de mémoire que la Playstation 1. Tous les périphériques sont connectés au co-processeur d'entrées-sortie. Pour cela, le co-processeur d'entrées-sortie est relié à deux bus dédiés aux périphériques. Le premier bus est relié aux manettes, aux ports USB et aux ports pour cartes mémoires. Le second bus est relié à la carte son, la carte réseau, le lecteur DVD, et un port PCMIA. Notons que la carte son intègre un co-processeur audio, qui n'est pas représenté dans le diagramme ci-dessous. [[File:Playstation 2 architecture.png|centre|vignette|upright=2.5|Playstation 2 architecture]] ==L'architecture des PC et son évolution== Après avoir vu les consoles, nous allons maintenant voir les anciens PC, des années 80 ou 90. Le tout premier PC était techniquement l''''IBM PC'''. Par la suite, de nombreux ordinateurs ont tenté de reproduire l'IBM PC originel, avec parfois quelques modifications mineures. De tels ordinateurs ''IBM PC compatibles'', ont été très nombreux, pour des raisons diverses. Le fait d'utiliser des composants banalisés, facilement disponibles, ainsi qu'une bonne documentation de l'IBM PC originel, a grandement aidé. Les IBM PC compatibles ont progressivement évolué pour donner les PC actuels. L'IBM PC compatible a donné naissance à de nombreux standards divers. ===L'IBM PC originel et l'IBM PC XT=== [[File:IBM PC XT 02.jpg|vignette|IBM PC XT.]] Nous allons commencer par voir l'IBM PC originel, et son successeur : l'IBM Personal Computer XT. Nous les appelerons tous deux l'IBM PC. L'IBM PC utilisait un processeur Intel 8088, qui était un processeur 8 bits. Ils utilisaient un bus système unique, appelé le '''bus XT'''. Le bus système allait à 4.77 MHz, soit la même fréquence que le processeur. C'était un bus de 8 bits, ce qui collait parfaitement avec les processeurs 8 bits commercialisés par Intel à l'époque. L'IBM PC comprenait une mémoire ROM avec de quoi faire fonctionner le PC. La ROM en question contenait un programme minimal, appelé le '''BIOS''', sans lequel le PC ne fonctionnait pas du tout. Il servait de base pour le système d'exploitation et MS-DOS ne fonctionnait pas sans elle. De nos jours, son rôle est plus limité : sans elle, le PC ne démarre pas. Mais nous détaillerons cela dans le prochain chapitre. En plus de la ROM pour le BIOS, l'IBM PC avait quatre mémoires ROM dédiée au langage de programmation BASIC. Lorsque le PC démarrait, il ne bootait pas un système d'exploitation, mais lançait l'interpréteur pour le langage BASIC. De nos jours, ce serait l'équivalent d'un ordinateur qui boote directement sur du Python, à savoir la console Python que vous avez peut-être déjà utilisé si vous avez testé Python. Ceux qui ont déjà touché à un ordinateur de l'époque savent ce que ca veut dire, mais c'est malheureusement très difficile à expliquer sans ce genre d'expérience. Toujours est-il que c'était une sorte de norme à l'époque : les ordinateurs bootaient généralement sur un interpréteur BASIC. [[File:XT Bus pins.svg|vignette|Connecteur du bus XT.]] Les PC étaient conçus pour qu'on branche des '''cartes d'extension''', à savoir des cartes électroniques qu'on branchait sur la carte mère, à l'intérieur du PC. Les cartes d'extension de l'époque étaient surtout des cartes son ou des cartes graphiques, mais aussi des cartes pour brancher des péripéhriques. par exemple, on pouvait ajouter deux cartes graphiques dans l'IBM PC originel : l'''IBM Monochrome Display Adapter'' et/ou la ''IBM Color Graphics Adapter''. De nos jours, les cartes son sont intégrées à la carte mère, mais les cartes graphiques sont restées des cartes d'extension. Les cartes d'extension étaient branchées sur un '''connecteur XT''', qui était directement relié au bus XT. Le connecteur XT est illustré ci-contre, mais ne vous en souciez pas trop pour le moment. La carte mère de l'IBM PC avait 5 connecteurs de ce type, qu'on pouvait peupler avec autant de cartes d'extension. L'IBM Personal Computer XT est passé à 8 connecteurs XT, soit trois de plus. Pour ce qui est des périphériques, l'IBM PC avait plusieurs connecteurs : un port série, un port parallèle, un port pour le clavier, et un port pour un lecteur cassette. Le clavier et le lecteur cassette étaient connectés directement sur la carte mère, qui contenait quelques circuits pour gérer le clavier. Par contre, les deux premiers n'étaient pas connectés à la carte mère. Le port série était en réalité une carte d'extension, branchée sur un connecteur XT. Et il en est de même pour le port parallèle. Pour ce qui est des supports de stockage, l'IBM PC originel n'avait pas de disque dur et n'avait que des lecteurs de disquette. De plus, le lecteur de disquette n'était pas connecté directement sur la carte mère, mais était connecté à une carte d'extension, branchée sur un connecteur XT. La carte d'extension avait deux connecteurs, un par lecteur de disquette, ce qui fait que les deux lecteurs de disquettes pouvaient être branchés sur une seule carte d'extension. L'IBM Personal Computer XT a ajouté un disque dur, sauf sur quelques sous-modèles spécifiques. Le PC avait aussi un petit haut-parleur capable de faire des bips. Pour résumer, l'IBM PC originel se reposait beaucoup sur les cartes d'extension, sa carte mère contenait peu de choses. Enfin, peu de choses... Il y avait un processeur Intel 8088, éventuellement un coprocesseur flottant 8087, de la RAM, de la ROM, et des circuits intégrés assez divers. En voici la liste, certains vous seront familiers, d'autres vous seront inconnus à ce stade du cours : * les circuits de décodage d'adresse ; * un contrôleur DMA intel 8273 ; * un contrôleur d'interruption 8259 ; * un contrôleur de bus Intel 8288 pour gérer le bus XT ; * un générateur d'horloge Intel 8284 et un diviseur de fréquence ; * un ''timer'' Intel 8253, le même que celui étudié dans le chapitre sur les ''timers'' ; * un contrôleur parallèle 8255. Les multiplexeurs, registres et portes logiques, sont des circuits de décodage d'adresse, qui permettent de combiner plusieurs RAM en une seule, idem avec la mémoire ROM. Si vous verrez qu'il y a 5 mémoires ROM : une ROM pour le BIOS, et quatre autres ROM pour le BASIC. Les 4 ROM du BASIC sont combinées en une seule mémoire ROM. Pour les RAM, il y en a 8 à 32, qui sont combinées en une seule RAM de 16 à 64 kibioctets. [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] ===L'architecture d'un IBM PC compatible 16 bits=== Les PC suivants sont passés à des processeurs 16 bits, mais c'était toujours des processeurs x86 d'Intel, à savoir des Intel 286 et 386. La RAM a grossi, quelques entrées-sorties ont été ajoutées, mais l'architecture globale est plus moins resté le même. C'est surtout au niveau du bus et des périphériques que les changements majeurs ont eu lieu. [[File:ISA Bus pins.svg|vignette|Connecteur ISA.]] Les PC 16 bits utilisaient un bus système unique, sur lequel tout était connecté : le processeur, la RAM, la ROM, les cartes d'extension et tout le reste. Le bus en question s'appelait le '''bus AT''', mais il a rapidement été renommé en '''bus ISA''' (''Industry Standard Architecture''). Le bus ISA était prévu pour avoir une compatibilité avec le bus 8 bits de l'IBM PC originel. D'ailleurs, cela se ressent jusque dans le connecteur utilisé : le connecteur ISA est un connecteur XT qu'on a fusionné avec un second connecteur pour l'étendre de 8 à 16 bits. Les PC 16 bits avaient toujours un port série, un port parallèle, un clavier, un lecteur de disquette et des cartes d'extension. Des disques durs pouvaient être ajoutés, aussi. Mais pour ces périphériques, un changement majeur a eu lieu comparé à l'IBM PC originel. L'IBM PC originel utilisait des cartes d'extension pour tout, sauf le clavier. Mais maintenant, les périphériques ne sont plus connectés à une carte d'extension. À la place, les circuits de la carte d'extension sont déplacés sur la carte mère. Mais n'allez pas croire qu'ils étaient connectés directement au bus ISA, il y avait des intermédiaires. Le clavier était relié à un '''contrôleur de clavier''', qui faisait l'interface entre le connecteur du clavier et le bus ISA. Le contrôleur de clavier était appelé le ''Keyboard Controler'', abrévié en KB. Il recevait ce qui est tapé au clavier et traduisait cela en quelque chose de compréhensible par l'ordinateur. Les autres périphériques étaient connectés à un circuit intégré dédié : l''''Intel 82091AA'''. Il était connecté au lecteur de disquette, au port série et au port parallèle. Il servait d'intermédiaire entre ces périphériques et le bus ISA. Vous pouvez le voir comme une sorte de répartiteur, mais qui ne serait pas connecté sur le processeur et la RAM Enfin, il ne faut pas oublier les autres composants présents sur l'IBM PC originel. Le BIOS est toujours là, de même que les ''timers'' Intel 8253 PIT, le contrôleur d'interruption Intel 8259 et le contrôleur DMA Intel 8237. Les PC 16 bits ont aussi intégré une ''Real Time Clock'' (RTC). Pour rappel, c'est un composant qui permet au PC de mémoriser la date et l'heure courante, à la seconde près. Le tout est résumé dans le schéma ci-dessous. [[File:Architecture de l'IBM PC compatible.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible]] Un point important est que le bus ISA allait à la même fréquence que le processeur, vu que c'était un bus système. Les processeurs de l'époque étaient des CPU 286 d'Intel, ou le 386 d'Intel. Les Intel 286 allaient de 4 MHz minimum, à 25 MHz maximum. Le 386, quant à lui, allait de 12 à 40 MHz. Le bus ISA devait aller à cette fréquence, il était synchrone avec le processeur. Par la suite, les processeurs ont gagné en performance, ce qui fait que le bus ISA est devenu trop lent pour le processeur. Une idée a alors été de conserver le bus ISA, pour des raisons de compatibilité, mais de le reléguer comme bus secondaire. L'ordinateur contient alors deux bus : un bus système, et un bus ISA secondaire. Le lien entre les deux est réalisé par un '''pont ISA''', ''ISA Bridge'' en anglais. Le bus ISA fonctionnait alors sa fréquence usuelle, alors que le bus système était beaucoup plus rapide. Le bus système fonctionnait à une fréquence bien plus élevée, ce qui fait que le processeur pouvait communiquer à pleine vitesse, notamment avec la RAM. Le processeur n'était alors plus forcé à aller à la même fréquence que le bus ISA [[File:Architecture de l'IBM PC compatible avec bridge ISA.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible avec bridge ISA]] Les PC de l'époque intégraient donc plusieurs bus séparés. Vous avez bien lu : plusieurs bus ! Ici, il s'agit de ce que j'appelle des '''bus en cascade''', à savoir qu'un bus est connecté à un autre bus par un intermédiaire. Au passage, si j'aborde ces exemples, car c'est pareil sur les ordinateurs modernes. Le pont ISA a été remplacé par des circuits différents, mais qui ont un rôle assez similaire. Le ''chipset'' de votre carte mère n'est qu'un lointain descendant du pont ISA, qui s'interface avec des bus différents. ===L'arrivée des standards AT et IDE pour les disques durs=== Initialement, les disques durs étaient placés dans l'ordinateur et étaient connectés sur le bus ISA, via une carte d'extension ISA. En clair, il fallait connecter le disque dur sur une carte d'extension, et non sur la carte mère. Les cartes d'extension en question permettaient de connecter un ou plusieurs disques durs, parfois des lecteurs de disquette supplémentaires. Les cartes ISA de ce type faisaient juste l'interface entre le bus ISA et les disques durs, rien de plus. L'interface en question a été standardisée, ce qui a donné le standard ''AT Bus Attachment'', qui a été abrévié en ATA. Et ce n'était pas que pour les disques durs, de nombreux composants étaient dans ce cas. Une carte d'extension servait d'intermédiaire entre eux et la carte mère. Les cartes d'extension en question étaient appelées des ''Host bus adapter''. [[File:Acculogic sIDE-4 Controller ISA.jpg|centre|vignette|upright=2|Carte ISA d'interface disque dur, de marque Acculogic.]] Mais les choses ont rapidement évoluées, que ce soit du côté des cartes mères que du côté des disques durs. Le '''standard IDE''' a permis de brancher un disque dur directement sur la carte mère, sans passer par une carte d'interface ISA. Pour cela, la carte mère réservait un connecteur ISA pour le disque dur, renommé '''connecteur ATA'''. Pour que cela soit possible, il a fallu rajouter des circuits sur la carte mère. Tout ce qui était sur les cartes d'interface ISA s'est retrouvé sur la carte mère. [[File:Ajout des ports IDE sur la carte mère.png|centre|vignette|upright=2|Ajout des ports IDE sur la carte mère]] En réalité, les connecteurs ATA étaient des connecteurs ISA simplifiés. Un connecteur ISA avait en tout 98 broches, alors qu'un connecteur ATA n'en contient que 40. Les broches qui étaient inutiles pour les disques durs ont simplement été enlevées. Et qui dit connecteur spécialisé, dit câble spécialisé. Les disques durs étaient branchés sur le connecteur AT grâce à un câble ATA, sur lequel on pouvait connecter deux disques durs. [[File:ATA Plug.svg|centre|vignette|upright=2|Connecteur ATA.]] [[File:ATA cables.jpg|centre|vignette|upright=2|Cable ATA.]] Il était donc possible de connecter deux disques durs sur un seul connecteur ATA. Et cette possibilité est devenue d'autant plus utile par la suite. A partir de la version 2, ATA supportait aussi les lecteurs de disquettes, les lecteurs de CD/DVD, et bien d'autres supports de stockage. Il était alors possible de connecter un lecteur CD et un disque dur sur un seul connecteur. Les cartes mères avaient généralement deux connecteurs ATA, et n'avaient pas besoin de plus. C'était suffisant pour connecter un disque dur, un lecteur de disquette et un lecteur CD, configuration courante entre les années 90 et 2000. Un câble est donc connecté à deux supports de stockage. Pour distinguer les deux, le standard ATA ajoute une possibilité de configuration. Sur un câble, il doit y avoir un support de stockage "maitre" et un support "esclave". C'était la terminologie de l'époque, que je reproduis ici, même si elle est fortement trompeuse. N'allez pas croire que cela implique que l'un ait des avantages sur l'autre. Le support 'maitre" n'a pas droit à plus de bande passante, il n'a pas la priorité sur l'autre, rien du tout. Il s'agit juste d'un nombre qui permet de savoir avec qui le processeur communique, qui vaut 0 pour le premier support, 1 pour l'autre. Une sorte d'adresse de 1 bit, si l'on veut. [[File:ATA-Konfiguration02.png|centre|vignette|upright=2|Configuration ATA.]] Pour configurer un support de stockage en mode "maitre" ou "esclave", le support de stockage avait quelques pins dédiés. Il suffisait de placer un détrompeur en plastique sur les pins adéquats. Les pins se trouvaient à l'arrière du disque dur ou du lecteur de CD/DVD/Disquette/autre. [[File:HDD Master and Slave Description.jpg|centre|vignette|upright=2|Configuration ''Master/Slave''.]] ===L'architecture d'un PC avec un processeur Intel 486=== Maintenant, passons aux ordinateurs 32 bits, avec l'exemple d'un PC avec un processeur 486 d'Intel. A cette époque, le bus ISA était devenu trop limité et était en place d'être remplacé par le bus PCI, qui avait la même fonction. De nombreuses cartes d'extension utilisaient déjà ce standard et étaient branchées sur des connecteurs PCI dédiés, différents des connecteurs ISA. Intuitivement, on se dit que le bus PCI remplaçait le bus ISA, mais les choses étaient plus compliquées. Les disques durs gardaient leur connecteur ATA, et ne passaient pas par le bus PCI. Ils avaient un bus IDE séparé, qui était un bus ISA modifié. Là encore, les processeurs étaient devenus beaucoup plus rapides que le bus PCI. Les deux allaient à des fréquences assez différentes, ce qui fait que le bus PCI était séparé du bus système. Il y avait alors deux implémentations possibles. * La première utilise un répartiteur unique, relié au processeur, à la RAM, au bus PCI, et au bus IDE. * La seconde utilise un bus système séparé du bus PCI, avec un '''pont PCI''' pour faire l'interface entre les deux. Le '''''System Controler''''' était un circuit intégré, placé sur la carte mère, qui peut servir soit de pont PCI, soit de répartiteur. Le répartiteur PCI sert d'intermédiaire avec le bus PCI, mais aussi avec le bus IDE, utilisé pour les disques durs, aussi appelé le bus ''Parallel ATA''. Il peut aussi être connecté au processeur, à la mémoire RAM, ainsi qu'à la mémoire cache, mais cela ne sert que quand il est utilisé comme répartiteur. [[File:Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur.png|centre|vignette|upright=2|Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur]] Pour des raisons de compatibilité, le bus ISA avait été conservé, aux côtés du bus PCI. Il y avait un pont ISA en plus du pont/répartiteur PCI. Une implémentation possible aurait été de connecter les deux ponts ISA et PCI à un bus système unique. Mais cette solution n'a pas été retenue. La raison est que le bus PCI et le bus ISA ont des performances très différentes. Le bus PCI est très rapide, le bus ISA beaucoup plus lent. La différence est d'un ordre de grandeur, environ. Dans ces conditions, il est possible de faire passer les communications ISA à travers le bus PCI. Pour cela, le pont ISA est directement connecté sur le pont PCI, comme illustré ci-dessous. Et il en est de même pour le bus dédié aux disques durs. En effet, les disques durs étaient autrefois reliés au bus ISA, mais cela a changé depuis. Ils disposent maintenant de leur propre bus dédié, le '''bus IDE''', qui est un bus ISA simplifié. Et ce bus ISA simplifié était connecté directement sur le pont PCI. [[File:Architecture de l'IBM PC compatible avec pont PCI.png|centre|vignette|upright=2|Architecture de l'IBM PC compatible avec pont PCI]] Dans ce qui va suivre, nous allons étudier un exemple qui utilise un bus système séparé, avec un pont PCI, sans répartiteur. Voilà pour les grandes lignes, mais le schéma ci-dessous montre que tout est plus complexe. Vous remarquerez des connexions optionnelles entre le pont PCI et la mémoire RAM et la mémoire cache. La raison est que le pont PCI peut aussi servir de répartiteur en remplacement du bus système. Concrètement, on peut alors retirer le bus système. La mémoire, le bus PCI, le bus ISA, le bus IDE, le processeur et la RAM sont alors connectés au répartiteur PCI, qui sert d'intermédiaire central entre tous ces composants. Mais ce n'est pas la solution qui a été retenue dans notre exemple. [[File:Intel486-Typ PCI System.png|centre|vignette|upright=2|PC IBM compatible avec un 486, un bus PCI et un bus ISA. Le ''host bus'' est le bus système.]] Le pont ISA sert ici d'intermédiaire entre le bus système et le bus ISA. De plus, il a été amélioré sur de nombreux points. Il inclut notamment des circuits qui étaient autrefois sur la carte mère, à savoir le contrôleur DMA 82C87 et le contrôleur d'interruption 82C59, ainsi que les ''timers'' Intel 82C54. Les composants restants sont eux reliés sur un quatrième bus : le bus X, l'ancêtre du bus ''Low Pin Count''. Le bus X était celui du BIOS, du contrôleur de clavier, de la ''Real Time Clock'', et du contrôleur de périphérique 82091AA d'Intel. [[File:ISA Bridge schematic.png|centre|vignette|upright=2|ISA Bridge.]] ===L'architecture des PC des années 90-2000=== Par la suite, les ponts PCI et ISA ont évolué avec l'évolution des bus de l'ordinateur. Le bus ISA a progressivement été remplacé par d'autres bus, comme le bus ''Low Pin Count'', le bus PCI a été remplacé par le PCI Express, d'autres bus ont été ajoutés, etc. Mais la séparation du ''chipset'' en deux a été conservée. [[File:Chipset schematic.svg|vignette|upright=1.0|Chipset séparé en northbridge et southbridge.]] Le pont PCI et le pont ISA ont été remplacés respectivement par le '''pont nord''' et le '''pont sud''', plus connus par leurs noms anglais de ''northbridge'' et de ''southbridge''. Le pont nord servait d'interface entre le processeur, la mémoire et la carte graphique et est connecté à chacun par un bus dédié. Il intégrait aussi le contrôleur mémoire. Le pont sud est le répartiteur pour les composants lents, à savoir l'USB, l'Ethernet, etc. Le bus qui relie le processeur au pont nord était appelé le '''''Front Side Bus''''', abrévié en FSB. [[File:IMac Chipset.png|centre|vignette|upright=2|Chipset séparé en northbridge et southbridge.]] Un point important est que le bus PCI est devenu un bus assez lent, ce qui fait qu'il a finit par être connecté au pont sud. Le pont PCI est donc devenu le pont sud, dans le courant des années 2000. Durant un moment, un équivalent du pont ISA a subsisté dans un circuit de '''''Super IO'''''. Concrètement, il s'occupait du lecteur de disquette, du port parallèle, du port série, et des ports PS/2 pour le clavier et la souris. Mais il ne gérait pas le bus ISA, mais son remplaçant, le bus ''Low Pin Count''. [[File:Motherboard diagram fr.svg|centre|vignette|upright=1.5|Carte mère avec circuit Super IO.]] ===L'architecture des PC depuis les années 2000=== Depuis la sortie du processeur AMD Athlon 64, le pont nord a été fusionné dans le processeur. La fusion ne s'est pas faite en une fois, des fonctionnalités ont progressivement été progressivement intégrées dans le processeur. Le pont sud est resté, mais il a alors été progressivement connecté directement au processeur. La raison derrière cette intégration est que les processeurs avaient de plus en plus de transistors à leur disposition. Ils en ont profité pour intégrer le pont nord. Et cela permettait de simplifier le câblage des cartes mères, sans pour autant rendre vraiment plus complexe la fabrication du processeur. Les industriels y trouvent leur compte. La première étape a été l'intégration du contrôleur mémoire a été intégré au processeur. Concrètement, le résultat était que la mémoire RAM n'était plus connectée au pont nord, mais était connectée directement au processeur ! Il y a donc eu un retour d'un bus mémoire, mais spécialisé pour la mémoire RAM. En théorie, une telle intégration permet diverses optimisations quant aux transferts avec la mémoire RAM. Les transferts ne passent pas par un répartiteur, ce qui réduit le temps d'accès à la mémoire RAM. Ajoutons de sombres histoires de prefetching, d'optimisation des commandes, et j'en passe. Toujours est-il que le pont nord ne servait alors d'intermédiaire que pour les ports PCI Express, et le pont sud. [[File:X58 Block Diagram.png|centre|vignette|upright=2|Chipset X58 d'Intel.]] Par la suite, la carte graphique fût aussi connectée directement sur le processeur. Le processeur incorpore pour cela des contrôleurs PCI-Express. Le pont nord a alors disparu complétement, son intégration dans le processeur était complète. Sur les cartes mères Intel récentes, le pont sdud subsiste, il est appelé le ''Platform Controler Hub'', ou PCH. L'organisation des bus sur la carte mère qui résulte de cette connexion du processeur à la carte graphique, est illustrée ci-dessous, avec l'exemple du PCH. [[File:Intel 5 Series architecture.png|centre|vignette|upright=2|Intel 5 Series architecture]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=L'interface électrique entre circuits intégrés et bus | prevText=L'interface électrique entre circuits intégrés et bus | next=La hiérarchie mémoire | nextText=La hiérarchie mémoire }} </noinclude> 6ce0grumr12out7y9bdgsfnyxowwnkv Wikilivres:GUS2Wiki 4 78643 765680 764835 2026-05-01T12:24:14Z Alexis Jazz 81580 Updating gadget usage statistics from [[Special:GadgetUsage]] ([[phab:T121049]]) 765680 wikitext text/x-wiki {{#ifexist:Project:GUS2Wiki/top|{{/top}}|This page provides a historical record of [[Special:GadgetUsage]] through its page history. To get the data in CSV format, see wikitext. To customize this message or add categories, create [[/top]].}} Les données suivantes sont en cache et ont été mises à jour pour la dernière fois le 2026-05-01T06:55:10Z. {{PLURAL:5000|1=Un seul résultat|5000 résultats}} au maximum {{PLURAL:5000|est disponible|sont disponibles}} dans le cache. {| class="sortable wikitable" ! Gadget !! data-sort-type="number" | Nombre d’utilisateurs !! data-sort-type="number" | Utilisateurs actifs |- |AncreTitres || 33 || 0 |- |ArchiveLinks || 12 || 0 |- |Barre de luxe || 35 || 1 |- |BoutonsLiens || 41 || 0 |- |CategoryAboveAll || 19 || 0 |- |CategorySeparator || 22 || 0 |- |CoinsArrondis || 99 || 1 |- |CollapseSidebox || 35 || 1 |- |CouleurContributions || 33 || 0 |- |CouleursLiens || 25 || 0 |- |DeluxeAdmin || 5 || 1 |- |DeluxeEdit || 36 || 1 |- |DeluxeHistory || 46 || 1 |- |DeluxeImport || 19 || 1 |- |DeluxeRename || 16 || 1 |- |DeluxeSummary || 36 || 1 |- |DevTools || 17 || 1 |- |DirectPageLink || 25 || 1 |- |Emoticons || 43 || 0 |- |EmoticonsToolbar || 45 || 0 |- |FastRevert || 36 || 1 |- |FixArrayAltLines || 22 || 1 |- |FlecheHaut || 66 || 1 |- |GoogleTrans || 28 || 0 |- |HotCats || 81 || 3 |- |JournalDebug || 21 || 1 |- |JournalEnTable || 2 || 1 |- |LeftPaneSwitch || 5 || 1 |- |ListeABordure || 30 || 1 |- |LiveRC || 30 || 0 |- |LocalLiveClock || 27 || 1 |- |Logo || 42 || 0 |- |MobileView || 18 || 2 |- |NavigAdmin || 38 || 0 |- |OngletEditCount || 44 || 1 |- |OngletEditZeroth || 66 || 1 |- |OngletGoogle || 28 || 1 |- |OngletPurge || 54 || 1 |- |OptimizedSuivi || 18 || 0 |- |Popups || 61 || 0 |- |RenommageCategorie || 6 || 2 |- |RestaurationDeluxe || 12 || 1 |- |RevertDiff || 35 || 3 |- |ScriptAutoVersion || 16 || 1 |- |ScriptSidebox || 31 || 0 |- |ScriptToolbar || 42 || 0 |- |SisterProjects || 16 || 0 |- |SkinPreview || 4 || 1 |- |Smart patrol || 2 || 1 |- |SourceLanguage || 24 || 0 |- |SousPages || 57 || 2 |- |SpaceToolbar || 29 || 0 |- |TableUnicode || 55 || 0 |- |Tableau || 66 || 1 |- |TitreDeluxe || 56 || 1 |- |TitreHierarchique || 17 || 0 |- |UTCLiveClock || 26 || 0 |- |UnicodeEditRendering || 29 || 1 |- |WikEd || 29 || 0 |- |autonum || 2 || 0 |- |massblock || 3 || 1 |- |monBrouillon || 19 || 1 |- |perpagecustomization || 16 || 1 |- |recentchangesbox || 15 || 0 |- |searchFocus || 18 || 0 |- |searchbox || 30 || 2 |} * [[Spécial:GadgetUsage]] * [[m:Meta:GUS2Wiki/Script|GUS2Wiki]] <!-- data in CSV format: AncreTitres,33,0 ArchiveLinks,12,0 Barre de luxe,35,1 BoutonsLiens,41,0 CategoryAboveAll,19,0 CategorySeparator,22,0 CoinsArrondis,99,1 CollapseSidebox,35,1 CouleurContributions,33,0 CouleursLiens,25,0 DeluxeAdmin,5,1 DeluxeEdit,36,1 DeluxeHistory,46,1 DeluxeImport,19,1 DeluxeRename,16,1 DeluxeSummary,36,1 DevTools,17,1 DirectPageLink,25,1 Emoticons,43,0 EmoticonsToolbar,45,0 FastRevert,36,1 FixArrayAltLines,22,1 FlecheHaut,66,1 GoogleTrans,28,0 HotCats,81,3 JournalDebug,21,1 JournalEnTable,2,1 LeftPaneSwitch,5,1 ListeABordure,30,1 LiveRC,30,0 LocalLiveClock,27,1 Logo,42,0 MobileView,18,2 NavigAdmin,38,0 OngletEditCount,44,1 OngletEditZeroth,66,1 OngletGoogle,28,1 OngletPurge,54,1 OptimizedSuivi,18,0 Popups,61,0 RenommageCategorie,6,2 RestaurationDeluxe,12,1 RevertDiff,35,3 ScriptAutoVersion,16,1 ScriptSidebox,31,0 ScriptToolbar,42,0 SisterProjects,16,0 SkinPreview,4,1 Smart patrol,2,1 SourceLanguage,24,0 SousPages,57,2 SpaceToolbar,29,0 TableUnicode,55,0 Tableau,66,1 TitreDeluxe,56,1 TitreHierarchique,17,0 UTCLiveClock,26,0 UnicodeEditRendering,29,1 WikEd,29,0 autonum,2,0 massblock,3,1 monBrouillon,19,1 perpagecustomization,16,1 recentchangesbox,15,0 searchFocus,18,0 searchbox,30,2 --> 0k435xxxd0z07d0njv565eiuzd6ous2 Les débats de Gérard de Suresnes/Puissance et gloire 0 82212 765757 765629 2026-05-02T04:12:12Z Texou 99491 /* Le débat sur les boîtes de nuit */ 765757 wikitext text/x-wiki == Le débat sur l'affaire Bill Clinton == === Contexte === On parlait de séisme radiophonique fin avril 1998 ? Voici sa réplique, le 28 septembre 1998. Après un dérapage de Mickael à l'antenne, le voici débarqué. Les matinales ne trouvant pas leur rythme de croisière et Max ayant le crédit que l'on sait depuis la rentrée 1998, l'improbable arrive : il reprend la nuit. Tranche qu'il ne lâchera plus jusqu'en janvier 2006. Ce retour, il se fait dans la même configuration que l'essai de fin août 1998, avec Reego qui a désormais un contrat et un rôle assigné. Mais il y a plus fort : parmi la fine équipe, un nouvel assistant d'antenne vient de débarquer. Cet assistant, intérimaire et donc payé à ce titre, n'est autre que gérard Cousin, alias gérard de Suresnes. Fidèle au surréalisme de cette histoire, l'animateur décalé a fini par triompher, bien sûr grâce au soutien constant de Max, et le voilà salarié de la station Fun radio pour toute la saison 1998-1999. Je laisse Thibault Raisse décrire les détails de ce contrat et l'impact social qu'il a sur la vie de ce jeune homme, absolument majeur. On notera juste ici, pour comprendre de futures allusions, que le mariage envisagé avant l'été n'a pas eu lieu. Sandy évoquera plus tard des questions d'argent, ce qui est probable, mais il existe sans doute d'autres raisons moins connues, Sandy ayant une famille probablement réservée sur la rapidité des événements. Si Gérard est assistant, c'est qu'il va intervenir très régulièrement aux côtés de Max : pour les conseils bien sûr, avec Sandy, pour des libres antennes, parfois le dimanche, et une foultitude de fois dans la semaine pour jouer des sketchs divers. Il est donc beaucoup mobilisé et son salaire se justifie, clairement. D'ailleurs, en inauguration, il sera présent dès le 28 septembre 1998. Au cœur du projet, figurent évidemment les débats. Le premier, qui s'inspirera largement de l'essai estival, se tient le 1er octobre. Max est là, pour soutenir son ami, assurer la propulsion du programme. D'autant que d'emblée, le ton change : beaucoup moins consensuel que les matinales, Gérard aborde des sujets d'actualité, donc potentiellement risqués, d'autant qu'il n'est jamais à l'abri d'un dérapage. Le sujet du soir, c'est l'affaire Bill Clinton. Terrible affaire qui secoue toute la presse internationale depuis quelques mois. Le président américain, démocrate, se voit accusé par une ancienne stagiaire de la Maison Blanche, Monica Lewinski, de harcèlement sexuel. L'affaire fait grand bruit et désordre. Le président passera à quelques voies de la destitution par le Congrès américain. En octobre, l'affaire touche à sa fin, mais gérard va donc s'emparer du sujet. C'est dire comment Max reste près de lui pour éviter un débordement qui serait dramatique. Le sujet, maîtrisé comme Gérard en était capable, devient un prétexte à une conversation digne du café du commerce, mêlée de surréalisme assumé et de comique de situations. Nous ne redévelopperons pas ici l'affaire, mais il faut se rappeler qu'elle a marqué toute la presse internationale de cette année-là et bien avant les grands scandales sur les rapports entre les célébrités et les femmes qui ont explosé dans la décennie 2020. Elle constitue en tout cas un précédent, qu'on retrouvera dans une autre forme à peine différente en 2011 et impliquant l'ancien patron du Fond monétaire international, Dominique Strauss Kahn, ce qui lui coûtera d'ailleurs la candidature à l'élection présidentielle en France. Les fondamentaux routiniers qui se sont installés au premier trimestre 1998 puis dans l'essai de fin août reviennent : un avant-débat houleux avec le courrier, ,a présence de Sandy, les sketchs de Gérard, puis deux débats où domine le surréalisme, l'humour et la comédie. Auditeurs et équipe, désormais installés et régulièrement renforcés par des personnalités célèbres ou membres de la radio, conduisent les choses avec brillo dans des mécaniques qu'on a déjà évoquées et qu'on présentera pour celles qui ne font que commencer. Cet avant-débat pourtant, il est particulièrement interrogeant sur Gérard et son état. Max se plaint déjà de son arrivée en retard, en taxi, avec ses menaces d'annulation. Mais surtout, ce soir-là, il démarre très énervé, rendant Sandy elle-même, à ses côtés, et Max perplexes. Il s'en prend toujours à son équipe, mais sous l'angle de la jalousie de sa relation amoureuse. C'est l'occasion pour Max de rappeler le cadre applicable, et notamment qu'il est désormais amené à avoir une attitude professionnelle. Parmi les composantes de cette attitude, on apprend que Sandy n'est plus admise dans le studio pour ne plus le distraire. Elle participera bien entendu à de nombreuses émissions, mais par téléphone, même si c'est dans un bureau non loin de là. Au final, c'est du grand spectacle, avec toutefois racadrage vigoureux de Max, entre humour et réalité. Dans ce sketch, Gérard s'avère quelque peu déstructuré, voire inctonrôlable. Max lui-même est en difficulté parfois pour refroidir le bouillant personnage. === Les personnages === * Franck Bargine : Max * Gérard Cousin : Gérard de Suresnes * Phildar et Manu * Igor : Reego * Olivier Bouchet : Olivier de la pro * Mégane : Crevette * Carambar : Cuvette * Sandy Threadkell : Point d'interrogation * Goldo : Tétard * Mladen Derek : Coussin d'air === Transcription === '''Gérard''' : Bonsoir, donc bonsoir à Reego sur Internet, bonsoir aux deux caves au standard. '''Reego''' : Bonsoir Gérard. '''Gérard''' : Donc bonsoir Olivier de la Pro. Donc on va accueillir Crevette, 21 ans... '''Cuvette''' : Non, Cuvette, Cuvette, Cuvette. '''Gérard''' : Non, Crevette ! '''Cuvette''' :On m'a dit Cuvette, moi. '''Gérard''', ''[furieux]'' : Oh c'est... ça commence comment là ? '''Phildar''' : Non parce qu'il y a un Crevette et un Cuvette. '''Gérard''' : Non mais faut pas qu'on confonde tentacule et encule ta sœur, ok ? On commence pas comme ça, ok ? '''Crevette''' : Bonsoir Gérard, je suis là, c'est Crevette. '''Gérard''' : Alors Crevette, 21 ans de Rouen, on peut écouter Fun Radio sur 90.5. C'est bizarre parce que à Rouen, on m'a dit qu'il y avait pas de fréquence. '''Crevette''' : Eh ben c'est tout nouveau. '''Max''' : C'est revenu, ça va revenir, ouais, c'est-à-dire qu'il y a une fréquence pirate. '''Gérard''' : Ok. Grosse caisse, 22 ans de Nantes, 90.5. '''Grosse caisse''' : Ouais, salut. Ça va ? '''Gérard''' : Qu'est-ce que ça peut te foutre ? '''Grosse caisse''' : Bon, c'est parce que je t'aime bien, c'est tout. '''Max''' : Ah, pour une fois qu'il est sympa, t'es vraiment dégueulasse avec les gens, Gérard. Tu perds de la popularité au niveau... '''Gérard''' : Donc, point d'interrogation, je pense qu'on va l'avoir dans peu de temps. Donc, apparemment non, elle veut pas répondre. Donc, Tétard. La Bourboule sur 104 ? '''Tétard''' : Et demi. '''Gérard''' : Non, sur 104. '''Tétard''' : Ah bon, excuse-moi, je suis un peu en avance. '''Gérard''' : Ouais, t'es... d'accord. Je pense qu'à mon avis, on va s'amuser là, ce soir. Ouais, on va s'amuser, hein, Phildar et Manu au standard. '''Manu''' : Bah ouais, on se marre déjà bien, nous. '''Gérard''' : Ouais, ouais. On va s'amuser avec les anciens qu'on a eus, Tony et Arnett. Et toute la bande. Si, si, si. Non, non, mais... '''Max''' : Moi, je pense que je vais pas pouvoir rester dans le studio, malheureusement. '''Gérard''' : Petit Slip, 18 ans, 101.9. '''Petit slip''' : Salut, GG, bon retour. '''Gérard''' : Ouais, voilà. Comme d'hab. Ça m'aurait étonné. '''Max''', ''[hilare]'' : C'est pas les mêmes, Gérard. C'est toi qui es une mauvaise langue. '''Phildar''' : C'est la liste qu'on t'a montrée tout à l'heure. Ça, c'est des noms. Ça, c'est des noms, tu vois. Merguez, petit slip, voilà. '''Max''' : Je t'ai demandé de te mettre là. ''[les personnes changent de place, Gérard prenant une place plus près de Reego et sur une chaise permettant à Gérard de parler devant son micro sans effort, le sujet étant récurrent chez Max]''. '''Cuvette''' : Bonsoir, Gérard. '''Manu''' : Il t'écoute pas, hein. Il est en train de se préparer, il faut du temps. '''Gérard''' : Et Cuvette, on peut écouter... Sur Limoul. '''Cuvette''' : Non, Lyon. '''Gérard''' : Bon, alors... Hop ! ''[il froisse le papier et la lance vers le standard, hilare]''. Vous me refaites la fiche. Ça commence ! Non, mais c'est bien, tu vois ? '''Max''' : Mais t'es super énervé. '''Gérard''' : Non, non, non, non, non. '''Max''' : Mais tu te rends pas compte le nombre d'erreurs qu'ils font chaque soir, c'est pas pour ça que je... '''Gérard''' : Ouais, mais attends. Faut peut-être quand même... ''[il reprend une nouvelle feuille tendue par Phildar]''. Ouais, sur Lyon, sur 87.5. Alors, c'est 98.9. '''Max''' : Ah, oui, ça, c'est vrai. ''[applaudissements]''. Je te signale, Phildar, au passage, que t'es en train, depuis tout à l'heure, de lui balancer les fréquences de Skyrock et de NRJ. '''Manu''' : Je crois qu'il y en a une d'Europe 2 aussi. '''Gérard''' : Bon, enfin, bref, c'est pas... '''Max''', ''[sarcastique]'' : C'est pas grave de donner des fréquences des autres radios. Non, c'est pas grave pour Gérard, comme d'habitude. '''Gérard''' : Non, mais, de toute manière... On verra bien. On verra bien comment que ça se passe, de toute manière... '''Max''' : Mais calme, ce soir, avec le sourire. Tu vas me faire le maestro, tu vas me... L'animateur radio. '''Gérard''' : Le mastro, c'est toi qui fais la prog. Je veux pas, ni d'Olivier, ni de... '''Max''' : Ah, si. Ah, non, mais je fais pas les deux. Je fais pas les deux. '''Gérard''' : Tu fais les deux. '''Max''' : Non, faut que j'écoute. '''Gérard''' : Si tu fais les deux... Non, mais tu permets ? Pour l'instant, je parle à mon chef. '''Max''' : Si je fais les deux, quoi ? Qu'est-ce qu'il se passe ? '''Gérard''' : Tu fais les deux. Tu me fais les deux prog. Je veux pas de ces trois caves. '''Max''' : Non, parce que si je suis là, tu vas profiter pour gueuler plus et me regarder, tu vas me demander de faire ton boulot. Moi, je n'interviens pas. '''Gérard''' : Non, mais si tu vois que ça se passe mal, t'interviens quand même. '''Max''' : T'es animateur radio, t'es payé pour ça. '''Gérard''' : Bon, alors donc, tu restes pour les deux. C'est tout. '''Cuvette''' : Gérard ? Oui, je voulais te dire que je suis vraiment ravi de te connaître parce que j'ai jamais eu l'occasion de discuter avec toi. C'est Cuvette, à l'appareil. '''Gérard''' : On commence ? Donc, le premier débat, c'est sur l'affaire Bill Kinton. Vous avez tous entendu parler. '''Térard''' : Tu pourrais rappeler les faits, Gérard ? '''Gérard''' : Bon, tu permets, toi ? Tu vas pas commencer ! Alors, que pensez-vous de l'affaire Bill Kinton et l'affaire Morica Levins ? '''Cuvette''' : J'ai aimé les hommes d'influence qu'il y avait derrière tout ça. '''Tétard''' : C'est pas une bonne actrice, Morica. '''Cuvette''' : Mais Levinson est meilleur. '''Gérard''' : Bon, s'il vous plaît, vous répondez. Que pensez-vous de l'affaire Bill Kinton et Morica Levins ? Alors, Crevette ! '''Crevette''' : Alors, je trouve que Bill Clinton, il a pas trop assuré à ce niveau-là. Que la Monica Levins, elle aurait mieux fait de s'abstenir. Et puis, tout serait rentré dans l'ordre. '''Gérard''' : Dans quel sens ? '''Crevette''' : Tu veux que je te fasse des dessins en plus ? Ben, ça me paraît évident. '''Gérard''' : Ouais, mais attends, mais attends. Ça te paraît évident, mais comment ? Mais attends, mais attends. Tu suis les informations ou pas ? '''Crevette''' : Évidemment, mais tu les suis aussi. Donc, tu dois savoir que ça paraît évident que c'est pas cool, quoi. '''Gérard''' : Ouais, mais dans ce cas-là, que pensez-vous de l'affaire ? Que pensez-vous de cette histoire ? '''Tétard''' : Ouais, ben déjà, moi, je pense que Morishka Lewins, là, déjà, c'est un boudin. '''Gérard''' : Monika ! '''Tétard''' : Pardon, pardon, Monika, Lewins, déjà, c'est un boudin. '''Gérard''' : Ben, comment que tu peux le savoir ? '''Tétatd''' : Parce que je l'ai vue à la télé, tiens. Franchement, elle est pas belle. Enfin, ça dépend des références que t'as, mais elle est pas très belle. ''Gérard ''' : Ben, attends, qu'est-ce que tu veux réagir par les références que j'ai ? Attends, tu veux réagir par rapport avec Sandy, c'est ça ? '''Tétard''', ''[caricaturalement outré]'' : Pas du tout. '''Petit slip''' : Elle est très belle, Sandy, Gérard. Alors, moi, je pense que si Morishka et Eltsine boivent trop de vodka, c'est son problème. '''Gérard''' : Bon, alors, toi, je pense que tu vas pas continuer longtemps. '''Petit slip''' : Ouais, pourquoi ? '''Gérard''' : Parce que, apparemment, t'as pas compris la question. '''Petit slip''' : Tu peux la répéter, s'il te plaît ? '''Gérard''' : Non, là, je répète pas les questions. Alors, déjà, tu me l'attrapes lui... '''Phildar''' : Non, mais attends, parce que je crois qu'il a confondu... '''Gérard''' : Non, non, non, non, non, non, non, non. On va pas commencer la première. On va pas commencer comme ça. Ils vont pas me prendre la tête à me dire... Tu peux me répéter la question sans arrêt. Alors, ça, il est hors de question. ''[applaudissements de Phildar]''. '''Cuvette''' : Moi, je suis genre... Ben, je vote plus pour Clinton, depuis, moi. '''Gérard''' : Ouais, ben, on s'en fout de voter pour qui tu veux. Je te demande... '''Max''' : T'as pas à voter pour Bill Kinton alors qu'il est Français, commeent il peut voter pour Bill Kinton ? Qu'est-ce que tu penses de l'enfer... Euh... Qu'est-ce que tu penses de cette histoire ? '''Cuvette''' : Ben, je te dis, moi, depuis, je vote plus. '''Gérard''' : Ouais, mais attends, t'as été à New York ? '''Cuvette''' : Ben, je... Ben, non, mais... '''Gérard''' : Non, ben, alors, si t'as pas été à New York, je vois pas comment tu peux voter pour lui. '''Crevette''' : Pourquoi t'as été à New York, toi ? '''Gérard''' : Oui, moi, j'ai été à New York, j'ai été voir... J'ai été voir Godzilla. '''Crevette''' : Alors, tu peux voter pour Bill Clinton ? T'as le droit de voter ? '''Gérard''' : Non, mais moi, je vote pour personne. De toute manière, j'en ai rien à foutre. De toute manière, tu votes et que ça soit n'importe quoi, de toute manière, on en chie. '''Tétard''' : T'as été à New York avec Godzilla ? '''Gérard''' : Bon, toi, tu vas commencer à te calmer. C'est un conseil que je te donne. Bon, le point d'interrogation, s'il vous plaît, il peut aller dans le bureau ? '''Max''' : Allez, on peut avancer dans le débat, là, que de... À chaque fois que vous ouvrez... Même les auditeurs, vous ouvrez plein de petites parenthèses à droite à gauche, mais essayez de revenir dans le débat pour que ça soit intéressant. '''Gérard''' : Bon, par contre, s'il y a des réactions, là, sur la première question, sur le Minitel, je voudrais bien... '''Max''' : Pour l'instant, il y a trois connectés. C'est tellement intéressant, ce que tu racontes, puisque ça n'avance pas dans le débat. Tu changes de sujet... Si vous, les auditeurs, pouvez, par contre, essayer de revenir à chaque fois, aidez-nous à rester dans le débat, plutôt que de vous en écarter toutes les deux secondes, ça nous arrangerait. '''Petit slip''' : Moi, je vais bien donner mon avis. C'est petit slip. Donc, je pense que si Bill Clinton se fait sucer par Monica Lewinsky, c'est son droit, quoi. C'est sa vie privée. '''Gérard''' : Ben voilà. Pourquoi tu ne m'as pas répondu quand je te l'ai posée, la question ? '''Petit slip''' : Oh, ben, je ne sais pas. Je devais être ailleurs. '''Gérard''' : Oh, mais attends. Si tu es ailleurs, mon pote, autant que tu restes chez toi à écouter... '''Crevette''' : Deuxième question. '''Gérard''' : Non, mais attends. Attends. Attends, petit slip. Si vous commencez à me prendre la tête, on n'a pas fini la première question. Tout le monde n'a pas fait le premier tour. Si, si, Crevette, tu commences à me prendre la tête, à dire, ouais, deuxième question, toi, tu vas retourner chez toi, tu vas aller dormir. Ça va aller vite. Non, non, mais moi, je vais vous dire une chose, que maintenant, ça va aller vite. Si vous ne voulez pas répondre aux premières questions, moi, ça va aller vite. Vous allez retourner chez vous. '''Tétard''' : C'est bon, on a répondu. '''Gérard''' : Ouais, mais pas tous... L'interrogation ? '''Point d'interrogation''' : Allô ? Oui, donc c'est point d'interrogation. '''Gérard''' : Bon, alors, que pensez-vous... Je répète la question, mais c'est la dernière fois, parce que je ne vais pas faire ça constamment. '''Phildar''' : Excuse-moi, Gérard, elle appelle d'où ? '''Manu''' : Et c'est quoi sa fréquence ? '''Phildar''' : Parce qu'on n'a pas, sur la note, on n'a pas fiché. '''Piont d'interrogation ''' : J'appelle de nulle part. '''Manu''' : Et c'est quoi la fréquence de nulle part ? '''Gérard''' : La fréquence de nulle part, c'est 0, 0, 1, c'est ça ? Ouais, c'est ça, oui. Ouais, trou du cul, tu vas voir taleur le trou du cul, ce qu'il va te faire, toi. '''Manu''' : Il n'a pas dit trou du cul, il a dit comme ton QI. '''Gérard''' : Bon, alors, que pensez-vous de l'affaire Bill Kinton et Monica Libiski ? Attends, c'est la dernière fois que je pose la question, parce qu'après, on enchaîne. '''Point''' : Oui, donc, je vais te répondre. Donc, l'affaire Bill Clinton, je pense que c'est n'importe quoi, parce qu'ils font des cassettes vidéo, ils font des tas de trucs sur Bill Clinton, et ils ont même fait des poupées, Bill Clinton. Donc, je trouve que c'est vraiment n'importe quoi. Donc, voilà. '''Gérard''' : Ok. Donc, je pense qu'il y a Reego qui me met l'IRC, c'est-à-dire ? '''Reego''' : Oui, parce qu'il y a des réactions sur l'IRC. Alors, tout à l'heure, on me disait que Bill Clinton fait ce qu'il veut. S'il veut baiser un boudin, ça le regarde, n'est-ce pas, GG, on me dit. Et on me dit aussi que... c'est Ramsteff, il préfère l'Ara à la vodka que Monica le whisky. '''Gérard''' : Oui, il fait ce qu'il veut. Ce n'est pas mon problème, merci Reego. Donc, on passe à la deuxième question... Tu m'as oublié Gérard. Grosse Caisse. '''Gérard''' : Non, mais attends, Grosse Caisse, on t'a posé... De toute manière, je voudrais bien avoir les fréquences réelles, parce que ça m'étonnerait que Nantes, on écoute Fun Radio sur 90.5. '''Manu''' : Si, c'est ça, mais enchaîne, Gérard. '''Phildar''' : On va chercher, vas-y. Déjà, tu demandes à Grosse Caisse, et après, toi, tu réponds. '''Grosse Caisse''' : Oui, je pense que ce n'est pas de la faute de Bill Clinton, il est tombé dans un piège. C'est Monica qui l'a dragué, et là, il a le droit de la niquer, ça lui fait plaisir. '''Gérard''' : Non, mais attends... Tu crois qu'à ton avis, c'est lui qui aurait fait ça ? '''Grosse caisse''' : Bah oui, c'est lui. '''Gérard''' : Tu ne penses pas que ce serait elle qui serait venue vers lui ? '''Grosse''' : Bah si, de toute façon, il y avait l'attrait du fric, c'est une salope, c'est tout. '''Gérard''' : Bah oui, mais attends, parce que là, on ne va pas... On va pas rentrer là-dedans, parce que... '''Tétard''' : Et on va rentrer en plein dedans. '''Gérard''' : Non, non, mais parce que... Là, je pense qu'à mon avis, c'est... C'est de sa faute à elle. Non, mais ce n'est pas de sa faute à lui, c'est de sa faute à elle. '''Crevette''' : Et l'amour dans tout ça ? '''Grosse caisse''' : Il n'y a pas d'amour, il y a du cul là-dedans. '''Gérard''' : Non, mais attendez, on va continuer. Donc, que pensez-vous... Pensez-vous que ce soit utile de vendre des cassettes vidéo ? Donc, si vous avez suivi les infos quand ça s'est passé, ils ont passé des cassettes vidéo justement à ce propos-là. Alors moi, je vous demande... Qu'en pensez-vous ? Alors on va y aller gentiment. On va demander à Crevette. '''Crevette''' : C'est quoi sur les cassettes, c'est quand on le voit baiser avec Monica, c'est ça ? '''Gérard''' : Mais non mais attends Crevette, l'histoire de la cassette vidéo. Mais sur la cassetter... t'avais qu'à suivre les informations ! Si tu suis pas les informations, tu peux pas... dans ces cas-là, je ne vois pas pourquoi tu as appelé pour réagir. ''[elle tente de reprendre la parole, ce qui agace Gérard, pris dans sa tirade]''. Mais attends, Crevette, s'il te plaît ! Je peux te répondre ? Si tu ne comprends pas le thème du débat, on parle de l'affaire Bill Kinton. Pensez-vous que c'est utile de vendre des cassettes vidéo ? Si tu n'as pas suivi le thème du débat, si tu n'as pas suivi les informations, pourquoi tu veux réagir là-dessus ? Arrêtez de renifler comme des boucs ! Parce que ça commence à m'énerver ! '''Phildar''' : Je crois que c'est point d'interrogation, je suis désolé. '''Point''' : Non, non, non, c'est pas moi. '''Cuvette''' : Non, c'était Cuvette, mais il ne s'occupe pas de moi, Gérard. '''Point''' : T'es sûr que ce n'est pas toi, Gérard ? '''gérard''' : Oh, je voudrais Crevette. Alors, tu réponds à la question. '''Crevette''' : Ben, c'est pas bien, voilà. '''Gérard''' : Ah ouais, mais alors... Attends, attends, tu me dis que ce n'est pas bien. Tout à l'heure, tu me dis, ouais, mais... '''Crevette''' : Gérard, tu veux absolument une réponse. Quand je t'en donne une, tu ne l'acceptes pas, alors je t'en donne une autre, c'est tout. C'est pas bien. '''Phildar''' : Je voulais te demander une question, Gérard. C'était sur quelle chaîne, quand tu as vu avec les vidéos, là ? '''Gérard''' : Alors là, sur la chaîne, je ne donne pas des... '''Phildar''' : C'était la une ? Parce qu'en fait, je crois que Crevette, elle n'a que la deux, donc si ça se trouve, c'était sur la une. '''Crevette''' : Moi, j'ai que la deux, alors... '''Gérard''' : De toute manière, tout ça, c'est passé sur toutes les chaînes. '''Crevette''' : Ah non, pas sur la deux. '''Gérard''' : Menteuse. T'es une menteuse, c'est passé sur toutes les chaînes. Ouais, vous n'avez qu'à suivre le journal de 13h et de 20h. Grosse caisse, on ne va pas s'éterniser sur une chaîne. '''Grosse''' : Ben, ça dépend des vidéos. Si c'est une vidéo de cul, ça peut être intéressant, voir que la teb qu'a notre ami Bill, mais si c'est des histoires de conneries d'interview, ce n'est pas intéressant. '''Gérard''' : Ben, justement, c'est là qu'est le problème. Donc, je suis d'accord avec toi. À mon avis, je pense que ça doit être une histoire d'interview qu'on était sortis sur cassette vidéo. '''Grosse caisse''' : Ouais, mais à ce niveau-là, l'ami Bill, il peut dire n'importe quoi dans les interviews. Vu que c'est un politicien, c'est un menteur, donc on s'en fout. C'est pas intéressant. '''Point''' : Ben, écoute, je pense que c'est n'importe quoi, parce que faire des cassettes vidéo sur des gens politiques, ça ne regarde personne. En fin de compte, c'est la vie privée des gens et puis s'ils font des cassettes sur ça, ils risquent de faire des cassettes sur leur famille et tout, c'est pas... Je trouve que c'est vraiment dégueulasse de faire ça. Ils devraient faire un procès contre eux. '''Tétard''' : Ouais, ben, je suis d'accord avec l'invitée mystère, et je voulais savoir, quand t'étais à New York, t'en as pas vues, toi, des cassettes de Bill Clinton ? '''Gérard''' : Bon, alors, Tétard, bonne nuit pour toi. '''Manu et Phildar''' : Mais c'est une question, Gérard. '''Gérard''' : Non, mais attends, on ne l'a pas vue ! Non, les cassettes vidéo sont sorties il y a... après. '''Tétard''' : Et on peut en avoir où, alors ? Parce que moi, je l'ai raté à la télé. '''Gérard''' : Tu l'as raté dans ces cas-là... Tu vas dans tous les magasins qui vendent des cassettes vidéo, tu la trouveras. '''Tétard''' : À la FNAC, ils le vendent, à la FNAC, tu crois ? Dans les FNCA et Fuck, ils le vendent ? '''Gérard''' : J'en sais rien. Petit slip. '''Petit slip''' : Alors, moi, je pense que c'est malsain. Ben, parce que Bill Clinton, il va se servirer, mais néanmoins, il peut commencer une carrière dans le X. Ça peut être intéressant. '''Reego''' : Dans quel sens ? '''Petit slip''' : Dans le sens positif. '''Gérard''' : Ouais, alors moi, tu penses qu'avec sa femme et ses deux filles... '''Crevette''' : Non, il n'en a qu'une. '''Gérard''' : Non, il en a deux. '''Grosse caisse''' Deux femmes ? '''Phildar''' : Non, deux filles. '''Grosse caisse''' : Non, maintenant, deux femmes. '''Gérard''' : Bon. Bon, c'est bon. Euh, cuvette. '''Cuvette''' : Ouais, moi, je voudrais savoir déjà s'il a des... Qu'est-ce que propage la cassette ? Elle défend Bill Clinton ou... elle l'affiche ? Et puis qui en retire profit ? '''Gérard''' : Non, elle... Elle lui dit comme ça, d'après... Moi, j'ai vu vaguement un reportage. Non, mais il y a un reportage... Il y a un reportage, ça s'est passé dans... Ça s'est passé au tribunal, comme quoi qu'elle... Elle a insisté, comme quoi qu'il lui avait fait des propositions. Max ? Max, s'il te plaît. Tu peux essayer de me couper, là, parce que là... '''Phildar''' : C'est l'invitée mystère qui frotte avec son téléphone. '''Gérard''' : Taleur je vais te frotter quelque chose, toi. Bon, donc... Donc, maintenant, tout le monde a répondu. Moi, je peux vous dire une chose. Maintenant, je vais vous répondre personnellement. Oh, s'il vous plaît ! Oh Manu, Tu me gères tout le monde là, le premier portable... '''Manu''' : Il n'y a pas de portable, c'est le point d'interrogation qui... Bah oui, je suis désolé. '''Point''' : Non, non, c'est pas moi, hein. '''Manu''' : Bah si, je le vois. Je le vois, sur le standard, la petite lumière verte. '''Gérard''' : Tu le vois, bien sûr, et là, moi, j'ai un son vachement grave dans les oreilles, c'est pas possible. Ah non, mets ton caxe, Max, tu vas voir que là... Là, je vais te dire une chose, c'est impossible. '''Max''' : Attends, silence. '''Gérard''' : Ah là, maintenant, non, c'est pareil. Non, mais attends... Bon, donc, moi, je peux répondre à... '''Max''' : Ah oui, ça tord un peu, effectivement, il faut... Hein ? Non, mais c'est un peu criard, effectivement, les voix, là. C'est un peu... Alors, attends, je vais te mettre là-dessus, là, comme ça, c'est mieux, là, ou pas ? C'est un peu plus faible, mais c'est plus calme, écoute. '''Gérard''' : Ouais, mais je sais pas si les... Non, bah là, tu me coupes... Tu me coupes, là, personne m'entend. Vous m'entendez ? '''Les auditeurs''' : Oui, on entend, on entend. '''Gérard''' : Pas moi. '''Max''' : Bah si, parle. '''Gérard''' : Bah non, bah allume. '''Max''' : Bah écoute, c'est parce que je t'ai mis le son province. Vas-y, parle-leur. '''Gérard''' : Mais ils m'entendent pas. '''Max''' : Mais ils t'entendent, on t'entend. '''Les auditeurs''' : On t'entend, Gérard. '''Gérard''' : Attends, moi, j'ai plus rien, là. '''Max''' : Bah, parce que j'ai baissé... Parce que j'ai mis le son différent. Mais si tu veux, je peux remettre... Alors, je te remets celui-là. Bon, bah d'accord, ok. Bah, à ce moment-là, tu baisses dans le casque, alors. '''Gérard''' : Ok. Donc, moi, je peux vous dire que ces histoires de cassettes vidéo et tout ça, pour moi, c'est de la merde. Ça sert à rien de s'en prendre sur une personne pour vendre des trucs de cul. Parce que la personne fait ce qu'il veut. Bon, en fin de compte... Mais attendez, attendez, laissez-moi répondre. Moi, je vais vous donner la réponse. C'est que là, c'est une histoire, on sait pas comment ça va se terminer. C'est une histoire sans queue, sans tête. Ni queue, ni tête, en fin de compte. C'est une histoire ni queue, ni tête. On sait pas s'il va rester. S'il va partir ou autre. Donc là, on va en revenir. On va continuer le thème du débat. Donc, moi, je vous demande la question. Et j'espère... Oui ? '''Phildar''' : Excuse-moi, Gérard. Donc, Cuvette est parti parce qu'en fait, il avait un téléphone pourri. Donc, on l'a dégagé. On a dit que c'était mieux pour le débat. Et on a Coussin d'air à la place, qui a 27 ans et qui appelle de Guadeloupe. '''Gérard''' : Ouais, non, mais attends. Attends, Phildar. Une chose. Une chose que je vais vous demander. N'essayez pas de changer les noms. '''Phildar''' : Non, non, non, c'est pas le même. '''Gérard''' : ...et qu'ils reprennent sous un autre nom. Parce que là, vous avez 24 lignes qui sonnent. Ça sonne. Donc, prenez-moi des gens sur les 24 lignes. '''Phildar''' : Coussin d'air, tu marques à la place de Cuvette. Donc, Coussin d'air. ''[en mode dictée, tandis que Gérard écrit]'' C-O-U-S-I-N. A-I-N. '''Gérard''' : A-I-R ! Merci. Conssin d'AIR ! '''Manu''' : Oui, mais... Coussin d'air. A-I-N. '''Gérard''' : Ouais, merci. Coussin d'air, c'est C-O-U-S-I-N. Merci. Merci, Phildar, pour ton orthographe. Donc, je vous pose la... '''Phildar''' : Tu peux lui dire bonjour. '''Gérard''' : Bonjour à toi, Coussin d'air. '''Coussin''', ''[après 3 secondes, voix saturant comme sur un téléphone mobile]'' : Bonsoir. '''Gérard''' : Tu te réveilles ? '''Grosse caisse''' : Il aurait dû s'appeler Airbag. '''Phildar''' : Non, mais il a un décalage, Gérard. Il est en Guadeloupe. '''Tétard''' : Attends, on va te dire un truc. Tu vas le recevoir dans deux secondes. Bouge pas. '''Coussin''' : Allô ? '''Gérard''' : Oh ! Bon, allez, hop. '''Manu''' : Parle-lui, Gérard. '''Gérard''' : Ouais, non, mais attends. Ça veut dire quoi, là ? Oh ! Phildar ! Non, mais attends. Coussin d'air, t'es là ? Non. '''Coussin''', ''[après 1 seconds]'' : Ah oui, je suis là. '''Gérard''' : Non, il n'est pas là. Bonne nuit, bonne nuit. Allez ! Bonne nuit ! Allez ! Oh mais merde ! ''[Manuparodie une note de méditation zen, Max tente de reprendre la parole]''. '''Max''' : Gérard, Gérard, Gérard. Gérard. Gérard. Il appelle de Guadeloupe. Donc, il y a un décalage d'une seconde. C'est normal, il reçoit après. Ça ne t'est jamais arrivé d'appeler, toi, à l'étranger, d'avoir une demi-seconde de décalage ? Bon, ben, tu m'entends, Coussin d'air ? '''Coussin''', ''[1 seconde après]'' : Oui. Oui, je t'entends. '''Max''' : Voilà. Il y a une demi-seconde de décalage, c'est tout. Lui, avec le décalage qu'il y a... Écoute-moi, Gérard. Gérard. Gérard. Avec le décalage qu'il a, ce monsieur du Guadeloupe, Coussin d'air, si je ne me trompe pas, toi, pour toi, on fait encore l'émission du matin. Le problème, c'est qu'il ne sait pas quand il va passer le soir. Il croit qu'on fait encore l'émission du matin, parce qui est un décalage tellement long en Guadeloupe que pour lui, il y a une semaine de retard, les émissions. '''Coussin''' : Oui, c'est ça, absolument. Une semaine de retard, oui. '''Gérard''' : D'accord, une semaine de retard. OK, merci. '''Coussin''' : Je t'en prie. '''Gérard''' : À quoi servira cet argent vendu par ces cassettes ? Alors, on va demander à Crevette. '''Crevette''' : Ça va servir à payer ses frais d'avocat. '''Gérard''' : D'accord. T'es à côté de la plaque. '''Crevette''' : Ah ben, excuse-moi. C'est ce que j'avais entendu. '''Gérard''' : Eh, au sondage, vous vous la fermez... '''Manu''', ''[indigné, puis ferme]'' : On n'a rien dit. Reprends ton débat, Gérard, On n'a rien dit, alors vas-y. '''Gérard''' : Donc, Crevette ? '''Crevette''' : Oui, moi, j'ai entendu dire, en fait, il y a des acteurs qui ont filé de la thune à Bill Clinton pour qu'il paye son procès, ses frais de procès. Et l'argent des cassettes irait aussi pour payer les frais de procès. Ainsi que tous les gadgets vendus en sex-shop. '''Gérard''' : Ah non, mais on parle de la cassette. La cassette vidéo, on ne parle pas des... Non, mais on ne parle pas des histoires de gadgets ou autres. Moi, je te parle de la cassette vidéo. Ok. Grosse caisse ? '''Grosse caisse''' : Ben, ça fera de l'argent à Bill Clitoris. Comme ça, il pourra s'acheter de nouveaux trucs, des godes et tout ça pour sa femme. Ça pourrait être vachement sympa. Puis, peut-être une nouvelle paire de chaussettes pour l'hiver. Tu sais jamais. '''Gérard''' : Ouais, d'accord. Point d'interrogation ? '''Point''', ''[entrecoupée par les rires et les gens qui pouffent bruyamment]'' : Alors, je pense que... Cet argent, j'espère que lui, il va en faire bon usage pour les associations humanitaires ou quand même autre chose. '''Tétard''' : Mon cul, ouais. '''Gérard''', ''[rageux]'' : Attendez, attendez. Qui c'est qui vient de dire mon cul et qui rigole comme un con ? Alors, maintenant, Grosse caisse, Tétard et Petit slip, maintenant, c'est à vous trois que je m'en prends. '''Grosse caisse''' : On n'a pas dit un mot. '''Gérard''', ''[menaçant]'' : Alors, lequel qui rigole derrière ? Lequel ? '''Max''' : Et comment tu veux qu'ils te répondent ? Parce qu'ils savent très bien que s'ils disent qui l'a fait, il va se faire virer. Donc, le mec, il répond pas. '''Petit slip''' : Ouais, c'est Polo, c'est Polo. Si, si, c'est moi, c'est Polo. '''Max''' : Bon, ben voilà, c'est bien qu'il l'ait dit, c'est bien. '''Gérard''', ''[frustré]'' : Non, mais attends, ça commence à... Là, on va pas commencer comme ça, Phildar. Parce que tout à l'heure, moi, je vais prendre sur les 24 lignes. '''Max''' : Mais arrête de faire allusion aux 24 lignes. Reviens dans ton débat, c'est bien depuis tout à l'heure. '''Gérard''' : Donc, grosse caisse. Donc, toi, tu la fermes, toi. Toi, t'as répondu, point d'interrogation. '''Point''' : Oui, donc, je t'ai répondu. J'espère que cet argent, il va en faire bon usage pour les aides humanitaires. '''Tétard''' : Ouais, ben, je pense qu'avec la thune qu'il a faite, il va pouvoir se payer d'autres prostituées pour se faire éponger, quoi. '''Gérard''' : Alors, Tétard, je vais te dire une chose. Pour l'instant, ça fait deux fois. '''Tétard''' : Ben, attends, il l'a payée... '''Gérard''' : Ça fait deux fois ! Il a rien payé. '''Max''' : Il a pas le droit de répondre ça, maintenant ? Il faut donner des bonnes réponses ? Il fait ce qu'il veut, il répond ce qu'il veut. C'est un jeu ou quoi, ton truc ? '''Gérard''' : Non, mais attends, je vais voir. Parce qu'il y en a certains qui répondent à côté de la plaque. '''Max''' : Non, ils répondent ce qu'ils ont envie de parler, ce qu'ils pensent. '''Gérard''' : Ben, alors, Tétard, pour toi... '''Tétard''' : Ben, il l'a payée, Monica Lewinsky, pour se faire éponger. Il l'a payée. '''Gérard''' : Ok, ok, ok, c'est bon, c'est bon. '''Max''' : Tu lui enlèves la croix. '''Petit slip''' : Alors, moi, je pense que, à ce que j'ai entendu dire, que ça irait directement au don du Front de Libération des Nains de Jardin. '''Grosse caisse''' : Ouais, c'est vrai. '''Crevette''' : Ouais, enfin, ça, c'est une rumeur. '''Gérard''' : Quoi, quoi, quoi, quoi, quoi, quoi ? Attendez, attendez, qui c'est qui réagit derrière Petit Slip ? Ouais, Crevette ? '''Crevette''' : Oui, je te dis, c'est une rumeur, les Nains de jardin. Mais bon... '''Grosse caisse''' : Moi, j'ai entendu dire ça, moi. C'est une rumeur qui court. c'est la vérité. '''Coussin''' : Oui, Gérard. Moi, je crois qu'avec l'argent, il va réparer sa voiture et s'acheter des lacets. '''Gérard''' : Bon, alors, moi, je peux vous dire une chose, que... Non, mais attends, Coussin d'Air, je pense que t'as vachement de... T'es vachement pas au courant de l'histoire. '''Max''' : Il est en Guadeloupe, c'est pas encore arrivé, l'histoire. '''Gérard''' : Donc, moi, je peux vous dire une chose, qu'à mon avis, je pense que... '''Max''' : C'est Georges qui va l'amener, le scoop, là-bas. Georges. Ben, le tourbillon, là. Georges Bush. '''Gérard''' : Ouais, ben, ça, cette histoire-là, je veux pas en entendre parler, parce que j'ai eu des... '''Max''' : D'accord. Revenons, revenons au débat. '''Gérard''' : Donc, je pense que, à mon avis, là, je pense que... Je suis d'accord avec le point d'interrogation, donc je pense qu'il devrait faire moins... L'argent qu'il va recevoir, on sait pas combien, mais je pense qu'il ferait mieux de s'occuper des associations humanitaires, c'est-à-dire moins... que les mômes, ils n'ayent pas de flingues, et tout ça, et qu'ils s'amusent pas à fumer, et autres. Donc, à mon avis... ''[applaudissements du studio]'' À mon avis, là-dessus, je pense qu'on sait pas encore. On sait pas, parce que, là, pour l'instant, ils en reparlent pas trop à la télé. '''Max''' : Ben, là, il est une heure et une, peut-être. '''Gérard''' : Mais on pense que... Je pense que cette histoire est loin d'être terminée, donc on verra bien par la suite. Donc, je vous pose d'autres questions, vous allez réfléchir. Donc, la quatrième question. « Croyez-vous que les journalistes s'occupent trop de la vie privée des stars ? » On va demander à Crevette... Non, on va pas demander à Crevette, on va demander à Coussin d'air, tiens. '''Coussin''' : Moi, je crois que, en ce qui concerne les journalistes, ils font... Effectivement, ils s'occupent trop de la vie des autres journalistes qui sont stars. '''Gérard''' : Ouais, mais... Dans ce cas-là, moi, je vais te poser... Mais attends, attends, Coussin d'air. Coussin d'air, je vais te demander... Coussin d'air, je vais te poser une question : est-ce que tu crois que, là-bas, vers chez toi, est-ce que t'as des journalistes qui s'occupent... qui s'occupent des personnes ? '''Coussin''' : Alors, écoute, oui, il y a effectivement des journalistes. Moi, je vois, il y a eu le cas du chanteur Francky Vincent... '''Gérard''' : Non, non, mais attends, Francky Vincent, c'est pas pareil. Parce que, vas-y, Francky... C'est bon, c'est bon. Ouais, vas-y, Francky, c'est bon, c'est bon. Non, mais attends, Coussin d'air, moi, je te demande, là-bas, en Guadeloupe, est-ce que vous avez des journalistes qui s'occupent des stars ? '''Coussin''' : Alors, c'était ma réponse, justement. J'étais en train de t'expliquer qu'il y a chez nous des journalistes qui, effectivement, se sont occupés de très, très près de Francky Vincent... '''Gérard''' : Non, mais pourquoi tu parles de... Francky Vincent... '''Crevette''' : c'est une star en Guadeloupe. '''Gérard''' : Non, mais attends, rCevette. Mais attendez, attendez, pourquoi vous... Vous voulez parler de, tout de suite, Francky Vincent ? Vous avez... Mais vous avez d'autres chanteurs guadeloupéens, comme la compagnie Créole, tout ça ? '''Manu''' : Il y a Demis Roussos, aussi. '''Tétard''' : Adamo, Adamo... '''Gérard''', ''[irrité par cette moquerie, soulignée par un élcat de rire de Reego]'' : Non, Demis Roussos... attends. Occupe toi du standard, toi. '''Reego''' : Adamo, Adamo. '''Coussin''' : Gérard, il faut que tu saches qu'ici, en Guadeloupe, de Pointe-à-Pitre à le Gosier, c'est Francky Vincent... Francky Vincent, la star. '''Gérard''' : Attends, jusqu'où, tu m'as dit ? Je connais pas. '''Manu''' : C'est juste en dessous de la langue. '''Coussin''' : Et donc, voilà. Du fait que Francky Vincent soit une star, alors forcément, tous les journalistes s'en occupent, ils lui offrent des cadeaux... '''Gérard''' : Ouais, non, mais attends, Coussin d'air, Coussin d'air, Coussin d'air, je vais pas... On va pas trop s'appuyer sur tout ça. Bon, moi, si je te dis, la compagnie Créole, qu'est-ce que ça donne, là-bas, en Guadeloupe ? '''Max''' : Ce qui est bien, c'est que ça a super à voir avec le débat de... '''Gérard''' : Non, non, non, non, parce qu'il veut parler de Francky Vincent, on va vite abréger. '''Coussin''' : C'est-à-dire que la compagnie Créole, il n'y a plus que les vieux qui écoutent ça. Si tu veux, c'est assez ringard, maintenant, chez nous. Et celui qui cartonne vraiment, c'est Francky Vincent. Celui qui chante, tu sais, « Vas-y, Francky, c'est bon. Vas-y, Francky, c'est bon, bon, bon. » '''Gérard''' : OK, OK, OK, Coussin d'air. Donc... ''[la musique de Haut-les-mains de la compagnie Créole, dans le refrain, apparaît. Coussin d'air reprend l'air et quand la musique est baissée puis interrompue, il continue, sans s'arrêter, reprenant en boucle trois fois le refrain, en solo, avec des paroles approximatives. Gérard, frustré mais patient, cherche à l'arrêter en citant son nom]''. '''Max ''' : On peut reprendre le débat là, parce que les auditeurs vots zapper là... Zappez parce que là c'est pas possible. '''Gérard''' : Petit slip, donc pour toi, croyez-vous que les journalistes s'occupent trop de la vie privée des stars, donc on va pas essayer de reprendre sur les stars de chansons, on reprend sur l'affaire Bill Kinton. ''[silence]'' Bon, petit slip une fois, petit slip deux fois, petit slip trois fois, au revoir ! '''Manu''' : C'était moi, c'est moi, désolé. Non, pas taper, c'était moi, je m'excuse. On reprend. '''Gérard''' : Alors tu me mets tout le monde... '''Manu''' : Ça y est, ça y est. '''Gérard''' : Voilà, alors petit slip pour toi. '''Max''' : On va les foutre en quarantaine. '''Petit slip''' : Alors donc, moi je pense que les journalistes vont trop loin, puisqu'ils interviewent encore Elvis Presley, Bob Marley, Jimi Hendrix, quoi. Les salauds. '''Gérard''' : Non mais attends, je te parle de l'affaire Bill Kinton, je te parle pas des chanteurs. Bon alors petit slip, c'est bon, je vois qu'apparemment tu t'endors. '''Petit slip''' : Oh non, non, je suis réveillé. ''[blanc]'' '''Grosse caisse''' : Allez Gérard, on se réveille. '''Gérard''' :Non mais c'est vous qui allez vous réveiller, parce que là pour l'instant... On parle pas des chanteurs, on parle de l'affaire Bill Kinton, ok ? '''Petit slip''' : Ben toi Gérard, en tant que chancelier de l'Allemagne<ref name="explic1"></ref>, qu'est-ce que t'en penses de tout ça ? '''Gérard''' : Non mais alors pour l'instant, Tétard. Bon alors Tétard, qu'est-ce que t'en penses toi ? '''Tétard''' : Moi je pense qu'effectivement les journalistes, ils s'occupent beaucoup trop de la vie privée des stars, je pense que tu fais référence aux paparazite. '''Gérard''' : Non, non, non, non, non, attends. '''Tétard''' : Si, si, forcément. Je voudrais que tu nous racontes ton expérience personnelle, et il faut lutter contre l'illettrisme en France, oui. '''Gérard''' : Non, alors là je te répondrai pas là-dessus. Non, non, je te répondrai pas. Grosse caisse. Point d'interrogation ? '''Point''' : Oui, je pense que là ils s'occupent un peu trop de la vie privée des gens, parce que... Parce que quand tu vois ce qui s'est passé avec Michael Jackson ou même Madonna je crois que... '''Gérard''' : Non mais attends, toi t'es à côté de la plaque aussi, toi. Non mais t'as fumé la moquette durant l'Allemagne ? '''Point''' : Non, non, ça m'arrive de fumer la moquette, mais pas... '''Gérard''' : Ouais, je serais que toi je fumerais le cigare à moustache. Ouais, je crois que t'as fumé le cigare à moustache, hein. '''Point''' : Donc pour te répondre, je pense que les journalistes ils s'occupent un peu trop des gens et ce qu'ils font c'est pas... C'est que ça regarde personne, quoi. En fin de compte, ils sont toujours là, dès qu'il y a une star qui arrive, ils sont toujours ici. '''Gérard''' : Mais attends, point d'interrogation. Je crois que t'as pas... Non mais t'as pas compris. Hé, celui qui parle derrière, tu te la permets, parce que tout à l'heure tu vas retourner au standard, ça va aller vite. Bon, moi je te parle... Croyez-vous que les journalistes s'occupent trop de l'affaire des stars ? '''Point''' : Justement, les journalistes, ils s'occupent un peu trop de la vie privée des gens. '''Gérard''' : Dans quel sens ? '''Point''' : Dans le sens qu'ils sont toujours là, dès qu'il y a une voiture qui passe, qu'ils sont dedans, ça y est, ils sont là, avec les photographes et tout, hein. '''Petit slip''' : Il y a une Mercedes, là, qui a eu un accident, là... '''Gérard''' : Bon, toi tu la perds ! Tu la fermes ! Toi, avec ta Mercedes, tout à l'heure, tu as dégagé, ça va aller vite, mais... Tu vas pas durer longtemps ! Bon, je sens qu'on va virer... Grosse caisse. Alors, grosse caisse, tu réponds ? Bon, hé ! On y va, on y va, hein ! Hé, on accouche ! '''Manu''' : Gérard, Gérard, Gérard, j'ai un petit truc pour revenir dans le débat, si tu veux. Donc, on a posé la question aux Français, que pensez-vous de l'affaire... Levinsky... ''[Gérard cherche à l'interrompre avec du non]'' s'il te plaît... Mais, laisse-moi lire mon sondage ! '''Max''', ''[agacé]'' : Mais attends, mais c'est une vraid question, rholàlà ! Tu veux faire avancer ton débat, ou c'est comme avant, c'est... '''Gérard''' : Non, mais attends, parce qu'à mon avis, c'est eux qui ont fait ça. '''Max''' : Attends, on va écouter, on va voir, on va juger. '''Manu''' : À la question, que pensez-vous de l'affaire, Vivisky ? Donc, les Français ont répondu... '''Gérard''' : Levinsky ! '''Manu''' : Levinsky ! Ok, excusez-moi, prononciation. '''Max''' : Si tu ne sais pas le dire, demande-lui, ouais. '''Manu''' : Donc, ils ont répondu non à 50%, mais pourquoi à 49% et 1% a dit : « Moi je pense que vu la circonstancialité du monde à notre époque, pourquoi ne pas envisager de répondre par la négation ? ». Et j'aimerais savoir ce que t'en penses. '''Gérard''' : Bon, ça, j'en ai rien à foutre. Tte manière, à mon avis, c'est toi qui a... Bon, allez. On va demander à Grosse Caisse, parce que... '''Max''' : On a fait ça sur les trottoirs du bois de Boulogne, hier, dans la nuit. '''Petit slip''' : C'est quoi, Gérard, que tu vaux au bois de Boulogne ? '''Gérard''' : Ouais, c'est toi qui viens de le marquer, connard ! Hé, tu me prends pour un con, là ? '''Phildar''' : Non, je t'y laisse. '''Gérard''' : Non, tu m'y laisses ? Bah, tu ferais mieux d'aller voir où c'est ta 205, abrouti. Occupe-toi de ton cul. ''[Applaudissements)''. Grosse Caisse, allez, on active, là, sur la question, là, parce que je pense que personne ne veut réagir. Bon, allez, Grosse Caisse ! '''Grosse caisse''' : Ouais, ouais, je suis là, je te parle. Bah, il y a un problème, c'est qu'aux Etats-Unis, c'est vachement trop libéral, comme pays, alors ce qui fait que les médias, ils font n'importe quoi, ils font chier n'importe qui, n'importe comment. '''Crevette''' : Moi, je pense que c'est normal que les stars on connaisse leur vie privée, parce que c'est des personnages publics, et elles doivent être exemplaires, et donner l'exemple aux gens, donc c'est tout à fait normal de savoir si Bill Clinton se fait sucer la bite ou si Elton John est pédé. '''Gérard''' : Bon, alors, je vais te dire une chose, Crevette, tu vois, là, moi, je te réponds tout de suite, et là, je vais te dire que là, t'as tout faux. Oh, s'il vous plaît, derrière, on se la ferme. '''Max''', ''[hilare]'' : Gérard sait très bien si Elton John se fait sucer la bite. '''Gérard''' : Là, ça, c'est une histoire. Non, mais c'est vrai. Attends, celle qui rigole comme... celle qui rigole ou autre... '''Tétard''' : Non, mais Gérard, il a raison, on ne veut pas savoir que Mick Jagger, il encule David Bowie. '''Max''' : Bon, allez... '''Petit slip''' : Il encule Gérard. '''Max''' : Ah, non, bon, alors là. '''Gérard''' : Allez, hop. Dehors, dehors pour lui. Allez, hop. Cherche pas, tu me sors... '''Manu''' : T'as compris, tu sors de chez toi, dehors. '''Gérard''', ''[rageur]'' : Non, non, vous faites le boulot correctement, sinon, c'est moi qui le fais. '''Max''', ''[retenant son rire]'' : Tu peux pas faire ton débat et ton ton standard d'émission. '''Phildar''' : Donne un chiffre entre 1 et 6. '''Gérard''' : Non, non, je veux pas le savoir. Tu me prends... '''Tétard''' : C'était Pépito. '''Manu''' : Dehors, Pépito. '''Phildar''' : Bonne nuit, Pépito. '''Max''' : T'as qu'à prendre Granola à la place. '''Gérard''' : Voilà. Donc, moi, je peux vous dire une chose, parce que les journalistes s'occupent trop des affaires des personnes haut placées. Et ça... Non, mais ça, c'est un truc qui me dégoûte, parce que j'ai encore regardé un reportage ce soir, ça me prend la tête. '''Manu''' : C'était X-file, non ? '''Gérard''' : Non, non, X-file... Merci, t'éteins ton micro. '''Manu''' : Je te demande, c'est tout. '''Gérard''' : T'éteins ton micro, parce que X-file, je l'ai pas regardé. Donc, moi, je peux vous dire une chose, que là, là-dessus, ça... Ça me prend la tête. Ah ouais, que pensez-vous des Français... Alors, t'en as qui disent à 100%. Ah ben ouais, les Français, ils se débrouillent bien. De l'autre côté, t'en as 50% qui disent « Oh ben non, maintenant, on s'en fout, on regarde pas la télé, ceci, cela. » Donc, bref, passons. ''[fou rire du studio, applaudissements]''. '''Max''' : Mais c'est extraordinaire ! '''Gérard''' : Non, mais moi, j'en ai rien à foutre, moi, de toute manière... De toute manière, on a voté, on en chie, on en chiera toujours. Et que ça soit dans n'importe quel pays, de toute manière, on va en chier partout. '''Max''' : De toute façon, et je me demande même, je m'aventure un peu, je me demande si Chichi se fait pas des fois un petit peu..il a pas des gâteries dans le bureau ovale. On revient dans le débat. '''Gérard''' : Non, mais ça, moi, je vais te répondre tout de suite à ta question. S'il vous plaît, merci ! '''Tétard''' : La pipe au sac à main. '''Gérard''' : Tout à l'heure, y'en a un qui va dire la pipe au sac à main au standar, il va être clair et net. Donc moi, je peux répondre à ta question, de toute manière, on l'a voulu, on l'a. Maintenant on en chie. Et on va en chier pendant cinq ans. '''Max''' : Eh, moi, je propose, la semaine prochaine, on fait un débat sur les pattes d'ef et sur la politique. Bon, alors, question suivante, on revient dans le débat. '''Gérard''' : Mais c'est pas pour ça qu'on va avoir des augmentations ou autres et que tout va baisser. Au contraire.. Donc, pensez-vous que le président des USA sera démis de ses fonctions ? Donc, on va demander à Crevette. '''Crevette''' : Ouais, je sais pas, Gérard, je suis pas voyante, je sais pas. '''Gérard''' : Non, non, mais on s'en fout d'être voyante ou pas voyante, on en a rien à cirer. '''Crevette''' :''' ''' : Je ne sais pas, Gérard, je ne sais pas s'il va être démis. Je fais pas partie du Congrès, je prends pas de décision aux Etats-Unis, je suis même pas américaine, donc je ne sais pas. '''Gérard''' : Non, mais de toute manière, t'as pas besoin d'être américaine ou autre, tu peux très bien réagir vis-à-vis des informations que t'écoutes. '''Crevette''' : Oui, mais bon, je ne sais pas, c'est pas moi qui prends la décision. '''Gérard''' : D'accord. Grosse caisse ? '''Grosse caisse''' : Ouais, bah, en fin de compte, je sais, j'ai une exclu, en fin de compte, je sais que Clinton, c'est pas lui qui va se faire virer, il va se désister, il va tourner dans une nouvelle série, au lieu de s'appeler X-Files, ça s'appellera X-Clinton, ça sera du cul, 100%. '''Gérard''' : Alors, Grosse caisse, tu sais ce que tu me fais ? '''Grosse caisse''' : Bah, j'ai pas une grosse caisse. '''Gérard''' : Non, mais tu vas aller faire un gros dodo, tu vas retourner voir Phildar ou Manu qui t'ont... '''Grosse caisse''' : Non, mais tu voulais des réponses, t'en as une ! C'est de la censure, t'es pire que le CSA, toi ! '''Gérard''' : Bon, alors tu dégages. '''Phildar''' : C'est ça, pas de marque ! Pas de pub, pas de pub ! '''Gérard''' : Terminé, terminé, terminé pour lui. Terminé, tu le vires, tu me reprends quelqu'un d'autre. Terminé... '''Phildar''' : Qu'est-ce que j'en fais ? Il a pas de contrat à Fun, je peux pas le vorer. '''Gérard''' : TERMINÉ ! Eh ! Tu fais gaffe, sinon je vous vire tous les deux. Tu fais gaffe, sinon je vous vire tous les deux du standard. Alors, tu le vires. Point d'interrogation. Attendez, attendez, attendez, avant de répondre, peut-être une question IRC, non, Reego ? '''Reego ''' : Oui, il y a des gens qui me demandent : si un jour tu deviens président, est-ce que tu te laisseras aller, toi aussi ? Est-ce que tu tromperais Sandy ? '''Gérard''' : Ça, c'est un truc... C'est un truc personnel, donc je peux pas te répondre tout de suite. '''Reego''' : On me dit aussi, vu que Sandy est déjà un bout... Enfin, non... '''Gérard''' : Non, non, non ! Vu que Sandy est déjà un boudin, alors c'est qui qui a... Attends, attends, attends, s'il vous plaît, merci au standard. C'est qui qui a sorti ça au standard ? '''Reego''' : C'est un mec qui s'appelle Reego, je sais pas qui c'est. '''Gérard''' : Ah, Reego, c'est pas toi ? '''Reego''' : Non, il y en a plusieurs, il y en a plusieurs. '''Gérard''' : Donc, on revient sur le débat, donc point d'interrogation. '''Point''' : Oui, bah... Attends, j'ai pas compris la question, déjà. '''Tétard''' : C'est bête. '''Gérard''' : Bon, attends, je te préviens, Grosse caisse, je le veux plus. Tu me reprends quelqu'un d'autre, hein ? Pas sous un autre nom. Alors, pensez-vous que... Que le président des USA sera démis de ses fonctions ? '''Point''' : Oui, je pense qu'il sera sûrement... Soit c'est lui qui partira, ou s'il y a eu un jugement, je pense qu'il va sans doute en avoir un autre, je pense que c'est les juges qui vont juger, d'essayer de savoir s'il est coupable ou pas. '''Gérard''' : D'accord. 5 minutes, oui ? '''Manu''' : Oui, 5 minutes, donc on accueille Gicleur à la place de Grosse Caisse. '''Gérard''' : Bon, de quelle ville ? '''Gicleur''' : De quelle ville ? Grenoble. '''Gérard''' : La fréquence ? '''Gicleur''' : 98.8. C'est tout ? Tu veux savoir si je suis marié, non ? '''Gérard''' : Bon, Gicleur, tu vas commencer à te la fermer, parce que je vais contrôler la fréquence tout à l'heure. '''Gicleur''', ''[couvert par Gérard qui veut enchaîner]'' : Attends, qu'est-ce que tu vas me contrôler ? oh tu vas pas en plus me traiter de menteur, déjà que tu m'appelles à cette heure-ci... alors c'est gentil, quoi. '''Gérard''' : Oh, si t'es pas content, tu retournes au standard, d'accord ? '''Max''' : Il vient d'arriver, attends, ça fait 3 secondes qu'il est là. Parce que maintenant, t'as même plus confiance aux auditeurs qui te donnent les fréquences, tu veux vérifier, toi ? '''Gérard''' : Ouais, mais attends, parce qu'avec eux... Je suis con ? Avec un con comme moi, on s'amuse, avec un con comme toi, on se fait chier. Et con, ça veut dire champion olympique de natation. '''Max''' : Non, mais maintenant, c'est bon, Grenoblois, maintenant, on va rentrer dans le thème du débat, si c'est pour foutre le bordel, il va redégager pour de bon... '''Gérard''' : Allez, vas-y, tu réponds à la question ? '''Gicleur''' : Ouais, ben, tu peux répéter la question, c'est Manu qui m'a appelé, j'ai pas pu entendre. '''Gérard''' : Non, ben, je répète pas la question. Hop, basta. Ah non, mais attends, Manu, les mecs, s'ils écoutent la radio, ils... '''Manu''' : Oui, mais je l'ai rappelé juste au moment où tu posais la question. '''Gérard''' : Ouais, mais attends, eh, moi, il me reste plus que 6 minutes à... '''Manu''' : Et ben, répète ta question, et puis on envoie le son, on y va. '''Max''' : Quand je te dis que le débat finit à 1h30, tu peux aller jusqu'à 32. '''Gérard''' : Pensez-vous que le président des USA sera démis de ses fonctions ? '''Max''' : Encore, t'en es que là ? '''Gérard''' : Ben oui, mais attends, mais... '''Crevette''' : Mais il avance pas. '''Gicleur''' : Bah, écoute, moi, je pense qu'il va rester, parce qu'apparemment, les Américains veulent le garder. Et que c'est pas parce qu'il a fait une petite pipe qu'il est pas capable de gouverner son pays. Enfin, je pense. '''Tétard''' : Ouais, ben, moi, je pense que le président des United States, là, machin, je sais pas quoi, là, il va être remis de ses onctions, ouais. Et il l'aura bien mérité, d'ailleurs, n'est-ce pas ? '''Gérard''' : Oh, putain, hé, oh ! Hé, tu peux me la moquer, toi ? '''Tétard''' : Ben quoi ? Tu me demandes s'il va être remis de ses jonctions, je te dis que oui. '''Gérard''' : De ses fonctions ! '''Tétard''' : De ses fonctions, c'est pareil, c'est pareil, ouais, ouais, pas du tout, ouais. '''Gérard''' : Bon, d'accord, apparemment, je crois que t'es... Euh, petit slip ? '''Petit slip''' : Ben, moi, je pense qu'il est déjà démis de ses fonctions, puisqu'il est mort, John Kenedy. '''Gérard''' : D'accord, alors, toi, tu peux dégager. Toi, c'est... Ça y est, c'est bonne nuit pour toi. '''Petit slip''' : Bonne nuit, bonne nuit, bonne nuit. '''Gérard''' : Bonne nuit, au revoir. Tu dégages. Euh, coussin d'air ? '''Coussin d'air''' : Eh bien, moi, je crois que ce serait dommage qu'il soit démis de ses fonctions, parce que, maintenant, tout le monde est au courant aux États-Unis et dans le monde, alors, tu imagines pas le président aller à l'ANPE <ref name="hist1"></ref> et dire bonjour, etc., et les filles auront peur, il pourra même plus aller voir les prostituées, parce qu'il aura cette affaire de pipe, et forcément, les pipes, bon, ça engage à rien, ça entretient l'amitié, c'est pas méchant, et forcément, moi, je crois qu'il... Il devrait rester au pouvoir, hein. '''Gérard''' : Ouais, mais cinq minutes, s'il vous plaît, merci. Bon, euh, je vais vous répondre après, mais, pour l'instant, moi, je peux vous dire qu'à mon avis, il sera des... Il restera, mais il faut attendre l'histoire, parce que c'est un peu trop long. '''Gicleur''' : Mais toi, tu continues toujours à faire de la radio, pourtant. '''Gérard''' : Ouais, mais ça, c'est mon problème, c'est pas le vôtre. Donc, il faut pas confondre la radio et... '''Coussin''' : C'est parce que tu suces, c'est pour ça. '''Gérard''' : Non, non, mais attends. Non, il y a tu suces et tu suces pas. '''Manu''' : Bon, Gérard, à la place de Petit Slip que t'as dégagé, on accueille donc Serpillière. '''Gérard''' : Ouais, bah d'accord. Alors, Manu... Non, non, mais Manu... Non, non, Manu, moi, je vais te dire une chose. Tu vois ? Là, ce que t'es en train de me faire, tu changes les noms. '''Manu''' : Non, j'ai rappelé quelqu'un d'autre. '''Gérard''' : Non, non, non, non, non, non, non, non, tu l'as repris, tu lui as dit. Au lieu de t'appeler Petit Slip, tu vas s'appeler Serpillière. '''Max''' : Ceci dit, un slip, un slip, c'est un peu une Serpillière, quelque part. '''Manu''' : Surtout ceux de Gérard. '''Gérard''' : Moi, je vais sélectionner pour le deuxième débat. '''Max''' : Parce que Gérard, il sait très bien, il met des Serpillières à la place de Petit Slip, il peut dire que... '''Gérard''' : Donc, on va prendre Serpillière. '''Manu''' : Voilà, et tu verras que c'est pas le même. '''Gérard''' : Ouais, bah, on verra. '''Max''' : On se dépêche, on se dépêche, Gérard. La dernière question, vite. '''Gérard''', ''[écrit, lentement]'' : Serpillière. Alors, la dernière question. Les journalistes de la télé en font-ils pas un grand plat de cette histoire ? Je répète. Je récapitule depuis le début. '''Max''' : Ça fait pas trop le con avec la politique, on va avoir des problèmes. '''Gérard''' : Donc, les journalistes de la télé en font-ils pas... Pas un grand plat de cette affaire ? Donc, on va demander à Crevette. '''Crevette''' : J'ai pas compris la question. '''Gérard''' : Bon, alors, Crevette, c'est terminé pour toi. Tu comprendras mieux dans ton lit. Tétard ? '''Tétard''' : Bah, moi, je pense qu'effectivement, il faut mettre les petits plats dans les grands et pas mettre les deux pieds dans le plat, ni tous ses œufs dans le même panier, c'est clair. '''Gérard''' : Ouais, de toute manière, il y a un proverbe qui dit, il faut pas mettre les deux pieds dans le même sabot. '''Tétard''', ''[sous les applaudissements du studio]'' : Tout à fait, surtout quand t'as des sabots. '''Serpillère''' : Bah, moi, je pense qu'ils font vraiment un grand plat de choucroute, quoi. '''Gérard''' : Non, mais attends, je vois pas le rapport avec l'affaire Bill Quinton, là. '''Tétard''' : Bah, c'est mieux qu'un bon coup de pompe dans le cul, hein. '''Gérard''' : Bon, d'accord, t'as pas compris la question. Non, mais je serais que toi, je prendrais mon balai brosse et je passerais la Serpillière dans tout l'appartement, OK ? Coussin d'air ! ''[applaudissements presque généraux]'' '''Gérard''' : L'autre abrutit, là, il applaudit pas parce que c'est lui qui l'a sélectionné. Donc, c'est bien... Donc, Coussin d'air. Euh, quoi, accouche ? Taleur, je vais t'accoucher, toi. '''Finger''' : C'est Finger. '''Gérard''' : Ouais, Finger, tu vas voir, taleur, Finger, je vais te manger par les deux bouts. '''Gicleur''' : Bah, c'est Finger, il t'a mis un gros doigt. '''Max''' : Faut qu'on fasse une réunion, c'est pas possible, le deuxième débat, on peut pas... '''Gérard''' : Non, non, le deuxième débat, je le fais pas comme ça. Coussin d'air. '''Coussin''' : Oui, alors, je disais que, moi, je trouve pas, au contraire, que les journalistes aient fait beaucoup, beaucoup de choses sur cette affaire-là, parce que je regardais pas plus tard que tout à l'heure, retransmis en Guadeloupe, le tiercet, et le journaliste a pas parlé une fois de l'affaire Bill Clinton. '''Gérard''' : Non, mais attends, Coussin d'air, Coussin d'air ! Hé, Coussin d'air ! Et celui qui se marre comme un bourrin, là, il la ferme. '''Max''' : Ouais, mais enfin, ça sert à rien, arrête de dire « la ferme » toutes les deux secondes. Toi aussi, tu la fermes quand tu parles. '''Gérard''' : Euh, Coussin d'air. Non, mais je vois pas le rapport avec l'affaire Bill Kinton et puis, euh, les chevaux. Non, attends, Coussin d'air, je te répète la question. Les journalistes de la télé en font-ils pas trop... En font-ils pas un grand plat de cette histoire ? C'est-à-dire, on parle de l'histoire de Bill Clinton, on parle pas des chevaux. '''Coussin''' : Oui, et c'est pour ça que je te réponds, lors de la retransmission du tiercet, le journaliste qui commentait, il a parlé une seule fois... Une seule fois de l'affaire Bill Clinton, et c'est pour ça que je te dis que, non, je trouve pas les journalistes, ils en font trop. '''Gérard''' : Non, mais je vois pas le rapport avec l'affaire Bill Clinton et... '''Max''' : Repose-lui la question, repose-lui la question. '''tétard''' : C'est parce que Monica Lewinsky, c'est une belle jument. '''Gérard''' : Bon, d'accord, ouais, enfin, bref. Euh, point d'interrogation pour finir. '''Point''' : Si, je pense qu'ils en font un peu trop, parce que quand tu vois un peu qu'ils en parlent tout le temps à la radio, même à la télé, tu allumes ton poste, t'entends que ça, je pense qu'ils en font quand même un peu trop. '''Gicleur''' : Parce qu'en fait, ils sont jaloux, Gérard, c'est pour ça. Tu m'as pas posé la question. Donc, je vais quand même te répondre. Moi, je pense que les journalistes sont jaloux, tu vois, parce qu'en fait, ils pensaient que le président des Etats-Unis, c'était un métier qui était dur, tu vois, qui était sérieux. En fait, ils voient que le président se fait sucer par une petite jeune alors tu penses, ils sont jaloux, quoi. Ils ont pas voulu aller à l'école pour faire président. '''Gérard''' : Donc, moi, je peux vous répondre là-dessus. Je pense que les journalistes en font un petit peu de trop. Parce qu'on parle trop de cette histoire-là, comme l'affaire... '''Phildar''' : Titanic ? '''Gérard''' : Non, non, non, pas l'affaire du Titanic, l'affaire de l'histoire, là, avec la nana de... '''Phildar''' : Le paquebot qui a coulé ? '''Gérard''', ''[détournant le regard et la bouche du micro, fusillant Phildar du regard et surtout, éteignant son micro]'' : Non, mais attends, toi, tu ferais mieux de la fermer pour dire tes conneries. Non, c'est pas la peine de le rallumer. '''Max''' : Ah, pour la Formule 1, là, non ? Schumacher, qui change d'écurie, non ? '''Gérard''', ''[à Phildar)'' : Je t'ai dit d'éteindre ton micro, d'accord ? '''Reego''' : Ton débat, Gérard. '''Max''' : Non, mais c'est bon. C'est bon, ils peuvent l'allumer. Tu parlais de quoi, là ? Tu parlais du tiercé, là ? '''Gérard''' : Non, non, de la nana... de l'histoire des policiers, là, puis du chauffeur de taxi, là, je pense... Ah, du taxi, Valais-Saint-Paradis ? '''Max''' : Ah, Joe le taxi ? Vanessa Paradis ? Bon, alors, enfin, bref, Gérard, qu'est-ce que tu penses de cette histoire ? '''Gérard''' : Non, moi, je pense que cette histoire, pour moi, c'est de... C'est des conneries, et ils feraient mieux de laisser ça. Chacun fait ce qu'il veut de son cul. C'est leur propre histoire. Bon, maintenant, il n'y a qu'une chose que je peux dire, c'est que... '''Phildar''' : C'est clair, c'est pas des conneries, le Titanic a bien coulé. '''Manu''' : Bien sûr, il y a des preuves. '''Gérard''' : Et ta 205, elle a bien coulé, et toi, t'as... Et toi, t'as... Ton espèce de nana, elle n'a pas coulé, encore ? '''Phildar''' : Pardon ? '''Gérard''' : Ouais, deux, à trois, on saute, à quatre, on recommence. '''Max''', ''[admiratif, applaudissant]'' : Oh là là ! '''Gérard''' : Donc, moi, pour moi, personnellement, c'est une histoire que je suivrai pas parce que ça me prend la tête, et j'en ai ras-le-bol d'en entendre parler, tous les... '''Gicleur''' : C'est toi qui en parles, là. Pourquoi tu fais un débat dessus ? Pourquoi tu lances un débat, alors ? '''Gérard''' : Parce que je fais un débat, c'est le premier des débats de la saison, donc je fais un débat là-dessus. '''Max''' : C'est la conjoncture des débats qui vaut ça. '''Gérard''' : Terminé, point final, à la ligne. Donc, voilà. Conclusion ! '''Max''' : Ouais, conclusion, alors, très rapide. '''Gérard''' : Vite fait, Crevette. '''Crevette''' : Ouais, conclusion, bah, écoute, j'en ai appris beaucoup. Et puis... '''Max''' : C'est vrai qu'on prend prend une bonne claque avec Gérard. '''Crevette''' : Et puis, bah, j'espère que tu vas continuer à nous informer, quand même, sur l'affaire même si ça t'intéresse pas. '''Max''' : Bah, y'a France Info, puis y'a Gérard le jeudi. '''Gérard''' : Non, mais vous avez d'autres chaînes de télé pour vous informer que moi. '''Max''' : Surtout que c'est de la radio donc... '''Gicleur''' : Ouais, bah, écoute, moi, je pense, là, qu'en une soirée, j'ai plus appris qu'en trois mois. Et la conclusion, bah, c'est que, finalement, c'est bien de se faire sucer et que Clinton, bah, il a bien raison. '''Gérard''' : D'accord, bah, toi, tu préfères aller te faire sucer ? '''Gicleur''' : Ouais, c'est une proposition, mais non, laisse tomber non. '''Max''' : Voilà, c'était la conclusion, en fait, réponds pas à la... '''Point''' : Alors, ma conclusion, c'est qu'ils arrêtent un peu d'harceler les stars, comme ça, parce que c'est vraiment chiant. Dès que tu vois... Tu peux même pas aller quelque part, t'as les journalistes qui sont autour de toi, c'est un peu embêtant, quand même. '''Max''' : Ça peut te servir de pare-à-vent, quand il pleut, hein. '''Gérard''' : Point d'interrogation, t'es encore là ? Non, mais on vient de te poser une question. '''Max''' : C'est pas grave, c'était juste un commentaire que je faisais, c'est pas une question. Faut pas confondre les questions, les réponses et les affirmations. '''Tétard''' : Ouais, bah, moi, en conclusion, ce que j'aurais voulu savoir, c'est déjà si elle s'était lavé les dents, là, Levinsky, là, et je voudrais que tu nous racontes vite fait l'histoire entre Gérard Kilton et Christine. Lewhisky.. '''Gérard''' : Comment, comment ? '''Tétard''' : Je voudrais que tu nous racontes la jolie histoire de Gérard Kilton et Christine Lewhisky. '''Gérard''' : Bon, alors, Tétard ? Tu te mets un gros doigt... Et tu te mets un gros doigt, quelque part, et... '''Max''' : Tiens, dans le cul, par exemple, par hasard. '''Serpillère''' : Bah, moi, je pense que Monika Lewhisky, elle a même sucé Richard Dixon. '''Gérard''' : D'accord, alors, toi, t'as rien compris. Coussin d'air, pour finir ? '''Coussin d'air''' : Ah bah, écoute, moi, j'ai trouvé le débat vraiment très intéressant, sauf que je regrette vraiment qu'on ait pas parlé plus longtemps de Francky Vincent et du tiercet. '''Max''' : Je veux juste te dire, petit point, petite parenthèse, par contre, là, Coussin d'air qui est en Guadeloupe, toi, en ce moment, t'es là, avec nous ? Donc, toi, en ce moment, toi, tu es en direct en France, on rappelle que, toi, ce que t'es en train de faire, en ce moment, avec Gérard, c'est donc diffusé dans 15 jours, c'est ça ? '''Coussin d'air''' : Oui, absolument, c'est ça. '''Max''' : C'est avec le décalage horaire, justement, et ça nous amène, justement, au prochain débat, Gérard, décalage horaire. '''Gérard''' : Voilà. Donc, moi, je réponds quand même... '''Max''' : Oui, la conclusion de Gérard, bien sûr, sur son débat. '''Gérard''' : Donc, sur cette conclusion-là, c'est dommage qu'on n'aille pas pu aller plus loin, parce qu'il y avait d'autres questions qui étaient intéressantes. Bon, c'est sûr qu'il y a les histoires de cassettes vidéo, je pense que, j'espère qu'ils vont en faire bon usage pour les aides humanitaires. '''Max''' : J'espère qu'ils vont les mettre en location. Ah, pardon. '''Gérard''' : Non, non, pour les aides humanitaires, c'est-à-dire, surtout à New York, parce que même là où c'est vendu, donc, j'espère qu'ils vont en faire bonne conclusion sur cette vente. '''Max''' : On rappelle que tu as été à New York, quand même. Tu sais de quoi tu parles.<ref name="explic2"></ref> '''Gérard''' : Voilà. Parce que là-bas, il faut dire que c'est un pays très, très chaud. CMaxest quand même une ville qui n'a plus aucun secret pour toi, vu que tu y es passé quand même près de 48 heures. '''Gérard''' : Non, 72. '''Max''' : Donc, tu maîtrises bien le sujet de New York. '''Phildar''' : Il a fait deux fois le tour. '''Max''' : Est-ce que tu trouves que ce genre de problème, comme ça, ce problème, est-ce que tu crois que ça mérite un débat ? '''Gérard''' : Ben, disons, j'ai voulu réagir là-dessus, parce qu'on en parle tellement. C'est que j'aurais préféré éviter d'en parler. Bon, t'as voulu qu'on en parle. Bon, ben, j'en ai parlé. Mais malheureusement, on n'a pas pu aller jusqu'au bout. Donc, si vous voulez réagir sur le deuxième débat. '''Max''' : Débat sur le décalage horaire. '''Gérard''' : Sur le décalage horaire. Donc, je pense que c'est moi qui va... '''Max''' : On va voir ça hors antenne. Ça, c'est un truc, comme d'habitude, je Gérard n'a pas compris. Tu vas me laisser parler un petit peu. Je vais faire moi-même. Donc, si vous voulez participer au débat de Gérard, le deuxième de cette soirée pour le grand retour de GG dans les débats. Débat sur le décalage horaire. Vous appelez dès maintenant le standard de Fun Radio 0800 70 5000. Pour les Belges, 0033 800 70 5000. IRC, toujours, c'est-à-dire le site Internet où vous pouvez dialoguer en direct entre vous ou bien directement avec Reego, qui est dans le studio en ce moment. '''Reego''' : Et avec Rousseau aussi. '''Max''' : Et avec Rousseau également, qui est dans le coin. C'est irc.funradio.fr. Gérard est toujours là. Phildar Manu également aux manettes. On se retrouve dans tout juste 8 minutes. Le temps de faire le point avec un morceau de Astral Projection. Ah non, pardon, c'est pas ça. Non, ça a changé. C'est quoi ? '''Gérard''' : Non, c'est, à mon avis, si on ne s'est pas trompé, c'est tiens, tiens bientôt, j'ai un gros caca avec des riettes. Voilà. Et on se retrouve tout à l'heure d'ici 5-10 minutes. == Le débat sur les décalages horaires == === Contexte === Le premier débat a clairement montré le nouvel environnement dans lequel s'inscrit l'émission, désormais mettant en scène une équipe rigolarde et un animateur payé, loufoque, surréaliste. Pourtant, on voit aussi d'emblée l'équilibre difficile auquel Max s'attaque : tenter de rassurer sa direction dans un style moins chaotique qu'en début d'année, tout en préservant le style inimitable de l'émission. Le second débat tente de confirmer cette tendance, avec un interventionnisme moindre de Max. C'est la première semaine du retour de Max, qui le met sous pression. D'abord car il a tout de même laissé une trace par son coup de poker d'août, ensuite car il vient de retrouver son créneau préféré après ce qui fut un vrai échec professionnel, enfin parce que la direction, de toute manière, transforme la station en profondeur. Les émissions emblématiques comme Lovin Fun, ainsi que leurs animateurs phares (Difool, le Doc) sont désormais partis, Max reste le seul emblême de l'époque de Fun radio de la première moitié des années 90, et la pression est donc grande. La station veut en effet cibler d'autres auditeurs, pour d'autres revenus, et Ma restera un épiphénomène fidélisant le passé mais presque gênant pour la direction. Dans ce second débat, Max teste toutefois la formule où Phildar est à la manœuvre. Lui aussi, depuis la fin de Fun TV, a besoin de trouver sa place dans le métier. Mais un peu contre toute attente, l'autorité naturelle qui se dégage pour Gérard, c'est Reego. Il est épargné de ses foudres, il a sa confiance, quoiqu'il fasse, et très vite, il s'avère que c'est lui qui sera le bon régulateur de l'émission, par-delà tous les autres. Sur le fond, il faut simplement se souvenir qu'à cette époque, le week-end précis où l'heure passait en hiver ou été n'était pas totalement figée. Celala ensuite changé lorsqu'elle s'est harmonisée au plan européen, mais tel n'était pas encore le cas. Cette mesure, étant d'abord destinée à s'adapter à la longueur des journées pour réguler la consommation d'une énergie coûtant cher, s'adaptait aussi à la température et à d'autres critères. Si bien que le décalage pouvait intervenir pendant n'importe quel week-end du mois d'octobre, voire en septembre, plus rarement. === Les personnages === * Gérard Cousin : Gérard * Phildar, Manu * Franck Bargine : Max * Igor : Reego * Mégane : Moustique * Tony Morestin : Boudin noir * Goldo : Boudin noir * Cocker, Loudné (comprendre, Loup-de-nez) * Sandy Threadkell : Point d'interrogation * Nicolas : Merguez (il avait participé à un débat estival en 1997), Petit sucre * Luigi : Couscous (retour d'une figure des dénats en 1997) === Transcription === '''Gérard''' : Et voilà, 1h45, donc je fais rectification, c'est Tiens bientôt, je vais faire un gros caca avec Derriette et on va demander à Reego, il avait un petit message sur l'IRC, sur les questions qu'on a posées au départ. '''Reego''' : Voilà, non c'était juste pour saluer les gens présents sur l'IRC, alors je salue Wynne, Clifford, Yankee, Fedji, TSM, Jock, Scoyote, Bip, VLR et les autres et l'IRC dans le studio a planté mais on va le relancer tout de suite, à tout à l'heure. '''Gérard''' : Ok, à tout à l'heure, Reego, je te remercie. '''Reego''' : De rien ma poule ! '''Gérard''' : Là, Manu, je te signale qu'il y en a un des deux qui va planter. '''Manu''' : Ah bon, pourquoi ? '''Gérard''' : Là, je pense que tu m'as fait une connerie. '''Manu''' : Ah bon ? Si tu m'avais pas pris le standard pour rien foutre pendant le disque, j'aurais pu sélectionner des gens. '''Phildar''' : C'est pas grave, on va voir, vas-y Gérard. '''Gérard''' : Je vais voir, donc on accueille Moustique, merci pour les fréquences. '''Manu''' : Je n'ai pas eu le temps, Gérard. '''Moustique''' : Bonsoir Gérard. '''Gérard''' : T'appelles d'où ? '''Moustique''' : T'appelles de Poitiers. '''Gérard''' : Poitiers, ta fréquence ? '''Moustique''' : 89.6 '''Gérard''' : 89.6, ok. Boudin Noir. '''Boudin noir''' : Bonsoir Gérard, bonsoir tout le monde. '''Gérard''' : Bonsoir Tony. Merci Tony. '''Boudin noir''' : J'ai changé. '''Gérard''' : Ouais, ouais, ta fréquence ? '''Boudin noir''' : Moi, ma fréquence, moi j'écoute pas sur la radio, j'écoute sur la CB et je t'emmerde. '''Gérard''' : Alors, tu m'emmerdes, ok. Alors, dégage Boudin Blanc. Allez hop, voilà. '''Phildar''' : Ça commence bien, Manu, tu pourras gérer un peu mieux. '''Gérard''' : Alors, Max, Max, s'il te plaît. '''Phildar''' : Non, on va gérer, on va gérer Manu tout seul, Gérard, t'inquiète. Manu, tu fais gaffe. '''Gérard''' : Hop, Boudin Blanc, terminé. Hop, tu le vires. Bon, ça commence ! Déjà, il commence. Alors, si Boudin Noir c'est le même nom... '''Max''' : Non, mais peut-être que Tony, il a changé, il est peut-être venu... '''Gérard''' : Non, non, non, il m'a dit, je t'emmerde sur la CB. '''Max''', ''[hilare]'' : Ah, j'ai pas entendu. Non, mais c'est pas grave, mais si Tony veut bien venir, mais il se calme. Ça peut être sympa. On pourrait très bien se faire un feu de cheminée avec des merguez, on pourrait lier amitié. '''Gérard''' : Non, non, c'est pour Boudin Blanc, terminé. '''Manu''' : Moi, j'écoute le chef, il a dit, ça peut être sympa, je le laisse. '''Gérard''' : Non, je dis, moi ! C'est pas lui qui... '''Manu''' : Ah si, c'est Max qui commande. '''Boudin noir''' : Je m'excuse, je m'excuse. '''Gérard''' : Non, non, non, Tony, terminé, terminé, terminé, terminé, terminé, terminé, terminé, terminé, terminé, terminé, terminé. '''Phildar''' : Hé, ce qu'on fait... Attends, Gérard. S'il vous plaît, disez-vous, s'il vous plaît, Tony. Ce qu'on fait, Gérard, on lui laisse une chance. '''Gérard''' : Non, non, non, non, non, non, non, non, il n'y a pas de chance avec moi. Non ! Non, non, mais moi, je ne pardonne pas, c'est tout. Terminé, point final, à la ligne. Gamel ? Salut, t'appelles d'où ? '''Gamel''' : De Verdun. '''Gérard''' : Ta fréquence ? '''Gamel''' : C'est 110.5. '''Gérard''' : Boudin Noir. '''Boudin noir''' : Ouais, salut, Gégé, j'appelle de Toulouse et la fréquence, c'est 117.3. '''Gérard''' : 117.3, OK. Point d'interrogation ? T'appelles d'où ? '''Point''' : J'appelle de nulle part, toujours. '''Phildar''' : Bah oui, c'est la même. '''Gérard''' : Donc, 101.9. OK, je te remercie. Donc, première question, c'est sur le décalage horaire. On est bien d'accord ? Alors, que pensez-vous du décalage horaire ? On va demander à Boudin Noir. '''Boudin noir''' : Le décalage horaire, en fait, Gégé, on n'y peut pas. C'est des lois immuables de la nécessité naturelle et on ne peut pas faire grand-chose. '''Gérard''' : Mais tu penses que ça, à ton avis... '''Boudin noir''' : Non, mais c'est plutôt une bonne chose, quand même, dans l'absolu. '''Gérard''' : Ouais, mais à ton avis, tu crois que ça va durer encore longtemps, cette histoire ? '''Boudin noir''' : À mon avis, je ne pense pas... il y a peu de chances que ça change, parce que vu comment sont les gens, je ne vois pas pourquoi le décalage horaire, il changerait comme ça. Tu sais, c'est dans les mentalités, tout ça. '''Gamel''' : Bah, décalage horaire, c'est décalage de toutes les heures, c'est ça ? '''Phildar''' : Attends, Gérard, est-ce que tu peux expliquer ce que c'est, le décalage horaire, déjà ? '''Gérard''' : Le décalage horaire, déjà, pour commencer, bon, ça, j'aurais pu attendre que tout le monde réponde. '''Phildar''' : Mais non, mais s'ils ne comprennent pas déjà ce que ça veut dire... '''Gérard''' : Non, non, mais attends, Phildar, s'il te plaît. J'aurais pu attendre que tout le monde réponde, et j'aurais pu dire ce que c'était. Non, mais... '''Phildar''' : Non, mais tu comprends ce que je veux dire. Si toi, on te pose une question et que tu ne sais pas ce dont on parle, tu ne peux pas répondre. Donc, il faut que tu expliques avant. Vas-y, explique. '''Gérard''' : Donc, décalage horaire, c'est-à-dire vous avancez ou vous reculez votre monde d'une heure. D'accord ? On est bien d'accord, Gamel et Boudin Noir, si je t'ai mal expliqué ? Je pense que Boudin Noir, tu as bien compris la question, toi ? '''Boudin noir''' : Oui, oui, tout à fait. En avant, en arrière, sur la droite et sur la gauche aussi. '''Gérard''' : Non, mais d'accord. Toi, sur la droite et sur la gauche, toi, tu prends les clignotants ? '''Boudin noir''' : Voilà, par exemple. '''Gérard''' : Non, mais ça n'a rien à voir. Non, mais OK. Gamel ? '''Gamel''' : Moi, je comprends pas, parce que j'ai une montre à quartz, et puis les aiguilles, elles n'avancent pas ou elles ne reculent pas. '''Gérard''' : Non, mais attends. Moi aussi, j'ai une montre à quartz, là sur ma montre, il est 1h51. Si tu veux, à l'heure actuelle, si on change d'heure, ça fera 0h51. Parce qu'on recule. On recule nos montres d'une heure. '''Boudin noir''' : Comme en Allemagne, par exemple. '''Gérard''' : Non, non, attends 5 minutes, s'il te plaît, merci. '''Manu''' : Oui, donc, comme tu ne voulais pas de Tony, on accueille Bonne Nuit à la place. Salut, Bonne Nuit. '''Bonne nuit''' : Allô, salut, G, tu vas bien ? Moi, j'appelle de Mont-Luçon, fréquence 112.18. '''Phildar''' : Ah, c'est une nouvelle fréquence, ça. '''Manu''' : Elle vient de s'installer, d'ailleurs. Tu peux saluer tous les auditeurs qui te rejoignent sur cette fréquence. '''Gérard''' : Non, non, 112.18, ça existe pas, chez moi, à Montluçon. Montluçon, tout le monde descend, terminé. Hop, point final à la ligne. Alors, pour l'instant, Manu, t'es en train de me dire des... '''Phildar''' : Bon, la suite, Gérard. '''Gamel''' : Ça y est, j'ai reculé ma montre jusqu'à la cuisine, j'ai fait un calage horaire, là. '''Gérard''' : Non, je ne vois pas le rapport. Je ne vois pas le rapport avec le décalage horaire. Point d'interrogation ? '''Point''' : Effectivement, ça peut perturber un peu la vie quotidienne. Déjà, quand tu pars au travail le matin, tu peux être perturbé... '''Gérard''', ''[par-dessus des bruits bruyants de pet]'' : Non, mais attends, point d'interrogation, pour l'instant, on... Celui qui s'amuse à péter derrière, arrête ! '''Reego''' : Excusez-moi, excusez-moi. '''Phildar''' : Ça pue en plus. '''Reego''' : Désolé, désolé, pardon. '''Point''' : C'est vrai que tu peux être perturbé en prenant ta voiture, tu peux arriver en retard à ton travail. '''Gérard''' : Bon, OK, c'est bon. Moustique ? '''Boudin noir''', ''[pendant que Manu, micro éteint, fait le bruit du moustique]'' : Gérard, j'aimerais bien te ''[bruit d'une touche de téléphone numérique]'' Sous la table. '''Gérard''', ''[crescendo]'' : Non, non, non, mais là, ça commence à bien faire ! ''[o Phildar]'' : Eh, toi, tu vas la prendre, toi ! Eh, tu dégages ! Tu dégages, je te veux plus ! Allez, hop ! '''Manu''' : Bon, bah, viens au standard ! '''Gérard''' : Tu dégages ! Au standard ! Au standard ! Au standard ! '''Max''' : C'est bon ! '''Gérard''' : Non, non, il commence pas ! Non, mais il commence pas ! D'accord ! Non, non, Manu, non plus ! '''Manu''' : Ben, j'ai rien fait ! '''Gérard''' : Non, non, Max ! '''Max''' : Je suis en train de brancher les filles là, je peux pas... '''Gérard''' : Non, non, mais attends, parce que là, ils vont pas... Ça va pas commencer comme ça, hein ! '''Max''' : Ben, quand ça va pas, tu fais tourner, regarde ! Là, t'as fait tourner l'équipe, regarde ! '''Gérard''' : Ouais, mais après, Reego, t'y vas ! Je pense qu'avec toi, ça va mieux aller ! '''Phildar et Manu''' : Mais il sait pas, Reego ! Il sait pas le faire ! '''Reego''' : Non, moi, je sais pas, j'ai pas le droit ! '''Gérard''' : Bon, Moustique ! '''Gamel''' : Gérard, tu fermes ta gueule, c'est moi qui commande, ici ! Tu fermes ta gueule, OK ? '''Gérard''' : Bon, alors, hop ! Hop ! Euh, je te préviens ! Max ! '''Phildar''' : Non, mais je l'ai viré, maintenant, tu peux y aller ! '''Gérard''' : Non, non, non, non, non ! Non, non, Max ! ''[Max revient, agacé, criant Merde en entrant dans le studio]''. Max, Max, Max ! Non, non, y'a pas de merde ! Tu viens ! Tu me les chopes au standard ! Tu les prends ! Le premier qui me dit merde, ou ta gueule, il dégage ! ''[par-dessus, quelqu'un demande à gérard de se faire par Sandy et de pas casser les pieds]'' : Alors, celui-là ! Celui-là qui vient dire Sandy, il dégage ! Hop ! Terminé pour lui ! '''Max''' : Non, qu'est-ce que t'es en train de me dire ? T'es en train de me dire que quand on dit merde ou enculé, faut zapper, donc quand on dit Sandy, c'est un... Donc, ça veut dire que Sandy, c'est un gros mot ? '''Gérard''' : Pourquoi tu dis que je vais me faire enculer par Sandy ? '''Phildar''' : Il a pas dit ça, hein ! '''Gérard''' : Non, à peine ! À peine ! À peine, tu l'as pas entendu, toi ! '''Max''' : Bon c'est bon ! Alors, maintenant, on reprend le débat normalement, s'il vous plaît, comme le premier, c'était très bien ! Manu va gérer tout ça ! '''Manu''' : Je gère ! T'inquiète pas, Gérard ! '''Gérard''' : Eh, je te préviens ! Première fausse note, tu dégages, je mets quelqu'un d'autre ! '''Manu''' : Y'aura pas de fausse note ! '''Gérard''' : Donc, alors, Moustique, pour la première question ! '''Moustique''' : Oui ? Euh... Bah, je sais plus, là ! C'était le décalage horaire, ce qu'on en pense ? Bah, c'est chiant, quoi ! Quand tu vas aux Etats-Unis, t'as 6 heures, donc, il faut... Tu recules de 6 heures, en fait, donc, faut tout réorganiser ta vie, parce que c'est carrément une demi-journée, quoi ! C'est un peu, en fait, astreignant, comme chose ! '''Gérard''' : Ouais, non, mais je pense que le décalage horaire... Je pense que le décalage horaire, c'est que... À chaque fois, tous les... 5 mois, je pense, à mon avis... '''Moustique''' : Le visa, il dure 6 mois, donc... '''Gérard''' : Non, mais faut qu'on change au mois de... Au mois de mars ! Et après, faut rechanger au mois d'octobre ! '''Moustique''' : Ouais, mais ça dépend quand il est tamponné, donc... '''Gérard''' : Ouais, mais parce que là, je peux te dire que le décalage horaire, normalement, on aurait dû le faire cette semaine, là... Ce week-end... '''Moustique''' : Ah bon, c'était là ? '''Gérard''' : Bah, pour l'instant, personne n'en a parlé, donc... J'en parle maintenant, et normalement, on aurait dû le faire maintenant... '''Manu''' : C'est le week-end prochain ? '''Gérard''' : Bah, on sait pas, parce que... D'après ce que j'ai vu, moi... Sur des programmes,<ref name="hist2"></ref> ils en parlent pas, donc... Je sais pas si, cette année, on va faire le changement d'horaire... '''Manu''' : Je crois que c'est le week-end prochain, mais je suis pas sûr... '''Boudin noir ''' : Ya une grève, ya une grève. '''Gérard''' : Non, non, mais attendez, attendez, attendez... Tu me dis ? '''Manu''' : Je crois que c'est le week-end prochain qu'on change d'heure, mais je suis pas sûr... '''Gérard''' : Non, moi, j'ai reçu le... Je te confirme, pour l'instant, on en... On n'a pas confirmation du décalage... '''Manu''' : Ok, autant pour moi... '''Phildar''' : Mais avant, il paraît que c'était le premier jour de l'automne qu'on changeait, c'est vrai ou pas ? '''Gérard''' : Oui, mais là, normalement, on aurait dû changer... Non, mais attends, toi, avec ta grève, tu m'énerves ! '''Boudin noir''' : Il y a une grève du décalage d'horaire, tu devrais te tenir informé ! '''Gérard''' : Mais attends, toi, avec ta grève, ta grève, si tu fais partie de la RATP, tu dégages... '''Boudin noir''' : Mais non, c'est la SNCF, c'est différent ! '''Gérard''' : Ouais, ben, dans ce cas-là, tu te tais, c'est tout, je réponds à la question... Voilà, merci ! '''Phildar''' : Gérard, donc, justement, à la place de Bonne-Nuit, on accueille Puceau... '''Gérard''' : Puceau, bonne nuit ! Non, bonsoir, pardon... '''Puceau''' : Bonsoir, qui ? '''Gérard''' : Puceau ! '''Puceau''' : Puceau toi-même, ouais ! '''Gérard''' : Attends, tu restes poli, s'il te plaît ! '''Gamel''' : Moi, Gérard, je pense que le décalage d'horaire, c'est de la faute à Jospin, de toute façon. '''Gérard''' : D'accord, alors là, je vois pas le décalage horaire, qu'est-ce qu'il a à faire dans la politique. Non, mais moi, je réponds à la question à Phildar, parce que tu m'avais dit... '''Phildar''' : Généralement, c'est le premier jour de l'été. '''Manu''' : Non, de l'automne. '''Gérard''' : Donc, normalement, si t'es d'accord avec Manu, normalement, on aurait dû changer d'heure ce week-end. '''Phildar''' : Le 20 septembre. '''Gérard''' : Donc, c'est-à-dire, le week-end dernier. Donc, pour l'instant, on sait pas. Je réponds à la question à Manu. Donc, pour le week-end prochain, pour l'instant, pour ce week-end, j'en ai pas entendu parler. '''Moustique''' : Et pourquoi, Gérard, on n'a pas changé ? '''Gérard''' : Pourquoi ? Parce que, pour l'instant, personne n'en parle. Et donc, on sait pas. '''Manu''' : Excuse-moi, je crois que c'est à cause de l'Europe. Pour se mettre à la même heure avec tout le monde. '''Gérard''' : Non, mais apparemment, tout le monde a dit qu'on fait des décalages horaire tout le temps. '''Phildar''' : Non, parce qu'en fait, ce qui va se passer, je crois qu'on aura des montres en euros. Il y aura plus d'heures. '''Gérard''' : Non, mais ça, l'euro, là-dedans, je vois pas ce que... Non, non, mais je m'en fous. Deuxième question. Donc, alors, deuxième question. Qui est le plus atteint par le décalage horaire ? '''Moustique''' :C'est les bovins. C'est les bovins, c'est les vaches. Elles arrivent pas à faire leur lait normalement quand l'heure, elle change. C'est prouvé scientifiquement, hein. '''Gérard''' : Ouais, mais d'accord, Moustique. Mais je te demande qui est le plus atteint, parce qu'il n'y a pas que les bovins qui sont... '''Moustique''' : Ah, mais les plus atteints, c'est les bovins. Après, c'est les vieux, quoi. '''Gérard''' : Ah ouais, mais ça, on va... Je pense que... Non, mais je pense qu'on va en revenir sur les questions, parce que, de toute manière, de toute manière, si tu parles des bovins, dans ces cas-là, tu penses que les bêtes souffrent ? '''Moustique''' : Non, non, je dis pas ça. Mais les vaches, elles arrivent pas à faire leur lait correctement parce qu'elles ont carrément changé d'heure, quoi. '''Gérard''' : Oui, mais dans ces cas-là, Moustique, si je te dis, les bêtes souffrent-elles du décalage d'heure ? '''Moustique''' : Bah moi, je te réponds non. '''Gérard''' : Bah pourquoi ? '''Moustique''' : Parce que, je te dis que ça se passe dans leur tête, elles sont complètement déréglées, mais elles n'en souffrent pas. '''Gérard''' : Bah oui, mais dans ces cas-là, on revient à... Qui est le plus atteint par le décalage horaire, tu me dis les... '''Moustique''' : Les bovins. Après, les vieux. '''Gérard''' : Bah oui, mais dans ce cas-là, les bêtes souffrent. '''Moustique''' : Bon, Gérard, on va pas faire une heure, je te dis, non, elles souffrent pas. '''Gérard''' : Bah si, si, moi, je te dis que si. '''Moustique''' : Bon, bah alors, si tu dis que si, d'accord, elles souffrent. Mais moi, je te dis que non. '''Point''' : Oui, je pense que tout le monde peut en souffrir, surtout les bébés, ils peuvent pas avoir leur biberon en temps et en heure. Je pense que même, c'est pareil pour les personnes âgées, ou même pour les personnes qui doivent... '''Gérard''' : Non, mais attends, eh oh point d'interrogation ? Eh, tu me... Tu réponds pas aux questions avant moi, parce que sinon, toi, je vais t'éclater ta tête. '''Moustique''' : Bon, on a le droit de parler ? '''Point''' : Ah non, faut pas m'éclater la tête, hein. '''Gérard''' : Non, bah non, parce que là, t'es en train de me prendre... '''Gamel''' : Non, Gérard, éclate-lui la chatte, plutôt. '''Gérard''' : Non, toi, toi, tu la fermes. Ça vaudra mieux pour ton matricule. '''Point''' : Non, mais comme je t'ai dit, je pense que tout le monde peut en souffrir, de ça. '''Gamel''' : Bah moi, à mon avis, le plus atteint qui sera par le décollage horaire, c'est quand même Bill Clinton, parce qu'avec tous les problèmes qu'il a eus. '''Gérard''' : Bon, allez, Boudin noir... '''Phildar''' : Non, mais c'est Gamel, Gamel. Non, mais si ça se trouve, il y a un rapport. '''Gérard''', ''[avec écho de Manu]'' : Mais non, ça n'a rien à voir ! Manu, s'il te plaît. '''Manu''' : J'ai rien fait, Gérard. '''Phildar''' : Bon... Il n'y a pas de rapport ? Mais pourquoi ? '''Gérard''' : Non non mais... hop, Gamel, tu me l'envoies... Bonne nuit. Boudin noir, pourquoi ? '''Boudin noir''' : Déjà, pour le problème des vaches, moi, je sais qu'il y a des paysans du Luberon qui ont fait une expérience. Il suffit juste de mettre une horloge dans l'étable. '''Moustique''' : Ah bon, ça marche ? '''Boudin noir''' : Ça suffit, ouais. Et en ce qui concerne les vieux, vous parliez des vieux, effectivement, les vieux, c'est pareil. Le matin, ils ont l'habitude de pisser à heure fixe. Et avec le décalage horaire, en fait, quand dans les maisons de retraite, les infirmières viennent, ils se sont tous chiés dessus parce qu'on ne les fait pas dégorger à temps, quoi. '''Gérard''' : Donc, Pussot, t'es encore là ? '''Puceau''' : Oui, moi, je voulais dire que les plus atteints, c'est les filles, quoi, parce qu'il y a des filles qui n'ont pas les règles en même temps. '''Gérard''' : Non, mais attends. Hé, Pussot ! Pussot ! Pussot ! Je ne vois pas le rapport avec le décalage horaire et les ragnanias des nanas. '''Puceau''' : Les ragnanias, c'est normal, Gérard. Les ragnanias, elles ne les ont pas en même temps, donc il y a un décalage horaire. '''Gérard''' : Mais attends, mais de toute manière, si elles ont leur ragnania, par exemple, aujourd'hui, d'ici un mois, si le décalage... Euh... D'ici une semaine, si le décalage change, elles les auront toujours en même temps. '''Puceau''' : Ouais, mais si elles partent, il y a un décalage horaire, donc elles n'auront pas le même jour. '''Gérard''' : Et alors, tu feras toujours des spaghettis avec ? '''Puceau''' : Ben écoute, moi, je dis une chose, les spaghettis, c'est bien, mais les ragnanias, c'est mieux. '''Gérard''' : Ouais, mais il faut mieux avoir des spaghettis aux ragnanias avec de l'ail. '''Manu''', ''[écœuré]'' : Oh, Gérard, t'es poétique, vraiment, c'est super. '''Phildar''' : Justement. On accueille deux nouveaux, on accueille Coquer, qui appelle de Niort. Et Merguez, de Toulouse. '''Gérard''' : Euh, donnez-moi les fréquences, là. '''Merguez''' : Moi, c'est Toulouse, c'est 105.9. '''Boudin noir''' : Non, non, 117.5. '''Gérard''' : Et Coquer, de Niort ? '''Coquer''' : 93.4. '''Gérard''' : Eh, Pussot, t'es d'où, toi ? '''Puceau''' : Oui, je suis de Paris. '''Boudin noir''' : Non, il est d'Italie, lui. '''Gérard''' : Donc, troisième question. Depuis qu'il y a Manu et Phildar, c'est le vrai bordel. '''Manu''' : Ben non, non, je sais pas qu'est-ce qu'il se passe, pourquoi ? '''Gérard''' : Non, non, parce que là, ça devient le vrai bordel. On a des bruits et... ''[depuis quelques minutes, reego tape violemment sur les touches de son clavier, micro ouvert, Manu ronfle bruyamment, etc]'' Voilà, il y en a un qui ronfle. '''Phildar''' : Il y a peut-être un qui s'endort, donc il faudrait peut-être que t'accouches. '''Gérard''' : Non, je pense que ça va pas aller longtemps, vous deux. '''Phildar''' : Allez, Gérard, la question, vite. '''Gérard''' : Quoi, vite ? Si je veux ! '''Phildar''' : Bon, ben, prends ton temps. '''Gérard''' : Les fermiers supportent-ils ce changement d'heure ? On va demander à Moustique. '''Moustique''' : Ben, mieux que les vaches, en tout cas. '''Gérard''' : Ben, donc, tu vois que je reviens à la première question. Bon, vous vous la fermez derrière quand je parle. Merci. Donc, tu vois, Moustique, je reviens avec la question numéro 2. Merci pour... '''Manu''' : Pourquoi ? '''Reego''', ''[alors que quelqu'un imite le moustique, micro éteint]'' : Il y a un moustique, là. '''Boudin noir''' : Plutôt une mouche, ouais. '''Gérard''' : Non, non, mais... Non, non, c'est pas toi. Non, non, mais je sens que tout à l'heure, ça va mal se terminer. Vous allez voir que... Je pense qu'on va pas faire les 10 questions, hein. '''Boudin noir''' : C'est l'odeur. '''Gérard''' : L'odeur, elle t'emmerde, toi, d'accord ? Donc, tu vas pas commencer tes conneries, ok ? En de bon entendeur, salut. Ok. Donc, Moustique. Donc, on revient à la question numéro 2. Donc, qui est le plus... Qui est le plus atteint par le décalage horaire ? Et les fermiers supportent-ils ce décalage horaire ? Donc, apparemment, tu reviens sur la même question. '''Moustique''' : Non, moi, je te dis que c'est les vaches. Mais les fermiers supportent beaucoup mieux que les vaches. '''Gérard''' : Non, non, non, mais attends. Parce que, eux, pour eux... Eux, si tu veux, les fermiers, eux, ils se lèvent un peu plus tard. Disons, avec le décalage horaire, ça va les changer. Parce que si, par exemple, ils font une traite à 6 heures, pour eux, ça fera 5 heures, si tu veux. '''Moustique''' : Oui, mais les vaches... Et les vaches, elles ne le savent pas que l'horaire change. '''Gérard''' : Eh oui, mais d'accord, mais attendez, s'il vous plaît, derrière. '''Moustique''' : Ça les perturbe parce que le fermier, il vient leur titiller les pis, et elles n'ont pas de lait, donc ça les perturbe. Voilà. '''Boudin noir''' : Mais non, parce qu'il y a le coq, vous oubliez le coq. '''Gérard''' : Attends, toi, qui c'est qui parle du coq ? Ouais, mais Boudin Noir, tu vas aller bouffer ton coq au standard. '''Boudin noir''' : Le coq, il chante toujours à la même heure. Donc le fermier, il se lève quand le coq, il chante, il est pénard. '''Phildar''' : Ben voilà. ''[Reego continue à taper sur le clavier de l'ordianteur de bureau exagérément bruyamment dans le micro]''. Qu'est-ce que tu voulais dire, Gérard ? '''Gérard''' : Non, mais là, ça commence à bien faire. Taleur, au premier débat, ça s'est bien passé. Maintenant, le deuxième, vous n'allez pas me le casser. Vous n'allez pas le casser, pour l'instant, vous êtes en train de le casser. '''PHildar''' : Le coq, il n'a pas de montre. Donc, lui, il ne sait pas qu'il y a un décalage horaire. Donc, il chante tout le temps. Il chante à la même heure à chaque fois. T'es d'accord ? T'es d'accord, Gérard ? '''Gérard''', ''[tournant le regard de partout et atterrissant sur Reego]'' : Merci, Reego. '''Reego''' : Qu'est-ce qu'il y a ? '''Gérard''' : Ah ouais, mais t'avais laissé ton micro allumé. '''Manu''' : On entend tout, quand tu pianotes sur l'IRC. '''Reego''' : Ah ouais ? Ah ouais, excusez-moi. '''Gérard''' : Ouais. Je me disais aussi, il y avait un problème. Donc, point d'interrogation. '''Phildar''' : Bon, t'as compris ou pas ce que je t'ai dit ? Gérard ? '''Manu''' : Pour le coq. '''Gérard''' : Ouais, mais je m'en fous, on continue le débat. Point d'interrogation. '''Point''' : Oui, les fermiers peuvent en avoir des conséquences. '''Phildar''', ''[après un bruit de pet avec la bouche]'' : Elle est indisposée, point d'interrogation. '''Boudin noir''' : Point d'interrogation, pour une bohémienne, elle a une voix de bouveuse, hein. '''Gérard''' : Bon. T'envoies un disque. '''Merguez''' : Point d'interrogation, on lui parle de vaches et ça l'excite. '''Gérard''' : Allez, hop. '''Manu''' : Non, non, pas de disque, c'est pas possible. '''Gérard''' : Non, non, Max ! Max ! Max ! '''Phildar''' : Non, il n'est pas là ! Il faut que tu continues. '''Gérard''' : Non, non, moi je vous balance un disque. Troisième [question], vous allez réfléchir, moi je fais une pause. '''Coquer''' : J'ai pas répondu, moi. '''Gérard''' : Non non, Cocker, t’attends ! '''Phildar''' : Cocker il voulait répondre. '''Gérard''' : C'est pas toi qui commandes, c'est moi. '''Phildar et Manu''' : On n’a pas de disque, on n’a rien, donc pose ta question. '''Gérard''' : Tu te démerdes. '''Manu''' : Non, bah non... Bah chante alors ! '''Gérard''' : Non, non, tu te démerdes, moi je continue pas avec vous deux. Allez, hop, c’est basta ! '''Phildar''' : Bon, on va chercher Olivier de la prod. ''[il ouvre la porte et appelle Olivier, en criant]''. '''Manu''' : Allez, allez ! Gérard, pour les auditeurs... Vous êtes là ? Ça vous plaisait le débat ? Tout va bien ? '''Gérard''' : Non, non, vous êtes en train de faire les cons tous les deux... '''Manu''' : Mais non, c’est toi qui veux pas continuer, Gérard ! '''Reego''' : Continue le débat, Gérard, il y a des gens qui s’intéressent au moins. '''Gérard''' : Donc, Point d'intrrogation ? '''Point''' : Oui, donc je te dis : les fermiers pourraient en avoir des conséquences. Et comme disait... les animaux, c’est vrai qu’ils peuvent avoir aussi des conséquences, telles des séquelles, tu vois, des choses comme ça. '''Moustique''' : Dans quel sens ? '''Gérard''' : Euh dans quel sens, Moustique, tu arrêtes s’il te plaît ! '''Moustique''' : Mais non, mais j’ai pas compris là ! '''Gérard''' : Non, mais tu arrêtes de dire "dans quel sens", parce qu’avec Phildar et Manu, c’est toujours "et pourquoi ?" et "dans quel sens ?". OK, d’accord. Bon, Puceau ? '''Puceau''' : Allô ? Oui, moi je trouve que tu as raison là-dessus et je te donne carte blanche, je suis à 100 %. '''Gérard''' : Tu n’as même pas compris la question ! '''Puceau''' : Bah si ! Si le coq avait un décalage horaire par rapport à la poule... Là, je suis d’accord avec toi. '''Gérard''' : OK. Cocker ? '''Cocker''' : Moi je pense que ce n’est pas les fermiers, mais plutôt les animaux qui subissent des conséquences, parce que le coq ne chante plus à l’heure. Donc il a des troubles psychologiques. '''Merguez''' : Ouais, bah moi je pense pareil, quoi. Je pense plutôt que c’est les animaux qu’ont plus de conséquences parce qu’e bon on se comprend, eux, ils ont pas de montre, alors un coup il se lèvent trop tôt, un coup c’est trop tard, et c’est compliqué, quoi. Il n’y a que le fermier qui sait. '''Puceau''' : Oui, mais moi je dis pas... alors comment ils font ? Après c’est Puceau... Moi je veux dire, Gérard, t'as raison, c'est les animaux parce que moi j’en connais un, quand il prend son joker, il est un peu dépoussolé, quoi. '''Gérard''' : Ouais... Alors Puceau, tu sais ce que tu vas faire ? Tu vas te faire dépuceler au standard. Pour Puceau, terminé pour lui ! Allez, on continue. Donc, je réponds quand même à la question si ça dérange personne, et on va envoyer un disque. '''Manu''' : Ah bah non, pas tout de suite ! Encore une question et après on l’envoie. '''Gérard''' : Ouais, moi je peux vous dire une chose : quand je dis "les fermiers", oui, ils supportent... ils ont du mal à supporter le décalage d’heure parce que pour la récolte de tout ce qu’ils ont à faire, ils n’y arriveront pas. Ça... '''Manu''' : Mais vas-y ! Mais vas-y, je coupe les auditeurs pour que tu puisses parler. '''Gérard''' : Donc, moi je peux vous dire une chose que là, je me suis aperçu hier en allant se balader : c’est que dans certains coins, le maïs, pour l’instant, ils n’arrivent pas à le récolter '''Phildar''' : Pourquoi ? '''Boudin noir''' : Parce qu’ils se lèvent plus tôt le matin avec le décalage horaire, le maïs, il comprend plus rien. '''Gérard''' : Non, non, non, non, parce qu’avec le temps qu’ils ont, ils peuvent pas le récupérer. '''Phildar''' : Est-ce qu’on change d’heure quand on va en Allemagne ? Puisque tu es allé en Allemagne hier, Gérard, est-ce que tu as dû changer d’heure ou pas ? '''Gérard''' : Non, c’est toujours la même heure, l’heure française pour l’instant. '''Phildar''' : Parce que ce que je comprends pas, c’est pourquoi on change d’heure en Italie et on change pas d’heure en Allemagne. '''Gérard''' : Parce que le décalage d’heure... le décalage horaire en Italie, je sais pas s'il y a un décalage horaire. '''Phildar''' : Il y a une heure en moins. '''Gérard''' : Non, je pense pas. '''Phildar''' : Si, si, si, je suis allé en Italie, je te jure, il y a une heure en moins ! ''Manu ''' : Je croyais que ça venait des fuseaux horaires parce qu’en Italie ils en ont, et en fait en Allemagne ils portent des pattes d'eph, donc... '''Gérard''' : Ouais, c’est ça... Faites votre popote hors antenne tous les deux ! Troisième question... et après on s’envoie... quatrième, pardon : Croyez-vous qu’on dépense moins de courant ? On va demander à Moustique. '''Moustique''' : Ouais, alors ça c’est une légende urbaine. En fait c’est complètement faux, parce que tout le courant que tu économises le soir, tu le brûles le matin. Donc ça sert à rien du tout. '''Gérard''' : De toute manière que tu le dépenses le matin ou le soir, c’est pareil. '''Moustique''' : Voilà, donc le problème est le même. '''Gérard''' : Donc en fin de compte, si tu veux, le décalage horaire ça sert à rien, parce que par exemple là tu allumes ta lumière, il est 2h10. Demain matin, tu vas rallumer ta lumière, il va être... ça dépend à quelle heure tu te lèves et ça dépend ce que tu fais comme boulot. Bon attends, derrière, toi tu la fermes ! D’accord ? Pour l’instant je réponds à Moustique. OK ? Alors toi, tu la fermes, OK ! Donc selon ce qu'on fait comme boulot, c’est pareil le matin, tu allumes ta lumière pour te préparer... Donc en fin de compte, tu n’économises pas du tout, tu n’économises pas de courant et tu en dépenses autant. Donc en fin de compte, ça sert à rien. '''Reego''' : Gérard ? Oui, Gégé, sur IRC il y a Coyote Bip qui me demande ce que tu penses du décalage horaire de l’espace. '''Gérard''' : Justement, c’est une question qu’on allait faire à la fin. '''Merguez''' : Ouais, parce que si des ovnis viennent chez nous, comment on fait pour être à la même horaire ? Parce que imagine... imagine qu'ils n’ont pas l'heure que nous, ils viennent la nuit, qui sera là pour les accueillir ? '''Moustique''' : Et ils ont quelle heure ? '''Merguez''' : Bah oui mais on sait pas, parce qu’on n’arrête pas de décaler... alors c’est le bordel, quoi. Faudrait qu'on se mette tous d'accord. '''Gérard''' : Point d’interrogation... '''Point''' : Tu sais, tu es obligé d’allumer la lumière, même les personnes qui veulent faire des mots croisés ou quoi que ce soit, ils sont obligés d’allumer la lumière en même temps. Même les gens qui sont aveugles, ils sont obligés d'allumer la lumière. '''Merguez''' : Parce que tu vas nous faire croire que tu fais des mots croisés peut-être ? '''Gérard''' : Allez, hop ! tu me vires ! Tu me vires ! tu me changes parce que là... depuis que Max est parti, là vous me faites que déconner. '''Manu''' : Tu veux qu'on te change, Gérard, t'as fait pipi ? Autant pour moi. '''Boudin noir''' : Moi déjà, je vais te dire : je suis un homme des bois. Donc déjà j’habite dans les bois, comme tu as compris, et je me chauffe à la bûche et je m’éclaire à la chandelle. Donc à la limite, tes histoires de courant, je n’en ai rien à carrer. Je crois que toi aussi, t'es un peu un homme des bois quand même. '''Gérard''' : Ben ferme-là, ça vaudra mieux. Faudra-t-il se coucher plus tôt qu’en été ? Et on s’écoute... '''Phildar''' : Donc ça c’est la question à laquelle ils doivent réfléchir. D’accord ? Tu relances les numéros, tout ça... '''Gérard''' : 0800 70 5000 et toujours le 36 15 code Fun Radio, rubrique direct. Et on a... on a qui sur le Minitel ? Quentin : « À vous deux, Max et Gérard, me devez 60 000 balles. » Je sais pas ce qu'il voudra dire... Ben tant pis pour toi ! Donc sur l'IRC, qui c’est qu'on doit saluer ? '''Reego''' : On salue tout le monde : on salue Clifford, Nico-2, Serval, Trois Solos, Lenni, TSM, etc. '''Gérard''' : Et le numéro IRC parce que je ne le connais pas de tête ? '''Reego''' : : irc.funradio.fr. Voilà ! '''Gérard''' : Vous pouvez toujours continuer à nous appeler, donc on est toujours là pour la suite des débats à 2h13. Et on va s’écouter "Le Décalage Pubère, sans nous... avec eux... '''Phildar''' : C’est super, on comprend tout ce que tu dis. ""{Musique]''. '''Gérard''' : Voilà, c'était Décalage Pubère sont nus avec du pinard et donc vous pouvez toujours nous appeler au 0800 70 5000, toujours 36 15 code Fun Radio et sur IRC, Reego ? '''Manu et Reego''' : irc.funradio.fr. Allez, allez, on y va, on est là ! '''Gérard''' : Donc on récupère Moustique. 99.6. Couscous. '''Couscous ''' : Asalam Alaykoum Gérard. J'appelle de Verdun, 93.9. '''Gérard''' : Point d'interrogation sur 101.9. '''Point''' : Salut, mon amour. '''Merguez''' : C'est à moi que tu parles ? '''Boudin noir''' : Salut cochonne. '''Gérard''' :Attends, toi ! Qui c’est qui vient de dire "cochonne" ? '''Phildar''' : Je crois que c’est Petit Slip. Je vais le virer. '''Max''' : Personne aurait cinq francs ? '''Phildar''' : Non, désolé. '''Gérard''' : Cinq francs ? ''[il fouille dans ses poches et sort une pièce de monnaie]''. '''Manu''' : Gérard a cinq francs... Oh là là ! Mais qu’est-ce qui se passe ? On aura tout vu. '''Gérard''' : C’est bizarre la fréquence là, Boudin Noir ! T’es de quel coin ? '''Boudin noir''' : Toulouse Nord. Il y a deux fréquences à Toulouse, il y a Toulouse Nord et Sud, c'est pour ça. '''Gérard''' : Ouais, c’est ça. Bon, Cocker, au 93.9... '''Cocker''' : Bonsoir ma caille. '''Gérard''' : Je suis pas ta caille, et tu commences à te calmer, sinon tu vas dégager. '''Boudin noir''' : OK chéri. '''Phildar''' : Je le calme. '''Gérar''' : S’il te plaît tout de suite. Et tu éteins ton micro quand... après. '''Coker''' : Quand tu parles... '''Gérard''' : Petit Sucre ? '''Petit Sucre''' : D'Amiens. '''Boudin''' : Ça va ma poule ? '''Gérard''' : Toi, ça va être pareil, tu vas aller voir au standard ce qui se passe, hein ! '''Petit Sucre''' : OK, d’accord, j’arrête alors. '''Gérard''' : Donc la question c’est : "Faudra-t-il se coucher plus tôt qu’en été ?" Donc on va demander à... tiens, Petit Sucre. '''Petit Sucre''' : Ouais, ouais... Bah non, pourquoi se coucher plus tôt ? C’est en hiver qu'on se couche plus tôt, parce que l’été tu as une heure de plus, donc le soleil dure plus longtemps. bah ouais, tu comprends ? '''Gérard''' : Non, maintenant... Tu t’écrases quand je parle s’il te plaît ! '''Boudin''' : Alors ta gueule ! '''Gérard''' : Ta gueule, il t’emmerde ! Alors tu dégages ! '''Phildar''', ''[sévère]'' : Il parlait à Petit Sucre... arrête un peu, Gérard, tu suis un peu le débat un peu ? '''Gérard''', ''[crescendo vers le hurlement]'' : Attends, tu permets ? Il y en a un qui me dit... oh oh oh... Tu vas t’occuper de ton standard toi ! '''Manu''' : Gérard ! C’est Manu. Écoute-moi, on va reprendre le débat et c’est pas à toi qu’il disait ça. '''Gérard''' : Cocker ? Non, attends, Petit Sucre n’a peut-être pas fini. '''Petit Sucre''' : Ouais, bah oui, je te disais que donc... l’été on se couche une heure plus tard parce qu’on a du soleil une heure plus tard parce qu’on a une heure en moins, donc le soleil se couche plus tard. C'est l'’hiver, où on se couche plus tôt, il faut se coucher plus tôt. ''[sur la dernière phrase, dans un combiné, on entend un bruit d'eau qui coule d'un robinet dans un lavabo]''. '''Gérard''' : Tu sais pas d’où ça vient ça, toi ? '''Phildar''' : Attends, je vais essayer... Ah oui, ça venait de chez Couscous. '''Petit ucre''' : Ça t’intéresses pas ce que je dis ? Tu me posais une question, je te réponds tranquillement... '''Gérard''' : Si, mais je répondrai... Tu permets ? TU PERMETS ?! OK, merci. Reego ? '''Reego''' : Oui, sur IRC il y a Serval qui demande : "Alors, est-ce que c’est à cause du décalage horaire que les chauffeurs de Mercedes s’endorment au volant ?" '''Gérard''' : Alors là, j’y réponds pas. Là, tu peux y mettre... Non. '''Reego''' : Mais il t’entend. Tu peux lui dire... Il s'appelle Serval. Tu lui dis : « Serval, non... ». '''Gérard''' : Serval, je peux te dire ta question, de toute manière je te répondrai pas dessus, parce que je sais à quoi tu veux en venir. Alors Cocker ? '''Cocker''' : Je vais en discothèque. '''Gérard''' : Cocker ? '''Cocker''' : Oui ? Ah bah non, c’est le décalage horaire, je me suis trompé de débat. '''Gérard''' : Bon bah OK ! Alors si tu t’es trompé de débat... Cocker ? Tu vas répondre ou pas à la question ? '''Cocker''' : Bah non... La différence d'âge... '''Gérard''' : Bonne nuit Cocker ! Terminé pour toi ! Boudin Noir ? '''Boudin Noir''' : Ouais, moi je pense tu vois que... ça, ça dépend sous quelle latitude tu te trouves. '''Gérard''' : Non, mais faudra-t-il se coucher plus tôt qu'en été ? '''Boudin noir''' : Ça dépend, parce que, regarde, je vais te citer un exemple. Je regardais Star Trek, il y avait le Capitaine Kirk, il y avait Spock. Il y avait une téléportation, il y avait un décalage horaire. '''Gérard''' : Non, mais attends, je ne vois pas du tout le rapport. '''Boudin noir''' : Mais si, réfléchis un petit peu, c'est de la philosophie, c'est une énigme. C'est comme le père Fouras. '''Gérard''' : Non, non, attends, boudin noir. Boudin noir, on fait un débat, on ne s'amuse pas... '''Boudin''' : Mais ça dépend de la latitude. '''Gérard''' : Moi, quand je fais un débat, je n'aime pas que vous vous amusez à dire « ouais » dans les... '''Boudin noir''' : C'était une métaphore. '''Gérard''' : Ok, d'accord. Je pense que tu es loin de comprendre le deuxième degré. '''Boudin noir''' : J'ai du mal, le vocabulaire, j'ai du mal. '''Gérard''' : Je pense que tu as du mal. Point d'interrogation. '''Point''' : Oui, je pense qu'on sera obligé de se coucher un peu plus tôt que d'habitude. '''Gérard''' : Dans quel sens ? '''Point d'interrogation''' : Dans quel sens ? Si tu travailles ou si tu vas à l'école, tu es obligé de te coucher plus tôt. '''Merguez''' : Alors va te coucher, c'est l'heure. '''Gérard''' : Qui c'est qui vient de dire ça ? Alors, entre petit sucre et boudin noir, vous allez vous calmer, s'il vous plaît. Non, non, mais vous allez vous calmer, parce que je sens que c'est moi qui vais vous calmer tout à l'heure. ''Point ''' : Tout dépend si tu as envie de dormir ou pas. '''Gérard''' : Non, mais attends. PHildar, tu vas commencer par me les calmer, parce que sinon... t'arrêtes pas ? pas, mais je crois que tu ne vas pas arrêter de les calmer, parce que sinon, il reste quatre questions à faire. Il est quelle heure ? Il est 2h23. Dans moins de 22 minutes, j'arrête tout. '''Phildar''' : Ah non mais on change d'heure aujourd'hui. Il te reste 1h23 à faire. '''Gérard''' : Oui, oui. Oui, Reego ? '''Reego''' : Sur IRC, il y a Galéon qui demande : est-ce que l'hiver décale l'horaire de l'été ? '''Gérard''' : Ben oui. En hiver, tu recules d'une heure ta montre. Donc là, si tu veux, les 2h24, ça fera 1h24. '''Boudin''' : ON avance, on avance. '''Gérard''' : Non, tu recules. Tu recules. En hiver, tu recules ta montre d'une heure. En été, tu l'avances d'une heure. '''Boudin''' : Quand je recule, comment veux-tu ? '''Gérard''' : Que je t'encule, d'accord ? Merci pour la blague, je la connais par cœur. '''Manu''' : Et Gérard, il paraît qu'avec le décalage horaire à New York, quand il est midi, il y a beaucoup de gens qui sont en train de bouffer. C'est vrai ou pas ? '''Gérard''' : Attends, là, il est 2h25, on dort, nous. '''Manu''' : Non, mais je te parle à New York. Est-ce que tu penses que les gens sont en train de manger ? '''Gérard''' : Non, mais attends. Quand il est midi à New York, vous, vous êtes en train de faire de la radio. Donc là, à l'heure actuelle, si tu veux, il est 2h24, donc nous, pour l'instant, on est en train de dormir. '''Manu''' : Quel rapport avec les gens qui mangent à New York ? '''Boudin''' : Pour eux, il est 15h du matin. '''Merguez''' : Mais Gérard, quand les gens t'écoutent à New York, il est quelle heure, là-bas ? '''Petit sucre''' : Est-ce qu'ils peuvent t'écouter, au moins ? '''Gérard''' : De tte manière, tu regardes, tu fais un décalage, il est 2h25, tu fais moins 6h. Ça fait 12h25. '''Couscous''' : Attends, mais Gérard, mais tu fais un balayage arrière ou avant ? '''Gérard''' : Attends, c'est qui, lui ? '''Phildar''' : C'est Couscous. ''[rot dans un combiné]''. '''Gérard''' : Bon, attendez, attendez. Oh là. Alors, déjà, Phildar. Tu me calmes Boudin noir et sucre. Tu vas me les calmer tous les deux ! Parce que le premier qui rote, Je l'éclate. ''[le bruit reprend, Phildar ne bouge pas, Gérard tape sur la table]''. C'est toi que je vais t'éclater. '''Phildar''' : Comment veux-tu que je rote avec le micro fermé ? '''Merguez''' : Gérard, comment ça se fait qu'il y a pratiquement pas de femmes dans ton débat, ce oir ? '''Gérard''' : Si, il y a moustique et point d'interrogation. '''Couscous''' : C'est pas une femme, point d'interrogation. C'est une boule d'éléphant. '''Gérard''' : Alors, Couscous. COUSCOUS ! '''Couscous''' : Mon cousin Gérard, tu vas bien ? '''Gérard''' : Bon, tu réponds à la question, s'il te plaît. '''Couscous''' : Ok, alors moi, écoute. Je suis comme toi, je vais au resto du cœur et je crois qu'en hiver, on mange plus tôt à 3h de l'après-midi. Donc, on peut se coucher plus tôt, tu as raison. '''Moustique''' : Ben moi, je me couche plus tard en été, ouais. Parce qu'il fait beau et puis que je suis en vacances, donc je me couche plus tard. '''Gérard''' : Ben voilà. Ouais, pourquoi ? Parce qu'en fin de compte... ''[Ouais est dit de manière légère, comme en espagnol. Phildar réagit directement en se moquant : Ouepa et Manu enchaîne sur Un, dos tres de Ricky Martins. Gérard se tourne vers Phildar et veut le frapper, mais reego le retient.]''. '''Reego et Manu''' : Arrête, Gérard ! '''Gérard''' : Toi, tu te calmes là-bas, ok ? Parce que sinon, je t'éclate. '''Manu''' : Oula. Ça va être chaud pour ton matricule, Phil. '''Gérard''' : Toi, tu ne vas pas continué comme ça. Donc, je réponds à... Qui c'est qui m'a posé la question ? Non, c'est Moustique. Donc, moi, je vais dire une chose, que le mieux, c'est... ''[un rot]''. Manu, fais gaffe. '''PHildar''' : Je t'éclate. '''Gérard''', ''[le sourire gêné]'' : Hien Reego ? '''Reego''' : Non c'est juste pour rire, j'ai... '''Gérard''' : Non, non, mais... Arrêtez quand je réponds aux questions, parce que sinon, moi, je ne réponds pas. Je fais le débat sans répondre à aucune question. '''Manu''' : Vas-y, réponds, réponds, réponds. '''Gérard''' : Donc, je réponds à Moustique. Donc, c'est vrai que tu peux te coucher plus tard l'été, parce que le soleil, de toute manière, la nuit vient plus tard. Tu es d'accord avec moi ? '''Moustique''' : Oui. '''Max''' : Par exemple, excuse-moi, je pensais à un truc, parce que je me dis, par exemple, quand on dit le soleil vient de se lever, c'est encore une belle journée. On va bientôt s'amuser, l'ami Ricoré. C'est considéré comme du décalage horaire ou pas, ça ? '''Gérard''' : Ça, je ne peux pas. Je ne peux pas te répondre là-dessus. '''Boudin''' : Ah ouais, d'ailleurs, attends, Gérard, l'ami Ricoré, il vient toujours à la même heure ou pas ? C'est une question intéressante. '''Merguez''' : Ah ouais, en fait, comment il fait, lui, pour le décalage horaire ? '''Boudin''' : L'ami Ricoré, il a une heure, pendant une heure, il se fait chier, en fait, en hiver. '''Gérard''' : Bon, il se fait chier. Si tu as envie de chier, tu vas à la deuxième porte à droite. Bon, pour l'instant, je réponds à la question à Moustique, s'il vous plaît. Merci. '''Couscous''' : Gérard, tu as raison, parce que la deuxième porte à droite, c'est les chiottes de la Loco. '''Gérard''', ''[sourire gêné, tentant maladroitement l'accent arabe sur le prénom]'' : Couscous tu vas te calmer. Tu te calmes, parce que cette histoire de chiottes de la Loco, je ne veux pas en entendre parler cette année. '''Moustique''' : Gérard, tu sais, dans la chanson, il est 5h, Paris s'éveille. En hiver, c'est les 6h. '''Gérard''' : Ouais, si tu veux. Bon, je réponds à ta question, quand même, parce que je ne voudrais pas qu'on s'éternise trop sur la même question. Alors, donc, moi, je peux te dire que c'est vrai qu'en été, tu peux te coucher vachement plus tard, parce que, bon, déjà, à 10h, il fait encore jour. Ouais, mais même, tu n'as pas besoin de faire la fête, tu peux te balader dans... '''Boudin noir''' : Ouais, non, tu vas en soirée techno, tu vas à Cannes et tout, c'est bon. '''Gérard''' : Non, mais ça y est, je réponds, s'il vous plaît, merci. Vous arrêtez de me couper sans arrêt. Donc, je réponds à Moustique. Donc, c'est vrai que tu peux te coucher plus tard la nuit, en été. Parce qu'à 10h, il fait quand même encore jour. Par rapport à maintenant, c'est qu'à partir de 8h, la nuit est carrément tombée. Là, tu ne peux plus rien faire. '''Manu''' : Ouais, mais si chez toi, tu fermes les volets en été, il fait quand même... '''Gérard''' : Bah non, mais même, de toute manière, en été... Non, mais que ce soit été comme hiver, de toute manière, tu as toujours du jour. Tu n'as pas besoin d'allumer ta lumière, même en ayant fermé les volets. '''Manu''' : Même pour dormir, en fait. '''Gérard''' : Moi, je ferme les volets de la chambre, c'est tout. Dans la salle, c'est allumé. Dans la cuisine, c'est allumé. Mais tu peux demander à point d'interrogation. '''Phildar''' : Excuse-moi, Gérard, deux secondes avant de continuer. On accueille Loudné à la place de Coquer. '''Gérard''' : Non, mais... Je te préviens. Ne me fais pas changer les noms. Non, Loudné, il est d'où ? '''Phildar''' : Loudné, t'es d'où ? '''Loudné''' : De Marseille. ''[Manu renifle, le nez encombré]'' '''Gérard''' : Fréquence ? '''Phildar''' : 103.1. '''Gérard''' : Celui qui ronfle, merci. Donc, les enfants souffrent-ils de ce... '''Point''' : Je n'ai pas répondu. Point d'interrogation. '''Merguez''' : Oui, mais ce n'est pas grave, tu comprends... '''Gérard''' : Oh ! Vous fermez vos... Vous vous la fermez, s'il vous plaît, derrière. Merci. '''Point''' : Tu peux me répéter juste la question. '''Gérard''' : Alors, faudra-t-il se coucher plus tôt qu'en été ? '''Point''' : Oui, je pense qu'il faudra se coucher quand même plus tôt qu'en été. '''Gérard''' : Et pourquoi ? '''Point''' : Parce qu'en été, tu vois, tu n'es pas obligé d'allumer la lumière, déjà, en été, qu'en hiver... Et je pense que tu peux te coucher plus tôt. '''Gérard''' : Oui, mais... Non, mais comme Max, il posait la question, ou même Manu ou Phildar, je ne sais plus qui c'est, ou Reego, qui a posé la question. Si, par exemple, tu fermes les volets de la salle à manger ? '''Point''' : Ben oui, là, t'es obligé d'allumer. '''Gérard''' : Ah bon ? Tu penses qu'il faut allumer la... '''Boudin noir''' : Non, non, quand on voit ta gueule, il vaut mieux éteindre. '''Point''' : Ben, si tu n'es pas content, tu ne me parles pas. '''Gérard''' : Non, non, non, attends, attends, attends, point d'interrogation. Maintenant, je veux savoir qui c'est qui a dit, quand tu vois ta gueule, machin chouette. '''Manu''' : Dénoncez-vous, les mecs. '''Boudin noir''', ''[voix efféminée]'' : C'est Richard. '''Manu''' : Allez, Richard, dehors. '''Point''' : Regarde déjà la tienne, ce sera déjà pas mal, hein. '''Boudin''' : Oh, je viens d'arriver, je viens d'arriver, arrêtez. '''Phildar''' : Non, Richard, tu vires, c'est tout. '''Boudin''' : Ah, je me suis laissé aller, excusez-moi. Excusez-moi, je ne le ferai plus, allez, j'arrête. '''Merguez''' : Ben, c'est vrai que c'est tentant. '''Manu''' : Allez, Gérard, on y va. '''Gérard''' : Donc, moi, je pense que tu as répondu quand même aux questions qu'on avait dites ? Attends, il y a... point d'interrogation... il y a une question IRC. '''Reego''' : Oui, ça la concerne, en plus, c'est TSM qui me demande, enfin, qui te demande s'il y a un décalage horaire entre la fesse gauche et la fesse droite du point d'interrogation. '''Phildar''' : Non, il y a un trou. '''Reego''' : Pour ne pas la citer, hein, c'est Sandy. '''Boudin''' : À peu près 70cm. '''Reego''', ''[regard désespéré de Gérard]'' : C'est pas Snady, le point d'interrogation ? '''Manu''' : Mais non ! '''Reego''' : Ah pardon, excusez-moi. '''Phildar''' : T'es vraiment une cave, Reego. '''Gérard''' : Alors, les enfants souffrent-ils de ce changement d'heure ? '''Boudin noir''' : C'est dégueulasse, il ne faut pas laisser les enfants souffrir, c'est boudin, là. '''Gérard''' : Oh, vous donnez vos noms, s'il vous plaît. '''Boudin''' : Ouais, je dis, il ne faut pas laisser les enfants souffrir. C'est dégueulasse ce que fait le gouvernement avec le décalage. Les enfants, ils souffrent, ce n'est pas bien. '''Gérard''' : Non, mais attends, ce n'est pas le gouvernement qui a décidé de changer d'heure. '''Boudin''' : C'est qui, le décalage horaire, alors, d'après toi. '''Couscous''' : Bon, ben, c'est Couscous. Moi, je crois aussi que les enfants, ils souffrent trop. Et moi, je suis d'accord avec toi, Gérard, que tu as beaucoup souffert lorsqu'on t'a mis dans la machine à laver. Ils t'ont mis en essorage, toi. '''Gérard''' : Couscous ? Ça se voit qu'il y a longtemps qu'on ne t'a pas eu, parce que pour l'instant, tu es en train de déconner. Ouais, mais heureusement que tu es là pour mettre un peu du piment, mais... '''Couscous''' : C'est pas du piment, c'est de la harissa. '''Gérard''' : Ouais, mais Couscous ? '''Couscous''' : Oui, mon cousin Gérard. '''Gérard''' : Eh, calme-toi, on reprend là gentiment, mais déconne pas trop. On va demander à... Donc, pour toi, Couscous, les enfants, ils souffrent ou pas, toi ? '''Couscous''' : Couscous, ils souffrent un maximum. Ouais, c'est comme si tu mangeais de la harissa. '''Moustique''' : Ouais, bah je sais pas, moi je me souviens pas quand j'étais enfant, si je souffrais, donc... Les autres, je sais pas, ça c'est leur problème. Moi, je me souviens pas. Parce que quand j'étais petite, on changeait déjà d'horaire, et je me souviens pas si je souffrais. '''Gérard''' : Non, mais attends. T'habites où, toi ? '''Moustique''' : Euh, j'habite Poitiers. '''Gérard''' : T'habites Poitiers ? T'as quel âge, sans indiscrétion ? '''Moustique''' : 21. '''Gérard''' : Euh, 21, et... Euh, t'as jamais souffert du décalage d'horaire depuis le temps qu'on en parle ? '''Moustique''' : Bah, je m'en souviens pas, hein, quand j'étais petite, quand j'étais bébé, je sais pas si j'en souffrais, hein. '''Manu''' : De toute façon, c'est tous les 22 ans, donc elle peut pas s'en souffrir. '''Gérard''' : Non, c'est pas tous les 22 ans, c'est tous les ans qu'on change d'heure, hein. '''Manu''' : Ah bon ? Ouais, mais avec le décalage, ça revient à 22 ans pour la Grèce. '''Gérard''' : Non, non, attends, elle habite pas en Grèce, alors arrête tes conneries, toi. Bon, Boudin Noir ? '''Boudin''' : T'as déjà répondu tout à l'heure, faut pas laisser les enfants souffrir, c'est pas bien. Tu veux traumatiser les futures générations ? '''Petit sucre''' : Ouais, bah moi, je dis, je comprends pas du tout pourquoi on parle des enfants, euh... Je vois pas trop ce que ça a à faire là-dedans, hein. Faut les laisser tranquilles, les enfants. Faut vraiment que tu parles des enfants, quoi, parce que pour eux, c'est très dur de supporter ça. Et voilà, quoi, tu vois, en ce moment, là, s'il y en a qui nous écoutent, et bah, on est en train de leur rappeler des mauvais souvenirs. '''Boudin''' : Voilà, on est avec vous, les enfants, on est avec vous. '''Petit sucre''' : On n'est pas mercredi, c'est pas le jour des enfants, alors... '''Boudin''' : Je veux dire, comme disait la Bardot, il faut sauver les bébés-enfants, hein. '''Petit sucre''' : Ah, non, mais tu vois, je trouve vraiment que c'est trop facile, quoi, de parler des enfants comme ça, à la radio, hein. '''Gérard''' : Alors, moi, je vais te répondre, petit sucre. C'est pas parce qu'on parle des enfants, c'est qu'il y a des nouveaux-nés, ils souffrent, quand même, pour prendre leur biberon. Parce qu'avec le décalage horaire, on ne sait plus à quelle heure leur donner. On est bien d'accord ? ''[applaudissements et ovation par Manu et Phildar]''. Donc, on parle pas d'autres enfants, on parle de ceux qui viennent de naître pour leur donner leur biberon. '''Petit sucre''' : Ouais, bah, tu sais, ceux qui viennent de naître, c'est dur, la vie avec eux, tout ce qu'ils voyaient à la télé, tout, l'affaire Clinton, le décalage horaire... '''Gérard''' : Non, mais attends, attends, attends, je vois pas le rapport là-dessus, d'accord ? '''Petit sucre''' : Bah, eux, ils voient ça dès qu'ils sont tout petits. Non, non, mais attends, ils comprennent rien, quand ils sont... '''Gérard''' : Tiens, tiens, tiens, tu les prends pour des cons. '''Petit sucre''' : Ils sont pas cons, ils comprennent. '''Gérard''' : Non, mais ils sont moins cons que toi. D'accord ? Loundé ? '''Loudné''' : Bah, moi, je pense que, oui, les jeunes enfants souffrent, parce que, mettons, un enfant qui, mettons, va faire sa crotte à 6h, lorsqu'il change d'heure, il la fait dans son lit. '''Gérard''' : D'accord, je vois pas le rapport. Reego, t'avais une question IRC ? '''Reego''' : Oui, c'est Coyote Bip qui te demande si c'est pas trop dur à gérer le décalage horaire quand on sait pas compter. '''Gérard''' : Mais ça, je vois pas le rapport. Y'a pas besoin de savoir compter pour le décalage horaire. Donc, euh... Ouais, bah, il nous reste encore 10 minutes, donc, euh... '''Petit sucre''' : Et moi, j'ai une question, Gérard. Toi, t'as pas peur d'arriver une heure plus tôt à la Loco avec le décalage horaire ? '''Gérard''' : Alors, moi, je vais te dire une chose, que à la Loco, j'y vais plus. D'accord ? '''Max''' : Quand est-ce que tu reviens, d'ailleurs ? '''Gérard''' : Non, non, non, non ! Non, non, non, mais attends ! Moi, je vais répondre... Attendez, s'il vous plaît ! Parce que vos histoires de conneries, les chiottes de la loco et tout ça, maintenant, vous allez arrêter de me casser les couilles avec ça ! Parce que je commence à en avoir ras-le-bol ! Et celui qui s'amuse à envoyer des conneries chez moi, t'arrêtes encore ! Et maintenant, je vais demander à Phildar et à Manu, qui c'est qui a donné le numéro de portable ? '''Manu''' : Mais c'est pas nous, Gérard ! On va pas revenir là-dessus, on va reprendre le débat, c'est pas nous, quoi ! '''Gérard''' : Non, non, non, mais moi, je vais régler mon histoire, maintenant ! Non, non, mais juste avant la huitième, maintenant, je veux savoir qui c'est qui a été balancer... Qui c'est qui nous a mis un papier dans la boîte aux lettres en nous donnant un numéro ? '''Manu''' : Bah, j'en sais rien, moi ! '''Reego''' : C'est pas le thème du débat ! '''Gérard''' : Non, non, mais je préfère en parler quand même entre deux ! '''Point''' : Non, non, mais t'en parleras après, c'est pas grave ! Moi, j'ai pas répondu à la question, hein ! Donc, les bébés, oui, ils en souffrent, hein, parce que dès que tu leur donnes le biberon, déjà, qu'ils veulent pas le prendre, déjà, ils ont pas envie de le prendre, ils le prennent quand ils veulent, mais je pense qu'ils en souffrent beaucoup, hein, du décalage horaire, quand même, hein ! '''Gérard''', ''[tourné vers Reego, déconcentré]'' : Ouais, d'accord ! C'est bien ! Ouais, non, mais... Non, parce qu'il y a Reego qui voulait me dire quelque chose, euh... Donc, la huitième, le soleil est-il responsable du décalage horaire ? Moustique ? '''Moustique''' : Bah, bonne question, là, tu vois, j'ai réfléchi, euh... Je pense que ça vient plutôt de la Lune et avec les marées. '''Couscous''' : Moi, je suis d'accord avec toi, Gérard, parce que lorsque tu es resté trop longtemps au soleil, je crois que ton cerveau a fondu, et puis il y a eu un décalage horaire... '''Gérard''' : Non, mais il n'y a pas que le savon qui fond, il y a pas mal de trucs, hein ! '''Couscous''' : Mais toi, en tant qu'ex-enfant, tu as souffert ? '''Gérard''' : Euh, oui ! '''Couscous''' : Tu as beaucoup souffert, je crois, hein ! '''Gérard''' : Ouais ! '''Couscous''' : Tu peux nous en parler un petit peu ? '''Gérard''' : Non, non, mais ça, ça, c'est un truc que j'ai souffert, que je dirais pas sur l'antenne, parce que ça regarde personne ! '''Phildar''' : T'as souffert du décalage horaire, Gérard ? '''Gérard''' : Non, mais attends ! Parce que si tu veux, si tu veux, si tu veux, on arrête là, sur la huitième... '''Phildar''' : Non, mais je te pose la question ! '''Gérard''' : Non, mais attends ! Non, mais attends ! Attends, attends, attends ! Attends, Phildar ! Phildar, moi, si tu veux, on arrête à la huitième, moi, je vais parler de toute ma vie ! '''Phildar''' : Ah non, bah non ! '''Boudin''' : Non, non, franchement, on s'en fout ! '''Gérard''' : Parce que sinon, moi, le prochain débat, on fait pourquoi l'enfance abandonnée.<ref name="explic3"></ref> Ça, si tu veux, là... '''Phildar''' : On parlait du décalage horaire sur les enfants, c'est pour ça ! '''Gérard''' : Non, non, mais attends ! Mais dans ces cas-là, moi, je veux bien ! Mais moi, la semaine prochaine, on fait un débat sur l'enfance abandonnée et là, tu vas voir qu'on va avoir personne au standard ! Parce que ça, c'est un truc que je ne ferais pas ! '''Phildar''' : Ah oui, bah oui ! Non, mais t'as raison ! ''[bruit de rires d'enfants]''. '''Gérard''' : Parce que... Attends, qui c'est qui se marre comme un perdu, là ? Ouais, bah, moi, je vais vous dire une chose ! Alors, avant de dire des conneries, de se marrer, essayez de comprendre dans votre tête ! Non, non, mais essayez de comprendre ! '''Max''' : Mais toi, t'as envie de nous casser le moral, là ? Non, mais c'est toi qui a inventé, reviens sur le débat ! '''Gérard''' : Alors Phildar, tu te calmes, ok ? Maintenant, t'éteins ton micro, je veux plus t'entendre ! '''Petit sucre''' : Ouais, t'es pas sur Europe 1 là, c'est bon, quoi !<ref name="hist3"></ref> '''Boudin''' : Ouais, Gégé ! Gégé, c'est Boudin Noir ! Ouais, moi, je voulais dire, je comprends tout à fait, je sais que t'as été décalé, et je sais, en fait, que t'es retardé, quoi, c'est ça ? '''Gérard''' : Non, attends, je vois pas du tout ce que tu... '''Boudin''' : Attends, toi, t'es en avance, toi, c'est clair, t'es pas en avance, c'est clair ! Donc, bah, si t'es pas en avance, t'es retardé, quoi, je vois que ça ! Gérard''' ''' : Ouais, bah, attends, Boudin Noir ! Pour l'instant, je crois que t'es à côté de la plaque ! '''Boudin''' : Ah, bah, non, je suis en plein dedans, là ! '''Gérard''' : Ouais, bah, je pense que tu ferais mieux d'écouter ce qu'on dit ! '''Couscous''' : Et pourquoi on n'appelle pas Point d'interrogation Boudin ? '''Gérard''' : Euh, non, parce que le point d'interrogation, c'est son nom ! Euh, Petit Sucre ! Donc, pour toi ? '''Petit sucre''' : Ouais, ouais, ouais, bah, pour moi, non, je pense pas que c'est la faute du soleil, en fait, ça, c'est l'embrouille, quoi, ça, en fait, on nous ment. Pour moi, c'est... Parce que regarde, avant, ça existait pas, quoi, avant, Gérard, le décalage horaire, il y a, par exemple, 500 ans de ça. On parlait pas de ça ! L'horaire qu'il y avait aux Etats-Unis, tout le monde avait le même horaire ! Et tout ça, en fait, on parle des horaires pour pas parler d'autre chose, tu comprends ? Tu vois ce que je veux dire, tu comprends, toi ? '''Gérard''' : Ouais, mais attends, c'est pas nous qui avons décidé du décalage horaire ! '''Petit sucre''' : Bien sûr que si, parce qu'avant, il y en avait pas, avant, on en parlait même pas ! '''Gérard''' : Non, Petit Sucre, moi je vais te dire une chose, c'est pas nous qui avons, c'est pas nous, des gens comme tout le monde, c'est pas nous qui avons décidé ça, de changer les horaires. C'est le gouvernement ! Le gouvernement a décidé que maintenant, on changerait d'heure tous les ans, donc normalement, on devrait finir, ça devrait être la dernière année, et apparemment, on est toujours sur le même point. Tout le temps, on nous dit, oui, c'est la dernière année, c'est la dernière année, et en fin de compte, on s'aperçoit qu'on recommence, et ça va repartir l'année prochaine, au mois de mars, on va revenir en heure d'été, donc au lieu d'avancer nos montres, au lieu de les reculer, on va les avancer, au mois d'octobre ou au mois de septembre, septembre-octobre, on va encore reculer nos montres, on va plus savoir... '''Manu''' : Et comment ça se fait, Gérard, justement, qu'ils ont décidé que c'est la dernière année, pourquoi ? '''Gérard''' : De toute manière, c'est vis-à-vis du gouvernement, avec toutes les villes européennes, la Belgique a décidé qu'on arrêtait, l'Allemagne a dit on continue, donc ça a été voté à l'unanimité, donc pour qu'on continue. Mais moi, je trouve que pour moi, c'est de la merde de changer sans arrêt, parce qu'en fin de compte, qui c'est qui est perturbé ? C'est les petits bébés, c'est tout le monde, parce que les biberons sont décalés et tout ça, et eux, dans leur tête, ils ne peuvent pas le voir. '''Manu''' : Et donc, en fait, l'année prochaine, il sera la même heure à New York qu'en France ? '''Gérard''' : Mais non, je ne vois pas... '''Manu''' : S'il n'y a plus de décalage horaire, il sera la même heure partout ? '''Gérard''' : Mais si, mais non, mais de toute manière, le décalage horaire, on l'aura tout le temps. On l'aura tout le temps. '''Couscous''' : Non, mais Gérard, écoute, c'est Couscous. Moi, je te dis la chose suivante. La semaine dernière, je t'entends parler à la radio le matin, et maintenant, je t'entends parler le soir. '''Petit sucre''' : Et on a changé d'heure. Même à Fun. '''Gérard''' : Là, moi, je vais vous répondre. De toute manière, ce n'est même pas à moi de vous répondre. Non, non, ce n'est pas un décalage horaire. C'est pas un décalage horaire, Couscous. Non, mais le matin, c'est pas moi qui avais décidé, c'est mon chef. Maintenant, si le chef, il a décidé de reprendre la nuit, c'est lui qui décide. C'est personne d'autre. '''Phildar''' : Non, mais là, c'est-à-dire qu'on est en heure d'hiver, c'est tout. '''Gérard''' : Non, mais attends, mais dans ce cas-là, je ne vois pas ce que tu vas dire, toi, parce que tout à l'heure, je vais t'en coller une, tu vas comprendre le décalage. '''Manu''' : Oh, il n'a rien dit, il n'a rien dit, Gérard. '''Phildar''' : Bon, on bosse en heure d'hiver. Allez, Gérard. '''Reego''' : Bon, pour revenir au débat sur IRC, Gérard, on me demande si le décalage horaire est un pur tube. '''Manu''' : Non, non, à mon avis, c'est juste un tube. '''Petit sucre''' : Hé, Gérard, Gérard, j'ai une question, là, c'est petit sucre. Bon, ben, laisse-moi parler, je voulais savoir, avec l'Europe, tout ça, est-ce qu'on va avoir tous les mêmes horaires, les pays, d'après toi ? '''Gérard''' : Ben non, de toute manière, tout le monde... '''Petit sucre''' : Eh ben si, il n'y a plus de décalage, on a tous les mêmes horaires. Quand c'est midi à Paris, c'est midi à Londres, c'est... '''Gérard''' : Mais non, mais non, mais non, mais non. T'as qu'à trouver un bloc avec des décalages horaires, et tu verras que ce ne sera pas du tout la même heure. Non, non, essayez, essayez, stop, stop, stop, petit sucre. '''Point''' : Je peux te poser une question ? Donc, moi, je voulais te poser une question : est-ce que tu crois qu'à l'époque de Jésus-Christ, le décalage horaire existait ? '''Gérard''' : Bouarf là, tu me poses une colle, j'en sais rien, donc je te dis M-E-R-D-E. '''Manu''' : Oh, carrément ? '''Point''' : Oh, ben, merci, merci. '''Gérard''' : Voilà. Donc, ben, je pense qu'on va faire un... '''Reego''' : On va faire un tarot ? '''Max''' : Non, mais il faut arrêter vers moins 5, donc on a encore 10 minutes, donc tu n'as plus de questions, là ? '''Gérard''' : Ben, si, mais moi, je voulais faire un petit break, là. '''Max''' : Une petite dernière question ? Ben, non, c'est fini, on va faire une question, puis après, on va arrêter, à la rigueur. '''Gérard''' : Ben, voilà, comme je ne sais plus qui c'est qui avait posé de planète, on va y aller. Sur notre planète, existe-t-il un décalage horaire ? Donc, on va demander à Moustique. '''Moustique''' : Ouais, alors, il paraît que sur Uranus, ce n'est pas 24 heures, c'est 75, donc c'est tout le bordel, parce que c'est 74 l'hiver, enfin, bon, ils n'arrivent pas à s'en sortir, les pauvres. Et puis, sur Mars, c'est à peu près comme sur Terre, parce que c'est la même grosseur. En fait, ça dépend de la grosseur de la planète. Ça dépend si elle tourne plus ou moins vite, et puis, ben, combien il y a de fuseaux sur la planète. '''Couscous''' : Moi, j'ai entendu dire que les gens qui ont qu'une couille, ils ont souffert d'un décalage horaire. C'est vrai que toi, tu n'as qu'une couille, je crois, non ? Et l'autre, siliconée ? '''Gérard''' : Non, mais je suis en train de chercher qui s'amuse à faire des conneries. '''Point''' : J'ai pas compris la question. '''Gérard''' : Sur une autre planète, existe-t-il un décalage horaire ? '''Petit sucre''' : Elle va rien comprendre, déjà qu'elle capte rien sur notre planète, alors ailleurs... Ouais, ben, moi, je vais te dire, comme je disais tout à l'heure, euh, c'est sûr, euh... De toute façon, il faudrait se mettre d'accord avec les décalages horaires. Parce que si c'est un jour, c'est un jour, il y a des extraterrestres qui arrivent, que eux, ont un horaire qui n'est pas par rapport à nous, qui viennent en Europe... En Europe, que nous, on est tous d'accord, et que finalement, après, ils aillent aux Etats-Unis, c'est encore décalé, et finalement, après, ils atterrissent en Russie, euh, on va se planter, on sera... on pourra jamais tous se voir en même temps, tu comprends ce que je veux dire ? Donc, il faut trouver un système pour que ce soit un jour de partout pareil. Tu vois ? '''Boudin noir''' : Ouais, tout à l'heure, il y avait, je crois que c'était Moustique qui parlait des planètes et de Uranus, ben, moi, je pense que dans l'espace, si on tombe sur le trou noir de ton anus, et ben, c'est clair, il y a un décalage. '''Gérard''' : Et sur ta connerie ? Eh je pense que ta connerie, tu ferais mieux d'aller voir une nana, euh... une bonne pipeuse, et ça... '''Petit sucre''' : Vas voir le point d'interrogation, elle est pas trop loin. '''Gérard''' : Ouais, attends, euh, tu... Boudin noir, tu restes calme avec le point d'interrogation, d'accord ? '''Boudin noir''' : Oui, ok, excuse-moi, le facocher. '''Gérard''' : Alors, Boudin noir, tu dégages pour tout le temps. Hop, Boudin noir, tout le temps. '''Petit sucre''' : Va te faire sucer par le point d'interrogation, allez, hop. '''Gérard''' : Va le faire sauter, toi, abruti. Aller hop, terminé pour lui. Lui, c'est même pas la peine que je lui demande de... '''Max''' : C'est mignon, facocher, hein ? '''Reego''' : C'est... C'est beau, en plus, un facocher. '''Loudné''' : Bah, moi, personnellement, j'arrive pas à y aller sur les autres planètes, donc je sais pas comment ça se passe. '''Point ''' : J'ai pas répondu, hein. '''Loudné''' : Toi, le travelo, ferme ta gueule. '''Point''' : Non, mais je suis pas un travelo, hein. '''Gérard''' : Alors, toi, petit sucre... '''Phildar''' : Non, c'est pas un petit sucre. '''Gérard''' : C'est qui ? '''Phildar''' : Je sais pas, j'ai pas le droit de parler. '''Gérard''' : Ouais, alors, tu me dégages. Loup de nez. '''Manu''', ''[soufflant par le nez comme pour se moucher]'' : Attends, attends, je l'enlève. Vas-y, c'est bon. '''Gérard''' : Non, non, tu me les dégages, ces deux-là. Vite fait. Parce que... la fin, c'est moi qui vais la faire. Donc, vas-y, point d'interrogation. '''Point''' : Bah, je pense que, déjà, sur les autres planètes, je pense qu'il y peut y avoir un décalage horaire mais... '''Petit sucre''' : Mais tu penses pas toi, tu parles, c'est tout ce que tu fais. '''Gérard''', ''[hurle]'' : Ah, tu la fermes, ta gueule, toi ! '''Point''' : Mais pour ça, faudrait y aller, dans les autres planètes, pour savoir comment ça se passe. '''Petit sucre''' : Ouais, t'as raison, tu devrais y aller. Putain ! '''Point''' : Bah, t'as qu'à y aller, toi, si t'es pas content. '''Petit sucre''' : Et reviens pas, surtout, hein. '''Point''' : Oh, bah, toi non plus, tu reviens pas. '''Gérard''' : Hé, connard ! Hé, le connard ! Attends, tu me retires moustique. Tu me mets moustique en R. Tu me mets Couscous en R. Tu me mets point d'interrogation en R. Et tu me laisses, euh... Petit sucre et loup de nez. Et boudin. Hé, boudin noir ! Hé, connard ! Alors, connard, ça t'amuse, d'insulter point d'interrogation ? '''Boudin noir''' : Mais c'est pas moi ! '''Gérard''' : Non, c'est pas toi, connard ! Non ! Non, c'est pas toi. Tu te foudras pas de ma gueule ? ''[Manu fait le moustique avec sa voix]''. '''Boudin''' : Ah, y a une mouche. '''Gérard''' : Ouais, y a une mouche, c'est ta connerie. '''Boudin''' : Bah, le boudin noir, ça attire les mouches. '''Gérard''' : Ouais, bah, le boudin noir, c'est de la merde. Bon, allez, va te coucher, ça vaudra mieux. Donc, bah, on va faire la conclusion du débat. Alors, celui qui s'amuse à rôter... AHein Max ! ''[rire]'' Oh, attends, devant mes yeux ! Grillé ! Devant mes yeux ! '''Max''' : Regarde, regarde, écoute, regarde ! ''[bruit de rôt dans un micro, mais ne venant pas de Max]''. '''Max''' : Oh, c'était Manu ! '''Gérard''' : Attends, c'est l'autre abruti, là-bas, en face. '''Manu''' : Merde, ça part tout seul, des fois. '''Gérard''' : Bon, allez, conclusion du débat. Moustique. '''Moustique''' : Ouais. ''[bruit de moustique par une voix, Manu dément, mais imite le pet avec sa bouche]''. '''Gérard''' : Bon, allez ! Non, allez, on y va. Conclusion, conclusion. '''Max''' : C'était bien comme débat, donc ça serait dommage que ça soit gâché. '''Moustique''' : Voilà, c'était bien comme débat, et puis ce serait dommage que ça soit gâché par une mauvaise conclusion que j'aimerais te donner, mais que je ne te donnerais pas. '''Max''' : Et Moustique, quand tu veux, tu nous envoies une photo de toi. '''Moustique''' : Pas de problème, Max. '''Couscous''' : Alors, moi, je pense que le débat, on devrait faire ça. ''[il tire la chasse d'eau]''. '''Gérard''' : Ouais, ben, non, mais couscous, ta conclusion sur le débat. '''Couscous''' : Bah, écoute, moi, je trouve que le... Je trouve que le débat a été super chiant, comme d'habitude, hein. Ouais, c'est tout, quoi. Et Gérard, n'oublie pas que t'es mon cousin, hein. Salut, mon cousin Gérard. '''Gérard''' : Ok, je te remercie. Point d'interrogation ? '''Point''' : Ben, réglez vos montres à l'heure, c'est tout. '''Boudin''' : Ouais, ben, écoute, je suis toujours là. Je suis désolé que tu sois énervé sur moi. Sandy, je l'aime bien, en fait. '''Gérard''' : Non, mais moi, je te demande la conclusion du débat.  ?'''Boudin''' : Ben, ma conclusion, c'est Sandy, est-ce que tu veux m'épouser. '''Point''' : Pas du tout, non. '''Petit sucre''' : Ouais, ouais, ben, écoute, moi, je te souhaite bonne chance avec le décalage horaire, que tu restes pas à la porte de la Loco tous les vendredis. Et voilà, quoi. Puis, j'étais très content de t'avoir écouté, ça faisait un petit moment. Et débat, c'est bien sympa, quoi, t'es pas trop énervé. Pour une première salle, t'as bien géré tout ça. '''Max''' : Ben, heureusement qu'il est pas trop énervé, si c'est que ça, qu'est-ce que ça va être en 15 jours. '''Petit ucre''' : Et, euh, donc, ça va, puis je te souhaite de bien t'amuser avec mon interrogation. '''Gérard''' : Ben, point d'interrogation, pour l'instant, on s'entend super bien, donc, y'a pas de problème là-dessus. '''Petit sucre''' : Ben, surtout, tu la gardes, tu la refiles pas. ''' ''' : Ben, non, mais je vais pas te la refiler. '''Manu''' : C'est comme une maladie, personne n'en veut, hein. '''Gérard''' : Ben, t'inquiète pas, à la Loco, je suis pas prêt d'y retourner pour l'instant. '''Max''' : Oh, tu viendras quand même, là, non ? '''Gérard''' : Non, non, parce que, vu ce que j'ai reçu encore... '''Max''' : Ouais, mais pour moi, t'es dégueulasse. Pour mon anniversaire, au moins. '''Gérard''' : Non, non, mais attends, on va demander à Loudné sa conclusion. '''Loudné''' : Ben, moi, je dis que, par rapport à ce qui se passe en Amérique avec Bill Kinton, euh, moi, je pense que il faudrait faire gaffe dans les locaux de la radio, parce que, point d'interrogation pourra peut-être sucer le chef. '''Gérard''' : Non, mais attends, hé ! Hé, Loudné, je te demande le thème du débat. Je te demande la conclusion sur le décalage horaire. '''Max''' : C'était la clnclusion, il l'a faite. Oui, trop tard pour lui, allez, hop, suivant. '''Gérard''' : Donc, ben, il n'y a plus que moi à faire la conclusion, donc, moi, je vais te répondre avant à ta question, pourquoi on ne revient pas à la... '''Max''' : Ah non, je m'en fous de ça, je voulais savoir si tu voulais venir, je m'en fous, c'est pas intéressant, c'est le courrier, on verra ça, on s'en fout. Ta conclusion ? '''Gérard''' : Ma conclusion, c'est que, c'est sûr que, pour l'instant, on a fait le décalage horaire, mais je l'ai fait un peu tôt, parce que, normalement... '''Max''' : Non, ta conclusion sur le décalage horaire, t'en penses quoi ? '''Gérard''' : Moi, personnellement, je trouve que c'est de la... Merde. Parce que... Que tu changes, que tu recules d'une heure, ou que t'avances d'une heure, de toute manière, tu boufferas autant de courant. Là, je vois, on est parti... On est parti mardi, avec Titi, en Allemagne. '''Max''' : Titi, c'est un camionneur qui l'a pris hier et qui l'a emmené en Allemagne, Gérard et Sandy, et donc ? '''Gérard''' : Donc, on s'est pris de la... On pensait avoir du soleil, et en fin de compte, on s'est pris de la flotte. On est revenu... '''Max''' : Je ne sais pas si on va arriver au rapport avec le décalage horaire, si ? '''Gérard''' : Non, mais... De toute manière, à la base, c'est que ça n'a pas été évident. '''Max''' : D'accord. Rien à voir avec le décalage horaire, ce qui n'est pas bien. '''Gérard''' : Non, mais le décalage horaire, pour moi, je trouve que... '''Max''' : D'accord. Les débats de la semaine prochaine ? '''Gérard''' : Les débats de la semaine prochaine... La pollution et cinéma. ''[ohlàlo de désespoir dans le studio]''. Non, mais attends, c'est pas toi qui commandes, d'accord ? '''Reego''' : Sur IRC, on me dit que c'est naze, le cinéma. '''Manu''' : Tu vois, tout le monde le dit. '''Gérard''' : C'est moi qui commande et c'est tout. '''Max''' : Voilà, exactement. Donc, ça sera un débat sur le cinéma et un débat sur la pollution. '''Gérard''' : Et pour les conseils, point d'interrogation, t'es toujours là ? '''Max''' : Non, non, c'est bon. C'est mardi, voilà. '''Gérard''' : Ah oui, mais on peut donner quand même... '''Max''' : On en parlera lundi, on en parlera demain ou lundi. '''Gérard''' : Ah non, on va en parler maintenant. '''Max''' : Non, mais les conseils, c'est pas toi, c'est les gens. C'est en fonction de leur demande à eux. On verra ce qu'ils voudront avoir comme conseils. Tu choisiras. On verra ça. '''Gérard''' : Vu si ça fait comme mardi dernier... '''Max''' : Ok, d'accord, ok, on en discute. Puisque tu parlais de la Loco, je vous rappelle que demain soir, à la Loco, il y aura Funky Data pour ceux qui aiment la house. C'est un live, c'est-à-dire qu'ils sont sur scène avec le matériel. C'est des grenoblois. Et qu'il y aura Jean-Marie K, DJ Sonic, qu'on va retrouver d'ailleurs Sonic dans un instant pour la conclusion de cette émission de ce soir. Et sinon, demain soir, il y a également le Marina, le club discothèque du côté de Port-Barcares. Alors, si vous voulez venir au Port-Barcares, au Marina, vous appelez maintenant le standard de Fun Radio, 0800 70 5000. Vous pouvez venir à la Loco également gratuitement vendredi soir, pareil, 0800 70 5000. Et si vous voulez empocher pour les 10 plus rapides des albums de Funky Data, pareil, 0800 70 5000. On vous retrouve tout à l'heure à partir de 22h. == Le débat sur la pollution == === Contexte === La saison est lancée, mais l'émission n'en finit pas de se chercher. En ce début de saison, l'équipe tente de faire parler Gérard sur des sujets sérieux, bien que détournés souvent vu sa difficulté à les comprendre, sans accrocs. Ces tentatives s'épuiseront rapidement dans l'ennui, ramenant l'équipe à se montrer plus proactive dans la mise en scène du débat et de son animateur. Pourtant, on est au cœur du surréalisme, où tout s'adjoint sans lien ni sens, reposant sur l'incompréension générale des sujets, d'une conversation, et la manipulation adroite du second degré par tout le monde. Sur la durée, tout le monde a conscience qu'il faudra alterner les provocations et les séquences purement surréalistes, mais on commence à voir la ligne que suivra ette émission. Elle vivra aussi un moment marquant. Au fil des appels téléphoniques, Manu a fini par tomber amoureux d'une personne prénommée Laura. Elle deviendra sa femme, on le verra plus tard. Pour partager la passion de la radio avec son nouveau copain, elle participera à cette émission et ce soir est sa première. Première d'une longue série, car elle animera toute l'année 1998-1999 au moins. Ce thème, lui, est d'actualité. La conscience écologique est naissante mais pas encore prégnante. Le passage sur le tabac en est une bonne démonstration. Il faut y noter que rien n'y est exagéré ni particulièrement surréaliste : ce qui est dit correspond à l'état d'esprit et aux débats des gens de l'époque sur la cigarette dans les lieux publics. Son interdiction en milieu fermé n'était pas vraiment appliquée et les débats allaient bon train entre les fumeurs et les autres. === Les personnages === * Gérard Cousin : Gérard * Phildar, Manu * Sandy Threadkell : Sandy * Igor : Reego * Franck Bargine : Max * Laura : Cactus * Mégane : Braguette * Arnet : Briquet, Greenpeace * Christian : Bounty * Coquelicot, Sucre d'orge (deux filles) * Moustache * Kelnumero : déjà passé lors du débat sur auto-moto, entre autres === Transcription === '''Gérard''' : Bonsoir à tous, 1h23... 0h23 pardon, on attaque avec 7 minutes d'avance, donc bonsoir Reego, donc Reego si t'as des réponses sur le thème du débat de ce soir, tu fais comme la semaine dernière, t'hésites pas. '''Reego''' : ok pas de problème. '''Gérard''' : Phildar... '''Phildar''' : salut Gérard ça va ? '''Gérard''' : Toi, pas comme la semaine dernière, ok ? Au débat Manu, au standard, donc pareil, s'il y a un problème, je te signale... '''Manu''' : Tu dis le nom de l'auditeur et je le dégage aussi sec. '''Gérard''' : Dt donc Olivier de la prod, qui est un peu plus loin derrière, qui viendra nous rejoindre tout à l'heure... qui viendra nous rejoindre pour le deuxième débat pour faire la réa, donc on va attaquer tout de suite avec Sucre d'orge... '''Phildar''' : J'ai déjà Bernard sur le Minitel du 75 qui dit qu'il t'aime : « Gérard je t'aime. ». J'aime tes débats, il veut dire. '''Gérard''' : non mais pour l'instant, on commence pas comme ça, on va déjà accueillir les gens, donc Sucre d'orge, bonsoir, 20 ans de Paris. Donc on peut écouter Fun Radio sur 101.9. Braguette, 22 ans de Clermont-Ferrand, on écoute Fun Radio sur 96.6. Coquelicot, 19 ans de Troyes, donc, on peut écouter Fun Radio sur 102.2 FM. '''Phildar''' : Ouais, c'est chez moi ! '''Gérard''' : Ça c'est du côté de chez Phildar. Christian de la Celle-Saint-Cloud, 56 ans. Pourquoi Bounty ? '''Phildar''' : Parce qu'il a voulu s'appeler Bounty, c'est drôle. '''Gérard''' : Non mais on aurait pu laisser Christian, c'est pas grave. donc 101.9. Moustache, 21 ans de Toulon, on peut écouter Fun Radio sur 93.1. Et briquet. '''Briquet''' : Bonsoir, j'allume le feu ce soir. '''Gérard''' : Alors, Tony et Arnette, vous allez commencer à vous calmer tous les deux. '''Phildar et Manu''' : non mais il n'y a pas de Tony et Arnette ce soir. '''Gérard''' : non mais non, ils ne vont pas commencer à me dire, on va vous mettre le feu, ok ? Beson. donc on peut... 95, donc on peut écouter Fun Radio sur 101.9. Non, 104.8, n'est-ce pas Manu ? ok ? alors, première question, donc, je pense que vous l'avez écoutée, on en a discuté juste avant la pause,. Donc, pensez-vous que la Seine est trop polluée ? '''Sucre d'orge''' : bah oui, elle brille. Il y a plein d'huile, toutes les couleurs, la Seine est de toutes les couleurs parce qu'elle est vraiment trop polluée, ça brille. '''Braguette''' : oui, mais dans un autre sens, c'est joli. '''Sucre d'orge''' : C'est joli, mais... '''Gérard''' : non, non, non, non, non, attendez, attendez, attendez, stop, stop, stop... Pensez-vous que la Seine est trop polluée, moi, je peux... Allez-y, répondez tous, donc, sucre d'orge ? '''SUcre''' : Moi, je dis que oui, bien sûr, elle est trop polluée, on peut pas se baigner. '''Gérard''' : Oh, bah, tu crois que tu vas te baigner dans la Seine toi ?, '''Sucre''' : Non, je te dis, elle est dégueulasse, elle est dégueulasse l'eau. '''Coquelicot''' : Extrêmement polluée. '''Braguette''' : Ouais, je trouve qu'elle est polluée, mais en même temps, c'est sympa, quoi, t'as des rats, t'as plein d'animaux, t'as des jolies couleurs, c'est vachement animé comme région. '''Moustache''' : Ouais, bah, moi, je dis, ouais, elle est polluée, la Seine, voilà. '''Briquet''' : Ouais, la Seine, c'est dégueulasse, il y a des gens qui balancent plein de trucs, alors qu'il y a à peu près, je sais pas. Il y a 80 ans, on pouvait se baigner dedans, quand même. Il y avait des gens qui allaient se baigner dans la Seine parce que c'était propre avant. '''Gérard''' : Alors, moi, je vais te dire une chose. Tu pourrais me dire en quelle année que la Seine a été trop polluée et qu'on pouvait se baigner dedans ? '''Briquet''' : Je crois que c'était en 1910, un truc comme ça. '''Gérard''' : Ouais, bah, je pense qu'à mon avis, je crois que tu te trompes vachement, parce que la Seine, elle est polluée, et de toute manière, tu ne peux pas te baigner dedans. Pourquoi ? Parce que moi, je vais te dire pourquoi. Je pense que tout le monde va être d'accord avec moi, j'espère. C'est que toutes les personnes qui viennent avec leurs péniches ont l'habitude de balancer des saloperies, des ordures et tout. Et moi, je peux te dire une chose, que là... j'ai des écluses où que j'habite, et faites-moi confiance que là, à chaque fois qu'ils ouvrent les écluses pour laisser passer les péniches, eh ben, faites-moi confiance que ça reste bloqué. Il n'y a aucun truc qui s'en va. '''Moustache''', ''[pendant que Manu applaudit]'' : Bien dit. '''Briquet''' : mais il y a une centaine d'années, les gens faisaient pas ça. '''Phildar''' : Ouais, mais il y a cent ans, ça n'existait pas, les péniches, Gérard. '''Gérard''' : Non, mais attends, de toute manière, les péniches, je ne sais pas. '''Manu''' : Il y a cent ans, je ne sais même pas si la Seine, elle existait. '''Gérard''' : Non, non, mais moi, je peux vous dire une chose, qu'à l'heure actuelle, de toute manière, on ne peut pas se baigner. Moi, j'ai vu une fois une personne, je ne sais pas comment elle a fait son compte, elle est tombée. Je ne sais pas si c'est le mec qui a dérivé ou autre, mais le mec, il s'est gouré, et tout le monde est tombé, il y en a une qui est tombée dans la Seine, et justement, l'écluse s'eest ouvrée. '''Max''' : Oui, mais c'est normal, c'est le mec, si c'était une ordure. '''Gérard''' : Non, mais c'était une nana. '''Max''' : C'était peut-être une ordure. '''Gérard''' : Non, non, mais on ne sait jamais. '''Manu''' : Donc, excuse-moi, moi, par contre, j'ai vu un mec tomber dans la Seine, eh ben, il est mort noyé, quoi. '''Gérard''' : Non, mais attends, toi... Toi avec tes conneries... '''Manu''' : Mais non, ce n'est pas une connerie, il est mort noyé. Est-ce que ça vient de la pollution ou pas ? '''Gérard''' : Non, mais ça, c'est... '''Briquet''' : Ça n'a pas de rapport avec le débat, de toute façon. '''Gérard''' : De toute manière, ce n'est même pas une des questions. '''Phildar''' : J'ai un petit message militel de Orem, qui a 23 ans, qui est dans le département 77, qui dit « La Seine, c'est dégueulasse, les poissons baissent dedans. » '''Gérard''' : Non, non, non, non, mais ça, je vais te dire une chose, les gens qui s'amusent à pêcher dans la Seine... les poissons, ils peuvent les... Ils peuvent les laver au vinaigre. ''[rires et applaudissements de Manu]'' Ah, mais si ! Je peux te dire que les poissons sont... La personne qui va... qui pêche dans la Seine peut laver ses poissons avec le vinaigre parce que... Non, mais même ! Le poisson, il sera immangeable et tout. '''Coquelicot''' : Parce qu'elle pue, la Seine ! '''Gérard''' : Ouais, mais elle pue, c'est de notre faute à nous ? '''Moustache''' : Il y a les égoûs de Paris en même temps. '''Gérard''' : Ouais, non, mais il faut dire une chose, c'est qu'il faut voir que dans la Seine, que dans la Seine, à l'heure actuelle, les gens balancent n'importe quoi. Même ceux qui sont en péniche, je pense qu'on doit en avoir qui nous écoutent des... '''Phildar''' : Des pénichiers, ouais. '''Gérard''' : Des bâteliers. On appelle ça des bâteliers. Donc, je pense qu'ils doivent nous écouter. S'ils nous écoutent, arrêtez de balancer n'importe quoi. Quand on voit des bouteilles de flotte, des bouteilles de coca, tout ça... ''[les auditeurs confirment par des cris « c'est horrible », « c'est dégueulasse »]''. Mais attendez, moi je... Reego, une question internet ? '''Reego''' : Sur l'IRC, il y a Shun qui me disait... Qu'est-ce que tu penses du fait que Jacques Chirac avait dit qu'il se baignerait dans la Seine ? Donc, moi, je peux vous dire une chose, c'est que... Là, c'est que ça va trop loin. Moi, je peux vous dire une chose, qu'il y a même les gens, ils s'amusent à nous balancer n'importe quoi, et après, ça reste coincé. Dès qu'ils ouvrent les écluses, ça reste coincé. Et je vois, c'est en 95 ou 96, la fois où on a eu une chaleur à crever, c'est que les points... les poissons, ils étaient morts, ils remontaient. Et là, ils ont fait appel donc aux... Non, non, aux responsables... '''Phildar''' : de la DDE ? des travaux ? '''Gérard''' : de la Seine pour nettoyer tout ça, parce que c'était impossibe. C'était impossibe de pouvoir continuer comme ça. Donc, deuxième question, faut-il... fumer, est-il un moyen de pollution ? Donc, on va demander à Briquet. '''Briquet''' : Ouais, alors, moi, je m'allume des cigarettes. Et non. En fait, non, ça ne pollue pas. C'est bon pour la santé, c'est ce que m'a dit mon médecin. '''Gérard''' : Ton médecin, tu me donneras son adresse, j'irai le voir. Moustache ? '''Moustache''' : Moi, je vais te dire que ça pollue, parce que t'as vu le nombre de gens qui fument. Moi, je dis que ça fait beaucoup de fumée, tout ça. '''Gérard''' : Non, mais attends, moustache. Moi, je vais te dire, fumer est-il un moyen de pollution ? '''Moustache''' : Ouais, bah ouais, ça pollue non seulement le corps, mais en plus, ça pollue les gratte-ciel. '''Gérard''' : Non, mais, de toute manière... Attendez, s'il vous plaît, derrière, là... Donc, moi, je vais répondre à moustache. Donc, pour toi, quand tu fumes, pour toi, ça... Tu veux dire que tu pollues tout le monde ? Moi, je vais te dire une chose. Moi, qui ai l'habitude de fumer, moi, je peux te dire une chose que... Bon, d'accord, Sandy, elle aime pas quand je fume, parce que si j'ouvre pas la fenêtre, elle peut pas supporter l'odeur de la cigarette. '''Moustache''' : Normal, bah ouais, si elle aime pas, c'est logique. '''Gérard''' : Bah oui, mais dans ces cas-là, quand elle est dans une voiture, admettons que tu conduises, que le chauffeur qui est à côté de toi, par exemple, le passager, ne fume pas, est-ce que tu vas continuer à fumer pour l'empester ? '''Moustache''' : Bah non, carrément pas, quoi. '''Gérard''' : Alors, attends, attends, moustache. Qui c'est qui dit oui ? '''Braguette''' : C'est Braguette. S'il est pas content, il prend sa voiture. Moi, je fume dans ma voiture. '''Gérard''' : Ouais, mais attends, Braguette, si, par exemple, le passager ne fume pas, qu'est-ce que tu fais ? '''Braguette''' : Je fume, moi, je suis dans ma voiture. '''Bounty''' : On va dans un autre endroit. '''Gérard''' : Donc, toi, tu l'as dans un autre endroit ou dans une autre salle. '''Gérard''' : Ouais, mais, par exemple, mais admettons, admettons, Bounty, Christian. Admettons que t'as pas d'endroit pour non-fumeurs. Tu vas où ? '''Bounty''' : Dans les WC. '''Gérard''' : Ouais, mais si... admettons, dans les WC, c'est interdit. '''Moustache''' : Bah, tu vas dehors. '''Gérard''' : Ah, ouais, mais dans ces cas-là, dehors, ok. Mais est-ce que tu pourras re-rentrer dans là où t'étais ? '''Phildar, Bounty et Braguette''' : Non, c'est interdit. '''Phildar''' : Non, parce que, regarde, si tu fumes, tu vois, parce que t'es dans un lieu interdit, donc tu vas fumer dehors, mais le problème, c'est qu'après, tu sens la fumée et que t'as encore de la fumée, donc si tu rentres... '''Gérard''' : Non, non, mais attends, pour l'instant, Phildar, c'est pas toi que je m'intéressais, c'était Christian. ''[il éteint le micro de Phildar]''. '''PHildar''' : Ah, pardon. '''Gérard''' : Donc, Christian, admettons que tu sortes pour fumer une cigarette, est-ce que tu pourras re-rentrer dans la boîte ? '''Braguette''' : Mais on était dans la voiture, là et tu nous parles de boîte. '''Gérard''' : Bah, oui, mais dans les boîtes de nuit, de toute manière, souvent... '''Braguette''' : Moi, j'y vais pas. '''Gérard''' : Toi, tu fumes pas ? '''Braguette''' : Bah, si, moi, je fume. '''Gérard''' : Bon, bah, donc, dans les boîtes de nuit, de toute manière, on a le droit de fumer. On est bien d'accord ? Donc, par contre, si t'as une personne qui est à côté de toi, qui supporte pas la cigarette et qui te dit, « est-ce que vous pouvez arrêter de fumer », qu'est-ce que vous faites ? '''Braguette''' : Bah, il sort. '''Gérard''' : Ah, ouais, mais si elle est dans une boîte de nuit, tu vas lui demander de sortir ? '''Braguette''' : Ah, bah, il fait ce qu'il veut. S'il supporte pas, il va plus loin. '''Gérard''' : Bah, il change de coin. '''Braguette''' : Exactement. '''Gérard''' : Ah, voilà, c'est ce que je voulais entendre dire. '''Moustache''' : Gégé, Gégé. Moustache. Moi, je dis, quand même, c'est celui qui fume qui doit se barrer, non pas celui qui fume pas et qui est dérangé. '''Braguette''' : Ah, non, non. '''Gérard''' : Ouais, non, mais attends, moustache, tu vas pas demander, par exemple, si toi, t'as pas envie de fumer, tu vas pas dire à la personne, si tu fumes pas, tu dégages. '''Moustache''' : Mais non, justement, c'est le contraire. La personne qui fume pas, normalement, elle doit rester à sa place. '''Gérard''' : Ouais, mais c'est la plus gênée qui s'en va, alors. Ouais, mais dans une boîte de nuit, tu vas pas dire, bon, bah, tu fumes pas, tu dégages. Moi, je fume et c'est tout, point final à la ligne. Mais moi, je vois pas le rapport. Je vois pas le rapport sur la question. Parce que, d'accord, je sais... '''Phildar''' : J'ai peut-être une solution, c'est qu'en fait, les personnes qui fument pas et donc qui sont avec des gens qui fument, en fait, ils sont privés parce qu'après, ils puent la fumée. '''Gérard''' : Ouais, mais ça, ça s'imprime sur les vêtements, ça, je suis d'accord avec... Qui c'est qui vient de... '''Phildar''' : Phildar, de Paris. '''Gérard''' : Non, mais attends. Attends, Phildar, on sait que c'est toi, de Paris. Donc, c'est Bounty ou... C'est Christian ou Moustache, là. '''Moustache''' : Ouais, c'est Moustache, c'est Moustache. '''Gérard''' : Non, mais je voudrais bien que les trois filles aussi réagissent un peu, là. Non, parce qu'on les entend pas assez, là. '''COquelicot''' : Oui, non, mais nous, on est là, on écoute, on est passionnées. On se dit que fumer, de toute façon, ça salit. Onsent dans les doigts, on sent dans les vêtements, on sent partout, donc on est grillés, hein. '''Braguette''' : C'est une bonne odeur qui pue bien, moi, je trouve. '''Gérard''' : Ouais, mais moi, dans ces cas-là... Oh, là, qui c'est qui a un téléphone pourri, là ? '''Sucre d'orge''' : Là, c'est Sucre d'Orge, là. Ouais, enfin, moi, je trouve que... je veux dire, tu sors dans la rue, les voitures, ça te dérange, tu vas pas dire aux gars... Enfin, si, tu vas pas dire au gars, vas-y, arrête de conduire, quoi. '''Gérard''' : Non, non, attends, Sucre d'Orge. Sucre d'Orge. Je vois pas le rapport avec la fumée de cigarette. '''Sucre d'orge''' : Ah, bah, si, c'est de la pollution, quoi, mais... '''Gérard''' : Non, mais, justement, justement, on va en... On va en parler, on va en parler des voitures. Hein ? On va en parler. Donc, pour l'instant, je parle de fumée. Par exemple, moi, je peux vous dire une chose, qu'il est là, il peut très bien réagir, il est planqué derrière moi, là-bas, il peut très bien prendre la place à Phildar, c'est que lui, quand il vient dans les studios et qu'on fume, ça le dérange. Et dans les soirées, il y a certaines personnes qui fument, mais est-ce que ça te dérange à toi, Max ? '''Max''', ''[faussement timidement]'' : Alors, d'abord, bonsoir. '''Phildar''' : T'appelles d'où ? '''Max''' : Donc, savoir si ça me dérange la cigarette. Dans des lieux comme les discothèques. Non, sauf si il y a une personne qui fume et qui va me mettre la fumée dans la gueule, quoi. J'ai remarqué ça dimanche en étant dans un lieu public qui était... le Parc des Princes et je voyais quand même des mecs qui fumaient le cigare. Eux, ils fument le cigare, donc c'est quand même un truc qui empeste. Mais eux, quand ils recrachent la fumée, à aucun moment, ils ne se la prennent pas dans la gueule. Mais par contre, ils l'envoient à la gueule de gens qui ne fument pas. Donc, le minimum, c'est au moins, quand tu fumes, c'est de voir si tu ne déranges pas des gens autour de toi. '''Gérard''' : Mais moi, par contre, il y a une personne... Je pense que... '''Max''', ''[en diva]'' : on pourrait me balancer deux, trois applaus, quand même... '''Gérard''', ''[applaudissant avec Phildar et Manu, mollement]'' : Bravo, chef. Mais moi, je peux répondre à la personne, je ne sais pas, c'est Sucre d'Orge ou Braguette ou Coquelicot qui a dit ça. Quand on envoie la fumée sur la personne d'un mec, ça veut dire qu'on l'aime. Mais moi, je peux vous dire une chose, c'est qu'à l'heure actuelle, j'ai deux paquets de cigarettes, voire trois. Et sur les trois, c'est marqué... ''[il sort un paquet de sa poche]'' '''Phildar''' : Tu fais un débat sur la santé ? '''Gérard''' : Nuit grave. Nuit gravement à la santé. '''Max''' : Mais nuit ou jour ? C'est nuit et jour ou c'est nuit gravement, dans le sens de la nuit ? '''Gérard''' : Non, c'est nuit gravement à la santé. '''Max''' : C'est juste la nuit. Donc, le jour, c'est pas dangereux ? '''Gérard''' : Fumer nuit, à votre entourage... '''Max''' : Pourquoi ils parlent de la nuit ? '''Gérard''' : C'est ce qui est marqué sur les paquets. '''Max''' : Pourquoi ils disent que c'est la nuit ? '''Gérard''' : Je sais pas. Je pense que ma nuit... '''Max''' : Je sais pas si on est vraiment dans le débat de la pollution. Je sais pas si on fait un débat sur le tabac et sur le cancer ou si on fait un débat... Je crois qu'on est un peu sortis du débat, mais c'est vrai qu'il faut y réfléchir. Pourquoi on dit nuit gravement ? Pourquoi c'est la nuit grave ? '''Gérard''' : Nuit gravement parce que ça esquinte... ça esquinte la santé. Ça, c'est un débat qu'on fera peut-être la semaine prochaine. ''[Manu applaudit]''. '''Phildar''' : Toi, t'as répondu, Gérard. T'as répondu à la question. Donc, on peut passer à la troisième. '''Gérard''' : Donc, un incident provoque-t-il une pollution ? '''Sucre d'orge''' : Un quoi ? '''Gérard''' : Un incident. '''Phildar''' : C'est-à-dire ? Tu peux expliquer ce que t'entends par incident ? Un accident de voiture, des trucs comme ça ? '''Gérard''' : Non, un incident. '''Braguette''' : Quel genre d'incident ? '''Gérard''' : Bon, même... un incendie... Ah, non ! Un incendie, oui. Pardon, pardon, pardon. Non, parce que... Non, c'est moi qui me suis trompé. C'est un incident provoque-t-il... '''Manu''' : Un incendie, Gérard. '''Gérard''' : Un incident, un incendie, pardon... Je vais y arriver. Un incendie provoque-t-il une pollution ? Donc, on va demander à... Sucre d'orge. '''Sucre d'orge' '' : Un incendie, accidelleement incendieux ? '''Géra''' : Non, mais un incend... Oh là, sucre d'orge, t'as un téléphone pourri ! Ah non, parce que là, j'ai un grésillement... C'est pas possibe. '''Manu''' : Ça vient pas d'eux, en fait. '''Sucre d'orge''' : En fait, je crois que c'est pas nous, c'est... C'est le standard de... C'est Phildar qui déconne, hein. '''Phildar''' : Non, c'est le standard de fun, on peut rien faire, Gégé. Parce qu'ils sont en train de refaire, derrière. Moi aussi, j'ai le même, hein. '''Manu''' : C'est pareil, partout. '''Phildar''' : Ou baisses un peu ton casque, alors. '''Sucre d'orge''' : Oui, ben, ça pollue, hein. T'as vu la fumée, quand il y a un incendie, dans le midi, là, avec les canadaires et tout, c'est de la folie. Ouais, ouais, ça pollue grave. '''Gérard''' : Ouais, mais... Non, mais attends. Je vois pas le rapport avec un incendie et... '''Sucre d'orge''' : Et un incident ? '''Gérard''' : Non, mais... Un incendie, plus les canadaires. Parce que qu'est-ce que le canadaire a à voir dans les incendies ? Le canadaire, il provoque pas une pollution. '''Sucre d'orge''' : Non, mais quand il y a un incendie, il y a un canadair. '''Briquet''' : Si, Gérard, le canadaire, il provoque la pollution, puisqu'il va chercher l'eau dans la mer et certains endroits, tu vois, la mer, elle est polluée. '''Sucre d'orge''' : Et quand le canadair, il s'ouvre, ça fait plein de fumée blanche sur le feu. '''Gérard''' : Non, mais ça, c'est... Ça, c'est l'eau. '''Sucre d'orge''' : Mais l'eau, elle peut être polluée. '''Manu''' : Gérard, le canadaire, là, il y a bien de l'essence dedans. Donc ça pollue, de toute façon. '''Gérard''' : Non, mais attends, Manu, je sais pas si t'as regardé le reportage sur les canadaires. Ils ont une trappe en dessous qu'ils prennent l'eau... '''Manu''' : Ouais, mais moi, justement, j'avais vu ce reportage, ils avaient pas de pastilles vertes sur le pare-brise, les canadaires. '''Gérard''' : Non, mais on s'en fout de la pastille verte.<ref name="hist4"></ref> '''Phildar''' : Non, mais Gérard, oui, ils prennent de l'eau pour éteindre le feu, mais pour décoller, pour voler, ils prennent bien de l'essence, ils volent pas à l'eau. '''Gérard''' : Non, non, non, non, là, je suis pas d'accord avec vous. Donc on va demander la Braguette. Par contre, t'essaies de voir avec sucre d'orge si elle peut pas changer de poste, parce que là... '''Manu''' : Essaie de changer de poste, va à la Caisse d'Épargne. '''Phildar''' : Non, non, non, t'es ailier droit, c'est ça ? Non, pilier. '''Sucre d'orge''' : Je passe en avant ? '''Gérard''' : Braguette ! ''[il réitère plusieurs fois mais Braguette ne répond pas, les échanges humoristiques sur le rugby se prolongeant]''. '''Phildar''' : Ouvre-la un peu. '''Braguette''' : Moi, je dis que, bah si, ça pollue, mais bon, c'est bien, quoi, parce qu'après, les forêts repoussent et c'est de la bonne pollution, quoi. '''Phildar''' : Non, mais tu parles. '''Gérard''' : Tu crois... Attends, attends, Braguette. Braguette. Tu crois que... Même en éteignant un incendie... Tu crois qu'après, ça va repousser ? '''Braguette''' : Bah, exactement, ça repousse. '''Gérard''' : Ah, oui ? Alors, ça met combien de temps pour repousser ? '''Braguette''' : Ça met 10-20 ans, mais c'est de la bonne pollution qui va te donner une bonne forêt. '''Gérard''' : Ah, oui ? Quand tu vois 120 000 hectares qui partent en fumée... Que les gens sont derrière, qui ont des habitations, qui ont l'habitude de voir de la verdure, et que maintenant, ils voient que simplement de... Des arbres qui sont partis en feu, tout ça, et tu crois que... '''Braguette''' : Mais ça, c'est le coup du sort, Gérard, ça, c'est le coup du sort. C'est des pauvres gens, c'est grave pour eux. Mais bon, avoue quand même qu'une forêt incendiée, c'est vachement beau à regarder. '''Gérard''' : Non, non, non, non, non, non, non, non, Braguette, non, braguette... '''Phildar''' : Ferme-la un peu. '''Gérard''' : Moi, je vais te dire une chose. Même derrière, là... Moustache et briquet, vous vous calmez, parce que... Je réponds à Braguette, d'accord ? Donc, moi, je peux te dire une chose, Braguette. Moi, cet été... J'ai regardé les infos, et quand tu vois ce qu'on a vu cette année, qui sont partis en fumée, fais-moi confiance que c'est toute la ville qui va payer pour... pour remettre tout ça en état. Et quand tu vois... Quand tu vois des arbres... Quand tu vois des arbres qui partent en fumée... C'est pas possibe. ''[applaudissements du studio]''. '''Braguette''' : Tu trouves pas ça vachement beau, un arbre en feu ? '''Gérard''' : Non. Moi, je vais te dire une chose, que je préfère regarder des arbres qui fleurissent et tout. ''[Manu applaudit]''. '''Braguette''' : J'adore voir les arbres en feu. Ben, c'est chacun ses... '''Gérard''' : Ouais, ben, dans ces cas-là, toi, du côté... Ah, c'est dommage. Tiens, en fait, braguette. Ça... Ça a rapport le thème du débat. À Clermont-Ferrand, est-ce qu'il y a des volcans ? '''Braguette''' : Oui, oui, il y a des volcans à Clermont-Ferrand. '''Gérard''' : D'accord. OK, je te remercie. '''Braguette''' : Je t'en prie, Gérard. '''Gérard''' : Non, non, mais c'était simplement pour savoir. Donc, on va demander à Coquelicot de répondre. '''Coquelicot''' : Ben oui, moi, je crois que ça pollue, mais je crois qu'on peut pas faire grand-chose, parce que c'est des choses qui arrivent naturellement et on peut pas arrêter ça, quoi. '''Sucre d'orge''' : Contre. Moi, je suis contre, c'est Sucre d'orge. '''Gérard''' : Oh là là, mais qui c'est qui a un téléphone pourri, là ? '''Manu''' : Ça vient pas du standard, Gérard. '''Gérard''' : Oh là là, c'est mauvais d'entendre un... '''Phildar''' : C'est vrai que c'est chiant, mais on peut rien faire. '''Bounty''' : Oui, ben, moi, je suis d'accord avec les autres. Il y a pas mal de fumée. Il y a des fumées de cheminée, exactement, aussi. '''Phildar''' : Ça pollue, ça, au fait, Gérard, les feux de cheminée ou pas ? '''Gérard''' : Non. Non, mais attends, ça dépend s'ils sont bien allumés dans l'appartement. '''Briquet''' : Hé, Gérard ? Ça pollue les feux de bois ou pas ? Est-ce que ça pollue les feux dans les forêts ? '''Gérard''' : Mais attends, on vient de... Hé ! Oh, Briquet, Briquet, Briquet, Briquet ! Tu vas aller voir Manu au standard, s'il te plaît. Non, non, mais attends ! Attends, tu vas aller... Tu vas être gentil, tu vas aller voir Manu au standard, parce que je viens de... J'ai répondu à la question à Braguette. '''Phildar''' : Tu ne suis pas à Briquet, hein. '''Briquet''' : Mais si, mais j'ai pas compris, en fait. '''Gérard''' : Non, non, mais tu... Ouais, mais tu n'as pas compris, ben, tu vas aller voir Manu, il va te faire comprendre au standard.Reego ? '''Reego''' : Oui, sur IRC, il y a Lagafou qui te demande si péter ça pollue. '''Gérard''' : Ça dépend si les fenêtres sont toutes fermées, ça... Même dans un lit, ça ne peut polluer. Ça, je peux dire oui. Briquet, s'il te plaît ? '''Manu''' : Il n'a rien dit, Gérard, ce n'est pas lui. '''Gérard''' : Non, non. Mais Briquet, tu le reprends au standard, il va comprendre. '''Phildar''' : Tu expliques la troisième question et tu le remets après. '''Gérard''' : Non, non, mais... Là, on finit la troisième et je pose la quatrième. Bounty ? Ah ben, toi, t'as répondu. Tu m'as parlé de... Je ne sais plus quoi, là. Ouais, fumée de cheminée. Ok, t'as répondu. Donc, moustache ? '''Moustache''' : Ouais, ben, alors, moi, je voudrais répondre à Coquelicot. Parce que Coquelicot, elle a dit... En fait, on ne pouvait rien faire contre les incendies. Eh ben, elle dit n'importe quoi. Parce que les incendies, il n'y en a pas que des naturels. Il y en a aussi qui sont provoqués par des gens. '''Gérard''' : Attendez, attendez, attendez. Moustache et Coquelicot. Moustache et Coquelicot, s'il vous plaît. Vous écoutez ? Là, d'accord, je suis d'accord avec vous. Il y a des incendies qui sont... Je sais, il y a des incendies qui sont provoqués pendant l'été. Mais ça, on ne peut pas savoir qui c'est qui les provoque. Mais oui, mais de toute manière, quand vous prenez une nationale ou autre, vous voyez que c'est marqué interdit de fumer. Donc, je ne comprends pas pourquoi il y a des gens qui s'amusent à fumer ou qui laissent leur mégot. '''Braguette''' : C'est des pétomanes, ça. '''Gérard''' : Ben oui, mais dans ces cas-là, pourquoi ? Pourquoi que les gens savent que c'est interdit de fumer... Pourquoi qu'ils laissent leur mégot allumé ? '''Braguette''' : Parce que c'est des pétomanes, ils le font exprès. Ça les fait jouir de mettre le feu. '''Phildar''' : Donc, on peut dire que les pétomanes, c'est pour des pollueurs. '''Gérard''' : Ben voilà. Donc, Briquet, il a quand même... '''Manu''' : Oui, Briquet a tout pigé, a tout compris. '''Briquet''' : Je me suis calmé, j'ai compris. C'est bon. '''Gérard''' : Alors, pour toi ? '''Briquet''' : En fait, vu que j'étais au standard avec Manu, je n'ai pas très bien compris ta question. '''Manu''', ''[coupant Gérard dans son mouvement d'impatience]'' : Mais c'est normal, je lui ai expliqué, Gérard. '''Briquet''' : Il m'expliquait de me calmer, tout ça, donc je n'ai pas pu entendre et mettre en feu. '''Gérard''' : Donc, un incendie provoque-t-il une pollution ? '''Briquet''' : Ben moi, je pense... '''Gérard''' : Non, mais vite, vite. '''Briquet''' : C'est bon, laisse-moi le temps de répondre. Je pense que oui. '''Phildar''' : C'est une bonne réponse. '''Gérard''' : Ouais, ben... '''Phildar''' : Quoi ? Et toi, Gérard, qu'est-ce que tu penses de ça ? '''Gérard''' : Moi, personnellement, je vais te dire une chose. Ce que je pense, c'est déjà qu'on devrait respecter tout ce qui nous est interdit quand on part en vacances. Et même à l'heure actuelle, c'est ce qu'on devrait respecter, les endroits qu'on n'a pas le droit de fumer. Moi, celui qui renifle comme un veau va se calmer. '''Phildar''' : Il doit prendre ses comprimés parce qu'il est malade. '''Gérard''' : S'il est malade, il va redégager au standard. Ça va aller vite pour moi. '''Phildar''' : Et donc ? '''Gérard''' : Dans ces cas-là, il faut mieux respecter la vie des gens. Il faut respecter la nature. Parce qu'en fin de compte, la nature, qui c'est qui la paye ? C'est nous. Qui c'est qui paye ? '''Phildar''' : C'est cher, en plus. '''Gérard''' : Oui, mais qui c'est qui paye derrière ? '''Phildar''' : C'est le contribuab. '''Gérard''' : Oui, mais on paye... On paye sur les impôts. On paye là-dessus pour redonner goût à la vie. On paye des impôts. On paye des impôts, donc c'est nous qui payons, en fin de compte. C'est pas parce qu'on achète une voiture. Si, par exemple, une voiture prend feu dans une forêt, la forêt va... Va prendre feu. Et en fin de compte, qui c'est qui est responsable ? C'est nous. Parce qu'après, il faut reconstruire tout ça. ''[applaudissements du studio]''. '''PHildar''' : Il faut reconstruire la voiture. '''Gérard''' : Donc, alors, la quatrième... '''Phildar''' : Et on va mettre un petit disque. '''Gérard''' : Et donc, alors, je pose la question. La télé est-elle un moyen de pollution ? et on va s'écouter Baba au Rome avec des petits... Des petits... '''Phildar''' : Petits loups de nez. Tu peux rappeler les numéros, Gérard, aussi. '''Gérard''' : 0803 08 5000 et 080070 5000 et toujours le 3615 code Fun radio et l'IRC... Reego s'il te plaît ? '''Reego''' : Oui je suis là, irc.funradio.fr. '''Phildar''' : Et il y a 25 connectés sur le Minitel quand même. '''Gérard''' : Oui mais s'il y a des réponses aux questions, je voudrais bien que tu me les donnes, Reego, comme la semaine dernière. Merci. ''[Musique]''. '''Gérard''' : Et voilà, vous nenez d'écouter Baba au rhum avec des petites... '''Phildar''' : Des petits loups de nez, voilà. '''Gérard''' : Donc vous pouvez toujours nous appeler au 0803 08 5000 et 0800 70 5000 et 3615 code Funradio, rubrique direct. Et bien sûr, l'Internet, où que Reego vous attend, vous pouvez réagir sur le débat, il n'y a pas de problème. Je vous répondrai en direct. Voilà. Donc, alors, quatrième question. La télé est-elle un moyen de pollution ? Donc, on va raccueillir sucre d'orge. Braguette. Coquelicot. Christian de la Celle-Saint-Cloud. Moustache. Briquet. Et... '''Phildar''' : Et donc, on commence avec qui, Gérard ? '''Gérard''' : Et on va commencer avec... On va commencer avec Sucre d'orge. '''Sucre d'orge''' : Oui. Eh bien, oui, t'as raison, Gégé. La télé, c'est un moyen de pollution énorme de l'esprit. Surtout, certaines chaînes. Les premières, là, tu vois. Et si tu les regardes... '''Gérard''' : Non, mais sans... Non, non, mais attends, attends. '''Sucre d'orge''' : Je ne dis pas de nom de chaîne. Je dis simplement celles qui commencent les numéros, là. Eh bien, si tu les regardes trop souvent, tu finis par devenir comme elles, quoi. '''Phildar''' : C'est pas mal, ce qu'elle dit. T'as compris, Gégé ? '''Gérard''' : Non. Braguette ? '''Braguette''' : Oui. Non, mais ce n'est pas un moyen de pollution, c'est un moyen de communication. On te communique des informations sur la pollution. '''Sucre d'orge''' : Elle parle avec sa télé, elle ? '''Gérard''' : Non, mais je pense qu'elle doit parler avec... Avec un gorille, elle, derrière. Donc, ça y est ? Ah, ben, c'est bien, Braguette. Coquelicot ? '''Coquelicot''' : Oui, moi, je crois que c'est un moyen de pollution. Mais enfin, ça dépend pour qui. Parce que, moi, je dis... Je ne sais pas, il y a des trucs qui sont intéressants quand même. Il ne faut pas tout rejeter dans la télé. '''Phildar''' : Est-ce que tu crois, Gérard, que la radio, c'est quelque chose qui pollue plus que la télé, Gérard ? '''Briquet''' : Oui, quand on écoute Gérard, oui. '''Phildar''', ''[alors que Gérard a la tête tournée vers la porte du studio, le regard ailleurs]'' : Gérard, on est là. Est-ce que tu crois que la radio, ça pollue plus que la télé ? C'est ce qu'on demande sur Minitel. '''Gérard''' : Non, je ne pense pas. Non, je pense que le Minitel, de toute manière, c'est... C'est un truc pour les gamins. S'ils ont envie de dépenser leur pognon là-dedans, ils font ce qu'ils veulent. '''Phildar''' : Ce n'est pas ça, la question. La question, c'est est-ce que la radio, ça pollue plus que la télé ? '''Gérard''' : Moi, c'est ma réponse. ''[applaudissements sarcastiques devant cette citation politique]''. Christian ? '''Bounty''' : Oui, moi, j'adore beaucoup le débat à la télé. Il y a pas mal de débats que j'écoute en deuxième et en première. '''Gérard''' : D'accord. Non, mais je ne vois pas le rapport avec la question, Christian. '''Phildar''' : C'est sa réponse. C'est un peu comme toi. '''Moustache''' : Ouais, ben, moi, je veux dire que la télé, c'est... Bon, en ce moment, il n'y a un peu que de la merde, quoi. S'il y avait des émissions un petit peu plus intellectuelles, tu vois, ça serait mieux. Voilà, c'est tout ce que j'ai à dire. '''Gérard''' : Non, mais attends, je ne vois pas... Ah, là... Là, Moustache ? Je pense que tu n'as pas très bien compris la question, mais ce n'est pas grave. '''Moustache''' : Si, si, j'ai bien compris. '''Gérard''' : Non, non, mais... '''Gérard''' : Non, non, je pense, à mon avis, que tu n'as pas compris la question. '''Moustache''' : Répète-la, moi, alors. '''Gérard''' : Non je la rémèterai pas. Briquet ? '''Briquet''' : Oui, alors, moi, avant de répondre à la question, je voudrais quand même te demander ton avis. Oui ou non, est-ce que ça pollue ? Toi, je voudrais que tu me répondes avant. '''Gérard''' : Non, mais moi, maintenant, tu vas répondre à la question, parce que ce n'est pas toi qui me poses les questions, c'est moi qui vous les pose. '''Briquet''' : J'aurais répondu par rapport à ta réponse, en fait. '''Gérard''' : Non, non, mais moi, maintenant, tu vas me répondre à la question. '''Phildar''' : Ben, aide-le. Aide-le un peu. Donne-lui ta réponse, déjà, comme ça, ça... '''Gérard''' : Non, non, mais attends, il va déjà répondre correctement. Après, je lui dirai. '''Phildar''' : Il ne peut pas. '''Briquet''' : Ouais, je ne peux pas si tu ne me donnes pas ta réponse avant. '''Gérard''' : Non, ben, alors, dans ces cas-là, n'attends pas ma réponse. Sur Internet ? '''Reego''' : Ouais, donc, sur l'IRC, il y a Fedji qui te demande si c'est la télé qui pollue ou si c'est les animateurs télé. '''Gérard''' : Là-dessus, il faut dire une chose, c'est qu'en ce moment, vu ce qu'on voit à la télé, je pense qu'on a du mal à savoir ce qu'on va regarder comme chaîne. '''Briquet''' : Ben ouais, mais alors, dans ce cas-là, toi aussi, tu pollues, puisque tu passes sur Fun TV. '''Gérard''' : Alors là, je vais te dire une chose, Briquet... Tu vois, tu vois, Briquet... C'est con, ce que tu viens de dire. Parce que là, maintenant, tu dégages. Je ne veux plus te revoir. Salut à toi, Briquet. Salut à toi, Briquet ! '''Sucre d'orge''' : Gérard ? En plus, il a pas tort parce que ça pollue moins quand ça passe par satellite que quand ça passe par courant à la télé. '''Moustache''' : Qu'est-ce qu'elle dit... '''Gérard''' : Qui c'est qui vient de dire ça ? Ouais, ben, Sucre d'orge. Fais gaffe parce que tu risques de faire comme Briquet si tu continues. '''Phildar''' : Non, mais c'est vrai. Non, Gérard, attends. '''Gérard''' : Ouais, non, mais il faut dire une chose. Il faut se dire une chose qu'à l'heure actuelle, pour voir des émissions de cons, des émissions qu'on ne sait même pas ce que ça veut dire... '''Phildar''' : Donne des exemples. Donne des exemples pour toi d'émissions polluantes. '''Gérard''' : Moi, je peux te dire une chose. Des émissions polluantes, tu sais ce que c'est ? C'est l'après-midi, hein, même le matin, sur les coups de 9h, c'est pas pour critiquer Françoise... '''Phildar''' : C'est pas des émissions, c'est des séries, ça, nuance. '''Gérard''' : Ouais, mais même, quand tu vois Amour, Gloire et Beauté, ça n'a ni queue ni tête parce que ça n'a rien à voir. '''Braguette''' : T'as qu'à zapper. '''Gérard''' : Ouais, mais Les feux de l'Amour, c'est pareil, ils ont signé pour 10 ans. de toute manière, tu peux rien voir... tu comprends même pas ce que ça veut dire. '''Phildar''' : Et ça, c'est polluant. '''Gérard''' : Victoria et Cool. Cool, je pense que c'est ça. '''Phildar''' : Ouais, mais c'est de la merde, mais tu regardes. Alors faudrait savoir. '''Gérard''' : Non, non, moi, je regarde pas ça. '''Phildar''' : Attends, t'es en train de nous dire les prénoms et tout, là. Victoria sort avec machin, bidule. Non, mais on s'en fout, on s'en fout. Donc, c'est polluant pour toi. '''Gérard''' : Pourquoi on s'en fout ? Elle peut réagir, quand même. '''Phildar''' : Non, mais on s'en fout de la série, c'est ce que je veux te dire. '''Gérard''' : Ouais, bah, peut-être. Moi, je vais te dire une chose. Je préfère regarder des reportages, comme j'ai vu hier... Malheureusement, je me suis endormi dessus. Je préfère regarder des reportages sur les routiers que de voir des émissions, des feuilletons qui durent, quoi, ils commencent à 14h05 et à 14h45, c'est terminé. '''Phildar''' : Ouais, mais je vais te dire un truc, les routiers polluent, quand même. '''Gérard''' : Ouais, mais attends, les routiers polluent, peut-être, mais on est bien contents de les avoir pour se nourrir et pour nous ravitailler. Pour ravitailler les magasins et les stations-service. Parce qu'on est bien contents... On est bien contents de les avoir, grâce à eux. Qui c'est qui bouffe ? C'est quand même grâce à eux, si on bouffe. '''Phildar''' : Ouais, mais ils polluent, quand même. '''Gérard''' : Ouais, mais ils polluent... Mais grâce à qui t'as de l'essence dans ta voiture ? Grâce à eux. '''Manu''' : Aux garagistes. '''Gérard''' : Ouais, mais les garagistes, ils font appel à qui ? Au transport routier ! ''[triomphant]'' Eh, oui, Manu. '''Manu''' : Bah non, c'est le train. '''Gérard''' : Bah non, le train... Mais attends, le train, avec le train, tu vas... '''Phildar''' : Tu vas pas loin. '''Gérard''' : ...Je sais pas où. Surtout en ce moment, avec ce qu'il se passe. '''Phildar''' : Allez, on revient sur le débat. '''Manu''' : Sinon, excusez-moi, on accueille Greenpeace, 26 ans de Colmar, où on peut écouter Fun sur 92.2 FM. Bonjour, Greenpeace. '''Phildar''' : À la place de Bricquet. '''Gérard''' : Donc, sixième question. Peut-on faire l'amour en polluant ? '''Greenpeace''' : Gérard, si Greenpeace, je peux répondre ? Alors, en fait, moi, je trouve qu'on peut effectivement faire l'amour en polluant. Si, par exemple, on fait de l'amour sur une péniche, et qu'après, en faisant l'amour, on voit une canette, je dirais pas la marque, et on la balance dans la Seine. '''Gérard''' : Non, mais attends. Là, je vais te dire une chose, Greenpeace... T'e Non, mais... Là, tu reviens tout à fait à la première question. Ouais, ouais. Ah, Tony ? Ouais, ouais. '''Phildar''' : Non, mais on peut faire l'amour quand même sur une péniche. Puisque... On peut faire l'amour partout. Donc, à ton avis, est-ce qu'il a raison ? S'il n'a pas raison, t'expliques. '''Gérard''' : Non, mais moi, je vais te dire une chose. C'est pas parce que tu vas faire l'amour et que tu rebalances des canettes dans la Seine. OK ? '''Greenpeace''' : Bah, tu peux si t'es assoiffé en train de faire l'amour. '''Phildar''' : Est-ce que t'as soif, toi, quand tu fais l'amour ? '''Gérard''' : Non, moi, je fume une cigarette. '''Phildar''' : Bah, tu pollues, alors. '''Gérard''' : Ah, non, mais moi, je fume une cigarette chez moi. Nuance. '''Phildar''' : Ouais, mais tu pollues quand même. '''Gérard''' : Ah, non, mais moi, quand je fume une cigarette, j'ai la fenêtre ouverte. '''Sucre d'orge''' : Ah, bah, ouais, donc tu pollues, hein. '''Gérard''' : Un homme, non, mais je pollue quoi ? Je pollue personne. '''Sucre d'orge''' : Tu pollues l'atmosphère. '''Gérard''' : Bah, je pollue l'atmosphère... Mais dans ces cas-là, les pots d'échappement des voitures, ils polluent quoi ? '''Phildar''' : Non, mais attends, pendant l'amour aussi, Gérard, il t'arrive d'avoir des pollutions nocturnes. On est d'accord. '''Gérard''' : Ah, mais ça, il y a une personne qui pourra répondre si elle veut bien venir à côté de Manu pour répondre à la question, mais elle veut pas. '''Phildar''' : Ah, mais c'est pas grave, on continue le débat, on va pas s'arrêter pour ça. '''Moustache''' :Non, mais si tu veux, j'ai perdu une fil, donc... Je vais sauter cette question. Voilà, je vais écouter, comme ça, au moins, tu vois... '''Gérard''' : Bon, bah, alors, Moustache, bonne nuit. Allez, hop. Au revoir. C'est pas la peine de le reprendre sur un autre nom, hein. Christian, de la Celle Saint-Cloud. '''Bounty''' : Moi, j'aime bien faire l'amour, n'importe où. Même dans le foin. '''Gérard''' : Ouais, mais... Peut-on faire l'amour en polluant ? '''Bounty''' : Non, je crois pas. '''Phildar''' : Pourquoi ? '''Gérard''' : Non, mais pourquoi... Tu vois... Non, non, mais... On avait bien précisé. Il n'y a pas de pourquoi ni des comment. Donc, maintenant, tu le laisses répondre si... '''Phildar''' : Alors, why ? '''Bounty''' : C'est très difficile. '''Gérard''' : Ouais, mais... Alors... Comment... Pourquoi... '''Phildar''' : Ah, non, pas de pourquoi, Gérard. '''Gérard''' : Ouais, mais... '''Phildar''' : Ah, ouais, bah, ouais, t'es bien emmerdé, là. '''Gérard''' : Dans quel sens... '''Phildar''' : Non, non, pas dans quel sens, non plus. '''Gérard''' : Non, non, parce que là, c'était des conneries, ici. Alors, moi, je fais ce que je veux. '''Phildar''' : Ah, d'accord, toi, t'as le droit, OK. '''Gérard''' : Donc, Christian, donc... Dans quel sens ? Peut-on faire l'amour en polluant ? Donc pour toi... '''Bounty''' : Dans le foin. '''Gérard''' : Ouais, dans le foin... Ouais, mais je vois pas... Je vois pas du tout le rapport. Parce que, dans ce cas-là, tu cherches une aiguille dans une botte de foin. ''[PHildar applaudit, les auditeurs ovationnent]''. Dans ce cas-là, Christian... Moi, je vais te dire une chose. Donc, je vais répondre à la question. Donc, si, admettons, t'arrives pas à trouver la foufoune de la personne, donc, t'es obligé de la chercher dans une botte de foin. '''Bounty''' : Exactement. '''Gérard''' : Alors, on va demander à Coquelicot. '''Coquelicot''' : Non, moi, je crois pas que ça pollue. Franchement, non. '''Gérard''' : Ouais, mais est-ce que t'as déjà essayé, toi ? '''Coquelicot''' : Non, franchement, non. '''Gérard''' : Non, mais attends, 19 ans, je pense que... C'est vrai, à Troyes, ils font pas beaucoup l'amour, hein. ''[rire bruyant, rocailleux, moqueur, envers Phildar, originaire de cette ville]''. '''Phildar''' : Qu'est-ce que t'en sais, t'y habitais ? '''Gérard''' : Hein, Phildar ? Braguette ? '''Braguette''' : Oui ? Bah, moi, je suis d'accord avec Coquelicot. Je dis que ça pollue pas. '''Gérard''' : Ouais, bah, toi non plus, t'as pas essayé, là-bas. '''Braguette''' : Ah, si, si, moi, j'ai essayé... J'ai essayé dans les volcans, j'ai essayé dans les petites rivières autour des volcans et j'ai pas pollué. '''Gérard''' : Ouais, non, mais, de toute manière, les volcans, j'ai annulé... Normalement, c'était le thème du deuxième débat, mais je l'ai annulé parce que... C'était... C'était pas évident. Non, et puis même... '''Braguette''' : Harroun Tazieff était pas libre. '''Phildar''' : T'as trop de problèmes, en ce moment, avec les volcans, la grève et tout, c'est chiant. '''Gérard''' : Non, non, non, mais même, les volcans, c'était pas... Ils en parlent pas assez à la télé, tout ça. Moi, je sais, je sais très bien que j'ai été sur Clermont, il y a 3-4 ans, j'ai été me balader. Je sais que c'est là-bas qu'on voit... Il y a un coin qui est... Qui est volcanique. En Auvergne, je sais que c'est le truc des volcans. Donc... '''Braguette''' : T'as été à Vulcania, non ? '''Gérard''' : Ben, j'y ai été, oui, mais c'est pas évident parce que quand tu y vas à pied, faut quand même monter la côte. Parce que tu peux pas y monter en voiture. '''Greenpeace''' : Gérard, je voulais te poser une question, c'est Greenpeace. Est-ce que t'as vu ce qui s'est passé à San Francisco, Volcano ? Il y a un volcan qui est sorti de San Francisco. '''Gérard''' : Non, non, mais attends, pour l'instant, on est dans la pollution, d'accord ? Sucre d'orge. '''Sucre d'orge''' : Oui. Ben, alors, moi, je trouve que l'amour, c'est trop beau, quoi. Ça pollue en aucun cas. '''Gérard''' : Bon, ben, c'est tout ce que t'as à dire ? Non, mais je pense que, là, ce soir, on dirait que vous êtes pas réveillés, là. '''Greenpeace''' : Mais si, Gérard. '''Phildar''' : Non, ils sont calmes, nuance. '''Greenpeace''' : Si tu veux, on peut s'exciter hein. '''Sucre d'orge''' : Il y a un autre sucre d'orge là. '''Gérard''' : Quoi, un autre sucre d'orge ? '''Sucre d'orge''' : Ouais, il y a plusieurs sucres d'orge dans cette maison. On est trois sucres d'orge. '''Greenpeace''' : Je vais te le foutre, mon sucre d'orge, moi, tu vas voir. '''Phildar''' : Ben, réponds, alors, vas-y. '''Sucre d'orge''' : Eh ben, moi, je me dis que ça pollue pas et que Gégé, je sais pas pourquoi il pose la question. T'as pollué en faisant l'amour, Gégé ? '''Gérard''' : Ah, ben, ça, je vais te dire une chose, Sucre d'orge, tu vas te calmer, déjà. '''Sucre d'orge''' : Mais non, mais je sais pas, j'ai pas compris ta question. '''Phildar''' : Ouais, voilà pourquoi, toi, Gérard, t'as écrit cette question ? Pourquoi ? Toi, tu penses que l'amour, ça pollue ou pas ? '''Gérard''' : Non, peut-on faire l'amour en polluant ? Bon, de toute manière, tu peux faire très bien l'amour comme Moustache disait, ou Greenpeace, ou Coquelicot, ou Bounty, je sais plus. Enfin, bref, on s'en passe. Mais je pense que faire l'amour, tu peux faire l'amour où que tu veux. '''Phildar''' : Mais ça pollue pas. '''Gérard''' : Ben oui, mais voilà, d'accord. Mais je crois pas pourquoi, tout de suite, y'en a qui s'attachent sur des trucs qu'on vient à voir sur ce thème du débat. '''Phildar''' : Mais pourquoi t'as pensé à cette question, toi ? '''Gérard''' : Ben, pourquoi ? Parce que c'était une question qui me venait à la tête. Je voulais savoir. C'est tout. '''Phildar''' : D'accord. Comme ça, t'as la réponse. T'es content ? '''Gérard''' : J'ai la réponse... De toute manière, y'a personne qui est capable de répondre. Alors, un orage provoque-t-il une pollution atmosphérique ? '''Bounty''' : Un tonnerre. Un très fort tonnerre. '''Gérard''' : Non, mais, un orage provoque-t-il une pollution atmosphérique ? '''Christian''' : De gros dégâts. De gros... De gros... De gros... Accidents. Des gros... Qui provoquent pas mal de dégâts. '''Gérard''' : D'accord. D'accord. Ouais, je vois ce que tu veux me dire. Sucre d'orge ? '''Sucre d'orge''' : Moi, je dis que ça nettoie, un orage. Après, tout est beaucoup plus propre. '''Gérard''' : Non, mais un orage... Un orage provoque-t-il une pollution atmosphérique ? Moi, je peux vous dire une chose que... '''Sucre d'orge''' : Non, ça assainit. '''Gérard''' : Non, non, mais... Non, mais attends, Sucre d'orge, je vais répondre à ta question, s'il te plaît. C'est que... Vu le cyclone Georges et tout ça... Ouais, mais ça, je vais vous dire une chose. suPhildar''' : Et la couche d'ozone, ça a rapport ou pas ? '''Gérard''' : Bah oui. Moi, je vais te dire une chose. Dans ces cas-là, on parle d'un orage. Tu viens de dire ? '''Phildar''' : La couche d'eau jaune. '''Gérard''' : La couche d'ozone. Donc, tu prends... le truc... météorologique. La couche d'ozone, avec les gaz d'échappement... '''Phildar''' : Vous allez apprendre quelque chose ce soir, écoutez. '''Gérard''' : Avec les gaz d'échappement, tu peux avoir plus de pollution. Donc, cet été, on a atteint le barème... voire 4, 5 à un moment donné sur Paris. '''Bounty''' : Même 6. '''Gérard''' : Non, non, non, non, Christian. Non, non, on n'a pas dépassé le barème 5. '''Phildar''' : Le 5,9, je crois. '''Gérard''' : Non, on est resté à 5. Mais il faut dire une chose, c'est que là-dessus, quand on dit « ouais, les pastilles vertes », donc, les pastilles vertes, je vois pas ce qu'elles ont à faire là-dedans, parce que, de toute manière, les gens prendront toujours leur voiture pour se déplacer, pour aller au boulot. '''Manu''' : Ouais, mais ils ont pas besoin de bouffer de pastilles Valda pour ça. '''Gérard''' : Mais non, mais la pastille verte, c'est... Arrête tes conneries, toi. Occupe-toi de ton standard et réponds pas aux questions. '''Manu''' : Je peux accueillir un nouvel auditeur, par contre ? Donc, on accueille Kelnumero, 20 ans, de Toulouse, sur 105.9. '''Kelnumero''' : Bonsoir, Paris, et bonsoir, le bar où je travavaille, c'est-à-dire le Maxi Eiffel Fire. '''Gérard''' : Salut à toi, Kelnumero ! '''Phildar''' : Non, c'est une petite pub. '''Gérard''' : Non, mais les pubs, on les fait pas. '''Phildar''' : C'est la nuit sans pub, OK ? '''Max''' : Et Manu, tu prends sur les 24 lignes, ok ? Parce que je suis venu lui donner un coup de main, il y a 24 lignes. '''Gérard''' : Ouais, alors, t'accouches. ''[Manu pousse des cris et des respirations rapides, comme ceux d'une emme qui accouche]''. Je senq due tout à l'heure, il y en a un qui va se prendre une pêche. Donc alors, un orage provoque-t-il une pollution atmosphérique ? '''Kelnumero''' : Moi, je ne sais pas, je ne pense pas, mon cher Gérard, je ne crois pas. '''Gérard''' : Ouais, mais... Réponds quand même à la question. Non, mais attends, Kelnumero, pourquoi tu appelles ? '''Kelnumero''' : Ben non, mais pour participer au débat, Gérard. '''Gérard''' : Non, mais je te pose la question. Si tu ne veux pas répondre, si tu n'as pas la réponse, c'est pas la peine d'appeler. '''Phildar''' : Ah si, quand même, attends. C'est pas parce qu'il n'a pas une réponse à une question qu'il n'est pas obligé de participer à tout le débat. '''Gérard''' : Mais là, pour l'instant, il n'est même pas capable de dire... '''Phildar''' : Non, c'est pas grave, il répondra la prochaine. '''Kelnumero''' : Avec les éclairs et tout, oui, oui, tout à fait, je pense, oui. '''Phildar''' : Pour sortir un peu du débat, excuse-moi, il y a Steph sur le Minite qui demande si les pète-fouf polluent l'environnement. '''Gérard''' : Bon, ben ça, c'était quand on faisait l'amour. Je ne vois pas du tout... Le rapport. '''Phildar''' : C'est une sorte d'orage. C'est une sorte d'orage. Non, ça ne pollue pas, alors. '''Gérard''' : Christian. Christian, pour toi ? '''Bounty''' : Ben, moi, je suis tout à fait d'accord avec toi. '''Greenpeace''' : Christian, je t'ai reconnu. Pourquoi, Tony, tu prends cette voix de mongole ? '''Gérard''' : Bon, eh, vous commencez à vous calmer, là. Hein Kelnumero ! '''Kelnumero''' : C'est l'autre, là, Moustache, là. '''Greenpeace''' : Ouais, Moustache, Gérard, tu devrais le virer parce qu'il fout la merde depuis... '''Gérard''' : Non, mais c'est bizarre, Manu, je t'avais dit... '''Manu''' : Mais Moustache est parti, donc... '''Gérard''' : Non, mais pourquoi qu'on le récupère ? '''Manu''' : Mais il n'est pas là ! Oui, ben, moi, je dis que ça... Je pense pas que ça pollue, non. '''Gérard''' : Ouais, mais... Ben... T'as pourtant bien vu des orages ? '''Sucre d'orge''' : Des fois, il y a des orages de pluie acide. Des fois, ça pollue tout sur le son passage. '''Braguette''' : Moi, je dis que c'est le contraire, en fait. C'est la pollution atmosphérique qui provoque les orages. Mais c'est bon, en fait. Un bon orage, une bonne pollution d'orage, c'est bien. Ça assainit, elle a raison. Et puis, l'électricité statique, ça fait peur aux enfants, c'est... '''Gérard''' : Non, non. Moi, je peux vous dire une chose, que l'orage, pour moi, personnellement, vu ce qu'on en... Reego, vas-y, avant que je termine. '''Reego''' : Ouais, c'est juste Choune sur l'IRC qui te demande ce que veut dire atmosphérique, parce qu'il sait pas du tout. '''Gérard''' : Ben, atmosphérique, c'est... Atmosphère. '''Greenpeace''' : Et c'est quoi l'atmosphère ? '''Gérard''' : L'atmosphère, c'est les nuages et c'est tout ça. Quand vous voyez des gros nuages noirs, là, vous pouvez être sûr d'avoir un gros orage. Quand vous voyez des éclairs, c'est pareil. '''Greenpeace''' : Gérard, c'est Greenpeace, moi, j'ai pas répondu. Moi, je pense que les orages, ça pollue carrément pas, puisque, en fait, quand il y a de la pollution, c'est qu'il y a de la chaleur. Donc, les orages, il fait froid, généralement, et voilà, ça pollue pas. '''Gérard''' : Non, non, non, non, non, non, non. '''Phildar''' : Pourquoi, Gérard ? '''Gérard''' : Non, non, je vais dire une chose. En été, quand on n'a pas de flotte, on se plaint parce qu'on a trop chaud. Et quand il pleut, c'est pareil, on se plaint parce qu'on a trop froid. '''Greenpeace''' : Oui, mais Gérard, moi, ce que t'as pas compris, c'est que, tu vois, quand... '''Gérard''' : Non, mais attends, dis carrément que je suis un con, que je comprends pas. '''Greenpeace''' : Moi, je le... Enfin, non, mais bon. '''Gérard''' : Non, tu le penses... Tu veux pas le dire, mais tu le penses. '''Greenpeace''' : Exactement. '''Gérard''' : Bon, alors, Greenpeace, bonne nuit. C'est bon. Non, non, Greenpeace et Moustache, bonne nuit à vous deux. Allez, hop, terminé. On va terminer... Il nous reste deux questions. On va terminer avec Sucre d'orge, Bragate, Coquelicot, Bounty et Kelnumero. Voilà. Alors, le parfum est-il un moyen de pollution ? On va demander à Kelnumero. '''Kelnumero''' : Oui, alors, moi, j'estime que oui, parce que je vois des grosses bonnes femmes, des fois, qui se foutent de la cocotte et tout. Et, tu sais, quand t'es dans un endroit, dans un magasin et tout, et que t'es à côté d'elles, elles s'en foutent plein, plein, plein. C'est une horreur. C'est une pollution du nez, quoi, oui. '''Gérard''' : Ouais, mais ça... Ça, je vais te dire, Kelnumero, moi, je peux te confirmer, c'est que... Je pense que Coquelicot, Bounty, Braguette et Sucre d'orge, je pense que vous allez tous être d'accord avec moi. Donc, je pense que je vais vous dire une chose là-dessus sur le parfum. C'est que dès que, par exemple, une personne va avec sa copine pour y acheter du parfum... Donc, déjà... Rien que si elle en met le peu sur la paume de sa main, déjà, tu vas le sentir pendant un bout de temps. '''Braguette''' : Mais ça dépend quel parfum, en fait. '''Gérard''' : Oui, mais même que ça soit du parfum pour femme ou pour homme... '''Braguette''' : Non, non, mais c'est même pas ça. C'est qu'en fait, il y a des bons parfums et il y a des mauvais parfums. Les mauvais parfums, il y a des mauvaises choses dedans, et c'est les parfums qui puent, genre marque de sport. Tu vois ce que je veux dire ? '''Gérard''' : Non, non. Attends, attends, attends. Attends, attends, attends. Qui c'est qui vient de me parler de marque de sport, là ? '''Phildar''' : Est-ce que l'Adidas, ça pue ou pas ? '''Gérard''' :Attends, attends, attends. Justement, tu me coupes... '''Max''' : J'ai aussi un jeune, là, que j'ai à l'antenne, mais ils ont été au moins... On parle de la pollution des téléphones portables. Il voulait savoir si les portables, portab, téléphones polluent. Tout ce qui est électronique. C'est une question qui revient souvent. '''Gérard''' : Ça, sur l'électronique, ça m'étonnerait que ça pollue. Ça dépend des gens qui veulent... Ils veulent l'acheter. '''Manu''' : D'autre part, excusez-moi tout le monde, d'autre part, on accueille Prof Salade, qui est chercheur au CNRS à la place de Greenpeace. '''Gérard''' : Non, mais attends. Tu le dis au grand chef, parce que c'est lui qui l'a sélectionné. '''Max''' : C'est moi qui l'ai sélectionné. Je ne sais pas s'il est valab. '''Gérard''' : Oui, mais j'espère qu'ils n'ont pas changé de nom pour... '''Max''' : Non, non, non. C'est moi qui viens de le rappeler, là, à l'instant, sur son portable. Par contre, il est sur son portable. Normal, il est dans son laboratoire. '''Prof salade''' : Oui, allô ? Bonsoir, Gérard. Oui, je suis désolé de t'appeler d'un portable, mais voilà, je suis au moment... Oui, donc je vais te démontrer, comme deux et deux font trois... '''Gérard''' : Non, deux et deux font quatre chez moi, pas trois. '''Prof salade''' : C'est un incendie de forêt. Je suis désolé de revenir sur le début du débat... '''Gérard''' : Non, non, non, non, on en est à la huitième, on parle du parfum, on ne reprend pas les questions du départ. Parce que sinon, tu vas retourner voir le chef. '''Prof salade''' : D'accord. Donc, est-ce que tu as fait de la chimie dans ta vie ? Voilà. Donc, est-ce que tu sais que la combustion du carbone avec de l'oxygène donne de l'eau et du CO2 ? '''Gérard''' : Oui, mais attends, je vais te dire une chose, je me suis tapé de... Non, non, mais je me suis tapé des acides de carbone quand on était en Allemagne avec Sandy, chez Goodyear. '''Phildar''' : C'est bon ? C'est pas mauvais, ça, non ? '''Gérard''' : Oui, Reego ? '''Reego''' : Non, rien. '''Gérard''' : Non, je croyais que t'avais une question. Non, mais si t'avais... ...sur l'IRCE, moi, ça me dérange pas. '''Reego''' : Non, on me dit juste que tu fumes des acides de carbone, mais je vois pas le rapport. '''Gérard''' : Non, mais ça, moi non plus. '''Prof salade''' : Les acides de carbone, ça n'existe pas, Gérard. '''Gérard''' : Oui, ben, les acides de carbone, tu sais, ça sert à quoi ? À faire des pneus et des joints de voiture. '''Phildar''' : Je le savais pas, en plus, je l'ai dit comme ça au hasard. '''Sucre d'orge''' : Et Gérard, moi, je disais que les parfums, ben, ça pollue, parce que c'est fait pour cacher les mauvaises odeurs, et les mauvaises odeurs, c'est de la pollution. Alors, les sportifs qui puent, ils mettent du parfum, et c'est pour cacher la pollution, et tout ça, c'est pour cacher la pollution. T'es d'accord ? '''Gérard''' : Non, je suis pas d'accord avec toi. '''Sucre d'orge''' : Mais il y a des parfums, quand ils sont doux, c'est agréable, ça pollue pas. Mais il y a les parfums de chiotte, aussi, ça pollue, parce que ça proue la couche d'ozone. '''Bounty''' : Moi, je trouve que les parfums, ça sent très bon, même sur une femme. C'est très agréable. C'est très agréable à sentir, une femme qui a beaucoup de charme et du parfum. '''Gérard''' : Ouais, mais, alors, Christian, moi, je vais te poser la question, et ça, toi, tu vas répondre, tu vas te mettre à côté de Phildar. Quoi, non ? Non, non, pourquoi ? '''Phildar''' : Non, moi, je réponds pas, je croyais que je devais répondre, non, non. '''Gérard''' : Parce que moi, je vais te dire une chose, une nana qui s'en met trop, par un moment donné, ça fait mal à la tête avec le... '''Kelnumero''' : Pourquoi ? '''Gérard''' : Non, attends, il n'y a pas de pourquoi, toi, tu vas la fermer ! C'est pas à toi que je m'adresse ! Quand je t'appellerai pot de chambre, tu sortiras de sous le lit, toi ! Ok ? ''[applaudissements du studio]''. '''Kelnumero''' : D'accord, Gérard, je me soumets à ton courroux. '''Gérard''' : Alors, dans ces cas-là, t'as qu'à fumer la moquette et on verra ! ''Phildar ''' : Non, ça pollue, hein ! '''Gérard''' : Hein, ok ? Alors vas fumer la moquette ! '''Max''' : En même temps, je me permets, Max, c'est Max, si le mec, il dit, quand tu dis que quand une femme met trop de parfum, ça donne mal à la tête, quand il te demande pourquoi, c'est normal qu'il te pose pourquoi, parce qu'il est en train de savoir pourquoi. '''Gérard''' : Ouais, mais j'en connais une, elle s'en met du matin au soir, c'est pas parce que moi, je m'en mets beaucoup, mais je voudrais bien qu'elle réagisse, là. Allez, hop ! '''Max''' : Ça, c'est peut-être pour camoufler la transpi, non ? ''[Sandy va s'asseoir près du icro mais peu convaincue]'' '''Braguette''' : Par contre, il y a des mecs qui se mettent pas de parfum... '''Gérard''' : Non, non, attendez, s'il vous plaît, derrière, merci, il y a un morceau, là. '''Sandy''' : Disons que le... Oui, bonsoir, disons que le parfum, c'est bien, t'es obligé d'en mettre, si tu vas à un rendez-vous, t'es obligé de mettre du parfum. '''Gérard''' : Ah ouais, mais attends, attends, attends, tu vas à un rendez-vous, tu te mets... Attends, je te réponds à ta question, et là, je pense qu'on va se marrer sérieux. Tu crois que tu vas dans un bureau d'un directeur, par exemple, moi, je vais voir Axel. J'arrive, je suis avec ma bouteille, vas-y, hop ! ''[rires sarcastiques et forcés de tout le studio]''. '''Sandy''' : Non, mais moi, je prends pas ma bouteille sur moi, hein. '''Gérard''' : Non, mais attends, mais dans ces cas-là, c'est pareil. '''Sandy''' : Et ce soir, j'ai même pas amené ma bouteille de parfum, donc tu vois... '''Phildar''' : Elle est tombée dedans, OK ? '''Gérard''' : Ouais, elle est tombée, parce que t'es à côté, toi. Tu te calmes, hein, tu gardes tes mains... '''Phildar''' : Ah, t'inquiète. ''[le studio explose de rire]''. Je touche pas à ta cam'. '''Gérard''' : Ça, c'est ma propriété. Défense d'y toucher. '''Phildar''' : T'as un droit de bail, non ? '''Gérard''' : Ouais, j'ai un droit. Donc, dernière question, je pense, ça, c'est... Le chef, il va répondre. Ça, c'est lui qui l'a sélectionnée. Moi, je pense que ça va me retomber sur la gueule, mais c'est pas grave. Les boissons sont-elles... '''Kelnumero''' : Oui, oui. '''Gérard''' : Ah, oui, oui ? qui ? Alors, Kelnumero, vas-y ? '''Kelnumero''' : Bah oui. '''Gérard''' : Bah oui, mais t'as même pas entendu la fin de la question. '''Kelnumero''' : Est-ce que c'est une pollution pour toi ? Oui, certainement. '''Gérard''' : Ah, voilà. T'es content de ta réponse ? '''Kelnumero''' : Pour moi aussi, parce que moi, je bois beaucoup. Tu sais, ma mère est écossaise, donc... J'ai l'alcool dans le sang depuis que je suis petit donc... '''Braguette''' : Ton père est boulonais, non ? '''Prof salade''' : Euh, allô ? Est-ce que les chiottes de la Loco sont polluées ? '''Gérard''', ''[explose]'': Bon alors Kelnumero, au revoir ! '''Kelnumero''' : Non, non, c'est pas moi. '''Gérard''' : Bonne nuit ! Bonne nuit, bonne nuit, bonne nuit, bonne nuit ! '''Manu''' : C'est pas Kelnumero, c'est prof Salade. Ça y est. Voilà. '''Gérard''' : Attends ! Hé, Manu ! Je te préviens ! '''Max''' : Non, parce qu'il avait son portable. '''Gérard''' : Je te préviens ! J'avais prévenu. Ce soir, le premier débat, je veux pas le casser. '''Phildar''' : C'est nickel, là. '''Gérard''' : Là, t'es en train de me le niquer. '''Manu''' : C'est prof Salade, il est parti. '''Gérard''' : Alors maintenant, tu te démerdes. Je veux pas savoir. Euh... Bounki ? Bounky, pour toi ? '''Bounty''' : Oui, bah moi, quand je vais dans... Quelque part, je bois de l'alcool, mais très modérément. '''Coquelicot''' : Moi, je ne bois pas du tout. Donc, je peux pas répondre à cette question. '''Braguette''' : Ouais, alors moi, je bois pas du tout et je supporte pas les gros cons qui picolent, quoi. Pour moi, c'est... Parce que eux, ce sont des pollueurs, oui. '''Gérard''' : Alors, attends, euh... Je vais te dire une chose, Braguette. Quand tu vas dans une boîte de nuit, t'envoies des gros cons ? '''Braguette''' : J'en vois pleins, oui. '''Braguette''' : Et à Clermont-Ferrand, il y a des boîtes de nuit, quand même ? '''Braguette''' : Et puis, il y a aussi des gros cons qui picolent. '''Gérard''' : Alors, dans ces cas-là, pourquoi que tu vas dans les boîtes de nuit s'il y a des gros cons ? '''Braguette''' : Bah, attends. J'ai le droit de sortir, quand même. '''Sucre d'orge''' : T'as des bons DJs ? '''Gérard''' : Ouais, sucre d'orge, pour finir ? '''Sucre d'orge''' : Bah, moi, je bois beaucoup, mais que de l'eau. Alors, je peux répondre que boire, ça pollue pas quand tu bois de l'eau. '''Gérard''' : Ouais, c'est ça. '''Phildar''' : Ouais, c'est limite comme réponse. '''Gérard''' : Ça m'étonnerait. À mon avis, ça m'étonnerait. '''Sucre d'orge''' : Tu me crois pas ? Je bois un petit peu de champagne de temps en temps. '''Gérard''' : Ouais, un petit peu, quand même. '''Kelnumero''' : Est-ce que tu penses que, pour toi, ça en est une, Gérard ? Bah, une pollution. '''Gérard''' : Non, mais moi, je vais te dire une chose, que si je bois, c'est mon problème, c'est pas le vôtre, et ça vous regarde pas, les auditeurs. '''Phildar''' : C'était pas ça, la question, Gérard. C'était de savoir si c'est pour toi, de boire, c'est une pollution ou pas. '''Gérard''' : Ben, ça regarde... Simplement, ma femme, c'est tout. Voilà, c'est tout. Ça regarde personne d'autre. Donc, conclusion... '''Manu''' : Attends, Gérard, justement, pour la conclusion, on va accueillir Cactus, 22 ans, de Paris. '''Cactus''' : Bonsoir, Gérard. Ça va ? '''Gérard''' : J'ai pas regardé, ce matin. '''Cactus''' : T'aurais dû regarder, comme ça, t'aurais pu me répondre. '''Gérard''' : Ouais, ben, vas-y. '''Cactus''' : Non, mais tu vas bien, Gérard ? '''Gérard''' : Ben... Je sais pas, je te dis. '''Phildar''' : Il a pas regardé, ce matin. Alors, ta conclusion, Cactus ? '''Cactus''' : Alors, ma conclusion à tout ça... C'est que c'était un très long débat qui était très bien fait. Bien animé par Gérard. Et qui s'est vachement bien passé, pour une fois. Et puis, voilà. Voilà ma conclusion. '''Gérard''' : D'accord. Ben, comme t'as fait la dernière question, tu vas rester sur le deuxième. '''Phildar''' : Ah, la classe ! '''Gérard''' : On va demander à Sucre d'orge... '''Sucre d'orge''' : Oui ? Eh bien, je crois que t'as... Enfin, ouais, bien organisé le truc. T'as viré ceux qu'il fallait virer, t'as gardé ceix qu'il fallait garder. '''Gérard''' : Non, mais ça, je l'ai fait parce que j'avais... '''Phildar''' : Ça vient du cœur, ce qu'il a fait. '''Gérard''' : Non, non. Non, non. Ça, euh... Je le dois à quelqu'un, vu ce qu'il s'est passé mardi, donc... C'est tout. J'y avais promis que ce soir, le premier et le deuxième allaient bien se passer, donc... '''Phildar''', ''[riant]'' : On avait pas dit le deuxième. On avait dit seulement le premier. '''Gérard''', ''[souriant]'' : Attends, tu vois... Tu vois, c'est con, parce que toi, t'ouvres toute ta grande bouche. Mais manque de pot, tu vas te taper la réa ! Eh, les deux. Tu vas faire les deux. ''[Manu proeteste avec gestes à l'appui]''. '''Manu''' : Oh, non, putain. Oh, mince. Je vais démissionner, moi. '''Gérard''', ''[triomphant]'' : T'es baisé. T'es baisé, mon pote. Et toi aussi. Alors, Sucre d'orge. Conclusion. '''Sucre d'orge''' : Eh bien, je pense que même si on a dit beaucoup de bêtises et beaucoup de choses intéressantes, le fait... '''Gérard''' : Non, non, non, non. '''Phildar''' : On n'a pas dit une chose intéressante. Je tiens à le signaler. '''Manu''' : Par contre, on a dit de ces conneries... '''Sucre d'orge''' : Non, mais le simple fait d'avoir répété le mot pollution toute la soirée, c'est bien parce que ça rentre dans la tête des gens et puis ils vont en prendre conscience petit à petit. '''Braguette''' : Ouais, alors moi, sur le thème, en fait, sur la pollution, je trouve que c'est bien, la pollution, parce que ça fait réagir les gens, parce que maintenant, on privilégie l'électricité, on privilégie aussi le chauffage, tu vois, solaire. Et sinon, pour le débat en lui-même, quand t'es gentil avec les gens, les gens sont gentils avec toi. '''Coquelicot''' : Moi, c'est la première fois que je viens à un débat avec toi. Je trouve ça très sympa et je trouve que ça a apporté beaucoup de choses quand même, même s'il n'y a pas que des choses intéressantes, c'est vrai, mais je trouvais que c'était très sympa et j'espère que ça va faire réagir des gens. Christian de la Celle-Saint-Cloud. '''Bounty''' : Oui, moi, j'adore beaucoup ton débat et c'est pas mal de... Ça apporte beaucoup de choses et j'adore pas mal ton émission. '''Phildar''' : Qu'est-ce que ça t'a apporté, Christian, le débat de ce soir, toi ? '''Bounty''' : Beaucoup de choses. '''Phildar''' : C'est-à-dire ? '''Bounty''' : Sur la pollution, sur le cinéma, sur le... '''Gérard''' : Non, non, mais attends, Christian, Christian, Christian ! Christian ! '''Phildar''' : On l'a pas encore fait. '''Bounty''' : Non, sur la pollution, sur certaines choses, sur les orages, sur tout. Sur les parfums. '''Gérard''' : Oui, mais t'avais pas autre chose à demander ? Parce que je t'ai entendu tout à l'heure à 22h. Non, c'est pas grave. Kelnumero ? '''Kelnumero''' : Bon, alors pour ma toute première participation aux débats de Gérard, moi, j'ai trouvé ça bien, mais bon, je sais que la pollution, toi, c'est ce que tu vis au jour le jour et c'est... '''Phildar''' : À Paris, ouais. '''Kelnumero''' : C'est pénible pour toi. '''Gérard''' : Non, mais de toute manière, la pollution, on la vit dans toutes les villes, hein. Je vais te dire une chose, ça, tu peux pas t'y échapper, que ce soit sur Paris, sur... Même en province, je pense que tu peux pas y échapper, hein. '''Phildar''' : Il y a des endroits dans le monde où il n'y a pas de pollution, Gérard ? '''Gérard''' : Euh, je pense pas, non. Donc, conclusion sur le premier débat. Donc, j'ai répondu quand même un peu aux gens. J'ai même coupé la parole pour répondre sur les questions. '''PHildar''' : C'était bien, ouais. T'as bien fait. '''Gérard''' : Donc, je pense que le deuxième, je voudrais qu'il se passe comme ça. '''Phildar''' : D'accord, mais la pollution, la pollution. '''Gérard''' : Ouais, mais il faudrait qu'on aye moins de pollution, moins de voitures. Parce que là-dessus, ça sera dur. Donc, le deuxième débat qui va porter sur le cinéma. Et on va s'écouter Bernard Mauvaise-Hallen avec Drajets Fuca. Et vous pouvez toujours nous appeler au 0800 70 5000 et 0803 70 5000 et toujours 3615 code Funradio, rubrique Direct. Et l'IRC qui... fonctionne bien je pense ? '''Reego''' : Ca pulse à mort ! '''Gérard''' : On se retrouve tout à l'heure d'ici dix minutes. ''[Musique]''. == Le débat sur le cinéma == === Contexte === Second débat de Gérard de cette nuit du 8 octobre. Le principal fait à noter est l'émergence de Reego comme régulateur. Discret jusqu'ici, il commence à prendre de l'ampleur pour devenir le vrai thermomètre régulateur de Gérard dans ses virées d'humeur. Au surplus, combiné à Phildar et Manu, il ajoute la dimension qui manquerait au surréalisme sur la durée. Pour la première fois, Max se permet de ne pas rester jusqu'au bout de l'émission, confiant à son équipe la direction réelle des opérations de cette nuit. Il ne le fera pas souvent cette saison-là, mais le fera beaucoup ensuite pour gérer d'autres obligations professionnelles. Le fait est que le format, tout en prenant son envol, trouve aussi déjà sa limite. Gérard est tellement limité dans son contenu qu'il aparaît déjà évident qu'il va falloir combiner d'autres éléments comiques pour pérenniser l'émission, le registre sérieux pouvant devenri ennuyeux. Il est même probable que les acteurs habituels, les auditeurs, n'y trouvent pas leur compte. Mais pour l'heure, c'est bien ce format qui perdure. Ce débat montre aussi, pour une nouvelle fois, l'ambiguïté de gérard, très pointilleux ici sur sa vie privée et sa pudeur, alors qu'il est prêt à tout dévoiler, sans filtre, dans d'autres circonstances moins adaptées voire risquées. C'est ici que l'instabilité psychique du personnage est claire, par-delà la dimension théâtrale de cette aventure. === Les personnages === * Gérard Cousin : Gérard * Phildar, Manu * Igor : Reego * Franck Bargine : Max * Olivier Bouchet : Olivier de la pro * Mégane : Moulinette * Tulipe: anciennement Coquelicot * Scooby-doo : anciennement Kelnumero * Laura : Cactus * Goldo : Ananas, Yoshimitsu, Multiplex * Christian * Sandy Threadkell : Poussin * Tony Morestin : Rocco (le nez pincé) === Transcription === '''Gérard''' : Et voilà, bonsoir à tous. Donc vous nenez d'écouter Baba au rhum avec des petits ...de loup dans le nez. '''Phildar''' : Non, ça c'était il y a trois disques, Gérard. '''Gérard''' : Oui, mais le deuxième c'était ? '''Phildar''' : Non, le premier, tu peux rappeler le premier et je te donne le... '''Gérard''' : Le deuxième, le premier, je l'ai, là, c'est Baba au rhum avec... '''Phildar''' : Non, le premier disque, là, on en a passé deux. C'était Bernard Mauvais-Hallen. Et le deuxième, c'était Blur. Voilà. '''Gérard''' : Et donc, continuez à nous appeler au 0800 70 5000 et 0803 08 5000 et toujours 3615 4 Fun Radio, rubrique direct et sur l'IRC, on continue de nous appeler. '''Reego''' : Oui, toujours énormément de monde. Je salue Féji, Seb Zed, Gaëtan, Corben, Miss Lover et tous les autres qui sont là. '''Gérard''' : Et on a combien de personnes sans indiscrétion, Reego ? '''Reego''' : Une petite seconde, je tape un petit truc et c'est vrai que ce n'est pas très bien de le dire, mais il y a 56 personnes. '''Phildar''' : Ne le dis pas, ça reste entre nous, non ? '''Gérard''' : Non, mais c'est bien, 56 personnes, il est 1h39, c'est bien quand même. '''Max''' : Dites-le en direct, mais pas trop fort, il ne faut pas que les gens l'entendent. '''reego''', ''[à voix basse mais devant le micro]'' : 56, il y en a 56. '''Phildar''' : Et sur le Minitel, Gilles, l'inconnu, il y a aussi Babette et Sandy. '''Manu''' : Et moi, j'aimerais saluer ma mère et ma copine. Moi, je salue Titi et la Madrilaine et voilà. '''Reego''' : Pas de marque, pas de marque. '''Gérard''' : Non, mais la Madridaine, il se reconnaîtra. '''Manu''' : Si, si, c'est une marque de vélo. '''Gérard''' : Mais il se reconnaîtra, la Madridaine. On va accueillir Moulinette, 21 ans de Dijon. On écoute Fun Radio... Fun Radio sur 90.7. Tulipe, 19 ans, Toulouse, 105.9. Ananas, Saint-Leu-la-Forêt sur 101.9. Scooby-Doo, 23 ans, Du Havre. On écoute Fun Radio sur 106.9. J'espère que c'est la bonne fréquence. '''Manu''' : C'est la bonne fréquence, Gérard. '''Scooby-doo''' : Oui, oui. Bonsoir, Paris. Bonsoir, la Dreamtease. '''Gérard''' : Cactus. Rebonsoir. Donc, Paris, 101.9. Et Christian de la Celle SaintèCloud, 101.9 toujours. Donc, deuxième débat qui porte sur le cinéma. J'espère qu'il va se passer aussi bien que le premier. '''Phildar''' : Bien péchu aussi, parce qu'il va se réveiller un petit peu, Gérard. Un petit peu, oui. '''Gérard''' : Non, mais j'espère qu'il va se passer impeccab, comme le premier, c'est tout ce que je demande. Alors, avez-vous déjà été au cinéma cette année ? Alors, on va demander à... Non, ben, tiens, comme Christian, il a répondu le premier. '''Christian''' : Oui, j'ai été souvent au cinéma. Oui. Et j'ai vu pas mal de films. '''Phildar''' : Comme quoi ? '''Christian''' : Comme Le Titanic, Dîner de con, Six jours sept nuits, Prends garde à toi et Pédale douce. '''Gérard''' : D'accord. Pédale douce, je peux te dire une chose, c'est un film qui est passé dimanche sur... '''Christian''' : Sur Première chaîne. Avec Richard Berry. '''Manu''' : Christian, t'es allé manger chez Gérard ? Il t'a invité ? '''Christian''' : Non. '''Manu''' : Non, c'est pas grave. Ouais ! Non, mais j'ai rangé la blague, elle est pourrie. '''Gérard ''' : Non, non, mais tu te calmes, Manu, parce que... Cactus ? '''Cactus''' : Ben, moi, j'ai pas trop d'argent, alors tu vois, je me souviens pas avoir été au cinéma. '''Scooby-doo''' : Moi, ben, j'ai pas tellement eu l'occasion parce que je suis serveur dans un bar. Euh, le problème, j'ai pas vu beaucoup, beaucoup de films cette année. J'en ai vu quelques-uns, mais... ''[pendant ce temps, Manu transmet discrètement une feuille à Phildar]''. Oh là ya larcène là. C'est Olivier à la pro ? '''Gérard''' : Non, c'est Cactus, à mon avis, qui a... Non, c'est Scooby-Doo qui doit avoir un truc bidon. ''([regardant Phildar]'' Non, mais tu vois, là, ce que Manu t'a donné, c'est pas... '''Phildar''' : C'est des sondages. '''Gérard''' : Non, non, mais ça, j'en ai rien à foutre. '''Phildar''' : D'accord. C'est pas grave. '''Gérard''' : Tu vois, parce que moi, tes sondages, j'en ai rien à foutre. Alors, on fait pas de sondages lors des débats. '''Moulinette''' : C'est intéressant, les sondages. '''Phildar''' : Non, mais c'était pas un sondage, c'était des statistiques, en fait. C'était des questions, genre, pour ou contre le cinéma. C'était pour savoir ce que les Français... '''Gérard''' : Non, non, mais tu vois, maintenant, dans mes débats, je mets plus des pour ou contre. OK ? Alors, ça, tu me le donnes ? '''Phildar''' : Il y avait aussi Qu'aimez-vous dans le cinéma. Tu peux le lire, si tu veux, tiens. ''[il lui donne la feuille]''. '''Gérard''' : Non, mais ça... '''Gérard''' : Non, mais tu peux le lire, c'est vachement intéressant. '''Gérard''' : Non, non, mais je verrai ça après. Ananas ? '''Ananas''' : Ouais, ben, moi, je suis un vrai fan de ciné. Je vais souvent au cinéma. Et dernièrement, j'ai vu Une chatte sur un doigt brûlant. '''Gérard''' : Non, non, mais attends. Toi, si tu commences ta vulgarisé... Si tu commences à être vulgaire... '''Ananas''' : Ah, mais je suis pas vulgaire, Gérard. '''Gérard''' : Non, non, mais attends, une chatte... Une chatte, tu sais ce que ça veut dire, pour moi ? '''Manu''' : C'est un petit animal à poils courts... '''Phildar''' : Attendez, il faut savoir si on considère que le cinéma pornographique ne fait pas partie du cinéma, Gérard. '''Gérard''' : Mais justement... Non, mais justement... Donc, si Ananas veut répondre... bien avant moi à la cinquième question... Donc, dans ces cas-là, prends les questions à ma place. '''Ananas''' : Ben, je peux pas savoir. '''Phildar''' : Donc, Ananas, tu gardes ta réponse, parce que ça, c'est pour la cinquième question. '''Ananas''' : OK, alors, je serre les fesses jusqu'à la cinquième. '''Gérard''' : Bon, ben, alors, tu vas serrer les fesses avec Manu au standard. '''Phildar''' : Il a l'habitude, Manu, de serrer les fesses. '''Tulipe''' : Ben, moi, je suis un peu prise par le boulot, donc j'ai dû aller au cinéma quelquefois, mais en ce moment, je peux pas trop. e ? '''Moulinette''' : Oui, alors, moi, j'y suis allée, mais bon, je peux pas te dire si c'est souvent ou un peu, beaucoup. C'est... je sais pas, une fois tous les deux mois, quoi. '''Gérard''' : Ouais, non, mais je pense qu'à l'heure actuelle, vous pouvez quand même aller voir certains films qui sont sortis. Peut-être Minitel, non ? '''Phildar''' : Ouais, je pense qu'ils vont aussi au cinéma. '''Gérard''' : Non, mais on a des réactions ou pas ? Parce que sur l'IRC, on a du monde. Si sur Minitel, ils veulent pas répondre... '''Phildar''' : Ben, on a Dada sur Minitel qui dit que tu es quelqu'un qui parle plus vite qu'il ne réfléchit. '''Gérard''' : Ouais, ouais, dans ces cas-là... '''Phildar''' : C'est flatteur. '''Gérard''' : Non, non, mais dans ces cas-là, elle aurait pu dire l'homme qui parle plus vite que son ombre. '''Phildar''' : Voilà, c'est un peu le même principe. '''Gérard''' : Ou l'homme qui tire plus vite que son ombre, en parlant de Lucky Luke. Sur IRC ? '''Reego''' : Oui, il y a Corben qui me demandait si le cinéma pollue. '''Gérard''' : Oh, non, mais alors là... '''Phildar''' : C'est plus le thème du débat. '''Manu''' : Mais est-ce que la pollution, c'est du cinéma ? '''Gérard''' : Non, non, mais ça... Non, non. Donc, alors là, je pense que c'est une question qui va faire plaisir à tout le monde. Je pense que tout le monde a entendu parler du film. On en a fait de la pub sur Fun Radio. Que pensez-vous du film Godzilla ? '''Phildar''' : Ah, vous ne pouvez pas passer à côté. '''Christian''' : Je trouve ça très bien, Christian. Zé vu le film, ze le trouve très formidable. '''Gérard''' : Christian, sans indiscrétion, on va demander à Cactus, Scooby-Doo, Ananas, Tulip et Mouninette de se calmer. Où t'as été le voir ? '''Christian''' : Au Gaumont-Parnasse, le matin de très tôt. '''Reego''' : Pas de marque ! '''Philda''' : Gérard, il a été à New York alors... '''Gérard''' : Tu vois, moi, j'ai été le voir avec Sandy qui se planque derrière là-bas. '''Phildar''' : Il n'a rien compris. Il n'a rien compris, mais il l'a vu. '''Manu''' : Tu as compris que c'était un monstre qui cassait une ville ? '''Gérard''' : Oui, bien sûr. Je vais te dire une chose. Tu demanderas à Poussin de tout à l'heure, après l'émission, tu verras... '''Phildar''' : C'est le nom qu'ils avaient donné au monstre dans le film. '''Gérard''' : Non, non, mais tu demanderas à Poussin tout à l'heure. Donc, Christian, pour toi, tu as été le voir au Gaumont ? '''Christian''' : Oui, au Gaumont-Parnasse, très tôt le matin. '''Cactus''' : Écoute, moi, j'en ai entendu parler. J'en ai entendu parler que du bien. Donc, comme je te l'ai dit tout à l'heure, je n'ai pas d'argent. Je n'en ai pas beaucoup. Donc, je ne dépense pas mon argent là-dedans. Mais il paraît que c'est super bien. Mais dès que j'ai l'occasion d'y aller, j'irai le voir. '''Gérard''' : Eh bien, il faudra peut-être se dépêcher parce que là, il est... '''Manu''' : Il est déjà 1h46, c'est chaud, là. '''Cactus''' : Non, mais ne t'inquiète pas, Gérard. Quand on veut voir un film, on arrive toujours à le voir. '''Scooby-Doo''' : Gérard, je sens que tu vas me virer si je dis que je déteste Jean Reno, que je déteste les films américains de merde et tout ça, donc... '''Gérard''' : Bon, alors... Non, non, non, mais là, Scooby-Doo ! '''Moulinette''' : Il a le droit, hein. '''Scooby-doo''' : J'ai le droit, je ne l'ai pas vu et je n'ai pas envie de le voir. '''Gérard''' : Oh, stop ! Stop ! On se calme. Scooby-Doo, si c'est pour insulter les acteurs de cinéma, dans ces cas-là, tu vas aller voir Manu parce que je pense que tu n'es pas encore rentré dans... '''Scooby-doo''' : Je ne l'ai pas insulté. J'ai dit que je ne l'aimais pas. '''Phildar''' : Ben oui, t'es sectaire quand même, Gérard. T'es un peu sectairé. '''Gérard''' : Non, mais attends. Non, mais attends, je vais te dire une chose. Quand t'insultes des acteurs de... '''Phildar''' : Non, il n'a pas insulté, il a dit qu'il n'aimait pas. C'est-à-dire que, ça se trouve, il n'aime pas Jean Reno dans Godzilla parce que le rôle est bidon. '''Gérard''' : Ah, non, mais attends. Son rôle est vachement bien dans... '''Phildar''' : Ben, explique pourquoi. '''Gérard''' : Son rôle est... Attends, Scooby-Doo, tu permets ? Non, non, Scooby-Doo. Scooby-Doo, tu me laisses parler ? Maintenant, je réponds à la question à Phildar. Moi, je vais te dire une chose. Jean Reno, dans le rôle qu'il a dans Godzilla, fais-moi confiance qu'il est vachement bien. Il joue le rôle d'un... '''Moulinette''' : Le dis pas, je ne l'ai pas vu. '''Gérard''' : Il joue le rôle d'un... ' ''Phildar''' : D'un agent secret, non ? '''Gérard''' : D'un agent secret. '''Moulinette''' : Faites chier, merde. '''Gérard''' : Oh, qui c'est qui a envie de chier, là ? C'est la deuxième porte à droite. '''Manu''' : Non, mais elle n'avait pas vu le film, vous lui dites la fin. '''Moulinette''' : Ne racontez pas, je veux le voir. '''Gérard''' : Non, non, mais je peux te dire une chose. Jean Reno joue là-dedans dans un super... Il a un très bon rôle. '''Manu''' : Ce n'est pas le monstre ? Ce n'est pas le monstre, Jean Reno ? '''Gérard''' : Non, non, non. '''Scooby-doo''' : Gérard ? Ce n'est pas parce que je n'ai pas les mêmes goûts que toi que tu dois forcément t'énerver et vouloir me virer. J'ai vu tout un tas de films avec Jean Reno, je n'aime pas du tout ce type. '''Gérard''' : Oui, mais si tu n'aimes pas Jean Reno, dans ces cas-là, c'est... Dans ces cas-là, est-ce que tu as regardé... '''Scooby-doo''' : Léon, tout ça, mais je n'ai pas aimé. '''Gérard''' : Mais il est passé, il y a... Quand est-ce que c'est ? Il a joué dans... '''Moulinette''' : Highlander. '''Gérard''' : Non, il n'a pas joué dans Highlander, il a joué dans... '''Ananas''' : Les Bronzés, les Bronzés. '''Gérard''' : Non, pas dans les Bronzés. Le film, l'opération Cornet de Beaf. '''Christian''' : Ils l'ont passé à la télé. '''Gérard''' : Oui, mais il était très bien comme film. Je suis désolé. '''Scooby-doo''' : J'ai regardé Big avec Tom Hanks. '''Gérard''' : Oui, tu as raison. Tulipe ? Non, Ananas. '''Ananas''' : Ananas. Écoute, moi, ce n'est pas les acteurs qui me posent un problème, c'est la bestiole quoi. En fait Godzilla, c'est quand même un petit peu un monstre de tapette, parce que si tu le mets à côté de King Kong, il ne fait pas le poids, Godzilla. Attends, moi, je suis prêt à organiser un combat entre Godzilla et King Kong quand tu veux, je suis prêt à mettre de l'argent quand tu veux, moi, je te dis, King Kong, il met une branlée à Godzilla, c'est tout. '''Gérard''' : Non, mais attends, King Kong et Godzilla sont de la même taille. Godzilla, c'est un gorille... c'est un gros lézard. Et King Kong, c'est un singe. '''Ananas''' : Mais King Kong, il est plus fort, c'est tout. '''Manu''' : Ce qu'on ne sait pas, c'est que dans la vie, ils sont amants. '''Gérard''' : Non, non, non, non. '''Ananas''' : Là Manu, tu as balancé quelque chose, là, il ne fallait pas en parler. '''Gérard''' : Non, non, Tulip, Tulip, Tulip. '''Tulip''' : Moi, j'ai trouvé ça super. '''Gérard''' : Tu as été le voir ? '''Tulip''' : Oui, oui, j'ai été le voir, oui, oui. '''Moulinette''' : Alors, moi, je ne l'ai pas encore vu pour la simple et bonne raison que je ne regarde pas les films américains en français, mais je les regarde en anglais, donc j'attends qu'il passen en anglais. '''Phildar''' : Tu l'as vu en anglais, Gérard ? '''Gérard''' : Non, américain. '''Phildar''' : Ah, pardon. Excuse-moi. '''Manu''' : Phildar, tu as fait une erreur... C'est impardonnable. '''Gérard''' : C'était américain. Moi, je peux vous dire une chose, que ce film-là est très beau à voir. Même Poussin l'a vu. Et je pense qu'elle peut dire que... C'est sûr qu'on a du mal à le comprendre, le film, mais il est très bien. IRC ? '''Reego''' : Oui, sur l'IRC, il y a Fedji qui demande si, au cinéma, les monstres peuvent remplacer les acteurs. '''Gérard''' : Ah ben, la preuve, c'est que Godzilla, le monstre, s'est vu opposé avec Jean Reno. '''Phildar''' : C'est un peu la vedette, aussi. '''Gérard''' : Oui, mais ça, c'est Jean Reno qui a fait son film, donc... '''Phildar''' : Non, mais Godzilla, c'est la vedette. Et pourtant, on ne l'a pas vu à l'avant-première en smoking. Il n'est pas venu. Pourtant, c'est la vedette. '''Gérard''' : Jean Reno... '''Phildar''' : Non, Godzilla. '''Scooby-doo''' :Est-ce que Godzilla il va monter les marches de Cannes ? '''Scooby-doo''' : Tu mets Gérard en face de Françoise, t'as Godzilla 2. '''Gérard''' : Qui c'est qui vient de dire ça ? '''Phildar''' : Ça, c'est pas cool. '''Gérard''' : Scooby-Doo, bonne nuit. '''Manu''' : Par contre, moi, je croyais que le monstre Godzilla et le gars qui faisait sauver Willy, la baleine, c'était le même. '''Reego''' : Gérard, justement sur IRC, on me demande si tu connais le nom de l'acteur qui joue Godzilla. '''Ananas''' : Sandy. '''Gérard''' : Alors, celui qui vient de dire Sandy, bonne nuit. '''Phildar''' : Non, c'est Brandy, il a dit. '''Gérard''' : Non, mais même, ce n'est pas une raison. '''Manu''' : C'est le nom de l'acteur, Brandy. '''Moulinette''' : Brandy Walker, son vrai nom. '''Gérard''' : Oui, c'est ça. C'est faux. '''Phildar''' : Je pense que tout le monde a répondu à Godzilla. Maintenant, Gérard, on peut peut-être passer à la prochaine. '''Gérard''' : Donc, combien payez-vous la place de cinéma ? On va demander à Moulinette. '''Moulinette''' : Moi, je la paye 47. Sauf quand c'est en tarif réduit, c'est 37. '''Tulip''' : 52. '''Gérard''' : Attends, 52 francs à Toulouse ? '''Phildar''' : Ça fait 5 francs de plus ? '''Ananas''' : Ouais, bah écoute, tu sais, moi, je fais le bon vieux truc. J'y vais avec un copain, puis il vient m'ouvrir la porte de sortie de secours près des chiottes, et puis je rentre gratos, quoi. '''Gérard''' : Bon, bah alors, Ananas ? '''Phildar''' : Ça, c'est n'importe quoi. '''Ananas''' : J'ai le droit, non ? '''Gérard''' : Ananas ? Tu vois ? C'est terminé pour toi. Au revoir ! '''Manu''' : Mais qu'est-ce qu'il a dit ? '''Ananas''' : J'ai pas le droit de resquiller ? '''Manu''' : Pourquoi tu payes le métro, toi ? Tu resquilles pas ? '''Ananas''' : Toi aussi, tu truandes des fois, Gérard. Chacun ses business, hein, GG. '''Gérard''' : Allez, allez, hop. Ananas, c'est terminé pour lui. Hop ! Scooby-Doo ? '''Manu''' : Ah bah, il est parti, Scooby-Doo, tu l'as jeté. '''Gérard''' : Ouais, mais... Eh, tu me prends des gens au standard, là, ou quoi, toi ? '''Phildar''' : Ah, les 24 lignes, là. '''Gérard''' : Non, mais attends, ça va, moi, je peux faire des débats comme ça... ''[il lève les jambes pour mettre ses pieds sur la table]''. '''Manu''' : Non, parce que là, les pieds près de moi, c'est pas possible, Gérard. '''Phildar''' : Ah, tu bosses un peu, Manu, quand même. '''Manu''' : Ouais, bah, j'y vais, j'y vais, j'y vais. Non, mais t'y vas maintenant ! Tu me reprends deux personnes à place d'Ananas et de Scooby-Doo. '''Reego''' : Le débat, Gérard, le débat. '''Cactus''' : Euh, c'est... Je crois que c'est 48 francs, la place, moi. '''Christian''' : Moi, ze paye 56 francs. '''Moulinette''', ''[réagissant au fait que Gérard note tous les chiffres qu'on lui donne]'' : Ça rentre pas dans les cases du loto. '''Gérard''' : Alors, 56... Alors, moi, je peux vous dire une chose, que là, il y en a aucun... Personne m'a donné la bonne réponse. Les meilleures places, c'est 30 balles la place du cinéma. '''Phildar''' : Où ça ? Dans tes rêves ? '''Gérard''' : Non. Non, moi, je peux te dire une chose, UGC, c'est 30 balles. '''Phildar''' : Mais pour les moins de 12 ans. '''Cactus''' : En tarif réduit ? '''Gérard''' : Non, non, il n'y a pas de tarif réduit. '''Moulinette''' : Pour les mongoliens. '''Phildar''' : Attends, Gérard. Moi, j'ai rarement vu des places à 30 balles à Paris. Et même en province, je pense que c'est pareil. '''Gérard''' : Non, mais attends. Toi, dans ta ville de Troyes, il n'y a pas de cinéma. J'y ai été une fois, il n'y a aucun cinéma dans ta ville de Troyes. '''Phildar''' : Si, ya des cnnémas, mais moi je faisais comme Ananas. Je passais par derrière. Bon, le problème, c'est pas ça. Le problème, c'est que c'est 50 balles maintenant, parce que la vie évolue et qu'on pollue le système. '''Gérard''' : Bon, quelle heure il est ? '''Cactus''' : On revient toujours à la pollution. '''Gérard''' : 1h50. 1h54. Non, on ne continue pas la pollution. Donc, oui... '''Reego''' : Enchaîne la question. '''Gérard''' : Vas-y, si quelqu'un voulait réagir sur les places. '''Reego''' : Oui, alors, il y a Corben qui demande si Godzilla paye sa place quand la pollution est niveau 3. '''Gérard''' : Non, mais ça, je ne vois pas le rapport. '''Phildar''' : On s'en fout ça, Reego, on t'a déjà dit. '''Reego''' : Non, non, mais il fait bien de poser la question, mais ce n'était pas le thème du débat. C'est qui sur IRC ? '''Reego''' : C'était Corben. '''Manu''' : Gérard, donc, à la place de Scooby-Doo, on accueille Poussin. Et à la place d'Ananas, on accueille Yoshimitsu de Caen, où on peut écouter Fun sur 96.3 FM. '''Gérard''' : Donc, on va attaquer la quatrième. Regardez-vous la télé sur les films sortis ? Donc, alors, je refais la question. Par exemple, quand vous regardez la télé, par exemple, le mercredi... oh là, il y a des téléphones qui sont pourris, là, je n'aime pas ça. '''Manu''' : Je crois que c'est Poussin. '''Gérard''' : Eh Poussin, tu n'en es pas comme un bœuf. '''Poussin''' : Non, non, ce n'est pas moi. '''Phildar''' : Ben si, mais dès que tu parles, ça s'arrête. '''Gérard''' : Donc, est-ce que vous regardez, par exemple, le mercredi, vous avez des films qu'on vous annonce à la télé ? '''Cactus''' : Ça s'appelle des bandes annonces. '''Gérard''' : Voilà, les bandes annonces. '''Christian''' : Sur exclusif. '''Yoshimitsu''' : Pas de gros mots. '''Gérard''' : Non, sur exclusif, je ne pense pas que j'en ai encore eus. Alors, donc, est-ce que vous les regardez ? Est-ce que vous regardez l'avant-première du film qui sort ? '''Phildar''' : Ah, il passe les avant-premières ? '''Gérard''' : Oui, ils passent les bandes annonces du film. Et ça, je peux le confirmer. Donc, on va demander à Moulinette. '''Moulinette''' : Alors, moi, je ne regarde jamais ça, parce que ça te donne toujours une image carrément faussée du film que tu vas aller voir. Je me fais une opinion plutôt par les journaux et plutôt par mes amis. '''Gérard''' : Oui, mais attends, Moulinette. Dans ces cas-là, si tu ne regardes pas la bande annonce à la télé, donc, sur les journaux, c'est pareil. Donc, sur les journaux, ça te met la bande annonce du film qui sort. Donc, tu vois l'image. '''Moulinette''' : Pas du tout, Gérard. Tu ne vois pas l'image sur le journal, Gérard. '''Gérard''' : Moi, je peux te dire que si, et je peux... '''Manu''' : C'est parce que tu lis des BD, Gérard. '''Yoshimitsu''' : Avec Gérard, elle bouge l'image. '''Gérard''' : Non, non, mais moi, je peux te ramener un journal, pas demain, mais mardi, si tu veux. Moi, je te ramène le journal, et tu vas voir que même mercredi, je peux te ramener le journal, comme quoi que la bande annonce... Ils vont te mettre la bande annonce des films qui sortent le jour même. Donc, Tulipe ? '''Tulipe''' : Bah, moi, ça m'intéresse énormément, parce que vu le peu de films que je vais voir, je suis sûre au moins qu'il m'intéressera ou pas. '''Gérard''' : Ouais, mais... Oh là, qui c'est qui a un téléphone pourri ? '''Manu''' : C'est Poussin, je ne sais pas, elle le gratte sur son menton, c'est une horreur... '''Yoshimitsu''' : C'est parce qu'elle a de la barbe ou quoi ? '''Gérard''' : Oh vous vous calmez, s'il vous plaît, derrière, merci. Tulipe ? Je me demande si à Toulouse, vous avez... Je me demande si vraiment, vous avez des salles de cinéma. '''Tulipe''' : Ah, si, si, franchement, Gérard, il y a des salles de cinéma, hein. '''Gérard''' : Ouais, ça m'étonnerait, hein. '''Moulinette''' : C'est pas le tiers-monde, hein. '''Gérard''' : Ouais, mais attends, à 19 ans, je crois que t'es en pleine études, ça m'étonnerait que t'ailles voir des films. '''Tulipe''' : Je travaille, Gérard, je ne suis plus dans les études, moi. '''Phildar''' : Moi, je voulais te poser une question, Gérard. Imagine, tu vois la bande annonce le mercredi. Une bande annonce, ça dure combien de temps ? Ça dure une minute, une minute trente. Qu'est-ce que tu vas te faire chier après à aller voir le film ? '''Gérard''' : Non, mais toute manière, sur la bande annonce, tu ne vois presque rien. Tu ne vois presque rien, il faut voir le film réel. Par exemple, sur Godzilla, t'as vu quoi ? T'as vu simplement le monstre qui cassait carrément l'hôtel. '''Manu''' : Ouais, mais il n'y a que ça dans le film, de toute façon. '''Gérard''' : Oui, non, mais il ne fait que ça, je suis d'accord. '''Moulinette''' : Raconte pas, raconte pas, raconte pas. '''Gérard''' : Non, mais attendez, je réponds à Manu. Oui, d'accord, Manu, il ne fait que ça. '''Phildar''' : Donc, je me dis, ça ne sert à rien d'aller voir le film après. '''Gérard''' : Mais si, pour les gens qui aiment bien voir des films comme ça, peuvent aller le voir. Moi, je leur conseille d'aller le voir. '''Phildar''' : Mais ça ne sert à rien de dépenser 50 balles si tu vois une bande annonce où il y a tout. . '''Gérard''' : Non, mais ils ne vont pas dépenser 50 balles parce que le mercredi, c'est moins cher. Là, sur tous les chiffres que j'ai eus, le moins cher, c'est 30 balles la place. Donc, Reego, oui ? '''Reego''' : Oui, ça va. Ok, c'est bon, on peut y aller. Il y a encore Corben qui demande si le Titanic a coulé à cause de Godzilla qui était monté à bord. '''Gérard''' : Alors là, c'est vrai qu'on parle de Godzilla, on ne parle pas du film Titanic avec Céline Dion et Leonardo DiCaprio. C'est vrai que ce film-là, c'est vrai... Non, mais... Non, mais c'est vrai que ce film-là a fait un ravage. Mais je pense qu'à l'heure actuelle, c'est pas lui qui sera dans les premiers. '''Yoshimitsu''' : Eh, Gégé, c'est Céline Dion ou c'est Lara Fabian, t'es sûr ? '''Gérard''' : Non, non, c'est Céline Dion. Attends, tu permets... Non, non, mais attends. '''Yoshimitsu''' : Je ne l'ai pas vu. '''Gérard''' : Non, non, mais tu ne l'as pas vu, mais moi, je peux te dire une chose, que c'est Céline Dion. C'est pas Laura Fabian. '''Manu''' : D'ailleurs, elle est super belle dans ce film. '''Moulinette''' : Elle est trop belle. '''Gérard''' : Elle joue un rôle... Elle joue le rôle, si je me souviens bien, elle doit jouer le rôle de l'épouse... '''Phildar''' : De la vieille, non ? De l'iceberg. '''Gérard''' : Ah, mais arrêtez, là ! Parce que ta l'heure, toi, je vais t'éclater ton bénur. Tu vas pas me casser les burnes, ok ? Je pense qu'elle joue le rôle de la femme de Leonardo DiCaprio, mais je ne suis pas sûr. Donc, on va demander à... Yushimitsu, là. '''Yoshimitsu''' : Non, non, non, attention. Yushimitsu, tu restes correct, quand même. Attends, moi, je ne t'appelle pas Gérald. Alors, c'est Yushimitsu. Ben, moi, je suis un vrai fan de cinéma. En plus, on n'est pas très riches. Donc, moi, je n'ai carrément pas la télé. Je ne vais qu'au cinéma. Donc, en fait, les bandes annonces, je ne les vois pas à la télé, quoi. '''Gérard''' : OK, Poussin. Poussin ! ''[silence]''. Oh, putain, mais merde ! '''Manu''' : Mais je n'ai rien fait ! Elle est là ! Mais elle est là ! '''Poussin''' : Non, mais je suis là, hein. Non, moi, ce que je voulais dire, c'est que les bandes annonces, c'est bien, quand même, de pouvoir les voir à la télé. Au moins, ça te donne envie d'aller voir les films. Et au moins, tu peux savoir les extraits de films, comment ça se passe et tout ça. ''[les auditeurs ponctuent par « d'accord », en voix de tête, accompagnés de Moulinette]''. Donc, tu peux y aller et puis tu peux... '''Gérard''' : Celui qui dit, d'accord, super, tu la fermes derrière, s'il te plaît. Merci. '''Poussin''' : Si, par exemple, ça ne t'intéresse pas, ty vas pas. Comme ça, ça te donne un point de vue. '''Cactus''' : Ouais, moi, je m'y intéresse beaucoup aux bandes annonces parce qu'en fait, je ne me fie pas aux opinions des autres et... Quand j'accroche avec une bande annonce, je vais voir le film et quand je n'accroche pas, je ne vais pas le voir, voilà. '''Christian''' : Oui, les bandes d'annonces, moi, je les vois dans les salles de cinéma avant de commencer les films. Ils présentent beaucoup de bandes d'annonces. '''Gérard''' : Que pensez-vous des journaux sur les films X même voire à la télé ? Donc, vous allez réfléchir et on va se retrouver d'ici... Trois minutes. Et on va s'écouter les petits poils de bouc avec des slips et toujours 0800 70 5000 et 3615 code Funradio, rubrique direct. Et toujours l'IRC. On vous retrouve d'ici trois minutes. ''[musique]'' '''Gérard''' : Et voilà, vous venez d'écouter les petits poils de bouc avec des slips et on récupère donc Moulinette. Tulip. Yo... Poussin. Cactus. Christian de la Celle-Saint-Cloud Donc alors, cinquième question, vous l'avez entendue. '''Moulinette''' : Tu peux nous la rappeler, s'il te plaît ? '''Gérard''' : Oh, non, non, mais attendez, je vais pas... '''Yoshimitsu''' : C'est sur le cul, c'est sur le cul. '''Gérard''' : Alors, que pensez-vous des journaux sur les films X ou à la télé ? Putain, mais arrêtez de renifler comme des boucs ! '''Phildar''' : C'est vrai, arrêtez de renifler, quoi. Arrêtez de respirer, c'est tout. '''Yoshimitsu''' : Vas-y, laisse-nous vivre. '''Gérard''' : Si ça te plaît pas, toi, c'est le même prix, tu vas dégager, OK ? '''Phildar''' : Bon, alors, la question, Gérard, on y va, oui. '''Gérard''' : Alors, que pensez-vous des journaux sur les films X et même à la télé ? Donc, on va demander à Moulinette. '''Moulinette''' : Ouais, alors, moi, t'as du pot, parce que j'adore ça. J'adore regarder, en fait, les petits journaux qui vendent des cassettes porno, parce que t'as toujours le résumé de l'histoire avec des mots super crus. Ça donne vachement envie de regarder le film. J'adore également le journal du hard, parce que ça me fait délirer. '''Gérard''' : Non, mais attends, le journal du... '''Moulinette''' : J'ai pas fini. C'est fait sur un ton comique. Et tu vois vraiment des images... '''Gérard''' : Mais non, mais attends, attends, Moulinette, Moulinette. Moulinette ! Moi, attendez, s'il vous plaît, derrière, on se calme. Alors, t'as 21 ans, tu fais quoi dans la vie sans indiscrétion ? '''Moulinette''' : Oui, je travaille dans une boulangerie. '''Gérard''' : Ah, ouais ? Et tu crois que tu peux te permettre de t'acheter... '''Moulinette''' : Mais je dis pas que je les achète, je dis que je les regarde, les... '''Gérard''' : Non, non, mais est-ce que... est-ce que, est-ce que, en travaillant dans une boulangerie... Tu peux te permettre de louer Canal Plus ? '''Moulinette''' : Bah, bien sûr, hein. '''Gérard''' : Ouais, tu te fais combien sans indiscrétion par mois ? '''Moulinette''' : Bah, ça, ça te regarde pas, mais oui, j'ai les moyens d'avoir Canal, je fais ce que je veux, Gérard. '''Gérard''' : D'accord. Tulipe ? '''Tulipe''' : Bah, moi, sans vouloir paraître coincée, bah, ça m'intéresse pas vraiment. Mais bon... si ça intéresse des gens, moi, je trouve que c'est bien. '''Moulinette''' : Ah, faut que t'essayes Tulipe, c'est génial, hein. '''Gérard''' : Non, mais attends, Moulinette, pour l'instant, je demande à Tulipe, ok ? '''Phildar''' : C'est plus Moulinex. '''Gérard''' : Euh... Yo, Yoshimoutchou, là. '''Yoshimitsu''' : Ah, Yoshimitsu, s'il te plaît, reste poli. '''Gérard''' : Ouais, oh, t'as qu'à prendre un autre nom, d'accord ? Parce que tout à l'heure, je vais t'appeler, euh... '''Yoshimitsu''' : T'es gentil, c'est mon vrai nom, je suis Thaïlandais, ça te pose un problème ? Bon, alors, tu te calmes. Bon, je te réponds, maintenant. '''Gérard''' : Oh, oh, oh ! Oh, tu me parles sur un autre ton ! '''Phildar''' : Bah, toi aussi, Gérard. '''Tulipe''' : T'énerve pas, Gérard, ça sert à rien, oh ! '''Yoshimitsu''' : On va repartir sur de bonnes bases, hein. '''Gérard''' : Ouais, ouais, ouais, je pense. Hein, Tony ? '''Phildar''' : Bah, non, y a pas de Tony, ce soir. Ils sont en vacances, je te dis, ils sont... '''Gérard''' : Ouais, ouais, ils sont en vacances, ça m'étonnerait. '''Phildar''' : Ils sont en Afrique. Ils sont en vacances. '''Yoshimitsu''' : Alors, moi, ouais, je suis un gros fan de films X, j'en consomme pas mal. Et, dernièrement, j'ai vu Ouvre la fenêtre que je te mette et Change de trou, ça fume. Et, franchement, je les conseille à tout le monde. '''Gérard''' : Non, mais d'accord, je vois pas du tout le rapport avec la question. Euh, Poussin ? '''Poussin''' : Bah, écoute, je pense que si ça intéresse des gens pour regarder des cassettes porno, moi, je pense que, personnellement, c'est pas utile de regarder des cassettes porno pour prendre son pied. '''Moulinette''' : T'en regardes pas, toi ? '''Poussin''' : Non, pas du tout, non. Je trouve que c'est... Enfin, s'il y en a qui veulent regarder ça, ils regardent ça s'ils veulent, mais... C'est pas intéressant, tu peux prendre ton pied autrement. '''Moulinette''' : Et ton mec, il regarde ça ? '''Yoshimitsu''' : Attends, GG ? '''Gérard''' : Non, attendez, attendez, 5 minutes, attendez. Vous allez répondre après, mais il y a une question... '''Reego''' : Oui, sur IRC, SebZ te demande, Gérard, si tu préfères les films X, Y ou Z. '''Gérard''' : Euh... Aucun des trois. '''Phildar''' : C'est quoi la différence ? '''Gérard''' : X, Y, Z ? '''Reego''' : Non, les films X, ou les films Y, ou les films Z. '''Gérard''' : Bon, déjà, les films X, c'est les films porno. Les films Z, ça existe pas. Et les films, quoi après ? Y, non plus. '''Reego''' : On me dit que ça existe, et qu'en fait, tu connais rien sur le cinéma, et que tu devrais pas faire un débat là-dessus. '''Gérard''' : Eh ben, dans ce cas, s'il n'est pas content, il va au ciné de lui-même. Cactus ? '''Cactus''' : Moi, honnêtement, je m'intéresse pas à ce genre de truc, parce que j'ai assez l'imagination pour me passer de ce truc-là. Mais pour taper un bon délire, ouais, ça me dérange pas de regarder. ''[souffle de quelqu'un qui rit dans le combiné]''. '''Gérard''' : Oh, derrière, quand quelqu'un parle, s'il vous plaît. '''Manu''' : C'est poussin, Gérard. Si, si, je l'enlève, je la remets, c'est elle. '''Phildar''' : Ouais, c'est vrai, en plus. '''Gérard''' : Non, non, bien sûr. Vous voulez la virer... Christian, pour finir ? '''Christian''' : Oui, ben moi, j'adore ça. Ça, j'envoie pas mal de photos à Max. Chez moi, à la Celle-Saint-Cloud, j'ai pas mal de tableaux des femmes avec des culs nus. Même dans les chiottes. '''Phildar''' : Excuse-moi, avant que tu réponds, j'ai une question de Sucette, 22 ans, sur le Minitel, qui demande à quel âge tu as vu ton premier film de cul. '''Gérard''' : Ça, j'y répondrai pas, à elle. '''Phildar''' : Ben pourquoi ? C'est indiscret ? T'en as déjà vu un, ou pas ? '''Gérard''' : Non, mais c'est des questions qui sont atteinte à la vie privée, donc... Sur la vie privée, je réponds pas. '''Phildar''' : À 17 ans ? À 17 ans, tu l'as vu ? '''Gérard''' : Je répondrai pas. C'est tout. '''Yoshimitsu''' : J.J., c'est Yoshimitsu. Tout à l'heure, Poussin... Elle disait qu'elle connaissait pas trop les films. Moi, si elle veut, je me propose gentiment de lui faire découvrir. On pourrait échanger nos coordonnées hors antenne. '''Gérard''' : Non, mais tu vois... Je pense qu'à mon avis, Poussin, elle sera peut-être pas d'accord. '''Poussin''' : Non, mais en fin de compte, ça m'attire pas trop. '''Yoshimitsu''' : Non, mais je vais te faire découvrir, après, on essayera et tout, non ? '''Poussin''' : Non, non, c'est pas un truc qui m'attire. '''Yoshimitsu''' : Tu as ce qu'il faut à la maison ? '''Poussin''' : Non, c'est pas ça, mais je regarde pas ce genre de choses. Je regarde plutôt des cassettes comiques ou des cassettes plus intéressantes que ça. '''Phildar''' : Il y a aussi les mangas. Les mangas, c'est des dessins animés comiques et il y a du cul aussi. '''Gérard''' : Ouais, mais ça... Moi je regarde pas les dessins animés. Donc une question... ça je pense que... c'est dommage parce qu'on n'en a pas beaucoup là. Et c'est bête, parce que cette question-là, je vais la poser. '''Phildar''' : Aux nanas, c'est pour les nanas ? '''Gérard''' : Non, ça concerne certaines personnes... donc c'est un reportage que j'ai vu hier, donc c'est malheureux. Je vais le passer parce que c'est ma question. Avez-vous déjà vu... Avez-vous déjà vu un film sur les routiers ? Ça, je sais, c'était... '''Phildar''' : C'est du cinéma, ça ? '''Yoshimitsu''' : De cul ? '''Gérard''' : Non. Non, non, non, non, non, non, non, non, non, non, non, non, non, attendez, attendez. Je peux vous dire une chose que... Ça, avez-vous déjà vu... Avez-vous déjà vu un film sur les routiers ? Je peux dire une chose que c'est un film qui est passé sur... Je sais plus quelle chaîne. '''Manu''' : Mais c'était pas un film, Gérard, c'était un reportage. '''Gérard''' : Non, non, je sais, il y avait un reportage hier sur les routiers. Mais il y a un film qui est passé sur la 6, M6. '''Yoshimitsu''' : Ça s'appelait Asphalt Fucker. '''Gérard''' : Non, non, ça s'appelait Le Convoi. '''Phildar''' : Non, c'était un non-voyant. '''Cactus''' : C'était un téléfilm, ça n'a rien à voir avec le cinéma, Gérard. '''Gérard''' : Moi, je vais dire une chose, Cactus, que le film est passé sur M6 et qui a duré pendant une heure et demi. C'est un mec... '''<mznu''' : Gérard, Gérard, excuse-moi, il y a eu une grave erreur, pas de marque. Sur la chaîne... '''Reego''' : Et à propos de films sur les routiers, on me conseille Mêlée Ouverte pour routiers à moustache. '''Gérard''' : Non, mais ça... '''Phildar''' : C'est un bon film, je l'ai vu, c'est un bon film. Il y a deux nanas moustachues là-dedans, ça s... grave. '''Gérard''' : Non, non, non, non, non, non, allez. Non, non, allez. On revient sur la question des routiers. Donc, je peux vous dire que ce film-là est bien passé et je l'ai vu. '''Christian''' : Avec Jean Gabin. '''Manu''' : Attendez, excusez-moi, parce que, bon, Gérard, t'as vu le film, explique-nous un peu, peut-être, ce que ça racontait. '''Gérard''' : Ben, attends, on va demander s'il y a des gens qui l'ont vu. '''Yoshimitsu''' : Yoshimitsu, je l'ai vu. C'est l'histoire d'un routier qui glisse sur une plaque de verglas et ça se finit mal. '''Gérard''' : Bon, alors, toi, tu peux dire... '''Manu''' : Ça y est, il a fait ses valises. Ça y est, il est parti. '''Gérard''' : C'est plus la peine qu'il revienne. Tu me prends quelqu'un d'autre sur les 24 lignes. '''Manu''' : Non, sur les 3 lignes, là. '''Gérard''' : Ah, il n'y a plus que 3 lignes ? '''Manu''' : Non, c'est parce que c'est plus le 0800 70 5000, mais le 0803 08 5000 exclusivement. '''Gérard''' : Alors, donc, si vous voulez nous appeler pour réagir sur cette question-là, faites vite, parce que dans 4 minutes, je change de question. '''Phildar''' : Le numéro vert est toujours disponible sur IRC et sur Minitel. '''Gérard''' : Donc, Christian ? '''Christian''' : Oui, ben, moi, zé vu un film comme ça, de con... de routier. '''Phildar''' : De con, oui, tu peux le dire. '''Gérard''' : Non, non, c'est le titre du film. Ça s'appelle Le Convoi. '''Christian''' : Oui, c'est ça, que j'avais vu avec Jean Gabin, puis qu'il traversait un camion. '''Phildar''' : En moto ? '''Gérard''' : Non, non, tu te trompes. Cactus ? '''Cactus''' : Ben, écoute, personnellement, je ne l'ai pas vu, mais si tu me raconterais un petit peu de quoi ça parle, je pourrais te dire un petit peu mon avis. '''Gérard''' : Non, ben, pour l'instant, je vous raconterai tout à l'heure, parce que je peux vous le dire, je l'ai vu, ce film-là, il est très beau à voir. '''Cactus''' : Bon, ben, je ne me ferai pas d'opinion, alors. '''Gérard''' : Non, mais j'expliquerai après. Poussin ? '''Poussin''' : Ben, moi non plus, je n'ai pas vu le film, donc je ne pourrais pas te répondre. '''Tulipe''' : Moi non plus, je n'ai pas vu. '''Moulinette''' : Moi, je ne l'ai pas vu, et par contre, j'ai vu un épisode de Drôles de Dames où elles enquêtaient sur le milieu des routiers, et elles étaient routières. '''Phildar''' : Ah, c'était bien, ça, je l'ai vu aussi, ouais. '''Gérard''' : Non, je pense que là, vous faites illusion. '''Phildar''' : Donc, c'est quoi l'histoire du film ? '''Gérard''' L'hiistoire du film... en fin de compte, c'est un gars qui... qui part avec un autre pote, et bon, c'est malheureux à dire, c'est un black. Donc, il se fait taper sur la gueule. '''Tulipe''' : Et pourquoi c'est malheureux à dire ? '''Moulinette''' : Pourquoi c'est malheureux, Gérard ? '''Phildar''' : Non, parce qu'il y avait un peu de racisme dans l'histoire du film, c'est ça. '''Gérard''' : Voilà. Et en fin de compte, t'as tout le monde, t'as même un truc, ça, c'est ce qui m'a, dans le passage du film, ce qui m'a fait marrer le plus, et je voudrais bien qu'il repasse, c'est que tu vois des prêtres qui sont tous en train de dire « Amen ». '''Phildar''' : Ouais, c'est excellent. '''Gérard''' : Non, mais ils s'amusent, et en fin de compte, ils vont… Après, t'as les routiers… '''Phildar''' : T'as Alain Delon, ouais. '''Gérard''' : Non, non, il n'y avait pas Alain Delon. T'as tous les routiers qui organisent une chaîne, parce que… Non, qui organisent une chaîne, parce que… '''Phildar''' : Parce que t'avais pété celle de ton vélo. '''Gérard''' : Non, parce que lui, sa femme est enceinte, et il veut la retrouver. '''Phildar''' : Ah, ils veulent la porter jusqu'à la clinique. '''Gérard''' : En fin de compte, il se fait arrêter par les flics, il se fait tabasser dessus, à mort. Et en fin de compte, t'as tous les routiers qui se mettent… qui déboulent tous, tu vois, plus de 150 routiers… '''Manu''' : Ah ben, ça doit faire un beau bordel. '''Cactus''' : Ah, la solidarité. '''Phildar''' : Ça fait un paquet de posters de cul aussi. '''Gérard''' : Comme dit Manu… Ça fait un beau bordel. Quand tu vois 150 routiers, tu vois même les mecs qui nettoyent la route avec leur gros camion, là, et qui t'envoient de l'eau des deux côtés. Donc, tu les vois tous qui arrosent. T'as les motards qui les escortent jusqu'au bout. Et après, t'as tous les camions qui dépensent le commissariat. Et après, ils vont dans un stade et ils font le truc du corbillard parce que, soi-disant, qu'il serait morts. Et en fin de compte, tu le revois… '''Moulinette''' : Raconte pas la fin. '''Gérard''' : Non, mais c'est drôle à voir. Et en plus, c'est un camion, c'est un camion-citerne et il y a une nana qui est avec. '''Moulinette''' : Enfin, faut aimer les camions, hein. '''Gérard''' : Ah oui, ça, faut apprécier. Oui, Reego ? '''Reego''' : Oui, la plupart des gens sur IRC disent que les routiers, c'est pas du tout le thème du débat. '''Phildar''' : Et ça, tu le prends dans les dents, quand même. Déjà que t'en as plus beaucoup. '''Gérard''' : Non, mais c'est peut-être pas le thème du débat, mais la question, c'est avez-vous déjà vu un film sur les routiers ? '''Reego''' : Ok. Et il est bientôt 20, on va passer à une autre question. '''Manu''' : Et d'ailleurs, Gérard, avant ta prochaine question, à la place de Yoshimitsu, on va accueillir Multiplex 19 ans de Toulon, où on peut écouter Fun sur 93.1 FM. '''Multiplex''' : Oui, salut, bonsoir à tous. '''Gérard''' : Salut à toi. Donc, t'as écouté la question, non ? '''Multiplex''' : Ouais, c'est bon. Ouais, non, mais je voulais dire que moi, le film, le convoi, je l'ai vu. Je suis derrière toi à 100%. '''Gérard''' : Voilà. Donc, regardez-vous les reportages sur le cinéma ? Eh ben, tiens, Multiplex, on va te demander à toi. '''Multiplex''' : Les reportages sur le cinéma ? Du genre Exclusif et tout ça, c'est ça ? '''Gérard''' : Non, mais pas spécialement Exclusif, n'importe quelle chaîne. '''Multiplex''' : Je préfère regarder le cinéma directement, en fait. Le reportage, la vie des stars et tout, tout ça, ça nous intéresse pas, quoi. C'est un peu leur vie privée, quoi. '''Gérard''' : Ouais, mais attends, Multiplex, je pense que tout le monde va réagir. Ils vont me dire, oui, mais la vie des stars, ça regarde personne. Mais en fin de compte, la vie des stars, c'est quand même eux qui font le film. '''Multiplex''' : C'est quand même eux qui la vivent, la vie des stars. '''Manu''' : Attends, Multiplex. On va demander à Christian de la Celle. '''Manu''' : Non, ben justement, Christian, je viens de l'avoir, il est parti se coucher. Donc, 0803 08 5000 pour nous joindre. '''Gérard''' : Donc, Cactus ? '''Cactus''' : Ben, écoute, honnêtement, je m'intéresse pas trop à la vie privée. Chacun fait sa vie comme il veut. Tant que le film est bon, le reste, après, je m'en fiche, quoi. '''Poussin''' : Ben, jusqu'à présent, j'ai pas vu de reportage sur les films. Mais, pourquoi pas, ça peut peut-être être intéressant. '''Tulipe''' : Moi, je suis de son avis aussi, pareil. '''Moulinette''' : Moi, j'aime bien savoir ce qu'il se passe dans la vie privée des stars. Parce que je suis une grande curieuse. Et j'aime bien savoir qui couche avec qui, enfin, tu vois. Et par contre, leur capacité à bien faire le film, ça passe après, quoi. '''Phildar''' : C'est ça que je me demande. Je me posais comme question dans le cinéma, c'est est-ce que les stars, elles couchent vraiment ensemble dans les films ou pas ? '''Moulinette''' : Ben, ouais, ouais, elles font pas semblant, hein. '''Gérard''' : Non, Moulinette, je pense que tu te trompes. '''Phildar''' : Ils mettent des capotes ou pas ? '''Gérard''' : Ouais, ouais, ouais. '''Phildar''' : Ils couchent ensemble, ils mettent des capotes. Pour éviter d'avoir des... '''Gérard''' : Non, non, mais ça, c'est pour le film sur la scène. '''Multiplex''' : Ouais, mais réel, hein. '''Moulinette''' : Non, non, ils en mettent, hein. '''Phildar''' : Des capotes réelles. '''Gérard''' : Ouais, mais ça, ils mettent vraiment des capotes, mais je peux te dire une chose, que c'est le truc, bon, ben, c'est pour le passage du film. Bon, donc, tu vas les voir, ils vont s'embrasser sur la bouche et autres, ils vont mettre des capotes, ça, ok. Mais c'est simplement que pour le passage du film. Que pour le passage de l'extrait. '''Phildar''' : Ah, ils couchent seulement pendant le passage, ils couchent pas pendant tout le film. '''Gérard''' : Non, non, tout le film, tu les auras pas... '''Phildar''' : en train de coucher ensemble. '''Poussin''' : Comment tu peux le savoir qu'ils mettent des capotes ? '''Gérard''' : Ben, attends, ça se voit, ça se voit vraiment. '''Phildar''' : ça se sent. '''Manu''' : Oui, donc, à la place de Christian qui est parti se coucher, on accueille Rocco, 26 ans, de Tignes. Et la fréquence sur Tignes, c'est 94.3 FM. '''Rocco''' : Oui, tout à fait. Bonsoir. '''Gérard''' : Salut. Donc, pour toi ? '''Rocco''' : Ben, j'ai pas écouté la question. '''Gérard''' : Oh, non, mais je vais pas m'amuser à faire que ça, hein. '''Rocco''' : J'étais au standard, excuse-moi. '''Gérard''' : Ouais, alors, regardez-vous les reportages sur le cinéma. '''Rocco''', ''[retenant difficilement un fou-rire]'' : Ben, oui, tout à fait. Ouais, tout à fait, ouais. '''Gérard''' : T'aurais pas fumé la moquette ? '''Rocco''', ''[tousse pour tenter d'expulser son fou-rire]'' : Non, non, pas du tout, pas du tout. '''Gérard''' : Non, t'aurais pas bu un coup ? '''Phildar''' : Il est un peu malade, je crois. '''Rocco''' : C'est pas évident de parler comme ça. '''Gérard''' : Ouais, tu serais pas malade ? '''Rocco''' : Un petit peu. '''Gérard''' : Ouais, un petit peu. Alors, si t'as rien à dire dans ce cas-là... '''Manu''' : Non, oui, moi, il m'a pas raconté plein de trucs au standard, mais bon. '''Gérard''' : Non, mais attends, Manu. Le premier s'est bien passé, le deuxième, pour l'instant, il a l'air de se passer impeccab. Non, mais je voudrais pas qu'il foire. '''Manu''' : Non, mais, tranquille. '''Reego''' : Non, c'est sur IRC, y'a un... Enfin, c'était juste pour dire à Manu qu'il faut qu'il rappelle Arnett. '''Gérard''' : Non, non, non. '''Phildar''' : Non, pour les cadeaux, parce qu'on lui a offert un CD de Céline Dion. '''Rocco''' : Ça, faut rappeler Arnett. Pourquoi pas. '''Gérard''' : Ouais, alors, Rocco, tu vas te coucher. D'accord, Tony ? '''Rocco''' : Pas du tout. '''Gérard''' : Ouais, ouais, d'accord, Tony. Allez, bonne nuit. Allez, bonne nuit. '''Phildar''' : Salut, Tony. C'est coupé. Coupé, c'est coupé, hein, avec Manu. '''Manu''' : Non, bah, moi, tu me dis qu'on coupe, on coupe, hein. '''Gérard''' : Non, mais, tu vois, j'aime pas trop avoir... '''Phildar''' : Il aime pas trop, ça, tu le sais. '''Gérard''' : J'aime pas, c'est pas parce que le chef, il est plus là que les souris dansent, hein. OK ? ''[applaudissement du studio]''. '''TUlipe''' : Bravo, Gérard. '''Gérard''' : Donc, tu me... Tu me... Tu m'envoies le disque, parce qu'il reste trois questions, donc... '''Phildar''' : En pleine gueule ? Tu le veux en pleine gueule ou pas ? Non, mais je sais pas, je te demande. '''Gérard''' : Tu veux un café en pleine gueule ? '''Phildar''' : Non, non, mais tu peux peut-être poser la question, on gagnera du temps, déjà. Comme ça, ils pourront réfléchir. '''Gérard''' : La Formule 1 est-elle un moyen de film ? '''Phildar''' : Oh, non, c'est naze. Non, non, tu me dégages cette question, c'est... '''Reego''' : Sur IRC, on m'a dit, s'il parle de Formule 1, il faut lui dire que c'est pas le thème du débat. '''Phildar''' : Les auditeurs, vous avez déjà vu un film sur la Formule 1 ? '''Gérard''' : Oui, oui. ''[les auditeurs dient non]''. Si, si, si, si, ça existe, ça existe, ça existe. '''Reego''' : Sur IRC, c'est marqué. '''Gérard''' : Non, mais sur IRC, ils me diront ce qu'ils veulent, mais moi, je peux vous dire que ça existe. '''Phildar''' : Mais t'as vu ça où, toi ? '''Gérard''' : Voilà. D'accord, super. ''[musique]'' '''Phildar''' : C'était les Rita Mitsuko avec le sexe des bébés éléphants est plus gros que le tien. '''Gérard''' : Donc, on va faire un petit... statistique... '''Phildar''' : Sur le cinéma. Et vous pouvez toujours appeler au 0803 08 5000 si vous voulez réagir, bien sûr, aux statistiques de Gérard sur le débat qui porte sur le cinéma. '''Gérard''' : Et donc, toujours 3615, code... '''Phildar''' : Fun Radio, rubrique direct... où il y a encore sucette, tige de cote, je sais pas ce que c'est. '''Manu''' : Voilà, on accueille Tony, d'ailleurs. '''Tony''' : Oh, bonsoir. Ça va bien se passer. '''Gérard''' : Non, non, mais Tony, je t'ai dit quelque chose. '''Phildar''' : De toute façon, t'as géré ça hors antenne, Gérard, donc c'est bon, on peut y aller. '''Gérard''' : Donc, alors, les statistiques sur le débat sur le cinéma. Donc, à la question, que pensez-vous du cinéma ? Donc, il y a 40 personnes qui ont répondu... Bah, voilà, c'est tout. On répondu à la question... '''Phildar''' : 40%, pas 40 personnes. '''Gérard''' : Ouais, 40%, mais moi, j'aime bien quand on me donne des trucs comme ça. À la question, qu'avez-vous vu dans les cinémas, donc ? Alors, 20% aiment les pop-corn, donc je vois pas du tout le rapport avec le film. 30% aiment les ouvreuses, je vois pas du tout. Et 50% aiment rester chez eux. '''Phildar''' : Ah, il y a pas beaucoup de gens qui aiment le cinéma, alors. '''Gérard''' : Donc, 30% qui aiment les ouvreuses. Ça, j'en ai rien à foutre, parce que ça rentre pas dans les films. '''Phildar''' : C'est quoi, les ouvreuses ? '''Gérard''' : Les ouvreuses, c'est celles qui te placent. '''Phildar''' : Mais il y en a plus beaucoup, en plus. '''Gérard''' : Si, je crois qu'il y en reste encore pas mal sur... '''Phildar''' : Il y en a deux sur Nantes, je crois. '''Gérard''' : Ouais, et puis 20% qui aiment les pop-corn. Alors, ça, c'est les trucs qu'ils nous donnent pendant l'entract. '''Phildar''' : Ouais, mais c'est vrai que les meilleurs pop-corn qu'on a pu manger, c'est quand même au cinéma. '''Gérard''' : Ouais, mais ça, je vois pas du tout le rapport, donc pour moi, c'est... '''Phildar''' : Donc, il y en a qui vont peut-être au cinéma seulement pour manger les pop-corn, qu'est-ce qu'on pense ? '''Gérard''' : Ou voir les ouvreuses. Enfin. Alec, oui, Reego ? '''Reego''' : Non, non, vas-y. '''Gérard''' : Parce qu'Arnette, c'est pas la peine d'essayer d'appeler, on te... Ça sert à rien. Ça servira à rien pour toi. Donc, alors, à la question pour ou contre le cinéma, donc 30% qui sont pour. Donc, j'avais pas posé la question pour ou contre le cinéma, donc ça, je vois pas pourquoi qu'on me donne ça. '''Phildar''' : Et peut-être que les auditeurs veulent répondre aussi aux questions des stats, Gérard. '''Gérard''' : Ouais, mais 20% sont pas contre. 18% sont d'accord. Et 100% sont contre. '''Phildar''' : Il y a une erreur de calcul, je crois. C'est 99. '''Gérard''' : Ouais, ouais. Non, mais à mon avis, ça, c'est vous, là. Bande de guignols, là. Hein Olivier ? Non, c'est pas toi, non. Non, c'est pas toi. C'est jamais toi. Non, non, c'est jamais toi. C'est jamais toi qui fais des conneries. '''Olivier''' : Mais j'ai rien fait, non. '''Gérard''' : À la question, quel est votre acteur préféré ? Alors, 100% ont répondu Georgette Bitoun pour sa prestation dans Les Pigeons aiment les Goélands. Alors, ça, Olivier, ça, je vais te dire une chose, que maintenant, c'est toi. Alors, ça, c'est toi. Alors, il y a 100% qui dit, vos gueules, les mouettes, vlà les Goélands. Donc, tu ferais mieux de... Pas pour moi, tu me mouettes, alors là les Goélands. Allez, hop, dégage. '''Phildar''', ''[hilare]'' : Tu peux rappeler le titre du film ? '''Gérard''' : C'est 100% Les Pigeons aiment les Goélands. Donc, à mon avis, c'est 100% vos gueules, les mouettes, vlà les Goélands. Ok, Olivier ? Merci. Merci, Olivier, pour le larsen. Alors, à la question, quel est le dernier film que vous avez vu ? Alors, 50% ont vu O, les beaux camions. O, les beaux camions. '''PHildar''' : Je l'ai vu aussi, il est super, celui-là. '''Gérard''' : Avez-vous vu CB ? Hein, Olivier ? Et 100% ont vu, C'est pas le thème du débat. Olivier ! Olivier ! ''[il froisse le papier et le jette vers Olivier]'' Tu prends ça et tu vas te torcher les fesses avec. '''Olivier''' : Mais c'est pas moi qui l'ai fait. '''Gérard''' : Non, non, c'est pas toi. '''Phildar''' : Mais c'est les Français qui ont répondu, c'est cool. '''Gérard''' : Non, non, non, non, non, non. Ça, pour moi, c'est des conneries. '''Reego''' : C'est un sondage. '''Gérard''', ''[adouci]'' : Non, non, ouais, mais même pour moi, c'est des conneries. '''Multiplex''' : C'est un sondage à la Goldo, ça. '''Gérard''' : Ouais, ouais, ça, c'est un sondage bidon. '''Olivier''' : C'est Sam Zell qui nous l'a passé. '''Gérard''' : Bah oui, c'est Sam. T'as raison. Tu veux que je lui garde et que je lui fasse voir demain ? '''Tony''' : Et tu pourrais rajouter sur ta liste, éclate-moi la chatte à la grenade. '''Gérard''' : Ouais, bah, toi, tu ferais mieux d'éclater ta voix basse. OK ? Merci. Alors, les montgolfières ont-elles sorti un film ? '''Phildar''' : Les sœurs montgolfières. '''Poussin''' : Qu'est-ce que t'entends par là, Gégé ? '''Gérard''' : Alors, les montgolfières... Les montgolfières, c'est un ballon dirigeable qui s'allume avec du gaz. '''Poussin''' : Donc, ce n'est pas des parachutes, alors ? '''Gérard''' : Non, c'est un zizi avec des poils qui tombe tout seul du désert et qu'on retient avec quelque chose. '''Cactus''' : Eh ben voilà ! Maintenant, je comprends déjà beaucoup mieux ce que tu veux dire. '''Poussin''' : Moi, personnellement, je n'en ai jamais vus. '''Tony''' : Tu vois des b... avec des... '''Gérard''' : Tony, Tony, Tony, Tony, Tony, Tony, Tony. '''Phildar''' : Ça va ? '''Gérard''' : Tony, tu vas la fermer parce que les ..., je ne veux pas entendre ça à 2h36 du matin. Alors, tu vas voir Manu au standard. '''Phildar''' : Il va te donner, en fait, les synonymes qu'on peut dire à cette heure-là. Et tu reviens, ne t'inquiète pas. Donc, Poussin voulait répondre à toi. '''Poussin''' : Donc, ce que je voulais dire, Gégé, c'est que les montgolfières, ça n'a rien à voir avec le cinéma. Je ne comprends pas pourquoi tu... '''Gérard''' : Non mais il y a des films sur les montgolfières. '''POussin''' : Oui, mais ça dépend si tu parles de reportages, oui, mais si tu parles de films, je n'en ai jamais vu. '''Gérard''' : Ben, tu as qu'à regarder de temps en temps la télé. Oui, Reego ? '''Poussin''' : Non, mais je n'ai pas le temps de regarder la télé. '''Reego''' : Non, mais c'est bon, Poussin, merci. À propos de montgolfières, il y a Yankee qui demande si tu as un cerveau lent. '''Gérard''' : Non, mais de toute manière, c'est pareil. Les cerfs-volants, tu les tires sur des trucs, mais il faut avoir du vent, pour les cerfs-volants. Les montgolfières, c'est avec du gaz. '''Phildar''' : D'accord, mais ça, c'est super calé dans le ciné, ça. '''Manu''' : Gérard, excuse-moi, on va peut-être revenir, justement, dans le thème du cinéma, parce que là, je crois qu'on s'égare. Donc, allez, on y va. '''Gérard''' : Donc, tiens, Tony, maintenant, toi. '''Tony''' : Oui, mais le problème, c'est que moi, je suis tout le temps au standard, pour un rien, pour un oui, pour un non. Alors, moi, je voudrais bien que tu me répètes la question, s'il te plaît. '''Gérard''' : Non, mais attends. Non, non, mais tu as entendu la question avant que tu ailles au standard. '''Tony''' : Ah, les sœurs mongolfière ? Oui, je suis allé voir tous leurs films. '''Phildar''' : D'accord, et qu'est-ce que tu en as pensé ? '''Tony''' : Franchement, c'est de la balle. '''Phildar''' : C'est planant, non ? '''Tony''' : Oui, c'est planant, c'est le mot. J'aime bien passer comme ça, Philippe, quand tu es de bonne humeur. Je te kiffe. '''Cactus''' : Oui, c'est vachement planant, comme film. '''Multiplex''' : Moi, je suis tout à fait d'accord. C'est très bien, mais il ne faut pas se moquer de ces gens-là. Il n'y a pas de quoi être fier, c'est tout. '''Tulipe''' : C'est super aussi, moi, je trouve. '''Moulinette''' : Oui, moi, j'ai vu pas mal de films sur les Mongols. Maintenant, savoir s'ils étaient fiers, je ne sais pas. '''Gérard''' : Bon, alors, Moulinette. '''Manu et Phildar''' : Ils n'ont pas compris la question. '''Gérard''' : Non, non, mais je pense qu'on parle des Mongolfières, on ne parle pas des Mongols. D'accord ? Parce que toi, pour l'instant, t'as une tête de Mongole, toi. '''Multiplex''' : Et si je te dis trisomie 21 ? '''Moulinette''' : Toi, t'a un QI de mongol. '''Gérard''' : Alors, Moulinette, bonne nuit. Moulinette, au revoir. '''Tony''' : On appelle Arnette. '''Multiplex''' : Ou Goldo. '''Gérard''' : Non, non, Moulinette, bonne nuit. De toute manière, on ne rappelle plus personne, là. Ça va être terminé, alors. '''Olivier''' : Ah, c'est dommage, il y avait des filles qui voulaient te parler. '''Multiplex''', ''[en voix de tête]'' : Allô ? Oui, Gérard ? C'est Conchita. '''Gérard''', ''[crescendo]'' : Non, non, mais c'est bon, c'est pas la peine, j'ai dit. Conchita, tu vas faire ton ménage. Donc, dernière question. C'est la dernière, et là... Oui, c'est la dernière, il est 40 et on arrête après, c'est tout. '''Tony''' : Ah, mais il faut ller jusqu'à 3h, là. '''Gérard''' : Non, non, mais on arrête après, c'est tout. '''Tony''' : T'as signé un contrat, il faut aller jusqu'à 3h. '''Gérard''' : Mais attends, si t'es pas content, Tony, tu dégages. '''Phildar''' : Non, mais attends, c'est vrai, Gérard. T'es payé pour trois heures de débat, si tu commences à te casser avant la fin... '''Manu''' : On pourrait faire encore 2 questions. '''Phildar''' : Non, mais j'aurai une question, j'aurai une question cinéma, après. '''Multiplex''' : Il faut qu'il enlève 100 francs de ticket au restaurant, c'est tout. '''Gérard''' : Alors, là, tu le dégages. '''Tony et Multiplex''' : C'était Polo. '''Manu''' : Bon, allez, on va reprendre, là. On enchaîne la question. '''Gérard''' : La France sort-elle plus de films qu'aux Etats-Unis ? '''Phildar''' : Ça, c'est une question intéressante. '''Multiplex''' : Tout à fait, tout à fait. Tout à fait, je pense que la France sort, elle sort bien, elle sort tard, et beaucoup plus qu'aux Etats-Unis, bien sûr. '''Gérard''' : Non, mais attends. Multiplex. La France sort-elle plus de films qu'aux Etats-Unis. Je ne vois pas du tout avec ce que les Français auront à faire dans la rue. '''Multiplex''' : De toute façon, les chiffres, on leur fait dire ce qu'on veut. '''Tony''' : Oui, mais la France, elle sort plus que 2 films par an. '''Poussin''' : Gérard ? Donc, c'est Poussin. Moi, ce que je voulais dire, c'est que les films en Amérique, ils sortent plus... Enfin, ils sortent en première... Enfin, en première fois, par rapport aux Français. Ils sortent d'abord en Amérique et après, on les voit, ils sortent en France. '''Multiplex''' : Non, non, non, on n'a rien à voir. Regarde, un film, regarde, un film français, Les Visiteurs, tu ne vas pas me dire qu'il est sorti d'abord aux Etats-Unis. '''Tony''' : Non mais quand Sandy et Gérard, ils sont allés à New York, c'était un peu Les Visiteurs. '''Poussin''' : Godzilla, il est sorti en Amérique d'abord. '''Gérard''' : Oui, et il est sorti en avant-première en Amérique. Tulipe ? ''[silence]''. TUlipe ? '''Tulipe''' : Ah, pardon, excuse-moi, Gérard. Parce que je m'occupe d'une petite, alors elle pleurait. Excuse-moi. '''Gérard''' : Ah, non, non, mais dans ces cas-là, si t'as quelqu'un avec toi, ça sert à rien de réagir. '''Phildar''' : Non, mais elle fait du babysitting. ''[prononcé babysittinge)''. '''Multiplex''' : Elle a besoin d'un rempotage, Tulipe. Moi, je vais te rempoter. '''TUlipe''' : Eh bien, moi, je sais pas. Franchement, je sais pas. Pour la France et les Etats-Unis, je sais pas du tout. '''Gérard''' : Alors, moi, je peux vous dire une chose, que le film Godzilla, qu'on a été voir en avant-première, est sorti à New York... '''Phildar''' : Alors, explique-nous, Gérard, pourquoi, alors, Godzilla est sorti à New York en avant-première et pas en France, par exemple ? '''GTony''' : C'est pour se faire pardonner parce qu'il a détruit New York. '''Gérard''' : Non, non, non, non, non, non. Non, c'est un film qui est sorti à New York en premier. Ça a été sorti sur New York parce que c'est... C'est pas parce que c'est un film que Jean Reno a fait en avant-première, là-bas, dans les villes de New York, que... ça sort en premier. Donc, il est sorti, d'abord, en avant-première. Après, il est sorti sur les écrans parisiens depuis le 16 septembre. ''Multiplex ''' : En avant-dernière. '''Gérard''' : Ben non, arrêtez vos conneries. Cactus ? '''Cactus''' : Ben, moi, je dirais que... que je laisse la parole à quelqu'un d'autre parce que je ne sais pas quoi te répondre. '''Phildar''' : Pourtant, c'est un sujet intéressant. Moi, j'aimerais bien savoir pourquoi, en fait... '''Gérard''' : Non, mais, hé, Cactus ? T'as jamais été au cinéma, encore ? '''Cactus''' : Mais si, j'ai déjà été au cinéma, Gérard. '''Gérard''' : Non, mais attends, t'as jamais été voir des films ? '''Cactus''' : Mais si, j'ai été voir Le Titanic. J'ai déjà été voir des films, t'inquiète pas pour moi, Gérard. '''Phildar''' : Non, c'est ce que je voulais te demander, Gérard. Pourquoi... Ah, Reego, une question IRC, pardon. '''Reego''' : Oui, on a Riff qui demande s'il y a plus de pollution en Amérique qu'en France. '''Gérard''' : Non, mais ça... On est plus... '''Manu''' : Reego, tu suis rien, hein. '''Gérard''' : Non, non, mais... Non, non, mais c'est pas Reego, c'est l'IRC. La pollution, c'est terminé depuis une heure, donc... '''Moulinette''' : Il y en a eu quand Gérard est arrivé... '''Phildar''' : Donc, ce que je voulais te demander, Gérard, c'est que tu sais, il y a des films français, par exemple, je sais pas si t'as vu 3 hommes et un coufin... Et ce film-là, tu sais, c'était un succès. Et les Américains l'ont copié et ont refait le même film en Amérique. '''Tony''' : 3 hommes et un oursin, ouais. '''Phildar''' : Qu'est-ce que tu penses, en fait, des versions dans le cinéma, par exemple, des films français qui ont du succès et qui se font aux Etats-Unis après ? '''Multiplex''' : Longue ou courte. '''Gérard''' : Non, mais attendez, s'il vous plaît. Oh, on se calme derrière, je réponds. Non, mais ça, de toute manière, que ça soit des films qui sortent en France, qui soient repris par des acteurs américains, de toute manière, en principe, ce qui sort en premier, c'est des films américains, non français. '''Moulinette''' : N'importe quoi... '''Gérard''' : Quoi, n'importe quoi, si ça te plaît pas, tu vas te faire foutre. OK ? '''Phildar''' : Non, mais tu vois, parce que, en fait, le film avait tellement de succès en France que les Américains nous ont copiés. Est-ce que tu trouves ça normal ? '''Gérard''' : Non, mais ça, c'est un truc, c'est à eux de voir. C'est pas à nous, parce que c'est... On sait pas... '''Multiplex''' : C'est une histoire de fric. C'est une histoire de fric, c'est tout. '''Gérard''' : Oui, mais de toute manière, c'est pas qu'il y a eu une histoire de fric, c'est de savoir... Mais c'est de savoir les nombres d'entrées qu'ils ont fait en salles. '''Multiplex''' : Mais non, il y a des dessous de table. '''Gérard''' : Non, mais attends, parce que moi, le film Godzilla, il a fait plus d'un million d'entrées en France. Et nous, quand on y a été, quand on a été le voir à New York en avant-première, il y a eu 150 000 personnes. '''Moulinette''' : Tout ça pour toi ? '''Gérard''' : Non, mais il y a eu 150 000 personnes et faites-moi confiance que 150 000 personnes dans une salle qui hurlent dès qu'ils voient Jean Reno dans un passage, la salle se met à hurler. '''Manu''' : Pourquoi ils hurlent ? Il n'est pas beau, Jean Reno ? '''Gérard''' : Non, mais c'est pas qu'il n'est pas beau, c'est que dès qu'ils le voient dans la... Dès qu'ils l'ont vu sur un passage, par exemple, quand il passe à... '''Phildar''' : Un clouté, un passage clouté, tu vois. '''Gérard''' : Non, quand il passe avec une voiture de l'armée et qu'il mâche un chewing-gum pour pas qu'on le reconnaisse, tout le monde, tu les entends tous hurler même quand il joue le rôle du médecin là-dedans. '''Manu''' : Il mâche un chewing-gum pour pas qu'on le reconnaisse, donc. '''Multiplex''' : C'est un gros chewing-gum alors. '''Tony''' : Alors que moi, personne ne me reconnaît, je suis vraiment une merde. '''Gérard''' : Bon, tais-toi, toi, Tony. '''Multiplex''' : Et toi, attends, Gégé, et toi, New York, les gens, ils ne t'ont pas reconnu du coup, alors ? Vu qu'il y avait Jean Reno ? '''Gérard''' : Mais attends, de toute manière, on paraît... '''Phildar''' : C'est vrai qu'il t'a un peu pris la vedette, quand même. '''Gérard''' : Non, non, il n'y a aucune personne qui nous a reconnu. '''Poussin''' : Est-ce que tu penses que les acteurs américains jouent mieux dans les films que les acteurs français ? '''Gérard''' : De toute manière, maintenant, voir comment qu'on a des films en salle, je vais te dire une chose, je pense que c'est les Américains qui vont bientôt nous dépasser. '''Tony''' : Non, mais t'es d'accord, Gérard, qu'il y a une différence entre Al Pacino et Bernard Ménez, quand même. '''Gérard''' : Non, mais attends, toi, Tony, Tony, dégage. Je veux plus t'entendre. '''Manu''' : Non, non, il a raison. '''Reego''' : Il a raison. '''Gérard''' : Non, mais moi, je peux vous dire une chose, qu'à l'heure actuelle, maintenant, on n'a plus grand-chose parce que maintenant, il faut qu'on prenne des films américains. '''Multiplex''' : Et pourquoi pas des films du Turcménistan ? '''Manu''' : Non, regarde Un dîner de cons, justement, on en parlait tout à l'heure. Un dîner de cons, c'est français, ça a bien marché. '''Gérard''' : Oui, mais attends, un dîner de cons, c'est sorti en cassette vidéo, ce n'est même pas sorti sur les grands écrans. '''Manu''' : Je l'ai vu au cinéma. '''Cactus''' : Et toi, tu préfères quoi, Gérard ? Les films américains ou les films français ? '''Gérard''' : Moi, je n'en ai rien à foutre. '''Cactus''' : Argumente ? '''Gérard''' : Moi, personnellement, pour l'instant, je n'ai pas les moyens de me payer le ciné. '''Phildar''' : Non, Gérard, il n'a pas les moyens d'aller au ciné, il préfère aller à New York voir le cinéma. '''Gérard''' : Donc, voilà. Je pense que vous avez été contents de... '''Phildar''' : De sa réponse. Ça vaut le détour. '''Multiplex''' : Ce que j'aurais voulu savoir, c'est si une carrière, un jour d'acteur se présentait à toi, parce que tu as commencé dans la radio, mais tu vas peut-être aller plus haut. Si une grande carrière d'acteur, comme tout à l'heure, on parlait de Jean Gabin ou Lino Ventura, se présentait à toi, est-ce que tu penses que ça t'intéresserait ? '''Gérard''' : Je peux te dire une chose que là-dessus, personnellement, non. Je préfère rester à la radio que d'aller faire du cinéma. '''Multiplex''' : Il y a des rôles qui sont faits pour toi. '''Phildar''' : Justement, en parlant des gens qui font un autre métier et qui veulent se lancer dans le cinéma, il y a Sucette sur le Minitel qui te pose la question, Gérard, est-ce que tu trouves qu'Ophélie Winter est une bonne actrice ? Et que penses-tu des chanteurs qui se lancent dans le ciné, justement ? '''Gérard''' : Ça, chacun voit midi à sa porte dans les chanteurs. C'est vrai qu'on n'en a pas parlé. Je n'ai pas pensé à faire la question. C'est vrai qu'il y a beaucoup de chanteurs qui se lancent dans le cinéma. '''Phildar''' : Est-ce que tu trouves que c'est bien et est-ce qu'ils sont bons dans le cinéma aussi bien que dans la chanson ? '''Gérard''' : Ophélie Winter, elle, je la vois mieux dans la chanson. Il y a Michel Sardou que j'adore. Lui, il a sorti deux films. '''Phildar''' : Sur CD ? '''Gérard''' : Il a sorti Cross, qui était pas mal. Il y a Patrick Bruel aussi. '''Multiplex''' : Michel Sardou, il vaut mieux qu'il arrête de chanter, il vaut mieux qu'il arrête de faire des films et qu'il fasse de la poterie. '''Gérard''' : Oui, qui c'est qui vient de dire ça ? Multiplex... '''Phildar''' : Chacun ses goûts, Gérard. '''Tony''' : Qu'est-ce que tu as pensé de la prestation de Guy Béard dans Scarface ? '''Gérard''' : Non, mais là, tu te trompes. Allez, conclusion du débat. '''Moulinette''' : À chier. '''Gérard''' : À chier. Qui c'est qui vient de dire ça ? '''Multiplex''' : Une fille. C'est toujours les filles qui foutent le bordel. Je ne sais pas si tu as remarqué. Avant, c'était les garçons, maintenant, c'est les filles. '''Manu''' : Allez, chacun votre tour. Multiplex, conclusion. '''Multiplex''' : Multiplex, moi, je pense que Gérard, tu pourrais faire carrière dans le cinéma. Je pense que notamment des rôles comme celui de Quasimodo te conviendra très bien. '''Manu''' : Ou le bossu de Notre-Dame, non ? '''Multiplex''' : C'est le même, c'est celui-là. '''Tulipe''' : Moi, j'ai trouvé ça bien. C'est sympa. '''Cactus''' : Moi, je pense que le cinéma n'existerait pas, on n'aurait pas eu de débat ce soir. Je trouve que c'est pas mal. '''Tony''' : J'ai trouvé ça trop calme comme débat. Déjà, je voulais te le dire. Il faudrait que tu respectes un petit peu plus ton équipe parce qu'elle est quand même là pour travailler avec toi. '''Gérard''' : Non, mais attends, Tony, déjà pour commencer, l'équipe ce soir, elle a bien travaillé. Je voulais la remercier. '''Phildar''' : Merci, chef. '''Gérard''' : Je voulais remercier Phildar quand même qui a fait les deux débats à la réa. '''Phildar''' : Et tu sais que ça me démangeait. '''Gérard''' : Manu, qui a fait un peu n'importe quoi au standard, mais c'est pas grave. '''Manu''' : C'était nickel, il n'y a pas eu une insulte, pas eu un truc. '''Gérard''' : Oui, mais quand je demande de retirer des gens, c'est pas la peine d'essayer de les passer sur d'autres personnes. Sur le premier débat, c'est ce que tu as voulu jouer et puis là, c'est le deuxième avec Ananas et l'autre et Multitex. On a vaguement repéré. '''Tony''' : D'ailleurs, c'est Goldo, je te le dis. '''Manu''' : Non, ce n'est pas possible, c'était un 03. Il n'a pas déménagé, Goldo, je l'ai vu ce midi. '''Gérard''' : Je vais voir parce que j'ai gardé les fréquences. '''Tony''' : Je n'aime pas trop que vous fassiez des coups comme ça à mon Gérard, je vous le dis. '''Phildar''' : T'es un peu lèche-botte, Tony. '''Gérard''' : Mais Rocco qui s'est fait passer pour Tony, donc on l'a reconnu tout de suite. '''Tony''' : Non, ça c'est faux. C'est faux parce qu'ils m'ont appelé un quart d'heure avant la fin. Et Reego, tu l'as pas remercié ? '''Gérard''' : Non, mais Reego, de toute manière, il a fait comme le mardi dernier. Il a bien travaillé. De toute manière, si j'ai qu'un truc à dire, c'est Reego qui a le mieux. C'est le mieux qui a travaillé parce qu'il a voulu que tout le monde réagisse sur l'Internet et je remercie. '''Reego''' : Et d'ailleurs, pour la conclusion, il y a Arnette sur l'IRC qui chie sur ton débat. '''Gérard''' : Eh bien, Arnette, moi je te... '''Phildar''' : On a bien compris. '''Poussin''' : Donc c'est vrai que les salles de cinéma, s'il n'y en avait pas, on ne pourrait pas en parler et puis on ne pourrait pas aller voir les films, c'est clair. '''Gérard''' : Oui, mais il faut dire une chose que les salles de cinéma, c'est qu'il y en a beaucoup en France et elles sont moins fréquentées qu'avant. '''Poussin''' : Mais il n'y en a pas beaucoup par contre dans les petites campagnes. '''Gérard''' : Oui, mais ça dans... Oui, c'est... '''Phildar''' : Excusez-moi, justement sur Minitel, il y a une question de Sucette encore qui dit étant donné qu'il y a trop de salles de cinéma, est-ce qu'il ne faudrait pas en abandonner sur le bord de la route ? '''Gérard''' : Non, mais ça, voilà, Sucette, tu vois, je ne préfère même pas te répondre à ta question. Donc la semaine prochaine... '''Phildar''' : Ta conclusion Gérard sur le cinéma avant ? '''Gérard''' : Non, mais attends, je vais annoncer le thème du débat de la semaine prochaine. Donc la semaine prochaine, le premier débat, comme ça va intéresser tout le monde et qu'il y a longtemps qu'on ne l'a pas fait. Disons qu'on l'a fait mais on va le refaire. On va faire les boîtes de nuit. '''Phildar''' : Oui, le milieu de la nuit, les DJ, tout ça. '''Gérard''' : Voilà. Et le deuxième débat, on verra. '''Phildar''' : D'accord. Tu vas réfléchir chaque semaine et tu vas donner ta conclusion sur le cinéma, bien sûr. '''Gérard''' : Donc en conclusion sur le cinéma, je pense que ce soir ça s'est bien passé, les deux débats se sont bien passés, personne ne s'est énervé. Ça, c'est ce qui m'a fait le plus plaisir et ça fera plaisir à Max s'il est encore dans le quartier mais je ne pense pas. Et donc, j'espère que la semaine prochaine ça sera pareil. Et donc, on va se quitter pour finir avec Banga avec Montez-moi dessus sans selle et vous allez avoir Rousseau Rousseau pour la nuit sans pub et bien sûr demain 22h minuit Max, le Star System. Bonne nuit à tous et à la semaine prochaine. == Le débat sur les boîtes de nuit == === Contexte === Cette semaine, la routine semble reprendre ses droits. Pourtant, il semble bien que l'équipe, et en particulier Phildar, tente de réintroduire des éléments comiques dans l'émission. Par ailleurs, Gérard prenant confiance, il libère son instinct de bavard et l'émission renforce encore son surréalisme dans le contenu de ce qui y est dit, largement alimenté par Max. Cette tendance n'est pas sans risque de dérapage, et cette émission en est une belle démonstration. Alimenté par des auditeurs à l'esprit vif, rebondissant sur d'anciennes expressions qu'il utilisait dans le cadre de ses conseils comme « Sans indiscrétion » ou d'autres liées à ses courriers comme « Ca se termine, au tribunal », ils accélèrent le déroulé de la scène, ce qui rend gérard confus, et l'expose aux vrais dérapages. L'équipe contrôle et surtout, on le voit ici, il n'y avait pas la même sensibilité au sujets de genre et autres. On peut en effet parier que en 2026, nombreux seraient ces dérapages qui l'auraient exclu de l'antenne alors qu'ici, un simple recadrage suffisait. C'est l'image de cette liberté qui reste intéressante aussi à explorer à travers ces programmes, liberté qui peut d'ailleurs se discuter au regard des cibles de ces propos parfois maladroitement outranciers. Enfin, c'est le premier débat où Gérard accordera de l'importance à l'IRC et au nombre de connectés. Nous y reviendrons, cet élément prendra une ampleur imprévisible ensuite. === Les personnages === * Phildar et Manu * gérard Cousin : Gérard * Franck Bargine : Max * Igor : Reego * Crouton (idem que Tulipe la semaine dernière) * Axel : Oignon * Tuteur, Col roulé * Tony Morestin : Tony * Mladen Derek : * Olivier Bouchet : Olivier de la pro === Transcription === '''Gérard''' : Et voilà donc bonsoir à tous, 0h42, on est un petit peu en retard donc c'est un peu de ma faute parce que j'ai eu des petits problèmes mais c'est pas grave... Donc là vous venez d'entendre deux passages des Bee Gees, Philippe si tu peux... '''Phildar''' : Helle woman et le deuxième je te le laisse annoncer quand même. '''Gérard''' : Ouais mais... Steve... Alave Steve Alave, donc c'était le un, je pense que ça devait être la fièvre du samedi soir... '''Phildar''' : Non c'est le deuxième, la fièvre du samedi soir et le premier c'était... Ouais mais c'était quoi comme film à peu près ? '''Manu''' : Rocky IV je crois. '''Phildar''' : Ouais ça devait être dans Rocky... Enfin bref, c'était un bon film. '''Gérard''' : Voilà, donc le premier débat il va porter... Il va porter sur les boîtes de nuit. Donc on va accueillir pour ça Crouton, 21 ans de Beauvais. On peut écouter Funradio 101.9... A mon avis, tu vois, Manu... A mon avis Beauvais, on écoute, Beauvais c'est dans l'Oise '''Manu''' : Ouais, c'est 101.9. '''Gérard''' : Non, à mon avis je pense pas. '''Manu''' : Bah c'est marqué sur mon truc. '''Gérard''' : Ah ouais mais c'est marqué sur ton truc mais ton truc il doit pas être à jour. '''Manu''' : Ah ok. Alors je peux pas savoir, je m'en excuse. '''Gérard''' : Donc alors Beauvais, ça m'étonnerait que ça soit sur 101.9. Crouton, t'es là pour me confirmer ? '''Crouton''' : Oui oui, bonsoir Gérard, mes respects d'abord. '''Gérard''' : Bonsoir. Non non mais tu peux me confirmer la fréquence ? '''Crouton''' : 101.9 oui '''Gérard''' : Ah non non, Beauvais dans l'Oise ? '''Phildar''' : Attends Gérard, elle habite dans l'Oise, si elle te dit que c'est sa fréquence c'est la sienne. '''Gérard''' : Non mais attends... '''Phildar''' : Bon on va faire des recherches, on va faire des recherches, on va continuer les présentations, allez on y va. '''Gérard''' : Donc petit_poil, donc il y a Bondy, donc 101.9, pas de problème pour cette fréquence, 23 ans. Allo ? Oh là, vous vous réveillez quand je dis bonsoir ou pas là ? Allo ? '''Petit_poil''' : Tu m'entends ? Allo '''Gérard''' : Oh là, ça commence très très très mal hein Phildar... Je sais pas comment vous... Tuteur d'Aix-en-Provence, on peut écouter Fun Radio sur 103.1. '''Tuteur''' : Ouais c'est ça, c'est là-bas. '''Gérard''' : Voilà. Oignon, donc Brest 98.9. '''Oignon''' : Oui, bonsoir Gérard, bonsoir à toute l'équipe '''Gérard''' : Tony, 20 ans. Tony, gentil hein ? '''Tony''' : Ah oui. Sans problème. On est gentil et puis on écoute Fun Radio sur 101.9. '''Gérard''' : Voilà. Et... Col_roulé. Donc... Ou qu'on peut écouter Fun Radio Lille 96.8. Et voilà. Donc alors, les débats vont porter sur les boîtes de nuit. Donc... Avez-vous déjà été en boîte de nuit ? ''[silence]''. Non, non mais attendez. Là, je ne vais pas commencer à parler dans un mur. '''Tony''' : Calme-toi Gégé, calme-toi. '''Gérard''' : Non, non mais attends, Tony, Tony Tony. Attendez, attendez, s'il vous plaît derrière. Tony, je vais me calmer. De toute manière, tu sais que la semaine dernière je t'ai eu, ok ? Non mais moi je voudrais... Quand je pose la première question, je voudrais pas déjà... J'aimerais déjà pas avoir un blanc. Parce que là... '''Phildar''' : Attends, j'ai une idée pour ça. Pour pas avoir de blanc, quand tu poses la première question, tu fais, par exemple : « Col roulé, qu'est-ce que t'en penses ? ». Comme ça, il y aura moins de blancs. '''Gérard''' : Alors donc... Donc, déjà, la première question : avez-vous déjà été dans une boîte de nuit ? On va demander à... Col roulé. '''Col roulé''' : Ouais, ben ok. Ouais, ben ouais... Moi, j'ai déjà été en boîte de nuit, ouais. Et puis, en fait, je voudrais dire que c'est vachement cool parce que tu rencontres plein de gens. '''Gérard''' : Ouais, mais ça... Non, mais attends ! Là, déjà, commencez pas à me casser le thème du débat parce que... petit à petit, on va y revenir là-dessus. '''Col_roulé''' : J'approfondis, Gérard, j'approfondis. '''Gérard''' : Bon. Donc, pour toi, t'as déjà été en boîte de nuit ? '''Col roulé''' : Ouais, voilà, quoi. Ouais. '''Gérard''' : Tu peux me citer... euh... Non. Non, non, j'allais dire : « Tu peux me citer... ». '''Phildar et Manu''' : Non, pas de marque. Non, non. '''Gérard''' : Euh... Tony ? '''Tony''' : Oui, oui, bien sûr. J'ai déjà été en boîte de nuit. J'aime bien y aller, mais je préfère plutôt les ambiances soirées. '''Gérard''' : Euh... Dans... dans quel sens ? Si ça te dérange pas. '''Tony''' : Ça me dérange pas du tout, mon Gérard... euh... bah, je préfère... si tu veux, je préfère les soirées. Parce qu'en boîte de nuit, je trouve... bon, c'est bien, on s'éclate, on s'éclate bien... Mais je trouve ça un petit peu... il y a trop de monde, si tu veux. On fait moins de rencontres que, par exemple, si on fait une petite soirée en appartement. '''Gérard''' : Ouais, non mais... euh... Dans ces cas-là, Tony, moi je peux... je te renvoie la... Oh, non ! Mais attendez derrière, s'il vous plaît ! '''Tony''' : Tu me renvoies un rot, là. Parce que j'ai entendu un... '''Gérard''' : Non, non, non, non, non. Je t'envoie pas un rot. Parce que je dis aux gens qui sont derrière qu'ils se calment, parce que moi, je vais quand même répondre à la question. Donc, je suis d'accord avec toi. Donc, c'est vrai qu'on a du mal à... Dans des boîtes de nuit, je pense que c'est... Col roulé qui a dit... On peut faire plus de rencontres. Moi, je suis pas d'accord. '''Tony''' : Ouais, moi non plus, hein. '''Col_roulé''' : Non, bah si, mais ça dépend du tempérament aussi, Gégé ! Si t'as un tempérament ouvert, tu vas vers les gens, franchement, tu peux faire des rencontres, quoi. '''Crouton''' : Oui, mais par exemple, je pense que ce ne sont pas que des bonnes rencontres. '''Gérard''' : Oui, Crouton. Bah, vas-y alors, dis, toi, dis ta pensée. '''Crouton''' : Moi, personnellement, je crois que ce ne sont pas que des bonnes rencontres. '''Gérard''' : Oui, mais dans ce cas-là, je vais rejouer avec... les... les... les jeux avec Manu : « Pourquoi et comment ». Donc, pourquoi que ce ne sont pas des bonnes rencontres ? '''Crouton''' : Bah, quand je dis des bonnes... pas que des bonnes rencontres, ça veut dire que tu peux tomber sur des gens sympas et des gens sincères, comme tu peux tomber sur des loubards '''Col_roulé''' : Des gros obsédés, quoi. '''Gérard''' : Non, non, non, non, mais... Non, non, non, non, attendez, attendez, attendez ! Là, je vais demander à... Tony, Col_roulé et Crouton... donc on va laisser parler les autres. Après, on va essayer de... de rentrer dans... '''Col_roulé''' : dans le débat. '''Gérard''' : Non, non, non, non. On va essayer de... d'approfondir la question. Parce que moi, je... je peux... je peux vous dire que des rencontres... j'ai jamais eu l'occasion d'en faire là-dedans. Donc, Petit Poil, pour toi ? '''Petit Poil''' : Alors, pour moi, j'aime bien... j'aime bien aller en boîte pour m'éclater, pas forcément pour draguer. Pour être dans mon trip sur la techno. J'aime bien aussi les soirées pour plus rigoler, faire connaissance. '''Tony''' : Voilà, comme moi. '''Gérard''' : Ok. Tuteur ? '''Tuteur''' : Moi, j'aime bien aller en boîte pour me détendre le week-end, quand j'ai rien à faire. Et puis, on peut sûrement faire des rencontres sympas. Et puis, quand elles disent que... qu'on peut tomber sur des gens pas cool et tout ça... ben, je veux dire, où que t'ailles, de toute façon, tu peux avoir des gens sympas ou pas, quoi. '''Tony''' : Excuse-moi, Gérard. Est-ce que je peux poser une question à cette jeune demoiselle ? '''Gérard''' : Oui, tu peux si tu veux. Mais attends, Tony. '''Tony''' : Oui. '''Gérard''' : On a Ognon qui n'a pas répondu encore. '''Ognon''' : Ben ouais, Gérard, bien sûr. Ouais, je vais en boîte. Je vais en boîte... une fois par semaine, à peu près, quoi. Tous les week-ends, plutôt le samedi. '''Gérard''' : D'accord. '''Ognon''' : Et voilà, quoi. Je m'éclate bien, plutôt dans les boîtes techno. '''Gérard''' : Ouais, mais... Ouais, mais d'accord, mais bien sûr ! Tout le monde me parle de boîtes techno, mais il n'y a pas que la techno en France. '''Ognon''' : Ah ouais, mais ça, ça dépend en fonction de toi, ton style de musique. Moi, je préfère aller dans une boîte pour m'éclater sur de la techno plutôt que... enfin, je sais pas, je me vois mal en boîte pour danser sur du rap, par exemple, ou du raggameuf. '''Gérard''' : Non, non, non. Attendez, attendez, attendez ! Attendez, attendez. On va quand même... on va quand même éclaircir la question. '''Tony''' : Ça devient intellectuel tes débats. Oulala ! '''Gérard''' : Ouais, mais... Avez-vous déjà été en boîte de nuit ? Donc, moi je peux vous le dire : oui. Parce que j'y ai été plus d'une fois. J'ai... bon, Tony, je pense que tu dois savoir... '''Tuteur''' : à la Loco. '''Tony''' : On avait dit qu'on en parlerait pas. '''Gérard''' : Non, mais justement, donc ! On va en parler parce qu'il y a quand même Jean-Marie K., tout à l'heure, qui était parmi... ouais, avec Max, qui en a parlé. Donc, maintenant, si je ne retourne plus à la Loco, c'est qu'à l'heure actuelle, bon ben, moi j'ai trouvé ma... la personne avec qui faire ma vie. '''Tony''' : Tu peux retourner en boîte pour t'éclater avec Sandy. '''Phildar''' : Ce que je voulais dire, c'est qu'on n'est pas forcés d'aller en boîte pour trouver une nana. '''Gérard''' : Voilà. Je pense qu'à la Loco, de toute manière, vous allez pas... vous allez pas trouver la chaussure à votre pied. '''Tuteur''' : Pourquoi ? '''Gérard''' : Ah ben, je pense pas. Ah non, parce qu'il y a trop de nanas... '''Tony''' : Ouais, il y a un tas de nymphomanes, il faut le dire. '''Gérard''' : Ouais, ben oui. Mais de toute manière, un tas de nymphomanes... Attendez, attendez, attendez ! Pour finir, pour répondre à la question à Tony... '''Tony''' : Oui. '''Gérard''' : Donc, moi je peux te dire : des "nymphos"... je vais te dire une chose, c'est même pas une nympho. C'est des allumeuses, pour moi. '''Crouton''' : Ah ouais, exactement. '''Gérard''' : T'as plus d'une personne, ils vont te dire : « Ouais, ben, tu me payes un verre », et après ça va se terminer juste... juste... Attendez, attendez, attendez ! Attendez. Tout le monde me dira oui ou non derrière si vous êtes pas d'accord. Mais moi, je peux vous dire une chose : que ça se termine, à la fin, juste par un verre ou par une soirée à la casba et après c'est terminé, tu revois plus la personne. '''Phildar''' : C'est une autre boîte, ça, la casba ? '''Gérard''' : Non, ça c'est... c'est mon terme. '''Phildar''' : Ah, pour dire chez toi ? '''Gérard''' : Non, non, c'est mon nouveau... mon nouveau truc. J'ai envie de dire ça, c'est tout. '''Tony''' : Ouais, Gérard, j'avais une question. '''Gérard''' : Oui, mais attends. Attendez, attendez. Me laissez voir sur Internet si des fois on a des réponses sur la première, non ? Non, pas pour l'instant. Ok reego, mais de toute manière, tu peux réagir sur Internet. Donc, c'est quoi le site Internet ? '''Reego''' : C'est irc.funradio.fr. '''Gérard''' : Voilà, donc vous pouvez réagir sur le débat de la boîte de nuit. Et le deuxième portera sur les routiers. Alors donc, Ognon, tu voulais rajouter quelque chose ? '''Ognon''' : Ouais, est-ce que ça t'est déjà arrivé ? Parce que, justement, je t'entends parler de ça... est-ce que ça t'est déjà arrivé de te faire draguer par une allumeuse ? '''Gérard''' : Euh... ça m'est déjà arrivé, oui. Oui, oui, oui. '''Tony''' : Sans indiscrétion, comment ça s'est passé ? En tout bien, tout honneur ? '''Gérard''' : Non, non, mais je peux te dire qu'en boîte de nuit, même à la Loco, même que j'étais avec Sandy — Sandy, ça fait 8 mois que je la connais — je peux te dire une chose : j'ai eu des gens, des nanas qui sont venues me voir. '''Ognon''' : Ça s'est terminé, comme t'as dit, par un verre ? '''Gérard''' : Non, non, non. Ça s'est pas terminé par un verre. C'est que... '''Crouton''' : Et avant Sandy ? '''Gérard''' : Avant Sandy, ben... avant Sandy, il n'y avait rien d'autre. '''Crouton''' : T'avais connu qui ? '''Gérard''' : À part Christine, c'est tout. '''Tony''' : On la salue d'ailleurs. '''Phildar''' : Tu l'avais rencontrée pas à la Loco, celle-là ? '''Gérard''' : Non, non, mais Tony ! On la salue pas. '''Tony''' : Ah, pardon. '''Crouton''' : Qui t'avais rencontré à la Loco ? '''Gérard''' : Ben, j'ai rencontré plus d'une personne. Bon, ben, je pense qu'elle nous écoute, donc voilà. '''Crouton''' : Non, mais c'est qui ? '''Gérard''' : Ah non, mais je ne citerai pas tous les noms. '''Crouton''' : Ah, pourquoi ? '''Phildar''' : Parce que ce n'est pas le thème du débat ! '''Gérard''' : Non, non, ce n'est pas le thème du débat. '''Crouton ''' : D'accord. Donc pour répondre à la question que tu disais. Donc, il y a des nanas qui allument, qui se font payer un verre et puis qui se cassent. C'est ça, hein ? Donc, qui veut répondre à la question ? Non, mais c'est... c'est vrai, franchement. Il y en a beaucoup comme ça. '''Gérard''' : De toute manière, dans les boîtes de nuit, de toute manière, c'est ça. Si t'es à pied et que la nana elle a un petit coup dans le verre, un petit coup dans le nez... c'est de savoir si le mec il a une voiture pour la raccompagner. Et après ça se termine dans le plumard. '''Ognon''' : Au tribunal oui. '''Gérard''' : Non, non, non, attendez ! Attendez, attendez. On se calme, Tony. '''Tony''' : Oui, ce qu'il faut dire, Gérard, aussi... '''Gérard''' : Non, non, mais Tony, on ne dit pas « ça se termine au tribunal », d'accord ? '''Phildar''' : Ce n'était pas Tony, Gérard, c'était Ognon. '''Gérard''' : Bon, Ognon ! Manu, tu me prends Ognon et tu lui dis qu'il reste... '''Manu''' : Donc, je lui prends l'Oignon et je lui dis qu'il se calme... '''Gérard''' : Non, non, tu le prends hors antenne ! '''Phildar''' : Tu prends l'Oignon de Tony... '''Gérard''' : Tu prends Ognon et tu lui dis... '''Ognon''' : Je me calme, je me calme ! '''Gérard''' : Non, non, mais tu vas aller voir Manu, là. '''Ognon''' : Non, pas de problème, je me calme, Gérard. '''Gérard''' : Non, non, mais parce que... Non, non, mais parce que moi, cet après-midi, on a fait une réunion avec toute l'équipe. Donc je voudrais... '''Phildar''' : Donc c'était cet après-midi, et là il est 1h du matin... donc on en était où ? '''Gérard''' : Oui, non, mais je voudrais que le débat se passe comme la semaine dernière : impeccabe. '''Tony''' : Qui c'est qui va me prendre le cul là ? parce que je suis perdu... '''Petit poil''' : Oui, Gérard ? Je voulais dire aussi, il ne faut pas généraliser. Toutes les filles ne sont pas comme ça, hein. '''Gérard''' : Oui, non, mais attends. C'est qui qui parle, là ? '''Petit Poil''' : C'est Petit Poil, là. '''Gérard''' : Oui, mais Petit Poil, moi je vais dire une chose. Tu as certaines nanas, quand tu les vois à la Loco, il faut dire une chose : il faut voir comment vous êtes habillées. Parce que les trois quarts... '''Petit Poil''' : Oui, les trois quarts, mais pas toutes ! '''Gérard''' : Oui, mais... Non, mais... '''Crouton''' : Moi je crois qu'il ne faut pas généraliser. '''Gérard''' : Oui, mais d'accord. Vous venez en boîte pour vous éclater. '''Tony''' : Mais nous on veut vous éclater, c'est ça le truc ! '''Gérard''' : Mais venez pas, dans ces cas-là, nous allumer. '''Petit Poil''' : Oui, mais Gérard, si on vous allume, c'est pour avoir un verre, hein. '''Tony''' : Oui, mais nous on veut bien payer un verre, mais il faut que vous couchiez ! '''Gérard''' : Ah oui, voilà ! Voilà. Non, bon. Tony, Tony, Tony ! '''Tony''' : Je ne sais pas si tu es d'accord avec moi... '''Gérard''' : Non, non, mais c'est bon, on arrête. Parce que là, sinon, la question on va en faire... On va garder... '''Tuteur''' : Je veux dire quelque chose, c'est Tuteur qui parle. '''Gérard''' : Oui. '''Tuteur''' : Il y a des filles — enfin, moi j'en fais partie, j'en ai déjà fait partie, quoi — qui viennent en boîte que pour trouver un mec. Donc... '''Gérard''' : Oui, mais Tuteur ? '''Tuteur''' : Oui. '''Gérard''' : Tuteur, est-ce que tu crois que dans une boîte de nuit tu vas rencontrer l'âme sœur ? '''Col roulé''' : Ah si si, elle va rencontrer Col roulé, c'est tranquille. Voilà. '''Gérard''' : Non, non, mais Col roulé, s'il te plaît, tu te calmes. '''Col roulé''' : Ok. '''Gérard''' : Maintenant, on va passer à la deuxième question : que pensez-vous des ball-traps en plein air ? '''Intervenant''' : Des quoi ? '''Gérard''' : Des ball-traps. '''Tony''' : Alors, un ball-trap, c'est quoi ? Reego, oui ? '''Reego''' : Non, non, ils se demandent ce que c'est un ball-trap. '''Gérard''' : Un ball-trap, c'est des soirées qui sont organisées en plein air. Style, par exemple... Non, pas la fête à Neuneu ! Parce qu'il n'y a pas de bal. '''Phildar''' : La fête des Loges ? La fête des Foire du Trône ? '''Gérard''' : Non, non. Où c'est qu'on pourrait trouver des ball-traps ? '''Manu''' : Bah, dans mon village, à la kermesse. Les kermesses, toutes les kermesses, il y a des bals à la fin. '''Gérard''' : Voilà, voilà, genre kermesse. '''Phildar''' : Il y a pas mal de bals-tringues aussi, chez Manu. '''Gérard''' : Non, des ball-traps, abruti ! '''Phildar''' : Ah, pardon. '''Gérard''' : Eh, commence pas toi parce que... sinon je vais te gaufrer, toi. '''Manu''' : Sur IRC, on me dit que les ball-traps, c'est à Trappes. '''Gérard''' : Non, mais ball-trap, c'est pas à Trappes ! '''Gérard''' : Non mais c'est des trucs pour danser, c'est pas à Trappes spécialement. '''Crouton''' : Ouais, mais t'as les farces-et-attrapes aussi. '''Gérard''' : Oui, mais ça, les farces-et-attrapes, ça c'est autre chose. '''Crouton''' : Bah, c'est comme un bal, hein. '''Gérard''' : Oui, mais... Non, non, mais... Donc, répondez déjà à la question. D'accord, alors... Donc, Crouton ? '''Crouton''' : Bah moi, je pense que c'est pas mal, mais enfin... c'est peut-être réservé à une certaine catégorie d'âge. '''Gérard''' : Oh là, mais Crouton ! '''Crouton''' : Oui ? '''Gérard''' : Crouton, t'as un téléphone sans fil ? '''Crouton''' : Bah non... Enfin, si, ouais, c'est un sans fil, mais c'est pas un portable. '''Tony''' : Ah, ça marche pas avec Gégé, ça... '''Gérard''' : Non, mais apparemment, t'as un décalage entre nous. '''Crouton''' : C'est vrai ? '''Gérard''' : Ouais, parce que... '''Crouton''' : Bah non, bah là... Moi je suis le plus près possible, je peux pas faire plus près. '''Tony''' : Allez, avale-le ! '''Gérard''' : Non, non, mais on se calme derrière, hein ! Tony, on se calme. '''Tony''' : Désolé, c'est pas moi. '''Petit Poil''' : Alors, moi je suis pas d'accord avec Crouton qui disait que c'est pour que un certain âge. Moi je dirais, quand tu vas dans des petits patelins, il y a des jeunes aussi, ils ont pas le choix. Donc il faut bien qu'ils aillent essayer les bals à Trappes pour rencontrer des personnes. '''Gérard''' : Ouais, non mais ball-trap, c'est... Non, mais attends, Tony, s'il te plaît. '''Tony''' : Pardon, pardon. '''Gérard''' : Je vais y répondre quand même, parce que c'est quand même moi qui gère le débat. '''Tony''' : Oui, oui, tout à fait. '''Gérard''' : Donc, le ball-trap, c'est un truc qui se passe en plein air avec de la musique. '''Petit poil''' : C'est comme la fête de la musique, quoi, c'est en plein air ! '''Gérard''' : Bah oui, si tu veux. C'est pour ça que je dis les ball-traps, parce qu'on peut très bien parler de la fête de la musique. Justement, ça sera la onzième question. Donc tu y reviens maintenant, donc c'est même pas la peine. Donc c'est pareil : sur la fête de la musique, est-ce que tu peux rencontrer des gens ? '''Petit poil''' : Oui, oui. Bah bien sûr, tu peux faire connaissance de plusieurs personnes en, je sais pas, en prenant un verre, en dansant, en écoutant la musique. '''Tony''' : Moi ce que je voulais dire, c'est que Petit Poil là, elle dit qu'elle voit des jeunes... mais moi je suis déjà allé à des ball-traps. Bon... '''Gérard''' : Tony, Tony ? '''Tony''' : Oui ? '''Gérard''' : Bon, vas-y alors, toi. '''Tony''' : Ouais, mais parce qu'il y a... '''Gérard''' : Non, mais court, court, court, hein ! Parce que... faut qu'à une heure... à une heure et demie... faut qu'à une heure... Non, non, mais faut qu'à une heure et demie j'attaque le deuxième, hein. '''Phildar''' : Non, on a pris plus tard, donc on peut aller au moins jusqu'à deux heures moins le quart quand même. '''Gérard''' : Non, non, non, non. Une heure et demie, comme la semaine dernière. Non, non, mais c'est pas vous qui commandez ! Donc moi j'ai les consignes : c'est une heure et demie, terminé. Le deuxième : deux heures... euh... deux heures moins le quart jusqu'à trois heures. '''Tony''' : Je peux réagir au débat quand même ? '''Gérard''' : Bon, alors... euh, Tony ? '''Tony''' : Oui, je voulais réagir à la personne qui vient de parler. '''Gérard''' : Oui, Petit Poil. '''Tony''' : Oui. Ouais, tu disais que... Mais tu sais qu'il y a un... '''Gérard''' : Attends, Tony. Moi je voudrais savoir qui c'est qui a un téléphone qui est pourri parce que là, c'est impossib. '''Phildar''' : On l'a dit, Gérard, c'est Petit Poil, c'est ça ? '''Petit Poil''' : Ah, non non, c'est pas moi. '''Manu''' : C'est pas Petit Poil, c'est Crouton. S'est rapproché de la base et ça doit aller mieux. '''Phildar''' : Ça va mieux là. '''Gérard''' : Là, on va pas continuer le débat avec un son comme ça ! '''Crouton''' : Mais écoute, Gérard, je suis déjà passée dans le débat et ça a jamais fait ça, quoi. '''Gérard''' : Ah, mais alors pourquoi qu'aujourd'hui ça le fait ? '''Crouton''' : Eh ben, je suis désolée. Je m'excuse, t'énerves pas. C'est peut-être pas que moi... '''Gérard''' : C'est pas la première fois que t'appelles, toi ? '''Crouton''' : Ben non, c'est pas la première fois. '''Phildar''' : Elle a appelé l'année dernière quand on faisait le débat la nuit. '''Gérard''' : Bon, donc Tony ? '''Tony''' : Oui, moi je voulais réagir à ce que disait Petit Poil. Parce qu'elle disait qu'il y avait beaucoup de jeunes qui venaient aux ball-traps. Moi je suis allé à des ball-traps, et les jeunes que j'ai vus, c'était des bouseux qui venaient en tracteur. '''Gérard''' : Non, mais attends ! Pourquoi des bouseux ? Non, mais attends, Tony ! Pourquoi que tu vas tout de suite chercher des trucs comme ça ? Des gens... '''Tony''' : Bah écoute, je te fais part de mon expérience. '''Petit Poil''' : C'est peut-être pas dans les bons endroits que t'as été. '''Tony''' : Bah écoute, moi je suis allé à Jouy-en-Josas. '''Gérard''' : Non, non, mais ça y est ! C'est bon, c'est pas la peine de citer les villes. Ok, Tony. Donc t'as été dans certaines villes et ça s'est mal terminé, c'est ça ? '''Tony''' : Non, pas du tout ! Parce qu'elle disait qu'il y avait beaucoup de jeunes. Moi j'ai vu que des vieux, et puis des mecs qui venaient en tracteur. '''Gérard''' : Bon, on va demander... on va demander à Tuteur. '''Tuteur''' : Bah moi j'ai... moi je sais pas, je suis jamais allée dans un ball-trap. Mais je trouve que c'est pas très sympa de dire des bouseux, parce que je trouve que c'est méprisant. '''Tony''' : Tout le monde me déteste, de toute manière. '''Gérard''' : Non, mais attends, stop Tony ! '''Petit poil''' : Mais non, pas moi... '''Gérard''' : Attends, Tuteur. Avec Aix-en-Provence, je pense que t'as dû déjà aller dans des ball-traps, me dis pas le contraire. Attends, avec Aix-en-Provence... '''Phildar''' : y a un festival en plus là-bas. '''Gérard''' : Y a pas mal de trucs. '''Tuteur''' : Mais si tu veux, ça fait que cette année que j'y habite, donc... '''Gérard''' : Ah ouais, donc y a pas longtemps. '''Phildar''' : Parce qu'il y a le festival des ball-traps là-bas. '''Ognon''' : Ouais, bah moi j'ai jamais été dans un ball-trap. Mais bon, pour les fans de bal musette et Licence IV en tout genre, ouais, ça peut être sympa. '''Gérard''' : Non, mais ça on en a rien à foutre de Licence IV ! Non, non, non, non. Non, mais moi je vais te dire tout de suite qu'on en a rien à foutre de Licence IV parce que je sais sur quoi tu veux me parler. '''Phildar''' : C'est quoi la différence entre ball-trap et bal musette, par exemple ? '''Gérard''' : Non, non, mais attends ! Licence IV, il veut parler de... '''Phildar''' :Mais c'est un groupe, Licence IV. Mais c'est du bal musette. alors quelle est la différence, Gérard, entre ball-trap et bal musette ? Est-ce que tu pourrais expliquer la différence aux auditeurs ? '''Gérard''' : Là-dessus, non. '''Tony''' : C'est pas pareil. '''Phildar''' : Ouais, c'est pas pareil. C'est peut-être pas la même musique ? '''Gérard''' : C'est pas du tout la même musique ! '''Phildar''' : Qu'est-ce qu'on écoute dans les ball-traps, alors, comme musique ? '''Gérard''' : Un peu de tout, hein. '''Phildar''' : C'est-à-dire ? '''Gérard''' : T'écoutes... de l'accordéon... '''Phildar''' : Yvette Horner ! '''Gérard''' : Non, non ! De l'accordéon, on vient de le dire. Alors euh... '''Tuteur''' : De la guitare ? '''Gérard''' : Euh, de la guitare... euh... avec qui ? '''Tuteur''' : Du synthé. '''Gérard''' : Euh... je pense pas que Jean-Michel Jarre prenne un truc sur les ball-traps, hein. '''Tuteur''' : Bah si, il doit en faire. '''Gérard''' : Non, non, non, non. '''Tony''' : Il joue de l'accordéon électronique, hein. '''Gérard''' : Ah ouais, ouais. Non, mais attends... Euh, Tony ? '''Tony''' : Oui ? '''Gérard''' : Tony ? '''Tony''' : J'ai déjà vu, j'ai déjà vu, hein ! '''Gérard''' : Non, non, mais attends. C'est toi qui viens de dire « de l'accordéon électronique » ? '''Tony''' : Oui, tout à fait, ça existe. '''Gérard''' : Donc, moi je peux te dire une chose : c'est que Jean-Michel Jarre, quand il fait venir des gens, euh... fais-moi confiance qu'il fait déplacer des camions ! Et son truc c'est... c'est pas de l'accordéon comme tu dis. C'est ça ? Non, non, mais attends Tony... Tony, tu me laisses finir ? De toute manière, on va faire... là, on va pas en discuter trop parce que je risque la semaine prochaine de faire un débat sur les synthés. '''Reego''' : Sur quoi, sur la santé ? '''Gérard''' : Non ! Le synthé. '''Phildar''' : C'est quoi ça ? '''Gérard''' : Le synthétiseur. '''Ognon''' : Est-ce que t'as déjà joué du synthé, toi, Gérard ? '''Gérard''' : Non ! '''Tuteur''' : Est-ce que tu penses que, toi, les ball-trap, c'est de la balle, hein ? '''Gérard''' : Euh... ball-trap, c'est de la balle... ça dépend dans quel sens que tu veux le dire. '''Tuteur''' : Bah, dans le sens figuré. '''Gérard''' : Ouais, mais dans quel sens ? Ouais, mais dans quel sens ? '''Tuteur''' : Bah, c'est-à-dire que c'est de la balle, c'est bien quoi. '''Gérard''' : Ouais, c'est de la balle. Tu peux même dire que c'est de la bombe, bébé ! '''Col roulé''' : En fait, moi je veux dire sur les ball-traps que j'étais un petit peu de l'avis de Tony. C'est que, en fait, bon, c'est réservé à une certaine catégorie de gens, quoi... à peu près la cinquantaine, quoi. Et plus. '''Gérard''' : Ouais, non, non, mais attendez, attendez ! Attendez, attendez, oh ! Stop, stop, stop, stop. On va pas mettre les personnes âgées là-dedans, parce que de toute manière, un ball-trap, c'est fait pour tout âge. Pour tout type d'âge. Ça peut être de 7 ans jusqu'à 77 ans. Attendez, attendez ! Et chacun fait ce qu'il veut. S'il n'a pas envie de danser sur la musique, ne danse pas. On est d'accord ? '''Col roulé''' : Mais attends, j'ai pas fini de dire ! Donc j'ai dit qu'en fait, c'était réservé à une certaine catégorie d'âge. Il y avait aussi des gens qui étaient un petit peu moins âgés, mais le problème c'est qu'ils avaient le même tempérament, quoi. C'est pour une certaine catégorie de gens, quoi. '''Gérard''' : Ouais, mais Col roulé, moi je vais te dire une chose : dans les ball-traps, tu vois tout style d'âge. T'as pas un âge spécial. '''Col roulé''' : Non, d'accord, mais c'est tous des gens qui écoutent que de l'accordéon, quoi. '''Gérard''' : Non, pas spécialement que de l'accordéon ! '''Col roulé''' : Est-ce que tu y as déjà été, toi, Gérard ? '''Gérard''' : Euh, non. '''Tony''' : Tu verras jamais des jeunes danser sur Verschuren. '''Gérard''' : Non, mais attendez ! Mais attendez ! Non, mais on va pas s'amuser à prendre des noms comme ça. Danser sur André Verschuren, sur Yvette Horner ou sur... votre... votre... Des accordéonistes on en a pas mal. '''Ognon''' : C'est bidon. '''Gérard''' : Ouais, c'est bidon. Bah si ça te plaît pas... '''Phildar''' : ça dépend de l'âge. '''Gérard''' : Non, mais attends, il y en a un qui vient de dire : « Si, c'est bidon ». Pour toi, si c'est bidon la question... c'est l'accordéon qui est bidon. '''Phildar''' : Mais dans ce cas-là, il n'en écoute pas, c'est tout. '''Gérard''' : S'il aime pas, il n'en achète pas, il n'en écoute pas. Non, mais il achète autre chose, comme CD ! '''Petit poil''' : On peut écouter les deux aussi. On peut aimer l'accordéon et la techno. '''Gérard''' : Non, mais attendez ! Parce que là, si on part comme ça sur l'accordéon et sur la techno, je peux tenir jusqu'à 3h, même à 4h, et on fera qu'un débat. '''Tony''' : D'ailleurs, moi j'ai acheté Cyber Accordéon Volume 4, c'était le top. '''Gérard''' : Bah, bien sûr ! Dis-moi plutôt : Musique de Nuit Volume 4, tu veux ? Ok Tony. Terminé, terminé, stop ! Donc, la troisième question : quel genre de danse que vous aimez ? Vous allez réfléchir à cette question. '''Phildar''' : Je répète la question : quel genre de danse aimez-vous, par exemple quand vous allez en boîte de nuit ? Parce qu'il faut bien tourner la question. '''Gérard''' : J'ai pas précisé toujours... '''Phildar''' : Dans le monde de la nuit, le monde des boîtes de nuit, des DJ, tout ça. '''Gérard''' : Et donc on va s'écouter Guy Préjean avec « Viens voir la vie de l'autre côté de l'autoroute ». Et vous pouvez toujours nous appeler au 0803 08 5000. ''[musique]''. '''Gérard''' : Donc, vous êtes toujours en direct de Fun Radio, c'est toujours les débats de Gérard. Et donc, vous venez d'écouter Guy Préjean avec « Viens voir la vie de l'autre côté de l'autoroute ». Et on récupère Crouton, Petit Poil, Tuteur, Ognon... Tony. '''Tony''' : Salut, je te kiffe. '''Gérard''' : Moi je te kiffe pas. Tony, tu restes poli, s'il te plaît, merci. Col roulé pour terminer. '''Phildar''' : Et donc, la question c'était quoi ? '''Gérard''' : Donc : quel genre de danse que vous aimez en boîte de nuit ? En boîte de nuit, même voire autre... c'est-à-dire, bien sûr, dans les ball-traps. Ognon ? '''Ognon''' : Oui, Ognon. Moi je voulais répondre. Moi il y a un style que j'adore, c'est les breakers. C'est ceux qui font des "waves", tout ça, c'est les vagues. '''Phildar''' : Ça, c'est génial. En boîte, ça se voit souvent en boîte de nuit. Généralement vers 2-3 heures du matin. '''Tony''' : Ils sont tous pétés... '''Ognon''' : Ils roulent sur la tête comme des... '''Gérard''' : Oh, ouais ! Comme des... Col roulé ? '''Col roulé''' : Ouais, bah alors moi, comme danse, ce que j'aime bien c'est le tango, tu vois. Ouais... les ball-traps, ouais. Ouais, ouais. Parce qu'en fait, c'est une technique de drague, quoi. '''Gérard''' : Non, mais attends, Col roulé. Col roulé ! Col roulé ! Col roulé ! Je pense qu'à mon avis tu reviens dans la deuxième question, et on va pas s'éterniser. '''Col roulé''' : Ouais, mais non, je t'assure ! En fait tu vois, j'aime bien cette danse, mais en plus c'est une technique de drague, quoi. Bah oui, tout à fait. Je remue, tu vois, mes petites fesses... '''Gérard''' : C'est le métro qui passe, là ? Non, non, mais attends Col roulé ! Je suis en train de... '''Phildar''' : Gérard est perturbé parce qu'il vient d'y avoir un métro à 1h15 du matin, donc ça le perturbe. '''Manu''' : Non, mais là il est passé près celui là. '''Tuteur''' : Je ne sais pas... Moi j'aime bien tous les styles de musique. Mais c'est vrai qu'en boîte, quand il n'y a que de la techno, enfin moi personnellement, ça me lourde, quoi. '''Gérard''' : Ouais. Alors attends, Tuteur. Dans ces cas-là, tu n'aimes pas du tout ce que Max il passe le soir ? Attendez, attendez. Ognon, Ognon, Tony et Col roulé ? Et Petit Poil et Crouton, vous ne dites rien. Alors donc, pour toi Tuteur, ce que Max il passe le soir entre 22h et 1h du matin, donc ce n'est pas ton style de musique ? '''Tuteur''' : Non, je n'ai pas dit ça. J'ai dit qu'au bout d'un moment, ça commençait à m'agacer. Ouais, enfin moi j'aime... moi j'aime pas tout sur la techno. Je n'ai pas dit que je n'aimais pas écouter ça. '''Gérard''' : Ouais, mais alors attends. Tuteur, Tuteur ? Moi je vais te poser une question. Admettons que tu prennes ça de 23h jusqu'à 6h du matin... '''Tuteur''' : Ouais. Ben, je ne peux pas. '''Gérard''' : Ah, ben alors dans ce cas-là, tu n'iras jamais à Clichy... '''Tuteur''' : Ben si ! '''Phildar''' : Non, mais attends Gérard, dans toutes les boîtes il y a différents styles. À la Loco, puisque tu parles en fait de la Loco... Tu restes au rez-de-chaussée, tu as de la techno. Tu vas en bas, tu as du rock. Et en haut, tu as de la funk, tu as du rap. '''Gérard''' : Ouais, mais attends. Dans ces cas-là, dans ce cas-là, pourquoi qu'elle dit qu'elle n'aime pas la techno ? Donc elle n'aime pas ce que Max il passe. '''Petit poil''' : Elle a le droit d'aimer ce qu'elle veut ! '''Tuteur''' : J'ai pas dit ça en plus, Gérard, déforme pas ce que j'ai dit. J'aime pas écouter trop de techno, quoi. Mais... '''Gérard''' : Ben ouais, mais dans ce cas-là, dans ces cas-là, toute la journée t'écoutes que ça sur Fun. '''Phildar''' : Non, on parle pas de Fun, on parle des boîtes ! '''Tuteur''' : Ouais, voilà, en plus. '''Gérard''' : Non, non, mais attends, moi je peux lui dire... '''Manu''' : Le dernier Céline Dion est quand même super deep house ! '''Gérard''' : Zora... Zora sourit. Ouais, je l'ai vu. Mais de toute manière, c'est pas... '''Phildar''' : Il vaut mieux qu'elle arrête de sourire. '''Petit Poil''' : Ouais, alors pour moi, j'aime bien tout style : salsa, zouk, techno. J'aime bien faire des pogos de temps en temps quand les mecs sont pas trop violents. J'aime pas trop le rap. J'aime bien le classique. J'aime bien un peu tout, quoi. '''Gérard''' : Ouais, mais attends... le classique, tu verras jamais ça dans des boîtes de nuit. '''Manu''' : Ya des boîtes de classique. '''Gérard''' : Oh ouais, mais où ? '''Manu''' : Ya une boîte qui s'appelle l'Opéra, où ils jouent plein de classique. '''Gérard''' : Ouais, non, mais attends. Dans ces cas-là, si on prend l'Opéra Garnier, tout ça... '''Petit poil''' : Ouais, il n'y a pas que ça ! Dans la journée, il y a des boîtes — bon, je dirai pas le nom — qui font du dancing pour les personnes. '''Gérard''' : Ouais, ben je sais, je vois. Tu veux dire 103 avenue Foch ? '''Petit poil''' : Non, non, c'est pas ça. '''Ognon''' : Pas de marque ! '''Gérard''' : Non, mais au 103 avenue Foch ils jouent pas mal de dancing. '''Petit poil''' : Ouais, mais c'est pas là. '''Gérard''' : De toute manière, là-dedans ils en jouent pas mal, et en plus c'est une radio que je déteste parce que ça c'est une radio de blaireau. '''Petit poil''' : Je parle pas de radio moi, hein ! Je parle pas de radio. '''Gérard''' : Non, non, mais moi je peux te dire une chose : c'est que... au 103 avenue Foch, c'est une radio de blaireau : c'est Radio Montmartre. Alors je vais dire une chose : le mec qui a envie de s'endormir avec Radio Montmartre et qui se réveille avec ça... Non, mais... non, mais il est complètement servi ! T'entends du André Verschuren, du Yvette Horner, tout ce qui s'ensuit. Donc, on revient presque à la deuxième question. ''[bruit de Phildar qui mâche un sandwich]''. '''Gérard''' : Donc, on entend... '''Pildar''' : Ouais, je suis en train de manger. J'ai faim. J'ai pas mangé. '''Gérard''' : Non, mais Phildar ! Phildar, t'es gentil. '''Phildar''' : Bah quoi ? '''Gérard''' : Quand tu manges, t'éteins ton micro. Tu fais pas comme mon chef, hein ? Parce que là on dirait un vrai porc qui mange. '''Phildar''' : Ah, merci. '''Gérard''' : On dirait un cochon. Alors, le chef il sait manger, mais toi tu manges comme un cochon. Donc Crouton ? '''Crouton''' : Oui. Bah moi personnellement, moi j'adore me chauffer sur de la techno, mais finir un peu sur du reggae, quoi. '''Tony''' : Toi, t'es chaude. '''Gérard''' : Mais s'il vous plaît ! Allez Tony... Tony ? '''Tony''' : Elle aime bien se chauffer, elle est chaude ! '''Gérard''' : Non, non, mais attends Tony ! Tu restes poli parce que sinon je vais t'obliger de te zapper, toi. '''Tony''' : "Chaude" aussi c'est une insulte ? Faut que tu me fasses une liste ! '''Gérard''' : Ouais, bah alors... Euh, t’expliques à Tony qu’il se calme. '''Crouton''' : Non, mais Gérard, chaude c’est pas une insulte. '''Gérard''' : Non, non, mais on va... on va pas s’éterniser parce qu’il reste encore 7 questions et il est quand même 1h20 du matin. '''Crouton''' : Alors, vas-y, pose ta 4ème question. '''Gérard''' : Alors, moi je peux... Quel genre de danse ? '''Phildar''' : Réponds au moins à la question, voilà. Qu’est-ce que t’aimes bien en boîte de nuit ? '''Gérard''' : Moi, ce que j’aime bien danser, c’est style... bah, un techno. Parce que j’ai l’habitude de... Au début, j’y allais... Bon, je suis... je suis plus, maintenant, techno, slow et... et un peu disco. Bon, voilà. '''Tony''' : T’étais plus souvent au bar, sans te manquer de respect. '''Gérard''' : Bon, Tony, s’il te plaît ? '''Crouton''' : Oui ! Mais c’est pas vrai, Gérard ? '''Gérard''' : Ok. Euh, ça m’étonnerait. D’accord. Sortez-vous en boîte ? '''Phildar''' : Attention, c’est la 4ème question. Attention, accrochez-vous, c’est la meilleure : '''Gérard''' : Sortez-vous en boîte pour draguer ? '''Phildar''' : Non, c’est faux, c’est pas la meilleure. '''Gérard''' : Pourquoi, toi ? Parce que t’as déjà rencontré des nanas, toi, dans une boîte ? '''Phildar''' : Non. '''Intervenant''' : T’as déjà dragué ? '''Phildar''' : Non. J’ai déjà dragué, mais j’ai jamais rencontré une nana dans une boîte. '''Gérard''' : Ouais, bah... Donc, Crouton ? '''Crouton''' : Bah, moi, franchement, je crois que la boîte c’est bien pour s’éclater. Mais au niveau des gars, c’est pas ça, quoi. Parce qu’en fait, c’est le gars que tu chauffes pour la soirée. Enfin, personnellement, moi je le chauffe pas parce que j’aime pas ça, mais c’est bien pour t’amuser une soirée, quoi. Puis après, basta. Enfin, moi c’est mon avis, hein. Parce que sinon, après, si tu commences à aller plus loin, en général, c’est sûr que ça va pas durer. '''Gérard''' : Euh, qui c’est qui renifle comme un cochon, là ? Parce que ça m’énerve. '''Phildar''' : Mais c’est pas le souci. T’as même pas écouté ce qu’elle vient de dire, Crouton. C’est quoi, ce travail ? Comment veux-tu, après, réagir par rapport à la question ? '''Gérard''' : Mais attends, de toute manière, tu vas pas... Sortez-vous en boîte pour draguer ? À mon avis, t’es pas forcé d’aller en boîte pour draguer, je suis désolé. '''Petit Poil''' : Bah, moi j’y allais pour draguer quand j’avais 14-15 ans. '''Gérard''' : Ouais, non, mais attends. À 14-15 ans, tu crois que les videurs, ils te font rentrer ? '''Petit Poil''' : Bah, je suis désolée... '''Gérard''' : Non, non, non, non, non. '''Phildar''' : Avec un petit billet, si ! '''Petit Poil''' : Je suis désolée, je rentrais, hein ! '''Phildar''' : Quand t’es nana... quand t’es nana,s te font rentrer à partir de 14 ans... '''Gérard''' : Donc, moi je peux te dire une chose, Petit Poil : qu’à l’heure actuelle, maintenant, pour aller en boîte de nuit, si t’as pas la majorité, c’est pas la peine. '''Petit Poil''' : Ah ouais ? Bah, je peux te dire qu’à la Loco, il y a des filles mineures qui rentrent, alors, hein ! '''Gérard''' : Ouais, ouais, ouais, ouais. Mais... '''Phildar''' : mais elles rentrent avec Gérard. Non, mais je rigole. '''Petit poil''' : Non, mais à l’époque, moi on me laissait rentrer. '''Tuteur''' : Attends, on est toutes allés en boîte à 15 ans, en fait. Donc, quand j’avais 15 ans... '''Gérard''' : Non, non, non. Non, non, non, mais attendez ! Attendez, attendez, attendez ! Attendez, parce qu’il y a... il y a d’autres personnes qui vont réagir. Donc moi, Petit Poil, moi je peux te dire une chose : là-dedans, c’est plutôt des soirées, des après-midi que les boîtes sont ouvertes aux nanas et c'est tout. '''Petit poil''' : Bah, moi je suis pas d’accord. '''Tuteur''' : Moi non plus. Pas que pour les filles, enfin je sais pas... Personnellement, moi je suis rentrée en boîte à 15 ans. J’avais un mec qui en avait 18, donc t’as aucun problème. Et puis c’est rare quand t’es... enfin, les filles de toute façon, elles font toujours plus âgées, quoi. '''Gérard''' : Parce que la personne à l’entrée ne fait pas gaffe aux cartes d’identité. '''Phildar''' : Il y a aussi le maquillage, les filles elles se maquillent. '''Tuteur''' : Exactement. Et puis ils vont pas vérifier toutes les cartes d’identité. Mais c’est vrai que les jeunes qui vont en boîte, la plupart du temps, enfin c’est... c’est des gens de... mineurs, hein. '''Gérard''' : Ouais, mais... bah ok. '''Phildar''' : Moi j’avais... j’ai une anecdote à ce sujet. C’est... je connaissais une fille qui n’était pas majeure et qui prenait la carte d’identité de sa mère pour aller en boîte. Et les mecs, les videurs, ils la laissaient rentrer. '''Gérard''' : Ouais, non, mais attends. Dans ces cas, si la personne prend la carte d’identité des parents, ça sert à rien non plus. '''Phildar''' : Bah ouais, mais elle peut rentrer en boîte. '''Gérard''' : Oignon ? '''Tony''' : Moi, je connais un mec qui paye pas ses impôts. '''Gérard''' : Bon alors, toi, Oignon, bonne nuit ! Allez, hop ! Toi... toi... Non, non. Non, non, non. Et toi, pour toi c’est terminé, Oignon. '''Manu''' : Ça y est, ça y est. Ça y est, il est parti. Et il revient pas. '''Tony''' : Non, moi ce que je voulais dire, c’est que j’allais à la Loco de temps en temps et ce que j’aimais bien, c’est aller au 3ème... enfin, au 1er étage. '''Gérard''' : Non, mais attends. Sortez-vous en boîte pour draguer ? Tony, tu réponds à la question. Ou sinon je fais comme Oignon, toi. '''Tony''' : Ah, d’accord. Ouais, bah oui, je sors en boîte pour draguer. D’ailleurs, il y a même des fois ça me surprend parce que ça marche. '''Petit poil''' : Il y en a qui attendent que ça, aussi. '''Gérard''' : Bon, bon, bon, bon. C’est bon, c’est bon, Tony. '''Phildar''' : Ce que voulait dire Tony... Excuse-moi, Tony. Ce que voulait dire Tony, en fait, c’est quand il allait au 1er étage, c’est plus facile pour draguer. Parce que c’est pas évident de draguer sur de la techno. '''Gérard''' : Ouais, mais attends. Ouais, tu montes au 1er étage, c’est archi-plein. Tu descends en bas au... '''Phildar''' : C’est pas le problème qu’il y ait du monde ou pas ! C’est ça. Mais même, de toute manière, tu peux plus draguer sur de la musique que genre de la funk ou de la soul que de la techno. '''Col Roulé''' : Ouais, d’accord. Ouais, bah moi je voudrais dire qu’en fait, je vais pas trop en boîte pour draguer, mais plutôt pour ploter, quoi. '''Gérard''' : Ouais, bah d’accord. Je vois le style que t’es, toi. T’es un gros porc. T’aimes bien mettre la main au cul des nanas. Ouais, bah si ! Bah si, de toute manière. Excuse-moi de te le dire, Col Roulé, pour moi t’es un gros pervers. Comme... comme Petit Poil vient de te dire. T’aimes bien mettre la main au cul des nanas. Parce que si la nana... si la nana est bien foutue, tu vas lui mettre la main au cul et après tu vas lui monter aux seins. Et si elle est... si la nana est bien foutue... si la nana est bien foutue, si la jupe elle est au ras des genoux, t'iras... '''Phildar''' : Si elle est pas bien, tu le fais quand même ? '''Col Roulé''' : Non, bah non. Si elle est pas bien, non. J’ai un code d’honneur, quand même. '''Phildar''' : Pourquoi ce serait toujours les canons qui se feraient ploter, pas les boudins ? '''Gérard''' : Non, non, non. Non, non, mais attends. Moi je vais te dire une chose. Pourquoi les boudins ? Parce que là-dessus je te répondrai pas. '''Reego''' : Oui, Internet... Oui, il y a Davy1 qui te demande, Gérard, si tu aimes sortir en boîte avec des sardines. '''Gérard''' : Euh, non. '''Reego''' : Et avec des thons ? '''Gérard''' : Non plus. Ni avec des maquereaux ! Voilà, ok. Alors, je pense que on va faire... Non, non. Pour l’instant, c’est moi qui va poser la question parce qu’il reste 3 minutes. '''Phildar''' : Non, mais attends, on n’a pas 5 minutes. T’es un vrai fonctionnaire, maintenant, toi ! Et à 3h t’arrêtes. 3h pile, t’arrêtes ? '''Gérard''' : Ah ouais ! '''Phildar''' : Ok d’accord. Bon, alors pose ta question, vas-y. '''Gérard''' : Alors, la question... Tiens ! Tiens, celle-là elle est bien. Tiens, toi. Comme toi, un apprenti des DJ... Lors de vos soirées, est-ce que vous aimez mixer ? '''Crouton''' : Faut avoir l’occasion, aussi. '''Tony''' : Gigi Caca, on t’écoute. '''Phildar''' : Ah non, mais c’est pas moi qui fais le débat, c’est vous. '''Gérard''' : Ouais, ouais, mais... Hé, Gigi Caca ? Toi qui sais mixer comme un cave... Parce que là, t’as un bon mixeur. ''[il désigne Reego du doigt, tout sourire, Phildar sourit aussi, entre gêné et amusé de cette attaque puérile]''. Là, lui, il sait mieux mixer que toi. '''Phildar''' : Ouais, il fait des bons jus de fruits ! '''Gérard''' : Ouais, non, non, mais lui il sait mieux mixer que toi. Et le chef, encore plus. Donc toi, t’es un... ouais, Caca Boudin. Petit Gigi. Ouais, un petit qui a besoin d’apprendre. '''Reego''' : Oui, encore sur IRC, il y a Malkavian qui me demande : "C’est quelle marque, le mixeur ?" '''Manu''' : Seb, c'est bien. '''Reego''' : Pas de marque, Manu. '''Gérard''' : Voilà. Manu, je vais te mettre une gaufre. '''Manu''' : avec du chocolat, s’il te plaît. '''Gérard''' : Oui, non, mais moi je te la mettrai au sucre, la gaufre. Donc, alors, Crouton ? '''Crouton''' : Ben ouais, ben franchement, moi je crois que c’est bien, quoi. Mais faut savoir mixer, déjà. Parce que moi, personnellement, c’est pas mon cas, hein. Mais j’aimerais... '''Gérard''' : Non, mais... non, mais attends. Crouton ? '''Crouton''' : Oui ? '''Gérard''' : Moi je peux te dire une chose. Je sais plus dans quel reportage que j’ai vu, il y a quand même des nanas qui mixent. '''Crouton''' : Oui, mais bien sûr, Gérard. Non, mais c’est pas ça que je te dis. Non, mais je veux dire, j’aimerais bien regarder, hein. Apprendre, je sais pas. C’est vrai que j’aime bien la techno, mais j’apprécie ceux qui... '''Gérard''' : Ouais, mais... mais tiens justement, comme on parle de techno et qu’on parle de mixer. '''Crouton''' : Oui. '''Gérard''' : C’est dommage que Max il soye pas là. Mais je vais demander à Reego, parce que tout le monde... tout le monde me pose la question. Par exemple, quand tu prendre le vinyle ou le disque... Est-ce que ça esquinte le disque ou pas ? '''Reego''' : Tu esquintes le disque de le passer ? '''Gérard''' : Non, mais quand tu fais le... '''Reego''' : De scratcher ? Ouais, ça l’abîme un peu quand même. Mais ça dépend du matériel. Avec du bon matériel, ça abîme pas beaucoup. '''Gérard''' : Ah, voilà. Donc, parce qu’il y a certaines personnes qui m’ont demandé si on abîmait le disque. '''Phildar''' : Des vigiles ? Des vigiles ? '''Gérard''' : Toi, tout à l’heure, toi là-bas, toi tu vas te prendre des claques, mais grosses ! '''Phildar''' : Non, mais qui t’a demandé ça ? C’est intéressant. '''Gérard''' : Non, non, mais ça c’est des gens qui m’ont demandé. Même moi, personnellement, quand j’ai vu Max faire dans des soirées, même à la Loco, même quand j’ai vu Reego dans les studios derrière, je me posais la question. Est-ce que... '''Phildar''' : On peut dire que ça use un peu. Parce qu’à la base, le disque il est lisse, et à force de passer le... le manche dessus, ça te fait un sillon. '''Gérard''' : Non, parce que tu passes la main dessus. C’était pour savoir : est-ce que le disque, après, si tu veux le réécouter, si t’as la platine tourne-disque, est-ce que le disque n’est pas esquinté derrière ? '''Manu''' : Ça dépend, parce que si t’as les ongles trop longs, ça peut le rayer, quoi. '''Crouton''' : Tu prends des disques spéciaux ? Tu prends des disques spéciaux ou n’importe quel disque ? '''Gérard''' : On va demander à Reego. Il y a des styles de... de disques... '''Reego''' : C'est pas mon débat, Gérard. C’est ton débat avec les auditeurs ! '''Phildar''' : On peut dire qu’il y a des disques en laine. Il y en a aussi en marbre. '''Reego''' : Voilà. Le mieux, c’est les disques en marbre. '''Phildar''' : Les disques en marbre, c’est plus résistant. '''Reego''' : Je te montrerai, j’ai des disques en marbre. '''Gérard''' : Tu me feras voir. Je demanderai au chef après. Petit Poil ? '''Petit Poil''' : Petit Poil, ben écoute, elle a déjà mixé chez un copain. J’aime bien ça, par contre, j’ai pas le matos à la maison. '''Gérard''' : Petit Poil ? Petit Poil, moi je pense que, à mon avis... je sais pas si Phildar pourra me répondre, mais je pense que faut compter à peu près combien pour avoir une table de mixage et tout le bon matériel ? '''Phildar''' : En temps ou pas ? '''Tony''' : 400 euros à tout casser. '''Gérard''' : Bon, Tony, s’il te plaît ! '''Manu et Phildar''' : Non mais il a raison en plus. '''Phildar''' : C’est 400 euros ! Parce qu’en fait, une bonne table de mixage, t’en as pour... allez, disons 252... Entre 250 et 400 francs. '''Gérard''' : Tu rigoles, toi ? Non, mais attends. Attends. Tu vas aller... '''Phildar''' : Combien coûte la table de mixage qu’on a derrière ? Elle coûte 342 francs, je crois, un truc comme ça. '''Gérard''' : Ouais. Je pense que... c’est dommage que Max ne soue pas là pour me répondre. Je pense qu’il faut compter entre 1 million et 2 millions de francs. '''Tony''' : C’est moins cher maintenant. Et en Russie, c’est encore moins cher. '''Gérard''' : Bon, Tony, s’il te plaît ! C’est terminé pour toi, au revoir. '''Phildar''' : C’est vrai ce qu’il dit. '''Tony''' : Non, mais c’est la crise. Non, mais c’est vrai. Non, mais attends. Mais qu’est-ce qu’il se passe ? '''Phildar''' : Attendez, on a Olivier de la Pro, un professionnel. '''Olivier''' : Non, il faut compter au moins 50 millions maintenant. Moi, celle que j’ai là-bas dans le studio, c’est 50. '''Gérard''' : Non, mais attends. Toi, c’est... '''Phildar''' : Non, mais c’est de la pro. '''Gérard''' : Ouais, mais toi c’est pas pareil, c’est avec tous tes petits boutons de caca boudin. C’est tous tes boutons de caca. '''Phildar''' : Bon, disons que c’est entre 1 million et 2 millions de toute manière. '''Gérard''' : Je demanderai... je demanderai à Max plus tard. Bon, Tony ? Tony, pour lui c’est terminé parce que là... '''Phildar''' : on va souhaiter une bonne soirée à Tony. '''Manu''' : Bon, bah ok alors. '''Tony''' : Ah non, mais attendez ! Il ne faut pas déconner, les mecs, là ! '''Gérard''' : Non, non, mais attends, Tony. S’il te plaît. Tony ! Je pense que... j’avais été clair la semaine dernière. '''Tony''' : Non, mais attends, qu’est-ce que j’ai fait ? J’ai rien fait, là ! '''Gérard''' : Non, non, mais... Alors dans ce cas, si tu continues, tu restes calme, ok ? '''Tony''' : Attends, mais on ne peut pas parler des Russes ? Je ne peux pas dire "chaud". '''Phildar''' : C’est vrai que c’est vachement moins cher en Russie, le matériel, parce qu’il y a la crise. '''Gérard''' : Non, mais qu’est-ce qu’on en a à foutre ? '''Phildar''' : Eh bien, c’est important ! Imagine, il y a des DJs français... '''Gérard''' : Mais attends, mais je ne vais pas faire un débat sur la politique là-dessus ! '''Phildar''' : Il n’y a pas de polémique ! '''Gérard''' : Non, politique. '''Tony''' : Ah, pardon. Je veux dire que les DJs français qui n’ont pas beaucoup d’argent, ils peuvent très bien aller acheter du matériel en Russie. '''Gérard''' : Alors dans ces cas-là... dans ces cas-là, c’est dommage que Jean-Marie K ne soit plus là, Sonic non plus. '''Phildar''' : Fais un appel. Fais un appel. Si tout DJ techno ou autre pourrait venir te renseigner, tu peux le demander. '''Tony''' : Écoute, moi je peux te renseigner, Gérard, puisque je mixe un petit peu. '''Gérard''' : Ouais, non, non, non, mais attends. Pour l’instant, non, non, allez, allez. On ne s’éternise pas là-dessus. Hop, la question elle va être vite passée. '''Col Roulé''' : Oui ? Il n’y a qu’à le rouler ! Il n’y a pas répondu encore. T’arrêtes pas de m’oublier. '''Gérard''' : Non, mais là, on ne va pas s’éterniser sur la question parce que là, je pense que... sinon... '''Phildar''' : De toute façon, je pense qu’on a le temps pour le débat des routiers, parce que tu n’as pas fait les questions. Donc tu peux y aller, tu peux embrayer une question au moins. '''Gérard''' : Non, mais de toute manière ils vont... Bon alors, Col Roulé, vas-y. '''Col Roulé''' : Donc en fait, moi je dois dire que, ouais, j’aime bien mixer quand je fais des soirées. En fait, je dois dire que le mieux, en fait, pour mixer, quoi, c’est que tu aies une gonzesse sur la console. C’est vraiment comme ça, tu la... '''Gérard''' : Oh, mais attends, mais attends ! Col Roulé, dans ces cas, tu prends... tu prends le truc de la Loco. Quand les nanas sont là, en train de danser, en train de s’éclater... mais attends, mais je vois ça. Je vais regarder le reportage qui a lieu vendredi sur une chaîne... sur une chaîne. Et ça, c’est un truc spécial techno. '''Reego''' : Gérard ? Sur IRC, il y a Snul qui te demande si tu aurais aimé être DJ. '''Gérard''' : Euh, non. '''Phildar''' : Pourquoi ? '''Gérard''' : Non, ça m’intéresse pas. Non. Voir trop de monde, non. '''Tony''' : Gérard, avec tout ça, j’ai pas parlé... j’ai pas parlé de ma vie de DJ. Est-ce que je peux te raconter une anecdote ? '''Gérard''' : Bon, on se dépêche, Tony, parce que... parce que là, je pense que... '''Tony''' : Donc moi, bon, je mixe un petit peu dans des soirées. Moi, ce que j’aime bien, c’est faire bouger la foule. Mais moi, j’aime pas trop qu’on me fasse chier quand je suis dans mes aigus. Ça, je voulais le signaler. Et j’achète mes disques à Techno À Port. Voilà. '''Gérard''' : Ouais, ben merci, Tony, pour ta publicité. Dans ce cas-là, tu vas aller voir Manu... '''Phildar''' : Attends, attends ! Gérard, Techno Import c’est le magasin où Max va acheter ! Donc on peut en parler. '''Manu''' : On peut le dire. On peut le dire. '''Phildar''' : Sinon après, on n’a plus de vinyle... on n’a plus de vinyle gratos. C’est bien, Tony, c’est bien. '''Gérard''' : Il retourne voir Manu au standard après, ok ? '''Tony''' : Y a pas de problème. On y passe tous. '''Gérard''' : Ouais, non, mais... Non, non, mais je pense que pour toi ça va être terminé, là. '''Phildar''' : Tu y retourneras un jour, Gérard, au standard. '''Gérard''' : Hein ? Qu’est-ce que tu dis, toi ? Moi au standard ? '''Phildar''' : Ben pour aider Manu, ouais. '''Gérard''' : Non, c’est pas moi qui va... qui va choper, qui va répondre aux gens qui sont derrière, ok ? Alors : Comment s’habiller pour aller en boîte ? Donc, c’est la dernière question. La... la, la, la, la sixième. Oh là là, merci pour le larcène. Et donc, on va s’écouter Joe Couscous avec Ma tante danse le... '''Phildar''' : Oh là, c’est de pire en pire les titres ! '''Gérard''' : Non, non, mais attends. C’est toi qui écris... '''Phildar''' : Ben oui. Joe Couscous avec Ma tante danse le reggae. '''Gérard''' : Alors, Danse le reggae. Donc, vous pouvez toujours nous appeler au 0803 08 5000 et 0800 70 5000. '''Phildar''' : À venir, le débat qui portera sur les routiers. Donc vous pouvez déjà nous appeler. Appelez Manu, voilà. Et il vous sélectionnera avec plaisir. Voilà. À tout de suite, Gérard. ''[Musique]''. '''Gérard''' : Ben Philippe, t’annonces le disque, parce qu’à mon avis c’était pas ça. '''Phildar''' : Ben, c’est quoi alors ? Joe Couscous avec Ma tante danse le reggae. Une nouveauté. C’est pas mal, là. '''Gérard''' : Ok. Donc, on rappelle Crouton ? Petit Poil ? Tuteur ? '''Phildar''' : Tu tiens debout ? '''Tuteur''' : elle est facile, hein, franchement. '''Gérard''', ''[rote bruyamment]'' : Pardon. '''Manu''' : Gérard... Gérard, tu dégages au standard. Faut que je te calme, faut que je te parle. Tu dégages au standard. '''Gérard''' : Euh, Tony ? '''Tony''' : Ouais, Ouais, le disque c’était Zoubir avec ''[deux bruits de baiser]''. '''Gérard''' : Euh, Col Roulé ? Donc, à la place d’Oignon, on a qui ? '''Manu''' : À la place d’Oignon, pour l’instant on a personne parce que la personne que je devais rappeler, eh ben... j’y n’y arrive pas. '''Gérard''' : Donc, dernière question. Donc : Comment êtes-vous habillé pour sortir en boîte ? Col Roulé ? Col Roulé ? '''Col Roulé''' : Moi je dois dire que, en fait, pour aller en boîte, je m'habille très classe, quoi. '''Gérard''' : Ouais, mais attendez ! Attendez, attendez ! Avant de répondre à la question, j’aurais bien voulu que Reego me donne un petit point internet pour savoir le nombre de connectés. '''Reego''' : Alors, petit point internet : actuellement sur le site, il y a 182 connectés. Tu vois, t’as la liste ici. La classe ! C’est quand même la classe. Et il y a Sean qui te demande s’il peut passer un bonjour à Nicolas... Ah, c’est pas le thème. '''Gérard''' : Ben non, non, mais si, si. Si, si, on peut lui faire un petit coucou à la personne. '''Reego''' : Bah c’est fait. '''Gérard''' : Donc voilà. Ben... donc... ben coucou. Non, non, mais donc on remercie tous les gens qui sont sur internet. Ça me fait plaisir quand même de voir un jeudi 182 connectés sur internet. Ça, c’est... Ça, c’est pas mal. J’applaudis. 182 ! Eh ben, continuez comme ça ! Donc, c’est bizarre parce que là j’ai fermé le Minitel, mais si je peux l’avoir devant mes yeux... '''Phildar''' : Non, ça te ferait trop mal. '''Gérard''' : Non, il y a... il y a zéro... '''Phildar''' : 47 connectés. '''Gérard''' : Bon attends... 47 connectés ? Fais voir, fais voir ! ''[il force l'appareil à se tourner vers lui et regarde l'écran]''. Attends, tourne-moi le... '''Phildar''' : Non, mais c’est pas grave, je te le dis. '''Gérard''' : Non, non, mais attends. Fais voir. Ouais, zéro connecté ! Bien sûr ! '''Manu''' : Putain, ça a chuté vite ! '''Phildar''' : Ah non, mais il y a deux minutes il y en avait 47, mais le temps... le temps que tu retournes... '''Gérard''' : Non, non, mais de toute manière vous pouvez toujours nous appeler. Donc 0803 08 5000 et 0800 70 5000. Toujours le site internet www... point fr. '''Reego''' : Voilà, exactement. '''Gérard''' : Après je sais même plus. '''Manu''' : Et le Minitel : 3615 Fun Radio. '''Gérard''' : Voilà, toujours 3615 Fun Radio. J’essaierai de... de vous répondre en direct, mais si c’est pas des conneries. Donc on va attaquer la dernière question. '''Phildar''' : Oui, ça fait déjà trois fois que tu la poses : "Comment préférez-vous être habillé en boîte ?" '''Gérard''' : Non, non, mais même je pense qu’on va en faire deux quand même, parce qu’on est jeudi. Et donc, comme les gens sont un peu sympas, ça va être le week-end, donc on va... allez, allez, on va faire 10 questions. '''Phildar''' : Ah non, non. '''Gérard''' : il reste... il reste... il restera encore deux questions après la huitième. '''Phildar''' : T’emballes pas, t’emballes pas non plus. '''Manu''' : On va en faire une et puis on va voir. '''Gérard''' : Allez : Comment êtes-vous habillés pour sortir en boîte de nuit ? On va demander à Crouton. '''Crouton''' : Alors moi, je suis habillée sexy mais pas excentrique. '''Gérard''' : C’est-à-dire ? '''Crouton''' : C’est-à-dire, j’évite tout ce qui est fluo, tout ce qui est excentrique, mais je suis sexy. '''Gérard''' : Non, mais là, sexy... '''Crouton''' : C'est--dire un petit pantalon trompette... '''Col roulé''' : Sal... '''Gérard''' : Tony, s’il te plaît. '''Col roulé''' : Non, c’était Col Roulé ! '''Gérard''' : Ouais, ben Col Roulé. Col Roulé, tu vas te calmer ! '''Col Roulé''' : Ouais, je me calme. '''Gérard''' : Sinon moi je vais te calmer, tu vas... tu vas zapper direct. Je vais faire comme Oignon. Parce que là, maintenant, faudra peut-être qu’on fasse des débats corrects. '''Tony''' : Non, mais ça se passe bien là, Gégé ! '''Gérard''' : Non, non, mais Col Roulé, pour l’instant... Moi je peux... je peux répondre à Crouton. Donc moi je peux vous dire une chose : que les trois quarts des nanas sont habillées au ras des genoux, et c’est... c’est tout juste si on ne leur voit pas leurs culottes. '''Manu''' : Elles ont le cul bas quand même. '''Phildar''' : Ouais, ou des grosses culottes ! '''Gérard''' : Non, non, non. Mais il faut dire... il faut dire que quand même les nanas, quand vous allez en boîte de nuit, vous n’hésitez pas... oui Reego ? '''Reego''' : Continue ta phrase au moins ! '''Gérard''' : Les filles, vous n’hésitez pas... vous... vous n’hésitez pas à nous allumer. '''Crouton''' : Ouais, mais n’empêche que vous aimez ça ! '''Gérard''' : Ouais, non, mais attends. Attends. On aime ça... Fais moi confiance que, tu vois, comme Tony le sait et tout le monde le sait maintenant, je suis avec Sandy. Et Sandy, jamais, jamais elle est sortie avec des trucs au ras des genoux. Parce que moi... moi je vais te dire une chose... bon. Non, non, mais attendez. Moi je peux vous dire une chose : que dans... dans les métros, quand je vois des trucs comme ça, ça me dégoûte. Non, ça me dégoûte quand tu vois des nanas comme ça ! Attends, parce que là... non, non, ouais, ouais. Ouais, mais attends. Elles peuvent être bien foutues si on veut, mais il y a des limites ! Non, non, mais ouais. Non, mais il y a des limites. '''Manu''' : Et les limites c’est des genoux, voilà. '''Gérard''' : Voilà, il y a des limites pour pas provoquer. Parce qu’après... après dans ces cas-là, on va dire : "Ouais, mais on se fait violer". Alors les nanas, arrêtez, hein ! Parce que... '''Phildar''' : Attends, tu vas un peu loin Gérard ! Ouais, mais c’est pas... c’est pas parce que tu mets une mini-jupe en boîte que tu te fais violer automatiquement. Faut pas exagérer non plus. '''Gérard''' : Ouais, mais attends. Combien que t’en vois de viols à l’heure actuelle ? '''Phildar''' : Non, mais ça on s’en fout, c’est pas le thème du débat. '''Crouton''' : Gérard ! T’es pas obligé d’être en jupe parce qu’on va en boîte. Il y a des femmes qui sont en jupe parce qu’elles y sont obligées par leur boulot. '''Gérard''' : Ouais, mais Crouton, moi dans ces cas-là, moi je vais te dire une chose : dans ce cas-là, c’est de l’harcèlement sexuel, et c’est tout. ''[rire gêné et applaudissements de Phildar]''. Si, les trois quarts des patrons, si t’es pas en mini-jupe, de toute manière t’es pas pris. '''Manu''' : Et si t’as des culottes aussi, faut pas en mettre ! '''Crouton''' : Alors, là-dessus, moi je suis secrétaire dans une entreprise et, excuse-moi, mais je trouve pas ça très sympa quand tu dis que le patron nous accepte pas lorsqu’on n'a pas de mini-jupe. Je suis en jupe, tout simplement, et j’ai jamais été harcelée, quoi. '''Petit poil''' : Ouais, bah moi j’ai été harcelée, moi ! Parce qu’il m’oblige à me mettre en mini-jupe et sans culotte ! ''[la voix nouée de pleurs]''. C’est dégueulasse. '''Phildar''' : Ah, voilà. Ça, c’est en plus... c’est dans le débat. '''Manu''' : C’est grave dans le débat, c’est grave ! Le milieu de la nuit, la discothèque, tout ça... '''Phildar''' : Bah, Gérard, ce que tu devrais faire, tu veux... elle t’a peut-être donné une bonne idée, là. Je sais plus si c’est Petit Poil... Petit Poil, tu pourrais peut-être faire, dans les semaines à venir, un débat sur le harcèlement. '''Manu''' : Mais pour l’instant, on est quand même dans la discothèque et le milieu de la nuit. Et il serait sage d’y revenir au plus vite. '''Phildar''' : Tu sais qu’on n’est pas restés longtemps dans la discothèque. On a été partout. On a été partout ! '''Manu''' : Entre René Verschuren, l'ccordéon et tout... '''Reego''' : Justement, pour reparler de la discothèque, il y a Snul sur IRC qui te demande, Gérard : "Comment faut-il s’habiller pour aller en discothèque et pas se faire refouler par le gros gorille à l’entrée ?" '''Gérard''' : Alors ça, c’est une très bonne question. Justement. '''Phildar''' : C’est bien, Reego, tu travailles bien, toi. '''Reego''' : Merci les gars. '''Gérard''' : Non, non, mais de toute manière, pour l’instant, je ne vais pas trop me plaindre de Manu, à part qu’il n’a pas toujours fait ce que je lui ai demandé. Donc, toi pour l’instant... ça va, tu te la coules douce. '''Phildar''' : La question, Gérard, tu réponds. '''Gérard''' : Donc je réponds à la question. Donc c’est qui, Reego ? Alors Snul, moi je peux te dire une chose : c’est que j’ai quelqu’un, une fois, qui a voulu aller à la Loco, qui s’est pointé en jeans et qui a été refoulé. Il était habillé tout en jean. Comme moi, souvent je suis en jean et autres. Bon ça va, parce que moi je rentre avec vous. Mais le mec, il a été refoulé. Et il s’appelle Titi. Et Titi. '''Tony''' : Je l’ai vu ce mec-là : il était venu en chaussons et avec un boa aussi. C’était abusé ! '''Gérard''' : Ouais, ouais, t’as raison. C’est celui qui nous a emmenés en Allemagne avec Sandy, d’accord ? Alors tu le connais pas, ok ? Alors tiens, Tony, comme t’as une grande gueule : comment que tu t’habilles, toi ? '''Tony''' : Je vais l'ouvrir, je vais l'ouvrir, ouais ! '''Tony''' : Ouais, bah, tu vas l'ouvrir ta gueule ! Bah, parce que moi, je vais... bon, classique : en jean, en baskets et puis en chemise. '''Tuteur''' : Ouais, tu rentres pas en baskets. '''Tony''' : Moi, je rentre ! Moi, je suis Tony de Fun, moi. '''Gérard''' : Dans ces cas-là, pourquoi pas... Moi, il y a une question que je suis en train de me poser : pourquoi pas y aller en costume-cravate ? '''Reego''' : Tu te fais refouler, Gérard, en costume-cravate. '''Gérard''' : Bah ouais, mais attendez ! Mais costume-cravate, tu vois que ça toute la journée : dans le métro, que ça soit dans les bus, n'importe où. Tu vas dans un café pour prendre un sandwich — moi j'ai vu ça cet après-midi — tu vois des mecs en costume-cravate. '''Tuteur''' : Ouais, mais c'est des cadres. '''Gérard''' : Mais attendez, mais attendez... Mais dans ces cas-là, pourquoi qu'on accepte des mecs en costume-cravate dans des boîtes de nuit et pourquoi qu'on refoule des gens en jean ? Moi, je ne suis pas d'accord, je ne suis pas d'accord ! '''Reego''' : Gérard, sur IRC, on me dit qu'on accepte les costards-cravate parce qu'on n'accepte pas les costards crados. '''Gérard''' : Bah ouais, mais même... on accepte, ça ne sert à rien. Olivier ? Olivier ? Non, non. Non, non, toi tu vas travailler ailleurs. '''Olivier''' : Je cherche les auditeurs. '''Phildar''' : Pour une fois qu'Olivier bosse... '''Olivier''' : Je suis seul à bosser mais j'ai rien fait, Gérard ! '''Gérard''' : Non, non, mais attends. Depuis tout à l'heure... 'Olivier' ''' : ça se passe plutôt bien. '''Gérard''' : J'entends Allô, allô, allô... Et je viens de regarder, c'est toi. '''Olivier''' : Alors donc, je ne dis plus allô. '''Gérard''' : Non, non, mais dégage ! '''Olivier''' : Non, je te promets, je ne dis plus allô. '''Gérard''' : Parce que ça s'est bien passé jusqu'à maintenant. Dégage ! Et voilà, hop, au revoir. '''Olivier''' : J'ai rien fait ! '''Gérard''' : Dégage ! Tu prends ton café, tu vas sur le site internet, tu vas dialoguer avec Reego. '''Olivier''', ''[sortant, boudeur]'' : Toujours pareil, et c'est tout. '''Reego''' : Tu l'as vexé, Gérard. '''Gérard''' : Non, mais même, attends... Toi, ça s'est bien passé jusqu'à maintenant. Je ne vois pas pourquoi qu'il arrive et j'entends des "allô" et "allô". '''Manu''' : Oui, moi c'est clair, on ne m'entend pas dire allô. '''Phildar''' : Donc, je me demande comment tu fais pour être aussi concentré dans ton débat Gérard. C'est extraordinaire. '''Gérard''' : Tuteur ? '''Tuteur''' : Oui, oui, je suis là. ' ''Gérard''' : Donc toi ? '''Tuteur''' : Personnellement, moi je m'habille en pantalon parce que j'ai... enfin, je n'aime pas les jupes quoi. Mais bon, ça c'est... mais c'est aussi plus agréable d'être en pantalon pour danser parce que c'est plus pratique quoi. Si tu es en jupe, bon, enfin... Puis comme disait Petit Poil... '''Gérard''' : Oui ? '''Tuteur''' : Je ne sais pas. Enfin, les jupes, c'est vrai que c'est quand même... ça allume pas mal quoi. '''Phildar''', ''[soufflant d'impatience]'' : Réveille-toi Petit Poil. On va te raser. '''Gérard''' : Allez, qui c'est qui n'a pas répondu ? Non, Petit Poil, tu viens de répondre. '''Petit poil''' : Mais non, c'était pas moi, c'était Tuteur. '''Phildar''' : Ah, c'était Tuteur, pardon, excuse-moi. '''Gérard''' : Petit Poil, vas-y. '''Petit Poil''' : Ouais, alors moi j'aime bien aller en boîte en tailleur et en robe longue pour... donc pour pas allumer justement. '''Tony''' : T'as pas chaud avec tout ça ? '''Petit Poil''' : Non, je me déshabille vite fait. '''Gérard''' : Bon, mais de toute manière, pour voir, il y a un vestiaire pour mettre les pringues. Mais faites-moi confiance : quand vous voyez après, vous êtes quand même des allumeuses. Alors venez pas nous dire le contraire ! '''Petit Poil''' : Mais il faut pas généraliser, Gérard. '''Gérard''' : Ouais, mais de toute manière, je prends pas mon cas pour une généralité, d'accord ? '''Petit Poil''' : Ok, chef. '''Gérard''' : Ok ? Bon, alors maintenant on fait la conclusion. Donc, Crouton ? '''Crouton''' : Bah, moi la conclusion, c'est que ça a pas apporté grand-chose sur ce débat. Donc bon, je veux dire, il y a eu des choses peut-être intéressantes pour certains. Enfin, pour moi, je trouve pas. Mais peut-être que pour certains il y a eu des choses intéressantes. '''Gérard''' : Non, mais est-ce que... est-ce que pour toi, est-ce que le débat s'est bien passé ? '''Crouton''' : Ah oui, ça c'est sûr, il s'est très bien passé. Mais il y a peu grand-chose d'intéressant parce que je trouve que tu t'es énervé un peu trop vite. '''Gérard''' : Non, non, non, non, non ! Non, non, non, non. Hé, Crouton ? Crouton, je me suis pas énervé. Je pense que je vous ai répondu à chaque question que vous m'avez posée. '''Crouton''' : Gérard, t'as trop généralisé sur tout le monde. T'as pris un exemple et ça y est, t'as généralisé. '''Gérard''' : Bah oui, mais de toute manière, là-dessus, je suis obligé de... de voir pour essayer de... de mettre un peu d'ambiance. Ok ? '''Phildar''' : Ah, t'as eu raison, t'as un peu d'ambiance. '''Crouton''' : Ah pour de l'ambiance, t'en as mis... '''Gérard''' : Ouais, bah pour un... à part Oignon que j'ai viré, sinon j'ai viré personne. Ah, maintenant Max est là ! Donc Max, il va peut-être nous renseigner sur le prix de... '''Manu''' : C'est deux millions, deux millions ! '''Max ''' : J'ai écouté, j'ai écouté. '''Gérard''' : Donc pour toi, dans les soirées, est-ce que vous aimez mixer ? Donc on m'a dit que... bon... ''[Olivier revient]''. Non, toi, dégage ! Merci Olivier. '''Max''' : Non, je t'écoute... C'est quoi la question ? '''Gérard''' : Non, parce que j'ai demandé... '''Max''' : J'ai écouté, j'ai écouté. Donc on m'a... j'ai entendu des chiffres, j'ai entendu des chiffres. Donc genre, pour le prix, combien coûte aujourd'hui du matériel pour mixer correctement ? Donc j'ai entendu un, deux millions. '''Gérard''' : Non, moi j'ai dit c'est... '''Max''' : Non, Olivier a dit cinquante millions. J'ai écouté, c'est pour dire. Il a dit qu'il était comme toi, peut-être entre un et deux millions. '''Gérard''' : Non, non. Il m'a dit deux cent cinquante balles. '''Max''' : Non, ça c'est la table de mixage ! Reego a confirmé. J'ai écouté : deux cent cinquante-quatre francs. J'étais là. '''Gérard''' : Oui. Et toi, pour toi personnellement, toi qui es... qui es un grand amateur de mixage, toi qui aimes bien mixer ? Donc pour toi le prix, on va... '''Max''' : Alors moi, je pense qu'il faut aujourd'hui plus un ou deux millions. C'est-à-dire que si tu veux du bon matériel pour mixer un peu comme à la Loco, je pense qu'il faut mettre dans les sept, huit millions. Nouveaux !<ref name="hist5"></ref> '''Gérard''' : Donc ça fait soixante-dix mille... soixante-dix mille francs. Soixante-dix mille à quatre-vingt mille... '''Max''' : Quatre-vingt mille francs à peu près. Pour une table de mixage, j'entends. Si tu veux avec les platines — moi j'ai ça chez moi — il y en a pour cent-vingt mille balles. '''Gérard''' : Ah bah d'accord. '''Max''' : Attention... Non mais ce qui est bien après, c'est qu'une fois que t'as le matos — je parle pas des amplis, des enceintes, s'il y a plus des amplis, des enceintes faut rajouter quarante mille balles — après ce qui est bien, c'est que les disques, bon c'est du vinyle, comme c'est en import, souvent c'est des imports. '''Gérard''' : Ouais, comme Tony nous a dit. '''Max''' : Bon, je vais acheter ça, tu l'as dit tout à l'heure, sans faire de marques, chez Techno Import. '''Gérard''' : Non non, c'est Tony qui l'a dit, c'est pas moi. '''Max''' : C'est à peu près dans les quatre-cents francs un disque. Bon, c'est pas très très cher. Après... après c'est pas très très cher. Quatre-cents francs le disque, moi j'en achète à peu près quarante, je m'en sors pour quatre-mille à dix mille, enfin entre quatre et quinze mille, vingt mille francs. '''Gérard''' : Une question... Une question qui... '''Max''' : Te brûle les lèvres ? Elle te brûle les lèvres ? Je crois non.  ? '''Gérard''' : Je l'ai posée à Reego et Reego m'a dit que ça... il me dit oui. Est-ce que quand tu mixes, par exemple avec le disque comme tu fais toi à la Loco... Est-ce que ça l'abîme ou pas ? Reego me dit oui. '''Max''' : Oui, parce que le problème c'est que lui c'est un DJ de hip-hop, ils savent pas manier les disques. '''Phildar''' : Il l'a dit trop vite ! '''Gérard''', ''[entre sourire et vanne]'' : Toi tu te tais, tu sais pas mixer ! Alors toi, va prendre un mixer ! '''Max''' : Non mais en techno, en techno, on scratche pas comme ils scratchent. Nous on utilise pas ça, le scratch. On utilise un peu le velcro. '''Gérard''' : Mais est-ce que ça... est-ce que ça abîme ? '''Phildar''' : Non, parce que ça agrippe. '''Max''' : Non, ça l'abîme pas. Ça abîme pas le disque que tu veux mettre. Parce que si tu veux pas abîmer le disque que tu veux mettre, par exemple au lieu de jouer la face A, tu vas faire exprès de scratcher sur la face B. Comme ça, le disque que tu veux écouter c'est sur la face A, tu l'abîmes pas le disque. Non mais c'est une technique. C'est une technique, c'est très technique, je reconnais. Je m'excuse, je fais un peu une parenthèse : si vous voulez pas abîmer les morceaux que vous aimez bien sur le vinyle, par exemple si sur la face A c'est le morceau que tu adores et que tu veux le mixer, pour pas l'abîmer, tu joues la face B. '''Gérard''' : Ouais, mais dans ces cas-là, tu retournes le disque ? Mais comment tu peux retourner le disque quand t'es en boîte ? '''Max''' : Tu joues pas ! Tu joues pas le disque, '''Phildar''' : Tu l'écoutes pas c'est tout ! '''Max''' : C'est-à-dire que tu vas passer un disque en disant : "Voilà, sur la face A, je voulais passer le tube de Das Fuck, Das Puck". Et bah tu te dis : "Ok, je vais pas abîmer mon disque en mettant les doigts dessus, donc je joue l'autre face". Donc c'est un morceau qui est pas connu, mais les gens savent que sur ce morceau pas connu, sur l'autre face, y'a le tube. '''Gérard''' : Donc ça abîme pas... '''Max''' : Non, ça abîme pas la face A. '''Gérard''' : Ouais, non mais même que ça soit la face A ou B, on s'en bat les... '''Max''' : Non, ça le bousille le disque ! Ça le raye ! En gros, t'achètes le disque, tu le mets trois fois en soirée, il est mort. Faut en racheter un. Et un disque, je te dis, ça coûte pas cher, Reego peut te dire, en hip-hop c'est à peu près pareil, à 5 francs près, c'est dans les 400 francs. Normal. En import, ça va coûter 600 balles le disque. Mais ça vaut le coup ! '''Reego''' : Et en marbre, encore plus cher ! '''Gérard''' : Ouais, mais je pense que maintenant on n'arrive plus à trouver. Maintenant c'est... '''Max''' : C'est-à-dire que si tu cherches le live du Palais des sports de Johnny en 77 en vinyle, c'est un peu dur. Non mais en techno, c'est à peu près 600 francs le disque, c'est pas très très cher. Pour faire une bonne soirée, pour faire un bon mix de 3 heures, il te faut à peu près 50 disques. Donc tu calcules : 50 disques à peu près, on va dire 110 pour faire une nuit complète, 200 000... à 600 francs le disque... 200 000 ? Ça fait à peu près 60 000 francs. Pour 60 000 francs, tu peux faire une bonne soirée. '''Gérard''' : Et donc, grosso modo, donc pour finir, pour répondre à la question que j'ai posée — de toute manière, j'aurais pu la poser la question à tous les auditeurs... '''Max''' : Oui, vas-y, pose la question ! '''Gérard''' : Donc c'est que pour toi, donc tu serais prêt à mettre combien dans toute une table ? Donc toi, pour toi, 120 000 ? '''Max''' : Ma bite entière ! '''Gérard''' : Je te remercie, Max. Donc, Crouton ? '''Crouton''' : Oui, bah je viens de te faire ma conclusion. '''Gérard''' : Donc Petit Poil ? '''Petit Poil''' : Ouais, bah alors moi je dirais que certaines choses t'as raison. Mais en fait, certaines choses tu crois toujours avoir raison et en fait quand on n'est pas d'accord, tu essaies toujours d'avoir le dernier mot, ce qui est dommage. Mais bon sinon ça s'est bien passé, c'était calme. On kifferait... enfin ça serait bien que ça bouge un petit peu. '''Gérard''' : Ah bah que ça bouge ! Si vous voulez que ça bouge, dans ces cas-là, le deuxième, je vais bouger plus ! Ok ? Je vais m'énerver et ça va être encore plus dur. Parce que là, je vais m'attaquer... je vais m'attaquer... sur un truc que j'ai vécu : c'est les transports routiers ! '''Phildar''' : C'est du lourd ! '''Petit Poil''' : Ouais, mais on a déjà fait ça, les routiers. '''Gérard''' : Et alors ? Si ça te plaît pas, tu fais une chose : t'écoutes ta radio, tu zappes sur une autre radio, ok ? En de bon entendeur, salut ! ''[applaudissements du studio)''. '''Petit Poil''' : Ouais bon bref. Non mais ce que je veux dire... non mais t'es pas obligé de t'énerver pour avoir de l'ambiance. '''Gérard''' : Non mais attends ! Dans ces cas-là, tu me dis : "Ouais, je me suis pas énervé". Mais attends, moi c'est... c'est mon chef qui m'a dit ne pas m'énerver ce soir. '''Max''' : Non mais tu peux t'énerver si ça reste cohérent. Si tu t'énerves sur quelqu'un qui dit des conneries, d'accord. Si tu t'énerves parce qu'un mec à un moment donné parle au-dessus d'un autre, c'est pas normal. Par contre sur les routiers, ça risque de gueuler, mais c'est normal, c'est ton métier. C'est un amour de métier ! '''Phildar''' : Tu sais de quoi tu parles ! Putain merde... ''[applaudissements du studio]'' '''Gérard''' : Alors Tuteur ? '''Tuteur''' : Moi c'est la première fois que je participe à ton débat et je trouve que c'était plutôt cool quoi. Faudrait qu'on s'écoute un peu plus les uns les autres, parce que c'est un peu le bazar des fois. '''Gérard''' : Ouais non mais attends. Écoutez-nous les uns les autres '''Phildar''' : Et aimons-nous aussi ! '''Tony''' : Oui, aimons-nous, aimons-nous ! Mais moi je voulais... puisque Max est là. Il faudrait que tu lui demandes parce que tu ne me croyais pas : le prix d'une platine russe. '''Max''' : Alors, le prix d'une platine russe ? J'ai entendu parler d'en euros... '''Phildar''' : 400 ? '''Max''' : Ouais, c'était à peu près ça. Alors là, en russe, pfiou là là ! '''Manu''' : Ça fait 24 francs français je crois, je ne sais pas. '''Max''' : Mais là-bas maintenant, ça s'échange avec des bouteilles de vodka. Donc il faudrait parler en Vodka. Je sais qu'une platine avec du bon matériel en URSS — moi j'ai vu ça — ça vaut... '''Phildar''' : C'est Pierre Import. Moi je l'ai vu chez Pierre Import. '''Max''' : Je ne sais pas... Je crois que c'est pour deux putes ukrainiennes. Je pense que tu peux avoir du bon matos. '''Tony''' : C'est une demi-Lada quoi. '''Max''' : Ouais, à peu près ouais. '''Gérard''' : Bon. Col Roulé pour terminer. '''Col Roulé''' : Ouais voilà. Bon bah pour ma conclusion, moi je voudrais dire que au début du débat je me doutais que les filles étaient des allumeuses en boîte de nuit, mais là j'en ai eu confirmation. Voilà. '''Max''' : J'ai beaucoup apprécié ce qu'a dit, Gérard. Effectivement pour les filles qui se permettent de mettre des choses ras-la-foufoune jusqu'à la hauteur des genoux, moi je trouve ça également... je trouve que c'est en fin de compte, c'est provoquer l'acte sexuel. '''Gérard''' : Voilà. Donc moi, conclusion de ce débat : bon bah, je pense que j'ai pas trop de choses à rajouter parce que j'ai répondu à peu près à vous, à toutes vos questions. Même sur internet — peut-être que j'ai pas pu tout... tout le monde a pas pu comprendre ce que je disais — '''Reego''' : En plus là ça augmente, il y a 250 personnes ! '''Phildar''' : Oh là là ! Qu'est-ce que tu donnes... '''Gérard''' : Donc bon bah, le deuxième débat portera sur les routiers. Donc on va s'écouter Patrick Petit Suisse avec "Ma cravate marche au diesel". Et vous pouvez toujours nous appeler... ''[Max explose de rire]''. bah mais attends c'est l'autre cave... donc les numéros à rappeler, Manu ? '''Manu''' : Non, ça a l'air de marcher toujours. 0803 08 5000 et 0800 70 5000 si ça marche. '''Gérard''' : Et toujours 3615 Fun Radio, rubrique Direct et toujours l'internet www.fr FunRadio. Et je vous retrouve d'ici 10 minutes ! == Le débat sur les routiers == === Contexte === === Les personnages === === Transcription === C'est Patrick Petitsfils avec Macarvan, Marchaud, Diazel et donc c'est toujours les débats du rare 2h10 Donc vous pouvez toujours nous appeler au 0870 5000 et 0803 085000 et toujours le 3615 Code Pen Radio rubrique directe et pour l'instant j'ai zéro connecté C'est pas cool ça hein ? C'est une honte Et sur internet donc vous pouvez toujours nous laisser des messages Donc www.frfunradio.com Et on va bientôt atteindre les 300 connectés Oh là là, le blé qu'on va se faire encore Eh ben c'est bien Donc on va accueillir Arnett pour le deuxième débat qui portera sur les routiers quand même Arnett bonsoir Bonsoir Gérard On peut écouter Fun Radio sur 101.9 Ouais exactement Alors 35.9 C'est quoi là Manu ? C'est moi Non mais tu donnes ton nom correctement s'il te plaît Parce que moi je vais pas m'amuser à faire 35 tonnes sans arrêt C'est son, comment tu dis ça ? Son QRZ Son QRZ Ouais QRZ ok Voilà je suis un cibiste et tout Ok donc on peut écouter Fun Radio à Arras sur 96.9 Tu me confirmes bien la fréquence ? Ouais je te confirme ouais Ok Je te copie Pas mal Tout est bon me saoule bonsoir mon amour il n'y a pas de ton amour d'accord ok tu as pas commencé comme ça ok moi je te dis tout de suite je suis pas ton amour ok alors bon d'accord donc on peut écouter fun radio à brest sur 98.9 non elle est pas là elle est pas là ou quoi elle qui ça tu me saoule ouais mais si elle est là je suis là moi je t'écoute on peut écouter un peu de radio sur à brest sur 98.9 c'est bien ça c'est tout à fait ça non mais non c'est pas ça mais si ça lui fait plaisir donc horloge 18 ans d'art cachons peut écouter fun radio sur 92.fm oui dégage non bonsoir gérard je vais te calmer manu parce que sinon je vais t'attraper ta tête je vais te l'éclater opération cornet de bif tu vois je vais prendre un pétard je vais te mettre ta cervelle sur une bagnole ok alors tu éteins ton micro et je ne veux plus t'entendre ok donc dégage 21 ans on peut écouter fun radio à la balle sur 102.3 exactement gérard pas du tout on peut écouter qui sait qui commence là et frigo on va trouver qui c'est vas-y frigo oui bonsoir gérard big big up à tous pardon voilà donc on peut toulon 93.1 je confirme je confirme ok donc première question sur les routiers et que pensez-vous des routiers on va demander à un frigo ouais moi je trouve que c'est une bonne solution parce que toute façon sur les routiers on pourrait pas manger c'est clair ouais donc il en faut il en faut et oui mais moi si j'ai envie de manger j'ai envie de manger mais moi si je te dis si on se met en grève et qu'on peut plus râler s'il peut plus rallye alimenter les grandes surfaces que je fais c'est les emmerdeurs dans ces cas là ah ouais mais c'est dans emmerdeurs mais attention c'est leur game pas quand même ah ouais mais faut pas qu'ils se mettent en grève ah ouais mais attends dans ces cas là non mais attendez attendez parce que là je connais le truc moi je peux vous dire une chose quand tu as un patron qui dit bon ben il faut que tu sois y'a telle heure là bas ouais mais si t'es pas ouais mais faut que tu respectes quand même le temps de coupure parce que moi j'ai vécu l'expérience avec un chauffeur là il y a quinze jours on était en allemagne il fallait que quand même qu'ils respectent ces temps de coupure c'est quoi les temps de coupure par exemple tu roules huit heures faut que tu t'arrêtes au moins trois quarts d'heure pour pisser non non tu t'arrêtes trois quarts d'heure comment pendant les trois quarts d'heure tu fais quoi eh ben tu te reposes tu te mets dans ta couchette et tu t'allonges et tu dors il foutait rien ok ah ouais mais il foutait rien mais attends arnett il foutait rien c'était horloge ouais ben horloge s'il foutait rien ben je suis désolé mais ils vont pas risquer leur vie à cause d'un patron on est bien d'accord mais nous notre bouffe elle arrive en retard aussi ouais mais d'accord votre bouffe elle arrive en retard mais de toute manière parce que trois quarts d'heure au départ ça fait six sept jours à l'arrivée non non non non non non en plus elle est périmée en plus après ouais ouais c'est ça t'as bien t'as raison tu me prends pour un con toi non non non non tu m'y prendrais pas tu m'y laisserais ok alors attention à toi horloge ouais mais attention à toi horloge parce que maintenant tiens ben comme t'as on va demander à des gages écoute moi Gérard c'est un métier que je respecte tout particulièrement parce que je trouve que c'est un super métier d'accord alors maintenant horloge avec ta grande gueule oui maintenant tu vas l'ouvrir bah écoute moi je pense que les routiers font pas aller ils font pas un métier si difficile que ça faut pas exagérer non plus quoi non mais attends attends tu sais combien de temps qu'ils passent sur la route non ils passent pas loin de sur un an par exemple sur un an ils rentrent chez eux à peu près à peu près ça dépend des pays où qu'ils vont mais t'en as les trois quarts ils sont à peu près cinq jours sur la route par an alors je vais dire une chose non non non non non mais attention parce que là là je m'attaque à c'est moi qui ai décidé de faire ce débat-là parce que normalement on avait prévu la politique et je veux pas leur en faire donc avec Max on avait décidé de changer donc maintenant les questions sont pas préparées maintenant ça va être des questions que je vais vous poser mais faites-moi confiance parce que d'habitude quand tu les prépares tes questions c'est pas toi qui les pose si si ah bon d'accord donc je peux je peux vous dire que le premier qui va déconner sur là par contre moi je vais te dire une chose que c'est pas les routiers qui créent les accidents parce qu'il faut dire une chose que d'accord on s'en prend toujours aux routiers mais il faut dire une chose qu'on est bien content de les trouver mais les trois quarts du temps c'est c'est les bagnoles c'est des nanas même voire même des mecs ou même des motos qui s'amusent à perdre les cons par exemple moi je l'ai vu il y a 15 jours trois semaines hein fais-moi confiance qu'un mec sur deux une pile ou que les routiers ne peuvent pas doubler le mec qui roule à 60 je suis désolé le mec le routier c'est il y a des panneaux qui sont interdits pour doubler pour eux il peut pas doubler il a beau faire des appels de phare aux mecs eh ben le mec il n'en a rien à foutre à part freiner les mecs qui s'amusent à perdre ça pour moi qui reste chez eux qui prennent leur voiture le dimanche ou qui prennent les transports en commun ça sera mieux ça coûte encore moins cher ça prend moins de pollution ouais mais le transport en commun sur l'autoroute c'est pas évident ouais mais attends maintenant il y a le météore et puis il y a des tramways nommé désir ouais non mais t'as des tramways et t'as des t'as des bus euh l'ailerois 6 bus tout ça ouais non mais t'as des bus hein donc euh tu me saoules ouais bah moi c'est clair hyper sympa ouais mais néanmoins sur l'autoroute sache qu'il me gonfle mais puissant quoi parce qu'il me bloque à chaque fois ah mais attends c'est pas toi qui les emmerdes aussi euh non mais quand je te dis ça c'est qu'il roule pas vite et franchement ça me fait perdre ouais mais ils sont ouais mais euh dans ces cas-là si tu peux pas les doubler dans ces cas-là j'ai rien contre eux mais simplement ils me font chier ils me font chier sur la route ouais mais mais attends dans ces cas-là si on vous fait chier sur la route si les les routiers te te font chier sur la route dans ces cas-là pourquoi tu prends ta bagnole dans ces cas-là tu prends tu prends une une mobilette et bien euh tu seras tranquille oui mais Gérard la route n'appartient non mais attends sur autoroute tu as quatre voix alors viens pas me dire à moi que tu peux tu peux pas doubler parce que là moi je vais te dire une chose que t'as eu ton permis dans une pochette surprise il n'y a pas besoin de permis pour la mobilité ouais non mais peut-être mais c'est pas moi les routiers je les aime bien mais ils me font chier c'est tout ouais bah alors dans ces cas-là le jour où tu vas te faire quoi c'est entre deux routiers hein et tu verras que qu'est-ce que ça va te faire 35 tonnes 35 tonnes ouais alors moi je voudrais dire en fait que les routiers bah je les aime bien quoi parce que bon comme je suis comme je suis cibiste et tout bon des fois on discute ensemble non mais attends est-ce que est-ce que t'es routier ou pas non non je suis pas routier je suis cibiste moi c'est pas pareil non mais attends faut pas qu'on qu'on fonde ton tracule et on cule ta sœur exactement c'est la cibille avec les routiers je vois pas le rapport moi je te parle que pensez-vous des routiers donc je te demande pas si t'es cibiste ou pas moi je m'en fous tout les routiers ont une cibille j'ai une cibille donc j'écoute les routiers donc on discute ensemble et donc je dis qu'ils sont sympas voilà ah ok arnett internet pardon tu m'excuses mais je prends une question je prends les questions les plus importants sur internet bah tu l'as dit oui en attendant sur IRC il y a je sais plus comment il s'appelle des mercelles qui disaient que il y a des pistes cyclables pourquoi il ferait pas des pistes camionnables ça n'existe pas et je pense pas qu'ils en feront et pourquoi non mais pourquoi ils en feraient pas non mais il n'y a pas il n'y a pas des des commandes les accidents c'est pas les routiers qui les font faut pas dire tout ça que ça soit il est routier en fin de compte ils ont ils sont au volant 24 heures sur 24 tu t'affirmes toi d'accord merci donc les les chauffeurs sont au volant 24 heures sur 24 derrière leur camion et les mecs qui sont en bagnole ils sont même pas 24 heures sur 24 ils prennent leur boulot pour aller pour aller ils prennent leur bagnole pour aller au boulot ils posent leur bagnole ils vont bosser et ils ont rien à foutre de ce qui se passe après les routiers les routiers les routiers c'est leur boulot c'est leur game pain ok alors arnette ouais alors moi j'aime bien les routiers mais quand même il ya des limites parce qu'un jour j'ai voulu aller au disney à cause de j'ai pas pu puisqu'ils étaient en grève et ils ont bouché l'autoroute dans un temps arnette ouais arnette déjà pour aller à euro disney tu as deux possibilités tu prends ou l'autoroute ou la nationale en vient pas me dire vient pas me dire qu'ils ont bloqué l'autoroute et la nationale parce que je te dirai tu as un menteur bah ouais mais moi j'ai une voiture c'est pas pour prendre les transports au commun donc voilà dans ce cas là tu as une voiture tu peux prendre la nationale bah oui mais c'est plus rapide par l'autoroute donc j'ai pas peur de mon temps non plus et alors bah dans ce cas là t'avais qu'à prendre la nationale ouais mais l'autoroute et de manière l'autoroute et de manière la nationale elle est pour tout le monde elle est aussi bien pour les routiers pour que pour les voitures oui l'autoroute est pareil justement il y a des routiers sur les nationales et sur les autoroutes oui pour le raisonnement de tout à l'heure pourquoi les routiers ne prennent pas les transports au commun dans ce cas là mais attend mais les gens quand ils partent de chez eux pour aller bosser ils y vont comment comment tu veux mettre un camion dans un bus ah c'est vrai désolé les gars on peut mettre un camion sur un train non mais attendez non mais ça l'histoire du camion sur les trains ça c'est une histoire du gouvernement je trouve que le gouvernement il est un peu con parce que s'ils vont mettre des l'histoire du gouvernement je trouve que le gouvernement il est un peu con parce que s'ils vont mettre des l'histoire du gouvernement je trouve que le gouvernement il est un peu con parce que s'ils vont mettre des camions sur les trains fais moi confiance qu'on n'aura plus de routiers en france pourquoi pas mettre des trains sur des camions et pourquoi pas mettre ta cervelle d'en faire plus de taffes pour les routiers à broutille tu peux faire du standard et un peu micro que j'ai déjà dit ça voudra mieux je suis donc deuxième question combien coûte un permis vl un permis quoi vpl vpl je préviens et quoi ça c'est le nom d'un vaccin tu dégages bonne nuit à toi c'est qui c'est d'être une meuf mais c'est plus laquelle non mais là tu es tu cherches au port et hop tu me vers n'importe donc un permis pl je pense que c'est un permis poids lourd voilà voilà alors combien ça peut coûter à votre avis on va demander à arnette d'après moi ça doit coûter genre dans les dix ans francs comme un paquet d'euros d'accord mais tu n'as pas de permis de voiture toi mais je n'ai pas payé très cher puisque je n'ai pas c'est aux états unis tu as passé ton permis aux états unis tu me mets tu me prends pour un con quoi j'ai passé un an d'études aux états unis et j'en ai profité pour passer mon permis là bas puisque c'est moins cher d'accord 35 tonnes ouais alors moi je pense que tu as approximativement je pense que ça doit coûter dans les 1 franc 52 francs il est lourd et moi en toi 35 tonnes 35 tonnes 1 franc 52 francs non non non mais attends c'est le prix d'une communication téléphonique hockey ouais mais non anciens je te dis pas nouveau m'arrête on attend l'ancien permis ou nouveau permis non mais de toute manière il n'y a pas d'ancien ou nouveau permis non mais ancien franc tu comprends il n'y a pas d'ancien ou nouveau permis maintenant bah si non bah si t'as le permis euro et t'as le permis franc mais attends abrouti toi qu'est-ce que tu me parles de l'euro il y a le permis euro mais attends t'es complètement si t'as le permis euro la gaffe d'accord fume l'avocate ok tu me saoules ouais je sais pas ça doit certainement coûter la peau des fesses parce que vu le nombre de manifestations qu'il faut attendre je crois que tu étais à la plaque aussi toi tu es comme 35 tonnes vous y allez à la mouiquette 1 tu me saoules ah ouais non mais moi quand je t'écoute je déconne pas tu me saoules ah ouais non mais moi quand je t'écoute je déconne pas tu me saoules ah ouais non mais moi quand je t'écoute je déconne pas Ah ouais ben fume la moquette Fume la moquette ça vaudra mieux Horloge Oui ben moi je pense que le permis tu l'as C'est celui qui arrive à boire le plus de bière à la suite D'accord horloge Parce que les routiers c'est alcoolique quand même Horloge c'est terminé pour toi bonne nuit Horloge terminé Hop ça y est il est parti Non non mais c'est même plus la peine qu'il revienne Ah ben il revient plus Pour lui Arcachon ben tant pis pour lui Dégage Ben moi franchement j'ai pas vraiment d'idée Mais je pense quand même que ça doit valoir un tout petit peu plus cher Que le permis voiture C'est à dire dans les alentours Je sais pas du permis voiture quoi Non mais attends un permis voiture vaut combien à l'heure actuelle Ben moi j'ai payé ça 10 000 balles quoi Hein Ah ben oui avec les cours excuse moi On se tait derrière Attendez attendez Tu dis 10 000 balles Ouais Tu déconnes J'ai l'impression Dégage Dégage Non mais attends dégage Dégage dégage Et derrière vous vous la fermez Merci Et dégage Déjà Rien que le prix que tu m'as annoncé C'est rien que le prix d'un permis voiture Et encore si tu l'as du premier coup Avec les formations qu'ils font C'est ce que je te dis Gérard Tu m'as demandé le prix que j'ai payé pour mon permis voiture Je t'ai dit 10 000 balles Ok Frigo Je sais pas je vais dire 100 000 francs hors taxes Non j'en sais pas du tout Hé Frigo Je pense que tu ferais mieux d'aller voir S'il n'y a pas quelque chose dans ton camion Ah mais j'ai pas de camion moi Gérard Oui C'était pour vous dire qu'on accueillait donc à la place d'horloge On accueille un petit routier Je crois qu'il a eu un accident Un truc pas possible un truc pénible Bonsoir Il va vous raconter bonsoir Oui bonsoir Salut Bonsoir Salut à toi Bonsoir Alors ? Quand tu veux Il a eu un problème avec un routier donc laisse le se remettre quand même Non mais attends tu réponds maintenant C'est pas la peine qu'il passe Appelle-le Allo Oui bonsoir Je vous écoute Moi je t'écoute Bon bah hop Mais non mais il est là Attends mais oh Je vais pas passer ma Je dois répondre à la question ou ? Bah oui Bah je viens d'arriver donc Ouais bah alors Combien quoi Combien coûte un permis PL ? Euh C'est-à-dire c'est du C'est quoi c'est du sans plomb ça ? C'est du Je dirais euh Ce soir on vous met Ce soir on vous met le feu Ouais non mais je crois que Pour l'instant Justement vous êtes en train de chanter une chanson Qui fait bien penser que les routiers quand même sont des alcooliques Ouais Parce que moi j'ai eu un accident avec Ouais Un camion Ouais Il y a combien de temps ? Il y a un an et demi Un accident Ouais Un petit accident mais pas méchant quoi Mais bon le Le routier avait un peu bu Vous parlez Vous rigolez depuis tout à l'heure sur les routiers Mais je pense qu'il y a beaucoup de routiers Vous qui vivez dans Qui roulent beaucoup Mais qui ont de l'alcool Qui boivent un peu Et je pense qu'on n'en parle pas Les routiers c'est très dangereux Parce qu'un camion c'est très dangereux Alors Euh La double est que Il est fatigué Qu'il a pas dormi depuis 48 heures Parce que les routiers vous dites Qu'il s'arrête pour dormir Mais ça il faut Il s'arrête pas pour dormir C'est pas vrai Quand ils sont en retard Ils s'arrêtent pas Ouais quand ils sont en retard Non mais attends Il accélère Attendez Attendez Attends On va Je vais répondre à la question A Fildar Alors Fildar Moi je peux te dire une chose Que si le patron Lui dit Tu vas Qui va C'est que c'est Le patron C'est de la faute du patron Parce que le mec Il risque sa vie aussi C'est peut-être la faute du patron Mais c'est pas le patron Qui va tuer des gens Le patron qui va tuer Non mais attendez Là je suis d'accord Avec tout Avec Qui c'est qui vient de répondre Aussi derrière C'est Antti Routier Et Trigo Trigo qui a dit C'est pas le patron Qui va prendre Oui Ouais mais d'accord Mais là-dedans C'est pas le patron Qui prend Si C'est Contribab Non non non Parce qu'il faut dire Attends que toi le tronc Contribu Contribu Oui oui Il a raison Attends Mais attends Tu crois que c'est le Contribab Qui va redonner Antti Routier Antti Routier Non mais je vais répondre A la nana Qui m'a dit Ça coûte 1000 francs quoi Ouais 1000 balles Un permis poids lourd Alors avec toi Ça vaut 400 000 francs Hein ? 400 000 francs Bah oui bah voyons Moi j'ai une question Gérard Est-ce que dans le permis poids lourd Il y a le camion Qui est compris avec Dans le prix Quand t'achètes le permis T'as le camion avec non ? Non En plus ou que t'achètes le camion ? Non ça dépend Moi j'ai la remorque en plus Non mais attends T'as l'air Je vais t'acheter ta remorque Je vais t'acheter Que tu as dégagé Non mais je me renseigne C'est tout je sais pas Ouais non mais moi je te dis Tu as dégagé Si tu continues Pour le routier C'est pas votre fort quand même Non mais moi je peux vous dire Moi je peux dire Qu'un permis à l'heure actuelle Coute plus de 20 000 balles Euh Gérard Non non non Quoi non ? Attends T'es mieux renseigné que moi ? Oui tout à fait monsieur Je me suis renseigné Tout à fait Je peux vous dire Qu'un permis à l'heure actuelle On voit que ça fait longtemps Que vous n'êtes plus routier Ça vaut plus 20 000 francs Ça vaut au moins 30 ou 40 000 francs Ouais bah Vous étiez peut-être routier Vous vous êtes tout à fait Le genre de routier Le genre de routier Des années 80 Mais aujourd'hui On est à l'an 2000 Ouais mais non Pour l'instant On est en 1998 Ok ? Non mais jouez pas sur les mots Vous êtes bien routier Ouais alors La troisième question La cible est-elle Un moyen de communication ? Ouais Donc on va s'écouter Gilbert Bisous Avec Donne-moi Du sud Pour Noël Et on se retrouve tout à l'heure Pour la suite du débat On doit marcher hein Donc apparemment Ça a l'air de bien fonctionner Donc C'est super ce soir C'est super C'est magnifique Merci à tous Sur internet Ça a l'air de De bien fonctionner Aussi Sur Minitel par contre Là je suis pas content Parce que Sur Minitel Y'a personne C'est pas grave Ça fait deux heures qu'on est là Il a pas fonctionné Donc on va attaquer On va attaquer la troisième question JG Il m'énerve lui Donc Troisième question La cible Est-elle un moyen de communication ? Donc 2h36 Et on est toujours Sur le thème du débat des routiers Donc on va demander à Arnett Ouais Tu sais Tu peux me répéter la question Non je sais Non non non Arnett C'est pas pour t'ennuyer C'est pas pour t'ennuyer Gérard Je te jure Non non Arnett Arnett Je ne répète plus les questions Moi je vais le répéter si tu veux Merci Manu T'es gentil Alors vas-y La cible est-elle un moyen de communication ? Alors Bah je pense que oui Oui c'est sûr Puisqu'on peut communiquer avec des gens en fait D'accord C'est automatiquement un moyen de communication Ok Ok Donc pour toi La cible c'est un moyen de communication ? Oui Ok 35 tonnes ? Ouais bah je dirais un petit peu comme Arnett quoi en fait C'est beaucoup de gens qui Ouais non mais attends 35 tonnes Ouais Faut quand même essayer Ouais non De chercher Non non mais vous avez eu le temps pendant la pause Ouais ouais De réfléchir Faut pas dire Tu t'fuis toi mais je suis Ouais mais attends 35 tonnes tu permets ? Ouais mais tout le monde est d'accord avec moi C'est pour ça Gérard Ouais mais attends Arnett Arnett pour l'instant tu vas te taire s'il te plaît Ah excuse-moi Je suis pas d'accord moi Non mais attends 35 tonnes Ouais ouais je vais répéter Bon et même les autres là qui sont pas d'accord Ouais Bon alors attends Moi je te dis déjà La cible à la base C'est un moyen de communication Tu vois comme le téléphone Donc en fait ça c'est partagé A plein de gens De l'émotion quoi tu vois Donc voilà c'est un moyen de communication C'est tout Ouais non mais Donc tu reprends la question d'Arnett Ben oui Arnett il t'a dit Que c'était un moyen de communication Non non non mais attendez Attendez Moi je vais vous dire une chose Là si tout le monde me répond Le même truc qu'Arnett Je suis d'accord avec Tarnet Ou avec toi 35 tonnes Moi je vais vous dire une chose Je vais zapper 8P Les gens Des questions Allo c'est anti-routier là Allo Non non Tu me saoules Moi je trouve que la cible C'est vachement important pour eux Au moins quand il y a un contrôle Tout de suite Ben ils sont prévenus quoi Parce que sinon Non mais attends Parce que j'ai pas J'ai pas entendu Ce que tu m'as dit Parce qu'il y en a Qui récanent derrière Bon Arnett Tu t'affirmes C'est anti-routier Bon alors anti-routier Tu commences à me les gonfler Sérieusement Youpi Parce que t'as pas laissé Parler les hommes jusqu'au bout Ouais mais attends Moi je fais ce que je veux D'accord D'accord En de bon entendeur Salut Alors pour l'instant Tu t'écrases Tu t'en vas ? Non mais pour l'instant Je t'ai pas demandé Quelle heure il était Ouais ben il y a eu 2h Ouais ben quand je t'appelle Avec Potium Tu sortiras de sous le lit Ok Alors tu me saoules Ouais donc je te disais Que pour eux Je trouve que c'est vachement Important la cible Parce que quand il y a Des contrôles d'alco-test Ils peuvent être prévenus Et puis ça leur évite De leur faire sauter Leur permis Ouais c'est ça Non mais attendez Attendez derrière S'il vous plaît Ils arrivent pas de boire Oui mais Gérard Mais qui ? La sortie routier Tu comprends que c'est normal Vraiment qu'avec la cible Justement qu'elle dit Comme ça ça permet Les routiers entre eux D'éviter de prévenir l'autre Pour que justement Il y a des contrôles d'alcool Non non non Mais attendez Attendez Attendez Attends Tu es routier Ça veut dire que Un mec qui a bu au volant Et on va le prévenir Qu'attention il y a des flics Donc on va essayer d'éviter Qu'il puisse se faire arrêter Donc il va continuer à conduire Avec l'alcool au volant Ah bah c'est ce que les routiers font Ils continuent à conduire Bah allez oh C'est inadmissible Oh tu me Oh Anti-routier Tu me saoules s'il vous plaît Vous vous calmez Mais attends Tu me saoules aussi Anti-routier Si ça te plaît pas Tu dégages Tu m'accroches Je sais que c'était à moi Que tu parlais Anti-routier Si ça te plaît pas Tu t'écrases Tu t'écrases Bah Gérard Ok Gérard Oui Ouais c'est Frigaud Je peux répondre Non mais attends On va demander Je vais On va demander Dégage Bah bon écoute Gérard moi je crois Que c'est quand même Un moyen de communication Vu le nombre de personnes Qui ont la civile Même dans les voitures Moi je suis tout à fait d'accord Parce que c'est quand même Un moyen Pour les routiers De communiquer Parce qu'à part Le camion Ils n'ont rien d'autre Donc moi je suis tout à fait d'accord Manu Tu me dégages En anti-routier Là parce que ça Y'a pas de merde On peut même pas discuter Ouais y'a pas de merde Ok Ah mais c'est incroyable La vulgarité Dans ce débat Ah bah lui Gérard Gérard sur hier C'est y'a Dav Qui te demande S'il est quitte main libre Sibi dans un camion Est-ce que c'est dangereux ? Quitte main libre Sur Sibi Pour l'instant J'en ai jamais Entendu parler Ça existe aux Etats-Unis Ah si tu viens D'en entendre parler là Oh non mais Avec ce qu'aux Etats-Unis Non mais ça Pour l'instant Aux Etats-Unis On me confirme Aux Etats-Unis En fait tu peux Te masturber Conduire Et faire de la Sibi Non c'est pas ça Non Non mais attends Parce que toi Tu te masturbes En conduisant ta voiture Et en faisant Pourquoi les routiers Ils font que ça Puisqu'ils sont jamais Avec leur femme Alors attends Alors là Je vais te dire une chose Qui c'est qui vient de dire ça ? Eh oh Alors tu es routier Alors je vais te dire une chose Que tu vois La question que tu viens de dire Non mais c'est pas une question C'est une affirmation Oui non mais moi Je peux te dire une chose Moi je vais te répondre A ta question Pendant que ta femme Elle était au boulot C'est ça ? Oui non mais moi Je vais te dire une chose Attends Je vais te dire une chose Que tu crois Que les routiers Ont que ça à foutre De se masturber Dans leur camion Non non non Si si Si si Avec la main libre Avec le système de main libre Mais attends Tu crois Tu crois qu'ils ont Ils ont des trucs Automatiques Non pas tout le temps Je pense qu'ils sont Suissis par des bruits Mais par exemple Au lieu de mettre De la cibille Il faudrait mieux De mettre l'internet Ouais D'ailleurs D'ailleurs J'ai quelqu'un Je vais te mettre Un gros doigt dans le cul Aussi Pour toi Ça c'est toi Qui balance l'info Là t'es bien routier T'es bien vulgaire T'es bien routier là Attendez S'il vous plaît J'ai une question internet Non c'est pas une question C'était juste pour dire Qu'il y a un certain Yoda Sur IRC Qui est en direct Dans son camion Bon Il est actuellement En direction vers Rouen Direction vers Rouen Est-ce que Est-ce que l'internet Ça vous sert Est-ce que Pardon La cibille Ça vous sert pas Justement à savoir Où est-ce qu'il peut Voudrer du carré de vigne Il y a deux heures du mat Allez dégage toi Allez C'est terminé C'est terminé J'ai un petit frigo Je peux répondre GG Ouais frigo Ouais Donc moi Je trouve que c'est un bon moyen De communication La cibille Puis ça permet aux routiers De prévenir Quand il y a un accident Sur leur route Ouais mais ça Ça de toute manière La cibille Je pense que Moi j'en ai fait Je peux vous dire une chose Que la cibille Bon tu vas te calmer toi Ok Donc moi je peux vous dire Une chose Que la cibille C'est un moyen de communication Pour savoir Où sont les radars Et de savoir Comment que ça roule GG Oui J'ai une question internet De la part d'Anakin Qui me demande Si t'as des calendriers De femmes nues Dans ta caisse de camion Oui Alors toi tu dégages Non mais il est sur internet En plus Mais c'est pas lui Qui doit dégager C'est le mec sur internet Ouais non mais lui Tu lui dis On lui répond plus Gérard Mais non Il est sur internet Gérard excuse-moi On va accueillir deux personnes On va accueillir Goldo Ouais Et on va accueillir Tam Tam Salut Salut GG Il était temps Qu'on va se... Salut à tous Salut Sean Salut Arnett Salut Goldo Salut Goldo Salut tout le monde Bonsoir Gérard Bonsoir On se calme Non c'est Gérard Non c'est Gérard Ben vas-y vas-y Pose ta... Tam Tam Tam Tam ouais Bonsoir Salut Tam Tam Bonsoir Donc t'as entendu la question là ? Oui Donc je la répète pour Goldo et Tam Tam Donc la Cibie était la moyenne de communication En... Pas 50 ans Tout à fait Oui Pour moi oui Pour moi Tam Tam c'est la moyenne de communication Ça permet effectivement Lors des accidents Des contrôles radars De prévenir Voilà Donc tu reviens à ce que Ce que je disais À l'instant Attends 5 minutes Tam Tam Oui sur IRC On me demande Si tu connais la mini Cibie Mini Cibie Oui c'est Non c'est un petit truc De poche Ouais c'est un petit truc de poche Un genre de portable De toute manière C'est ici C'est ici D'accord C'est ici Ouais ouais c'est des Cibie portables Non non Non non Non non Non non tu rigoles Pildar Mais moi je réponds Je réponds Moi je vais dire une chose Que la Cibie portable Tu n'entends même pas La personne que t'as Ouais Et t'es capable Donc en fait t'es capable T'es capable De l'avoir dans la main Ouais non mais C'est comme un téléphone portable Mais sauf Sauf que T'as les canaux Qui s'affichent C'est un peu incroyable non ? La distance du portable C'est à combien de distance ? Euh Sur la Cibie portable Je pense que C'est à peu près La même distance Que le portable 2 mètres 50 Ouais non même pas Même pas Mais il paraît que Il paraît que le son Est excès crabe Ouais ben ça Ça dépend de l'antenne qu'on a Ça dépend des country bab Non non non non Ça dépend de l'antenne Qu'on met dessus Ça dépend de l'antenne Non non mais stop Là on va On va couper Parce qu'il est quand même 3h 2h45 Salut à tous Merci en tout cas C'est qui ? Ah c'est pas fini ? Là tu dis qu'on coupe Alors non Non non mais On va abréger sur la question Maintenant moi je vais Une question Qui m'est revenue Et il y a Il y a un auditeur Qui est là Et il y a un auditeur Et qui m'a demandé De la poser Combien coûte Pour faire décorer Son camion ? Oh là là J'ai vu un reportage Par exemple Non non ouais ouais Un reportage Ouais voilà Ouais C'est qui ? C'est qui là ? Tam Tam J'ai vu le reportage Ouais Arlette aussi je l'ai vu Et c'est hallucinant Ce que ça coûte cher A ton avis Non non mais Grosso modo On va On va pas S'acharner Sur ça A ton avis Combien que ça peut coûter ? Parce que Manu m'a dit Qu'il fallait que je réponde En euros C'est obligé ? Non non non Pas en euros C'est mieux C'est la nouvelle norme Éteins s'il te plaît Manu merci Non non Non non Tam Tam Non non mais sans Sans parler d'euros En franc français Ouais Je dirais 30 000 francs 30 ? Ouais 30 000 Qui dit mieux Donc pour toi Ça coûterait 30 millions Avec toutes les guirlandes Et tout A peu près Non non non Simplement Pour faire décorer L'extérieur Pas l'intérieur Ah pardon Je dirais 100 000 francs Ouais mais le tout Grosso modo Qui me dit 100 000 francs 100 000 francs alors Pardon Avec la peinture 100 000 francs Avec 50 000 francs Avec la peinture Je te fais un prix GG Je te fais un prix moi Ok Attendez Tam Tam Tu me dis 50 ? 50 000 francs Avec la peinture 50 000 avec la peinture Ouais Goldo Ouais bah moi je te disais Je te fais un prix Si tu veux pour écrire Un poste d'André Ou un camion C'est un camion Pas de problème Je te fais ça pour Ouais bah Goldo Goldo Goldo Au revoir Va va va Va va Essaye de De continuer Non mais continue Continue à voyager Mais c'est une décoration Non non non Allez hop Goldo terminé C'est qu'il a pas compris C'est pas les écritures C'est les peintures Les dessins Tu parles de publicité Tout ça Poissonnerie Boucherie Pour les livraisons Excuse moi J'ai pas compris Mais attends Faut pas qu'on confonde Tu veux dire Genre un dessin Genre tu te fais dessiner Un cow-boy Un indien Un truc comme ça Un paysage Non mais n'importe T'as pas besoin De dessiner ce que tu veux Qu'est-ce que tu dessinerais Toi GG Si tu pouvais décorer Non non mais on va demander A Prigo Ouais moi je dirais 20 000 francs 20 000 Ouais ouais Moi je dirais 10 000 Euh dégage 30 000 30 000 J'ai rien fait Euh tu me saoules Ah s'il vous plaît Derrière merci Tu me saoules aussi Et oh 383,44 Oh quel écho Bon allez dégage Allez dégage Allez dégage Dégage moi ça Dégage moi ça Dégage Allez hop Bonne nuit Euh 35 tonnes Ah il est lourd celui-là 35 tonnes Il est parti C'est Goldo à la plage Je te l'ai dit tout à l'heure Ah bon 35 tonnes est parti Alors avec qui Euh Arnett Euh ouais moi je pense Que ça doit coûter Aux alentours de 10 000 francs Ah bah Ah bah Non non Grosso modo Je pense que Ça c'est dommage Que j'ai pas un routier Qui pourrait me le confirmer Mais c'est pas grave Je le serai Et puis je vous donnerai Le prix réel Il y en a un sur IRC Il peut te répondre tout de suite Si tu lui poses la question Bah qu'il me dise Quoi ? Bah Le prix Que ça peut y coûter S'il est sur IRC Ça dépend ce que tu dis Non mais Le prix que Que ça coûte Un ordinateur De francs Ou 1500 Un truc comme ça Non non non 29 la minute Ça dépend si tu prends le clavier Il est sur la route Ça met un peu de temps à répondre Il me dit 50 000 euros Euh Non mais ça Non moi je peux vous dire Eh je pense que Je pense que De toute manière Tout le monde a regardé Leur poste Leur reportage De la semaine dernière Je pense Tu ne l'as pas vu ? Combien mais combien Gérard ? Combien ? Moi je peux vous dire que Ça coûte plus de 10 000 balles Gérard À peu près 10 000 francs À peu près Non mais attendez Pour nous renseigner On a Marcel Un routier là Qui nous a appelé Marcel salut Oui bonsoir Salut Marcel Salut Marcel Moi j'ai fait décorer mon camion Là justement Ça tombe vachement bien Et là j'ai la facture Sous le nez J'en ai eu pour 25 367 francs Acheté Avec la TVA ou pas ? Non non non Non mais attends Marcel Oui Non mais attendez Les autres s'il vous plaît Derrière Vous me laissez Vous me laissez parler Oh Avec ou sans TVA ? Oh Avec ou sans TVA Toi tu as T'as permis pour l'instant Je vais discuter un peu Avec Marcel Oui Bon toi Marcel Tu me dis 25 367 francs Acheté Acheté Donc hors taxe Oui Ok Mais T'as fait L'extérieur Ou l'intérieur De ta cabine ? La totale Donc La totale Donc T'as le volant Avec Oh attends Il y a le volant Tu me calmes Seul qui régale Comme une Comme une bécasse Parce que ça m'énerve Tu as mis la photo De ta femme Sur le Le volant J'ai un volant Le vis vitesse Fildar Attendez Attendez S'il vous plaît Fildar Tu me coupes tout le monde Sauf Je peux pas moi d'ici C'est moi C'est moi Je vais le faire Tu me laisses Le dernier Marcel Donc pour toi Marcel Ça t'a coûté 25 000 267 francs Quand même 25 300 Acheté Attends Attends Marcel Sur IRC Donc il y a Zioui Qui te demande Ce que tu préfères Comme décoration Sur un camion Alors là Ça c'est une très bonne question Donc La photo de Jacques Brel Toi tu Tu fermes ta gueule Ça dépend du routier Bon toi Tu te la fermes aussi C'est Marcel Donc Moi personnellement Dessus J'aurais bien vu Mais je sais pas Si ça existe Le clos Non J'aurais bien vu Ricky Martins Non non Un truc Carrément Avec Un cibi président Vas-y Gérard Vas-y T'en occupes pas Donc Moi je réponds Donc c'est C'est un truc Avec carrément La Formule 1 dessus Non non mais Mais Mais peut-être C'est un truc blaireau Mais on peut dire une chose Tu peux faire ça En un poste Comme ça Tu mets C'est là Tu mets juste des briques Ouais c'est ça Alors bonne nuit à toi Ok Donc Qui c'est Comme on avait Marcel ouais Ouais Donc Ouais mais T'as payé Que l'extérieur Toi pour toi Ah non non La totale Donc Intérieur et extérieur Gérard Tout routier qui se respecte Et puis Un petit frigo Pour mettre les bières Ouais ça Le frigo De toute manière Tu peux le mettre A l'extérieur Oui Quand tu dis Que tu veux repeindre ton truc En Formule 1 Parce que t'as l'impression D'aller plus vite ou pas Ou c'est juste pour un hommage Non non non Mais ça maintenant Tu peux mettre n'importe quoi Pour un hommage Non mais je veux pas Rendre hommage A Arteon Senna Ou autre Non mais moi Je te dis Tu peux très bien Tu peux très bien décorer Ta cabine Avec un truc de Formule 1 Pourquoi Si t'as pas l'argent Bah dans ce cas là Tu le fais Sur ton camion Tu pourrais très bien marquer Vroom Quoi ? Vroom Bah ouais Vroom Ça veut dire quoi ? Bah pour aller vite Bah ouais Non je suis pas d'accord Formule 1 Ça fait Vroom Non non Non non Oui Moi je veux bien te refaire ton intérieur Y'a pas de problème Bon bah toi Toi tu t'appelles Euh Bon de toute manière On s'écoute Le Dernier disque Bah tu vas peut-être poser une question Y'a encore des questions Ouais Bah La dernière C'est Les routiers sur la route Comment ? Est-ce que les routiers Quand vous faites la nuit Quand vous roulez la nuit Vous êtes obligés de vous arrêter Sur l'autoroutier Sur les aires d'autoroute La nuit Est-ce que vous vous arrêtez Pour voir des putes Dans les camionnettes Dans les camionnettes Dans les camionnettes Oh là là Il va dégager Alors toi tu vas dégager Tout de suite Parce que C'est pas le thème Du débat Bah si les routiers Ah bah Gérard sur IRC Yoda qui est dans son camion Il me dit qu'il en a vu une Tout à l'heure Oh bah ça Sur l'autoroute Il pense qu'il vole Alors la dernière question C'est Il n'a pas préparé son débat Si si si Il va la retrouver Attends Tu connais pas Gérard toi ? Non Non Euh Au hasard Qui c'est qu'a une Oui t'fais Alei Ouais allez Pourquoi les routiers Sont trop cons ? Non Alors toi tu dégages Pourquoi les routiers N'ont pas de cuit ? Non Plus de routiers Y a-t-il une différence ? Non Gérard sur IRC La question Attends y en avait une bien là Y en avait une bien Ouais Eh salope Merci Merci Alors Malcavienne Qui demande si Ah bah c'est trop tard Je l'ai raté Non mais Je pense que ça défile Et j'ai pas eu le temps de le voir Non Est-ce que les routiers Peuvent devenir des stars ? Que font les routiers Partant de Verglas ? Non Est-ce que Le parc soleil vert Transparent Avec l'équipe De faute préférée Marquée dessus Est obligatoire ? Merci C'était la question de Malcavienne Voilà Alors donc La question C'est combien de temps Les routiers passent-ils sur la route Et on se retrouve juste après C'est naze C'est naze Attends Tu l'as posé tout à l'heure Tu l'as déjà posé Oh mais merde Derrière C'est nul C'est nul Vous la fermez ou sinon Allez hop Conclusion Non attends Non non non Ça y est j'ai une question C'est peu Allez Calme-moi tout le monde On va passer au séminaire Gérard Bon Routier c'est un métier dur On est d'accord Combien de temps Votre avis un routier Peut-il exercer dans la profession de routier ? Voilà Ça c'est une bonne question Voilà Et on se retrouve après On va s'écouter Roger Pussot Avec ma sœur Elle joue du pipo C'est nul Oh donc Vous pouvez toujours nous appeler Au 0800 08 5000 On est toujours dans le débat des routiers Et la dernière question C'était donc A votre avis les auditeurs Combien de temps Un routier peut-il exercer Dans cette profession si belle ? Voilà Tam Tam Bah déjà Moi je sais pas Mais je pense qu'un routier Peut tenir facilement Jusqu'à Bah Les routiers de la retraite C'est à quel âge Gérard ? Euh ça je peux Je peux Non c'est la question je crois Non non mais moi je te demande Jusqu'à quel âge Un routier peut-il continuer De rouler ? Un routier ça doit La retraite ça doit être vers 55 ans Non Non 55 ans ça c'est Ça c'est C'est les mecs qui Qui travaillent Dans À la retape Moi je pense que bon Les routiers c'est quand même Un métier assez simple Parce que tu fais que de la route T'en balades et tout Ouais Je pense que ça devrait travailler Jusqu'à peu près 70-75 ans Parce que c'est quand même Une profession de feignant Ouais c'est facile ouais Ouais non mais attends Une profession de feignant Fais-moi confiance Non non mais attends Celui qui vient de dire Que c'est une profession de feignant Fais-moi confiance C'est Tam Tam Celui qui vient de dire ça Déjà c'est un con Ouais Et un boulot de feignant C'est pas vrai Parce qu'il faut dire une chose Que les mecs Vous allez voir On bosse comme des tarés Ouais Comme des tarés Ouais bah attends Si t'es pas content Tam Tam Non mais d'accord Non mais c'était pas Tam Tam D'accord ok Vous bossez 15h par jour Mais je trouve que Bosser 15h par jour C'est quand même des feignants Quand même Attends Tu crois que dans les bureaux Ils comptent 15h par jour Non mais c'est pas des feignants Attends Ils arrivent Attends Non mais attends Attends Tam Tam Moi je vais te répondre A ta question Le lundi ils arrivent Hop Ils commencent déjà Par leur petit café On parle des routiers On parle des routiers Non non non Non mais attends Non non non Stop Stop Stop Stop Maintenant Tam Tam Tu as bien m'écouté Ouais Tu as bien tout ouvert Tes gourdes Tes oreilles Ouais ça tu dis Qu'il est en train de boire C'est tout ce que tu dis Bon alors moi je peux te dire Une chose Que déjà Les routiers Ils commencent le dimanche soir A 22h Ils n'ont pas le droit De rouler le week-end Ils commencent le dimanche A 22h C'est pour arrêter Le lendemain Mon cul Pildar Les routiers Commencent à partir De 22h Ils n'ont pas le droit Ils n'ont pas le droit Aux autoroutes Le lundi je fais S'il vous plaît Ouais mais non Mais le lundi Oh Tam Tam Tam Tam Oui Tu t'écrases Je vais te répondre moi Alors déjà Dans les bureaux Ils ne font pas 55h Non mais oui Ils commencent à 8h du matin Et pas à 22h Ouais Ah ouais Alors dans ces cas-là A 8h du matin Le chauffeur Il est déjà sur la route On est bien d'accord Alors à 8h du matin La nana elle arrive au bureau Elle dit à son copain Oh ouais mais tu sais A sa copine Oh ouais mais tu sais Mon mec il m'a bien Baisé et tout Hein Alors Que les routiers Que les routiers Les routiers Partent Non non Non que les routiers Que les routiers Attendez s'il vous plaît Que les routiers Partent le dimanche soir A 22h Et ils disent Au regard à leur femme Ils ne savent même pas S'ils vont rentrer Ok Ok Alors on te parle Tom Tom Tu te la perds Stop Stop Stop Stop Stop J'ai une question Un tarot Il y a une question Sur les tarots Allez allez Coupe-moi Coupe-moi tout ça là Je coupe qui ? Enfin Alors Hugo Oui Alors Hugo S'il te plaît C'est allé trop vite C'est allé trop vite encore J'ai vraiment pas le temps de lire Vu qu'il y a environ 418 connectés Et tu vois les Je peux t'aider Vas-y je t'écoute C'était qui ? C'était qui ? C'était Je crois que c'était ce nul Je sais plus Il y avait une question intéressante Et j'ai pas eu le temps de la voir C'est pas grave Tu vas la retrouver Frigo Frigo Oui je crois que les routiers Peuvent conduire jusqu'à l'âge de 50 ans Ah non C'est des conneries ça Bon attends Je suis d'accord J'ai lu un bouquin moi Sur les routiers Ouais Et je peux te dire que dedans Bon c'est Le mec Bon il disait que Les routiers pouvaient rouler Jusqu'à l'âge de 50 ans Mais après au-dessus Interdit Ça dépend Je pense pas Je pense pas Je pense pas à mon avis Parce que moi Moi je peux te dire une chose C'est C'est C'est bête Parce que à chaque fois Je vais dire Je vais reparler de Titi Mais lui ça fait Ça fait Ça fait plus de 22 ans Qu'il fait de la route Et est-ce que t'as vu son gros nez ? Et t'as vu déjà quel âge ? Non mais Ça Son âge Ça vous regarde pas Gérard Euh Rigo Rigo Oui Question internet pour finir Non ? Le point commun entre une femme Non non Non non Allez Allez Non non non Allez Non non Conclusion Conclusion Gégé Gégé J'ai une question internet Je suis pas tous en même temps s'il vous plaît Gégé J'ai une question intéressante sur internet Pourquoi les hommes éculent-ils par saccades ? Ah là j'ai la même là Tu vois C'est pas le thème du débat Parce que Gérard avale par gorgée Gérard Oui tu me le dégages Hop là Il y a terminé On fait la conclusion là ? Ouais Ouais bah on fait conclusion Parce qu'on arrête Ouais Bah moi ce que je conclue de ce débat Bon c'est intéressant pour les routiers Ce que je constate c'est que bon Vous êtes Vous écoutez que du Johnny et du Coluche Et vous êtes des feignants Non mais de toute manière En plus c'était pas C'est un débat Un improvisé qu'on a fait Ouais bah ça c'est bien entendu On sent que tu connais pas le sujet Tu nous fais croire que t'as été routier Mais on se le demande Euh Alors je vais te dire une chose Ouais ouais Tu la diras tout à l'heure Ouais bah Honnêtement Non c'est pas moi Non mais je pense que Celui qui s'amuse à faire des conneries comme ça Va se calmer Ouais Bon est-ce que t'as été routier pour de vrai ou pas ? Oui Trouve-le Non il a été routier sur internet Est-ce que tu as glissé sur du verglas ? Oui ou non ? Non Alors toi tu as Non mais sérieusement Est-ce que t'as été routier ? Oui Combien d'années ? J'ai fait deux ans de route Combien de kilomètres t'as fait ? Euh 22 22 Non J'ai fait Plus de 10 000 bornes Combien de putes ? C'est tout Combien de putes est ta soeur ? Ta soeur elle est en train de se pas enculer Non non non Toi tu dégages Il n'a pas de soeur Il n'a pas de soeur C'est un imbécile Allez hop Terminé pour celui-là Ça y est Ça y est Ça y est Allez on y va La conclusion Allez vite vite vite vite vite Allez Allez Allez hop Hop Terminé Terminé Terminé T'envoies le Attends t'as conclu 10 000 kilomètres en deux ans Comment ? 10 000 kilomètres en deux ans C'est pas beaucoup quand même Gérard Oui T'es un feignant Ouais ben Euh Réveille-toi Un broutier Je vais te donner ma conclusion Ouais Alors je pense que Je pense que les routiers Ça peut Ils travaillent dur Et ils peuvent conduire encore longtemps Nous en tout cas On a fait ça sur la route Toute la journée Et on a mis Beaucoup de routiers On a la photo de toi Gérard Pour se soutenir Pour essayer d'aller D'aller plus vite D'aller plus vite Parce que Pour nous T'es un symbole de réussite Quoi quand même Parce que tu fais de la radio maintenant On va bien être tous à ta place Ouais mais de toute manière Faut dire une chose Que grâce Grâce aux routiers Grâce Grâce aux routiers Qui nous écoutent encore À l'heure actuelle Et je sais que Ils sont nombreux Ils sont nombreux Même les chopeurs de taxi Tout ça Grâce Grâce à tout ça Grâce à ces gens-là C'est grâce à eux Quand même si on peut Même malgré les grèves Qu'on peut Qu'on puisse rentrer chez nous Avec les chopeurs de taxi Mais grâce aux routiers Si Oh s'il vous plaît Laissez-le finir Laissez-le finir Grâce aux routiers C'est grâce à eux Si on mange Quand même Que les grandes surpasses Soient Ravitaillées Si on n'a rien Dans les grandes surpasses On ne peut pas manger Alors qu'est-ce que c'est vous ? Qu'est-ce que c'est vous ? Vous savez Vous savez pas Oui Rigo Deux secondes Sur IRC Je trouve qu'il y a Une conclusion intéressante Si tu es routier Que tu sors en boîte Que tu sais mixer Que tu mets un costard-cravate Et qu'en plus Tu as une CB Avec un kit main libre Et bien ça veut dire Que tu deviendras Un pote de GG C'est pas possible J'applaudis Dave Sur l'IRC De toute manière Sur la CB Sur la CB C'est quand même aussi Grâce Il y a la CB Il faut dire une chose Avec la CB On peut savoir Pas mal de choses Mais il faut dire une chose Qu'à force La CB Ça commence A devenir rengaine Parce que sur le canal 19 C'est qu'il y en a Qui s'amusent A s'amuser A nous mettre De la radio constamment Et on peut pas savoir Où sont les barrages Ni rien Donc Alors maintenant Ceux qui s'amusent A faire ça Sur la CB C'est pas possible Pour moi C'est des petits cons C'est des petits branleurs Alors maintenant Qu'on respecte Qu'on respecte Le métier Des routiers Et des chauffeurs de taxi Et des animateurs radio C'est tout ce que j'ai à vous dire En devant d'entendeurs Salut Vous allez Vous allez retrouver Danan Danan ça y est Ça y est c'est fini J'ai pas fait ma conclusion C'est bon J'ai rien dans les conclusions Alors allez-y vite fait Alors c'est vrai Ouais Je te kiffe Parce que franchement Ce que t'as fait c'était bien Non mais attends Moi je te kiffe pas Ok Mais alors Les routiers C'est n'importe quoi Le seul truc qu'ils savent faire C'est se branler dans leur cabine Alors Arnett C'est terminé C'est même pas la peine de continuer Parce qu'il y a des routiers Qui nous écoutent Ok Et qui se font la confiance Qu'il y en a qui sont À m'attendre Ok Salut Bouffon Ouais bah Bouffon Toi-même les connards Ouais GG c'est Goldo Ouais Je peux faire ma conclusion Vas-y Bah je voulais dire que déjà Je suis derrière toi à fond À 100% tout profond Et que je voulais dire que Bah les routiers C'est quand même Comme a dit Arnett Un métier de feignasse Qui s'ignole Et t'es un digne représentant De cette profession Alors Goldo Dégage Bonne nuit C'est terminé pour ta conclusion Bonne soirée Au revoir Au revoir Guérisse Dégage Ouais bah écoute Moi je trouve que Je savais pas grand chose Sur les routiers Mais j'en ai appris quelques-unes Mais alors par contre Il y a un truc que je reproche Dans ce débat C'est qu'il y a énormément De vulgarité Et j'aime pas ça Et bah C'est dommage parce que C'est comme ça C'est comme ça C'est les routiers Bah ouais mais c'est pas bien Moi je trouve pas Parce que franchement Votre débat il est bien Et s'il y avait un peu moins De vulgarité Je trouve que ça serait pas bien Bah ouais mais dans ces cas là Les routiers Faut bien comprendre C'est Max Que c'est quelque chose de viril On l'a compris encore par Gérard Ce soir c'est normal Et quand c'est routier Que c'est viril Forcément ça amène un peu Au lieu d'en venir aux mains Ça en vient un peu aux mots Et même si ça a été un peu vulgaire Je pense que ça a apporté beaucoup Ah mais c'est sûr C'est ce que j'ai dit à Gérard J'ai appris beaucoup de choses Ça vient du cœur Et quand t'es un passionné Le routier c'est un peu Comme un animateur radio C'est une passion Et quand t'as une passion Tu la défends Et donc très vite Tu peux devenir agressif Parce que tu défends Ta profession que tu aimes Gérard Je suis tout à fait d'accord Avec Gérard Ça c'est sûr Non mais ça à toute manière Moi c'est un truc Que je défendrais jusqu'au bout Et moi j'ai routier Chapeau pour ce que vous faites Je sais qu'il y en a Qui sont là-haut Il y a NJ qui est venu Et qui m'a dit Qu'ils étaient en haut Et qu'ils voulaient me voir Mais t'es d'accord avec moi Comme quoi c'est une passion Et que c'est normal qu'on s'énerve Une passion de toute manière Tu es obligé de la défendre C'est un gain de pain C'est tout ce que tu veux pour toi C'est comme toi animateur radio C'est comme Quand on parle des passions C'est aussi dépassionné que le papillon C'est un gain de pain Ça dépend des personnes Vas-y Didi Didi Dis ce que tu as à dire Je n'ai pas besoin d'avoir le casque Tu parles dans le micro Je fais exactement ce que tu viens de faire Il flippe C'est pas grave Vas-y c'est pas grave Donc ta conclusion Gérard ? Donc ma conclusion c'est dommage que Je n'ai pas préparé ce débat là Parce que ce n'était pas prévu Pour une fois il était bien C'est pas mal A part qu'il y a eu des petits emmerdes Non mais c'est normal C'est un métier de passion Mais donc On vous retrouve Jeudi prochain Déjà pour les débats Voilà Donc Ça s'apportera sur quoi d'ailleurs ? On peut savoir les thèmes ou pas ? T'avais pensé tout à l'heure au synthétiseur Alors Donc on va parler sur les synthés Et sur le harcèlement sexuel Donc on va se quitter J'ai hâte d'écouter le débat sur le synthétiseur C'est qu'il y a de la question quand même Tu ne manges pas aux derniers moments Comme d'habitude Ou le mercredi Tu viens me voir en me disant Qu'est-ce que c'est ? Que finalement tu n'y arrives pas T'es sûr ? C'est un débat sur le synthétiseur Ah ouais Alors là le synthé T'as intérêt de me trouver Du Jean-Michel Georges J'en ai moi à la maison On va s'en écouter Un la semaine prochaine Si si si Le truc de la coupe du monde Le coupe d'Europe Coupe du monde Ouais J'en ai même plus Que ça Tu vas t'écouter Donc On se quitte Et donc Je vous retrouve jeudi prochain Donc bonne nuit à tous Et vous allez retrouver Rousseau Rousseau pour la nuit sans pub Et on va se quitter avec la bande C'est ça Avec la bande de Billy Du slip Avec les cochons On les grillons Ah c'est bien ça Qui chauffent Vas-y On le groin qui chauffe Les cochons C'est un groin C'est pas un grillon Bon attends T'avais qu'à l'annoncer Toi-même Après tout C'est toi qui fais la raya Et puis c'est tout Alors Poupouille à toi Ok De bonheur Sendeur Salut Et de la clinique == Le débat sur les synthétiseurs == === Contexte === === Les personnages === === Transcription === Pas de radio et pas d'insultes de Gérard Bienvenue sur Fun Radio, donc 0h37, c'est toujours Fun Radio que vous écoutez Vous pouvez nous appeler si vous voulez participer toujours au débat sur les synthétiseurs On va dire la musique électronique parce que si on dit que les synthés vont avoir peur Sur la musique synthé, tout ce qu'on peut entendre joué par Jean-Michel Jarre Ou autre comme chanteur Donc on va accueillir Citron 19 ans de Mazanet Bonsoir Gérard Bonsoir Et alors Tupu Bonsoir Gérard, bonsoir Sandy, bonsoir Yargla Non mais Sandy elle n'est pas à côté de moi donc désolé pour toi Pardon Elle est là mais elle ne veut pas venir écouter On embrasse là pour moi Ongle de pied Bonsoir Gérard Bonsoir Machat Bonsoir Gérard Salut Guillaume, Guimauve Bonsoir On va parler un peu plus fort déjà Bonsoir Bonsoir et Trou Noir Bonsoir Gérard Bonsoir Donc premier débat, on va parler sur la musique des synthétiseurs Donc il y a toujours le site internet Non c'est moi qui parle à Manu Oranten, excuse-moi Donc il y a toujours le... L'internet L'internet www.fr Voilà, tout à fait Double slash Il y a déjà beaucoup de connectés Donc voilà Donc alors en gros Aimez-vous la musique Aimez-vous la musique jouée au synthé ? Qui ça ? Ben qui ça ? La main de ma soeur dans les culottes d'un zouave qui joue Oui ça commence Non mais Gérard comme à chaque fois tu débutes tes débats Tu dis jamais à qui tu t'adresses Tu demandes à un auditeur de répondre Alors ongle de pied Moi j'adore franchement Je trouve que c'est de la bonne musique Mais bon chacun son style Mais moi j'aime bien Non mais toi dans l'ensemble T'aimes bien Ouais moi je trouve que c'est de l'ambiance C'est bien au moins Ouais ouais D'accord Tu pues ? Ouais ben moi je pense que ce gars-là C'est un peu comme Francis Cabrel Il a su toujours se renouveler C'est vraiment Je trouve ça très fort Non mais attends Francis Cabrel il a jamais joué du synthé Il a toujours joué de la guitare Non attends Faux Il a fait des morceaux au synthé Ouais mais je voudrais bien savoir quel morceau C'était des sons de guitare Mais c'était au synthé Ouais Ouais non mais Non si Gérard t'es d'accord avec nous Qu'au synthé on peut faire Plusieurs sons On n'est pas obligé de faire Plus de son canot Ouais mais ça c'est C'est une autre question On verra par la suite Ne vous inquiétez pas Il a tout prévu Gérard Citron Oui Oui moi j'aime bien aussi Ouais Par ordinateur aussi Ouais mais Ben synthé c'est quoi ? Ça peut être très bien aussi Sur ordinateur Comme Jean-Michel Jarre Il a fait Lors du concert Au Wembley Le 14 juillet A Wembley Non à Paris Ah ouais j'ai pas vu Je l'enregistrerai Faudrait que tu me le prêtes alors Non non Moi je prête pas J'aimerais que cette vidéo Que j'enregistre comme ça Ben j'aimerais le voir chez toi Non Il est en deux questions Attends Euh Machat Ouais ouais Ben moi je kiffe ça Ouais j'adore Techno House Trouble ou Acide Transdip Deepcore Adfitcore Tout ça ouais Ouais j'aime bien ouais Non mais je te parle De la musique du santé Ah ouais ben C'est de la musique électronique Ben c'est pareil Ah bon ? Ouais Non mais ouais je kiffe Ouais c'est bien Ouais tu kiffes Ouais je kiffe à mort Euh Guimauve Euh non moi j'aime pas Ça me prend la tête Et dans Dans quel sens S'il te plaît Ça te prend la tête Dans tous les sens du terme C'est à dire Ouais non mais attends Tu vas répondre aux questions Que je te pose C'est tout D'accord Alors pourquoi que ça te prend la tête Et dans quel sens C'est tout Parce que je trouve que C'est pas de la musique C'est pas de la musique pour moi Bon alors c'est quoi alors ? Ben alors C'est des sons inventés Sur des machines Pour moi Ben alors le synthétiseur C'est quoi ? C'est des On invente des sons Me dis pas Me dis pas de conneries Guimauve s'il te plaît S'il te plaît Ok Non je suis pas d'accord Bon d'accord Ben pourquoi ? Trou noir Ah ben moi j'adore Le synthé Gérard Et puis je suis moi-même Joueur de synthé Ah c'est bien ça Ok Ben tiens ben justement C'est une question Peut-être sur IRC Oui sur IRC Déjà on te demande Gérard Qu'est-ce que c'est un synthétiseur ? Un synthé c'est une musique Comme t'as là Toi attends Tu prendrais ça Et que Et on voit pas nous Non mais vous voyez pas Vous avez pas besoin de voir Ah d'accord Donc Donc ça serait Un genre d'appareil Comme tu tapes Sur un clavier C'est-à-dire que là Attends je vais essayer De jouer un morceau Voilà Et dedans Mais là T'as l'écran Et dessus T'as toute la musique Qui ressort Mais bien sûr Là t'as des noms Mais ils peuvent modifier Le truc Ah c'est ça un synthétiseur alors ? C'est pas comme un piano Alors c'est différent Ben le piano c'est Le piano c'est le piano Ouais mais ça c'est pas pareil C'est-à-dire ? C'est quoi la différence Entre un synthé et un piano ? Non mais justement Arrêtez de me bouffer Les questions Ah merde On s'intéresse On s'intéresse Ouais non mais attendez On a faim Donc comme un trou noir Comme toi Tu joues de Donc jouez-vous Du synthétiseur chez vous Donc c'est une question Qui est pour toi ? Ah ben moi je joue Du synthétiseur Oui Gérard Et puis Ben synthétiseur Ouais c'est loin d'être un piano Mais comme je crois Que c'est une de tes Prochaines questions Gris pas les questions Trou noir s'il te plaît Non non non Par contre je vais dire Quand même qu'un synthétiseur Ben ouais c'est un générateur De son Et puis ça existe Sous forme de sampleur Maintenant sur pas mal de choses C'est vrai que Maintenant Tout le monde Tout le monde joue Sur Sur du Des synthés Ou sur Des Des genres de Wetman Spécialisés pour Pour ça Ouais ouais Et même Francis Cabral Gérard Je confirme Oh non mais ça Je m'en fous moi Personnellement Tu vois c'est pas un chanteur Qui m'intéresse Gingmove Bon toi je sais que ça Ça t'intéresse pas Non non moi j'en joue pas Je préfère casser des assiettes Et des verres Ça fait le même bruit Bon ben alors tu vois Gingmove Tu vas aller casser tes assiettes Et tes verres Chez toi Parce que dans ce cas là Je sais pas pourquoi Qu'on t'a sélectionné Bonne nuit Bonne nuit Il en faut qui aime Et qui aime pas Non mais attends Non mais attends Si toutes les questions Je te les pose Et que tu me dises Moi j'aime pas Je préfère casser ceci cela Ben dans ce cas là Tu restes chez toi A écouter la radio Ou si t'aimes pas Les débats Tu zappes Tu vas sur une autre radio C'est tout Point final à la ligne En devant d'entendeurs Salut Gérard Gérard un débat C'est des pour et des contre Non non mais attends Elle aime pas Elle aime pas La première question Attends s'il te plaît C'est moi qui fais les débats C'est pas toi qui vas me commander Ok ? Ok Donc vas-y explique Donc la première question T'as pas voulu me répondre La deuxième je te demande Jouez-vous du santé Tu me dis non Je préfère casser des assiettes Alors si je te demande Combien coûte un synthétiseur Tu vas me dire Ah ben je préfère acheter Des assiettes et des verres Alors dans ce cas là C'est pas la peine Mais non mais non Alors si je te dis La quatrième Connaissez-vous le fonctionnement Des synthés Gris pas tes questions Gérard Bon alors Non mais moi je vois pas Une nana comme ça Qui Non mais Gérard Laisse-moi parler 30 secondes Et après tu jugeras par toi-même Je ne critique absolument pas Les synthétiseurs Je t'explique simplement Que pour moi Que je casse des assiettes Ou que je joue sur un synthé Ca fait exactement le même bruit Mais non Voilà c'est tout Ouais mais attends En tout cas c'est Le synthé Tu peux le faire réparer Les assiettes Faut que t'en rachètes Alors attends C'est pas con La guimauve Là je crois que Moi qui t'as un peu de colle Ouais De la superglue C'est ça Ouais mais enfin Dis-toi que Ca revient moins cher D'acheter les assiettes Qu'un synthé quoi Ouais bah justement On verra ça tout à l'heure Donc Machette Ouais bah moi je joue pas de synthé Mais j'aimerais bien en jouer C'est un instrument Qui me plairait bien La question c'était quoi Gérard Ta question Est-ce qu'on peut jouer du synthé Chez soi Jouez-vous du synthétiseur Chez vous Mais est-ce qu'on peut jouer Du synthétiseur Ailleurs que chez soi Si je demande chez vous Pour l'instant J'ai pas dit où Je pose chez vous C'est tout Ah d'accord Mais tu vas Tu vas Après on peut peut-être Par exemple savoir Si on peut emmener un synthé Si c'est On peut en jouer en plein air Ouais on peut en jouer en plein air Si ça est portable Si on en joue Quand on fait des soirées Automatiquement Le synthétiseur Tu vas pas le lécher chez toi Tu vas l'emmener Ah ouais Donc il est portable Ouais voilà Ah d'accord Sur IRC Il y a Vatou Qui demande Si le synthé Fait autant de bien Que le synthol Ah Je vois pas du tout Le rapport avec Le synthol et le synthé C'est pas grave Bah si parce que Le synthol ça relaxe Aussi bien que Le synthé Quand on joue Ah c'est ce qu'il nous dit Ça s'écrit presque pareil En plus ouais Oncle de pied Donc toi Non bah moi malheureusement J'ai pas l'occasion d'en jouer Mais c'est vrai que j'aimerais bien D'accord Tu pues ? Bah moi non Tu sais j'habite à Gap Et je sais Bon J'ai pas J'ai pas le loisir De pouvoir T'es dans une cabine téléphonique ? Je suis chez moi Je suis désolé Ça c'est bizarre On vient d'entendre Un genre de De corne De corne ? Ouais c'est le groupe fun Ah non c'est pas moi ça Ah c'est pas moi Ça doit être quelqu'un Qui trafique dans les studios encore Moi non mais je me doute Qui c'est Mais c'est pas grave Citron Oui alors moi J'en joue pas chez moi J'en joue chez ma tante Parce qu'elle a un synthé Donc comme j'ai joué Un peu de synthé Bah j'en joue chez ma tante Ça se prête pas un synthé normalement ? Bah je sais c'est personnel Mais bon Je l'ai dit Normalement Tous les appareils électroniques C'est que Ça se prête pas C'est comme une femme Une femme ça se prête pas C'est à dire Tu prêtes pas ton tatou Tu prêtes pas ton portable Une femme ? Mais non mais tu dis Tous les instruments électroniques Ne se prêtent pas Une femme Une femme Une femme C'est pas électronique Une femme ça se prête pas Mais c'est pas électronique une femme Ça dépend Mais tu peux en mettre une Sur Poupée Gonflop Pour toi ça y est Si tu veux Gonflop Gonflop ouais Je me doute où que c'est maintenant Ça doit être Trou Noir Non non non C'est pas Trou Noir Tu vois c'est Olivier Dapro Qui est en train de me brancher Le synthé que vous avez De l'autre côté Me prends pas pour un compte Tu veux ? Ok Non non je n'en serai surtout pas Non non mais tu m'y laisseras D'accord ? Olivier Olivier Olivier Il paraît que tu as un synthé là-bas Ah ouais non C'est n'importe quoi T'as grillé Gérard Il t'a grillé Tiens tiens tiens Ouais ouais t'es là T'es en train de chercher Pour en venir au débat Pour en venir au débat La plupart des gens sur IRC Préfèrent les 3T au 5T Je vois rien Je vois pas le rapport Avec le débat Donc alors maintenant Ta réponse à toi C'est au standard Ça se voit que c'est au standard C'est un auditeur qui fait ça Bah oui c'est ça T'as raison Prends-moi pour un compte aussi toi Bon le synthé Gérard Pour toi alors Est-ce qu'il faut en jouer chez soi Ou on peut en jouer ailleurs Ta réponse Bon celui qui s'est mis à ça Arrête parce que ça commence A me prendre la tête Ouais Donc En plus il sait même pas bien jouer C'est vrai Ce serait agréable Ça c'est un truc On peut le prendre Tu peux le transporter comme tu veux A une condition Que là où tu veux jouer T'as Une batterie Non mais t'as la vide Qui te donne le feu vert Pour pouvoir brancher Alors celui Celui qui s'est mis à ça Qui s'amuse à faire ça Arrête ça Parce que ça commence à me gonfler Je sens que tu auras pas L'éducation ce soir là Ah si Alors Qu'il arrête tout de suite Ça vaudra mieux Donc troisième Combien peut coûter Un synthétiseur ? Ouais Bon Manu Tu vas me gérer ça Parce que sinon Je vais te gaufrer Oui mais le problème C'est qu'ils me disent Que personne n'a de synthé Au standard Ouais non mais personne Ils se foutent de toi Ils se foutent de toi Les auditeurs Manu Non mais c'est pas sûr Non plus que ça vienne Du standard Ça peut venir de n'importe où Ouais ouais Non non non C'est du standard C'est sûr et certain Gérard c'est quand tu veux Citron Oui Comment ça coûte Je sais pas Entre 150 balles Un bon tant pis Et puis 30 ou 40 balles Un bon synthé Non mais attends Tu sais ce que c'est Un synthétiseur ? Oui Pas de marque Oui oui je sais Alors c'est quoi ? Bah c'est un instrument Sur lequel tu fais De la musique électronique Ouais Et tu crois que ça vaut 150 balles ? Un bon tant pis Ouais un vrai bon Un bon tant pis Non mais là je crois Non non là je crois Que tu te mets de loin dans l'œil Ah bah écoute non Je pourrais t'apporter des preuves Ouais bah tu les envoies à la radio Y'a pas de problème Tu pues ? J'ai pas trop Moi tu sais comme je te dis J'habite un peu à Gap Et donc j'ai Enfin je sais pas Un citron Bah attends Non non mais attends Tu pues Quand je demande un citron Quoi ? Le nom de la personne Parce que ça c'est des C'est des habituels Qui ont compris les autres noms Parce qu'hier ils étaient là Ils étaient là C'est Goldo, Arnett et Tony Oh n'importe quoi Ils ont voulu Ouais non mais attends Des noms comme ça Ongdopi et Machat Faudrait quand même Vraiment parano Hein ? Ouais bah parano Prenez des noms Autrement que des noms Qu'on a l'habitude d'employer Parce qu'on veut On veut jouer sur moi Ok ? Gérard il est pas parano Il est perno Hein ? Alors maintenant Réponds toi Qui ça moi ? Ouais tu pues D'accord Bah moi je sais pas Je pense entre 100 ou 150 francs Mais des francs anciens Je sais pas trop exactement moi Ouais d'accord Apparemment Tu dis que Tu penses Je suis pas de Paris moi Je connais pas bien les prix Je suis en haut dans la montagne Je connais pas C'est où que c'est ? C'est derrière Non mais de toute façon Maintenant il faut se dire un truc C'est qu'à Paris On vend des synthés en euros Ouais ouais Non non attends Pour l'instant l'euro Ça sort pas encore Ça sort pas avant l'année prochaine Non mais il commence Ongdopi Bah écoute moi J'ai pas vraiment d'idée Mais je pense que ça doit Tourner dans les alentours De 10 000 francs Je sais pas du tout Combien ? 10 000 francs Ah enfin Une Une qui répond à peu près A la question Parce que les deux autres On met genoux On peut avoir des synthés De casse aussi On est pas obligé De l'acheter neuf Attends un synthé Tu vas trouver un synthé Pour combien toi De casse ? Bah peut-être 150 balles Bah ouais t'as raison Bah c'est clair Justement Y'en a un qui va pouvoir Nous répondre Après Il va venir Il va venir Et il va nous répondre Machette Ouais bah on va dire 2000 roubles Bon alors toi Toi ça va être pareil Que Gimbaub Soit tu vas répondre Correctement aux questions Soit tu vas virer Pour 15 000 francs Les bancos 15 000 15 000 15 000 Tu les fais cher toi On est loin Du prix encore Génial Toi Oncle de pied T'as dit 10 000 Ouais dans les alentours Dans les alentours De 10 000 10 000 Y'a combien de 0,4 ? Guimauve Si elle est encore là Ouais je suis là J'espère que je vais pas Te décevoir dans ma réponse Mais je dirais 5-6 000 francs Ah bah d'accord Ça c'est un truc D'occasion pour moi Bah ouais Ça c'est clair Non mais tout dépend Si tu prends un matériel De haute gamme Ou un matériel De gamme moyenne Ouais mais de toute manière Tout ça dépend De la perfection Que vous pouvez Avoir pour en jouer C'est-à-dire ? Alors on va demander Un trou noir Est-ce que tu pourrais Expliquer ça Gérard ? Non non mais on va finir Au moins répéter Au moins répéter ta phrase Parce qu'elle était très forte Tout ça dépend De la perfection Que vous avez Pour taper sur un synthé Qu'est-ce que t'entends dire Par perfection Gérard ? Non non mais Y'a y'a C'est pas évident C'est un genre de piano Y'a quand même Les touches noires et blanches Donc faut bien savoir Prendre dessus Y'a peut-être une question IRC Sur IRC Ils me disent Qu'ils connaissent Saint-Michel Saint-François Mais ils connaissent pas du tout Synthétiseur Bon bah ça Trou noir Oui donc Bah moi Gérard Ouais t'es quand même Pas loin du vrai Les synthétiseurs T'en as à bas prix Bon 150 francs C'est n'importe quoi Mais t'en as à 3500 Et puis ça peut aller Jusqu'à 50 000 francs T'as Jean-Michel Jarre Qui avait un synthé Qui coûtait 750 000 francs Dans ses débuts Aux époques Des premiers albums Oh mais Qui c'est Qui s'amuse avec ça là ? C'est bizarre Quand on se gueule Ça s'arrête Ah bah oui Mais il peut pas t'entendre Les jouets Non ouais Je me doute D'où que ça devient Olivier Ça peut pas être Olivier Gérard il est là Attends ouais ouais Dégage Non non dégage Je sais qui c'est Qui a la roue Non non Non non Dans ton studio Y'a qui ? Y'a un synthé Y'a Max et Jean-Marie Qui viennent d'arriver Mais pas du tout Ils sont en train justement De préparer la soirée De la loco demain Donc Trou noir Oui Ils viennent de répondre Gérard Donc toi tu me dis à peu près Bah vas-y Y'en a à tous les prix Ça commence Ça commence de 3 500 Jusqu'à 750 000 francs Pour le Fairlight Que Jean-Michel Jarre A utilisé pour la Chine Par exemple C'est comme les prostituées Non non non Attends Parce que là Faut quand même pas confondre Synthé et pute Et une pute Parce que la pute A 100 balles T'as quelque chose Dans un synthé Pour 100 balles Tu l'auras pas Et puis surtout Elle fait pas le même bruit Ma pierre elle balle pas Non mais Donc c'est Trou noir T'aimes bien un peu Jean-Michel Jarre quoi Ah bah oui Tiens Je vais même te dire un truc J'étais le voir A un concert Que t'étais même peut-être Pas au courant Le 18 septembre Ça se passait Dans un salon D'une marque informatique Que je vais peut-être Pas citer à l'antenne Ouais je sais Il avait fait un salon Au mois de septembre Ouais c'était à la porte De Versailles Moi je l'ai vu C'était sur Invitation Alors donc Attends Je vais te Redonne-moi le Ah ouais Parce qu'en fait Gérard nous a mis Un CD de Jean-Michel Jarre Oxygène Donc toi Toi tu dois connaître Parce que comme ça fait Sur synthé Tu connais à peu près Tous les Tous les oxygènes Il y a oxygène Il y en a beaucoup J'ai l'oxygène J'ai même J'ai tout Ouais ouais J'ai même l'oxyde de carbone Il y a tout Non non non Non mais attends Trou noir Je te parle De Jean-Michel Jarre Parce que moi Moi une question Que je voulais poser Et c'est dommage Parce qu'elle est pas Elle sera pas dedans Mais on Donc tu la poses pas Bah la pose pas Si si On va la poser Donc pour moi Pour vous Est-ce qu'un synthétiseur Comme Jean-Michel Jarre Parce que Trou noir Toi qui l'as Qui l'as vu A peu près jouer Oui Donc t'as vu Qu'il joue avec des gants Il a un genre de casque C'est pour pas se brûler Ah non non Quand il joue avec des gants C'est quand il joue Avec l'harpe laser Ouais bah Donc le harpe laser Donc c'est branché Aussi sur santé C'est branché sur synthétiseur Mais c'est très technique Je vais pas faire Un cours de technique À ce temps-là Non non non C'est pas le but du débat Non non mais Je te pose la question Parce que toi Je sais que Apparemment T'es un fan de Jean-Michel Jarre Comme moi Donc c'est pour ça Que je voulais te demander Ah bah oui oui Non mais quand il met les gants Et les lunettes C'est pour l'harpe laser C'est pas de la frime C'est parce que l'harpe laser C'est quand même Des lasers assez puissants Et ça brûle un petit peu Et puis bon Les lunettes Pour la protection des yeux Et ça déclenche des synthés Par un système midi Mais c'est assez compliqué Ok Gérard Oui C'est Machat Je voulais te poser une question Est-ce que tu penses Que le synthétiseur C'est la musique du futur ? Ça À l'heure actuelle Je ne sais pas Parce qu'il faudrait On est pas dans le futur encore Non mais il faudrait voir S'il y a des personnes Qu'on a chez eux Et qui pourraient Nous le confirmer Ah bah moi J'ai des synthés chez moi Bah ouais Non mais Par exemple Des gens Qui ont l'habitude D'en jouer Ou qui ont déjà été Dans le futur Et qui savent Si ou non Les synthés existent là-bas Dans le futur Je ne sais pas Mais certainement oui Donc Je vais poser La quatrième question Et vous allez Y réfléchir Y réfléchir Et on s'écoutera un disque Donc connaissez-vous Le fonctionnement D'un synthétiseur Et on va s'écouter Gilbert Stradus Avec Au bébé Mets-toi De la crème Sur les genoux Toujours nous appeler Au 0875000 Et donc Il est 1h du matin Et toujours Le site internet Donc www.fr www.fr Et il y a Environ Je vais demander Aux gens de l'IRC De me dire Combien il y a de connectés Parce que je ne peux pas le voir 527 connectés Ah c'est pas mal déjà 527 Déjà La semaine dernière Au premier débat On était On n'était même pas A tout ça On est meilleur Et on aura peut-être Une surprise D'ici une dizaine de minutes D'ici 10 minutes On aura Un spécialiste Du débat Sur le synthé Donc la personne en question Donc Jean-Michel Jarre Et par contre S'il y en a Qui s'y connaissent En synthé Donc n'hésitez pas A nous appeler Manu se fera un plaisir De me gérer ça Pas de problème Je suis là Je vous attends Donc Quatrième question Connaissez-vous Le fonctionnement D'un synthé Mais je vais répondre Quand même à la question Là tout à l'heure Combien peut coûter Un synthétiseur Donc on va reprendre Trou noir Guignol Machette Ongle de pied Tupu Et citron Donc J'ai vu Avec Jean-Marie K Comme il est Comme il est parmi nous Là dans les studios Pour une soirée spéciale Une soirée spéciale Anniversaire Du Star System Donc Que j'y ai demandé Donc en fin de compte Si Selon Ce que vous voulez faire C'est vrai Que ça peut varier Jusqu'à 750 000 francs Ah ouais Le synthé Ouais ouais ouais Et bah tu vois Sinon Sinon on peut tourner Entre 5 Et 3 000 balles Et en euros 5 balles ? Non non 5 Entre 5 000 Et 3 Entre 3 000 5 000 Et 750 000 francs Pour Là 750 000 francs Faut quand même Avoir Les moyens En euros Ça fait combien Gérard ? Ça j'en sais rien Mais Gérard Gérard moi je voulais te demander Ça fonctionne à quoi un synthé ? C'est de l'essence ? C'est du Non non Truc électrique Ton micro Ton micro devant la bouche Non non c'est électrique C'est électrique ? Ça marche à pile Non non ça marche pas à pile Désolé Le mien marche à pile Donc Ouais bah tiens Il fonctionne à pile Mais le mien il fonctionne pas à pile Le mien j'en ai pas Donc connaissez-vous Le fonctionnement d'un synthétiseur ? On va demander à Citron Oui Ouais bah t'appuies sur on Ouais Et après ça joue Ah ouais D'accord T'appuies sur on Après ça joue Donc tu crois que Alors tu vas T'appuies sur on par exemple Moi j'appuie sur le Minitel on Et puis j'attends que Que le Minitel il fonctionne Bah voilà Après tu joues Tu joues avec tes doigts Bah alors tu dis J'attends qu'il fonctionne Non je dis après tu joues Bah ouais mais là Tout le monde a entendu dans le studio T'as dit J'appuie sur on Et après j'attends que ça joue Ah non et après j'ai dit Après ça joue Après ça joue Tu joues quoi Donc Par contre J'ai eu un Un petit sondage là En même temps Donc on va On va prendre Tupu Juste après La question Que pensez-vous Des synthétiseurs Donc il y a 40% 40% des gens Qui ont 40% des gens On dit Qu'avec Leur mode 103 Alliant Plus vite Allez plus vite Allez plus vite C'est pas ça du tout C'est 40% On pense avec Avec leur synthé Il y en a Avec leur mob Leur mob 103 Allez plus vite Donc je vois Pas le rapport Là je vois pas le rapport Avec le synthétiseur Tu te sers du synthé Comme kit Non non mais attends Et une mob Tu sais c'est quoi C'est une mobilette Ok Eh bah oui Bon alors 60% Non tu permets 60% des gens On dit qu'ils aimaient Qu'ils aimaient bien Mais que Jean-Michel Jarre C'était de la merde En boîte Alors là J'ai jamais vu Jean-Michel Jarre En boîte Bon ça Pour moi Je continue même pas Mais si Après il y avait Jean-Michel Jarre Mais c'était Non non Non non Non non Ça tu vois Hop Voilà Voilà On rigole bien quand même Enfin J'ai un air d'emploi Gérard deux secondes Je voudrais préciser quelque chose Aux gens de l'IRC JMJ JMJ C'est Jean-Michel Jarre C'est pas les journées mondiales De la jeunesse Merci Voilà Alors donc Tu pues toi Moi je connais pas exactement bien Le mode de fonctionnement Mais je pense que ça va être Une histoire de multiplexeur De bascule De résistance en parallèle Et de polymultiplier indexé Oh la la la C'est le genre de truc Qui marche avec Non mais attends Le synthé Tu le branches sur courant T'as même pas besoin D'une table de mixage Tu branches ça T'essayes de Avec les enceintes Mais en fait Faut avoir des bonnes enceintes Parce que si tu prends Des petites enceintes de caca Là je crois que tes enceintes Elles crament Tout à fait Même ton appareil Il crame derrière D'accord Ça dépend de ce que tu utilises En série Ouais mais De toute manière On va pas préciser les marques Non mais ça dépend Ça dépend si tu le branches Dans le synthé en dérivation aussi Ça c'est important Ouais Ok Tu vois la différence J'irai en série en dérivation ou pas ? Non Je t'expliquerai après On va écouter les questions Sur l'IRC Il y a Ziwi Qui te demande Vu que sur son téléphone Il a des touches noires Et des touches blanches Est-ce que son Et qu'il fait des sons Quand il appuie Est-ce que c'est un synthétiseur ? Non Si c'en est un Ah bon C'est un synthétiseur Par exemple T'appuies sur une touche Sur un téléphone C'est un synthétiseur pour toi Bah non N'importe quoi Ça remplit Ça remplit le rôle D'un synthétiseur Mais oui Les touches noires Les touches blanches Ça fait de la musique C'est un synthé Alors attends Moi j'ai un téléphone Quand j'appelle quelqu'un Ça me fait pas de musique Comme tu me dis C'est très simple Les auditeurs Ils ont des téléphones Ils ont qu'à essayer De nous faire un morceau Avec leur téléphone Ouais bah on va voir Non c'est pas un synthé Si c'est un son de synthé ça C'est bon c'est bon C'est bon arrêtez Arrêtez Arrêtez Arrêtez J'ai reconnu Ils jouent la marseillaise quand même Putain mais hey Tu vas où ? Donc c'est bon tu vois Ils t'ont fait Ils t'ont montré Ils t'ont fait l'exemple que Oncle de pied On peut se servir d'un téléphone comme synthé Moi Gérard J'ai jamais eu l'occasion De toucher un synthé Donc je peux vraiment pas te dire Comment ça marche D'accord Ma chatte Ouais alors c'est tout simple Tu prends ton synthé play school Tu le branches sur le gris peint Tu mets une biscotte dedans Dès que t'envoies la biscotte Ça marche Et si je mets ta connerie Dans le gris peint Dans le gris peint Est-ce que Est-ce que ta connerie Va ressortir ? Non je crois que ça marchera pas Gérard Non ça marche pas J'ai un synthé play school Si tu veux Bon j'ai plus de pied J'ai plus de courant chez moi Bon je m'éclaire la bougie Est-ce que je peux Attends t'as plus de courant Et tu permets de nous appeler Abrouti Bah oui mais je t'appelle D'un téléphone play school Que je branche Sur le frigo C'est ça allez Bah ouais le frigo Ça marche au courant Espèce de petit con Non il pédale Allez allez allez Il peut très bien avoir Des vietnamiens chez lui Qui pédalent C'est ça Guillemove D'après ce que je sais Je crois que c'est Des composants électroniques Tu vois c'est des puces Intégrées au synthé Qui sont reliées Par les électrodes Au système central Tu peux appuyer Sur les touches T'as les sons Qui se forment A l'aide d'un amplificateur D'écoute Ouais tout à fait N'importe quoi Elle a du coup quoi Trou noir Désolé Moi je connais Le fonctionnement d'un synthé Mais tu veux savoir quoi Exactement comment ça marche Bah oui Bah tu branches sur le courant Tu branches un ampli Une table de mixage Des bonnes Enfermes Comme tu dis Et t'appuies sur Bah voilà Mais moi ce que J'aimerais bien comprendre Gérard J'aimerais bien que tu expliques Aux auditeurs Et ainsi qu'à moi-même C'est comment En appuyant sur une touche Tu fais un son Mais ça c'est C'est à toi de le gérer Pourtant vous en avez un Synthé Bah oui mais ça m'explique Comment ça marche Mais alors Mais de toute manière Vous avez différents sons Donc c'est à vous De choisir Ce que vous voulez Non mais Je vais te l'expliquer Non mais attends Attends Attends Toi ça fait combien de temps Que tu travailles à la radio ? Je sais pas Mais je vois pas Non mais attends Depuis le temps Que tu es à la radio Le synthé Tu le connais pas ? Oui mais moi J'en ai déjà fait Mais attends Mais Max le matin Lui ça fait plus longtemps Qu'il est à la radio Il connait comment Il fonctionne le synthé Alors toi T'es à moitié cab Bah non mais je le sais T'es comme les auditeurs T'es une cab C'est tout Vous avez entendu les auditeurs ? Gérard Gérard Gérard Oui C'est Machat Je voulais savoir Si tu te foutais le synthé Dans le cul Est-ce que ça le faisait marcher ? Alors toi Machat Tu dégages Au revoir pour toi Bonne nuit Ça y est Terminé pour lui Liquidé C'est même pas la peine Qu'il revienne sous un autre nom Rasé Direct Je dégage Machat Alors vas-y Rien Continue Donc qu'est-ce qui vous plaît Dans un synthé ? Son cul Oh non Là sérieux Fille d'air Fais gaffe Parce que tout à l'heure Tu as dégagé plus vite Chez toi Qu'autre chose D'accord On va demander à Trou Noir Qu'est-ce qui me plaît Dans un synthé ? Je parlais de cul J'ai raison C'est sensuel Un synthé C'est sensuel Non mais qu'est-ce Non mais qu'est-ce Qu'est-ce qui te plaît Toi dedans ? Ah bah moi Qu'est-ce qui me plaît C'est les sons C'est tout Mais moi je te dis Je suis joueur de synthé Donc c'est les sons C'est fabriquer ses sons Faire sa musique Et tout ça Moi je dis Tu peux Oui Moi je veux dire Que ce qui est bien Avec un synthé C'est que vraiment T'en fais ce que tu veux Il t'obéit au doigt Et à l'œil Tu le manipules C'est ça qui est vraiment C'est ça qui est un peu jouissif Tu vois Non mais attends Le synthé Tu ne le manipules pas C'est toi C'est toi Avec tes doigts Avec tes mains Qui le fais fonctionner Ne me dis pas de conneries Il y a des programmes aussi Le synthé On appuie sur une touche Il marche tout seul Ouais mais ça Peut-être que De toute manière Il y aura sûrement Une question là-dessus Que je vais faire Il y a peut-être Une petite surprise Bah voilà La surprise que t'avais annoncée Est arrivée Donc tu peux dire bonjour Au monsieur Que Tu peux dire bonjour Au monsieur Mais tu idolâtres Donc JM Oui bonsoir C'est Jean-Michel Jarre Oui bonsoir Bonsoir à tous Donc j'ai écouté le débat Actuellement Bon en jouant Quelques petits morceaux synthétiques Et j'en déduis Que monsieur Gérard Dit de Suren Avait raison Puisque Un synthétiseur Fonctionne bien Par courant électrique Et non pas à pile Comme j'ai pu entendre Dans ce débat Et ma foi Si vous voulez Que je réagisse Sur vos questions Il n'y a pas de problème Déjà je voulais quand même Remercier Jean-Michel Jarre D'être délégué Avec nous ce soir Oui je sais J'ai un emploi Le temps très chargé Mais je me suis Alors donc Une question Que je voulais te poser Combien coûte un synthé ? Un synthétiseur Peut coûter environ 150 000 francs C'est un bon synthé C'est le synthé Dont tu te sers Jean-Michel Quand tu fais des concerts ? Voilà Non mais ça c'est Le mien je le paye Exactement 20 millions de francs Mais un synthétiseur D'occasion 150 000 francs D'accord Ok Alors Oui Ça fait cher quand même Je veux dire pour moi Je sais que je pourrais Jamais me payer Un truc comme ça Non mais donnez bon nom Quand vous posez des questions Excuse-moi C'est Tupu Je sais que bon Quelle que soit Ma future vie Je pourrais pas me payer Un truc comme ça C'est beaucoup trop cher Oui mais c'est normal Vous vous utilisez Du matériel de merde Moi je me sers De produits Qui sont professionnels Il y a une question Hier c'est Une question pour Jean-Michel Jarre Les gens de l'IRC Se demandent Si c'est le frère De Maurice B. Jarre Je vois pas du tout Le rapport avec La question sur les synthés Excuse-nous Jean-Michel Pour la question Il y a pas le mal Il y a pas le mal Donc la question Qu'on va poser aux auditeurs Donc qu'est-ce qui vous plaît Dans un synthé Donc on va demander Un citron J'ai dit son cul Alors moi ce qui me plaît C'est que tu peux jouer De la trompette Sans avoir besoin De savoir jouer De la trompette Je vois pas Je vois pas tellement Le rapport avec Tu mets sur le programme Trompette Et tu joues du piano Tu pianotes Et ça fait de la trompette Ah bon T'as le son de trompette En fait Tu peux faire de la harpe Tu peux faire des maracas Tu peux faire du triangle Tu peux faire Je sais pas moi Du piano Tu peux faire du synthé techno Du synthé moins techno Non mais Et là je pense que Là t'es en train de nous citer Pas mal de trucs Donc ça Je pense que Jean-Michel pourra nous répondre Là-dessus Sur techno Je me demande Si on peut faire quelque chose De potable Même en house En house Oui c'est possible Effectivement sur un synthétiseur Mais techno Je ne pense pas House Oui plutôt oui Après on rajoute des voix dessus Et on peut faire quelque chose Exceptionnellement bien Oui tout à fait Ok Tu pues ? Moi je viens de te répondre Je te l'ai dit tout à l'heure Attends T'as répondu Ongle de pied Ongle de pied est parti se coucher Excuse-moi Et entre temps Donc j'ai rappelé Comme t'as fait ton annonce tout à l'heure Pour des gens qui s'occupaient de ça Il y a Bernard Qui est responsable d'un magasin Il était sur Minitel Et on l'a rappelé Bernard Voilà Allo Bonsoir Bonsoir Bernard Bonsoir T'appelles d'où ? De Saint-Etienne Et on écoute Fun sur Sur une radio pareil Sur la radio Sur la radio ouais Non mais je demande à Manu la fréquence Attends bouge pas je te trouve ça Bah j'essaye Donc bah Ma chatte elle est partie Game over Moi je trouve C'est l'esthétique C'est vraiment joli En plus genre Faut que ta chatte elle est à l'accueil non ? Gare à celui qui s'amuse à dire des conneries Parce que ça va virer Il va casser Moi j'ai pas dit J'ai pas dit pour lui Gérard Donc game over Ouais moi je t'ai dis Donc c'est l'esthétique de la machine T'as plein de touches C'est vachement joli C'est très esthétique T'as des touches noires Des touches blanches et tout Ouais mais c'est ce que j'ai dit tout à l'heure Je pense Mais c'est toujours pareil en fait C'est Bernard là Oui Bernard J'ai pas entendu la fréquence de Saint-Etienne Non moi non plus La fréquence de Saint-Etienne 86.3 Et non c'est 104.7 Ouais ça a changé Ah mince Bravo Manu Bravo Manu Bravo Manu hein Je sais pas si ça a changé Si ça a changé Tu demandes à ce qu'on Mette ton tableau à jour Donc Bernard Oui donc moi je tiens un magasin De Saint-Et plus A Saint-Et Et je tiens à dire Qu'il n'y a plus que des touches Noires et blanches Qu'on peut les faire De couleurs différentes Les gens peuvent demander Aujourd'hui de faire des synthétiseurs A la couleur dont ils veulent Comme on fait les matriculations Des voitures Donc si on veut avoir Les touches jaunes Et je sais pas moi La place des touches noires On peut avoir les touches noires Oranges Non mais Bernard Oui Quel est le Je vois pas le Le rapport avec la question Non parce que T'as l'air Non mais Bernard Bernard Bernard Quel est le rapport Avec la question Tu peux m'appeler Nanar Enfin bon comme Bernard Non non mais Non non mais Je vois pas le rapport Parce qu'on parlait Des touches noires On a C'est pas parce que j'ai dit Qu'il y avait des touches noires Et blanches Sur un Saint-Et Je vois pas le rapport Avec le thème du Le thème du débat Sur les Saint-Et Non mais c'était juste En jaune En jaune Ou Orange Orange Ou bleu Ou vert si tu veux C'est pas grave C'est Jean-Michel Je voulais préciser que Moi je connais C'est Bernard Pardon C'est Bernard C'est Bernard à l'appareil Ouais bah Bernard Tu te calmes C'est le passé versé Jean-Michel avait Jean-Michel avait déjà acheté Du matériel chez moi à l'époque Quand il travaillait Oui c'est vrai Tu sais on se connait bien Moi je voulais préciser d'ailleurs Que bon Moi je connais Des joueurs de synthétiseur Qui sont racistes Et qui jouent Que des touches blanches Il fallait le préciser ce soir C'est vrai C'est bien placé pour Pour le C'est pour ça C'est pour ça que des fois On m'a demandé Est-ce que les touches noires Soient jaunes ou oranges Voilà Les jaunes c'est des chinois D'accord Non mais on fait pas du monde Là-dessus Donc moi Il y a une question Il y a une question IRC Une question IRC Non non pas du tout Ils ont marre des synthétiseurs Ça les fait chier Ah bah ça les fait chier Qu'ils arrêtent Et puis qu'ils aillent se coucher Gérard Ça me prend les vacances Gérard Oui Oui donc c'est Bernard Parce que moi je suis Donc je tiens un magasin Où je ne fais que du synthé Et de l'orgue Et j'ai entendu quand même Beaucoup de choses Assez absurdes ce soir Heureusement que Jean-Michel Jarre Est venu intervenir Alors il est vrai Qu'il y a des synthés Qui peuvent coûter 150 francs Mais bon ce sont des synthés Qui ne contiennent plus qu'une note Oui mais ça existe Oui mais seulement Tu peux choisir la note Do ou ré Mais bon ça ne te fait pas Non plus le Voir le la Le la Et effectivement Il y a des synthés Qui coûtent très très cher Alors il y a aussi Ce qu'on appelle Les systèmes de disquettes Incorporés en fusion C'est-à-dire que là Par contre c'est directement Avec un ordinateur Et là ça coûte Oui on parle en euros Ou pas non ? Non pas ce soir Bon si Jean-Michel est d'accord On peut parler en euros Gérard on peut parler en euros Oui on peut parler en euros Ce soir c'est important Bon bah d'accord alors Je peux préciser Ça vaut à peu près 150 000 euros Donc on multiplie par 6 Ça vous donne Bon c'est pas très très cher Il y en a pour 250 000 francs D'accord Ok Donc prochaine question Donc Que peut-on rajouter Comme musique Sur un synthé ? Ah c'est une bonne question ça Pour 250 000 francs Ça peut paraître cher Mais bon Mais Oui C'est Jean-Michel Gérard Je peux répondre à cette question Oui Peut-être que Bernard A pas terminé la question d'avant Je pense Non non mais c'est bon On va pas s'éterniser Sur une question Ça me semble cher 250 000 francs Mais c'est vrai qu'il y a des gens Qui viennent acheter Pour 250 000 francs Non mais attends Il revient sur la troisième Alors qu'on est déjà A la septième Ah Bernard Non mais c'était juste Pour préciser quoi Non mais non mais Il y a un curé qui est venu Qui voulait acheter un orgue Parce qu'on parle des synthés Mais on parle pas des orgues Mais qu'est-ce que j'en ai à foutre moi Des curés Des Des curés Qui a des camarades Qui a des coups qui vendent C'est tout Gérard c'est Jean-Michel C'est vulgaire Oui c'est vrai c'est vulgaire Oui donc Vous posez la question Sur les Avec un synthétiseur On peut rajouter des bruits De paix De rot Ou de tout ce qui s'ensuit Voir une chiasse Ou quelque chose Dans ce genre là On peut faire tout Avec un synthétiseur Des pets de fous Oui d'accord Des pets de fous Ok Bernard Bernard Bernard Oui non mais Je sais pas Je suis un peu déçu Parce que j'ai l'impression Que le débat Bon moi je suis Un responsable d'un magasin Qui ne fait que du synthétiseur Et avec ce débat de ce sort Malheureusement Vous ne donnez pas Une belle image De cet instrument Qui est comme l'avait Très bien dit Un de vos réalisateurs L'instrument du futur Et j'ai l'impression Que vous en parlez Comme si c'était Une vieille harpe Alors que Je trouve ça un peu dur Pour tous les fans De synthétiseurs Non mais Bernard On va essayer de se rattraper Gérard il faut que tu remontes Le truc là Non mais le problème C'est que bon C'est bien de faire un débat Sur les synthétiseurs Mais quand on En animateur Quand on n'est pas Le sujet Je pense qu'il vaut mieux Non je connais pas Le synthé Je connais pas La musique du synthé Non mais vous connaissez Non mais je connais pas La musique Non presque pas Mais tout à l'heure J'entendais Vous voulez savoir Comment fonctionnaient Les sons de synthé Je veux dire Et alors Parce que C'est moi qui fais Les débats C'est tout Oui mais d'accord Mais si ça vous plaît pas Dans ce cas là Vous faites une chose Vous raccrochez votre téléphone Et vous changez de radio Vous écoutez Vous écoutez ça chez vous Et c'est tout Ça sert à rien De réagir comme ça Guimauve Je pense que ce débat Peut apporter beaucoup Pour les novices En la matière du synthétiseur Complètement Jean-Michel a raison Guimauve Vous demandez des réactions Quand même de spécialistes Moi personnellement Je pense qu'il n'y a pas besoin De rajouter d'autres instruments Parce que le synthé C'est quand même quelque chose D'assez complet Non mais comme musique Ouais Comme musique Guimauve Parle devant ton téléphone Ma chérie Mais j'ose pas Je suis un peu inquiétée Ouais mais fais-le quand même C'est encore Bernard là Parce que On On parle des synthés Mais on peut y faire des violons On peut mettre des violons dedans On peut mettre toutes les machines On peut mettre d'autres instruments Pour en faire plus qu'un Aujourd'hui il y a des gens Des artistes Qui vont mettre par exemple Un bruit de Un bruit d'orgue dans le synthé Un bruit de violon Et qui vont faire des violons Avec des synthés Donc avec un synthé On peut faire un morceau Comme s'il y avait 150 000 instruments Et 250 000 personnes Je veux dire Non mais à ce compte là A ce compte là Bernard et Jean-Michel Je pense qu'ils seraient d'accord avec nous C'est qu'il faut avoir une remorque Une remorque pour synthé Oui C'est une remorque Américaine d'ailleurs Exceptionnellement pardon Dans les magasins Qui vendent des synthétiseurs Bah chez moi par exemple Mais tu vends des remorques Bernard ? Ah ça c'est plus Oui alors le problème C'est pas trop de pub Bernard quand même Je lui en ai déjà acheté Plus ou moins Parce que Gérard Il va te choper ça Non mais Tu pues Oui Toi même Oui c'était quoi ta question ? Je suis désolé mais j'ai On parlait des remorques Des synthés Que peut-on ajouter Comme musique sur un synthé ? Bah je pense qu'on peut On peut rajouter tout ce qui nous passe Par la tête quoi Non non non Une sonnerie de voiture Enfin une sonnerie N'importe quoi non ? Moi je connais pas très bien Vous savez J'aimerais bien J'aimerais bien connaître un peu plus Citron ? Oui Tu peux mettre des animaux Qui font des bruits Ou tu peux mettre Le bruit de la mer Ou tu peux mettre ce que tu veux C'est vrai C'est tellement facile Elle est toute naze elle C'est pas possible Il faut la vivre elle Elle ne connait rien Non moi dans mon magasin Saint-Etienne Pas de marque Bernard ça commence à bien perdre Parce que je voudrais Quoi ? Je vais préciser Gérard Car moi j'ai besoin De faire un peu de pub Pour acheter des synthés Dont je me sers Ouais mais toi Toi Jean-Michel C'est pas pareil Donc on va passer A une autre question Non mais Gérard T'es en train de bâcler le débat là Non mais c'est une erreur Parce qu'il y a des mecs Qui écoutent Et qui sont intéressés du synthé On a des professionnels En plus on a Jean-Michel Jarre Quand même Ouais Bernard est là Et on attend lui Lui pour l'instant Il est en train de me sortir Son truc de Saint-Etienne On en a rien à foutre A Saint-Etienne Vous pouvez m'appeler Jean-Mich Bon Bernard Oui Il faut que tu donnes envie A Gérard De continuer le débat Et d'intéresser les gens du synthé Moi ce que je peux dire C'est que je l'invite De venir à mon magasin A Synthé Plus Magmar De toute manière J'irai jamais à Saint-Etienne Allez hop Quel genre de musique Peut-on jouer sur un synthé ? Ah bah du synthé Qui ? Bernard du synthé Bah tout le monde Bah d'accord On appelle ça Une musique synthétique Gérard Voilà En fait c'est quoi Le nom de ton magasin ? Non mais attends Le nom du magasin Si vous voulez Des renseignements Vous attendez hors antenne S'il vous plaît Merci 8 Avenue du Mer Ouais bah alors Bernard Bonne nuit Gérard A quel coin ? Hop Pour l'adresse c'est très bien Lui tu peux l'envoyer se coucher Synthé Plus 8 Boulevard du Mer D'accord merci Avenue du Mer Avenue du Mer pardon Non mais c'est bien pour lui Hop Terminé pour lui Comme ça il comprendra Sa douleur aussi celui-là Ça en fait déjà Trois On me souvient Trois dans un premier débat Faut le faire Gérard c'est trop noir Oui Oui et tu m'as pas laissé répondre A la question tout à l'heure Tu m'as un petit peu oublié A la première A ta question d'avant Que peut-on Que peut-on rajouter Comme musique sur un synthé ? Ouais bah moi je voulais dire Qu'on peut pas rajouter de musique Sur un synthé Un synthé ça sert à rajouter Par dessus de la musique Normalement Non c'est faux monsieur Bah si C'est tout à fait Maintenant On prend les vieux disques Pas tous en même temps C'est pas C'est pas un champ de bagarre Maintenant On prend les vieux disques On les sample Ça c'est des boîtes à rythme Actuellement C'est des boîtes à rythme C'est des boîtes à rythme C'est des boîtes à rythme C'est même pas la musique électronique En elle-même Non non ça y est c'est bon On se calme Parce que moi je tiens un magasin Également à cette année Qui s'appelle Rythme Plus Non mais ça y est On se calme On se calme C'est Bernard ou quoi là ? Oui Boîte à rythme plus C'est encore lui ? J'avais repris un autre Mais je sais pas Je me suis fait blouser quoi C'est quoi la rue ? Il doit repasser sur les lits 7 avenue du maire C'est même pas la peine Il parlera pas lui Parce que Je lui laisse pas la parole Donc la question suivante Maintenant c'est Quel genre de musique Peut-on jouer Au santé ? Au santé ? Oui Bah sur un synthétiseur On peut jouer On peut jouer à la musique synthétique Je viens de vous le dire C'est qui ? C'est Jean-Michel C'est à dire plusieurs styles de musique On peut jouer de la techno Comme de la house Comme du rock Comme du rap Oui de la house Si vous voulez Ok Au standard Oui un autre professionnel du synthé Qui s'appelle Tristan Et j'ai pas eu le temps de lui demander D'où il... Ah je le connais aussi Bonsoir Bonsoir Tristan Bonsoir T'appelles d'où Tristan ? De Lyon De Lyon d'accord Et tu fais quoi ? Je travaille également Dans la musique Je travaille pour un magasin Et la fréquence de Lyon ? C'est quoi le nom de ton magasin ? Non non mais c'est On va pas commencer comme ça Musique plus à Lyon Oui voilà Je connais bien lui aussi C'est quoi la rue ? Bon Citron Guillaume Je sens que pour vous Ça va mal s'écarmer On n'a rien fait Alors nous on voit Également des guitares électroniques Non mais c'est pas Je crois que c'est pas Le thème du débat Donc c'est quel Quel jour On parle de la musique On parle de synthé Mais c'est la musique électronique Et il y a également Des saxophones électroniques Des Même des accordéons Des accordéons électroniques Il y a même aujourd'hui Le nouveau Comment on appelle ça Les On se fout là L'harmonica électronique Les putain bec électronique Également Voilà donc Bon bah moi je vous invite Tous à venir à Où ça ? Non non il n'y a pas D'où ça Pas de pub Tristan fais gaffe Gigmove Moi je vous invite A Musique Plus à Lyon Gigmove Oui mais en fait Je ne coupe pas la parole Il est en train de parler Non non mais Maintenant tu réponds Tu réponds à la question Je te demande de répondre D'accord C'est celui du général Leclerc Alors lui Tristan terminé Lui Au revoir Tristan Salut Ça en fait 4 C'est bien Continuez comme ça Bien manu Contre le deuxième débat Il n'y en aura pas Ah tiens c'est nous Attention Je dirais Toutes les Toutes les personnes Qui sont intéressantes Qui parlent de synthétiseurs Sans donner Sans préciser Les adresses où qu'ils sont Donc ça fait déjà le deuxième Qui s'amuse comme ça Donc moi j'aime pas Ça leur apporte beaucoup Pour leur magasin Oui mais peut-être Peut-être pour eux Mais pas pour moi Je dois seulement te dire Gérard tu n'es pas très crédible Par rapport à Jean-Michel Gérard Qui est avec nous Gigmove Oui alors On peut faire de la musique techno Oui La house Tout ça Et on peut même faire De la musique classique Et puis on peut faire Un peu tous Tous les styles de musique Il y a même la musique orientale Maintenant Qui se fait sur synthétiseur Oui d'accord Tu peux ? Moi je crois que Comme l'a dit Jean-Michel Oui Jean-Michel Je n'ai pas ma place Excuse-moi Jean-Michel Tout le monde l'a dit Juste après On peut vraiment jouer Quasiment de tout De la techno De la house De la synthétise De rien ajouter Là on va Sur IRC Non au standard Ou non IRC Tout de suite C'est juste une conclusion IRC Bon on va attendre un peu Alors on va prendre Au standard On va prendre Guillaume Qui est musicien lui-même Qui voulait réagir Genre de synthé aussi non ? Oui oui oui Tout à fait musicien Il est d'où ? Il est de Limoges Et la fréquence Je vais vous la dire tout de suite A moins que Guillaume Veuille la dire lui-même Je la connais pas Ah mince Alors tu habites Limoges Et tu connais pas La fréquence de De fin de radio Je suis pas de Limoges Je suis en concert en ce moment Là-bas Je travaille Enfin mon nom d'artiste C'est Bébert Ah Guillaume Je le connais bien lui aussi 92.2 FM à Limoges Pourquoi ? On m'a dit C'était 93.4 moi Ah putain Manu Mais c'est pas vrai C'est lui qui fait une erreur Vous pourrez Peut-être accorder Vos violons Guillaume Guillaume Bonsoir Donc pour toi Alors moi je travaille Dans un Je peux juste dire Que je travaille Avec un groupe Qui s'appelle Les Electrochocs Ouais alors vas-y La Russe s'il te plaît Non non mais Sinon ça va Je sens que De toute manière On va faire conclusion Comme ça Mais c'est un groupe En fait qui Non mais écoutez Laissez parler Moi je travaille Dans l'électronique Je sais pas que je Moi je travaille Sur un synthé Toyota 130 Voilà pour bien préciser La marque C'est important Parce qu'il en existe Plusieurs marques Et c'est une marque Que j'affectionne Tout particulièrement Moi j'ai testé Plusieurs synthés Et c'est vrai Je connais d'ailleurs Musique Plus Là de Lyon Je connais bien Mais ça on en a rien à foutre Guillaume Et je trouve Oui D'abord Grand respect à Jean-Michel Je passerai Samedi Prendre mes bons tempis Oui Non mais ça Vous règlez Votre popote Hors antenne Ah oui mais je suis Overbooké Il faut que je règle Donc Citron Oui Donc toi Vite parce qu'elle est Assez pressée C'était quoi déjà Excuse-moi La question Quel genre de musique Peut-on jouer Sur un synthé Tout Surtout la musique Faut que je fasse vite Parce qu'il faut que je répète Là Ouais ben Magne-toi de poser des questions Tout Non mais Magne-toi de poser des questions Si je veux Guillaume Tu peux m'appeler Bébert Ouais non mais Tu vas te calmer Mon ascard Parce que Sinon tu vas aller vite Répéter Je peux juste faire un peu de pub Pour le groupe Les électrochats Non non non Y'a pas de pub à faire Ils se produisent où ? Ouais Donc Le 27 octobre On reste à Limoges Oh Tu Quoi mais quoi ? Les plats sont de 20 Mais t'es con Pourquoi t'es un connard ? Mais Manu C'est toi C'est toi qui gère les auditeurs Fil d'art Pas connard En plus Pauvre con va T'es vraiment Une bite Une bite con Putain C'est pas bon C'est pas vrai De devoir Travailler avec Une équipe de cons C'est fou ça Je crois que vous avez Un petit en besogne Monsieur Gérard Mais Terminé Conclusion Orgue plus à Paris Pour mon frère Bon Gérard Je vais faire la conclusion De l'IRC Vas-y Fais conclusion Tous les gens de l'IRC Sont d'accord Ils savaient que Tu étais un gros teaser Et maintenant Ils savent que tu n'es pas sain Voilà C'est bien Donc Citron pour toi Oui conclusion Oui Je vais continuer à jouer Sur l'orgue de ma tante Ah non Faut jouer avec un Toyota 130 Ouais mais j'ai un bon tampi Moi à 150 balles Mais moi je possède Des Tu viens de la part de Bébert Tu viens Mon Bébert Tu fermes Tu fermes Ta goule Vous venez de la part du groupe Les électrochocs Vous avez 5% Bon Manu Tu me le vire Lui c'est terminé C'est le boulevard de Clichy Ouais Dans le 18ème Ok Il a été vachement viré Bravo Manu C'est le standard Tactile J'arrive pas Oui oui oui C'est là Je vais te calculer quelque chose Moi mon con Mon con je pense Tu pubs pour finir Conclusion Oui bah moi je voulais dire Que j'étais très content Quand même de parler Avec Jean-Michel Jarre Et je suis aussi content D'avoir plein d'adresses Maintenant pour les Saintes Ouais mais Vérifie bien Vérifie bien Que c'est des bonnes adresses Parce qu'à mon avis C'est des fausses adresses Alors Manu Tu dégages Tu fais pas le deuxième débat Je te veux plus au standard D'accord Tu peux prendre ton VTT Non mais faites pas de pub comme ça Tu prends ton VTT Et tu te passes Ok Allez Gérard Y'a Jean-Michel Jarre Qui s'en passe Game over Ouais bah moi je vais continuer A casser mes assiettes D'accord bah c'est bien Maintenant on rachètera Sur le marché La semaine prochaine Exactement Jean-Michel Jarre Pourquoi la conclusion ? Le débat n'a rien apporté Vu qu'on a entendu Un mec bourré comme vous Qui a porté des choses Complètement abstraites Envers la musique synthétisante Non Et je ne vous salue pas Monsieur Gérard Et bah c'est bien Dans ce cas là On va s'écouter Je vous mets une quexotte Dans le cul Et bah c'est bien Vous pouvez garder Vos musiques de naze alors Et continuer On va pas l'écouter alors On va peut-être pas en mettre Un de morceau On va pas l'écouter Si c'est prévu Sur la fin du débat Il t'a insulté ? On va s'écouter Surtout toi Tu fais pas de conclusion Bah moi conclusion Conclusion c'est que toi Ouais T'as d'habitude Quand c'est Max Ça se passe impeccable Là tu m'as fait des conneries Tu l'as T'as laissé les gens en parler Mais c'est pas moi Qui tire les gens C'est Manu Non mais lui Lui de toute manière Il va reprendre son VTT Il va rentrer chez lui C'est moi qui vais rentrer chez moi Et puis toi aussi Comme ça je vais être tranquille Comme ça Rigo Va passer au standard Et sur l'IRC On aura personne Et Olivia la prend Si il faut quelqu'un sur l'IRC Ah non Personne à l'IRC Donc pour le deuxième débat Il y a 800 connectés Je peux pas les laisser C'est vrai Donc conclusion c'est con Parce que Manu Tu m'as fait du boulot dégueulasse Ça c'est un peu de ta faute Pour moi je suis désolé Je savais pas que ça allait partir en couille Avec Jean-Michel Mais non Mais non T'es jamais au courant Abrouti La semaine dernière Tu me fais du boulot Du bon boulot Cette semaine Tu m'as fait du boulot Tu me fais de la merde Mais ça arrive Maintenant si c'est pour me faire de la merde Tous les jeudis C'est pas la peine Je t'ai commis vu Tu viens jusqu'à minuit Et après minuit Dès que tu me vois Tu te casses Ça vaudra mieux pour toi Il y a un niveau du débat Sur les synthés Toi le synthé Moi le synthé C'est une musique que j'adore C'est ta passion Moi j'aime bien La musique C'est tout D'accord Donc le synthé C'est bien Voilà D'accord Donc on va se quitter Enfin on va finir le débat Avec un morceau De Jean-Michel Jarre C'est lequel ? C'est toi qui as choisi C'est la plage 2 C'est la plage 2 Et sur la plage 2 J'ai Oxygène numéro 8 Et on se retrouve tout de suite après Pour le deuxième débat Qui va porter sur L'harcèlement sexuel L'harcèlement sexuel Les numéros 0875000 Et toujours l'IRC Pour un peu le radio Et 0803 Aussi 085000 Au cas où le numéro vert Ne fonctionne plus bien sûr == Le débat sur le harcèlement sexuel == === Contexte === === Les personnages === === Transcription === Et voilà, vous m'avez écouté Jean-Michel Jarre, donc Oxygène 8, et donc pour l'instant on va attendre qu'au standard on me donne les auditeurs, donc le débat, ça porte sur les harcèlements sexuels, alors donc on va déjà poser, comme on attend, je vais attendre encore un petit peu, donc la première c'est, que veut dire, alors on a Marmite, on a Frisbee, Cassoulet, on a Bidon d'huile, on a Point Noir, attends, Ericou est en train de gérer parce que c'est pas son taf, donc t'as voulu que ce soit rigolo, ça a l'air sérieux c'est les casques, et Point Noir. Sinon, moi je peux peut-être dire un petit truc sur l'IRC, on est 858. Eh ben c'est bien, voilà. Ok. Alors donc, Marmite, bah d'accord ça commence déjà bien. C'est pas très professionnel ça quand même. Donc Marmite, bonsoir, donc on écoute Fun Radio à Rouen sur 104.8. Ouais c'est ça, ouais. Et toi là, comme d'habitude. Ah ouais, c'est vrai avec... D'accord, dégage. Ah mais ça va ? Dégage, dégage. Mais ça va pas, t'es fou ? Dégage un maximum. Ah mais oui, je dégage. Dégage. Un maximum, ça vaudra mieux pour toi. Donc Marmite, on peut écouter Rouen, à Rouen, Fun Radio sur 104.8. Ouais c'est ça. Donc Frisbee's, 22 ans de Bordeaux sur 101.7, Fun Radio. C'est exact, j'écoute sur Internet, c'est exactement ça. C'est pas sur Internet, c'est sur l'AFM, d'accord ? Pardon. C'est pas du tout pareil. Cassoulet, Disneyland, Seine-et-Marne... Je gère Cassoulet, pour l'instant elle est pas là. Ah d'accord. Donc Bidon d'huile, on peut écouter Fun Radio... C'est Bidon d'huile qui a raccroché. Non mais hé, oh ! Tu vas pas commencer à foutre ta merde avant que je te gouffe, toi ! Moi je suis pas là, c'est la merde au standard. C'est de ma faute, c'est la première fois que je fais le standard, excuse-moi Gérard. Alors c'est qui qui est parti ? Donc Bidon d'huile est parti, et je suis en train de gérer Cassoulet. Et je rappelle des gens. Ah bah là, ça commence bien. On a Poupon, on a Poupon aussi. Bonsoir Poupon. Poupon, bonsoir. Oui, salut, bonsoir. Donc t'es d'où ? Je suis de Paris, je suis de Paris. Donc t'as quel âge ? J'ai 23 ans. 23, et on écoute... 101.9. 101.9. Et on accueille aussi... On accueille aussi Point Noir. Bonsoir Gérard, bonsoir Manu, bonsoir tout le monde. Bonsoir. Alors donc, première question. Donc que veut dire le mot harcèlement sexuel ? On va demander à Marmite. Ouais, ça veut dire quand t'es harcelé sexuellement. Ouais mais... Que veut dire exactement ce mot ? Ouais bah ça veut dire que t'es un canon, et puis tu te prends plein de mains au cul. Ouais non mais attends, t'es un canon, tu veux dire un top modèle ? Ah non, t'es un canon. Non mais attends, un canon, un canon, un canon, tu veux dire quoi dans... Bah t'es un canon, t'es super belle. Ah bah donc, je viens de te dire, un top modèle, tu me dis non. Ah non mais t'es pas forcément top belle. Bah mais attends, un canon pour moi c'est un top modèle, je suis désolé. Ah bah ouais d'accord, mais on n'avait pas le même mot alors. Bah oui mais un canon ça veut dire ça pour moi. Ah d'accord. J'ai récupéré le bidon d'huile. Salut Jean. Salut le bidon d'huile. Donc cassoulet... J'ai trouvé quelqu'un d'autre. Ok, donc on n'a pas de cassoulet, c'est bon. C'est pas grave, j'ai trouvé une choucroute. Bah tiens, on a une choucroute là, comme elle veut faire partie du deuxième débat. Ah non, non, non. Quoi non, si. L'invité mystère. Le bulldog. Le bulldog. Le bulldog il t'emmerde. Putain. Tu vois, comme ça t'es tout de suite servi là toi. Alors attends, celui qui vient de dire le bulldog, maintenant tu vas répondre à la question. Ça va t'apprendre à ouvrir ta gueule. Allô ? Bah qu'il réponde. Ouais bah qu'il réponde, alors c'est qui ? Entre Poupou, Point Noir, Bidon d'huile ? Ah c'est pas Poupou. C'est pas Bidon d'huile Jean. Non et c'est pas Point Noir. Ah non, non, j'ai rien dit moi. Ouais c'est Pierrot. Hein ? Ouais c'est Pierrot qui a dit ça. Non mais attends, il sort d'où celui-là là ? Bah excuse, je suis arrivé, on va pas avancer. Il sort d'où, il sort d'où lui ? Non c'est Bidon d'huile. Non c'est pas moi Jean. Excusez-moi, pour répondre à la question c'est... Eh moi je suis... Eh Gérard, c'est le bordel hein, quand c'est Rigaud. Eh mais c'est pas là, allez, allez, allez, Rigaud, tu retombes là, quand tu retombes là-bas, non non, parce que là c'est le bordel. Si je peux me permettre quelque chose, excusez-moi, on nous dit un canon, on nous dit un canon, c'est fun, et on nous dit que le boulet c'est Gérard, merci Jean-Denis. Non pas t'es fatigué, tu rentres chez toi. Ah ouais, j'ai compris là. Hein, t'es fatigué, tu rentres chez toi toi. C'est chaud là. Hein, parce que là, c'est le vrai bordel. Là c'est... Je peux pas, je peux pas commencer le premier débat, le deuxième débat, dans des conditions de merde. Ouais. Alors Pildar, Pildar. Bon les mecs. Pildar. Calme-toi. Dégage chez toi, t'es fatigué. Allez hop. Manu au standard. Manu au standard. Manu au standard. Allez c'est bon, ça y est, on se calme. Pildar, tu rentres chez toi, t'es fatigué. Allez hop. Ça vaudra mieux. Alors donc, pour toi Marmite, toi, le moins harcèlement sexuel, pour toi c'est un canon. Bah ouais. Donc canon, donc c'est comme j'ai dit tout à l'heure, c'est un top modèle, tu m'as démenti. Ouais d'accord. Hein ? D'accord, on est bien d'accord. Oui d'accord. C'est ta réponse. Ouais. Frisbee. Euh oui, je crois que l'harcèlement sexuel, ça doit avoir un rapport avec Binkington, non ? Non mais attends. Non. Eh Frisbee. Oui ? Oui, je suis là. Que veut dire le mot harcèlement sexuel ? C'est pas de savoir si Bill Clinton, il a été harcelé, ça on en a rien à foutre. On est bien d'accord. Quand même, il a été harcelé quand même. Non mais attends, ça c'est son problème, c'est sa vie privée, c'est pas la mienne. D'accord. Gérard, on va accueillir le dernier auditeur, il s'appelle Sifflet. Allo ? Salut. Bonsoir. Bonsoir. Salut Sifflet. T'appelles d'où ? De nulle part. De nulle part. Alors donc, la fréquence c'est nulle part, d'accord. Dis-moi Sifflet, je peux t'y faire dedans ? Bidon d'huile. Ouais, donc pour moi, le mot harcèlement sexuel en lui-même, pour moi, c'est les gens qui ont des problèmes à faire l'amour. Non mais attends. Je crois que c'est ça. On te demande, je te pose la question parce que je commence à en avoir marre. Que veut dire le mot harcèlement sexuel ? Je vais te le dire, c'est les gens qui n'arrivent pas à baiser. Non mais attends, toi t'es con. Il n'a rien compris. Non, il ne comprend pas lui. Non mais attends, prends-le hors antenne et explique plus sur lui. Je vais m'expliquer parce qu'ils ne sont pas capables. Prends-le bien. T'es même plus capable de faire des débats correctement à part faire la réa, c'est tout ce que t'es capable de faire. Ouais. Bidon d'huile. C'était lui, c'était lui. Je viens de le dire Gérard. Non, c'était Frisbee qui ne comprenait pas. Frisbee, je suis toujours là. Mais alors toi, pour toi ? Mais je viens de répondre. Mais c'est quoi là ce bordel ? Ah, ce n'est pas moi, je ne suis plus là-bas. C'est quoi là ce bordel ? Frisbee vient de répondre, bidon d'huile. Eh, il faudrait peut-être savoir. Il est bidon d'huile. Mais je suis là Gérard. Alors pour toi ? Ouais, donc en fait, le harcèlement sexuel, c'est ceux qui sont harcelés sexuellement. C'est ceux qui sont, on va dire, comment je pourrais t'expliquer ça ? C'est par exemple, c'est comme l'affaire Big Litton, voilà. Bon, non, je ne vois pas du tout le rapport. Point noir, tu es là toujours ? Ouais, je suis là. Donc pour toi ? C'est persécuter quelqu'un physiquement et moralement pour avoir son cul. Ouais, c'est ce que je voulais dire. Ouais, mais toi, de toute manière, tu veux toujours dire ce que les gens ils répondent avant toi. Il est heureux. Poupou ? Ouais, ben en fait, le harcèlement sexuel, c'est, tu as une fille, elle est là. Ok, après tu as un mec, il est là. La fille, elle se met comme ça. Et puis le mec, il arrive comme ça. Et puis il lui met là. Et puis la fille, elle dit ça. Oh non, ben attends. C'est aussi dans l'autre sens quand même. Oh non, mais il peut y avoir des variables. Attendez, il y a une question IRC. Oui, sur IRC, on me demande pourquoi le harcèlement sexuel est-il sexuel ? Ça, tu vois, c'est une question qu'on m'avait demandé de poser et que je ne poserai pas parce que je ne vois pas du tout le rapport. Parce que si on parle de l'harcèlement sexuel, de toute manière, automatiquement, harcèlement sexuel est sexuel. Donc, je ne vois pas du tout la question de poser aux gens parce que si je demande à une personne de me répondre sur cette question-là, qu'est-ce qu'elle va me répondre ? Parce que c'est sexuel. C'est sexuel, c'est tout. C'est tout. C'est Frisby, là. Je crois qu'on peut faire un harcèlement sexuel avec les pieds, par exemple. Mais non, mais est-ce que t'as compris la question IRC qu'on a eue ? Je crois. Répète-la-moi si je me suis perdu. Alors, la question, c'était est-ce que l'harcèlement sexuel est sexuel ? Pourquoi est-il sexuel ? Pourquoi est-il sexuel ? Moi, je peux répondre. Qui ? C'est Point Noir. Oui. Parce qu'il n'y a pas que l'harcèlement sexuel. Il y a tout le sexe allemand aussi. Mais attends, dans ce cas-là, pourquoi est-ce qu'il est sexuel si c'est sexuel ? Automatiquement, si on parle de l'harcèlement sexuel, de toute manière, on va parler de sexe. Donc, l'autre, avec sa question, je voyais pas le rapport. Si, Gérard, regarde-moi. Moi, sur l'IRC, c'est du harcèlement textuel. Oui, mais c'est pas pareil, toi. S'il te plaît. Oui, moi... Attendez, attendez, attendez. Quand même pas tout le temps les mêmes. Moi, je considère que l'harcèlement sexuel peut être vécu comme un viol. Oui, mais ça... Parce que si la personne ou si la nana n'est pas consentante, c'est considéré comme un viol et comme un crime. Oui, alors, dans ce cas-là, moi, la question que je vais poser, parce que là, je pense que je vais pas faire toutes les questions, on n'aura pas le temps. Donc, moi, je vais déjà attaquer sur la 3. C'est pas grave si on a 2. C'était quoi, la 2 ? C'était quoi ? Non, c'est curieuse que ton en pratiquant le harcèlement sexuel, mais ça... C'est un déclin. C'est pas mal. Oui, alors, qui veut répondre ? Tiens, ben, Poupon ? Non, s'il te plaît, s'il te plaît, pardon, Poupon. S'il te plaît. Moi, je pense que les personnes qui font ça, qui violent des personnes ou qui font du harcèlement sexuel peuvent faire au moins de la prison et peuvent avoir aussi des amendes. Donc, je suis d'accord avec toi, s'il te plaît. Là, il y a... On m'a donné un... un sondage. Donc, alors, sur la question le harcèlement sexuel, donc, que pensez-vous du harcèlement sexuel ? Donc, il y a 20% des gens n'ont jamais fait l'amour. 30% des gens sont puceaux et 50% des gens sont vierges. Oh, Gérard ! Oui ? Moi, j'avais entendu dire que 70% des gens étaient valences. À 100%, dans le cancer. Alors, attends. Là, je vais te dire une chose. C'est qui qui vient dire ça ? C'est Bidon d'huile. Alors, Bidon d'huile. Et Bidon. Et Bidon. Et Bidon. Bidon d'huile. Ouais. Tu vois, ton nom, il porte bien. Bah, t'es vraiment Bidon. Parce que là, tu viens de jouer sur le signe astrologique du CEP. Il a pas entendu. J'ai entendu vierge. Donc, moi, je pensais que c'était le signe astrologique. Bah, ouais, attends. Et la main de ma soeur dans la culotte d'un zouave, c'est astrologique, ça ? Bon, ça, c'est pour problème, hein ? Bravo. Bravo. Alors, Bidon d'huile, adieu pour toi. Bon, j'ai eu le choix. Gérard, il y a Devi1 sur l'IRC qui te demande, alors, est-ce qu'il y a des endroits spécifiques pour se faire harceler et est-ce que tu peux donner les adresses ? Euh, non, je donne... Je connais tes adresses, oui. Non, non, mais ça, je... On parle pas de la vie privée. Loco ? Ah, non. Frisbeez, tu vas te calmer. Bah, moi, j'ai dit qu'on parlait pas de la loco, moi. Marmite ou Point Noir, vous allez vous calmer toutes les deux parce que... Non, non, j'ai rien dit, tu plaisantes ou quoi ? Oui, c'est une fille, elle a été sifflée, alors. Bon. Donc, que risque-t-on en pratiquement le harcèlement sexuel ? On va demander à Poupon. Ouais, bah, déjà, je voulais dire à Sifflé qu'il y a une différence entre se faire violer et se faire ploter les fesses, par exemple, tu vois, une main aux fesses ou un viol, c'est pas la même chose. Et deuxièmement, bon, bah, tu risques une bonne paire de claques, quand même. Ouais, mais attends, alors, moi, je vais te renvoyer la balle. Vas-y, renvoie. Par exemple, si la personne n'est pas consentante et qu'elle n'est même pas capable de te mettre une claque dans la figure, comme tu viens de dire, et qu'elle porte plainte. Pourquoi ? T'as parlé de mettre la main aux fesses à des manchots ? Pourquoi elle peut pas me mettre de claques ? Non, mais attends, Sifflé, elle t'a bien dit, c'est entre ces deux trucs-là. Par exemple, si la personne ne peut pas, comment que tu vas faire ? Tu peux me la faire décoder, j'ai pas... Attends, toi, bidon d'huile, tu la permes. Oui, je sais. Je t'ai dit de dégager. Alors, lui, il dégage pour de bon. Ouais, je parlais avec mon professeur. Ok, je l'avais calmé, mais bon, je vois que c'est pas calmé, donc hop, il dégage. Hop, terminé pour lui, c'est même pas la peine qu'il revienne sous un autre nom. Ouais. Donc, point noir. Bah, au pire, ce qui peut arriver au gars, c'est de se faire du bien, quoi. S'il arrive assez fin. C'est-à-dire, ouais, mais tu crois que en harcelant une nana dans la rue, tu crois qu'il va pouvoir coucher avec ? Bah, attends, Gérard, il y en a qui aiment ça. Bon, bah, attends, peut-être des nanas qui aiment ça. Bah, des mecs aussi, hein. Bah, ouais. Non, non, non, non, non, non, non, non. En vrai, c'est... Non, non, qui, qui, qui, qui, qui, qui ? Non, mais ça peut être du jeu, Gérard. Ouais. Non, mais attendez, attendez, attendez, attendez, pas tous à la fois. Qui est pas d'accord avec moi ? Moi, moi, moi, moi. Poupon, poupon. Poupon, bah, moi, je dis, s'il y a des punis qui a des filles, il y a forcément des garçons avec. Elles sont pas toutes seules. Elles se produisent pas toutes seules. D'accord. S'il plaît, tu voulais peut-être répondre à la... sur ce qu'elle vient de dire, là, Point Noir ? Euh, non, pas du tout, non. Non ? Euh... Oui ? Couscous ? Bonjour, Gérard. Bonsoir à tous. C'est Gérard. J'aime bien tes débats. Bonjour, Couscous. Salut, Couscous. Salut, Gérard. Ça va ? Ça va, ça va, Couscous. Y a pas de problème. J'ai pas regardé ce matin, quand même, mais ça va, carrément. OK. Bon, Gérard, on y va, là, un peu. Alors, euh... Donc, Prisby... Euh... Prisby ? Oui ? Donc, toi ? Vas-y, pose-moi... Oh, non, mais attends, hé, oh ! Tu l'as entendu ? Je vais pas m'amuser, là, hein. La deuxième ou la troisième ? Non, non, c'est la deux. Que risque-t-on en pratiquant le harcèlement sexuel ? Hop. Ben... En même temps, Couscous, tu réfléchis à la question, hein. D'accord, Gérard. Je pense que c'est vrai. On peut passer devant les tribunaux et puis se faire emprisonner, quoi. C'est risqué, hein. Faut faire attention, hein. Faut vraiment bien prévoir ce harcèlement, hein. Sinon, bon, on risque, comme je t'ai dit, voire même de se faire, après, harceler en prison, aussi. Et ça, c'est plus... De toute manière, c'est ce qui est arrivé à je sais plus qui. Je veux pas en citer de nom, parce que, de toute manière, ça me regarde pas. Ouais, non. Tapis ? Non, non, non, non, non, non. Sur celui qui a voulu jouer le con avec ses enfants, c'est ce qu'il y a. Lui, il s'est fait prendre... Il s'est fait tabasser dessus. Marmite ? Oui ? Donc, pour toi ? Tu risques gros et dans certains pays, tu peux même te faire couper les couilles. Ouais, non, mais ça, je pense... Ouais, non, mais ça, je pense qu'en France, c'est ce qu'on devrait faire sur ceux qui pratiquent ça, sur les mineurs. Ça va pas ? Ah oui, sur les mineurs, mais c'est pas du harcèlement sexuel. Non, mais alors, c'est quoi ? Attends. Non, non, mais attends. Hé, Marmite ! Attendez, attendez, attendez. Marmite, Marmite. Attendez, attendez. Marmite. Oui ? Moi, je vais te dire une chose. Alors, si c'est pas de harcèlement sexuel quand tu t'attaques sur un mineur, sur une mineure de 15-16 ans, alors c'est quoi pour toi ? Moi, je pensais qu'on parlait de harcèlement sexuel au travail. Non, mais attends. On parle pas aux fesses. Non, mais que risque-t-on en pratiquant le harcèlement sexuel ? C'est-à-dire, si tu t'en prends sur une jeune de 16 ans dans la rue, il faut pas qu'il arrête de parler de ça. Bon, ben alors ? Gégé, on parle pas des mineurs. Euh, couscous. Attends, attends, couscous. Minitel. Pas Minitel. Oui, sur Internet. Donc voilà, sur l'IRC.fanradio.fr, je le rappelle quand même, il y a Nesquik qui te demande si le harcèlement sexuel est une discipline olympique. Je vois pas du tout le rapport. C'est un tournoi de kékaraté. Ouais, demande-lui s'il y a pas un tournoi de kékaraté, lui, pour dire des conneries comme ça. Tu peux lui demander toi-même. T'as juste à dire. Tu peux lui dire dans le micro. Ben, tu réponds à la question. Est-ce que t'es ce tournoi de kékaraté pour me sortir des conneries ? Donc, couscous pour toi. Ouais, ben moi, Gérard, je pense qu'avec le harcèlement sexuel, on peut prendre un grand coup de merguez dans la boîte à smoules. Ça, ça m'aurait étonné que tu me sors pas l'histoire de ta merguez avec ton couscous. Ah, ouais, il y avait longtemps que j'étais pas passé sur l'antenne. Eh ouais, mais si, t'es passé il y a quand même 15 jours. Ouais. Qui c'est qui voulait réagir, l'habitude ? Moi, je voulais dire que dans ton débat, là, quand même, c'était un peu... On se sent un peu chier, et puis, bon, je raccroche. C'est de la merde. Au revoir. Au revoir. Au revoir, comme ça. Bonne nuit. C'était bien, Frisbee. Frisbee. Ah, ben, on se sent bien. Frisbee, il est parti. Une place de libre. Ah, ben, c'est bien, ça fait une place de libre pour les autres. Ouais. Comme ça, si tout le monde pouvait me dire que mes débats, c'était de la merde, eh ben, dans ce cas-là, on fera plus de débats. Non, non, Gérard, c'est bon, il est là, on pète les barres. Très bien, Gérard. Moi, je m'en fous, hein. Non, mais j'adore tes débats, Gérard. Moi, si tout le monde se plaint que les débats, c'est de la merde, dans ce cas-là, moi, je fais encore une question, à deux heures, je laisse la place à Rousseau, je rentre chez moi, et... Non, il était gris, il était gris, je sais pas ce qu'il avait. Non, mais on s'imagine, Gérard, on reprend, on reprend tout. Votre patron vous a-t-il déjà harcelé ? Donc, voilà, on va revenir avec la question que Marmite m'avait posée en premier. D'accord. Donc, voilà. Donc, je te pose la même question aussi, toi. D'accord. Moi, ouais, ça m'est arrivé, ça m'arrive encore, ouais. Mais elle aime ça, donc je dis rien, quoi, au contraire. Ah ouais, non, mais attends. Attends, dans ces cas-là... C'est une cochonne, c'est une cochonne. Non, non, attendez, attendez, attendez, attends, Poupou. Ouais, Poupou. Ouais, Poupou. Ouais, bah, c'est qu'elle aime ça, si elle dit rien, c'est que ça lui plaît, en fait. Bah, ouais, mais dans ces cas-là, pourquoi... Dans ces cas-là, pour pas qu'ils viennent se plaindre, après, ils t'ont... Bah, ouais, mais dans ces cas-là, si t'aimes ça, c'est que t'as envie d'avoir plus que les autres qui travaillent avec toi, c'est ça ? Non, c'est pas ça, c'est que ça permet de coucher sans t'engager, quoi. T'as pas de mec, tu couches avec tes collègues, comme ça. Ouais, non, mais attends, dans ces cas-là, si tu couches avec ton patron, c'est parce que tu veux avoir un peu plus que les autres, c'est tout. Je suis désolé. Si, si, je suis désolé. Je suis désolé. Je suis désolé. Stop, stop, stop, parmi... Non, juste, vite fait, il y a Titus sur l'IRC, il demande ton patron ou ta patronne. Ah ouais ? Ouais, mais ça, ça... Il a pas tort. Ouais, j'aurais pu préciser. Oui, Manu ? Donc, à la place de Frisbee, ce qui est raccroché, on accueille Focu, il appelle d'Angoulême sur 92.4. Bonsoir, Gérard. Salut. Focu. 93.4, voilà. OK, donc... Qu'est-ce qu'il nous reste ? Bidon d'huile est parti. Qui ? Moi, j'ai couscous. Ouais, il y a couscous à sa place. Donc, point noir. Ah ouais ? Ben, moi, c'est pas mon patron qui me harcèle, c'est moi qui le harcèle. Ben non, alors attends. Encore une cochonne. Ah non, non, attendez, attendez. Il y a que des cochonnes. Non, mais attends. Il y a que des cochonnes. Je suis désolé, regarde. Il y en a une qui se laisse faire et c'est l'autre qui harcèle son patron. Ouais, non, mais attends. Poupon, poupon, poupon. Ouais, ouais, ouais. C'est toi qui viens de réagir comme ça, non ? C'est moi, ouais. Non, mais attends. Si. Il y a que Sifflet qui n'est pas cochonne. Il y a que Sifflet qui est normal. Ouais, mais Sifflet, ça, c'est son problème, c'est pas le vôtre. Elle va répondre, elle. Le boss, il va être content. Qui ? Ben, rien, non, rien. Ben si, fini ta pensée. Ben rien, je sais pas. Sifflet, elle a peut-être pas de boss, c'est peut-être pour ça. Moi, c'est mon cas, en fait. Je suis chômeur, donc j'ai pas de patron. Ouais. Ben, je peux pas me faire harceler, quoi. En fait, c'est mon problème. OK. Alors, attends. Point noir à 17 ans, c'est toi qui te fais harceler par un patron ? Ben oui. C'est toi qui harcèles les patrons à 17 ans ? Ben oui. Non, mais tu me prends pour qui, là ? Ben, pourquoi ? Je fais un contrat d'apprentissage dans une boulangerie, je travaille. Ouais. Et mon patron, il me plaît, donc je fais du harcèlement sexuel. Ah ouais ? Ben, dans ces cas-là, à 4 heures... Attends, attendez, attendez. Dans ces cas-là, à 4 heures du matin, tu te réveilles et tu vas y ploter des... des coucouillettes alors qu'il fait sa baguette ? Non, non, non. Elle va lui ploter les pois chiches. Je le touche pas, je le provoque. Je le travaille au corps. C'est pas pareil. Non, mais alors, c'est pareil. Non, c'est pas pareil. C'est pareil, parce que tu... En travaillant sur le corps, tu peux descendre... Mais pourquoi tu lui plotes les pois chiches ? Le couscous, il a réponse à tout, hein. Euh, s'il plaît. Non, je pense que... Non, attends, attends. Poupon, poupon. Ben, je t'ai déjà répondu, moi, je t'ai dit, j'ai pas de boss, donc au pire, je peux me faire harceler par la nana de la NPE, quoi. Mais, euh, non, je peux pas me faire harceler par mon boss, y a pas rien. T'aimerais ça si t'avais une patronne ? Euh, si j'avais une patronne ou un patron pas des masses. Ouais. Parce que je suis pas fan de l'usine à six fers, quoi, mais une patronne, j'ai pas. Pourquoi pas. Euh, s'il plaît. Non, je me suis jamais fait harceler par un patron, ni rien du tout. Oh, ben, c'est clair. Non, mais pourquoi ? Dans quel sens ? Ben, elle a pas de patron. Bah, parce que j'ai jamais eu l'occasion... Elle travaille pas. D'après moi, elle doit pas être bien belle. Bon, toi, tu peux mieux te regarder ta montre, hein. Oh, là. Joli ! Joli, joli. Je sais pas qui c'est qu'a voulu lui poser ce... Je pense qu'elle a une voix bien mignonne. Je l'habituerai bien, ma couscous par contre. Elle a l'air sexy, hein. Euh, couscous, pour toi. Oui, ben, j'ai pas entendu la question, excuse-moi. Oh, ben, d'accord. Euh, votre patron vous a-t-il déjà harcelé ? Ben, moi, je travaillais à l'usine. Alors, mon patron, c'est un mec, et moi, j'aime que les grosses Fatma. Alors, je peux pas me faire harceler. D'accord. Euh... Focu, pour terminer sur ce question... Moi, Gérard, j'étais au standard avec Manu, j'ai pas entendu la question. Non, mais attends, ouais. Non, c'est vrai, c'est vrai. Non, mais t'aurais pu lui expliquer la question. Je l'ai calmé, j'ai pas eu le temps, tu viens de l'appeler, donc... Alors, Focu, pour la dernière fois, je répète la question. Votre patron vous a-t-il déjà harcelé ? Euh... Non, j'ai pas de patron. D'accord. Et donc, tu t'es jamais fait harceler ? Ben non, parce que je suis mon propre patron, donc quand je me tape des branlettes, à la rigueur, je me harcèle tout, d'accord. Et tu te tapes des branlettes avec... Ah là là, il est chaud comme la braise. Eh, eh, Focu, à mon avis, tu te tapes des branlettes avec tes secrétaires. Ah non ? Ah ben si, t'as quand même des secrétaires, si t'es patron. Euh... Non, des secrétaires, mais mal. Ouais, des mauvaises, d'accord. IRC, oui, sur IRC, il y a Cab qui te demande s'il y a harcèlement sexuel quand on branche son synthé. Ah ben... Rien à voir. C'est pas du tout le... Oui. Alors, la question, peut-on... On va réfléchir, vous allez réfléchir à la question. Vous allez réfléchir à la question. Peut-on dire que c'est un produit vendu en magasin et on va s'écouter les gens débiles ? Je respire la sardine. Et on se retrouve tout de suite après. Vous pouvez nous appeler au 0800 308 5000 et toujours le... IRC. IRC. www.frfanradio. A tout de suite. Et voilà, vous venez d'écouter les gens débiles. Je respire la sardine. Je ne sais pas si c'est vraiment ça comme titre. On nous a laissé ça, donc en... Il est parti, donc il nous a laissé ça. Donc maintenant, vous pouvez nous appeler au 0800 308 5000 et toujours le... L'IRC qui marche... Super bien, je crois. Combien de connectés, à peu près ? On a dépassé les 800. J'espère atteindre les 1000 d'ici 3h du matin. Combien ? On me dit 989. On y est presque. Joli ! Attends, déjà, la semaine dernière, on était à 856. On bat les records, ce soir encore. C'est dommage que l'humidité ne fonctionne pas parce que je crois qu'à partir de 200 connectés, il n'y a plus personne. Ça a sauté. Ah ben alors, c'est dommage. Donc, on va récupérer Marmite. Marmite ! J'ai allumé, hein. Oh ! Ouais, ouais. Ouais, pardon, pardon. C'est bon. Marmite. Bonsoir. Rebonsoir. Rebonsoir. Point noir. Salut. Rebonsoir. Poupon. Oui, bonsoir à tous. Rebonsoir. Oui. Sifflet. Bonsoir. Rebonsoir. Qu'est-ce que ça a été, Merguez ? Allô, vrai body. Ah, c'est Ashley Body. OK. Faut que... Faut que... Oh, oui. Faut que... Je vais répéter la question pour qu'il la comprenne bien. Non, non, mais quand je dis... On reprend et on n'attend plus. Faucu, t'es là ? Ouais, ouais, tranquille. OK, c'est bon. Donc, la question, je ne vous la repose pas. Ouais. Donc, maintenant, on va demander... Tiens, Faucu, comme t'étais au standard, on va savoir ce que t'en penses, toi. Moi, je ne suis pas trop d'accord, en fait. Alors, explique. Ça ne peut pas être une marque. Non, mais attends. Je te demande d'expliquer. Si tu me dis que ça ne peut pas être une marque et que tu me fais un blanc, ce n'est pas la peine. C'est tout. Non, mais je pense que ça ne peut pas être une marque parce que je ne vais pas acheter de harcèlement sexuel. Mais est-ce que c'est un produit vendu en magasin, c'est tout ? Je ne te demande pas si c'est une marque. Ben, si c'est un produit vendu en magasin, tu vas acheter du harcèlement, toi ? Je peux te dire, moi, je vais acheter du chewing-gum, je ne sais pas quoi, et dedans, on va me mettre du sperme et je vais manger ça. Bon, ben alors ? Et alors ? Et c'est un produit qui est vendu, quand même. Je suis d'accord avec toi, mais tu ne vas pas aller dans un magasin et dire bonjour, je vais acheter un petit peu de harcèlement et un petit peu de sexuel. Euh, ok. Couscous ? Ouais, ben moi, j'achète du harcèlement sexuel à l'épicerie de chez Bébé. Ouais, ok. Tu achètes les couscous, les pois chiches et les merguez ? Ouais, ouais, il n'y a pas de problème, genre. Le mouton et le poulet ? Il n'y a pas de problème, mais fais quand tu veux pour qu'on fasse une couscous party et je te mettrai la merguez. D'accord. Sifflez. Oui, je pense que ça peut être un produit vendu en magasin parce que l'église fait bien le viagra. Ouais, non, mais attends, toi, si tu commences à me bouffer les questions, je pense que tu as passé... Non, mais c'est vrai, Gérard, il exhibe bien le viagra, donc pourquoi pas... Non, mais ça, le viagra... Le viagra, c'est pour ceux qui sont... Oui, ceux qui sont impuissants. Ouais, ben tiens, justement, tu peux bien en parler, du viagra, tiens. Voilà les deux thèmes de la semaine prochaine, on les a trouvés. Le viagra et le gras. Donc pourquoi pas, hein ? Ouais, pourquoi pas. Poupon ? Ouais, ben le vieux gras, moi, j'aime pas trop, mais... Non, non, non, mais attends, ça, c'est pour la semaine prochaine, la question... Le débat, c'est pas pour cette semaine. C'est pas pour le vieux gras, c'est ça ? Non, pour l'instant, c'est sur l'harcèlement sexuel, c'est pas sur le vieux gras. Alors, en supermarché, moi, je dis que vous avez rien compris, si tu veux trouver du harcèlement sexuel en supermarché, tu vas au rayon, je sais pas, poissonnerie ou légumes, n'importe quoi, et tu verras, ben, le chef de rayon, s'il met la main aux fesses, ben, aux vendeuses ou aux caissières, ben, là, il y a harcèlement, c'est tout. Non, mais attends, comment tu peux... C'est tout, c'est tout. Ben, écoute, le harcèlement, c'est que tu veux le trouver, sinon. Forcément, il y a des mains qui plotent des fesses dans les supermarchés, donc il y a du harcèlement. Non, mais moi, de toute manière, une fois, je pense que, s'il plaît, elle peut le dire, une fois, j'étais dans un supermarché... Et tu t'es fait ploter les fesses. Non, non, c'est pas ça, c'est qu'on était en train de boire de l'eau, parce qu'il y a... Il y avait de l'eau à dispo... Attends, attends, attends... Tu bois de l'eau, toi ? Toi, t'es allergique ? Non, non, je bois de l'eau, tu vois, alors me prends pas les... Arrête, non, bah... Non, tiens, Sifflé, elle peut te le dire, sans le faire exprès, c'est elle qui... Je sais pas comment j'y ai fait, j'avais pas envie de finir mon verre, et elle était juste derrière moi, je me suis retourné, j'ai balancé le verre dans la tête. Tu la connais ? Tu connais Sifflé ? Tu connais Sifflé et Sifflé ? Je me rappelle pas du tout, non. Tu t'en souviens pas ? Bah, c'est pas grave. Donc, à la question, comment faites-vous... Comment faites-vous... Comment vous vous faites harceler sexuellement ? Donc, il y a 10% de gens qui se font harceler sexuellement, qui se font harceler sexuellement par téléphone. Ça, c'est vrai que par téléphone, c'est... Ça, c'est... Je pense qu'ils auraient été un peu plus nombreux, ça aurait été mieux. C'est horrible. 60% des gens se font harceler par courrier. Ça, j'en connais un qui est bien placé. C'est clair. Merci, chef, de mettre la super musique de boîte de nuit. 30% des gens se font harceler par des rapports. 1% des gens ont dit... Ils me mettent sa bite dans ma chatte. Moi, j'aimerais bien avoir le numéro de téléphone du 1%, là. Ouais, bah... Bah, Manu, il va se faire un plaisir de te trouver ça. Je vais te trouver ça, il n'y a pas de souci. Parce que là, je sais qu'il y en a une, pour l'instant, elle attend encore mon chef, là-haut. C'est grave, hein. Elle est grave, elle, encore, là-haut. Gérard, sur IRC, il y a 6 gars qui te demandent si le harcèlement est héréditaire. Comment ça ? Impossible. C'est des histoires de famille, ça. C'est des histoires. Tu m'éteins ça avant que... Que je me déplace et que je t'éclate tes petites lunettes. Vite ! OK ? Bon. Bon, Gérard, t'as pas répondu à la question est-ce que le harcèlement est héréditaire ? Ça, je peux pas savoir, parce que j'ai pas goûté à tout ça. Donc, point noir. Écoute-moi, en magasin, franchement, j'en ai jamais vu. Par contre... Toi, tu travailles en boulangerie, donc en grande surface, ça m'étonnerait que tu puisses voir ça. Ouais, non, mais attends, je fais des courses quand même, quoi, je veux dire. Mais par contre, par correspondance, oui. En fait, on te vend des cours, donc c'est des cours qui sont payants, et tu payes après les résultats. Donc, si leur technique marche, tu payes, et si ça marche pas... Ouais, dans ces cas-là, on vient sur les 60% qui sont harcelés par courrier. Ah non, non, non, absolument pas. En fait, moi, j'ai fait appel à une société qui te vend des cours d'harcèlement sexuel, donc ils t'envoient une technique de savoir-faire, tout ça, donc ils t'envoient ça par courrier, donc tu suis à la lettre, toutes les instructions. Ensuite, quand t'as envie de harceler quelqu'un, comme moi, j'ai harcelé mon patron, ça a marché, j'ai payé, et quand la technique ne marche pas, tu payes pas. Et si tu veux, je peux te donner une adresse. Non, non, non, on s'en fout. On s'en fout. Mais attends, point noir, tu vas pas me dire que t'as payé ton patron pour te faire harceler. Non, mais attends, tu captes vraiment rien. Non, c'est dalle. Attends, si je suis grave dans ces cas-là, t'as qu'à pas dire de conneries, parce que j'ai bien entendu dire que t'avais payé. Gérard, elle a payé un organisme pour lui harceler. Non, non, elle a payé aussi le patron. Bon, Marmite. Oui. Moi, une fois, j'ai piqué un truc dans un magasin, donc c'est pas bien, mais bon, je me suis fait choper, donc j'ai été emmenée au directeur, donc j'ai proposé de me harceler. Et comme ça, on a annulé la situation. Elle a assisté le vigile. Elle a assisté le vigile et ça se fait pas. Ouais, je pense. Non, mais ça, je peux vous dire une chose que je sais pas, parce que moi, j'ai jamais eu l'occasion de me faire harceler dans un magasin. Bah, t'as pas de chance. Bah, je préfère. Ah ouais. Alors, moi, je préfère être tranquille que de me faire harceler par des emmerdeuses. Ah ouais. Voilà. Donc, moi, c'est pas moi qui aurais payé pour me faire harceler. Ouais, ça, ça s'appelle une putain, quand même. J'ai le droit de demander un truc ? C'est qui, c'est qui, c'est qui ? C'est Fokur. Il y a Manuel sur Minitel qui demande si tu fuches pour une binouze. Bon, alors, Fokur, Fokur, tu sais ce que tu as fait, alors, hein ? Tu vas aller voir Manuel Standard parce que tu commences à me gonfler avec tes conneries. Il a raison, il a raison, c'est un message Minitel. Ouais, non, non, mais attends, les messages Minitel, pour l'instant, le Minitel, il y a plus de 100 connectés, donc il fonctionne pas. Donc, je vois pas pourquoi qu'il s'amuse à me dire des conneries comme ça. Donc, Fokur, tu vas voir Manuel Standard. Si ça va pas, tu vas dégager. J'ai le calme, j'ai le calme. Si ça va pas, tu vas dégager. Donc, le harcèlement sexuel, peut-il être petit ? Peut-il être consentant ? Donc, je répète, le harcèlement sexuel peut-il être consentant ? Fokur, écoute, moi, j'ai un exemple. Je me souviens il y a quelques années, je me suis harcelé par une fille, donc une femme qui était ma patronne à l'époque, et elle sentait du con, donc elle avait le con consentant, ouais. Ouais, non, mais elle était consentante. J'allais la faire, merde. Ah, je suis désolé. Je suis désolé, Régo. T'étais consentant ? Non, moi, j'étais juste d'accord. Ah, t'étais d'accord, donc tu te sentais consentant, tu te sentais bien dans ta peau quand t'as proposé ? Ah, je me sentais carrément con, ça c'est clair. Ah, bah ouais, d'accord. Fokur, s'il s'est calmé ? Ouais. Oui, je me suis bien calmé. Donc, alors, vas-y. Mais, je me suis calmé, j'ai pas pu entendre rien. Ouais, là, je crois qu'il y a... Ah, j'ai dû répéter, il voulait savoir si t'étais consentant pour te faire harceler dans le sexuel, voilà. Ah, oui, mais, bah, vu que moi, je suis mon propre patron, je peux pas être consentant ou pas, puisque j'ai pas ce problème-là. Bah, si, ta main droite, elle est d'accord avec ta main gauche quand tu te pignoles, donc t'es consentant. Ouais. Bah, ouais, donc... Bon, on est d'accord. Bah, oui. Là, je pense que... Mais, le problème, c'est... Non, c'est que j'ai pas de problème, en fait, de se projeter là, puisque je suis mon propre boss. Ouais, d'accord. Donc, voilà. Poupon, ça prend la peine d'essayer d'y faire comprendre parce qu'apparemment, il a l'air de nous prendre pour des cons. Bah, j'essaye de l'aider, quoi. Non, non, mais il nous... Non, non, mais il nous prend pour des cons, donc... Allez, tu me prends quelqu'un d'autre à la place parce que ça vaudra mieux. On va pas s'amuser avec... J'arrête, je coupe, là. Non, non. Euh... Couscous. J'ai coupé. Ah, Rachida, sur la couscous, hier, j'ai mis un grand coup de chipolata, elle est consentante. Il y a pas de problème. Non, mais attends, parce qu'Olivier, il vient de reprendre la pro parce qu'il y en a un qui était crevé, donc il commence à s'amuser à me faire des conneries. Donc... Welcome back, Olivier. Donc, pour toi, Couscous, donc... Ah, il y a pas de problème. Moi, je suis toujours consentant pour faire l'amour, il y a pas de problème. Ok. Euh... S'il plaît. Non, je pense que là, seulement c'est seul, il peut pas être consentant. Bon, ça va, là, vous me laissez parler, un peu ? Oh, Pascal ! Oh là là ! Olivier, tu commences pas, d'accord ? J'ai rien fait. Non, non, t'as rien fait, à peine. Et les autres, vous vous tchalmez quand je pose une question, s'il plaît, d'accord ? Y a pas de problème. Ouais. Bon. Donc, je disais, non, le harcèlement sexuel peut être considéré comme... peut être consentant. Oh, putain, moi, j'arrête, hein. Oh là là ! Putain, elle a une belle voix, c'est dommage. Oh, les charmes, Antoine ! Elle est pas conne, en plus. Et voilà. Merci, merci ! Merci pour celui qui s'amuse à faire cette connerie. Donc, là, elle a arrêté, c'est même pas la peine d'essayer de la rappeler, elle reprendra pas. Alors, point noir. Je voulais juste dire que sur IRC, tout le monde est content qu'il ait pu siffler. Appelez l'invité mystère, soit fait l'invité mystère. Sur IRC, moi, je les emmerde que, s'il plaît, je sois plus là, c'est tout. Gérard. Au standard, à la place de Faucu, qui était tout bidon, on accueille Mathieu, lui, il s'est fait harceler sexuellement par sa patronne, et en fait, ça a fini par une belle histoire d'amour, quoi, en gros. Non, mais attends, pour l'instant, on n'en est pas là-dessus, on est sur le consentement. Je t'annonce... Ben oui, mais je t'explique ce qui s'est passé dans sa vie. Ok. Point noir. Est-ce que tu peux me répéter la question, s'il te plaît ? Putain, mais vous allez faire ça jusqu'à 3h du matin, là ? Bon, les filles... Ben attends, c'est la première fois que je te demande de répéter. Le harcèlement sexuel, petit L... Petit L, consentant. Euh, tout à fait, ouais. Petit L, non. Petit L, grand L. C'est petit L, c'est ce que je voulais dire. Voilà. D'accord. Donc, le harcèlement, petit L, consentant. Voilà. Ouais, d'accord. Ouais, moi, je pense que, ouais. Enfin, c'est un avis personnel, mais ouais, je pense, ouais. D'accord. Marnit ? Ben oui, moi, oui, c'est clair. Oui, je suis consentante. Ça, de toute manière, je pense que les trois quarts des personnes sont toutes consentantes sur des problèmes, comme ça, hein. Le harcèlement ? Euh, Mathieu ? Oui, ben moi, j'étais complètement consentant, puisque j'ai eu, donc, un harcèlement sexuel de ma patronne, et ben maintenant, je suis marié avec. Ah, d'accord. Et ben oui. Et t'as quel âge, sans indiscrétion ? J'ai 23 ans. Et t'appelles à elle d'où, sans... D'un tourneur. Bon, Olivier, tu vas commencer par t'écraser, parce que tout à l'heure, tu l'as dégagé, ça va aller vite fait. D'accord. Donc, t'appelles d'où ? De Toulouse. De Toulouse, de la fréquence ? Ben, moi, je sais pas, parce que je l'écoute sur Internet. En 17.5. Ouais, ben, non, je pense pas, hein. Si, si, je crois pas, je sais pas, je dis ça comme ça, hein. Non, parce que c'est pas la première fois qu'on a des gens de Toulouse. C'est en 3 points de la fréquence, tu verras. Non, mais moi, je pense que, si je la demande à Manu, le temps qu'il achète, on verra. Alors, donc, moi, je peux vous dire que je me suis jamais fait harceler, donc, même le jour où ça arriverait, je sais pas si je serais consentant là-dessus. Donc, voilà. Pourquoi ? Ben, attends, explique-nous pourquoi. Ben, parce que je veux pas me faire harceler par n'importe qui, déjà, pour commencer. Ah, mais elle est mignonne. Non, mais ça, ça dépendra de la personne. Et tu donnerais pas ton consentement ? Non. Non. Donc, les animaux pratiquent-ils le harcèlement sexuel ? On va demander à Marmite. Ouais, les chiens. Il y en a plein, ils viennent sur moi, puis ils frottent les cheveux. Ils mettent leurs zigounettes sur ma jambe, c'est désagréable. Moi, je vais te dire une chose, Marmite, je pense que Point Noir... Oui ? Point Noir, ça va être pareil. Ouais, ouais. C'est surtout chez les bulldogs. Oh là là ! Olivier, tu fais gaffe ! Il y a Gérard qui m'attaque. Olivier, tu fais gaffe, c'est la dernière fois ! D'accord, d'accord. On a Olivier, c'est content de t'avoir. T'amuses pas à faire des conneries, toi. Gérard ? Oui ? On accueille Casse-toi à la place de Sifflet. Salut, Gérard. Salut, Casse-toi. Casse-toi, salut. T'appelles d'où ? Et j'appelle de Seine-et-Marne. Et la fréquence, c'est 101.9. Ouais, voilà, 101.9. Donc, on va demander à Point Noir. Attends, Marmite, tu me disais, toi ? Que j'étais sexuellement harcelée par les chiens. Non, mais ça, je peux... Maintenant, il y a quand même trois filles. Trois filles et trois garçons. Oui. Je pense que... Les trois quarts du temps, les nanas, c'est quand vous avez vos règles. Et ça, je peux vous le dire, moi, j'ai le... J'ai le temps par les... Non, non, non, mais attendez, attendez, attendez. Je vais continuer. Moi, j'ai le chien de ma copine, donc... Il se frotte toujours à ta jambe quand t'attends. Non, non, non. Comme ça ? Non, non. Il va carrément sur sa sœur. Ouh là ! Donc, je pense, à chaque fois, il va... Dès qu'elle a ses règles, hop, tu peux être sûr que t'as le clé barqué, là. Il suffit juste de te laver, Gérard. Tu sens pas, ça sent pas. Faut te laver, c'est tout. Non, mais c'est pas moi qui... Non, mais dis-le à ta belle-sœur. Non, mais de toute manière... Ou à ta meuf. Non, mais attends, ma meuf, attends, merde, toi. D'accord ? Tiens, ben, Poupon. Oui. Donc, pour toi ? Ben, écoute, moi, bon, déjà, j'ai un gros problème. Je sais que tu vas pas être d'accord, mais moi, j'aime pas les animaux. Donc, je vais te dire, le premier clé barqué, qui vient se frotter sur ma jambe, il prend un coup de savate, quoi. Non, mais alors, dans ce cas-là, je vais te dire une chose, que... Non, non, non, non, non, non. Ça dépend du chien, ça dépend du chien. Non, mais t'es vraiment dégueulasse de dire ça, c'est tout. Si t'es un gros rottweiler, je le laisse terminer. Si t'es un caniche, je le fous. Non, mais attends, moi... Ah, c'est dégueulasse, là, franchement. N'importe quoi. Attends, j'ai pas envie de me faire spermer par un clé bar sur la jambe. Pousse, pousse. Ouais, Gérard. Moi, j'ai déjà vu deux dromadaires qui se frottaient là-bas, aussi. Ils étaient en train de se masturber, eux-mêmes. Dans le désert du Sahara, en plus. Attends, attends, hé, hé, hé, hé. À la place des dromadaires, il n'y avait pas des chameaux ? Oui, il n'y a pas de problème, mais c'est pas le même nombre de bosses, donc ça fait pas le même effet. Ouais, les chameaux, ils ont deux bosses ? Ouais. Non, une, une, une. Non, ils en ont deux. Non, ils en ont deux. Les dromadaires, ils en ont une. Oh, les filles, bravo. Ça veut dire deux en arabe. Mathieu ? Ouais, bah moi, je pense pas que les chiens et les animaux sont capables de nous harceler sexuellement. Je pense que c'est pas... Ils ont tout ce qu'il faut, hein. Ils ont une quéquette, ça suffit, hein. Bah ouais, mais comment tu veux qu'ils reproduisent, alors ? Faut bien qu'ils aillent sur une femelle. En plus, ils arrivent à se la lécher. Bah ouais, c'est ça. Oui, ça, oui. Attends, moi, je sais qu'il y a déjà des chiens qui m'ont mis des mains au cul. C'est pas super agréable, quoi. Attends, un chien te met une main, une couille. Ouais, c'est ça. Tu dirais qu'ils te mettent une patte, ouais. C'est plutôt malin de te toucher une couille. Moi, ça m'est déjà arrivé, un chien qui me fait un clin d'œil, par contre. Bon, toi... Attends, Couscous. L'autre, quand il me dit qu'il y a un chien qui lui a fait un clin d'œil, vu qu'il a ouvert ta tranche, ça m'étonne pas de toi, hein. Ça m'étonne pas de toi, hein. Bravo. Les premiers chiens que tu vois dans la rue, ils sont pour toi, hein. Casse-toi. Gérard, sur IRC, on me demande si tu t'es déjà toi-même harcelé sexuellement. Non. Avec ta main droite ou gauche ? Non plus. Alors, casse-toi. Oui, ben, excuse-moi, j'ai pas entendu la question. Tu peux la répéter ? Les animaux pratiquent-ils le harcèlement sexuel ? Ah, j'y crois pas, là, du tout. C'est quoi le débat, Gérard ? Les animaux. J'étais pas là au début. Non, ben, toi, les oreilles, c'est comme le cul, ça se lave. T'étais dans l'ossidio en train de faire le con, alors... C'est sur les animaux, les animaux. Ils travaillaient. Oh, non, ben, ils travaillaient, mais ils n'avaient qu'à écouter. Et tu m'éteins ce son, parce que tout à l'heure, je vais te faire du... Je vais te mettre une barf. Je vais te mettre une barf. Alors, septième question, Manu, tu m'éteins... Tu veux répondre, moi ? Qui ? Point noir. T'avais pas répondu, toi. Non, j'ai pas répondu. Tu m'as posé la question, et puis tu m'as coupé en plein milieu. Ah, bon, ben, alors, vas-y. Ouais. Donc, je voulais te dire que c'est vrai qu'effectivement, les chiens sont réputés pour faire du harcèlement sexuel, et surtout la race des bulldogs. Ouais, mais ça, c'est partout. C'est pas drôle. Donc, voilà. Moi, je peux... Oui ? Non, rien, rien, rien. Donc, je peux vous dire une chose, que j'ai jamais vu des animaux le faire, mais bon, peut-être que jour, je m'en verrai. Donc, la question... Avez-vous déjà été harcelé ? Je pense que je l'avais posé, cette question-là. Ouais. Ouais, j'ai hâte. Ouais, j'avais oublié de donner les sondages. Donc, il y a 55% des gens qui répondent qui ne sont pas bricoleurs. Donc, je vois pas le rapport avec le harcèlement. 40% des gens répondent qu'ils préfèrent le foot. Donc, je vois pas du tout le... Le foot ? Le foot. Ah, pardon. Le football. Donc, je vois pas du tout le rapport avec le harcèlement sexuel. Ça, c'est les sondages. Donc, 5% des gens répondent qu'ils s'en foutent de la politique. Je vois pas du tout le rapport avec le harcèlement sexuel. Rien à voir. 0% des gens n'ont pas compris la question. Alors, s'ils n'ont pas compris la question... Donc, il y a 0% qui n'ont pas compris la question. C'est bien. Comme ça, ça me fait plaisir. Moi... C'est des Mongols. Pour moi, c'est des Mongols. C'est des petits cons. Ouais. Sur Minital, il y a Caroline DS qui dit qu'elle veut te voir à la loco. Mais écoute, il n'y a personne. Tiens. Regarde. Ah, il y a un connecté. Deux. Ah, un connecté. Bah, allez, non, ça... C'est les parents, Olivier, de toute façon. Ah, bravo. Non, je pense pas. Le téléphone ne répond plus, Max. Je te branche. Bon, bon, d'accord. Bon, bah... OK. Donc, septième question. Avant qu'on fasse la pub. Non, non, non, non, non, non. La pub ? Il n'y a pas de pub, Gérard. Il n'y a pas de pub. La pub, à 2h30 du matin. Gérard, il veut de la pub. Non, non, avant qu'on... On va faire la pub. Avant qu'on s'envoie à un petit disque. Alors, être harcelé sexuellement peut-il devenir une maladie ? On va demander à... Casse-toi. J'ai pas compris ta question, Gérard. Tu peux répéter. J'ai rien compris. Être harcelé sexuellement peut-il devenir une maladie ? Ah, pas du tout. Bien sûr, bien sûr. Mais alors, ça n'a aucun rapport, quoi, je veux dire. Si, moi, je sais, moi, je sais, moi. Qui ? Poupon, Poupon, Poupon. Ouais, vas-y, Poupon. Bah, déjà, si tu penses que ça peut être une maladie, il faut que tu vois ça, en fait, avec ton boss, parce que ton boss, il a fait l'émission du dimanche soir, c'est Malade Nocturne. Ouais. Et Malade Nocturne, c'est donc pour guérir, justement, la maladie du harcèlement sexuel. Non, mais attends, mon boss, mon boss, déjà, il a un nom, il s'appelle Max. Bon, Max. Hein ? Il a fait... Il a fait... Voilà, comme dit Couscous. Mais il n'a pas fait ça dans le but de faire chier... C'est tout. Mais je ne t'ai pas dit dans le but de faire chier, c'est pour soigner la maladie, c'est fait pour ça. Mais attends, mais ce n'est pas avec la musique que tu vas te faire harceler, espèce d'abruti. Mais non, ça guérit du harcèlement, et c'est pour ça que ça s'appelle... Ah ouais, tu crois que la musique a guéri le harcèlement sexuel ? C'est une nouvelle thérapie New Age Goer, le malade nocturne. Ouais, une malade nocturne. Ok, une question IRC. Oui, il y a Nostradaminus... Nostradaminus ? Non, Nostradaminus. Il te demande s'il existe des traitements à base de médicalement. De médicament, non. Pas de médicament, de médicalement. Non, pas à ma connaissance. Normal. Qu'est-ce que c'est ? Je t'ai répondu, Gérard. Non, ce n'est pas toi qui... Il vient de me répondre, c'est Poupon. J'ai répondu juste avant que je disais que ça n'avait aucun rapport. Bon, ok. Mathieu ? Moi, je pense que oui, ça peut être une maladie de harcèler sexuellement. Ok. Koskos ? Ouais, ça peut être une maladie, mais il faut consulter un bon médecin qui peut te traiter au Koskos pour que tu te soignes. Ouais, d'accord, avec les merguez, les pois chiches... Que la semoule. Pourquoi pas avec une carotte ? Non, mais il la fume, la semoule, ou quoi, lui ? Non, mais attends, il fait bien et... Il habite dans une couscoussière... Non, non, mais lui... Restez quand même polis, parce que c'est quand même bien qu'il y ait un mec comme lui, au moins pour nous donner un peu d'ambiance dans les débats, parce qu'avec vous, je crois qu'on s'ennuie rien. Je peux t'en mettre, si tu veux. Moi, je suis gentil, Gérard. C'est pas qu'une ambiance. Poupon ? Oui, je t'ai déjà répondu, je te dis malade nocturne. Alors, point noir ? Moi, je pense pas que ça peut devenir une maladie, par contre, je pense que ça peut devenir un remède. Ouais. Euh, Marmite ? Non, mais Olivier, c'est pas la peine de t'amuser, parce que tout à l'heure, je vais terminer à deux heures et demie, moi, ça va aller vite. Oh non, oh non, oh non, oh non, oh non. Marmite ? Oui ? Oh non, Gérard. Marmite ? Oh non, oh non. Non, Gérard. Ah, s'il vous plaît, derrière, vous laissez... Vous laissez finir les questions, là. Marmite ? Moi, ça me rend malade quand je me fais parceler, ouais. Bon, ben, toi, c'est... C'est carrément... Ça, c'est carrément une maladie. C'est une maladie pour toi. Ouais, ben, toi, si t'en as pas, t'es malade. Ben, carrément, ouais. Donc, plus t'en as, plus t'en veux. Ben, plus j'en ai, plus j'en ai, plus j'en veux, ouais. Ouais, mais plus t'en... Si t'en as pas, ça devient grave. C'est comme de la drogue. Ouais, c'est une drogue, ouais. Ouais, ben... Tu la roules, tu la fumes ? Mais attendez, attendez, il y a une question hier, c'est... Oui, c'est une question, Gérard. Alors, attends. Est-ce que lorsque l'on pense à toi, Gérard, c'est du harcèlement mental ? C'est clair. Ça, ça dépend des nanas, et c'est leur problème. C'est leur problème, c'est pas le mien, et c'est tout. Donc, je pose la huitième. Pourquoi que les gens ont peur de parler de ce problème, et on va s'écouter les poules qui puent avec... J'ai un oeuf pourri dans le trou d'épaisse, et vous pouvez toujours nous appeler au 0803 085000 et toujours le Minitel et à tout de suite. ... des débats du jeudi avec Gérard, donc il est 2h31 et on vient de s'écouter les poules qui puent avec... J'ai un oeuf pourri dans le trou d'épaisse et on va récupérer Marmite. Marmite ! Allô ? Allô ? Marmite ! Allô ? Tu me les calmes, j'irai ! Allô ? Allô ? Manu ? On n'entend plus rien. On n'entend plus rien. Vous m'entendez, moi, ou pas ? Allô ? Allô ? Allô ? Est-ce que vous m'entendez, moi ? Gérard, essaye de parler pour voir s'il t'entend. Il y avait un problème de micro. Marmite ! Allô ? J'entends rien. Allô, couscous ? Allô ? Allô ? Il est parti, Gérard ? Attends, essaye. Marmite ! Il a quitté le studio, Gérard ? Bon, Olivier, tu me fais quoi, là ? Je fais rien. Et voilà, c'est pour moi. Allô, Popan ? Ça marche, là ? Marmite ! Ah, ben voilà, ça y est, ça marche. Marmite ! Ah, salut ! Marmite, rebonsoir. T'étais où ? J'étais là, mais c'est Olivier qui s'est mis à faire le con. C'est pas grave. Marmite, donc, tu es toujours là ? Toujours là, ouais. Point noir ? Ouais, je suis là. Toujours là. Allô, Popan ? Ouais, je suis là, ouais. Toujours là. Couscous ? Toujours, fidèle. Toujours là. Mathieu ? Encore là. Toujours là. Et Castoy ? Salut, Gégé. Salut, Castoy. Donc, toujours là. Donc, huitième question. Pourquoi les gens ont peur de parler de ce problème ? Mais de quel problème ? On a... Il y a Dark Vader qui vient d'arriver. Oh là là ! Dark Vader. Oh, la force de Dieu ! J'ai rien fait, moi. Petit Jedi. J'ai rien fait, moi, Gérard. C'est quoi ? C'est quoi, cette histoire de merde ? Bah, allez, on continue, on continue. Donc, Castoy ? Oui, oui, oui, je suis là. Castoy ? Oui, Gérard. Donc, pour toi ? Bah, écoute, je sais pas du tout, moi. Personnellement, c'est pas un problème pour moi d'en parler. Donc, si des gens n'en parlent pas, c'est que ça les gêne, je sais pas, j'imagine. Allô ? Allô ? Donc, Mathieu ? Mathieu ? Je vais calmer tout le monde. Je vais calmer tout le monde, Gérard, c'est pour ça, excuse-moi. Il est en train de me calmer. Direct, il me calme. Bon, alors, Mathieu, pourquoi ? Bah, ouais, moi, je pense que c'est dur d'en parler, de harcèlement sexuel, quand même. Parce que si on a peur de se faire harceler, on a automatiquement peur d'en parler. Ouais, bah, ça, c'est un problème qui se passe à l'arrêt de cause, c'est que personne veut en parler. Ouais, parce que les gens ont peur. Non, moi, j'en parle. Non, mais faut en parler, parce que sinon... Attendez, attendez, attendez. Attendez, parce que les gens de l'IRC n'ont pas entendu la question. Alors, pourquoi les gens ont peur de parler de ce problème ? Ah, ok, merci. Gérard, c'est Couscous, je peux répondre ? Ouais, Couscous. Bah, moi, j'en parle pas, parce que si j'en parle, si tu parles d'harcèlement sexuel, tu te fais forcément harceler sexuellement. Donc, j'en parle pas. Non, mais je vois pas, mais si... Bon, bah, toi, si tu te fais harceler sexuellement... Mais si j'en parle à une personne, imaginons, j'en parle à Bébert et Rachida, ils vont m'harceler sexuellement. Bah, non, si tu leur en parles, que t'as déjà eu des problèmes comme ça... Ah, bah, ça se voit que tu les connais pas, hein. Ah, non, mais... Mais ça, je connais pas tes problèmes, moi. Euh, Poupon ? Bah, écoute, les gens ont peur d'en parler, parce que c'est dangereux, c'est une maladie, et... Bah, y'a des médecins qui font une série, des psychologues, des harceleurs sexuels, des marabouts, tout ça. Non, non, mais attends, là, Poupon, non, mais non, y'a d'autres personnes, bon, d'accord, tu peux aller... C'est une peur, c'est une peur. Non, mais si la personne a peur d'aller en parler à un psychologue ou autre, ça, c'est son problème. Non, mais si c'est une peur, c'est une phobie, c'est un zombie... C'est sexuel, donc forcément, tu vas voir un sexologue. Ah, tiens, y'a une question, Colgate, alors là, elle commence à s'amuser. Gérard, t'es déjà été harcelé dans un couscoussier par les merguez, alors après, t'as Gérard, t'es déjà harcelé... Allô ? Allô ? Allô ? Allô ? Allô, Gérard ? Allô, Gérard ? J'ai rien fait. Allô, j'entends ? Est-ce qu'on m'entend, moi ? Allô ? Allô, le micro, là, celui-là, il marche pas. Non, non, mais si ! Celui-là, il marche pas. Mais forcément, c'est toi. Ben voilà, ben voilà, attends. Ça va marcher, là. Attendez, attendez, les auditeurs, ça va marcher, ça va marcher. Vas-y, parle, Gérard. Allô ? Allô ? Allô ? Vous l'entendez, là, vous l'entendez, Gérard. Ça marche. Ça marche ! Gérard, t'as vu, toi ? Si, vous l'entendez. Ça marche. Non, j'ai pas les CD, arrête ! Allô, j'ai pas les CD ! J'ai pas les CD, j'ai connu ! Voilà, ça y est, ça marche. Parle dans ton micro, Gérard, parle dans ton micro. Vous l'entendez, là. Là, il va vous parler, il va vous parler, vous l'entendez, c'est sûr. C'est toi qui arrête pas de déconner, Gérard ! J'ai rien fait ! On t'entend, même. Hein ? On t'entend, Gégé. Ouais, y'a pas de problème, y'a pas de problème ! Eh, vous l'entendez, vous l'entendez, vous l'entendez. Non, tout le monde ! Oui, je suis là. Tout le monde ? Oui, oui, oui, oui. Ben, toi ? Ben, tu peux m'éviter la question, parce qu'avec tout ce bazar, avec les problèmes techniques, là, ça devient dur, hein. Pourquoi que les gens ont peur de parler de ce problème ? Ben, ce que je te disais, si t'as peur, t'as une phobie, ok ? Ah, ben, ouais, t'avais déjà répondu quand je t'avais dit... C'est sexuel, voilà, c'est bon. Ok. Point noir. Ben, moi, j'ai pas peur d'en parler, au contraire, c'est Mexique. Ben... Non, mais attends... Ouais, je pense, parce qu'à ton âge, à ton âge, je pense que j'irais voir quelqu'un pour en parler quand même, hein. Non, je préfère pas en parler, je préfère le faire. Oh, là, non, d'accord. N'importe quoi. Marmite. Ouais, ben, moi aussi, j'en parle, hein, je m'en fous, hein. Oh, les cochons... Ouais, mais t'en parles dans ton entourage. Ouais, moi, j'en parle à tout le monde, t'as vu, là, je t'ai appelée pour t'en parler, hein. Non, mais attends, c'est pas moi qui t'ai appelée, c'est au standard qu'on t'a appelée. Non, c'est moi qui t'ai appelée. Ouais, mais après, le standard t'a rappelée pour participer au débat. On l'a harcelée. On l'a harcelée. Ils m'ont un peu harcelée sur la scène. Non, je l'ai téléphoné uniquement. Hum-hum. Tu le disais, Couscous ? Je disais qu'ils l'ont harcelée téléphoniquement. Non, mais ça... Ouais, mais c'est si bon. On l'a bien fait, là, un peu ! Moi, je voulais juste rajouter que vous avez quand même harcelé le boss, quoi. Ouais. Ouais, on a harcelé le boss depuis le radio. Je vais te dire que le boss, on a été à deux doigts de l'enlever, de le torturer, c'est clair. C'est clair, c'est clair, quand même. Ça, il sévire, quand même. Moi, je l'ai harcelée à coups de saucisse dans le derrière. Il a bien fait de lâcher... Oh, non ! Bon, on reprend pour ton débat. Donc, neuvième question. Devrais-t-on créer une école sur le harcèlement sexuel ? Oh, oui ! On va demander ça, tiens, point noir, parce qu'à 17 ans... Point noir, j'ai t'éclaté, ouais. Ah, ouais, non, mais moi, je suis tout à fait d'accord pour cette initiative, ouais. Ah, ouais, il n'y a aucun problème. Bah, déjà, comme je te disais tout à l'heure, on fait des trucs par correspondance. Mais alors, si on ouvre une école, ah, ouais, moi, j'arrête la boulangerie et je vais dedans, quoi, c'est clair. Moi aussi, hein. Moi, je fais prof. Qui, qui, qui, qui ? J'en fais prof, j'harcèle tout le monde, hein. Moi, je veux bien des cours particuliers, à ce moment-là. Bah, il n'y a pas de problème. Ah, moi aussi, hein. Non, mais attendez, attendez, attendez, attendez, attendez. Alors, Marmite, toi, t'es d'accord avec point noir, poupon ? Bah, moi, je dis qu'effectivement, il faut des pédagogues pour faire des écoles, c'est clair. Des pédologues. Non, des pédagogues. Des pédagogues. Des pédologues. Mais, d'accord, allez-y, allez-y. Tu vas du tube. Jeune Skywalker. Ah, tu vois ? Je vais aller voir la Blancie. Couscous. Oui, Gérard. Ouais, moi, je pense que ça serait bien, mais il faudrait que la professeure, elle soit bien roulée, hein. Ouais, mais ça, c'est... Ah, parce que sinon, il n'y a pas moyen d'apprendre, hein. Toi, tu ne peux pas trouver des propres... Donc, elle écarte bien les cuisses, pour qu'on va bien la foufler, quoi. Non, bah, t'es vraiment un cochon, toi. Ouais, mais il faudrait qu'il n'y ait pas que de la théorie, il faudrait qu'il y ait de la pratique aussi. Mathieu ? Bah, évidemment. Oui, alors moi, je pense que ça serait une bonne initiative de faire une école sur le harcèlement. Puisque, comme ça, je pourrais être professeur et je pourrais faire mes mises avec des... D'accord, euh... Casse-toi. Bah, écoute, moi, Gérard, je suis tout à fait d'accord. Elle s'est cassée. Pourquoi tu l'as dit, casse-toi ? Je ne sais pas, il l'a pris pour lui, quoi. Tu lui dis, casse-toi. Je vais le rappeler, je crois que c'est Couscous, en plus. Couscous, il l'a mal... Non, il n'est plus là. Il l'a mal pris, ce que tu lui as dit. Bon, bah, il y a une place, hein. Bon, donc, moi, je peux vous dire une chose. Moi, je peux vous dire une chose. Des écoles, je ne voudrais pas que ça existe. Bah, pourquoi ? Ouais, non, pas avec les profs, hein. Eh, l'école, c'est bien, quand même. Ouais, non, mais peut-être... Attends, je vais te dire, s'il y avait des cours de quéquette à l'école, les lycéens, ils ne seraient pas en grève, hein. Tu m'étonnes, tu m'étonnes. Non, mais attends, ça... Non, non, ça, là-dessus, c'est... Attends, ils feraient des heures supplémentaires en permanence et tout, tout ce que tu veux. Il y a une question, IRC... Il y a une bonne question, IRC, de Kevin Klein. Gérard, comment reconnaître un harceleur potentiel ? Voilà, euh... C'est trop compliqué pour lui. C'est pas les harceleurs potentiels, en plus, c'est les harceleurs sexuels. Tu dis n'importe quoi, Rigo. Non, mais même, de toute manière, là-dessus, je peux rien dire. Non. Alors, dernière question. Déjà ? Eh oui, bah... Attends, il reste encore 20 minutes. Bah non, bah... Après, on verra... Moi, j'ai plein de questions sur l'IRC, si tu veux, Gérard. Est-ce que c'est du harcèlement sexuel si on fait l'amour ? Ouais. Alors, Marmite ? Euh... Ouais. Bon, toi... De toute manière, toi, t'es... Ouais, ouais, moi, j'aime tout, quoi. Toi, t'es carrément branché... Toi, t'es carrément branché à fond, là-dedans, hein. Bah, à fond, ouais. Ah, ça y est, c'est lui qui applaudit. Donc, euh... Pour toi, donc, euh... Ça te dérange pas ? Oh, non, non, non, rien ne me dérange. Toi, Noir ? Oh, bah, moi, tant qu'il y a de la vie, tout va bien. Oh, bah, toi, à 17 ans... Oh, non, non, non, alors... À quel âge que t'as perdu ta... Ta petite flamme ? À quel âge que t'as été... À quel âge que t'as commencé tes relations ? À 14 ans. Oh. Allez-y, j'espère que vous serez demain à la locaux, hein. À 14 ans ? 14 ans ? Ouais, 14 ans. Oh ! On jette rien, tu vois. On jette rien. J'ai rien fait, mais... 14 ans que je te balance un micro ! Je suis sûre que je t'en apprendrai des trucs. Olive ? OK, OK. J'ai rien fait. Non, presque pas. Euh, Poupon ? Ouais, bah, écoute, moi, je dis, dans ces cas-là, on sait à quoi on s'expose. On peut perdre sa place de président, hein. Non, ça, je crois pas. Non, mais ça... On va pas parler de vie privée, mais tu sais très bien de quoi on parle. Tu crois que Chirac... Bah, je veux dire, avec la gueule de Bernadette, moi, je comprendrais qu'il a garcelé ailleurs. Mathieu ? Mathieu ? Il y a quelqu'un qui applaudit, ça me gêne. Ça commence à me prendre... Olivier, fais gaffe, parce que tout à l'heure, je vais te balancer quelque chose, toi. Tu vas comprendre. Je vais te balancer la douleur. Chirac, excusez-moi, on retrouve Couscous. Ouais, bonsoir, Chirac. Il l'avait mal pris, mal pris, quand tu lui as dit, casse-toi, mais je lui ai expliqué que c'était pas lui. OK. Voilà, Chirac, en attendant... Alors, attends, je vais retrouver, j'arrive plus à savoir où c'est. C'est Disco qui dit, si Adam avait pas harcelé Ève, on serait pas là. Exact. Ouais, bah, ça, peut-être. Donc... Ah, bah non, sûrement. Bah, oui. Mathieu, pour toi ? Donc, oui, je pense que le harcèlement sexuel, c'est faire l'amour, c'est sûr. Ouais, mais casse-toi. Moi, je crois pas qu'il y ait de l'harcèlement là-dedans, parce qu'étant donné que je suis une entente entre les deux, moi, je crois pas, non, franchement. Et Couscous ? J'ai pas entendu, parce que tu viens de me rappeler. Alors, est-ce que c'est du harcèlement sexuel si on fait l'amour ? Ah, bah, ça dépend comment tu le prends et ça dépend comment tu le fais, par derrière. Comment tu l'apprends ? En sodomie, moi, j'aime bien. Non, mais ça, c'est... Moi, je crois pas que c'est du harcèlement sexuel. Du moment que tu fais l'amour, il n'y a pas de problème. Ouais, mais... Ah, il y a un mec qui est malade. On coule, les mecs, on coule. Je suis en évasion dans mes chiottes. Par contre, Gérard, moi, j'ai une question pour toi. Est-ce que tu crois que quand on drague une fille, on peut considérer ça comme du harcèlement ? Ouais. Non, non, non, non. Parce qu'au début, t'insistes. Si elle veut pas, t'insistes. Ouais, ça, s'il te plaît. Non, mais je peux dire que t'as pas besoin d'insister. Ouais, mais toi, c'est parce que t'es un sex-symbole que t'as pas besoin d'insister. Il pense à tous les Tony, Arnett et Goldo comme William Graham. Non, mais ça, chacun... Attendez, laissez parler Gérard. Non, mais chacun voit midi à sa... Chacun voit midi quoi ? Chacun voit midi à sa porte et c'est tout. Ça, je vois pas du tout le rapport. Si la nana veut pas sortir avec toi, elle sortira pas avec toi, c'est tout. Donc... Confusion ! Bravo. Bravo. Conclusion, Marmite ? Ben, conclusion, vive la bite. Mais pas déjà, attends, il reste un quart d'heure. Non, mais c'est pas grave, après, on fait un mini-débat improvisé. Il reste un quart d'heure, j'ai inventé une question, improvise. Un débat sur les portes clés, après, ça va être génial. Allez, on... Non, non ! Une question sur l'IRC, une question sur l'IRC. On fait con... On est bien ! Tu veux du tube ? Oh, oh, oh ! On dit... Alors, à la demande des auditeurs, on a une petite question IRC de Compi Musique. 8ème com, c'est un peu long comme nom. Le harcèlement donne-t-il la chiasse ? Si oui, de quel côté ? Du côté droit. Ouais, c'est clair. De la fête droite. Non, je vois pas du tout le rapport. C'est connu, pour vrai. C'est connu, Gérard. Non, on fait la conclusion sur... Alors, attends, attends, parce qu'il y a une question. Vas-y, Gérard. Vas-y, excuse-moi. Oh, bon, ben... Est-ce que, par exemple, la pilule Viagra incite au harcèlement ? Bon, Manu, ta question retourne en standard. Tu veux du tube ? Pas forcément, Manu, parce que moi, je prends pas de Viagra et j'harcèle, quoi. Tu vois, c'est une bonne question. Non, mais ça, c'est le débat de la semaine prochaine. On est bien, t'as-tu un ? Eh, dégage, dégage ! Je veux plus te voir, là ! Ah, j'ai pas fait exprès. Bon, en attendant, j'ai Davy1, Davy1, sur l'IRC, qui est allé voir la définition du harcèlement sexuel dans le dictionnaire. Ouais, quand même ! Et on y apprend que le petit Robert a harcelé la rousse. Ah, ah, ah ! Donc, conclusion marmite, on fait conclusion sur ce débat et c'est terminé, après. Ouais, ben, vive la vie. Et puis, prends garde le sourire, Gérard. Ouais, mais... C'est important, là. Il y a certains trucs... Demain, je viens te harceler dans les chiottes de la loco. Ouais, ben, t'as raison. Tu verras comment tu vas être aussi avec moi, demain. Ben, d'accord. À demain. Ouais, ben, on verra. Dans les toilettes, hein. Point noir. Oui, oui. Ben, écoute-moi, Gérard, honnêtement, t'es devenu ma proie. Je vais t'harceler, ça va être puissant, quoi. Tu suis ? Je dis, ça va être puissant, parce que tu m'as donné l'envie de t'harceler. Et franchement, tu... Ouais, non, mais attends, moi, je sors pas avec des mineurs, hein. Tu vas subir. Tu vas subir ce que jamais t'as subi, Gérard. Ouais, ben, moi, je sors pas... Tu vas pouvoir définir le terme harcèlement. Ouais, ben, moi, je ne sors pas... Ah, les mineurs ! D'ici, tu me sauteras, Gérard. C'est ça, ben, alors, je préfère me mettre une capote avant d'attraper des morpions avec toi. C'est plutôt l'inverse, je crois. Poupon ! Il sort pas avec des mineurs, il sort que avec des horreurs. Alors, Poupon, ta conclusion, je viens de l'entendre. Terminé pour toi. Mathieu ? Ouais, je me suis mis à skier tranquille, donc, Gérard, tes débats, bof. Et puis, mais par contre, moi aussi, je vais t'harceler, je vais te faire ta fête demain, tu vas voir. Ouais, ben, on verra. Je te dis bon. Ouais, ben, surtout de Toulouse, t'as raison. Tu crois que... Attends, tu crois quoi ? Moi, j'ai une voiture, hein. Moi, j'ai une voiture, mon pote. Casse-toi. Ah, ben, écoute, moi, Gérard, ton débat, il m'a vachement chauffé. Ouais, casse-toi, mais casse-toi. Bon. Bon, ouais, tu me vires la chialose, là. Ouais, mais bon, tu l'as déçu, quoi. Et alors, j'en ai rien à foutre. Casse-toi. Ouais, Gégé. Ben, écoute, Gérard, je viens de te le dire, je t'ai dit, ton débat, il était vachement chaud, et maintenant, j'ai vachement chaude. Ah, ben, c'est bien. Ouais, Gégé. Couscous. Couscous. Oui. Il y a de la soule dans les oreilles. Couscous. Ouais, il y a pas de problème. Moi, je dis que le harcèlement sexuel, c'est pas bien, mais fais quand même gaffe à ton derrière. Il y a un accident si vite arrivé, Gérard. Non, mais t'inquiète pas, j'ai mon cadre du corps. Moi, je vais te le prendre le derrière comme il faut, tu vas voir. J'ai rien fait. Olivier, tu m'éteins ce micro vite fait. Tu m'éteins ça vite fait. Ça y est, ça y est. C'est toi qui joue. C'est toi qui joue depuis tout à l'heure. M'éteins ça. Bon, ça va, Simon, les auditeurs ? Ouais, ça va, il n'y a pas de problème. M'éteins, sinon, tu vas le payer dix-cinq. C'est un petit débat. Tu es du tube. Tu es du proche. C'est bon, Gérard ? Donc, moi, la conclusion sur le harcèlement sexuel, c'est la dernière fois, Olivier, que tu fais la pro. Oh non ! Non, mais je peux te le dire, c'est la dernière. C'est pas une conclusion. Déjà, tu m'as fait taper ton bordel, donc t'as gagné. Et voilà, je ne fais jamais rien, c'est toujours ce que j'arrive à faire. Non, non, là, tu viens d'appeler. Alors, t'éteins ça, parce que... Ok, ok, ok. Tu ne me jettes pas ce laser dans la figure. Ouais, mais c'est pas le tien, c'est à moi. Alors, ça te coûte dix-cinq. Ouais, mais ça peut lui faire mal aussi, quand même. Tu veux me jeter un laser dessus et tu veux me le faire payer. C'est un peu de pratique. Donc, si vous avez des questions à me poser, moi, je peux... Allez, chacun son tour, chacun son tour, une question. Alors, on va demander à Marmite. Vous avez encore dix minutes. Euh, même pas... Si, si, si, un quart d'heure, dix minutes. Non, non, non, non. Fais tourner, fais tourner. Marmite ! Ouais, attends, je réfléchis, là. Non, mais vous, il faut faire vite. Ouais, ouais, non, mais je réfléchis. Si un jour, tu travailles, est-ce que toi, si tu travailles, si t'étais patron, tu harcelerais tes secrétaires ? Non. Oh. Pourquoi ? Je t'ai vu harceler des fois des filles ici. Oh, mytho, Gérard. Non, mais attends, toi, Olivier, tu t'écrases, tu pourrais mieux t'occuper de ton boulot. Quand Sandi n'est pas là... Mais attends, attends. J'ai vu harceler des mecs. Eh, tu veux qu'on n'en passe des cendres ? Des chiens, mais... T'es vraiment un bâtard, hein. Oh, là, là, là, là, là. T'es vraiment un bâtard, quoi, de dire des conneries comme ça. Là, t'es en train de le... Le harceler, verbalement. Tu dégages. Allez, hop. Tu vires. On finit. Tu vires. Non, non, non, tu vires. Je veux plus te voir dans les studios, toi, maintenant. Bonne nuit. Hop, casse-toi. On en parle tout à l'heure. Non, non, non, non. Ah, OK. Gérard, sur IRC, Gérard, sur IRC, il y a Axel Durot qui dit conclusion quand tu passes à mon bureau. Moi, qui veux. Ça m'étonnerait que ça soit le vrai. On verra demain. Un avertissement. On verra demain. On voit noir. Ouais, ben, moi, j'ai pas de questions spéciales, mais je voulais simplement te dire que te retrouve jamais tout seul parce que sinon, je vais te sauter dessus, quoi. Ouais, ben, attends. Déjà, à 17 ans, faudrait que tu sais que tu m'attrapes. Ouais, il faudrait... Je cours pas super vite, Gérard. Elle peut te rattraper, hein. Ouais, non, mais attends. Je pars du principe que quand on veut quelque chose, on l'a. Ouais. Tu crois que je vais quitter Sandy pour toi ? Ah, non, absolument pas. Tu peux la garder. Moi, ça me dérange pas. Je préfère être la maîtresse. Ah, non, ben, alors là, je vais te dire une chose. Tu te mets le doigt bien profond, que je pense. Tu te quittes pas, je basse mon flip et je le mets. Ouais, ben... La cochonne, la cochonne. T'es vraiment une allumeuse, toi. Salope. Ah, la salope. Je sais pas, je voulais pas dire ce mot. Et tu l'as dit pourtant. Non, non, c'est pas moi qui te l'ai dit. Gérard, est-ce que je peux me faire un fist ? Qui ? Mermitte. Moi, je te fais un foot, hein. Non, Mathieu. Ouais, ben, moi, je voudrais savoir quand est-ce que tu vas t'acheter un rasoir parce que là, t'as vraiment une tête de pignouf, en fait. Ben, quand j'en ai les moyens. Ben, je t'en amènerai un de ces quatre, alors. D'accord, ben, tu l'envoies à la radio. Pas de problème, pas de problème. Et casse-toi. Mais, Gérard, j'ai pas de questions pour toi, désolée, mais... Tu veux du tube ? Arrête, arrête, arrête, arrête. Mais y a un gamin ou quoi ? Qui c'est qui vient avec un niard ? Qui c'est qui a un gamin, Manu ? Je sais pas, moi, c'était pas... Non, c'était pas prévu, mais tu prenais mieux de le prévoir. Ben, tu sais pas, moi, c'était pas... Tu vois, quand c'est du harcèlement, ça finit par faire des gosses, hein, toi. Ben, voilà. Ça fait rire les gamins, le harcèlement. Non, mais tu es le premier de prévoir. Ah ! Ça, c'est la génération, le harcèlement. T'as été le premier de prévoir. Ben, le gamin, il rigole. Tu l'amuses, tu l'amuses. Non, mais attends, parce que... Casse-toi, j'ai pas compris sa question. Et couscous, c'est à proposer. Et poupons non plus. Quoi ? Et poupons non plus. Si, tu l'as déjà posé, toi, ta question. Non, c'était Mathieu. Euh, casse-toi. Ben, donc, Gérard, ça va être difficile de comprendre ma question, étant donné que j'en ai pas posé. Oh, pardon. Olivier ! Je l'ai coupé. Arrête ! J'ai coupé, c'est ça, exprès. Toi, je sens qu'il y a une ramette de papier, là. Je pense qu'avant la fin de la soirée, elle va voler dans ta tranche. Cool, cool. Dans ta tranche. Alors, casse-toi, donc. T'as pas de questions ? Non, j'ai toujours pas de questions. Eh ben, t'inquiètes pas. Ben, casse-toi. Ben, voilà. Tu peux... Moi, j'en ai une. Est-ce que, Sandi, tu la harcèles sexuellement ? Alors, non, c'est qu'elle a... Ah, et vice-versa. On me dit sur IRC. Tu fais 849, on va lui demander qu'un réagisse. Ok, ok, ok. Donc, Couscous... 849 kilos ? Oh, là, là. C'est gentil, ça, hein. Non, mais continue ton débat. Attends, j'attends que Couscous pose la question. Et tu éteins ce doublasson ! Oh, Chewbacca. Oh, oh, oh ! Éteins ça, là. Quoi ? Éteins, éteins. Tu m'excites, Gérard, quand tu cries. Elle mouille, elle mouille. Je suis trompée, hein. Eh ben, eh ben, voilà, Gérard. Gérard, quand tu veux, hein. Gérard, elle est là, ta femme. Donc, la question, c'est quoi ? Est-ce que Gérard harcèle sexuellement et vice-versa ? D'accord. Alors... Ah, ben, raconte-nous. Oui, effectivement, il harcèle, mais c'est uniquement pour lui ramener le café le matin. Oh, là, là ! Chotte comme la moelle. Je crois que, là, si je ramène pas le café le matin, là, il me fait une crise, hein. Ah, ouais. Oui, moi, j'étais poupon. Ouais, poupon, oui. Ouais, je voulais dire, vous parlez beaucoup du harcèlement sexuel, mais, effectivement, on parle pas du harcèlement ménager ou du harcèlement culinaire. Merci. Où l'homme force sa copine à la cuisine et le ménage. Ça, c'est du harcèlement ménager et culinaire. C'est un peu macho, Gérard, en fait. Ah, Gérard, t'es couscous. Ouais, couscous. Pour finir... Est-ce que tu penses que le harcèlement sexuel est en principe ? Hein ? Principe ? Par rapport au site. Si tu parles de la syntaxe des palmypèdes dans la pédagogie instinctive, c'est sûr. Non, mais c'est pas con, ça. C'est pas con, Gérard. Qu'est-ce que t'en penses ? Personnellement, rien du tout. Ouais, en fait, tout est lié, quoi. Pourquoi ? Ça serait pas entre un site par rapport au site du texte. Non, si tu reviens au concept abstrait de la prévision... Laissez parler un peu Gérard, aussi. Non, non, mais moi, de toute manière, sur la question, je peux pas répondre. Non, mais c'est du con. Ça dépend de quelle façon t'interprètes la réponse. Voilà. Si uniquement tu vas à la lignée 1, c'est pas possible. Non, mais là, on va se quitter. On va se quitter, là-dessus. 6 minutes, encore. Non, non, 6 minutes. Non, mais c'est vrai, tu as 10 minutes. Oh, 6 minutes ? Jusqu'au bout, ton boulot. Gérard, c'est Bousco, je peux te poser une question ? Vas-y. Est-ce que t'as déjà vu des personnes faire du harcèlement sécuel ? Euh, jusqu'à maintenant, non, pas encore. Eh ben, tu vas bientôt pouvoir le voir. Mais attends, toi, à 17 ans, tu vas pas me prendre la tête. Elle va te prendre le cul. Non, mais attends, toi, à 17 ans, déjà, t'es pas sûr de rentrer à la loco. À mon avis, t'es une grosse allumeuse. Toi, t'es une... Ouais, Gérard, encore mieux. Et je préfère maintenant... T'es une grosse pétasse, aussi, hein. Non, mais... Elle est jalouse. Oui, elle est jalouse, et elle a très bien... C'est pas la question d'être jalouse, c'est la question que ça se fait pas. Quand t'as un mec, tu vas pas aller voir ailleurs, tu vas pas allumer les autres mecs pour le plaisir. Attends, je vais te quitter, j'ai un mec. Non, non, mais attends, eh. Attends, eh, euh... Elle, elle va allumer Gégé. Eh, point noir, point noir. Pourquoi pas, pourquoi pas. Eh, point noir. Bon, l'anniversaire. Eh, point noir, quand même, tu pourrais te faire plaisir, j'ai... Eh, point noir, déjà, à 17 ans, t'es pas sûr de rentrer à la loco, déjà ? Je la ferai en... Je peux t'attendre à la sortie. Ouais, bah, là, là, tu sauras même pas comment que je serai allumé. Ouais, mais Gérard, j'ai pris selon son nom, et je l'ai mis plus un sur le liste. Ouais, bah, dans ce qu'elle a... Je vais la faire rentrer. Attends, eh, tiens, point noir. Je vais la faire rentrer, moi, je vais la faire rentrer. T'as qu'à allumer le bouboulot standard. Elle veut pas de moi, elle veut de toi. Non, mais moi, j'en veux pas, moi, j'ai appris. Alors, dans ce qu'elle a, tu vois, point noir, ce que tu viens de dire, eh ben, tu vas gâcher l'anniversaire à Max, et que demain, je reste chez moi. Voilà, bravo, point noir. Ah, bah, pour une fois, j'étais décidée d'y aller. Bah, ouais, mais tu diras merci à point noir. Gérard, c'est pas à cause d'une fille de 17 ans que tu vas pas venir dans l'anniversaire. Moi, je réponds pas à des questions d'une petite... Mais t'es une vraie gonzesse, toi, à 39 ans, tu perds les pédales pour une fille de 17 ans. 17 ans, tu dis, 17 ans, c'est une anniveuse. Elle rentrera pas, elle rentrera pas. Mais c'est quoi, ce délire, là ? Gérard, si ça peut te rassurer, je travaille le week-end. Bah, ouais, c'est ça, t'as... Gérard, tu vas venir vendredi à la loco, puis c'est tout. Attends, tu vas pas discuter, attends, ça va. On a besoin de toi, Gégé, on t'aime. DJ sur N. Ouais, un couscous. Oui. Bah, toi, alors, qu'est-ce que t'as de spécial à poser comme question ? Parce qu'à force... Non, ça suffit, derrière, là. Moi, j'en ai une, Gérard. Bah, moi, je prends un Mars et ça repart. Ok, bah, ça, c'est bien comme pub. Ouais, qui ? C'est moi, deux trucs, c'est... Qui, qui, qui, qui ? Marmite ! Non, c'est Marmite, en premier. Est-ce que tu crois que le thème du... Arrête, arrête. Bon, eh, tu me laisses Marmite pour un instant, tu me coupes les autres parce qu'ils me font chier. Eh, bah, non, ouais. Est-ce que tu crois que le thème du... Oh ! Ah, non ! Eh ! C'est marmite ! Eh bah, ouais, ça y est, j'enlève les autres ! Putain, il m'a mis une claque, j'ai réussi. Eh, ouais, eh ! Tu vois, tu ne t'y attendais pas. Ah, ça, c'est éventuellement bien. Voilà, je réponds. Alors, Marmite ! Eh, Gérard ! Gérard, est-ce que tu crois que le thème du harcèlement... Oh, les mecs ! ...pourrait être porté au cinéma ? Gérard, tu pourrais te retenir. Marmite ! Gérard, est-ce que tu crois que le thème du harcèlement pourrait être porté au cinéma ? Bah, de toute manière, ça se voit dans les films. Harcèlement sexuel. T'as vu des films de harcèlement ? Quand tu vois Brigitte Laé ou... C'est un film de boules, ça. Ouais, mais même, quand tu vois les trucs sur la mode, fais-moi confiance. Les mecs, ils se rincent bien l'œil quand ils préparent les nanas pour défiler. C'est sifflé. Est-ce que t'as vu le film Le harcèlement, avec Demi Moore ? Alors, le film Harcèlement avec Demi Moore... Demi Moore ! Oui, c'est vrai que... Bien sûr, c'est... Avec Roger Moore. Avec Demi Moore. Avec Roger Moore. De toute manière, tu l'as, la maison. C'est pas... Oh ! C'est pas harcèlement, c'est striptease. C'est striptease. Il est encore sifflé, ou quoi ? Non, je sais pas, je crois que c'est en haut, à l'accueil, ils font la toffe. Moi, j'ai vu un autre film d'harcèlement, ça s'appelait Ferme la porte, que j'ai écarté. Moi, j'ai vu un truc, c'est que maintenant, je vais vous laisser. Gérard, c'est Couscous, j'ai une question. Ouais, vas-y, la dernière. Est-ce que tu peux me reciter une fable de La Fontaine ? Le corbeau et le renard, voilà, terminé, point final à la ligne. Gégé, Gégé, 9.9, ça fait combien ? 9.9, 68. Non, arrêtez, c'est pas grave. Bon, Gégé, moi, je voulais te dire, la semaine prochaine, tu fais un débat sur le vieux gras, et je voudrais savoir où c'est qu'il faut le mettre, le vieux gras. Non, mais le vieux gras, c'est un truc que tu mets dans ta bouche et que... Il est là, le vieux gras. C'est sûr que c'est pas des suppos de vieux gras ? Bon, alors, conclusion vite faite, Gérard, pour le débat de ce soir, qui était bien, quand même, à part Olivier, qui a perturbé un petit peu la fin de ce débat, dommage. Donc, tu ne feras pas partie de l'équipe la semaine prochaine. Pour commencer. Donc, tu es renvoyé, tu ne fais plus partie de notre équipe le jeudi. Alors, la conclusion, Gérard, s'il te plaît, parce que tu t'écares toujours du débat. C'est toujours aussi mauvais. Ben non, conclusion, c'est dommage que ça soit terminé comme ça, sinon, je pense que c'était un bon débat, à part le premier, qui a foiré. Non, il était bien, il était bien. Il a quand même foiré, mais je pense que sur l'IRC... Ça a répondu présent, c'était parfait. La conclusion sur le harcèlement sexuel, parce que ce n'est pas ça ce qu'on attend de toi, c'est de parler du débat. Je pense que c'est un peu con ce qui arrive aux gens, maintenant, quand ils vont voir les patrons. Voilà. D'accord. Quand la nana va voir le patron, si t'es bien, si t'es canon, comme Marmite a dit, t'es prise. Si t'es pas bien, tu retournes chez Noir. C'est canon, Marmite, tu crois ? Je ne sais pas. Moi, je m'en fous, personnellement. Mais moi, je peux te dire que si t'es bien, t'es prise. Si t'es pas bien, ben... C'est simple, il va te dire, on te rappelle. Et puis, ta candidature, elle va, comme Manu vient de faire, hop, à la poubelle. Voilà, exactement. Donc, la semaine prochaine, les deux thèmes du débat. Donc, on va parler sur le Viagra, qui est sorti, là, depuis peu. Et bien sûr, le fameux débat, tu veux que je fasse à tout prix, mais... Je ne suis pas chaud, mais on va le faire quand même en deuxième partie du... En deuxième... Deuxième partie. Ça sera sur la politique. Et voilà. Donc, deux débats qui risquent d'être, quand même... Assez mouvementés. Assez mouvementés et assez chauds. Et on va se quitter avec... Avec Jazz. Jazz. C'est pas ça, c'est... Non, c'est pas ça. Non, c'est pas celui-là. Jazz sur Fun Radio. Je vous souhaite une bonne nuit. Demain, 22h, bien sûr. Et puis, on vous souhaite une bonne nuit avec Rousseau. Et puis, on se retrouve jeudi prochain. Et sinon, demain soir, avec nous, à la loco, pour fêter mon birthday. Ça sera en direct, d'ailleurs, de minuit. Nuit à 4h du matin. Bonne nuit. == Le débat sur la politique == === Contexte === === Les personnages === === Transcription === 21 ans de Mazamé Mérice Pédissoir Gérard Cassenoisette 19 ans de Niort Ça va bien ? Je sais pas, j'ai pas regardé ce matin Plotte-moi, 20 ans de Gap Bonsoir Gérard, bonsoir Yargla Bonsoir Tuiline, je te kiffe bébé Pas de message Les messages terminés, c'est bon pour toi Tony Et bonsoir, j'adore la politique 20 ans de Paris C'est tout, on va les rappeler Non, on va les rappeler, ils sont pas encore là Alors pourquoi vous me donnez des fiches Avec des noms qui sont pas là, des auditeurs Alors commencez pas à faire votre travail à moitié Au boulot Ce soir faut être sérieux, on va arrêter de déconner Parce que ça commence à déconner à plat tube Donc dans un instant, débat de Gérard Comme chaque jeudi bien sûr, sur la politique On récupère saucisson à l'ail qu'on a eu tout à l'heure Bon, rebonsoir Rebonsoir Gérard Cassenoisette, rebonsoir Rebonsoir Gérard Parle un tout petit peu Parle un tout petit peu Parle un tout petit peu Un petit peu plus fort s'il te plaît, merci Rebonsoir Gérard Plotte-moi 20 ans de gap Oui bonsoir, je tiens à préciser que je ne foutrai pas le bordel ce soir Ouais ben j'espère pour toi Et ceux qui ont des téléphones pourris, vous me le dites Attends, Manu il va gérer ça Parce qu'il y en a qui ont un téléphone vraiment pourri, on va le trouver Tony, rebonsoir 20 ans Paris Rebonsoir Gérard Tête bête Salut Gérard 20 ans de dîner Et gros string, 23 ans de bourge On peut écouter Fun Radio sur 96.7 J'ai oublié de préciser les fréquences Ouais c'est ça, salut Gérard Bonsoir, donc tête bête c'est Dîner en 103.5 Tête bête, pas tête bête Dîner en 103.5 Paris 101.9 Gap 93 FM New York 93.4 Mazamé 99.4 Celui qui s'amuse avec les sonnettes Son prier d'arrêter, merci d'avance C'est chez toi Gérard Non mais je ne suis pas chez moi pour l'instant Celui qui s'amuse avec les sonnettes Gare Alors première question Donc le premier débat c'est sur la politique J'ai oublié de préciser Ma passion Donc à quoi sert le vote en politique ? Anthony comme c'est ta passion, vas-y Le vote en politique, c'est pour élire les élus Et c'est très important Parce que c'est ceux qui nous représentent Au sommet de l'Etat Donc c'est eux qui nous disent Tu vas payer tant d'impôts chaque mois Et qui nous prennent un cinquième de notre salaire Et je trouve ça dégueulasse Il n'y a pas qu'un cinquième de notre salaire Et qui nous prennent quand même plus aussi Parce qu'il faut dire aussi qu'il y a la La CPG aussi Non non il y a un autre truc La CSG quand même il nous retire pas mal C'est un syndicat ça Grosse ring Grosse ring pour toi Moi je trouve que déjà Si tu veux le vote quelque part Ça fait une sortie quoi Une ou deux fois par an tu vas voter Tu votes deux fois dans Deux fois, tu as deux tours Faut préciser Ouais Non mais toi si tu votes deux fois C'est ton problème quoi Non mais il y a deux tours Faut bien préciser Si ça t'a plu tu peux y retourner Je suis d'accord Non mais attends Si au premier tour ça passe pas Tu re-votes une deuxième fois C'est ça que je veux te dire Si t'es pas éliminé au premier tour Non mais attends je sais Non mais attends Si j'y avais pas la première fois Je peux y aller la deuxième Si je loupe Bah oui mais même si t'as pas envie d'y aller Que t'es ailleurs De toute manière il y a une question là-dessus Je pense que c'est sûrement l'affaire T'es bête Ouais ça sert à rien Pourquoi ? Parce que c'est C'est triché quoi On sait déjà qui c'est qui va être élu Donc c'est pas la peine d'y aller Ah non mais attends Tu peux pas le savoir dès le premier Tu peux pas le savoir Mais non tu peux Non mais attends Attends tu peux pas le savoir Dès le départ Qui c'est qui va être élu au début Je crois qu'aux dernières élections Il y avait les résultats sur internet Deux jours avant Bah oui Ouais mais tu peux pas savoir Tout de suite au premier tour Qui c'est qui sera là Mais si j'arrange un peu Mais non mais non mais non Mais non tu connais rien Quoi j'y connais rien Attends tu as pas commencé Parce que sinon toi tu as Tu as retourné à dix noms Vite fait toi D'accord Hein Euh Plote moi Euh oui Non non non non non Pas de ça Non bah c'est son nom Il pourrait peut-être trouver D'autres noms Des noms comme ça Excuse-moi c'est pas ma faute Bon et qui c'est qui s'amuse Avec les réveils là Ça commence à me prendre la tête là Je me réveille tôt demain Bon alors Tu peux y aller Jean Ouais ouais vas-y Comme a dit monsieur Tony Là je crois que c'est vrai C'est les élus quoi Ils nous enculent un peu Et en plus Eh tu restes poli S'il te plaît quand même À 0h42 J'ai pas dit qu'ils nous enculaient J'ai dit que c'était des gros pédés Ouais bah tu restes poli Tony Parce que sinon Tu vas faire un stage au standard Toi aussi tout à l'heure Parce que si tu veux faire les débats Tu restes calme C'est ce qu'on avait bien précisé Quand t'étais venu Le jour de l'anniversaire à Max D'accord ? Bon anniversaire Ouais d'accord Alors donc pour toi Donc plot moi Donc on continue avec toi Avant de demander à Casse-Noisette Et Saucisson à l'Aïr Bah moi je crois que Effectivement c'est vrai quoi Ils nous Bon je vais pas dire enculer Parce qu'ils nous enculent pas Mais ils nous prennent vraiment de la thune Et c'est ça qui est vraiment chiant quoi Ça m'énerve moi C'est toi qui joues avec un réveil ? Moi ? Ouais Bah non mais tu déconnes J'ai pas de réveil Non mais qui c'est qui joue avec un réveil là ? Ça commence à m'énerver là Casse-Noisette Ouais bah moi je trouve que Ça sert à rien d'aller voter D'accord Question réaction Oui sur IRC Il y a Snul qui me dit Que le vote est une chose bien Surtout pour Miss T-shirt mouillée Non bah ça Peut-être pour lui C'est pas C'est pas Il y a pas deux tours là Il y a qu'un tour de poitrine Ah ok donc C'est pas valable Ouais mais il y a deux seins quand même Ouais mais c'est pas valable Ouais mais il y a qu'un tour Non mais ça y est c'est bon On va pas s'éterniser sur Les T-shirts mouillées Donc Casse-Noisette Moi j'aime bien toucher les parties Bon Anthony Tu t'écrases s'il te plaît un peu maintenant Casse-Noisette Ouais bah moi je trouve que Ça sert à rien d'aller voter quoi Mais pourquoi toi ? Pourquoi ? Bah c'est tout simple Tu te pointes là-bas Tu vas voter Tout est truqué Tout est déjà fait d'avance Non non non non non C'est pas Non non non non non Je te dis que non Non Non je te dis Mais si Gérard Non non mais attends Moi j'ai insisté à un dépouillement Dans la région où j'habite Et j'ai même insisté Au truc des bottes Et fais-moi confiance Que c'est pas truqué Je peux te le dire tout de suite Moi je te dis quelque chose Gérard C'est que je suis très bien placée Qui ? Qui ? Qui ? C'est Casse-Noisette Je suis très bien placée pour le savoir Je te dirai pas ce que je fais dans la vie Mais je suis très bien placée pour le savoir Bah peut-être pour toi Mais moi je te dis tout de suite Que c'est pas truqué C'est pas truqué d'entrer c'est tout Saucisson à l'ail Bah écoute moi je suis un peu d'accord Avec tout le monde Mais moi aussi je dis que c'est truqué quoi Parce que des fois tu vois les chiffres Ça monte, ça descend C'est n'importe quoi C'est vrai c'est n'importe quoi Mais non mais Je suis pas trop d'accord avec vous Parce que là Non non mais attendez Moi je vais donner quand même mon truc Moi je peux vous Non mais Je peux vous dire Je peux vous dire une chose Que c'est pas possible Que ça soit truqué d'entrer C'est impossible C'est contrôlé Donc ça peut pas être truqué tout de suite Pourquoi ? Dans quel sens ? Non non mais y'a pas de dans quel sens Pourquoi ? Moi je te dis que ça peut pas être truqué Oui Rigo Attendez attendez Oui y'a Y'a Goldberg sur IRC Qui demande c'est quoi un épouillage ? Un épouillage c'est de retirer le bulletin Non le sac d'une petite vieille Dans la rue Non non non Attends Fildar T'écrases s'il te plaît merci C'est quoi l'épouillage alors ? Non dépouillage Il a pas compris ce que j'ai voulu dire Donc dépouillage c'est de retirer le bulletin Qu'on a mis dans une enveloppe Et on le met de côté Et on fait des tailles Après on les compte pour savoir Qui passe Qui sera Élu ou pas Voilà c'est tout Ça sert à quoi de le mettre dans une enveloppe Si après ils nous le retirent ? Mais non mais on le retire Et après ils ont tout ce qu'ils veulent Ça sert à fabriquer des enveloppes Voilà Donc deuxième question La politique vous rend-elle amoureuse ? On va demander Bon celui qui avec son réveil t'arrête C'est clair et net Parce que je vais pas chercher Le midi à 14h tout à l'heure Je vais en virer Ouais Parce qu'il y a d'autres personnes Qui attendent pour participer C'est bien clair Ouais moi je voulais répondre à la question C'est que Moi je trouve Ton nom c'est quoi ? Tony Ouais bah précisez vos noms Quand vous voulez parler D'accord Ouais mais on le reconnait quand même Moi je voulais dire que Elisabeth Guigou Je la trouvais bonne Non mais attends T'arrêtes de donner des noms S'il te plaît Bah écoute c'est son nom C'est de la politique Ouais ouais C'est pas la peine de citer les noms Des personnes politiques Gérard Oui C'est Grosstring Moi je voulais Je voulais dire que Moi c'était Ségolène Royal Que je trouvais bonne Bon et Grosstring et Tony Soit que vous vous calmez Et vous arrêtez de donner des noms Pas de marge Soit que vous gerbez Ça va aller vite vous deux C'est pas la peine De sauter de ma gueule derrière Parce que sinon Vous allez virer tout de suite C'est clair et net Mais pourquoi ? Non y'a pas de pourquoi C'est ta question Excuse-nous Alors t'es bête Ouais Donc toi ? Ouais moi une fois J'ai rencontré un mec Dans l'isoloir On a fait crac crac machin Et tout Et ouais j'étais amoureuse Donc c'est bien C'est bien D'accord Plotte moi Non Mais si Non Si quand même merde Un peu Oh Oui bah j'y vais Ah non Plotte moi Bon Manu T'essaies de me choper Le réveil Et celui Qui a du monde chez lui Parce que ça m'énerve là Je crois qu'il attend des invités Ouais mais je sais pas qui c'est Ouais mais moi je veux pas le savoir Si il participe au débat S'il a des invités Il dégage Écoute qu'elle est rentrée Mais elle est dans la cuisine Et puis on en parle plus Bon alors Plotte moi Il y a peut-être un mec Qui est un policier Qui l'attend des gens Genre le marché Y'a pas moyen que tu rentres Ah ça finit Oui là avec les noms Ouais arrêtez c'est vrai Bon merde je peux parler un peu là Euh comme on dit les autres là Bon avec les guigous et tout ça Moi c'est la mère La mère Tiberie je crois D'accord Je pense que Plotte moi Et Tony Et Grossim Je crois que vous allez pas finir Le débat J'ai rien vu Non non mais vous donner des noms Comme ça C'est pas tellement bon Casse-noisette Ouais bah moi je pense pas Que la politique rend amoureuse Néanmoins Moi quand je vais voter Je vote pour celui Qui a apparemment La plus grosse queue quoi D'accord carrément Saucisson à l'ail Bah écoute moi Je vois pas vraiment le rapport Mais je vais quand même te répondre Bah moi ça me rend pas amoureuse C'est bien Ah bah c'est pas mal Moi je peux vous dire une chose Que moi non plus Ça me rend pas du tout amoureux Je croyais que t'étais amoureux De Jaco pourtant Non non non Moi ce que je voulais dire C'est que les membres Du parti communiste Ils sont pas très brandants Bon Tony Oui Encore une connerie comme ça Et tu t'en vas Pas de marque Tony Pas de marque Ok t'as pas besoin de citer les partis Pardon la prochaine fois Je dis que t'es initial Ah ouais Gérard j'ai une question Minitel de Merlot Du département 44 Qui demande Enfin il veut revenir A la question précédente Très rapidement Est-ce que Gérard Mets un timbre à l'enveloppe Quand il va voter Je vois pas du tout le rapport Je vois pas du tout le rapport Là dessus Bah si Comme tu prends une enveloppe Et que tu la déposes Est-ce que tu prends soin De mettre un timbre avant Pour qu'elle arrive bien A destination C'est quoi l'adresse aussi Non non non Attends déjà C'est pas ça A quoi sert le vote en politique C'est quand tu vas dans les urnes Tu t'amuses pas à voter Avec des timbres sur les enveloppes Ah d'accord Ça c'est une autre question C'est pas les mêmes enveloppes Voilà c'est pas du tout pareil Gérard Je peux te poser une question Je voudrais savoir Si des fois Tu te grappes les urnes N'importe quoi toi Moi par contre J'avais une question Comment c'est fait Un urinoir Parce que moi je sais pas Je suis jamais allé voter Bah c'est simple C'est une petite cabine Avec un rideau C'est tout Pour pas qu'on voie Et tu mets 2 francs Tu mets 2 francs Pour pas qu'on voie Pour qui tu votes Et quand t'as 10 000 votés Tu tires la chasse Ils te donnent une petite serviette Pour t'essuyer Peut-être On sait pas Donc troisième question Les enfants ont-ils le droit De faire de la politique On va demander ça A Castenoisette Comme elle est bien placée Oui Il y en a déjà Qui ont tenté le coup Gérard Et je peux te confirmer Que effectivement Bientôt Les médias vont parler D'un petit jeune Qui a 14 ans Et qui s'y met vachement Et en fait Castenoisette Parle plus fort un peu Castenoisette Tu parles plus fort Il y a du monde derrière toi Oui donc Ouais bah alors Tu demandes aux gens Il y a personne Il y a personne Il y a absolument personne Je suis toute seule Assise sur ma chaise Comme une clocharde Non bah c'est bizarre On entend du monde Chez quelqu'un Mais je voudrais bien savoir Chez qui Ah oui mais non Mais moi c'est pas chez moi Donc alors Donc tu disais Ouais donc je te disais Bientôt Il y a un petit jeune De 14 ans Qui commence à se mettre A la politique Et les médias Vont bientôt en parler Je peux pas en dire plus Parce que sinon Ça serait divulguer Des secrets Des secrets d'état Néanmoins sache Que tu vas bientôt Entendre parler D'un petit jeune De 14 ans C'est pas Jordi Non non mais c'est bon On a pas besoin De savoir les noms D'accord Je ne donne pas de noms Oui non mais je sais Ouais je sais Casse-moi cette C'est pas pour toi Que je parle C'est pour Tony Qui veut dire Sûrement de qui il veut parler Je vois à peu près Ah oui Donc Moi je voudrais parler Attends 5 minutes Oui Gérard Il y a un certain Max Sur l'IRC Qui me demande Si les animaux Ont le droit de voter Je vois pas comment Qui pourraient voter Les animaux Il me dit Dans la mesure Où certains hommes politiques Sont des chiens Les animaux pourraient voter Ouais mais ça Maintenant avec les trucs Sur les guignols de l'info Comme ils font pas mal De conneries Ils s'amusent A faire des Des figurines Des hommes Politiques En tête de chien Et tout ça On nous aurait menti Alors Saucisson à l'ail J'étais venu à toi Bah écoute Moi je pense Qu'ils ont pas vraiment Le droit Mais c'est pas pour ça Que ça les empêche De le faire quoi D'accord Ok Plotte-moi Je veux dire Pardon Oui Oh c'est fini Derrière Putain ma caisse Ah il y a un mec Qui se fait tirer sa caisse Là on dirait Bon bah alors S'il se fait tirer sa bagnole Je sais pas qui mais Putain les enculés Oh tu restes poli S'il te plaît Plotte-moi parce que tout à l'heure Tu vas virer Je pense qu'il vient de parler là Elle a ma BM Alors plotte-moi vas-y Euh oui donc je crois Que c'est un peu bizarre Ce qu'elle a dit tout à l'heure Parce que moi J'ai entendu parler Qu'il fallait quand même Avoir 23 ans Il me semble Non là Tu peux Non c'est 21 Non si je me souviens Si je me trompe pas Non non c'est Non non pour être Pour machiner Pour avoir 21 ans A peu près Pour voter Pour se présenter Aux élections C'est combien C'est quel âge 21 ans Normalement Je peux rajouter Juste quelques Oui oui vas-y Il faut savoir Qu'en fait Cet enfant là Ce jeune adolescent Va demander l'anticipation Ah d'accord D'accord Donc c'est pour ça Que je répondais A la question Je ne peux pas dire Julien C'est quand même Un secret d'état C'est pas moi d'en parler Les médias vont faire Leur boulot Beaucoup mieux que moi Et donc voilà C'est tout ce que je voulais C'est ton gosse Jérôme Non c'est On se calme Je viens d'entendre Un nom Que j'aime pas Par contre Là on vient de me Donner Un petit sondage Il y a 20 Donc pour ou contre La politique Mais ça J'en avais pas parlé Donc je vois pas Pourquoi qu'on met Pour ou contre Donc il y a 20% Des gens qui Qu'ont dit Qu'ils n'aimaient pas La grossièreté Ca c'est vrai 40% des gens Ont dit Que les Que les types C'étaient des Petits parasites Parasites Que l'éthique L'éthique C'étaient des petits parasites Ouais que c'était L'éthique C'étaient des petits parasites Que l'on trouve Sous les Sous le chien Et 40% des gens Ont dit Qu'ils n'en avaient Rien à foutre Et ça Je suis bien d'accord Avec les 40% Qui disent Qu'on en a rien à foutre Ca pour moi C'est réel Donc Tony Pour toi J'ai pas suivi la question Parce qu'avec tes sondages Là tu m'as perturbé Alors Les enfants ont-ils le droit De faire de la politique Voilà la question Bah oui tout à fait Moi je pense que les enfants Ca serait pas pire Que ce qu'il y a maintenant Enfin moi je sais pas Si par exemple Une fille de 12 ans Elle est aussi bien galpée Qu'Elisabeth Guigou Bon Tony Tony c'est la dernière fois Tu vas retourner Voir Manu au standard Ah il est impossible ce Tony Alors c'est fini Non non Tony Je te l'avais dit gentiment Tout à l'heure De ne pas citer Le nom des personnes politiques Si si t'as très bien entendu Donc c'est terminé C'est terminé Tony C'est terminé C'est terminé C'est terminé Terminé pour toi Tony Au revoir Et sur IRC On me dit Tony tu dégages Voilà bah ça y est Il est parti Donc Tébette Moi je dis que les gosses Ils ont rien à faire Dans la politique Oui Il ferait mieux de jouer au Lego Et de pas nous faire chier quoi C'est une affaire d'adultes Et c'est pas du tout Une affaire de gamins quoi Ouais mais Comme je disais tout à l'heure Donc faut bien avoir La majorité pour y être Mais c'est même pas Une question de majorité C'est que les gosses Ils ont rien à faire là-dedans quoi Ils jouent aux billes Et puis c'est tout Ouais mais t'en as beaucoup Qui veulent se lancer dedans aussi Mais ouais Mais c'est des petits cons Bon ok Grosse frigne Bah moi je sais pas Mais je sais pas Si tu regardes des fois Ils invitent des mômes A l'Assemblée Nationale Ouais mais ça Ouais mais ça c'est Pour faire des séances et tout Et pour s'intégrer un peu Ouais non mais attends Ça Merde ils posent tous La même question Quand est-ce qu'on mange Ils veulent tous Aller pisser en même temps Ouais non mais Et en plus Ils dégueulassent Tous les sièges Des députés Ouais mais non mais attends Attends je parle s'il te plaît Moi je trouve que Vraiment Les mômes C'est à l'école A la crèche Ou à la babysitting Et tout Et puis c'est pas Dans la politique quoi Ça va Non mais faut dire Qu'aussi avec ce qui se passe A l'heure actuelle Bon bah Les étudiants Les trois quarts Ont 15, 16 Voire 17 ans C'est des petits cons Les étudiants Ouais mais attends Mais c'est quand même C'est quand même C'est quand même Leur problème Parce que bon Faut dire une chose Que si Ils sont trop nombreux Dans les classes Faut voir aussi Le nombre de personnes Qu'il y a dans les classes Mais attends Attendez Attendez Attendez Attendez Attendez Attendez Laissez-moi finir J'ai entendu dire Qu'ils étaient jusqu'à 50 personnes Dans une classe 70 moi j'ai entendu 70 Ouais il y a J'ai entendu 40 50 et 70 Aussi par là Oui Excuse-moi Mais même s'ils sont 50 par classe C'est pas beaucoup T'en mets 20 dans la classe Et 30 dans le couloir Tu laisses la porte ouverte Et tout le monde peut suivre Ouais non non non Non non Attends attends Attends attends Gros string Gros string Gros string S'il te plaît Attends il y a une question IRC Oui gros string Je suis désolé Il y a Erki sur IRC Donc qui te demande Gérard Combien d'érections As-tu participé Non mais ça J'y répondrai pas Parce que c'est pas le thème Du débat politique Et Gérard Ah si en politique Les élections c'est normal A la place Les clochettes c'est bon A la place de Tony On accueille Kyra Qui appelle de Sarcelles 101.9 Bonsoir Laska Allo Bonsoir Laska Non tu parles comme Hippo Je suis Kyra Moi je voulais dire Que je vote Je vote et Voilà Tu votes pour qui toi Moi je vote pour Pour ceux qui Légaliseront le vol De Des mobilettes Voilà D'accord Ok D'accord Tu peux répondre A la question J'ai pas entendu Il était au standard Alors les enfants Ont-ils le droit De faire de la politique Tout à fait Moi je suis Tout à fait d'accord Que pourquoi Il y aurait Des discriminations Comme ça Dès le plus jeune âge Non mais Pourquoi Qu'est-ce qu'il y a Moi je peux vous dire Moi je peux vous dire Une chose Que j'ai Je voudrais pas Que mon enfant S'amuse à faire de la politique Parce que ça Ça me plairait pas du tout Déjà moi j'en fais pas Donc Et pourquoi justement Justement sur Minitel En plus ça cartonne Ce soir on est 30 connectés Il y a un auditeur Qui s'appelait Je sais plus comment Yann Qui voulait te demander Pourquoi toi tu ferais pas De la politique Et pourquoi tu serais pas Ministre de la route Non non mais ça Moi c'est un truc Qui me branche pas Et quand j'entends parler De ce qu'il parle A la télé Même sur les radios Fais-moi confiance Que c'est une prise de tête Pas possible C'est-à-dire Donc C'est sans arrêt En train de nous dire Ouais mais de toute manière Comme ils disent Pour les étudiants C'est malheur d'en parler Ils disent ouais De toute manière On vous promet des bourses Et puis tout ça Et puis en fin de compte Ils ont jamais rien Les étudiants C'est dégueulasse Ils ont jamais rien eu Et c'est pour ça Moi je leur donne raison De faire ce qu'ils font C'est tout C'est quand même leur truc Pour avoir un bac Et donc moi je leur donne raison C'est tout Continuez En attendant Gérard Gérard président Gérard président A ce propos Y'a Yankee sur IRC Qui me dit Si Gérard était président C'est l'état qui se fera enculer Bon bah ça Il se démerde Donc Quatrième question Oh ça suffit Avec les sonnettes Oh ça suffit Merci Pensez-vous Que l'on parle Bon Manu Tu me le gères s'il te plaît Parce que ça me prend la tête Ou sinon Je gère la sonnette La sonnette tu dégages Alors pensez-vous Que l'on parle trop de politique Putain J'ai dit tu dégages Ça commence à me prendre Ça commence à me prendre la tête là Euh Caria Caillera Caillera Moi je suis d'accord Avec toi Gérard Parce que Moi y'a Dans la PC Il tourne Y'a le maire L'autre fois il est venu Et il nous parle Il nous prend la Il nous prend la Il nous prend la gueule Il nous fait Arrêter de fumer des tarpés Trouver un diable Tout ça Mais non on s'en fout Non on s'en fout Parce que On casse des trucs Ok Grosse ligne Bah moi je trouve que On en parle pas Pas tellement en fait Là pas plus tard que Attends ouais c'était hier J'ai regardé le juste prix Que dalle Non mais attends Eh Toh Oh grosse ligne Tu crois Tu crois qu'ils en parlent pas assez Ils ont fait Ils ont fait carrément Tout un truc sur Euh Sur Bill Clinton A 23h10 Attends Tu te fous de moi là J'ai jamais de l'avis Dans le juste prix T'es fou Non non mais attends Dans ce cas là Si tu regardes le juste prix C'est pas la peine de participer Au débat sur la politique Quand au journal télévisé Là tout à l'heure Ils ont pas vendu Tout ce qu'ils ont montré C'est la fusée qui les colle Bah ouais mais ils ont quand même Parlé de la politique Je suis désolé Ils ont parlé de politique Les astronautes Quand ils décollaient J'en sais rien mais Non non mais ils en ont quand même Parlé à 20h Je suis désolé À 20h Moi j'allume à 20h02 Ils n'en parlaient plus déjà Alors Non non mais attends T'es bête T'es bête Toupé Toupé à Québec Vas-y Toupé Oh Tu te réveilles Allez hop Bonne nuit pour lui Allez hop Celui-là c'est Comme ça il se réveillera Oui Rigo Oui il y a Vomis de porc sur IRC Qui te demande Gérard Pourquoi tu dis Qu'il y a trop de poils éthiques Tu aimes les hommes imberbes Non n'importe quoi N'importe quoi Plote moi Ouais moi je pense que Non Il y a trop de Il y a trop de Il y a trop de politiques D'ailleurs on devrait directement Passer au deuxième débat Non mais alors Pour l'instant c'est pas Toi tu n'as qu'à acheter toi Non mais attends Toi si t'es pas content Tu vas faire comme Tony T'es bête Tu vas gerber aussi Comme ça on va prendre D'autres personnes Tu vois j'ai envie de Ce soir On est à la troisième Il y a 12 questions Alors soit que tu réponds Gentiment à la question Soit que tu vires Tu choisis Je veux bien faire comme Tony Parce que mon nom Il me plaît pas trop là Eh ben alors C'est bien alors Pareil Allez salut Salut à toi Salut C'est bien il ne nous reste plus Qu'un, deux, trois, quatre Il nous en reste plus que quatre Alors casse-moi Z On accueille Attends excuse-moi Gérard On accueille quand même Citrouille Eh salut Gérard Salut Citrouille On t'appelle d'où ? J'appelle de Paris Ok Alors donc je répète la question Comme tu viens d'arriver Oui s'il te plaît Alors pensez-vous Qu'on parle trop de politique On va demander à casse-moi Z Comme j'étais sur elle en premier Ouais ben on en parle beaucoup Oh le porc là On en parle beaucoup C'est vrai mais à tort et à travers Tu vas dire que je vais remettre L'histoire de Clinton sur le tapis Non mais justement J'en ai parlé aussi moi Donc Bon je vais t'expliquer en gros Moi j'ai dû partir là-bas J'ai dû partir aux Etats-Unis Parce que je travaille au Parlement Et on a dû donc aller là-bas Et on a eu des réunions Donc avec Bill Clinton Et il faut savoir Qu'il y a des choses qui sont vraies Et qu'il y a des choses qui ne sont pas vraies C'est-à-dire qu'on va revenir Sur le harcèlement avec Ouais mais on ne va pas s'éterniser là-dessus Non non non Mais il y a des choses Il faut savoir que Bon il ne l'a pas harcelée quoi Elle était tout à fait d'accord Et bon Elle était consentante Elle était tout à fait consentante Elle adorait le sucer Elle ravalait tout Elle était contente Et puis voilà quoi D'accord Attendez attendez Il y a une question IRC Oui enfin c'est une réaction A ce sujet On te demande Gérard A ton avis Est-ce que Pour qu'un président Fasse parler de lui Il faut qu'il se fasse sucer Non pas spécialement On va peut-être pas revenir Sur l'affaire Bill Clinton Non mais En deux mots Moi je lui dis Là je peux y répondre De toute manière Ça sert à rien Strictement C'est casse-couille Ouais mais Gérard Il faut reconnaître Que ça aide quand même Ouais mais ça Je vois pas où ça fait du bien S'il y avait un président Par exemple Un président bulgare Ou un truc comme ça Un mec On n'en entend jamais parler Il se faisait pomper un bon coup Je suis sûr que dès demain On en entendrait parler quoi C'est clair Non mais ça T'as vu l'accueil des Attendez attendez Cueil gras Cueil gras 5 minutes oui On accueille casse-couille Bonsoir Bonsoir à tous Bonsoir aux 20 millions d'auditeurs Qui nous écoutent quand même Eh celui qui s'amuse A A faire ça Là il va se calmer Il est d'où lui ? Bah écoute Demande lui Parce que j'ai pas eu le temps J'ai 19 ans Et j'appelle de Mont-de-Marsan Et la fréquence de Mont-de-Marsan ? Euh alors ça Je sais plus moi Je vais la trouver Il va nous la donner Il y en a un qui est malade là Ouais je crois La malade c'est le deuxième de bas Celui qui s'amuse à faire ça Va se calmer Parce que sinon C'est moi qui vais le calmer Aurentaine C'est la chiasse Alors casse-noisette Oui Donc pour toi Non toi tu viens de répondre Ah oui Sois-ci son à l'aïe Bah écoute moi Gérard Moi je pense que la politique Si tu veux en entendre parler T'en entends parler Mais si tu veux pas en entendre parler T'en entends pas Bah voilà Donc je suis tout à fait Euh Citrouille T'avais pas répondu Ouais mais alors moi je dis On parle pas assez de la vie privée Des hommes politiques Ah si si Attends attends Citrouille Citrouille Citrouille Citrouille Attends Citrouille Je vais te dire une chose On en a quand même On en entend parler sans arrêt Parce qu'hier Y'a un truc sur la première Qui a passé carrément Toute la partie Une bonne partie de la nuit Ils ont fait ça à 23h30 Sur la 1 Je sais plus le nom du reportage Je crois que c'est reportage Ils nous ont cassé les burnes Avec la paire Bill Kington Pourquoi t'as regardé ? Non non je vais pas regarder J'ai zappé parce que ça me prenait la tête Moi je dis qu'il faudrait faire ça Toutes les semaines Si Chirac il a des maîtresses Si Jospin il a une grosse piste Ouais bah c'est bon On en a rien à foutre Ouais casse couille Ouais Gérard Ouais c'est qui ? Ouais c'est gros string Je voulais juste dire un truc Sur la vie privée des hommes politiques Je sais pas si t'as remarqué Mais l'été Dans tous les magazines Genre Paris Match Gala etc C'est que des photos Des hommes politiques Qui sont Qui sont moules couilles Sur la plage Ouais mais d'accord Mais ça c'est Non mais ça c'est leur problème On a même vu Barthez en jet ski T'imagines Casse couille Tu veux répondre Avant qu'on pose la cinquième Ce qu'il y a c'est que moi J'étais au standard Alors pensez-vous Qu'on parle trop de politique Manu tu me gères celui Qui arrête pas de roter Comme un porc Parce que ça m'énerve ça Pas de problème Il va aller gerber Il va revenir Ouais bah il va aller gerber Il va aller gerber Chez lui définitivement Gérard Ah bon ouais Calmez-vous s'il vous plaît Il y a Gognol sur IRC Qui te demande Comment tu ferais Pour boucher le trou de la sécu Ah bah ça C'est pas mon problème Ça c'est pas mes problèmes Pour les trous de la sécu Ils sont assez grands De s'en occuper Ça ça me regarde Bah apparemment non Ouais mais attends C'est bien aux hommes politiques De s'occuper du trou de la sécu Manu tu me le calmes S'il te plaît Parce que sinon Ça va chauffer pour toi Alors casse-couille pour toi Oui au fait Alors pensez-vous Que l'on parle trop de politique Donc c'était la question Comme tu étais au standard Ouais je tiens à préciser Que d'abord Que la fréquence C'est 52.6 à Mont-de-Marsan Vu que je l'avais pas dit Tout à l'heure Donc effectivement Je trouve qu'on en parle beaucoup Mais on en parle quand même Un peu moins Que quand il y a les élections Là on en a 24 heures sur 24 Il y a que de ça Ah ouais mais Mais non mais casse-couille N'empêche je suis au directeur C'est une chose que D'accord on en parle moins Avant qu'il y ait eu les élections Mais là quand même Ils nous bassinent encore A l'heure actuelle Avec l'affaire Big Clinton Et l'affaire Les visqués Avec les visqués Ouais mais je croyais Que tu voulais pas en parler Non non mais moi je te dis Tu dis qu'on en parle pas assez Si ils sont en train De nous bassiner avec tout ça Mais ils en parlent pas assez Bah ouais mais on en a ras-le-bol D'entendre parler de ça sans arrêt Mais non Donc alors vous allez réfléchir A la question Avez-vous un membre De votre famille Qui fait de la politique Et on va s'écouter Pierre de la Montagne Avec Elles sont blanches Mes chaussettes Et elles puchent Et on se retrouve tout de suite après T'appeler au 0800 308 5000 Et 0870 5000 Toujours le 36 15 4 Fun Radio Rubrique directe Et lire c'est www.fr Fun Euh Fun Radio Flash Fun Radio On a 921 connectés quand même Gérard ce qui est énorme Ouais J'en veux 1000 J'en veux 1000 avant Avant une heure et demie Ça arrive Ça arrive Et alors on va T'as trouvé là Qui c'est qui Ça y est Il est allé Il est allé aux toilettes Il a fait ses besoins Il est revenu Il est en pleine forme Super Ok Donc on récupère Saucisson à l'ail Toujours là Gérard Casse-noisette Ouais je suis là Gros string Ouais Euh Queyra Soir non Citrouille Ouais salut Et casse-couille Oui si tu pouvais donner Le label La maison d'édition Des disques que tu mets Ça m'aiderait Bon alors là Faut demander ça A Filda C'est le label rouge C'est approuvé D'accord merci Je connais Je connais Tu es pas people Ouais Bon c'est bien C'est bien comme ça Donc vous avez eu le temps De réfléchir A la question On va demander Bah tiens casse-couille Moi non J'ai pas de J'ai pas de membre Ni de ma famille Ni de mon corps Qui participe A la politique Ouais Voilà Ok Je suis désolé D'accord Citrouille Ouais moi j'ai un oncle Mais bon c'est l'athéon Il est communiste Alors on lui parle plus Non non non Non non mais ça On fait pas de politique Ah ok ouais Bon bah on lui parle plus Quand même Parce que c'est un gros con Ok Ah bah c'est bien Alors Keira Ouais moi je Mais nous Ils veulent pas de nous Parce qu'on a Avec des tepeaux On a voulu faire Un parti politique Ouais Et on est allé A la mairie Et ils ont pas voulu De nous Ces messieurs D'accord Grosse ring Bah moi j'ai un cousin Ouais qui fait de la politique Ouais Et il colle des affiches Hum Et bah voilà quoi Un jour il était dans la merde Parce que Il avait emmené Qu'un tube de colle Et il a pu en coller Que trois quoi D'accord D'accord Je vois pas du tout Le rapport On prend pas de la colle On prend pas des tubes de colle On prend pas des tubes de colle Les mecs Y'en a qui sont avec des seaux Et qui préparent déjà Ouais ouais Non mais c'est bon Tu me laisses Reparler s'il te plaît Merci Bah non je crois Qu'il y a un moment Si tu sais pas Comment on colle des affiches Moi je peux rien faire Pour tout le monde Non mais attends Tu demanderas A ceux qui Quand ils les colleront Pour les élections Tu leur demanderas Excuse moi J'ai beaucoup de respect pour toi Bon alors celui-là Ça commence à m'énerver Il a passé Mon cousin Il a passé un CAP En collage d'affiches Et il sait certainement Beaucoup mieux Que quiconque Coller des affiches Peut te le dire Non non non Si si si Casse-moi Z Ouais bah moi J'ai pas sa amie Qui travaille là-dedans Mais bon moi Je suis dans le milieu Je travaille pour le parti De Jean-Marie Le Pen Bon bah alors Casse-moi Z C'est bon là pour toi C'est terminé Elle a le droit de parler Non non non J'avais précisé De pas donner de Pas de FN Allez hop Terminé c'est bon Allez hop Hop Oh non non non Alors Je m'en fous de celui Qui s'amuse à faire ça De tout à l'heure Ça va mal C'est terminé pour lui Saucisson à l'ail Bah écoute Gérard Moi chez moi Tout le monde est contre Oh non non non Oh Oh si Bah qu'est-ce que j'ai dit Saucisson à l'ail Continue Non non mais j'arrête Celui qui s'amuse là Ah ok excuse-moi Moi je t'ai dit Mais chez moi Tout le monde est contre Oh non non non Mais quoi Et ça commence à bien faire là Un fil d'art Non c'est pas moi Non c'est pas toi Qui t'amuses avec Un petit bouton là Non Non non Toi tu es en train De me percer les miens Mais ça c'est T'en regardes pas Oui oui oui Mais t'es en train De t'amuser là-bas Ok C'est vu Donc Saucisson à l'ail Toi pourquoi Gérard deux secondes J'ai une question sur Minitel On est encore 23 connectés De R2D2 Je trouve qu'il y a Beaucoup trop d'hétérosexuels Dans le milieu de la politique Et toi Gégé Que t'en penses quoi Moi j'en pense Rien du tout de ça Mais est-ce que tu trouves Que en fait Justement en ce moment On parle du PAX Je sais pas si tu Non non mais ça C'est pas Ça rien J'en parle pas Pour le mariage Des homosexuels Qui font de la politique J'en parle pas là-dedans Ce soir Pourquoi Parce que ça m'intéresse pas C'est tout Mais c'est intéressant Les gens ils aimeraient savoir Ouais bah peut-être Mais moi Gérard Excuse-moi Excuse-moi gros string là T'aimerais pas De faire introduire Dans le milieu Non non non On va faire sur le côté On accueille X S'il vous plaît Oui bonsoir Gérard X bonsoir Oh elle est bien elle T'appelles d'où Bah j'appelle de chez moi apparemment Un appartement très bien d'ailleurs Manu Manu Quel fréquent S'il te plaît Non mais je te dis J'appelle de mon appartement Donc région parisienne Région parisienne Le truc que tu paies 900 balles là Région parisienne 90 mètres carrés là Région parisienne Bah oui région parisienne Ok 101.9 Merci d'apprécier Ainsi de suivre Donc à toi X Alors de répondre Bah si tu peux me répéter la question Avez-vous un membre Avez-vous un membre de votre famille Qui fait de la politique Non malheureusement J'ai pas J'ai pas quelqu'un Qui fait de la politique Dans mon entourage Ni dans ma famille Non C'est la vie des mystères ça Non D'accord Donc moi je peux vous dire Que moi non plus Comme j'ai pratiquement personne Que de son entourage Moi là-bas Je suis tranquille Oui c'est qui C'est gros string Ton membre Il fait pas de politique Bah en gros string Tu veux parler de quel membre Alors vas-y Ton membre A toi Tu nous demandes Nos membres à nous Maintenant De la famille s'il vous plaît Que je demande Ah ouais d'accord Faut pas confondre Les torchons et les serviettes D'accord Et alors ta femme Ma femme à temps merde Ma femme Ma femme à temps merde Tu sais ce qu'il dit Le vieux porc Exactement Alors Sixième question Déjà ça passe tellement vite Bah oui Doit-on voter Pour Peut-être une question Hier c'est avant J'en aurai une J'en aurai une Vas-y Vas-y Fildar Ok donc c'est Paul Ethic Qui te demande Gérard as-tu un membre actif Dans les parties Non Donc il reste serré Sur IRC Pardon Il y a SNUL Qui te demande Si tu connais le parti GNB Non plus On est combien là maintenant On est On est 7 ou 8 dans le studio Non non mais ça Je m'en fous Je veux savoir Sur l'IRC Si on va dépasser Les milles ce soir 986 On y arrive bientôt Putain t'es 12 Alors c'est bon Merci le pape Alors on continue Donc sixième question Doit-on voter Pour avoir une copine On va demander ça A Grossring Comme il n'arrête pas De jacter sans arrêt Est-ce que tu peux répéter J'ai mal compris Doit-on Doit-on voter Pour avoir une copine C'est la dernière fois Que je répète la question Alors ouvrez bien les oreilles Alors j'ai compris Mais il faut articuler aussi un peu Alors est-ce qu'on doit voter Pour avoir une copine Moi je dis Oui si on veut Si on veut Niquer une nana Qui fait de la politique Genre Je sais pas moi par exemple Comment elle s'appelle L'autre là Ah la blonde là Elisabeth Elisabeth Kikou Alors Alors C'est Kaira C'est Kaira Oui Kaira Elisabeth Kikou Alors c'est bon Kaira Tu peux partir Et Grossring avec Tous les deux Tu peux partir Allez viens avec moi Viens Tu rentres chez toi Et c'est bon Voilà alors Je t'aide un peu Je t'aide un peu Parce que t'as du mal Fais gaffe Fais gaffe Donc On a plus Kaira On a Grossring Non plus On va demander Sa saucisson à laïc Bah écoute Moi franchement Je dis que non Ça dépend Mais franchement Je dis que non D'accord Je vois Bien ce que tu veux dire Citrouille Ouais moi je me suis jamais Fait de meuf Alors je suis pas Non mais doit-on voter Pour avoir une copine Ou un copain Si tu veux Dans l'ensemble Bah moi j'ai plein de copines Non mais Putain mais T'es bouchée ou quoi Toi ce soir Non pourquoi T'as mangé quoi là T'as mangé Du poulet Du poulet enragé On dirait Non il était pas enragé Bah dis donc On le dirait Parce que je crois Je crois que tu comprends pas Ce que je veux dire Peut-être les champignons Ils vont pas être frais alors Ouais d'accord Gérard il y a Turpentine Sur IRC Qui te demande Si tu as voté Pour trouver Sandy Personnellement Non je l'ai Il a voté nul ouais Attends je l'ai voté Par pochette surprise Dans IP Magazine Ça va lui faire plaisir C'est pas un truc De homo ça ? Non non C'est un magazine Comme ça Donc Qui c'est qui nous reste Cascouille Oui bah moi J'ai très bien entendu Ta question Mais je la comprends Pas très bien quoi Alors doit-on J'ai compris J'ai très bien compris Doit-on voter Pour avoir Une copine Ou un copain Bah je comprends pas Le rapport là Bah doit-on voter Par exemple Si tu veux voter Pour qui Tu peux voter Si tu veux Tu peux voter Pour retrouver une copine T'as le droit Bah logiquement Quand tu votes C'est pour Pour élire quelqu'un Bah oui Bah dans Dans la politique Y'a bien des nanas Qui font de la politique Donc si tu veux Être copine avec elle Faut bien que tu votes Pour elle voyons Ah ouais mais faut avoir Des business Quoi qui c'est Qui dit n'importe quoi Qui c'est qui vient de dire N'importe quoi Je crois que c'est X Oh X Eh toi la grosse Déboue espèce de filiasse là Eh ça va toi là-bas Elle a dit Calme ta joie toi Eh tu vas te calmer Ta joie là ou quoi là Eh toi la grosse Déboue espèce de filiasse là Oh ça suffit là Pile d'art Ou sinon je t'en vois Je sais pas ce quoi là Euh bah Bah X Eh toi la grosse Déboue espèce de filiasse là Ils sont trop Non mais attends Je crois que ce soir Ils ont fumé la moquette Ou ils ont fumé Ils ont bouffé Je sais pas quoi Y'a pas de moquette à fun Merde Ouais alors Donc on accueille Téton Et on accueille aussi Bulldog Mystère Oui bonsoir Bulldog Mystère Bonsoir Gérard Bonsoir tout le monde C'est ce qu'il m'a donné Comme nom Gérard Me regarde pas comme ça Alors lui tu peux Tu peux lui dire Qu'il prenne un autre nom Non mais je restais Je restais dans l'anonymat Qu'est-ce que c'est encore Ce travlot là Eh bah écoute Je vote Eh c'est pas un débat Sur les travlots C'est un débat sur la politique Je vote aussi bien que toi Ouais bah moi je tombe Donc Mystère Bulldog Bulldog Mystère Ouais si je veux Les fréquences là S'il vous plaît 96.10 Pour qui ? Pour Bulldog Mystère Ouais 96.10 96.10 ? Oui Et Téton ? Bah moi j'appelle Delil Fréquences ? J'ai pas encore 96.8 J'ai pas encore de Téton moi 96.8 Ok Et alors X ? Ouais bah je pense Qu'il faudrait Oh tu mettais en la musique là Non non mais c'est pas moi Non non mais il y a J'ai de la musique là Oh une collègue Moi j'ai rien Là tu sais rien moi Bon X ? Non je pense qu'on devrait Créer des écoles Pour voter Pour essayer d'avoir Une copine ou quoi Ah fil d'art T'arrêtes avec cette Cette chanson là Parce que ça me prend Ça me prend la tête C'est la fête C'est la fête Ouais ouais bah c'est bon On l'a fait assez hier la fête Ça c'est la fête Euh Téton ? Oui bah si tu voudrais Répéter la question Parce que j'étais au standard Il a dit qu'il la répétait pas Alors doit Ça commence à bien faire Faudrait peut-être écouter Quand je leur parle Quand je leur parle Ils peuvent pas t'entendre Gérard Donc euh Gérard il y a une bonne question De Toons sur l'IRC Est-ce qu'il est normal Que tout le monde Aie le droit de voter ? Bah ça dépend des âges En principe Tu as le droit de voter Qu'à partir de 18 ans Mais donc Si t'as moins de 18 ans Tu n'as pas le droit de voter Et on est mille sur l'IRC ça y est Ah ça y est On a atteint les mille hein Ouais On a atteint les mille quand même Il est normal 20h20 J'avais dit avant 1h30 C'est bien Continuez Moi Gérard en tant que Travlo J'estime que tout le monde A le droit de voter Non mais attends Pour l'instant je demande à Téton Je demande pas au Bulldog Tu m'as toujours pas répété la question Alors doit-on voter pour Pour choisir une copine Ou un copain ? Doit-on voter pour choisir Un copain ou une copine ? Voilà Euh ouais peut-être Pourquoi pas ouais Ouais Ouais mais c'est pas mal Là ta réponse Ah qu'est-ce que t'en penses ? Ouais bah elle est nulle à chiquer Bah ouais Missère Bulldog missère là Comme la question Attends si t'es pas contente Tu raccroches Et tu vas faire dodo Écoute Moi je vote Mais c'est pas pour trouver une copine Parce que je suis hermaphrodite Donc Pas d'insulte Pardon Bon et les autres derrière Vous le laissez parler On vous a laissé parler Alors vous le laissez parler Un petit peu de respect quand même Je suis différent de vous Mais je suis quand même J'estime T'as le droit de t'exprimer Bah oui T'inquiète pas Merci Sildar De rien Tu connais ce problème en plus Ouais non mais vas-y Accouche là On va pas Bah oui bah je te dis Moi j'ai pas besoin de voter Pour Pour trouver un copain D'accord Même en boîte Même en boîte De toute manière Tu peux te trouver facilement Des copains ou des copines J'ai vaguement entendu Sur l'antenne C'est pas le terme du débat Non mais je peux répondre Que j'ai vaguement entendu Ce soir Qu'il y en a une Elle savait pas du tout Ce qu'elle voulait faire Avec le mec Qu'elle a rencontré Vendredi à la loco Donc c'est pas grave Oui Rigaud Oui il y a Le Chiant sur IRC Qui te demande Si on peut voter Dans tous les pays Euh Très bonne question Je vais y réfléchir Je vous donnerai les réponses Tout à l'heure Ok Alors La septième Peut-on faire de la politique Pour être une star On va demander ça A Bulldog Mystère Apparemment Tu m'aimes bien Ouais bah Tu vas parler Comme c'est toi Le dernier arrivé Donc tu parles un peu Euh Alors peut-on faire de la politique Pour être une star Ouais Bah oui Bah tu vois bien Qu'on a parlé De l'habit à Clinton Assez souvent Que maintenant Je pense qu'il peut faire Un film de boule Sans problème L'habit à Clinton Est connu Du monde entier Bah ouais Non mais Sur internet Ouais bah ça Je sais pas Sur internet Si c'est vraiment vrai Écoute J'ai cliqué dessus Hier Toute l'après-midi Je peux te dire Que sa bite Est sur le net Si si c'est vrai Ouais je sais Il paraît qu'ils veulent Qu'ils font des photos dessus Euh Tétons Bah moi je suis d'accord Avec ce que tu dis Gérard Bah mais C'est à dire Bah c'est à dire Que je suis d'accord Non mais C'est pas la peine de dire Que t'es d'accord avec moi Mais tu précises Ta réponse Bah je pense Exactement comme toi Alors C'est à dire Bah c'est à dire Que oui Je pense que oui Ouais effectivement Vu les circonstances Ouais je pense Euh X Bah écoute Une collègue Oh Bouledogue Missaire Je suis pas du tout Un collègue à toi T'inquiète pas Hé Bouledogue Missaire Tu t'as mis un petit peu en veilleuse T'es jalouse parce que j'ai une vie Tu t'as mis en veilleuse S'il te plaît merci Bon tu peux me la répéter Parce qu'elle arrête pas de parler Et j'entends rien Alors peut-on faire de la politique Pour être une star Non je pense pas Qu'on peut faire de la politique Pour être une star Parce que toi t'es déjà une star Non mais attends J'ai pas T'as pourtant pas fait de politique N'importe quoi Qui c'est qui dit n'importe quoi ? Bah non Bah pourquoi tu dis n'importe quoi ? Il est vrai ce qu'il dit N'importe quoi Hé celle qui est pas contente Alors tu rentres chez toi Et tu t'écrases d'accord ? T'as des meilleures réponses toi ? Euh casse couille Non tu m'as pas répondu Connerie à la radio Casse couille Moi tout d'abord un truc Que je comprends pas là Euh Bouledogue Missaire et X C'est pas la même personne ? Non Non c'est ma soeur Ouais c'est ta soeur À Balbeur entre les cuisses D'un catcheur Ouais Ouais Alors casse couille Alors moi je pense que ça Ça devrait te donner des idées d'ailleurs Vu que tu fais quand même Aujourd'hui même ce soir 20 millions d'auditeurs Je pense que tu devrais Te mettre dans la politique Non non attends Pour l'instant On a pas fait 20 millions d'auditeurs La semaine dernière On a fait 15 millions d'auditeurs Là ce soir La semaine dernière On avait plus de On avait 1000 connectés À je sais plus quelle heure Et là il y a À 1h20 On était déjà 1000 connectés Sur le net Et là On atteint bientôt les 1200 Et là on va arriver On va arriver sur 1200 connectés D'ici deux heures Ouais mais Ouais mais Gérard Oui Imagine T'es 15 millions là 15 millions d'auditeurs Imagine ils votaient pour toi Et tu serais président quand même Ouais mais ça on verra Bah faudrait que Tu vois faudrait que tu réfléchisses À ce genre d'hypothèse Non faut pas que tu réfléchisses Non mais Celle qui dit Faut pas que je réfléchisse Je fais ce que je veux T'es méchant Comme ça vous êtes en train de feu Euh Citrouille Oui Donc toi Moi je dis qu'il faut être une star Pour faire la politique Et pas le contraire Non mais doit-on Elle est mal tournée ta question Moi je dis si Depardieu Fait de la politique T'es sûr il est élu Moi je dis qu'il faut être une star Pour faire la politique Bon ok C'est ton opinion Mais moi personnellement Non je te dis tout de suite Bah tu la partages pas C'est pas tant pis pour toi Mais moi je te dis que c'est ça Ok Tu verras on en reparlera On en reparlera Ceux-ci sont à l'aïe Bah écoute moi je suis pas tellement d'accord Parce que je dis que C'est pas parce qu'on fait de la politique Qu'on est une star hein Hum Parce que Il y a bien des gens Qui font de la politique Et puis On s'en fout totalement On en entend jamais parler C'est quoi ça ? Allo ? Ceux-ci sont à l'aïe Je crois que c'est X Qui a raccroché Non non je suis là moi Merde Merde, merde, merde, merde, merde Euh Bulldog mystère Tu dis encore une seule fois Un gros mot Tu gerbes Merde Alors tu dégages Bonne nuit Non c'est pas moi C'est pas moi Non c'est pas toi C'est ma soeur Ceux-ci sont à l'aïe Donc t'as peut-être pas fini Si si j'ai fini Gérard C'est bon ? Gérard Oui Il y a Serval qui me demande Enfin qui te demande S'il y a être une star politique S'il vous plaît S'il y a être une star politique Dans les Mercedes C'est dangereux Non Je vois le rapport Qui veut en venir Mais Moi je vois pas Je le vois pas Gérard Si si Non mais moi je vois Hey Bulldog mystère Là tu t'écrases Ça commence à bien faire Bulldog mystère Quoi il y a histoire d'un pont Dans la Non non mais c'est bon Je vois ce qu'il voulait dire Donc c'est pour ça Que j'y réponds pas Alors Ok Voilà Donc Huitième question Les extras Les extras Les extra-intérêts Doivent-ils faire De la politique On va demander ça Attends Manu Oui oui oui A la place de X Qui est raccroché On ne sait pas pourquoi On accueille Jean-Pitivier Ben X C'est plus là Non elle est raccrochée Alors donc Ben faudra la rappeler Jean-Pitivier On n'a plus de ligne Pour l'instant Gérard Jean-Pitivier Tu me refais Une fiche Je veux qu'on rappelle Ma sœur Oh toi Bulldog mystère Tout à l'heure C'est toi Qui m'a rappelé Tu m'as dégagé Oui ça va me faire Une ligne de libre Oui bonsoir Jean-Pitivier Oui bonsoir Bonsoir Alors je travaille Je suis Maire, sénateur, député De l'Aviron J'écoute vos débats Depuis tout à l'heure Sur la politique Je trouve ça très sympathique Mais je trouve que ça n'a aucun intérêt Pourquoi je m'explique Vous vous allez parler D'ailleurs je vous ai entendu dire Là où sont les extra-intérêts Je pense que vous prenez Un petit peu à la légère La politique Et qu'on est en train De dénaturer un petit peu Tout ce milieu de la politique Qui est certes Magouille et peau de vin Mais c'est en même temps Grâce à la politique Qu'on peut faire avancer le pays Et je vous entends tout à l'heure Poser des questions du genre Est-ce qu'on peut être amoureux En faisant de la politique C'est bidon C'est admissible Bon alors Bulldog Milster Tu dégages pour deux Bon ce coup là Allez hop Ça t'apprendra à couper La parole Jean Je pense que vous abusez un petit peu Que vous avez tendance Un petit peu à prendre à la légère Ça sert à rien de faire Un débat sur la politique Si c'est pour l'aborder D'une manière rigolote À ce moment-là Vous faites un débat Sur les strings Ou sur la sodomie Mais ne venez pas nous emmerder On va faire des débats Sur la politique Oui la sodomie La sodomie ça c'est bien ça Bon de toute manière C'est pas moi qui ai décidé De faire ce débat là Dans ces cas-là Vous appellerez Non mais dans ces cas-là Monsieur vous assumez Vos responsabilités Bon alors dans ces cas-là Si c'est pour réagir comme ça C'est pas la peine d'appeler Ok ? Non mais écoutez J'essaie de le dire Vous êtes en train de vous énerver On dirait Vous êtes vous-même Un homme politique Et je trouve ça très décevant De votre part Non mais moi je fais les débats Qu'on me dit de faire Parce que vous avez l'air Aussi débile qu'un homme politique Ouais bah alors si ça vous plaît pas Bah dans ces cas-là Vous restez chez vous Moi ça me plaît Mais c'est sûr que je voterai pas Pour votre gueule Bah tant mieux Bah moi non plus Et moi je voulais dire Que j'avais la Gérardo Zablak Bon allez Celui-là tu me le vire là Le bulldog mystère J'avais pas entendu Hop terminé pour lui Monsieur Gérard Est-ce que vous avez voté Dernièrement pour les cantonales ? Ça ça vous regarde pas Voilà D'accord ? Est-ce que toi t'as déjà été voté ? C'est une bonne question ça On parle de politique Bah de toute manière J'ai déjà été voté C'est tout Pourquoi vous êtes de droite RPR ? Non non mais ça c'est pas Ça je vous dirai pas mon parti Parce qu'on parlait tout à l'heure De Jean-Marie Guigou Un homme politique Que j'aime beaucoup Demeurent Et on parle pas suffisamment D'hommes politiques Des politiques Je veux dire Qu'est-ce que vous pensez de la gauche ? Le RPR de gauche ? Non non mais ça On en a rien à foutre J'ai dit que Je voulais pas parler des partis Alors vous n'en avez rien à foutre Et dès qu'il faut parler de politique Vous quand même parlez des partis Non non mais moi je parle pas des partis C'est tout Si ça vous plaît pas Vous raccrochez Vous restez chez vous C'est tout Non mais c'est débile De parler de politique Avec des extraterrestres Bon c'est bon Ça y est ça y est On a compris Merci Vous êtes cons alors A la place de Bulldog Mystère On accueille Pitbull secret Bonsoir Gérard vite fait Sur IRC Y'a ce nul Qui te demande Si tu connaîtrais Un président idéal Non Alors donc On va poser la Il répond à aucune question Il est con comme ça Bon alors Jean-Petit Viens vous dégagez Ça vous apprendra De m'insulter Hop Tu peux le dire Attendez monsieur Insulter Allez allez C'est bon c'est bon C'est bon c'est bon Insulter ça fait partie Du milieu politique C'est normal C'est ça c'est ça Allez restez chez vous On insulte Allez allez C'est bon c'est bon C'est bon Allez allez Alors les extraterrestres Doivent-ils perdre la politique On se retrouve tout de suite après Vous allez y réfléchir Et on va s'écouter Gilles Duboudin Avec mes Des baskets Pour manger Du pâté Et on se retrouve tout de suite après On va saluer à tout le monde Voilà je voulais saluer Tous les gens de l'IRC A savoir On est quand même 1350,2 Mais ça je suis perso On s'en fout Ce qui est pas mal Je voulais saluer Est-ce que je les cite tous Non non non C'est bon C'est bon Salut le pop Avant de Jérin Avant de reprendre On accueille Jean Cotivier Bonsoir Bonsoir Bonsoir Ça s'appelle un blanc Merci Gérard Bonsoir Donc On va parler On va Je vais vous donner Un petit sondage là quand même Parce que Rapidement Allo Rapidement Oui Donc qu'est-ce qu'il nous fait lui là ? Gère-le Gère-le là Parce que ça va pas Donc tout le monde A la question Tout le monde Peut-il faire de la politique Allo Bon tu te tais s'il te plaît Merci A la question Tout le monde Peut-il faire de la politique Alors il y a 50% des gens Qui ont répondu Qu'il faut obligatoirement Posséder Allo Et moi j'entends plus Gérard Il y a un problème au standard ou quoi ? Allo Allo Qu'est-ce qu'il se passe là Mani ? Bah non il y a rien Il y a rien Allo Et là c'est bon ? Allo Vous nous entendez là ? Bah non On t'entend plus Gérard mais Vous m'entendez ? Vous m'entendez ? Allo Allo Allo J'entends Mani ouais Gérard parle un coup Allo Allo On n'entend plus Gérard Ouais mais qu'est-ce que tu me fais toi là ? Fildar Fildar merde C'est toi qui fais des conneries encore Mais non j'ai bien fait Allo On t'entend pas Gérard Assuré RC ils t'entendent plus non plus Qu'est-ce qu'il se passe là Fildar ? Qu'est-ce que t'es en train de déconner là ? J'ai vu une claque J'attends Fildar Le bouton là Fildar Lequel ? Celui-là le petit blanc là Désenclenche-le Voilà Voilà j'ai bon Voilà on t'entend là Voilà Fildar T'arrêtes de faire tes conneries oui Allo moi j'entends rien Allo Wow Ah ça a coupé encore Allo Fildar merde Bon voilà la question Tout le monde peut-il faire de la politique Allo Oh t'arrêtes avec tes allos toi Monsieur vous m'entendez ? Est-ce que vous nous entendez là ? Gérard est-ce que tu... Allo Oh Fildar merde Mais j'ai rien fait Mais lui de droite Mais y'a rien là Y'a rien Y'a rien Y'a rien Y'a rien là Mais c'est encore coupé là Mais Fildar je suis fait là Fildar il se fout de toi Mais lui de droite Gérard on n'entend plus ta grosse gamelle Oh c'est quoi ce bordel là ? Mais non mais moi je continue pas comme ça Allo les auditeurs Les auditeurs vous m'entendez ? Attends je vais laisser ce bouton là Et là ça va mieux ? Mais non n'insistez pas On n'entend pas on vous dit Et là ? Et là vous vous entendez ? Non on n'entend pas N'insistez pas On n'entend pas On n'entend pas le gros con là Le gros con il t'emmerde toi pédé Mais d'où ce con là ? Je comprends pas Manu c'est du standard C'est pas possible Ça vient pas de moi Ça vient pas de moi Ah ça y est on entend Allo ? Ouais Ouais bah c'est bon allo Ah bah voilà Ah oui voilà c'est bon Donc y'a la question Tout le monde peut-il perdre la politique ? Celui qui m'a traité de gros con Je te préviens que je t'emmerde Toi gros pédé d'accord ? Oh Gérard Pas de vulgarité Je te préviens Tu restes poli ok ? C'est bon c'est bon Gérard On y va Alors donc 50% des gens ont répondu Qu'il faut obligatoirement procéder Oh putain Manu C'est bien tu me sacs Tu me sacs celui de Allo C'est pas de sa faute C'est nous Non non mais il va pas me percher Toute la soirée avec Allo allo allo Qu'est-ce qu'il se passe Manu ? On entend plus Gérard là Bon qu'est-ce que t'as fait Gérard ? Tout marchait bien là T'arrêtes de déconner ou quoi ? Ouais bah je vous entends moi aussi Mais vous entendez plus Gérard Bah je sais pas ce qu'il se passe Il est parti là ? Gérard t'es là ? Non non il est là mais Je pense que le débat il va s'arrêter N'invitez pas on vous entend pas Non mais attends il déconne depuis tout à l'heure lui Y'a rien là Ah mais ouais mais c'est normal Faut appuyer là t'appuyez là Voilà c'est bon vous m'entendez là ? Ouais impeccable Ohlala t'es vraiment un cave Impeccable Gérard Bah je le savais pas Ouais non mais tu vas le savoir Tout à l'heure tu vas te prendre une gaufre Ils ont changé Bah au chocolat Alors tout le monde doit-il Tout le monde peut-il perdre de la politique Sur la question Donc y'a 50% des gens qui ont répondu Qu'il faut obligatoirement posséder Un chromosome de 2 mois Je vois pas ce que ça veut Si c'est plus ça va mieux Quand t'as un chromosome de 2 mois T'as moins de chance 40% des gens ont répondu Que oui puisque c'est Gérard Et le président des cons Bah moi je l'emmerde celui qui a répondu ça Ça c'est des sondages de merde Non Olivier Delapro Et voilà ça m'étonne pas lui 10% des gens qui ont répondu merde Ah bah c'est bien Si c'est Olivier Delapro Qui s'amuse à faire des sondages comme ça Le deuxième il passe le carré au cul C'est quoi ce chromosome ? J'en sais rien Sinon sur l'ERC Y'a un seigneur qui dit Que son chien fait de la politique Sa queue part en sucette vers la droite Et il a son permis d'érection Alors saucisson à laïc t'es toujours là ? Oui oui je suis toujours là Casse couille Pas de problème je suis là Toujours là Cétrouille Ouais je suis là Téton Bah ouais Pic boule Pic bulle Pic bulle secret Pic bulle Bonsoir Bonsoir et... Jean Jean Cotivier Jean Cotivier Oui Oh tu te réveilles hein ? Allo Oh tu te réveilles ? Allo Oui Allo On entend une barbe Merde C'est trop facile Non fais gaffe Parce que tu as retourné chez toi tout à l'heure Je le sens hein Dans ta voiture caca Ouais Dans sa merde Bon la question Gérard Alors donc Vous avez Bon s'il vous plaît vous vous calmez Merci Pour les écologistes dans 15 jours Pour les élections Je voudrais parler du pétard à Guigou Bon toi ta gueule D'accord Donc vous avez On a dit qu'on allait changer la question Sans écologie Extraterrestre Et qu'on allait parler du président de l'Allemagne Ouais donc qui s'appelle ? Gérald Krafner Voilà Donc vous en avez entendu Gérald Roswell Putain tu vas fermer ta gueule toi Tu vas la fermer ta gueule quand je parle ? C'est quoi l'histoire de l'Allemagne ? C'est quoi ? J'ai pas compris Non c'est un pays qui était Qui était machiné par un autre chancelier Et maintenant ça a changé Non un chandelier Un chandelier Un chancelier Non on me confirme c'est chandelier Non c'est chanc... Chancelier vous savez rien du tout Alors taisez-vous Chancouille C'est les bougies là Mais vous allez vous chalmer ou quoi là ? Gérald ça se trouve où l'Allemagne ? L'Allemagne ça se trouve du côté de Du Pakistan un peu ou pas ? Non du côté de Strasbourg par là Vers Strasbourg de toute manière Il y a une frontière qui se trouve à la limite de Strasbourg Dans la banlieue ? Il y a une île pas loin non ? Non il n'y a pas d'île Parce que toi tu viens d'une île toi ? Bah ouais Tahiti excuse-moi Ouais tu viens d'une île des cacahuètes Donc alors je pense que vous en avez tout le temps Je voulais savoir juste l'Allemagne C'est bien là où il y avait eu Marguerite Non c'est pas du tout là Ça c'est en Angleterre On va peut-être pas confondre l'Angleterre et l'Allemagne Bon alors c'est quoi la question ? Donc vous en avez entendu parler Donc qu'est-ce que vous pensez qu'il va faire lui maintenant ? Ben Edmund Cole je pense que c'est bien qu'il soit passé au pouvoir Non mais il a été viré Il a été remplacé à Brouty Vous êtes peut-être au courant de choses que nous on ne sait pas Moi en tout cas je sais que Moi en tout cas je sais qu'Edmund Cole Qui est en contact avec Marguerite Thatcher Non mais écoute Écoute bien ce qu'on vient de te dire Qui n'est plus Président de l'Allemagne Je fais de la politique alors En Allemagne moi je sais de quoi je parle Parce que moi j'ai vécu en Allemagne La capitale à Bucarest pendant pas mal d'années Non mais Bucarest c'est pas la capitale de l'Allemagne à Brouty C'est la préfecture C'est la préfecture C'est en Suisse Bucarest Ah ouais c'est une ville jumelée Je pense qu'on va pas s'éterniser trop Sur cette question là Justement si il y a un mec qui veut répondre à cette question C'est ça qu'a merde Il dit qu'il va faire comme Clinton Il va sauter sa secrétaire C'est bien il fait ce qu'il veut Il fait ce qu'il veut de son cul Juste c'est dire que l'Allemagne c'est quand même la plus belle ville fleurie C'est tout Avec Strasbourg derrière Le secrétaire allemand démangeait de la bière Et puis il buvait des patates Tu te calmes un petit peu toi J'étais trop bonne Mais ta question c'est quoi ? Ma question je vais vous la poser Parce que c'était pas du tout prévu dans ce truc là Il y a eu une question avant sur IRC Une question de Turpentine qui te demande Gérard Où est-ce que tu es ? Est-ce qu'on peut apprendre à voter ? Où on peut apprendre à voter ? Il n'y a pas besoin d'apprendre Non pas du tout Alors toi tu as commencé par fermer ton clapet Parce que tu as viré toi Tu as déjà voté Gérard ? Tu commences à être vulgaire encore toi Une dédiffune à Elisabeth Guigou Ça nous écoute Alors toi Jean Gauthier ou Pitbull Vous allez vous calmer parce que vous allez rejerber Je pense que je vous avais dit de ne pas revenir Vous êtes revenu sous d'autres noms Non à peine Parce que pas On va peut-être revenir Gérard il a décidé de s'arrêter de voter Le jour au Krasniki il a décidé d'arrêter la politique Et ta connerie elle a arrêté de voter quand toi ? Gérard c'est Krasniki Avec 15 000 millions d'auditeurs 15 000 millions 1 million 15 000 millions d'auditeurs Reprends la question Tu te calmes Je vais les calmer mais reprends 15 000 millions d'auditeurs Reprends le débat Gérard Reprends la question on y va Alors donc il y a une question que je voulais poser Parce que tout le monde... 15 000 millions d'auditeurs 15 000 millions Putain je t'entends plus Gérard encore Putain merde Manu s'il te plaît Vous l'entendez Gérard là ? Fildar qu'est-ce que tu t'amuses là ? Je cherche un disque Fildar ! Quoi ? Max il t'a dit d'aider alors tu remets les auditeurs Regarde tu lui mets des bâtons dans les crouilles Vous avez entendu parler des grèves en ce moment Je pense que vous en avez tous ras le bol Ah bon il y a des grèves ? Oui il y a des grèves Il y a des grèves encore Où ça ? Bah la grève du coeur Non il n'y a pas des grèves Ça c'est la grève à Brouty Les routiers sont en grève Non non vous avez... Les routiers c'est des feignants Oh ta gueule toi Là comme ça t'es tranquille toi Au moins je vais t'avoir répondu tout de suite toi Il y a la grève des... Il n'y a que de kilomètres qui parcourent Il y a la grève des porcs là Des trucs de porcs en ce moment Ouais il y a ça Il y a aussi... Demain il y a la RATP je crois Demain... Ah s'il vous plaît vous fermez vos gueules quand je parle Merci C'est la grève des porcs C'est-à-dire que ta femme elle est en grève en ce moment Tu sais qu'il vient de dire ça Ça te rend le kilo de Sandy là Alors tu me viens... Je ne sais pas qui c'est Tu gères Manu parce que là on n'en a pas le bol Je sais je sais je vais essayer C'est impossible de faire un débat potable Non non non moi je n'ai rien fait moi Non non c'est pas... On ne peut pas faire un débat potable Donc vous avez entendu ? Moi je me casse, salut Salut Au revoir C'est un con Svab C'est qui ? C'est Jean Cotivier Il n'est pas content comme ça il... Gérard Pour revenir sur le débat Sur IRC on me demande si un bulletin blanc est réutilisable Non Non un bulletin blanc ne peut... Un bulletin blanc de toute manière ne servira à rien Parce que c'est un bulletin qu'il n'y a rien à écrire Non non non C'est simplement une enveloppe blanche qui ne peut pas être réutilisable Au deuxième tour peut-être si Parce que si la personne veut re-voter blanc Re-vote blanc Non non non il ne la garde pas Ils n'ont pas le droit Mais est-ce qu'ils gardent le même... Est-ce qu'ils gardent le même ticket ou... Non non non Bah si on peut réécrire dessus Mais c'est une technique écrécrable Non non mais attendez Moi je trouve ça lamentable C'est bon Non mais moi je peux vous dire une chose Que les papiers une fois qu'ils sont servis Sont détruits ou même brûlés Mais c'est n'importe quoi Non mais attend c'est ce que je parle Mais ils en font du PQ après Mais oui c'est ça Non parce que je suis désolé Parce que les billets ce n'est pas combustible Non non mais attend Si tu parles du prix comme Gainsbourg Qui a brûlé 500 balles en direct à la télé Fais-moi confiance qu'il faut complètement être starbé Il n'y a pas de rapport Donc alors moi je peux vous dire qu'en ce moment Vas-y vas-y Non non vas-y Alors oui bon vite fait Il y a Turpentine Qui te demande si tu as déjà voté par procuration Justement c'est la question On allait en venir On accueille Vaseline A la place de Cotivier Salut Vaseline Salut Vaseline Alors donc On était sur les grèves Vous en avez entendu parler Je pense qu'il y en a pas mal d'entre vous Je crois qu'ils sont encore étudiants je pense J'ai une question de J'ai pété Gérard est-ce que c'est vrai que les électeurs Pour voter doivent glisser leurs enveloppes Dans ton urne à caca Alors là tu peux dire à ce petit con C'est qui C'est Pitbull Non mais il est là Non mais il n'y en a pas qu'un Pitbull en France Non mais je vais dire que celui-là Je l'emmerde sur Minitel d'accord Fildar je t'ai prévenu de ne pas me couper Sur des questions con Minitel Au lieu de te marrer parce que tout à l'heure Je vais me lever et tu vas te foutre une gaufre De toute manière au deuxième débat C'est là ta place Ouais je vais l'arrêter Voilà Tu te trompes Non mais c'est bon c'est bon Tu calmes tes nerfs Manu Mais t'éteins ton micro merci Alors donc je pense que Certains d'entre vous sont encore étudiants Dans tout ce qu'il nous reste Saucisson à l'ail Donc t'es encore étudiante toi Non pas du tout Oui moi je fais des études en sorcellerie Et j'ai pris option en chaudronnerie N'importe quoi Citrouille Non moi je ne suis pas étudiante je ne suis pas une saignante D'accord Teton Ouais moi je suis étudiante Pitbull Moi je suis Alénal Clodo Bon toi tu vas te calmer parce que tout à l'heure tu as viré Hein Tony ? Hein Tony ? De quoi tu parles là genre ? Tony il est parti tout à l'heure Vaseline donc toi ? Bah moi je suis dans la vie rétroactive Non mais est-ce que t'es étudiant ou pas ? Bah non je suis dans la vie rétroactive T'es dans un tube aussi Bah en tube ou en comprimé Non mais je pense que Pour ceux qui sont étudiants je pense que pour vous les grèves Vous en avez ras le bol aussi vous Vous avez bien que vous vous attendez Je pense que vous voulez bien que ça se termine Et qu'ils trouvent un moyen Pour que ça cesse Le nombre d'élèves dans les classes Ah bah tu m'étonnes on a envie de bosser nous En plus ils peuvent même pas aller faire la grève Parce qu'il y a les grèves des métros Non non non Si demain ? Non Je te jure que si Moi je te dis que non Alors là tu te mets bien profond dans le cul toi Mais attends C'est pas imaginable Donc je peux vous dire que ça ça faudrait que ça cesse Et que l'autre là celui qui s'occupe de ça Des étudiants Face à ce qu'il a promis Parce que sa confiance A devenir chiant pour vous Vous pouvez pas suivre vos études Voilà bravo On va pas s'éterniser sur cette question C'est un petit point Que je voulais faire parce que Maxime en a parlé Donc on a fait le tour à peu près de la question Donc maintenant je vais vous demander Est-ce qu'il y en a parmi vous Qui ont déjà voté par correspondance ? Ouais moi Non mais parmi les auditeurs Ah non moi j'étais abonné à J'aime lire c'est tout Non mais attends toi tu vas répondre correctement A la question parce que sinon tu vas gerber Très vite maintenant Parce que je veux pas me laisser emmerder Dans les douze dernières minutes qui nous restent du débat Je vous préviens d'entrer Alors Vaseline Par correspondance Tu peux préciser un petit peu Qu'est-ce que tu veux dire C'est-à-dire que t'envoies ton bulletin de vote à de la famille Non non non par correspondance Par exemple si tu pars en vacances au moment des élections Tu peux demander à quelqu'un de ta famille De voter pour toi en laissant ta carte D'identité c'est ça la correspondance Si j'étais moins con il serait pas des élections Pendant les vacances Non mais regarde quand il y a des ponts Par exemple comme au mois de mai Comme ça s'est passé là Au mois de mai abruti Non mais on parle pas du pont de l'Allemagne C'était pas au mois de mai c'était au mois d'août en plus C'est quoi une procuration ? Une procuration c'est que tu donnes l'autorisation par exemple A quelqu'un de ta famille pour aller voter pour toi Et comment on fait pour donner l'autorisation ? Comment ? Et comment on fait pour donner l'autorisation ? Au commissariat de police Le plus proche de chez toi Ou tu vas même à la mairie et tu leur demandes Tu dis voilà je suis pas là Pendant le temps des élections Est-ce que je peux donner l'autorisation à mes parents ? Donc en fait si toi tu vas pas voter Je peux me pointer à ta mairie et dire voilà Je viens de la part de Gérard et je vais voter pour lui Non mais à une condition que moi je signe Parce qu'il faut que la personne intéressée signe aussi Mais comment peux-tu être sûr Que la personne va voter ce que tu veux ? Ah non mais ça c'est sûr ça là-dessus Je suis d'accord avec toi Mais ça c'est C'est pour voir avec quelqu'un de ta famille Tu peux très bien dire à la personne de ta famille Tu mets rien dans l'enveloppe, basta Ouais mais je crois que c'était personnel Que t'avais le droit de le dire à personne Ouais mais si tu veux voter blanc, tu votes blanc c'est tout Gérard il fait caca partout mais il vote écologiste Ouais moi je t'emmerde toi J'ai vraiment pique-bulle Oui Régo Sur IRC il y a Pingouin qui te demande s'il faut un isoloir Pour voter par correspondance Non pas spécialement Est-ce qu'il faut un abonnement ? Non plus Est-ce qu'on peut voter dans le noir ? En principe quand tu tires le rideau Bien sûr tu peux voter dans le noir Comment ça ? Normalement t'es une voiture, moi je regarde l'émission tous les soirs Non t'es toi toi Et il y a Le Chien aussi qui te demande si on peut continuer à voter Quand le vote est fini Non je pense pas, une fois que c'est terminé à partir de 8h A partir de 20h ils peuvent plus voter Mais alors pourquoi les résultats ils arrivent après 8h ? Parce que le temps Il y a le dépouillement déjà à 8h S'il vous plaît vous me laissez parler Je réponds à Régo Donc déjà à 8h ils commencent déjà à faire un sondage BBVA pour te dire à peu près Le nombre Si ça s'appelle comme ça Il y a le BBVB aussi Non BBVA et IFOPS Donc ils commencent déjà à te donner Un point de vue sur le nombre De personnes qui ont voté, le nombre d'abstentions Une estimation Une estimation voilà Quand tu parles de dépouillage ça veut dire qu'en fait Ils se bourrent la gueule juste avant quoi Non mais attends c'est qui là qui parle ? C'est qui qui vient de poser là ? C'était ton ? Ouais c'est moi ouais Non mais je crois que la question sur le dépouillage Il y a longtemps qu'elle a été posée Je vois pas ce que tu vas ramener Attends je réponds Je suis en train de te poser une question qui a tout à fait rapport avec ce que tu viens de dire Parce qu'on dit que les résultats sont après 8h Et pendant ce temps là ils font le dépouillage Le dépouillage c'est quoi ? C'est se bourrer la gueule avant ? Mais non c'est de retirer les papiers qui sont dans les enveloppes Voilà tu vois que t'es capable de répondre quand tu veux Il y a longtemps que j'avais répondu déjà Fallait te réveiller un peu A ce sujet Gérard il y a Turpentine qui me demande si c'est des facteurs qui dépouillent les enveloppes Non c'est des gens comme nous Des toxicomanes ? Non non ça peut être des gens comme nous Pas comme toi quand même Moi si je l'ai déjà fait Il l'a fait ? Ah oui il s'est déjà dépouillé Tu l'as fait ? Oui oui ça y est Ça m'étonne pas que la droite est passée Doit-on parler de politique en cours ? Ça va concerner ceux qui font Attends doit-on parler de quoi ? De politique en cours En cours voilà En cours de quoi ? En cours quand t'es à l'école Quand tu cours ? En cours Quand on fait du jogage ? Non non non C'est toi qui me parle en même temps Je croyais que c'était l'autre dindon là-bas Donc saucisson à l'ail Bah écoute moi ça fait longtemps que je suis plus à l'école Parle un peu plus fort Je dis ça fait longtemps que je suis plus allée à l'école Donc je peux pas vraiment répondre Mais je pense que de toute façon c'est interdit Ouais bah de toute manière Tu peux enculer à partir du moment où tu parles de politique Non mais t'en as beaucoup qui essayent d'en parler Oui qui essayent mais enfin ils se font vite Vite casser en général Ouais mais dans les lycées je pense que S'ils sont pas pronds ils peuvent en discuter entre eux Ah ouais non mais là y'a pas de problème c'est sûr Ok Casse-couille Ouais non en cours non on parle pas de politique A part des fois d'Elisabeth Guigou mais sinon Bon alors casse-couille là tu te casses Comme ça tu me les casseras plus Allez c'est terminé pour lui Ça a commencé à me les gonfler Qu'on arrête pas de parler d'elle Alors ce coup là terminé C'est trouille Ouais alors moi une fois y'a un prof qu'on a parlé Il a pas le droit J'ai porté plainte Et le mec il est radié d'éducation nationale Non mais attends parce que souvent Ah attendez s'il vous plaît Je vais répondre quand même à cette rouille Souvent t'as des profs qui en parlent pour dire à peu près Ce qu'ils en pensent C'est sûr que normalement ils ont pas le droit Ils ont pas le droit C'est pour essayer de machiner un peu l'atmosphère Mais je pense que c'est sûr Ils ont pas le droit Mais oui je sais Donc t'es ton ? Non ils ont pas le droit d'en parler c'est interdit par la loi D'accord Pic Bull Bah moi j'échangerais jamais un cours de politique Contre le cours de bio La reproduction des bonus colantartiques Ouais c'est ça t'as raison toi Gérard excuse moi à la place de caisse Couille on accueille Pé de Burne Bonsoir Gérard bonsoir à tous Salut Pé de Burne Vas-y Gérard je crois que tu peux parler maintenant Donc je te répète la question Comme t'étais au standard Donc doit-on parler de De politique en cours Donc Donc Pour toi Bah je pense que les élèves quand ils sont en cours Ils ont d'autres trucs à faire Bah oui mais est-ce qu'on a le droit d'en parler Tu me diras surtout qu'en ce moment il y a certains problèmes On en a discuté tout à l'heure Sur les histoires des grèves qui commencent à nous prendre la tête On en a ras le bol Pour les étudiants ils en ont marre aussi C'est des feignants Mais ouais mais c'est des feignants Non c'est pas des feignants C'est les profs qui sont des feignants Parce qu'ils veulent pas Comme les routiers c'est des feignants Oh ta gueule toi C'est des alcooliques Bon alors toi ces trucs tu dégages C'est pas moi Non mais t'es pas visé qu'on dit alcoolique Non mais t'es ton pour toi Oui Donc toi Oh vous vous réveillez là Vous répondez aux questions Mais je t'entends pas Gérard Alors peut-on Doit-on parler de politique en cours Allo C'est interdit C'est quoi Ah ça c'est Fildar ça Ah là là Mais lui une droite Tu me fais pas gueule ou quoi toi là Bah j'ai rien fait Non tu me coupes les auditeurs Ça va pas non Bah oui j'ai guéri dans la gueule Donc t'es ton Ouais bah je t'ai répondu il y a deux minutes Gérard Donc Pic Bull Bah moi aussi Ok Vaseline Ouais bah doit-on en parler en cours Moi je dis si les filles elles se mettent des doigts dans les cours Ça le fait pas Bon d'accord je vois pas du tout le rapport Bah doit-on tu dis doit-on Bah si elles se touchent c'est pas bien Bon alors les sondages Avant de faire la conclusion Je vais donner les Un petit sondage rapide ouais Les deux derniers sondages qu'on a Donc à la question La politique est-elle bien faite en France ? Il y a 60% des gens qui disent qu'elle est bonne Avec des dessins énormes Ça je vois pas Ça c'est bien signé Olivier de la production Pour me sortir des conneries comme ça 40% des gens qui disent Que la maquette on voit des traces de colle Donc ça je vois pas du tout le rapport Avec la politique Olivier de la pro Après question À la question Votez-vous Non non t'as rien fait Tu me prends pour un con toi Tu me prends pour un con non ? Termine Gérard termine Donc à la question Votez-vous souvent Donc il y a 40% des gens Qui disent qu'ils votent Qu'ils rotaient seulement après avoir bu du coca Donc je vois pas du tout C'est bien lui 36% des gens qui ont dit Qu'ils votaient plus de 6 fois par jour Donc je vois pas du tout le rapport non plus Et 30% des gens Qui ont dit Qu'ils ne votaient jamais Car Gérard ne s'est jamais présenté Aux élections Et je me présenterai jamais Donc pour terminer Une petite question Vite fait sur IRC Il y a Orki qui te demande Qu'est-ce qu'on gagne Quand notre bulletin est tiré au sort En fait Non mais attends Je vois pas du tout Son bulletin au sort C'est dans les jeux Donc ça je m'en fous C'est pas dans la politique Une Twingo Ouais une Twingo Une Kangoo tiens Ouais pourquoi pas s'il veut Donc on va perdre la conclusion du débat Ouais Donc il est 57 Donc saucisson à la gueule Bah écoute Laisse passer les autres Après je répondrai Bon ok Vaseline Ouais bah je sais pas Je voulais te féliciter Pour la manière dont t'as présenté La dualité indicible De la phénoménologie intrinsèque du problème Et puis au revoir pour ton débat Bon allez ça commence à devenir l'autre Ta conclusion c'était ça pour me dire ? C'était bidon Bon alors pig bull Pig bull une fois Ouais ouais c'est moi Alors Donc moi je fais toujours ma dédicienne A Elisabeth Guigou si tu m'écoutes Alors allez hop c'est bien Tu peux rentrer chez toi Maintenant t'as la conclusion à la fête Voilà Alors Vaseline Vaseline C'est la fête Déjà fait Déjà fait ? Non parce que j'ai pas Si si Non t'es ton parton Bah moi je dirais que la politique C'est comme toi Gérard C'est catastrophique quand on en parle Eh bah c'est bien Si c'est pour ça que t'as voulu participer au débat C'est bien Bah ouais je fais ce que je veux Je suis assez grande Bah de toute manière tu fais ce que tu veux Moi aussi je fais ce que je veux Bah moi aussi je fais ce que je veux Je suis majeur à vacciner J'ai pas besoin de Pourquoi tu me parles d'abord ? Bon bah alors je te demande la conclusion Donc tu réponds et c'est tout Eh bah donc la conclusion C'est la politique C'est comme toi C'est catastrophique quand on en parle Point barre Eh bah alors ok bah salut Allez bonne nuit Citrouille Ouais Moi je dis Des poivrons Hein ? Je dis les politiciens C'est comme les routiers C'est des poivrons D'accord Eh bah alors c'est sympa C'est bien parce qu'il y en a beaucoup Qui ont entendu ce que tu viens de dire Petite Burne Pet Burne Pet Burne Ouais Moi je dois dire que T'as souvent trouvé Qu'il y avait des questions Qui avaient pas de rapport Mais faut être indulgent Avec ceux qui disent des trucs Qui ont pas de rapport Parce que toi tes questions Bon elles ont pas trop de rapport Entre elles aussi donc Non mais attends Mais dans ces cas là T'avais qu'à écouter dès le début T'aurais peut-être pu Comprendre plus Ouais bah dans ces cas là T'avais qu'à comprendre Les questions qu'on a posées Parce que je trouve que On a fait quand même Largement le tour De tout ce qui se passe En France Ouais mais t'as quand même parlé Des extraterrestres Bon Non non non Justement ça a pas été fait Je suis désolé La question elle a pas été faite On a passé sur le truc Ouais mais tu l'as cité quand même Ouais non non Mais on l'a pas faite Donc nuance Faut pas confondre Entre citer et l'avoir fait Ok ? Euh oui Pour finir Hugo alors Oui donc une conclusion Hier c'est de Daube Avant de voter Mettez une capote C'est important Contre le cancer du sida Surtout si vous êtes Homosexuel Non mais ça c'est C'est même pas une question Que je vais faire Dans les maladies Tout à l'heure Après les deux disques Saut s'ils sont à l'aïe Pour terminer la conclusion Bah écoute J'ai pas trouvé Que c'était un débat Très intéressant Parce que vu les conneries Que tout le monde faisait C'était pas génial Ouais non mais d'accord Bah c'est ça De toute manière Je m'en doutais un peu De toute manière Que ça allait foirer Un tout petit peu Non c'était bien C'était bien Ouais ouais Non non mais quand j'ai Un abruti de câble Qui me fait que des conneries Je vais faire la vraie Un fil d'art Donc moi je peux vous dire Une chose Que c'est dommage Qu'on a pas trop de temps Pour continuer Parce qu'on a C'est vrai que t'as tellement De trucs à dire sur la politique On est tellement pris Par le temps Donc moi je peux vous dire Une chose C'est qu'à l'heure actuelle C'est vrai Ce qui est bien en même temps Excuse-moi c'est Max C'est que tu disais au début Que tu voulais pas faire un débat Et en même temps Ta conclusion c'est dommage Qu'on ait pas eu assez de temps D'en parler plus longtemps Tu voudrais parler plus longtemps D'un débat que tu ne veux pas faire C'est bien ? Non parce qu'il y a Certaines questions Qu'on aurait pu plus approfondir C'est à dire sur les grèves Il devrait y avoir la suite Dans les mois à venir Ouais bah ça On verra On attendra le sondage Du premier On attend de voir Si Bill Clinton est encore Au président Soit écrase Donc la conclusion C'est vrai qu'en ce moment On a parlé pas mal de grèves Et ça c'est vrai Que c'est chiant pour tout le monde Les grèves Ce qui se passe à l'heure actuelle Donc maintenant C'est au gouvernement De s'en prendre après Ils font ce qu'ils veulent Ils nous emmerdent pas Avec leur connerie Et ils font ce qu'ils peuvent Ok voilà Donc on va se quitter Et on va se quitter pour Pour mieux se retrouver tout à l'heure Pour mieux se retrouver tout à l'heure Sur les maladies Donc on va se quitter Avec Marie-Josée Perrec Avec les cafards C'est meilleur chez soi Et vous pouvez nous appeler Toujours au 0803 0803 5 000 Toujours 36 15 Camphone Radio Rubrique directe Et l'IRCD On était combien ? On est actuellement 1428,6 C'est bien On continue On continue Allez à tout de suite == Le débat sur les maladies == === Contexte === === Les personnages === === Transcription === C'était bien ça, c'est quoi ? C'était Marie-Josée Perrecq avec les capards C'est Meilleur Chez Soi Donc vous pouvez toujours nous appeler au 0803 08 5000 08 175 000 Toujours 36 15 4 Fun Radio rubrique directe et sur l'internet de Rigaud qui y est toujours Donc www.frfunradio je sais plus quoi Slash Fun Radio Ouais Slash Fun Radio on était 1400 je sais plus combien On a dépassé, on arrive à 1584,1 Oh là là là, bravo Gérard Combien j'ai cru mal entendre là ? 1584,1 Ah d'accord, c'est pas mal Alors on va accueillir Potchambe, 21 ans de Montluçon On écoute Fun Radio sur 92.1 Bonsoir Bonsoir Jamal, 24 ans de Brest, 103.2 Ouais salut Girose, 20 ans Cirose Cirose, du foie 20 ans Paris, 101.9 Bonsoir Bonsoir, je sens pas bon je sais pas ce que c'est encore Ouais non C'est quand le matin tu t'habilles et que tu sors directement Quoi ? Hé, à 2h du matin il est pas encore couché lui là ? Il a quel âge ? 12 ans Hé non non Salut, salut Non non, ça va pas non ? Bah quoi ? Ouais bah j'ai le droit quand même, j'ai pas le cours, je suis en vacances C'est les vacances Gérard C'est les vacances on peut On écoute Fun Radio Gap 90.7 On écoute, t'as pas de problème S'il te plaît, 22 ans de Dieppe, on écoute Fun Radio 100.1 S'il te plaît, 22 ans de Dieppe, on écoute Fun Radio 100.1 S'il te plaît, 22 ans de Dieppe, on écoute Fun Radio 100.1 Salut Gérard Salut, répondez bien quand je parle hein, surtout Dites pas bonsoir quand on vous parle hein, surtout Bonsoir Gérard Oui, bonsoir de 17 ans, on écoute Fun Radio J'habite en Belgique A Bourbon ? A Bourbon A Bourbon ? A Bourlon A Bourlon, pas Bourbon, à Brouty Oh là là, fil d'art Oh là là Et on écoute Fun Radio Belgique 100.9, c'est ça ? Euh ouais, c'est ça Ok Ok Donc alors, le débat c'est sur la maladie Les maladies Les maladies Les petites maladies Donc je pense qu'on en avait déjà discuté la semaine dernière qu'on allait faire ce débat-là Alors, on va poser la question La grippe s'attrape-t-elle sur le menton ? On va demander ça Tiens ben, ah oui De Bourlon Tu peux remettre s'il te plaît ? Oh non ouais, ça va pas commencer hein J'ai pas entendu, j'ai pas entendu la fin de ta putain de question Ma putain de question Attends, merde, si t'es pas contente ma petite Tu vas perdre ton nom Tu vas aller au standard, je vous ai dit Je vais pas me prendre la tête là-dessus Alors, la grippe s'attrape-t-elle sur le menton ? Bah moi je trouve que la grippe s'attrape partout J'en ai attrapé sur la plante de pied, ça me fait prendre du mal D'accord Ok, s'il te plaît, va, s'il te plaît Bah t'es poli, c'est bon Donc toi ? Dans le métro D'accord, je pense que vous êtes vachement bien réveillé pour le deuxième débat, ça fait peur Merci pour le Larsen De rien Dans le TGV aussi Alors, je sens pas bon Bah moi, j'ai pas de J'ai pas de grave maladie Mais bon, je suis jeune, mais je suis déjà très précise quand même Mais la grippe, je sais pas La grippe s'attrape-t-elle sur le menton ? C'est la question, c'est pas une autre question que je te pose Bah moi, les maladies, on m'a pas encore pu Expliquer encore, moi j'ai rien eu au menton Non mais attends En 12 ans, t'as pas eu de maladie, tu me prends pour un con là ? Ouais, j'ai eu la coqueluche, mais c'est tout quoi Ouais, la coqueluche T'as pas un petit problème de voix là ? Si, si, un petit peu, ouais Il a pas encore muté, c'est pour ça Bah ouais, à 12 ans, dis donc, ça fait bien Cirrhose, du foie Bah écoute, je pense que la La grippe peut s'attraper aussi sur le menton Parce que tu peux avoir aussi des boutons sur le menton Ouais, mais de toute manière, la grippe Elle peut s'attraper sur les La grippe peut s'attraper partout Sur les parties les plus sensibles du codor C'est-à-dire celles du milieu Et à 12 ans, tu L'achète, l'achète Ouais, bah, oh sinon Hey, gamin, là, tu vas te calmer Parce que tout à l'heure, tu es allé voir Fildar au standard Excuse-moi, papa Ouais, bah, si tu veux pas choper la grippe sur le menton Tu mets une écharpe, simplement Ouais, d'accord Bah, on dirait que ça vous fait peur Quand je fais le débat sur la maladie Parce que vous êtes à moitié endormi là-dessus Ouais, on a peur de la personne Ils sont reculés un peu de la radio Pour essayer de choper un truc Attends, qu'est-ce que tu viens de dire ? Je sens pas bon, là Je sens pas bon, qu'est-ce que tu viens de dire ? On a pas envie d'avoir une femme Parce que je suis, voilà Ouais, t'es puceau, mais attends Ça va venir Ça va venir, Gérard, il l'a encore Rigo Oui ? Ouais, je suis malade Salut Non, non, mais Alors, faut demander à Gérard Si on peut soigner l'acné juvénile Et si on a des chances un jour De trouver un vaccin pour éradiquer cette maladie Non, mais ça, le problème sur l'acné On va en parler aussi Est-ce qu'il y a plus de chances Ça, c'est Orki qui me demande Enfin, c'est Orki qui me demande Qui te demande Est-ce qu'il y a plus de chances D'attraper des maladies Dans les chiottes de la loco ? Ah, non Non, c'est Gérard Excuse-moi, j'avais pas lu C'est Gérard, il y traîne, ouais Tu sais qui vient de dire ça ? C'est le petit, mais il s'est pas au courant Non, non, non, ça, c'est une bonne nana Donc, pot de chambre ? Ouais, bah moi, je pense que En fait, ça s'attrape par les cheveux Hein ? Par les cheveux, peut-être Par ? Les cheveux Par les cheveux ? Les tifs Ouais, bah, je vois pas du tout le rapport Les poils, les poils Si tu mets pas de bonnet, ça va pas après Moi, Gérard Moi, Gérard Je voulais dire que J'avais aussi attrapé un truc, là Chez le Tobib C'est la Gérardite aiguë Et je peux forniquer qu'avec des boudins Ouais, ouais, je sens pas bon Je sens pas bon Tu vois ce que tu as fait ? Tu vas aller faire dodo Au revoir Sois tolérant Allez, hop Bonne nuit pour lui Gérard Oui ? J'aimerais te poser une question Est-ce que tu crois qu'on peut attraper Les maladies par téléphone ? Euh, non, pas spécialement Pourquoi ? Heureusement Bah, je pense que Je sais pas On sait jamais, hein Bon, ok Gérard Oui ? Sur Minitel, il y a Comment il s'appelle ? Non, je vais pas donner le nom Il nous dit que t'as une tête d'hémorroïde Non, bah, lui C'est quoi un hémorroïde ? C'est beau un hémorroïde Bah, je sais pas C'est pour ça que je demande à Gérard Des hémorroïdes Ça s'attrape Aux couilles Non, non, non C'est dans le derrière Ouais, bah, ouais Ça y est À force de mettre du coton-tige Non, mais c'est que Souvent, Gérard Il a des couilles très proches du derrière C'est peut-être pour ça Alors, là, j'en connais J'en connais Qui parle de coton-tige Si tu continues Je vais pas chercher midi à 14h Je vais en saquer un au hasard Ouais, c'est pas mal Dans ton cul Alors, oui, tu dégages Allez Vous avez dit un dit ? Non, non, c'est personne Je sens pas bon Et je viens de le virer Non, non, mais lui Tu le vires complètement Non, mais ça y est, ça y est Putain, attends, Gérard Je dis rien, tu veux me virer ? Non, non, non, ça y est, ça y est On a trouvé qui c'était C'est bon Oui, Rigaud, il y avait une question Non, qui a passé trop vite Oui, oui, il y en a plein Il y a Viandox qui te demande Si on a des séquelles Après une maladie mortelle Non, ben, je vois pas Parce que si t'es mort Tu peux pas avoir de séquelles Bravo C'est la première fois Donc, la diarrhée s'attrape-t-elle ? Par contre, moi, je peux vous dire une chose Que la grippe Je l'ai jamais attrapée Sous le menton, en principe Tu l'as attrapée où ? Tu l'as attrapée où ? Je l'ai attrapée dans la gorge C'est tout À force de gueuler Elle vient de sortir Souvent, t'as plus de voix Non, mais gorge profonde ou pas ? Ben, ça dépend Des maladies Je pense que t'es plutôt gorge profonde Ouais, gorge profonde à fond Bon, alors, la diarrhée Elle est bien pleine aussi, quand même Tu sais qui parle, là, comme ça ? Ah, c'est pas drôle C'est oui Oui, oui Oui, alors ? Tu disais ? Ah, non, mais attends C'est pas moi, j'ai rien dit S'il te plaît, tu disais ? Moi, je disais rien Ouais, c'est bizarre Il y a une question, là Sur un sondage, encore Je me demande si c'est pas encore Des petites conneries, ça Non, celui-là, il est officiel C'est moi qui l'ai récupéré Hop Hop Bon, excuse-moi, Gérard Je sens pas bon On a Viagra 27 ans De Boulogne Alors, Viagra, bonsoir Bonsoir Il est au travail Ouais Salut, Viagra Donc, moi, je voudrais témoigner En expérience Non, mais tu retires Tu retires tes lois de thé d'arrêt Donc, je te donnerai mieux Non, mais je suis enrhumé C'est sur les maladies Donc, ça tombe très bien Donc, moi, ce que j'ai fait C'est que, bon, là Pauline Viagra Vient d'être introduite en France Non, non, mais attends Attends, pour l'instant Tu vois, c'est pas Je suis pas encore arrivé A cette question-là Alors, tu commences pas A jouer les gros caïds Ok, pas de problème Ok Alors, maintenant Je vais faire le petit sondage Là, qu'on m'a donné Ouais Donc, alors Pour ou contre les maladies Ça, de toute manière J'avais jamais J'en ai marre qu'on mette Des pour ou contre Lors des Sur les Non, mais c'est important De demander ça aux auditeurs Ouais, alors, il y a 10% Qui ont répondu Que la question était trop compliquée Ben, c'est pas mal Ça, c'est 60% des gens ont répondu Mais on ne On ne s'en souvient plus Et 30% des gens Qui sont contre les maladies De l'éléphant qui pue Alors, ça Fille d'or, tu vois Ton sondage comme ça Tu peux te carrer dans le cul Et te torcher avec C'est pas moi On a fait un sondage Sur les auditeurs Comme là, tu vois Ça, c'est La dernière question Avez-vous déjà vu Des maladies Et si oui, pourquoi Tu vois Là, je ne vais même pas y répondre Ça va aller vite fait Voilà Bonjour Allez Alors, l'autre question La diarrhée s'attrape-t-elle En été Ou en hiver En hiver ou en été On va demander à Viagra Ben, c'est plus en été Parce qu'il fait chaud Donc, on transpire Ouais Donc, parce qu'en fait En hiver Le caca a tendance A se solidifier Ouais Donc, ça fait Qu'on chie des pavés de merde D'accord Euh, oui Pour toi Ben, moi, c'est ni en hiver Ni en été C'est en automne D'accord Ben, c'est bien Ben, pourquoi C'est la saison des feuilles Ah ouais, d'accord C'est pas mal Tu vois quoi Ah non, non, mais c'est pas mal Ouais, c'est bien S'il te plaît Ouais, moi, j'ai la diarrhée Quand j'ai la chiasse La chiasse, c'est quoi ? La chiasse, c'est la diarrhée Gérard, est-ce que tu pourrais S'il y a une différence Expliquer Ben, c'est pareil C'est de l'eau Quand t'as la chiasse Tu fais de l'eau Et quand t'as la diarrhée Tu fais de l'eau C'est-à-dire Quand t'as la diarrhée Tu chies de l'eau Donc, c'est pareil Tu peux la récupérer Pour la boire, alors ? Non, non, je pense pas Parce que c'est dégueulasse Pourquoi c'est sans bulle ? Elle recycle tout, l'écologie Euh, c'est plus le thème Sur la politique, bien grave Ok Euh, cirrhose Du foie Alors, tu peux avoir La diarrhée à tout moment Et à toute saison J'en ai rien à foutre Mais alors ? Donc, à toute saison Tu peux avoir la diarrhée À n'importe quel moment Voilà, ça c'est C'est une bonne question Ce que je voulais dire Mais c'est bien On me retire les parles de On me retire les verres du nez J'avale Les verres du cul, c'est la diarrhée Ta gueule, toi J'avale Ouais, ben écoute Plutôt, plutôt en hiver Parce que moi, dans la fois Que j'ai eu la diarrhée J'avais chopé une hépatite G Et j'avais eu Et en plein hiver Et j'avais une chiasse Mais l'enfermé D'accord Un moustache Euh Non mais euh C'est bien Que j'ai ton micro Quand on Là, c'est pareil Alors, euh Donc, euh Peau de chambre Ouais, ben moi Je pense que c'est en automne Puisque je l'ai eu Il y a deux jours Ben, euh Pour un Non, tu l'as eu Il y a deux jours ? Ouais Ah ben d'accord Donc, euh Tu pourrais préciser ? Prouve-le La chiasse, c'est tout Qu'est-ce que tu veux que je fasse ? Prouve-le, pétaco Oh, ça y est Vous vous calmez là-derrière S'il vous plaît Merci Moi, je peux vous dire Que c'est rare Quand j'ai la diarrhée Et ça m'arrive pratiquement jamais Ouais, non Toi, c'est toi la diarrhée Heureusement Parce que ça sera Un sacré bordel chez toi Alors, euh T'es tout petit Tu en dis encore Un mot de travers Je me lève Et je ne mets plus ma main Dans ta gueule C'est pas ta directe Que de la gueule Ok Alors Doit-on Troisième question Doit-on trouver un vaccin Contre le Viagra ? On va demander ça Peau de chambre Ouais, je pense, ouais Ben, allô ? Oh, là, là, là, là, là J'arrête d'être marreuse Sans colline, toi Gérard, ton débat Assieds-toi Fais ton débat Alors, euh Peau de chambre Ouais, j'ai dit ouais Dans quelle phase ? Ben, je dis oui Que je suis d'accord, quoi Mais putain Mais tu vas laisser ton micro Éteint Tu vas faire ton boulot Comme il faut Au standard Ou tu finis le truc de classe Regarde des connards Là, qui font le bordel Tu gères rien Fille d'art C'est une honte Putain, mais Mais quoi Ah, putain Putain, t'es péché, Fille d'art Ouais, ça y est, ça y est La droite, elle est partie, ça y est Ouais, j'ai un coup de tête Un coup de tête Putain, Fille d'art Tu as bossé un peu, là Parce que ça devient Rangaine avec toi, hein Bon, Gérard, en attendant On a une question sur l'IRC Que je trouve intéressante De Blue Falcon Comment attrape-t-on le Viagra ? Alors, ça, le Viagra C'est... Je peux témoigner Moi, je pensais Qu'on l'attrapait au lasso Moi, je peux témoigner C'est Viagra Donc, moi, ce que j'ai fait J'ai un peu décollé, quoi Parce que le Viagra Est venu en France C'est que j'ai pris Dix pilules d'un coup Donc, maintenant À chaque instant, je bande Non, mais ça Ça, de toute manière Normalement, la pilule La pilule contre le Viagra La pilule Le truc du Viagra Normalement, c'est prescrit Par les médecins Et c'est bien précisé Combien qu'il faut en prendre C'est pas un médecin agréé Donc, il va prescrire Attends, ce qui dit n'importe quoi Tu commences à me casser les couilles, toi Non, mais c'est bon On m'a fait un vaccin Une picousse dans la bite Et maintenant, c'est encore pire Parce que c'était de l'adrénaline Bon, ça y est Toi, t'as rappelé Le tour de la question Gérard, c'est quoi le Viagra ? Le Viagra, c'est une pilule Pour ceux qui sont impuissants Bah, c'est quoi, impuissants ? C'est pas une maladie ? Impuissants ? Non, non, les impuissants C'est quelqu'un comme Gérard Ouais, mais attends Moi, je t'emmerde, toi, connard Hé, Gérard Oui ? Est-ce que tu prends du Viagra, toi ? Non Et toi, quoi ? Non, il a déjà du gras à la maison Il a déjà du gras à la maison Il n'y a pas ta gueule, toi Je ne vais pas te louper, tout à l'heure Si tu veux saccager le boulot Tu le saccages Et tu dégages Ça va chier pour toi, Filder Alors, on va demander à... Oui ? Salut, ça va ? Ouais, et toi ? Tranquille ? Oui Allô ? Oui Allô ? Gérard, Gérard, Gérard Tu as géré les auditeurs Ta mère ! Oh, la vache, Fildar, il est par terre Il vient de se prendre un coup de feuille Un coup de savate Tu viens de me faire gosser, ou quoi ? Tu vas se faire gosser Les gladiateurs Bon, on va reprendre le thème Ouais Allez T'as l'état de ton micro ? Arrête, c'est bon Gérard, assieds-toi, vas-y Pousse le bout, merde Il tape Fildar avec des bouts de cadeaux Vous ne pourriez plus rien gagner dans la journée Gérard Arrête, Filipe Mais tout à l'heure, je l'ai éclaté pour de bon Je vais laisser le débat terminé Je vais laisser Rousseau maintenant Je crois qu'on avait prévenu Toi, ça avait prévenu avant Je me perds un boulot comme Hippo Alors tu vas chercher le connard Mais vite fait Salut, ça va ? Et alors, troisième question, on va demander à Potchambe Arrête de me barrer, fais le boulot, putain On va demander à Potchambe Doit-on trouver un vaccin contre le Viagra ? Mais je t'ai dit oui tout à l'heure Tu m'as posé la question en premier Ouais, d'accord Déjà, moi, je voulais te dire que le Viagra, ça m'intéresse Parce que je suis atteint de mini-zobisme Et je voudrais savoir Parce qu'apparemment, Viagra, là, il est dans le business Et je voulais savoir S'il pouvait justement me businesser Me dealer 2-3 Viagra, là, parce que je suis en galère Bah écoute, y'a pas de problème, j'ai acheté une cartouche de vin Non, non, non, mais J'avais le Viagra, là Vous verrez ça pendant la pause publicitaire Moi, j'aimerais bien me faire mettre une cartouche En parlant de ça Gérard, ton débat T'as dit que t'avais des auditeurs ou c'était quoi ? Comment ça me fait chier, là ? Salut, ça va ? Bon, envoie un disque Non, non, on peut pas, on peut pas tout de suite Non, non, c'est moi, t'envoie On va reprendre dans le calme Sur l'IRC, y'a au moins 200 personnes qui sont parties Suite au débordement de Fildar Merci Fildar Et on est plus que 2 sur Minitel aussi Un broutille, va Combien c'est ? Plus que 2 ? Eh ben c'est bien Tu gères un peu, Phil Si Rose Donc toi, pour toi Je pense qu'on peut pas trouver de vaccin Contre le Viagra Parce que le Viagra, c'est un médicament Le Viagra, c'est un médicament Tu le prends si t'es impuissant Je vois pas quel est le rapport avec la question D'avoir un vaccin Contre l'obésité, y'a un truc ou pas ? Contre la connerie Je sens que tout à l'heure Y'en a qui vont se prendre des claques Ça va leur faire tout drôle Et là, t'arrêtes aussi, Manu T'arrêtes avec l'appareil Parce que ça me gonfle, c'est toi C'est toi, je viens de te voir appuyer sur les touches J'ai fait ça, regarde, j'ai appuyé là Ça fait quoi ? Y'a pas de son Donc, s'il te plaît Ne me marre pas, toi, parce que tout à l'heure Ça va te faire tout drôle, toi S'il te plaît S'il te plaît, tu réponds Oui, je réponds Moi, je dis que le Viagra, c'est bien, mais il faut pas en abuser D'accord, et oui ? Bah, écoute, Fildar vient juste me remettre à l'antenne à l'instant, donc j'ai pas entendu la question Bon, alors, Fildar C'est pas vrai, je te jure, j'ai pas touché aux touches Fildar, tu vas dégager pour de bon, toi Mais non, mais oui, réponds, c'est faux T'es plus dans l'équipe Tu vires, tu peux rester chez toi Non, mais Fildar, arrête de nous couper Oui, donc, toi Si tu pourrais me répéter la question, je suis désolée, mais c'est Fildar Doit-on trouver un vaccin contre le Viagra ? Euh, non, je pense pas, non, parce qu'au contraire je pense que le Viagra ne peut qu'améliorer les cas désespérés, quoi D'accord, donc Viagra, t'avais répondu, toi Non, mais répondez pas Non, non, il est là, il est là Ouais, je suis là, je suis là Donc, pour toi ? Bah, ouais, tout à fait D'accord, alors, quatrième question Je pense qu'on va arrêter avant 3h à cause de Fildar Non, c'est vachement intéressant Tu vas pas arrêter à cause de Fildar Non, non, à cause de la merde que t'as foutue, tu vois Maintenant, sur IRC, on était 1400 Maintenant, il n'y a plus personne Bravo, Fildar, de tes conneries On est quand même plus de 1000, ce qui est déjà très bien, Gérard Non, mais tout à l'heure, on était à 1400 S'il n'avait pas déconné, on aurait été à plus de 1600 Là, Gérard, sur le 3615 Fun Radio ça remonte, vu qu'on est quand même à 47 Ouais, bah, d'accord Et Gérard, pour reparler de l'IRC, je lis vite fait Alors, il y a Turpentine qui te demande GG, est-ce que tu es dérangé par tes bourrelets de vieux gras ? Non, bah, ça, c'est je ne vois pas du tout le rapport avec le vaccin contre le vieux gras Donc, avoir la cangrène est-elle une maladie ? C'est quoi la cangrène ? Alors, j'explique tout de suite le truc C'est un ongle qui est incarné Je croyais que Gérard, excuse-moi, je croyais que la réincarnation c'était dans le bouddhisme Non, non, la cangrène, c'est une maladie qui peut être très grave et malheureusement, il y en a beaucoup qui ne sont pas soignés à temps contre ça et ils risquent de perdre un membre de leur famille Non, non, un membre sur eux Si tu as un ongle incarné et que tu ne te fais pas soigner, ça va continuer de s'infecter et tout Donc, à un moment donné, ça va venir sur la main, ça va monter dans le bras et ils seront obligés de te couper le bras Et là, j'ai une personne que j'ai connue T'as vu sa vie ? Non, non, qui avait eu la cangrène Elle n'a pas voulu se faire soigner Oh, s'il vous plaît, vous me laissez parler, merci Elle n'a pas voulu se faire soigner à temps et elle a perdu carrément une jambe Mais bon, ça, c'est une maladie grave On ne va pas en parler Je suis désolé La question, elle est faite comme ça Je la pose et c'est tout Donc, vous allez y réfléchir et on va s'écouter Guy Brouty avec des mots fléchés sur Télé 7 jours Et on se retrouve tout de suite après 2h32, donc vous pouvez toujours nous appeler au 0800 308 0875000 et 0875000 Toujours le 3615, Capone Radio, rubrique directe et toujours l'IRC qui doit revenir normalement Oui, on remonte d'ailleurs, on a redépassé quand ils ont entendu que tu virais Fildar du Standard Ils sont revenus et il y a 1685 personnes Virgule 4 Fildar, je t'ai dit dehors Alors, tu vois ? Attends, attends Tu me retires le casque, je ne t'ai pas demandé de le remplacer pour foutre ta merde non plus Pardon Alors, on récupère pas de chambre Bonsoir Bonsoir Jamal, rebonsoir Jamal Doudou Zirose, pardon Bonsoir S'il te plaît Rebonsoir, oui Oui, s'il te plaît Je suis là, mais Manu vient de me rebalancer maintenant Non, c'est pas Manu Excusez-moi, je suis à l'arrière Manu, il m'a mis tout le monde Là, ça doit être Olivier qui doit s'amuser Ah bah c'est Olivier, alors c'est un des deux Viagra, donc, qui est toujours parmi nous Putain, j'ai la gaule Bon bah, tu restes poli, s'il te plaît Donc, alors, la question... La question, vous l'avez compris ? Non Ouais, tranquille, ouais Mais faudrait que tu la répètes, en fait, ouais Alors, avoir la gangrène est-elle une maladie ? Donc, on m'a demandé ça, bah, à Viagra Bah, oui, bah, si tu le dis que c'est une maladie Je pense que c'est une maladie, mais moi, je... Bah, si t'arrives pas à comprendre C'est pas la peine de continuer le débat comme ça, toi C'est sûr, avec une bite dans l'oreille, quand même Allez, hop, s'il vous plaît, là Vous me virez à Viagra, parce que j'aime pas ça Gérard Oui Merci, il y a Davy One Oui Qui me dit, alors... Est-ce qu'il y a un bébé qui naît Quand le monsieur met la petite gangrène dans la madame ? Bah, en principe, oui, hein Et il me demande aussi combien ça fait en euros Ah, ça, je sais pas Voilà Donc, on va demander à Oui C'est pas une maladie, en fait Non, c'est quoi, alors ? Bah, c'est toi qui la provoque Une grippe, ça s'attrape, tu... Olivier, s'il te plaît Je peux parler, Gérard ? Oui Ouais, donc, je disais Une grippe, ça s'attrape dans la rue, tu vois Tu la sens pas venir Tandis que la gangrène, c'est... C'est quand tu te soignes pas que tu l'attrapes C'est ce que j'ai dit C'est ce que j'ai précisé Bien avant le disque Eh ben, c'est pour ça que je t'ai dit Que c'est pas une maladie Bah, si, ça peut être une maladie, quand même C'est pas une maladie, quand même Ça s'attrape pas D'accord Non, mais j'ai pas dit que ça... J'ai pas dit que ça s'attrapait Nuance, j'ai demandé Est-ce qu'avoir la gangrène est-elle une maladie ? J'ai pas dit si ça s'attrapait Eh ben, moi, je te dis non Parce qu'une maladie, ça s'attrape Et la gangrène, ça s'attrape pas D'accord Ok, alors, s'il te plaît Oui Oui Oui, ben, je t'écoute Oui C'est une maladie, oui Ah ben, c'est tout ce que tu me réponds ? Bah oui, c'est une maladie Bah oui Bon, alors, Olivier Tu retournes Allez, retourne Non, mais je me suis trompé Non, mais retourne d'où tu viens Non, je voulais juste te dire Parce qu'en fait, à la place de Viagra On accueille Syphilis Voilà Bonjour Comment ? Je suis Jean-Louis Connard Salut, Connard Salut, Connard Salut, Jean-Louis Je suis pas rien Connard Donc, on va préciser Jean-Louis Parce que... Ouais, non, mais non T'as pas compris Non, Jean-Louis Syphilis Mais c'est Syphilis son prénom Mais il se l'appelait Connard Je suis grec Alors, si... Ben, tiens, Jean-Louis Jean-Louis, la gangrène est une maladie Ok Ça, c'est sûr Non, mais tu peux préciser ? Précise Jean-Louis, Jean-Louis Oh, tu précises ? Oui, c'est Jean-Louis Salut, Connard Connard, voilà Bon, allez, gros Tous les deux, là Vous me gérez, là Parce qu'il comprend rien, là Je comprend rien C'est Jean-Louis ou Syphilis ? Non, c'est Jean-Louis Syphilis C'est mon prénom et mon nom Mais tu peux l'appeler Connard Non, c'est Syphilis Il t'a dit que oui, c'était une maladie Donc c'est bon, il t'a répondu Il est où, Michel ? Syrose Oui, ben moi, je suis pas d'accord Avec lui qui disait que la gangrène C'est pas une maladie Moi, je pense que c'est une maladie Parce que si tu peux la raper, la gangrène... Bon, elle est celle qui dit n'importe quoi Tu as commencé par te la fermer Ouais, tu la vires, tu la vires Mais par contre, si tu attrapes la gangrène Est-ce qu'on peut te couper tous les membres ? N'importe quoi J'ai le droit de répondre aussi J'ai le droit de l'exprimer Sur Yancy, on me demande Quelle est la personne pas intelligente Qui essaye de s'exprimer ? Je suis sûre, ça doit être toi C'est peut-être une bouffonne, je sais pas Bon, alors, tu me gères... Attends, attends, je vire la bouffonne Non, non, tu la laisses, la bouffonne Non, mais j'ai viré la bouffonne Syrose, donc, toi T'as répondu ? Oui, c'est une maladie, la gangrène Mais tais-toi J'ai le droit de répondre, hein Non, Gérard, passe aux autres auditeurs, c'est bon Je crois que tu vas me prendre un peu Sur les nanas, là Parce que ça commence à me prendre la tête, là Javal Ouais, mais on parlait de petites graines Moi, je suis donneur, et quand tu veux... De la gangrène, abruti ! Quand tu veux, les petites graines dans ta turbine à chocolat Bon, alors, Javal, tu dégages, bonne nuit Allez, hop, celui-là, on l'envoie se coucher Il aura tout compris Il est où, Michel ? Pot de chambre Oui, qui c'est qui veut réagir ? Pot de chambre Ouais, je t'appellerai, c'est le lit, tout ça, je connais Donc, ouais, non, ça le saoule, cette question Non, alors, elle te saoule ? Tu veux continuer le débat, ou pas ? Ouais, c'est pour ça, il vaut mieux qu'on passe à une autre question, c'est mieux Non, mais attends, je fais ce que je veux Non, elle est nulle, la question Bon, Olivier, si t'es pas content, tu retournes de l'autre côté Non, mais non, je suis pas content, mais elle est nulle Moi, je fais ce que je veux, d'accord ? Il a raison, Olivier Moi, je fais ce que je veux Bon, alors, pot de chambre, tu dégages, bonne nuit pour toi Allez, hop Il n'y a plus personne Non, non, mais vous m'avez récupéré d'autres personnes, vite fait Sur les 24 lignes, on y va Alors, les piqûres d'insectes... D'insectes ? Les piqûres d'insectes, rendent-ils malades ? On va demander ça à Jean-Louis Les piqûres d'insectes ? Oui Bah oui, bah oui, tout à fait Moi, j'ai eu... Enfin, il y a un moustique qui m'a piqué Et cet enculé, il avait le sida D'accord Donc, je l'ai attrapé aussi D'accord, Jean-Louis, pour l'instant, j'ai pas envie de parler de sida de ça, ce soir Ah ouais, tu parles de la gangrène, mais tu parles pas de sida Non, mais je parle pas... J'ai pas envie d'en parler, c'est tout Parce que c'est un truc qui est trop long à gérer Ah, ok, excuse-moi Ok Je suis désolé Euh, oui, pour toi Euh, ouais, moi, une fois, je me suis fait piquer sur le clito Depuis ce temps-là, ça n'a pas dégonflé, donc ça craint un peu, quoi Ouais, mais dans ce cas-là, t'as qu'à aller voir un médecin Bah ouais, mais tu sais, le médecin, tu sais ce qu'il va... En fait, non, je vais t'expliquer, Gérard Moi, j'ai un antidote, c'est ma salive Une fois, je me suis fait bronzer, donc j'étais à poil Et, si tu veux, il y a une abeille qui est rentrée à l'intérieur Donc j'ai été voir le gynéco, le gynéco m'a dit Bah écoute, il n'y a qu'une solution Vous savez, mademoiselle, il n'y a qu'une solution Donc en fait, au bout de son temps, il a mis du miel Et puis il est passé à l'intérieur, tu vois, il me l'a rentré Comme ça, il s'est dit, l'abeille va sortir Va s'accrocher sur le miel Et puis en fait, donc il se retire Et puis l'abeille n'était pas là Et puis en fait, il continue, et puis il fait des va-et-vient Tu vois, et puis alors là, vraiment carrément, quoi Donc je lui dis, mais qu'est-ce que vous faites ? Ouais, mais ça y est, ça y est, on a compris, on a compris Non, c'est pas fini ! Ouais, mais maintenant, dépêche-toi, parce qu'il y a d'autres personnes Et puis il y a une question IRC Donc à la fin, il me dit, bah, en fait, vu qu'elle ne veut pas venir Vu qu'elle ne veut pas se coller, maintenant, il faut la noyer Bon, ça y est ? Donc sur IRC, il y a Snul qui te demande Est-ce que quand on est malade et qu'un insecte nous pique L'insecte peut-il tomber malade ? Euh, ça, je pense pas, mais... Je t'en dis, ouais Alors toi, je t'emmerde, toi, oui D'accord ? Bah non Voilà, comme on sait que c'est elle qui s'amuse depuis tout à l'heure Bon, j'ai rien, j'ai rien Et la question, alors, tu penses quoi ? Donc, bah, attends, tout le monde n'a pas répondu Non, mais pour l'insecte malade, là, parce que t'as répondu Non, non, mais je pense pas qu'il peut être malade en même temps Ça, j'ai jamais vu un insecte malade comme ça On a qu'une cuvette à la place de... Je sais pas À la place de peau de chambre Salut, Gégé On accueille Chippo à la place de Javal Salut, ça glisse ? Ok Alors, s'il te plaît Ouais Donc, pour toi, la question Les piqûres d'insectes rendent-ils malades ? Bah, moi, ça m'a rendu pas mal malade Il y a une fourmi qui m'a piqué entre les deux seins Et maintenant, j'en ai trois Non, mais attends, c'est des fourmis rouges Ouais, je suis allée en Amazonie intérieure Et... Je me suis fait piquer par une fourmi rouge Bah, maintenant, j'ai dit Bah, toi, il est soutif, quoi Non, mais t'as pas... Tu t'es pas fait vacciner pour aller là-bas ? Pas contre les fourmis rouges, j'ai pas pensé Non, mais il y a... Attendez, s'il vous plaît Il y a quand même des vaccins Il faut quand même se faire vacciner Avant de partir dans certains pays Oui, mais... Lesquels, Gérard ? Non, mais... Il y a plusieurs pays comme... Surène Surène Ouais, bah, c'est ça Alors, fermez vos gueules Si le prochain que j'entends dire Surène, il va dégager Je vais pas chercher qui c'est maintenant Non, mais la personne qui a trois seins Comment elle s'appelle ? Elle s'appelle... S'il te plaît, merci pour l'arsène Parce que même avec trois ou quatre seins Moi, je m'en fiche Bon, ok, bah, c'est bon Alors, vous allez vous calmer S'il vous plaît, merci Elle a parlé qu'elle veut vite Oh ! Regonne, la cuvette est suppos, là J'ai rien dit Ouais, on a rien dit Bon, bah, vous vous calmez, merci Je veux être calme Si rose Oui, je pense que les insectes, ils peuvent... Elle est encore là, elle est... Hé, je vous en avoue, je vous emmerde, elle est OK Non, mais j'ai le droit d'exprimer, quand même Non, t'as pas le droit Non, t'as pas le droit Tu me vires tous les autres Et tu gardes si rose Et tu me prends d'autres personnes Je reprends pas le... Je continue pas le débat comme ça C'est bon, c'est bon, j'ai viré si rose Et j'ai gardé tous les autres C'est bon, c'est bon, c'est bon Je vire si rose Bonjour, c'est l'inverse Ah, merde Gérard Voilà Alors, tu vires tous les autres Et je continue pas Je t'en fais une fiche, Gérard Alors, donc, ouais Pourquoi tu connais pas la mouche testée Qui donne la maladie du sommeil ? C'est qui ? Bah, c'est... C'est si rose Ouais Non, mais attends Mais moi, je te parle Les piqûres d'insectes Rendent-ils malades ? C'est ça, la question C'est pas... Justement, il y a la mouche testée Qui donne la maladie du sommeil Ah, d'accord Parce que t'as déjà testé une mouche Toi, qui rendait malade Bah, oui, j'ai... On fait une épidémie Sur une ville Que je dirais... Attends, c'est ce que tu fais, toi Attends, parce que là Gérard, il t'écoute plus Gérard, écoute au moins les auditeurs C'est ça, mais j'ai entendu ce qu'elle disait Donc, c'est bon Donc, alors, maintenant On va... On va attendre un petit peu Que Fildar me retrouve Des auditeurs potables Et qu'ils arrêtent de... Il n'y a plus d'appel Il n'y a plus un seul appel Moi, j'ai plein de questions, hier Ah, oui, connard Celui qui s'amuse à ça Va se calmer, Manu, d'accord ? Sinon, tu vas faire un standard Ouais, bah... Alors, il y a... En attendant Alors, il y a Turpentine Qui te demande Si un lépreux peut attraper la gangrène Un lépreux, bah, de toute manière C'est un peu... Ça vient de chez eux Ils sont déjà souvent en train De la gangrène, aussi, là-bas Chez eux, hein D'accord Ouais Et... Dub, tu te demandes... Excuse-moi, quand tu dis chez eux C'est le pays, ou c'est le... Ouais, ouais, ouais Dans leur pays Non, parce qu'il y a... Bah, il y a la gangrène Et la hougraine, aussi Non, non, non J'ai oublié d'en parler tout à l'heure Toi... C'est peut-être ta réa, tranquille Non, mais voilà Fais du bon boulot Et tu resteras dans l'équipe Sinon, tu retournes au standard Avant la fin de l'émission Oui, chef ! Alors, il y a... Serval qui me dit La mouche de la cirrhose Elle donne la maladie de Parkinson Non, je comprends rien Ouais Est-ce que quand on perd ses doigts On peut les remplacer ? De quoi ? De quoi ? De quoi ? De quoi ? Est-ce que quand on perd ses doigts... Attends, attends C'est Baby One qui me dit Est-ce que quand on perd ses doigts On peut les remplacer par des Twix ? Euh, non Non, parce que quand tu perds tes doigts Tu peux pas les remplacer, en principe Ça, c'est pas mal Et on me demande aussi Si cirrhose pique quand elle se rince, pas ? Non, c'est pas les femmes qui piquent C'est les hommes qui piquent Quand ils se rasent pas comme moi Voilà, donc, alors... Alors, à la place de cuvette On accueille cuvette numéro 2 Ouais, bien sûr On accueille suppo 2 Bien sûr, et tu reprends toujours les mêmes espèces de connards Non, c'est pas vrai Syphilis 2 Vous vous êtes pas pris la tête Soutif et pâté de flotte Non, mais vous avez... Alors, par contre, il y a cirrhose qui s'en va Non, cirrhose, elle s'en va Allez, hop, allez Ah, on fait une bonne nouvelle Alors, hé, je vous préviens Vous vous êtes pas fait chier Vous avez viré tous les autres Et vous les avez repris sous d'autres noms Non, mais cirrhose, remplace-la par boulimie Quand je t'appellerai peau de chambre, tu sortiras de sous le... Toi, tu fermes ta gueule Maintenant qu'on a des nouveaux auditeurs On va reprendre le débat et on se calme Ouais, on se calme, tout de suite Donc, alors, il y a un sondage, déjà, je vais le faire Oh, là, là, là À la question, être malade peut provoquer des maladies Alors, ça, c'est même pas la peine que je dirais Qu'on a ça Non, non, ça, c'est des conneries Non, non, non Les oreillons vont-ils malades ? On va demander à cuvette 2 Ouais, alors, les oreillons, non, ça rend pas malade Ça fait juste mal aux oreilles, en fait Ouais, mais ça peut rendre malade Oh, non, non D'accord, suppos ? Ouais, bah, écoute, j'ai eu les oreillons Et ça m'a filé une transpirationite aiguë Et je pense que tu connais le problème Non, je vois pas du tout ce que tu veux dire Fais-moi un... Ok, cirrhose ? Oui, les oreillons peuvent être une maladie Mais ça, c'est surtout pour les garçons C'est pas pour les filles Oui, ça paraît que ça fait gonfler les couilles Non, mais attends, vous allez... Je vous préviens, vous allez arrêter de dire des conneries comme ça Parce que sinon, la sixième question, ça va être la dernière On va faire conclusion et je rentre chez moi Ça va être clair et net Ça, ça serait bien Alors là, faudrait peut-être vous calmer un peu Non, mais ce qu'il faudrait, c'est que tu leur expliques Non, non, mais attends, au standard, vous êtes pas fait chier Non, non, non Moi, perso, ils m'ont dit qu'ils s'emmerdaient grave, ce soir C'est nul, ton truc, là Ils sont nuls, toi, tu dégages Dégage, maintenant Non, mais non, c'est bon Je gère Non, non, tu dégages Tu dégages Je vais voir Donc, euh... Syphilis ? Oui D'accord, et toi ? Les oreillons, je les ai eus quand j'étais petit D'accord Et ça m'a laissé des séquelles Ouais, bah, je pense pas Soutif ? Oui Donc, toi ? Les oreillons, oui, c'est une maladie Et il y en a qui ont eu la gangrène des oreilles et elles sont tombées Non, mais attends, les oreillons, ça donne pas la gangrène, hein Ah si, je te jure, hein Ah ouais, bah, tu me diras... Je travaille dans le milieu hospitalier Je peux te dire que ça arrive D'accord Une question... Oui, il y a Serval qui te demande Si on attrape les oreillons en écoutant trop fort son Walkman Euh, non, pas spécialement Pas telle fois Oui, bah, tout d'abord, bonsoir, Gérard Bonsoir Donc, je viens d'arriver Oui, bonsoir Salut Donc, bah, ouais, il paraît, il paraît, ouais C'est quoi ta maladie ? C'est une maladie sexuellement transmissible, en plus C'est quoi ta maladie, à toi ? Non, mais les oreillons, bon, je peux... Bon, qui c'est qui veut poser la question, là, vite fait ? Voilà, vous répondez, là ? C'est moi, c'est moi, c'est Syphilis Je voulais lui demander quelle était sa maladie À celle qui vient d'arriver, pas telle fois Bah, pas telle fois, vas-y, pas telle fois, on te pose la question Bah, moi, j'ai attrapé l'oreillon d'une seule oreille Suite à un rapport sexuel Un dérapage de coton-tige Mais t'es toujours baisable ? Euh, ouais, je suis toujours baisable Alors, Syphilis, tu vas te calmer Comment tu l'as appelé ? Tu fais quoi, toi ? Et celui qui vient de dire, en parlant des coton-tiges Toi, ça va être la dernière fois parce que tu as dégagé Hé, ça va, tous les deux, là ? Ça va, là, je vous emmerde trop Gérard, Gérard Reviens au débat Sur Minital, on nous demande si t'as eu la congraine du cerveau Tellement t'es con Non, c'est plutôt lui qui a eu la congraine C'est qui qui dit ça ? C'est Bibitte Bibitte, il a quel âge ? Il a 112 ans Ouais, c'est ça, j'ai mon cul avec l'orage Je crois que ça s'attrape dans les toilettes, surtout Bon, toi, tu fermes ta gueule Bon, alors, encore une fois Cette manière, c'est la dernière question Parce que vous me cassez les couilles à cause des deux du standard À cause des deux du standard, c'est tout Ils sont même pas capables de faire un boulot comme une fois Ces deux connards Après, c'est qui qui paye ? C'est les auditeurs C'est pas de ma faute, dans ces cas, vous avez qu'à vous apprendre Après, Olivier et Fildar C'est pas de notre faute si t'es une équipe de merde Pour l'instant, il y en a deux qui font du bon boulot C'est Manu et Fildar Et Rigaud C'est Manu et Rigaud qui font du bon boulot Les deux autres, c'est deux cons Alors, l'éthique C'est des faillots L'éthique, sont-ils des maladies Qu'on peut avoir en automne ? Qui c'est qui pose et qui répond comme ça ? Non mais donnez pas vos noms, s'il vous plaît C'est Pedro Putain, allez, c'est la dernière question Vous me cassez les couilles, là Là, au standard, vous me cassez Vous faites du boulot dégueulasse Vous m'avez fait du boulot dégueulasse Le deuxième débat, vous me cassez J'aimerais bien que vous réfléchissez un peu aux questions de Gérard et que vous fassiez un débat un peu plus potable parce qu'après, c'est nous qui prenons et l'émission est pourrie C'est facile, ça J'aimerais bien que quand on vous sélectionne que vous fassiez quand même un minimum d'effort pour comprendre, c'est quand même pas compliqué ces questions Il faut qu'il nous cite Celui qui a voulu répondre répond maintenant Tu donnes ton nom et tu réponds Gérard, il se casse le cul une semaine pour faire un débat Putain, mais c'est quoi cet auditeur qui a voulu répondre et qui ne veut plus répondre maintenant ? C'est qui, encore ? Moi, je vais répondre C'est Philippe, dégage, on va terminer pour toi Mais c'est pas moi Celui qui se marre va dégager aussi Oh là là Celui-là, je crois que ça commence à bien faire Je leur ai dit ce qu'il fallait qu'il fasse Non, non, mais attends Le premier débat, il est potable Le deuxième, c'est de la merde À cause de vous deux Pour l'instant, il y a Crico qui va, c'est Manu Ouais, ouais, ouais Attendez, après le débat, on va discuter la semaine prochaine Oh, j'ai rien fait, Gérard Non, non, je veux pas le savoir, vous faites du boulot de merde Alors, pas cette fois pour toi Tu peux répéter la question, s'il te plaît ? L'éthique De quoi ? L'éthique, sont-ils des maladies qu'on peut avoir en automne ? Non, c'est des petites bêtes que les chiens attrapent Voilà, d'accord C'est ce que je voulais t'entendre dire Soutif Allô ? Oh, Gérard, Gérard, Gérard Arrête de t'en faire sur tout le monde, Gérard Plus jamais, merde Non, c'est ma faute, c'est ma faute C'est ma faute, excuse-moi Non, non, oui, tu dégages Gérard, pour revenir au débat Attendez, les auditeurs, attendez Pour revenir au débat Enfin, on va faire un vrai débat Il y a un petit débat Merde, là Et toi, t'arrêtes de bosser comme il faut Sinon, t'en prends autant D'accord Bon, ben voilà Ben non, je l'ai raté Ben, le... Bravo, le fil d'art Merci, merci, fil d'art L'auditeur qui a voulu poser la question, celui-là C'est, s'il te plaît, tu peux revenir Je te remercie C'était Oxyd, Oxyd, tu peux répéter Reviens, tu connais l'adresse Je l'ai, je l'ai Alors, la politique des maladies gêne-t-elle les camionneurs qui jouent du synthé ? Ça, je vois pas du tout le rapport avec les maladies C'est pas grave Donc, à la place de Syphilippe, tu me prends quelqu'un d'autre Ben, si, Jean-Pierre, là Fais gaffe, fil d'art Parce que tu vas t'en prendre autant qu'Olivier Je vais trouver un truc Si, Rose Oui, ben, comme elle disait, paté de foie Les tiques, ça s'attrape C'est dans les animaux, quoi C'est dans leur poil, quoi D'accord Suppos de... Quoi ? Ouais, ben... C'est dans leur poil Ouais, c'est dans les... Mais non, un tique, c'est genre quand tu clignes de l'œil C'est un tique Il y en a, mais il y a... Ouais, mais il y a... Attendez, paté de foie Bon, mon tique, c'est le prout Oh, ta gueule, toi Bon, alors, suppos, tu dégages C'est pas grave, réponds, vas-y, vas-y, vas-y Réponds, parce que moi, ça m'intéresse, ça Non, parce que les tiques, il y a certaines personnes Qui ont des tiques qui n'arrêtent pas de bouger les épaules Ou de se gratter la moustache Ouais, comme moi Moi, c'est un tique de me gratter la moustache Voilà, c'est ça que je voulais dire Donc, c'est pas du tout dans les bêtes, paté de foie Ah, ouais, non, mais enfin, moi, tu me parles de tiques Moi, tout de suite, je... Non, mais des tiques, t'as certaines personnes Qui ont des tiques sans arrêt Non, mais tu comprends bien Oui, mais, ouais, bien sûr Ça peut aussi aller dans les animaux Je suis d'accord avec Siron Donc, suppos, t'as répondu Alors, réponds Les tiques en automne, ouais, les taques en hiver Les tiques en été et les toques au printemps D'accord, ben... Gérard, on me demande si les tiques sont politiques Non, non, je vois pas Merci, merci Je vois pas du tout le truc Excuse-moi, Gérard C'est drôle C'est galéré Donc, en fait, c'est un prénom composé C'est Marc, Serge, Thierry, mais tu peux l'appeler MST Bonsoir Salut Salut C'est Cuvette, j'ai pas répondu à la question Vas-y Je pense que c'est des petites bêtes qui mangent les caniches Mais je viens de te dire Que ça servait C'est aussi sur les humains, mais Je suis sûr que les chiens aussi, quand même D'accord, donc, MST Oui, alors, les tiques, ben oui, comme disait la génération Demoiselle, qui est toujours baisable J'ai bien repéré son nom C'est qui, alors, vas-y ? Celle qui a trois seins Alors, moi, je dirais Elle est plus là, celle qui a trois seins, je te signale Dommage, dommage Elle est morte, elle avait quoi comme maladie ? Non, mais je vais te dire, depuis tout à l'heure C'est l'autre auditeur qu'on a Ah, Syrose, il y aurait Syrose Ouais, ben, Syrose, elle vous emmerde D'accord, bon, que moi, les tiques, ouais, c'est comme disait la personne C'est pour les chiens, c'est une maladie des chiens Non, mais, on vient de dire tout MST, t'as pas encore Euh, pâte-toi, tu te calmes, s'il te plaît C'est un espèce de Non, mais, les tiques, c'est un espèce de morpion canin Qu'il y a sur les tresses Quoi ? C'est un espèce de morpion canin qu'il y a sur les tresses C'était tout, en fait Ah, mais je te jure Bon, de toute manière, il est 50-30 De toute manière, je pense qu'on n'ira pas jusqu'au 10 Bonjour, c'est un message qui s'adresse Au connard qui habite à côté de chez moi C'est moi Euh, ça y est, pour celui qui s'amuse à ça Gérard ? Je peux te répondre ? Ouais, sous-type Moi, j'ai des tiques, mais la décence m'interdit de le dire au téléphone Je te mets des doigts D'accord Peut-être une voix qui m'excite pas du tout, je te l'aide, je le dis Bah, toi-même S'il vous plaît, ça va, de faire votre propre On va peut-être revenir dans le débat De toute manière, c'est la dernière question Mais non J'en ai plein pour toi Si c'est tout, là, si tu dégages, MST, d'accord ? Allez, allez, la question Alors, à l'heure des coups de soleil, vous rendent-ils malades ? On va demander à Cubette Ouais, ouais, moi, ça me rend vraiment malade Bah, t'en as déjà eu ? Euh, non Non, bah, alors, comment tu peux... Bah, parce que je dois pas me mettre au soleil Mais on m'a dit que ça me rendait malade, donc je prends pas le risque, en fait D'accord C'est pas con, ça, hein Je suis courageux, mais pas téméraire D'accord, ok, suppos Ouais, non, les coups de soleil, moi, ça me dérange pas Les coups de victoire non plus Non, mais attends, tu réponds correctement à la question Pas à côté, s'il te plaît Les coups de soleil, ça me dérange pas Et les coups de victoire non plus Les coups de... Victoire D'accord, mais non, mais je crois que, toi, tu comprends Pourquoi ? Non, mais je crois que t'as un peu bouché des oreilles Ouais, ouais, bah, j'ai... C'est une maladie Parce que depuis, depuis le temps que tu dois écouter Fun et que je fais des débats, tu dois comprendre les questions Alors, si tu comprends pas la question que je viens de poser, ça servait à rien de faire le débat D'accord ? Mais là, tu penses que t'es un solotone ? Ouais Alors, Siroze ? Non, moi, les coups de soleil ne me font pas attraper de maladie, c'est que... On en a déjà Non, non, c'est pas ça, mais c'est que moi, je brosse facilement, j'ai une peau... C'est black ? Non, elle est pas black Ah non, tu la connais ? Non, non, elle a une jolie peau, elle est belle, tout ça Elle est pas black, elle est sale Oh, s'il vous plaît, là, vous la laissez parler, merci Même si on attrape des coups de soleil, je pense qu'il faut quand même mettre de la crème et se protéger en mettant un chapeau, tout ça Gérard ? Ouais, de la crème sur le chapeau On nous dit sur Minitel que contre les coups de soleil, le meilleur remède, c'est de superposer plein de couches de fond de teint Non Ils nous disent que c'est un super remède Non, pas du tout MST ? Bah oui, c'est comme l'invité mystère, moi, c'est... je mets de la crème, mais pas sur le chapeau, je suis pas débile Non, mais attends, toi, t'es un peu... Non, mais je crois que MST, il est un peu con, lui Non, non, mais attends, elle a dit qu'elle mettait de la crème sur le chapeau, ça sert à rien Mais non, je mets de la crème sur le corps Oh, encore pire Tu veux me faire vomir ou quoi ? Non, mais attendez, il y a des... Oh, je vous signale qu'il y a des crèmes solaires pour... Pour le corps, hein, au corps, vous le saurez pas On appelle ça de la vaseline Ouais, c'est ça, et ta connerie, on appelle ça de la merde Ah, si tu veux Ok, alors Soutif Oui ? Donc, pour toi ? Bah moi, quand j'ai des coups de soleil, c'est un foulard carré Ah bon, d'accord, carrément, toi ? Bah carrément, j'évite de me faire bronzer le derrière, puisque à chaque fois, ça le fait, alors... Attends, Soutif, je te coupe 5 minutes Celui qui s'amuse encore à redire à la personne qui parle de dégager, je vais pas chercher entre MST, suppo et cuvette, je vais en virer un des trois au hasard Au hasard Ok Discrimination, c'est pas du tout Alors, Soutif Oui ? Donc, si tu me disais... Bah, ça me fout la diarrhée, donc j'évite de partir au soleil en vacances, je me fais des vacances d'été en Normandie, en Norvège, des choses comme ça Ouais, mais en Normandie, je pense qu'il y a quand même pas mal de soleil Je suis allée un an en Normandie, il y a eu 15 jours de pluie, et les 15 autres jours, il a plu Attends, je comprends pas, t'as eu 15 jours de pluie et les 15 autres jours de... Eh non, mais attends, ça veut dire que t'es... Que t'es partie un mois, et pendant un mois, t'as eu de la pluie Oh, bah, t'as tout compris Ah, d'accord Oui, j'ai pas trouvé, donc j'ai pas eu la diarrhée Ça te sert d'aller au restaurant, hein ? Euh, oui Avant qu'on n'ait pas t'étoie Voilà, il y a Le Chiant sur l'IRC qui te demande si les coups de lune sont-ils aussi dangereux que les coups de soleil Non, dans la lune Non, mais, alors là, je vais te dire une chose Chiant, c'est même pas la peine que je réponde à ta question C'est Le Chiant Le Chiant, t'as même pas compris la question Non, mais ça existe, les coups de lune Euh, pâté de foie Les coups de dent, la lune Ouais, bah... Non, mais il comprend rien Ouais, c'est... En fait, avec les coups de soleil, on peut attraper les maladies de la peau Donc, moi, pour me protéger, au lieu de mettre de la crème solaire, bah, je mets de l'huile abronzée Comme ça, au moins, je suis sûre de pas attraper de coups de soleil Donc, tu reviens à ce que je te disais, qu'il y avait des crèmes solaires pour éviter d'attraper des coups de soleil Ah, c'est l'huile solaire Voilà, mais il y a bien de... Avec un indice, zéro Ok Au moins, tu comprends Euh, qui c'est qui vient s'amuser à dire ça ? Mais c'est une vieille chanson C'est sympa, cette chanson C'est la fête, fête, la fête Ouais, bah, je pense pas Alors, moi, je peux vous dire une chose, que les coups de soleil, il y a certaines crèmes solaires qui servent pour éviter qu'on les attrape Parce que les écrans totales, ça fait bronzer, hein, Gérard Comment ? Les écrans totales, ça fait attraper des coups de soleil Euh... L'huile Ouais, mais t'as certains trucs, comment qu'on appelle ? Non, non, c'est des conneries, l'écran total, c'est des conneries, c'est de l'huile qu'il faut mettre pour pas attraper des coups de soleil Non, mais il y a aussi les... Manu, si tu pouvais m'aider, là, tu sais ? Oui, les gens, là, au... Ah, sur les sonos... Ah, je peux t'aider, Gérard ? Les UV Non, mais quoi ? Les crans anales Non, non, toi, tu m'as fait du mauvais boulot L'autobronzant Ouais, il y a les... Les trucs où tu te mets dans une machine, là, et ça te... C'est des sonars, ou sinon, il y a... Un bronzé Il y a aussi... Là, il y a un problème Il y a des néons aussi, je sais plus comment qu'on... Les UV Ah, ouais, les UV C'est moi qui t'ai aidé Non, mais toi, tu fermes... Toi, je t'ai dit de la fermer, je veux que tu m'entendes Je t'ai fait du boulot de merde Allez, hop, dégage Alors, tu t'es... Gérard, c'est pas le thème du débat Au standard Alors, sur IRC, il y a Dimitri qui te demande si on peut attraper des coups de soleil sous l'eau Par exemple, dans sa baignoire Euh, non Et pendant une éclipse de lune, demande Turpentine Putain, mais c'est bidon, l'Internet, c'est pas les maladies, ça Bah si, on parle des coups de soleil dans cette question Mais attends, ils sont moins cons que toi J'aimerais bien faire un débat un peu potable Ouais, mais attends, c'est... T'as déjà foutu ta merde, alors ça suffit comme ça Franchement, t'as fait des trucs trop inconcevables ce soir Alors, dernière question, parce que... Ouais, mais il a été avec ses crabes Il est inconvenable Oh là là C'est horrible C'est lamentable Oula Je sens que Fildar, tu vas t'en prendre une, hein Mais c'est un débat constructible Alors, l'acné, euh... Tu te calmes, toi, parce que avant que tu gerbes... Je vais t'emmener mon rib Je sens que tout à l'heure, on va finir à trois que six À trois que six ? À trois auditeurs au lieu de six Attention, parce que je vais pas chercher tout à l'heure Je vais se virer au hasard Bah non, il est là Alors, l'acné, est-elle une maladie qui s'a... L'acné L'acné ? La quenée La quenée ? La quenelle L'apostrophe A-C-N-E Bon, tu me dégages, je vais m'ester, allez hop J'ai pas le vaccin L'acné, L'apostrophe A-C-N-E Dans la queue au bout du nez, on dit Euh... C'est toi qui viens de dire ça, là-bas ? Non, j'ai rien dit, moi, par contre Alors, donc, on va demander à Cubette Ouais, bah moi, je pense que c'est pas... Je sais pas ce que c'est comme maladie, en fait Bah, tu sais pas que t'as jamais eu de l'acné ? Bah, si, peut-être, mais je connaissais pas, en fait Je savais pas que ça existait Bah, si, ça existe, hein Ça existe Et c'est quoi, comme truc ? Bah, je te le dirai tout à l'heure Suppos Ouais, bah, moi, quand j'étais petit, à l'école, on m'appelait coccinelle Parce que c'était bouton rouge, point noir Bouton rouge, point noir Bouton rouge, point noir D'accord, et t'as pas... Et à part bouton rouge, point noir, bouton rouge, point noir T'avais pas autre chose qu'on te disait ? Ouais, toi, on devait t'appeler le trou noir, à l'école, avec ton petit truc Et toi, on t'a jamais appelé tête de con ? On met une cliquette dedans, elle disparaît, hein, hop Allez, hop, suppos de la bonne nuit pour lui Je voulais dire que j'avais fait de l'acné Mais ce qui me dérangeait, c'était les méduses C'est qui qui vient de répondre ? Qui c'est qui vient de répondre, là ? Je sais pas, moi MST, t'as un nom de maladie ? MST, je te l'avais dit de dégager, Fildar Alors, il dégage Gérard, mais t'es nul Gérard, il y a TomJPSG qui me demande Si l'acné sur le sexe existe Ouais Attends, il rajoute Surtout suite à la sodomie dans les chiottes de la... Ah, excuse-moi Ouais, d'accord, lui, il peut garder ses réflexions Siroge Oui, l'acné C'est quoi, c'est... L'acné, tu ne peux être une maladie On n'écoute même pas la question Oh, tu t'écrases, tu vas être, s'il te plaît, merci Si j'essayais de parler tous en même temps, je pourrais répondre Mais qu'est-ce que c'est ? Donc, l'acné est une maladie Puisque tu peux avoir des boutons partout Sur le corps Donc, ça peut être une maladie très contagieuse D'accord Soutif ? Oui Donc, pour toi ? Ben, moi, je travaille dans le milieu hospitalier Et il nous arrive d'avoir des petits jeunes qui ont de l'acné, effectivement C'est une maladie Que l'on soigne très bien, effectivement Ouais, mais... Grèves de peau, des choses comme ça Ouais, mais je pense qu'il y a certaines personnes Qui vont voir des médecins qui disent Qu'ils veulent se faire soigner contre l'acné Puis qu'en fin de compte, on leur prescrit des médicaments Et ils n'en ont rien à foutre Bon, alors, on a un petit secret qu'on ne dit pas, en fait Parce que, bon, on n'a pas envie de faire notre business Mais la masturbation enlève les boutons Ah, d'accord Ben, ça, c'est la première fois que j'en sens ça Gérard, sur Minitel, on nous demande Si toi, plus jeune, tu as eu de l'acné, justement Attends, laisse-moi finir avec pâté de foie Sur IRC, on me demande combien de temps T'arrives à tenir en acné Bon, ben ça, je ne répondrai même pas à cette question Excuse-moi, Gérard, à la place d'émission, on accueille Petit Quiste Non, mais, hé, ce n'est pas la peine Je suis dans le cours Je suis dans le cours Non, mais, t'es vraiment une pute T'es vraiment une pute Je t'ai dit que ce n'était plus la peine de prendre d'auditeur J'ai arrêté Je suis dans le cours Je suis dans le cours Et à la place de suppôt 2, on a suppôt 3 Non, non, non, c'est pas la peine Non, non, mais c'est terminé, là, le débat Bon, arrête, on fait la conclusion, au moins Non, non, non, vous avez été trop cons Grâce à Fildar On a perdu près de 200 personnes sur l'IRC Merci, Fildar Ils sont revenus, on est presque 2000 Grâce à lui, on avait perdu Quand même 200 personnes Oui, mais ils sont revenus et on est presque 2000, Gérard Donc, si tu pouvais continuer le débat calmement Pour faire plaisir à ces gens-là Pâté de foie pour la dernière question Ouais, bah, moi, tout ce que je sais, c'est que l'acné, maintenant On peut la résoudre à l'aide de la chirurgie esthétique N'importe quoi Bon, allez, tu me dégages ces trois caves Elle a raison Tu me viens de suppôt 2 Et le dernier est arrivé Terminé, terminé, terminé Terminé, terminé, terminé J'en ai ras-le-bol À chaque fois que les naines apparlent, on leur coupe les paroles Alors, maintenant, c'est terminé, tu me les vires Hop, bah, ça Ça va aller plus vite, on termine le débat Avec trois... Ça sera évident, quand même Non, non, pareil Non, petit quiste, il a rien dit, tu vois, c'est bon, quoi Alors, cuvette, j'en veux plus Ouais, c'est bon, cuvette, il est viré Et, euh, voilà Alors, donc, pâté de foie pour toi Donc, tu me disais Pâté de foie, s'il te plaît Je suis d'accord avec la fille qui parlait juste avant Parce que la chirurgie esthétique, maintenant, on l'emploie pour, justement, enlever l'acné D'accord Alors, l'acné au visage, l'acné sur les bras L'acné sur le bout des seins Dans le dos Dans le dos, c'est dégueulasse Ouais, dans le dos, aussi, ouais Donc, Rigaud, comme je vois qu'il y a des questions, je pense Bah, ouais, il y a dévi1 qui te demande où t'as mis l'acné de chez lui Parce qu'il est dehors et il sait pas Non, non, mais on s'est même pas dit Donc, Manu, tout à l'heure, tu m'avais posé une question, toi, sur l'acné Oui, on demandait sur Minitel, je sais plus trop qui Demandait si, toi, quand t'étais jeune, t'as eu de l'acné Et si oui, comment tu t'es soigné et pourquoi, dans quel sens Alors, ça, de l'acné, de toute manière, ça s'attrape Facilement, souvent, il y en a qui disent que c'est en mangeant trop de charcuterie Ça, c'est des dermatologues qui l'ont dit T'as dû bouffer du saucisson, quand même Non, non, mais ça, attends, laisse-moi finir Ou en pétant avec une trouille Oh, ta gueule, toi, petit kiste Donc, il y a certains dermatologues qui m'ont dit Qu'à force de manger trop de charcuterie, on pouvait attraper de l'acné Maintenant, comment que ça se soigne ? Ça se soigne avec des produits style... Merde, comment on... Pas de marque Non, mais il y a des savons spécialisés Des savons spécialisés, et puis des trucs comme du pouce-mousse-mousse Du quoi, du quoi, du quoi ? Pas de marque Des gens de pouce-pouce, là, pour se laver les mains C'est un produit spécial, donc... Du directol Alors, dernière question pour finir le débat On remercie en pile d'art du bordel qu'il a fait jusqu'à maintenant Alors... Qui c'est qui parle, là ? Petit kiste Alors, petit kiste, ça, ouais, tiens, je... Je l'avais pas vu, lui Tiens, réponds, toi Ah, bah, je suis là, regarde Bah, réponds Ouais, bah, oui, l'acné, moi, j'en ai jamais eu Mais j'espère que j'en aurai jamais Non, mais... T'en as jamais eu, d'accord ? Mais si un jour, t'en attrapes, tu te demanderas pourquoi Je te le refile Ouais, non, mais je te demande si c'est une maladie Bah, ouais, c'est une maladie, hein Bon, bah, alors... Il y a des personnes qui ont... Mais il y a des personnes aussi, c'est tout concentré Dans une partie du corps Mais si je dis le coup, ça va te vexer, donc je le dis pas Moi-même, de toute manière, je le sais Mais moi, c'est pas de l'acné que j'ai dans le cou, tu vois Oh, pourtant, il y a du pus dedans, c'est pareil Non, non, non, c'est pas du tout, c'est pas... D'ailleurs, Gérard, il y a un seigneur qui demande Si on peut se nourrir du pus de l'acné Ah, non, là, je vais te dire une chose Le mec, voilà, c'est une question C'est seigneur, quand même Ça donne faim, toi Arrête, Gérard, assis-toi Gérard, Gérard Ah, ouais, non, mais Gérard, c'est pas de ta faute Alors, pour terminer la dernière question Donc, tout le monde a répondu Comme il ne reste plus que Syros, Petit Kist, Soutif et Paté Toit Donc, dernière question Non, suppos, j'ai dit que c'était terminé pour toi Non, mais deux, on a trois, il est là Non, mais attends, parce que On a peut-être que vous passiez votre boulot correctement Ce temps-là Au premier débat, Manu l'a fait Manu l'a fait super bien Toi, c'est de la merde Écoute, Gérard, on a réussi à envoyer deux suppos On peut en envoyer un troisième, quand même Non, mais c'est de la merde, parce que t'as repris la même personne Tu lui as dit, je te fais passer pour suppo 3 D'accord ? Manu, quand j'ai dit Qu'il vire quelqu'un, il a fait son boulot correctement C'est faux Toi, à part Chercher une voiture caca, c'est tout ce que tu sais faire Qu'on vire ta merde Ok, dernière question Petit Kist, deux Ouais, c'est ça, bien sûr Gégé, écoute-moi, la famille suppos On est trois frères, c'est comme les Hansons Parce que nous, c'est les suppos, c'est tout Bon, c'est bon, arrêtez vos conneries, parce que vous commencez à me les gonfler Allez, Gérard, dernière question Allez, allez, on y va Il est 3h10, donc le débat Le dépistage peut-il vous rendre malade ? Ouais, je pense que ouais Ouais, alors vas-y Je pense que ça peut te rendre malade Ça s'arrête là Non mais attends, dans quel sens Que ça peut te rendre malade ? Allô ? Allô, Gérard ? Non, mais Gérard, j'ai été coupé par Phil là encore A tous les coups Non, je disais donc que ça peut rendre malade Dans le sens où ça peut rendre malade D'accord, c'est bien Petit Kist, tu vois bien que le dépistage Ça rend malade, je sais pas si t'as vu Quand Chomara, elle a fait une queue de poisson à Jacques Villeneuve Il a eu la chiasse, Chomara Et ta connerie, elle a eu la chiasse ? Non mais tu parles de ça, du dépistage, moi je te réponds Il a dépisté, voilà Non mais attends, le dépistage, tu sais ce que c'est ? Bah oui, c'est quand il sort de la piste, voilà N'importe quoi, enfin bref C'est quoi le dépistage, Gérard ? Non mais je vais laisser tout le monde parler, après je... Non mais comme ça tu diras pas, bien sûr Le dépistage sur IRC... Attends, toi tu m'éteins le micro et tu t'écrases maintenant Je peux t'entendre jusqu'à la fin, ok ? Sur IRC, on me dit, le dépistage, c'est quand tu... Quand tu coupes tes pistaches en D Non plus Alors, Sirose C'est le dépistage, quoi ? Bah le dépistage, peut-il vous rendre mal... Eh, qu'est-ce qu'elle éconne, à ton mère, toi pétasse, là T'as compris ? Ah mais pourquoi ils sont méchants avec moi, je comprends Non mais attends, celle-là, je vais la calmer Parce qu'elle va répondre tout de suite Soutif ou peut-être moi, maintenant vous répondez toutes les deux Oui, Gérard Alors vas-y Alors tu réponds Vas-y Soutif Vas-y Soutif, je te laisse la parole Euh, le dépistage... Ouais, ouais Regarde Richard Virac Bon d'accord, toi... Pas de marque, pas de marque On l'a dopé à la suite de son plein gré, maintenant il est malade Donc on le soigne en lui faisant des piqûres Mais je vois pas du tout le rapport Je te dis qu'il est malade, donc il a été dépisté gravement même N'importe quoi, toi tu comprends Je crois que t'as été... Je me demande si t'es vraiment une infirmière Gérard Gérard, c'est moi Ouais, sur Minitain, on... On nous demande si chez toi aussi, ta pisse, elle tâche Ah, exactement Alors, qui c'est qui pose cette question con ? Euh... Question con Sur IRC, c'est pour continuer Bah, question con, bah c'est un con Voilà, c'est tout Est-ce que la piste tâche ? Ouais, pareil Ce serait pareil sur l'IRC Pas tête-poids pour finir ? Euh, non, non, le dépistage, au contraire, c'est fait justement pour éviter les maladies Et voilà, quoi, point barre D'accord, bah, c'est bien Gérard, il y a Yankee qui te conseille d'aller faire un dépistage de trisomie Bon, bah, lui, il ferait mieux de faire... De se taire un petit peu pour dire des conneries Cyrus, pour finir ? Bah, non, le dépistage peut pas être une maladie Dépose, dépose, dépose Merci Allez, faites la fête Gérard, la conclusion aussi Non, non, mais vous laissez Cyrus finir, s'il vous plaît, merci Allez, la grosse, là, dépose, espèce de fainéance Alors, petit kiss, tu dégages Allez, hop Tu viens dans le coup, hein Allez, hop, dans le coup Un coup de calpe Pas dans le cul, parce que je suis poli Quelqu'un a dit comment vous voulez, hein ? Non, moi, je veux m'appeler... Bon ! Et on n'a que une chaude pisse Et vous êtes vraiment des fils de putes, hein ? Vous êtes vraiment des fils de putes de faire chier les gens comme ça Oh, là, là, moi, je suis outrée, là Ouais, salut, c'est Blénoragie Je peux répondre, Gégé ? Vas-y Je voulais dire que le dépistage, ça peut pas être une maladie Vu que le dépistage, c'est fait pour, justement, déceler les maladies Voilà, et donc, je peux vous dire une chose Que le dépistage sert vraiment à quelque chose, surtout Chez les femmes et pour nous, les hommes Si on veut pas avoir certaines maladies Surtout, il y a les cancers du sein que je voulais pas aborder Parce que sinon, le débat aurait duré au moins jusqu'à 4 heures Ça, c'est une question que j'ai pas parlé J'ai pas voulu parler non plus du sida Parce que c'était un problème trop important Et ça, je ferais un débat dessus avec le cancer du sein Je ne sais pas quand Je vais voir ça avec le chef Mais sans fil d'art au standard Faut vraiment qu'on le travaille, ce débat C'est le débat 2012, le débat, hein ? Là, ça peut être joli Ça peut être votre dernier Non mais attends, c'est un point On va voir, mais je pense qu'on l'est pas du tout On le fait, on le rejette, on l'envoie à la CLT, à la CIA On l'envoie à la CSA, à tout le monde Ils valident Qui serait qui reste, là, maintenant ? Alors, on va demander à la cuvette 3h12, hein, Gérard On fait conclusion, hein ? Donc, conclusion, cuvette ? Ouais, bah, ton débat, il y a mieux Parce que, enfin bon, c'était un peu trop compliqué pour moi, je pense Non, bah, t'avais qu'à comprendre un peu T'avais qu'à comprendre, t'avais qu'à mieux dire T'avais qu'à mieux t'exprimer, surtout, en fait Ouais, non, mais vous avez qu'à vous adresser à Pildar Non, non, non, c'est tout Tu fais mal ton boulot Non, non, mais c'est Pildar qui a foutu sa merde C'est Pildar qui a foutu sa merde, cuvette, d'accord ? Alors, tu le remercieras en lui disant au revoir Suppos Ouais, bah, je voulais dire que j'entends que Max est revenu On l'appelle le star system Toi, Gérard, je pense que t'es le star cystite C'est-à-dire le roi des infections urinaires Alors, toi, mon pote, c'est la dernière fois que tu passeras dans mes débats, d'accord ? Ok Petit quiste Oui, bah, alors là, t'as fait fort, Gérard Moi, je me suis bien marré Donc, il faudrait que tu continues comme ça sans t'en prendre à ton équipe, quand même Bah, si, parce que c'est grâce à Pildar si c'est un merdé Non, mais non, mais non C'est la cause La cause, c'est Pildar Parce que, maintenant, Rigaud, avant que tu termines On va essayer d'avoir... On demandera le chiffre après Après, après Donc, pour toi, alors Ouais, faut pas que tu t'en prennes à tout le monde Il faut pas que tu passes ton temps à virer des gens, aussi Tu comprends ? Bah, ouais, mais dans ce cas-là Quand je vous pose des questions Si vous voulez pas répondre dans ce cas-là Ça sert à rien qu'on vous sélectionne pour faire les débats Si vous ne voulez pas répondre On veut répondre, mais bon, des fois On répond à côté de la plaque Mais c'est pas pour autant qu'il faut virer des gens Mais ouais, mais si vous répondez à côté des questions Ça sert à rien non plus de vous sélectionner pour faire les débats C'est tout Bon, d'accord, je suis d'accord avec toi Voilà Je te souhaite une bonne soirée Ok, bah, moi aussi Soutif Moi, je suis déçue parce que, bon Je suis quand même dans le milieu hospitalier Donc, j'aurais aimé participer à tout le débat Parce que j'avais des choses intéressantes à dire Néanmoins, bah, c'était nul Et j'ai Fildar Ouais, bah, c'est bien Tu peux retourner le voir, alors Voilà Donc, pas tête-fois pour toi Ouais, bah, comme d'habitude, tes débats C'était vraiment de la débilité grave, quoi Et néanmoins, faut pas t'en prendre à Fildar Si tu sais pas gérer toi-même ton équipe Ouais, bah, dans ce cas-là Fildar, il avait qu'à pas faire le con Parce que c'est grâce à lui Si, à un moment donné Sur l'IRC, on avait des petits problèmes Ouais, mais enfin, c'est quand même grâce à lui Que t'as des auditeurs, quoi Ouais, non, mais c'est grâce Quand je lui demande de virer certains auditeurs C'est pas la peine qu'il essaye de les reprendre après Pour leur dire Vous passez sous un autre nom Ouais, enfin, Gérard Si t'es pas capable de gérer C'est ton problème De toute manière, dans l'équipe Y'en a que deux qui font bien leur boulot Et c'est tout Les autres Ouais, bah, ouais T'as encore raison De toute façon, ton débat Ça a encore été de la merde Et puis, voilà, quoi Eh bah, si t'es pas content Tu as bouffé ton pâté de foie Ok, salut Oh, joli Cirrhose, pour finir Cirrhose T'es vraiment une tue, toi Mais c'est pas moi Mais c'est pas moi Mais c'est pas moi Je crois que, voilà Tu peux arrêter la sonnerie, finalement Voilà Attends, toi, je te jure C'est la dernière fois Donc, conclusion Ouais, conclusion Donc, sur l'IRC On était presque 2000 On est arrivé jusqu'à 1995 Jusqu'au moment où tu as insulté un auditeur Tu l'as traité deux fois de fils de pute Et y'a au moins 500 personnes qui sont parties Et y'a beaucoup de gens Qui ont été outrés par ton langage Et je te lis quelques conclusions Encore une fois Un débat sans queue ni tête Comme Gérard Le Viagra est au sec Ce que la connerie est à Gérard Le Viagra fait partie de l'acné Et le dépistage permet d'éviter les coups de soleil Non, mais pas du tout Pas du tout Mais bon, y'a quand même combien de connectés ? Y'en a eu On a fait 1995 Ah bah Bravo Gérard C'est l'exploit C'est le record Je crois que c'est un record mondial, alors même Bravo Non, non, mais toi Toi, tu m'en as fait virer quand même 200 Il a eu du mal à les récupérer Ouais, beaucoup de mal Mais t'avais perdu les numéros, aussi Ouais, mais En plus Quand tu as une personne Qui n'a pas fait sa conclusion Tu l'as carrément raccroché au nez Non, c'est elle qui a coupé Non, non, non Non, non, non Non, parce que je vais l'appeler Je vais demander Ah, tu la connais ? Bien sûr Ah bon C'est qui ? Non, à ton avis Ah, c'est Sandy Ouais, bah bravo Bravo Gérard Alors, fais-moi confiance C'était qui ? C'était Sandy Non, mais De quoi ? Personne n'a reconnu Mais qui ? C'était quoi son nom ? Cirrhose Oh T'as déguisé bien sa voix C'est pour ça qu'on entendait Vas-y, là Ah, non De quoi ? Je comprends mieux Non, mais je comprends mieux Je comprends mieux Ouais, ça m'étonne pas de Manu Bah, conclusion C'est dommage que Fildar Il a foutu sa merde Ah, oui, je sais C'est une belle conclusion Ouais, bah, de toute manière J'espère que la semaine prochaine Tu seras pas dans l'équipe Parce que je veux pas de toi C'est simple À moins qu'il travaille À moins qu'il travaille Non, non, bah, il va travailler Déjà, il va essayer Je vais essayer de rattraper des points Je vais faire un stage J'ai entendu ce soir Qu'il attendait 11h30 Pour trouver des auditeurs Bah, si c'est Manu Qui doit trouver des auditeurs Autant le mettre tout seul Avec une nana Et lui, on peut le virer Bah, on va le mettre Avec Bébé Rose, ouais Voilà Avec la catastrophe Donc, moi, je peux Comment ça, la catastrophe ? Moi, je peux dire quand même Merci à Manu Des deux débats Parce que c'est la première fois En je sais pas combien de temps Que tu me remercies, Gérard Donc, et puis, surtout Merci, Rigo D'avoir fait ton boulot Correctement De rien, Gérard Fildar, je te remercie pas Parce que tu m'as fait de la merde Je te sers pas la main Donc, voilà Donc, on s'écoute Ah, je sais pas Le disque Bah, moi, je sais plus Je sais pas Allez, file le dernier titre Je suis parti de l'équipe Mais moi, je te réintègre Allez, vas-y Non, non, c'est pas lui Qui commande Dans les débats Le jeudi, c'est moi Je crois que c'est Technolab avec Fusion Voilà Et demain Ben, le droit de l'impro Y'a pas de problème Là, vous allez retrouver Rigo pour la nuit sans pub Ouais, je vais faire La nuit sans pub, ouais Vous allez retrouver Rousseau pour la nuit sans pub Et dès demain matin 6h, Barthe Avec des scooters à gagner Et bien sûr, demain soir Dès 22h On se retrouve Le Star System Yes Et moi, je vous retrouverai Dans le courant de la semaine S'il y a des petites réactions Par le Par le guet Des auditeurs Par le guet Par les guets, ouais Voilà Il y en aura plein, t'inquiète pas Bonne nuit à tous Et à la semaine prochaine Ouais À la semaine prochaine == Le débat sur l'armée == === Contexte === === Les personnages === === Transcription === Et on est déjà 1664 ! Ah bah d'accord, on commence déjà fort ! 1664 ! On commence déjà fort, il est 0h19, on accueille Canif... Caniche... On fait quel débat là Gérard ? Sur l'armée ! Voilà, donc on accueille les auditeurs. Canis ! Canif ! On peut écouter FN Radio sur 94.5 Bonsoir Gérard ! Bonsoir, Tagada 21 ans, Paris 101.9 Salut ! Salut ! Ah, Tagada ! Andouille, 20 ans de chinois, on peut écouter FN Radio sur 100.2 Salut Gérard ! Salut ! Croupion, 22 ans, Verdun, 93.9, FN Radio Bonsoir Gérard ! Bonsoir, Tony ! Bonsoir Gérard, bonsoir toute l'équipe ! Bonsoir ! Paris, FN Radio 101.9 Yes ! Et... Prothèse, 21 ans, Royan, 99 FM Bonsoir Gérard, bonsoir à tous ! Bonsoir ! Donc, première... Comment ? Big up ! Merci pour Rigaud, donc... Merci pour Rigaud, c'est pas mal. Alors, bon, on commence. Celui qui a un téléphone portable ou pourri, là, qu'il dise tout de suite, parce que ça commence déjà mal. De toute façon, Darty s'est fermé à ce temps-là. Non, mais dans ce cas-là, s'il a un téléphone pourri, dans ce cas-là, il va avoir Manu au standard, ça ira plus vite tout de suite. Je vais le trouver. Donc, alors, première question, avez-vous fait déjà l'armée ? Si oui, dans quelle arme ? On va demander à... Andouille ! Bah, écoute, moi, je suis désolée, mais j'ai jamais fait l'armée. D'accord. Canis ? Bah, moi, écoute, Gérard, en tant que fille, j'ai jamais fait l'armée, mais j'aurais aimé, franchement. D'accord. De toute manière, ça, c'est des questions qu'on va aborder lors du sujet aussi, hein. Ouais, ouais, ok. Donc, Tagada ? Moi, oui. Dans quelle arme ? L'armée de terre. À 21 ans, t'as déjà fait l'armée, donc t'as devancé l'appel, alors ? Bah, non. Bah, si. Bah, non, ils sont venus me chercher. Non, non, non, non, non, attends. Commence pas à dire des conneries, toi, parce que... Je te dis tout de suite que... T'as eu des mises ? Ouais, ouais, non, non, mais Tagada... Oh, oh, Tagada, Tagada, Tagada. Oui. Soin de toi. On se calme, ok ? Donc, à mon avis, t'as devancé l'appel parce qu'à 21 ans, ils viennent pas te chercher comme ça, hein. Alors, me prends pas pour un con. Me prends pas pour un con, s'il te plaît. Ça dépend si vous voulez s'engager. Tu voulais t'engager, Tagada, ou pas ? Bah, oui. Non, mais attends, ça, les trucs sur l'engagement, c'est moi qui les pose, les questions, c'est pas toi, d'accord ? Non, mais tu dis que c'est pas possible. Non, mais tu as pas commencé déjà le premier débat comme ça. D'accord, je voulais poser une question, je suis désolé. Euh, Andouille, toi-même. Oui, bah moi, j'ai déjà répondu, j'ai déjà répondu. Ah, t'as déjà répondu, c'est vrai, je t'ai passé en premier. Croupion ? Ouais, alors moi, je suis totalement anti-militariste, donc il est hors de question que je mette les pieds dans une caserne avec des cons, quoi. Ouais, mais ça... Oh là, merci pour le Larsen. De toute manière, ça, je vais te dire une chose, que maintenant, ça va être bientôt obligatoire, alors donc, t'auras pas le choix. Euh... Tony ? Moi, je suis pro-militariste, mais je me suis fait réformer. D'accord. À 20 ans, t'en es sûr de ce que tu me dis, là ? Ah, sûr et certain, ouais. Ouais. Je pense pas à moi, à mon avis. Et je te jure, et puis je te raconterai même l'histoire, si tu veux. Ouais, non, non, mais j'ai pas besoin de savoir toute l'histoire complète. Prothèse ? Ouais, bah moi, je voulais m'engager, mais je me suis fait réformer parce que j'étais pas assez con pour faire l'armée, quoi. De toute manière, y a pas besoin d'être con pour faire l'armée, d'accord ? Parce que si tu... Non, mais attends, si tu veux dire ça pour moi, tu vois, je vais te dire une chose... Non, non, mais y a pas besoin d'être con pour faire l'armée, de toute manière, l'armée, c'est obligatoire et c'est tout. Tu m'as dit tout à fait, les cons, de toute façon, ils sont chefs. Ouais, bah, de toute manière, avec un con comme moi, on s'amuse, avec un con comme toi, on se fait chier, d'accord ? Sur IRC, y a Zioui qui te demande si tu aimes ramer. Je vois pas du tout le rapport avec le débat, hein. Bah, pourtant... Donc, moi, je peux vous dire que j'ai fait l'armée, dans quelle arme... Eh, en fait, personne m'a dit dans quelle arme... Ouais, dans quelle arme, Gérard, au fait ? Non, mais... Au fait, Gérard, dans quelle arme ? Prothèse, ouais, pour l'instant, c'est moi qui pose les questions. Ouais, mais dans quelle arme, au fait, Gérard ? C'est moi qui pose les questions, c'est pas vous. Oui, mais dans quelle arme ? C'est pas... C'est moi qui pose les questions, toi, Prothèse. Au fait, ouais. Dans quelle arme, toi ? Bah, j'ai été réformé, je t'ai dit. Eh, c'est le qui dit au fait, tout à l'heure, tu vas te calmer, toi. Je voulais m'engager dans les RIMA, Régiment d'Infanterie, Marie. Ouais, dans l'infanterie. Ouais, j'suis en ligne. Tony ? Bah, je te dis, je me suis fait réformer, mais moi, je voulais n'importe quoi, de la cuisine, de n'importe quoi, moi, j'aurais fait. Croupion ? Oui, tout sauf la Légion. Ouais. Andouille ? Moi, je serais plutôt partie dans l'arme blanche. C'est-à-dire, chasseur alpin ? C'est du ninja. Tu m'as outé les mots de la bouche. Bah, c'est chasseur alpin, hein, les plus blanches, ouais. Les samouraïs. Euh, Tagada ? C'est quoi, la question ? Non, mais je te demande dans quelle arme, abruti, parce que tout à l'heure, tu as dégagé, ça va aller vite. Abruti, toi, si tu commences. Dans quelle arme, quoi ? J'ai fait l'armée ? Ouais. Bah, je te l'ai dit tout à l'heure, dans l'armée de terre. Ah, non, tu ne l'as pas dit, nuance. Je l'ai dit, je l'ai dit, j'ai... Euh, Canis ? Bah, moi, j'ai rien fait. Canif ? Canif, ouais. Bah, j'ai rien fait, mais ouais, dans l'armée de terre, j'aurais aimé. Bah, moi, j'ai... Tu verras, il y a des mâles dans l'armée de terre. Ouais, bah, oh, tu te calmes, toi, parce que tout à l'heure, tu as fait comme la semaine dernière, Tony. Attends, Gérard, toi, tu l'as fait dans quelle armée, alors ? C'est... Moi, c'est... J'étais dans l'infanterie, dans le 110e R.I. en Allemagne. Et t'inventais quoi ? T'inventais quoi ? Non, mais c'est le 110e Régiment d'Infanterie, Abruti. Ah, Infanterie, j'ai compris. Et toi, dans quelle arme ? Tu ne l'as pas fait, tu ne l'as pas fait, parce que toi, t'es trop con, alors ? Déjà, lui, il est trop con, déjà, pour faire son stand-up, il attend 11h à nuit. Il y a un petit sondage qui nous a été communiqué, donc, à la question, pour ou contre l'armée, 20% des gens... Non, mais c'est important de savoir, Gérard. Ouais, mais ça, on n'en a rien à foutre des pour ou contre, parce que c'est pas... C'est un débat, on en parle, vas-y, Manu. Donc, 20% des gens sont pour Alain Prost, 30% des gens n'ont pas de permis, et 50% n'ont jamais été alarmés en un seul mot. Bon, alors, déjà, les deux premières questions, je ne vois pas ce que ça vient tout là-dedans. Les gens ont répondu ça, ils sont... Ouais, mais ceux qui répondent ça, c'est des cons, ce n'est pas de ma faute. Donc, deuxième question, à quoi l'armée sert-elle de nos jours ? Aujourd'hui, on va demander ça à, ben, Tony. Non, on va demander à Tagada. Pardon ? Tagada. À se faire des mecs ? Putain, mais, hé, hé, hé, non, mais t'es vraiment con, toi ! Il y a eu le sergent du mec, après, il y a eu l'infirmier, je m'en rappelle... À quoi sert l'armée de nos jours, aujourd'hui, Tagada ? Tu réponds comme rectement, ou sinon, tu gerbes. Bon. Euh... À former des hommes, des vrais, des mâles, hein. Bon, maintenant... Tu me prends Tagada, tu lui expliques comment que ça se passe, un débat. Ouais, mais peut-être que pour lui, justement, l'armée... C'est mon point de vue, hein. Ouais, non, mais... Non, mais explique-lui quand même comment que ça se passe, un débat, parce que... Toi, tu poses une question, il doit répondre. Ouais, ben, pour l'instant, s'il répond à côté de la plaque, c'est pas la peine de... Non, il répond ce qu'il veut. Il répond au mot de l'acteur. Euh, Rigaud, attendez, c'est vous, ok ? Rigaud, il y a une question, non ? Euh, ça va très vite, vu qu'on est en train de dépasser les 1800 connectés. Oh, lol, lol, lol, lol. Alors, l'armée sert à se mettre des cotons-tiges dans le cul ? Non, non, ça c'est bon, ça va trop vite, j'ai pas trop le temps. C'est qui qui s'amuse à dire ça ? Ben, c'était un certain Gérard que... Ah bon, d'accord, ouais, ok. Euh, Andouille ? Ouais, ben, l'armée, ça sert à se battre. Ah bon, pour toi, l'armée, on se bat ? Ouais, ouais, c'est une école de bagarre. Ah bon ? Ah, ok, attends, attends, on va... C'est excellent. Ah ouais, d'accord. Alors, tu crois que c'est l'armée qui fout le bordel dans les rues ? Non, non, non, mais je pense que là-bas, c'est une bonne école pour apprendre à se battre. Ça fait qu'après, quand tu rentres chez toi, tu peux te battre tranquille, quoi. Ah bon, c'est nouveau, ça ? Ouais, vive la guerre. Ah ouais, ouais, c'est nouveau, ça, ça vient de sortir. Tiens, il faudrait que je réfléchisse à cette question. Euh, Canip ? Ben, écoute, moi, Gérard, pour moi, je sais vraiment pas à quoi ça sert, parce que vu le peu de gens qui veulent y aller, ça doit pas servir à grand-chose. Ben, disons, ça sert pas à grand-chose dans l'ensemble. En fin de compte, tu perds carrément facilement un an de... Si t'es en stage ou au boulot, tu perds facilement une année pour rien. Ouais, mais maintenant... Non, non, mais attends, j'ai pas fini avec tout le monde, là, on va demander à tout le monde. Andouille, elle a répondu. Croupion ? Ouais ? Donc, toi ? L'armée, ça sert à faire chier les gens, à faire chier les Parisiens tous les 14 juillets pour voir défiler 5 000... Bon, ben, ça... Bon, là, merci pour le Larsen. Y a pas de quoi. Euh, Tony ? À se faire sodom. Ah, ouais, d'accord. Alors, Tony, tu me redis encore une connerie comme ça, je te préviens, tu fais comme la semaine dernière, je te gerbe au premier débat, OK ? Tu me poses une question, je te réponds. Non, non, mais je te demande, sois un peu moins con, hein, que tu l'aies. Tu réponds correctement aux questions, sinon tu gerbes. Je te le dis tout de suite, parce que j'ai pas l'intention de me faire chier ce soir. Je suis désolé. Gérard, sur IRC, il y a Le Chiant qui te demande s'il faut savoir faire du rouille. Du windsurf pour faire l'armée de l'air. Oh, non, c'est quoi, ça ? C'est quoi, du windsurf ? Si quelqu'un pouvait me le dire, c'est quand tu sautes en parachute avec ton tank. Ah, d'accord. Non, non, non, tu sautes, alors tu vois, t'as un petit string rose. Qui, qui, qui, qui, qui c'est ? Ah, c'est Tagada. T'as un petit string rose avec des petites dentelles sur le côté. Ensuite, t'as une jartière, voilà. T'es sur un surf et tu prends un gros code. Alors, le code, tu le décides. Non, non, c'est bon, Tagada, ça y est, ça y est, ça y est, c'est bon, on a compris. Prothèse pour finir le thème de... Ouais, bah, l'armée, je dirais que ça sert à apprécier le kaki et les corvées de chiotte. Bon, bah, ça, donc, moi, je... Comment ? Ouais. Non, mais rien. Qui c'est qui a voulu rajouter quelque chose ? Tagada. Tagada ? Non, c'est pas moi. C'est pas moi. Bon, alors... Non, mais c'est pas grave, vas-y. Donc, c'est pas... Donc, l'armée, à l'heure actuelle, sert à quoi ? Bon, bah, en fin de compte, comme j'ai dit tout à l'heure sur Andouille ou Croupion qui m'avaient parlé de ça, bon, bah, j'avais vaguement dit, donc, normalement, l'armée, c'est, en fin de compte, vous perdez un an de salaire, parce qu'en fin de compte, vous n'êtes pas sûr, quand vous ressortez de l'armée, de récupérer votre emploi. Normalement, si, vis-à-vis de la loi et selon les collections collectives de la société, normalement, ils sont obligés de vous reprendre, quand vous avez terminé l'armée, ils sont obligés de vous reprendre facilement, normalement, si je ne me trompe pas, et je pense que Manu ou Fildar ou Grégoire pourront me confirmer, je crois que, normalement, c'est un mois, un mois, normalement. Par contre, Gérard, c'est Manu, là. Ouais, l'armée, ça sert pas, tu peux pas passer ton permis gratuitement, tout ça, des trucs comme ça ? Mais, justement, mais attends... Mais, c'est pas les bonnes questions, Manu, que tu poses. Je savais pas, je savais pas. Justement, celle-là, celle-là, on va la poser, mais c'est la toute dernière. Je savais pas, je suis désolé, Gérard. Vu qu'on a commencé plus tôt... Et, Gérard, je vais te demander, ceux qui vont à l'armée et qui, avant, n'avaient pas de travail, est-ce qu'ils le récupèrent, après ? Ben, ça, s'ils en ont pas, ils pourront pas en retrouver derrière. Donc, c'est l'arnaque. S'ils en avaient pas au départ, ils en auront pas à la sortie. Ouais, mais ça, c'est regrettable. Non, non, sauf parce que, maintenant, il faut dire une chose. Quoi sert l'armée ? C'est qu'on peut très bien, aussi, trouver... Un job. Faire un job à l'armée, à la sortie, si vous avez été compétent pendant les 12 mois qu'on... 10 mois. Est-ce que tu peux avoir un petit pot ? Non, non, mais ça, les... Un dipôme. Est-ce qu'il peut avoir un dipôme à l'armée, ou pas ? Non, non, non. Non, c'est impossible. Déjà, c'est tout juste s'il y en a un qui arrive à récupérer leur permis de conduire, à la fin. Ils savent même pas lire. Mais s'ils ont pas son permis à l'armée, est-ce que c'est envisageable d'avoir dans le civil ? C'est qui, ça, qui me pose ça ? Oui, mais attends, Tony, c'est la 11e question. C'est la dernière question, Tony. Ah, pardon, excusez-moi. Donc, si vous voulez commencer par la 11e, on va le faire tout de suite, et... Non, ben non, on va... Non, mais si, on va... Ben si, comme t'en parles. Bon, ben allez, on fait la 11e, ça va. Donc, Tony, comme t'en parles, on fait la 11e. Après, je veux la 8 et la 6, si c'est possible. Bon, ça y est. A la bouche. Donc, alors, avez-vous eu l'occasion de percer votre permis de conduire, donc, à l'armée ? Non, qu'on m'a demandé la prothèse ? Non. Non. Je voulais, mais c'est justement pour ça que je voulais m'engager. C'est pour passer tous mes permis, puis après, tu verras quoi. Mais j'ai pas pu. Oh, non, mais attends, parce que de toute manière... Mais attends, si tu t'engages, faut bien préciser... Je vais préciser une chose, que si tu veux passer ton permis, de toute manière, même en t'engageant, t'es obligé de faire ton engagement jusqu'au bout. Ah ouais, justement. Et si tu t'engages, normalement, c'est pour 2 ou 3 ans, ça dépend du temps que tu veux faire. Ça dépend de l'armée aussi. Moi, on m'a dit que les épreuves de conduite, elles étaient, à l'armée, elles étaient redoutables. C'est vrai. C'est Tony, ça ? Oui. Ouais, non, mais ça, je vais te dire... Attends, Tony, je te prends tout de suite, oui ? Ouais, prends. Oui, tu me rends compte que t'en as de la chance. Merci, qui te demande si t'as été maître chien à l'armée, est-ce que c'est de là que vient ton histoire d'amour récente ? Euh, non, maître chien, je pense pas que... Et pourquoi t'as tué le chien aussi ? Euh, Tony ? Oui ? Je t'ai dit, tu arrêtes tes conneries, sinon tu vas dégager avant 1h du matin, toi. Mais ça, c'est pas envisageable. Ouais, c'est envisageable, alors fais bien gaffe. C'est inadmissible. Ouais, alors donc, tu disais, toi, tout à l'heure, comme t'avais une question à me poser, donc tu peux peut-être finir ta pensée. Hein ? Bon, d'accord, Tony, je crois que... Ah, non, non, non, c'est pas moi qui ai parlé, là. Non, mais... T'avais une question tout à l'heure, Tony, à poser, vas-y. T'avais une question. Ça se finissait par B, c'est ça ? Bon, d'accord. Tony, ça commence à bien faire pour toi. Non, mais c'est quoi, la question ? Croupion, Croupion. Non, non, ça y est, ça y est, ça y est, ça y est, ça y est, Tony. Ça y est, Tony. Croupion, Croupion. Ouais ? Donc, toi ? Ouais, bah, moi, de toute façon, j'ai pas fait l'armée, hein. Mais il est hors de question que je passe mon permis à l'armée. Mais ouais, non, mais c'est la condition sine qua non, si tu veux rentrer. Oh, là, là ! Hé, Croupion ! Oui ? Attendez, s'il vous plaît, Croupion ! Oui ? T'as pas un téléphone pourri ? Non, non. Ça, c'est... Ça fait drôle, hein. Mais il est possible. J'ai l'impression que c'est elle, hein. Je vais voir, je vais voir. Un portable, ça, hein. Andouille. Oui ? Bah, moi, comme je t'ai dit, donc, j'ai pas fait l'armée. Hum ? Mais, euh... Non, mais, de toute façon, moi, ça m'intéresse pas de passer mon permis. Je préfère profiter des gens, tu vois, profiter de leur voiture. Comme ça, je paye en réunion. Ouais, mais ça, c'est un peu dégueulasse, n'empêche. Ouais, mais enfin, chacun vit sa vie comme il veut. Ouais, c'est vrai. OK. Est-ce que tu le payes, le permis à l'armée, ou pas ? Non, mais attends, justement, je vais répondre après à la question. Ah, d'accord. Euh, Tagada. Eh, on m'a fait un au revoir. Oh, Tagada, tu réponds correctement, parce que tout à l'heure, ça m'a... La bouche pleine. Ça m'a gerbé, toi. Déjà, quand je te parle, t'évites de manger, t'évites de faire comme Fildar. Non, il mange pas, là. Deux secondes, je voulais juste dire, quand même, remercier les gens de l'IRC, parce qu'on est déjà plus de 2000, on est 2011. Oh là là ! Et je voulais saluer Yannick, qui nous écoute en direct du Canada. Ils sont beaucoup à nous écouter, on t'écoute à travers le monde. Ouais, bah, c'est bien. C'est pas mal, ouais. Et beaucoup de militaires, aussi. Je crois qu'on va battre les records, encore. Ah, c'est déjà fait. Euh, Canif. Ouais, bah, non, écoute, Ira. Moi, j'ai pas passé mon permis à l'armée, non. D'accord. Donc, alors, tu voulais me poser une question ? Ouais, tu t'en rappelles plus ? Non. Bah, maintenant, tu vas la répéter. Est-ce qu'on paye le permis de conduire à l'armée ? Non. Pourquoi ? Ça, c'est... Tu le payes pas, parce que c'est toi qui demandes à passer ton permis, donc c'est gratuit. Et combien coûte ? Zéro point, de toute manière. Ça dépend du contingent, dans quel contingent tu te situes pour passer ton permis. C'est quoi, un contingent, Gérard ? Par exemple, on est en combien, là ? C'est comme un compte en banque ? Novembre ? Non, non, non, c'est pas du tout pareil. Contingent, c'est par exemple du... C'est peut-être des naissances. Non, plus ! Arrête de dire des conneries, toi, quand je parle. Merci. Contingent, c'est par exemple... C'est tous les deux mois. Donc, tous les deux mois, t'as un contingent. Comme là, le mois prochain, ça sera la 98-12. Ah, d'accord. C'est ça qu'on appelle des contingents. Ouais, c'est l'année plus le mois. Voilà. 98-12, c'est quelle ville, ça ? Oh, t'as gueule, toi. Donc, voilà, comme ça, t'es servi. Et tu peux passer tous les permis ? Bateau, tout ça ? Non, non, non, tu passes uniquement que le permis B ou le gros, là, le 40 tonnes. Mais par contre, il faut bien dire une chose, que celui qui passe son permis à l'armée, ils ont un certain nombre de kilomètres à faire pendant leur armée pour qu'ils soient validés après dans le civil. Mais par contre, il y a un permis qui n'est pas validé et c'est dommage. Il est valable ou pas ? Disons non, il ne sert à rien. On a dans le civil, en fin de compte, ce permis-là, c'est le permis VAB véhicule d'avant-blindé. C'est les fameux trucs, là, tu vois, les sirous, comme les gendarmes mobiles qu'ils ont, là, en ce moment. Ah, comme dans la 7e compagnie ? Ouais, voilà, grosso modo. Non, mais ça, c'est avec des chenilles, c'est pas pareil. Ah, d'accord. Gérard ? Oui ? Il y a un autre petit sondage. À la question, êtes-vous déjà allé voir une armée ? 25% des gens, ils sont allés avec leur femme. 35%, ils sont allés avec leurs enfants. Et 40% ont demandé l'arme et qu'elle a. Qu'est-ce que t'en penses ? Non, mais attends, parce que là, il y a un truc. Avez-vous déjà été voir l'armée ? Je ne vois pas du tout le rapport. On peut visiter, non ? Ça ne se visite pas ? C'est pas un parc ? C'est pas comme la tour Eiffel ? Non, non, non. Il n'y a pas de... Je crois que c'est la garde républicaine, si je me souviens bien, qui s'amuse à faire des trucs porte ouverte pour... C'est con. Pour simplement voir des chevaux. C'est tout. Gérard, il y a vomi de porc sur l'IRC qui te demande si tu as fait la Deuxième Guerre mondiale. Non. Il te demande pourquoi. Et la Troisième ? Il n'y en a pas trois. Il y en a eu deux, donc je n'ai jamais fait ça. La Guerre du Golfe ? Non, mais ça, ça n'a rien à voir. Ça, c'est des questions... Il te demande pourquoi tu ne l'as pas faite. Je ne l'ai pas faite, c'est tout. Il n'était pas engagé, il n'a pas gagné. Tu étais réformé ? Non, non, j'ai fait mon armée normalement comme tout le monde. Donc, j'ai fait douze mois. Ils t'ont accepté, toi, là-bas ? Ben oui. Pourquoi ? Oui. Je voulais savoir, est-ce que tu avais participé au défilé du 14 juillet ? En Allemagne, oui. Mais pas sur Paris. Tu as défilé ? Ben, en Allemagne, oui, à moins 17 degrés. Où ça ? Et tu as défilé en quelle tenue ? En treillis, avec les chevaux. Non, non. Il avait un petit string à dentelles roses. Bon, ta gueule, tu t'écrases parce que tout à l'heure, tu as dégagé, toi. OK ? Donc, troisième question. Peut-on faire carrière en faisant l'armée ? On va s'écouter un petit disque. Un petit disque, et puis on se retrouve tout de suite après. Ouais, on est en train d'atteindre les 2300, là. Ça va arriver bientôt. Gérard, ce soir, tu cartonnes. Mais ça, c'était prévu qu'il fallait qu'on cartonne ce soir, donc... Allô ? Allô, Gérard ? Canis. Allô ? Allô ? Allô ? On n'entend plus rien. Et Gérard ? Ça y est, pile d'art. Tu n'as rien fait, Gérard. Ça y est, ça commence. Les auditeurs, vous entendez, là ? C'est imperceptible. On n'entend rien. Attends, je vais toucher un bouton. Je vais toucher un bouton. Allô ? Allô ? Allô, vous l'entendez, là ? Allô ? C'est mieux, là. C'est mieux. C'est pas 30 secondes, on l'entend pas. Canis ! Vous l'entendez, Gérard, là ? Oui, on l'entend. Vas-y, parle. Parle, Gérard, parle. Canis ! On t'entend, impeccable. C'est bon, c'est bon, c'est bon. On récupère Canis. Oh ! Merci, quand je parle. OK. Canis, le jour-là. Tagada. Oui. Andouille. Oui. Croupion. Je suis d'Andouille. Oh, tu t'écrases, toi. Tony. Bonsoir. Et prothèse pour terminer. Et donc, vous avez pu réfléchir à la question, donc je la répète. Peut-on faire carrière en faisant l'armée ? On va demander à Tony. Moi, je sais pas. Enfin, moi, si j'avais l'occasion de faire carrière en faisant l'armée, je la ferais. Mais ça me branche pas du tout, l'armée. Pas chaud. Mais la Légion, il parle. Il paraît qu'on peut faire carrière. De toute manière, quand tu fais l'armée dans la Légion, de toute manière, tu t'engages un peu. Ouais, ouais. Non, mais il y a des débouchés en tant que, je crois, on m'a dit, un gardien de chef dans l'Atlas. Ouais, c'est ça. Alors, Tony. Qu'est-ce qu'il y a ? Tony, tu réponds correctement à la question, parce que sinon, ça va mal se terminer pour toi. Tu vas retourner chez toi. Écoute, c'est ce qu'on m'a dit. Je sais pas, moi. Ouais, ouais, ouais. C'est ce qu'on t'a dit. Depuis tout à l'heure, tu m'assumes que moi, je reste imperturbable. Ouais, ouais, tu restes imperturbable, mais tu réponds la moitié à côté des questions. Bah non. Quand on te pose des questions, tu réponds les trois quarts à côté. OK ? Alors, si c'est pour répondre des conneries, c'est pas la peine qu'on t'appelle constamment pour faire les débats. OK ? Je me drogue. OK, bah si tu te drogues, tout à l'heure, tu vas retourner écouter la radio tranquillement. C'est tourné, Tony. Prothèse. Ouais, je pense que c'est possible, ouais. Ouais, mais dans quel sens ? Pour toi, ça peut être possible. Toi, ça m'étonnerait, parce que c'est lui que tu t'es fait réformer, donc... Bah ouais, justement, je m'étais renseigné au début à la caserne de chez moi. On m'avait dit que je pouvais faire carrière dans Maître Chien. D'accord, on verra ça après. Rigo, t'avais peut-être une question ? Non, il y a juste Davy One. Attends, je lis vite fait. Il demande si lorsque t'as fini de faire l'amour avec Sandy, tu l'as remis le couvert. Non, mais ça, c'est pas du tout le thème du débat. Donc, si c'est pour dire des conneries comme ça, comment qu'il s'appelle ? C'était Davy One, et on te demande aussi, c'est Oxyd qui te demande si quand t'as été parachuté, est-ce que ton débat est suite au fait que tu n'avais pas de parachute ? Ouais, ça, je vois pas du tout. C'est incompréhensible. Ouais, c'est incompréhensible. Prothèse, toi ? J'ai déjà répondu, genre. Donc, t'as répondu, croupion. Ouais. Donc, pour toi ? Bah, malheureusement, parce que malheureusement, on peut faire carrière. Donc, c'est chiant, il y a des gens qui font la guerre, ça, c'est chiant. Et heureusement pour certains. Parce que tous ceux qui ont échoué au concours de maître chien, au concours de la police, bah, ils vont dans l'armée, quoi. De toute manière, dans l'armée, tu peux très bien faire ton service militaire dans la gendarmerie ou dans la police. Faut pas l'oublier. Ouais, non, mais en général, ceux qui font carrière, ils font pas carrière dans la police. Non, mais ceux qui veulent passer, ceux qui veulent être gendarmes ou policiers, peuvent le faire en faisant leurs 12 mois. Ouais, c'est parce qu'ils ont raté leur concours. Non, non, non, non, non. Non, parce que... À l'armée, à l'armée, ils te demandent ce que tu veux faire, et tu peux préciser si tu veux être dans la gendarmerie ou dans la police, ou passer tes permis. Ou coiffeur. Ou même, ça, cuisinier. Ouais, t'as plusieurs trucs, t'as cuisinier, t'as un permis, coiffeur, on va passer, on va pas s'éterniser sur tout ça. Andouille. Parce que généralement, comme Tagada, les gens, si Tagada avait fait l'armée, il aurait fait coiffeur. Non, mais attends, on va demander à Andouille. Et pas le mitrailleur. Andouille. Oui, bah, écoute, moi, je pense qu'effectivement, c'est possible. Oh là là, mais qui c'est qui a un téléphone pourri, là ? C'est pas moi. C'est un portable. Donc, toi, alors ? C'est quelqu'un qui a un portable. Non, mais c'est tout à fait possible, à partir du moment, déjà, où on le veut vraiment, parce qu'il y en a qui y vont uniquement, ça leur fait chier. Ouais. Et puis, il y en a qui... Oh, on laisse parler les gens, s'il vous plaît, merci. Ouais, on me laisse parler, moi. Et d'autre part, il y en a qui aiment vraiment ça, donc ils finissent par s'engager. Et c'est particulièrement les gens qui aiment bien se faire boucher le cul, quoi. Ouais, mais... Non, mais ça... Bon, ça, Andouille, je vais te dire une chose, que la personne qui veut s'engager... Euh, Fildar, s'il te plaît, merci. Y a rien, Gérard. Ceux qui veulent s'engager, c'est leur problème, hein. Oh, t'arrêtes de s'y plaître, toi, quand je parle, s'il te plaît, merci. Donc, je réponds à la question d'Andouille. Donc, y a certaines personnes qui peuvent s'engager au bout de 6-7 mois, hein. Voilà. T'es gada ? T'es engagé à quoi ? Dans l'armée. Ah, d'accord. Et faire, en fait, leur métier de l'armée. Ouais, ils peuvent s'engager sur une... Sur une durée, je crois que c'est de 2 ou 3 ans, je sais plus exactement. Mais c'est quoi, le métier de l'armée ? Ça consiste en quoi, faire l'armée comme métier ? Ben, c'est obligatoire, hein. Maintenant, tu peux pas y échapper, hein. Sauf si t'es père de famille ou si t'es... Non, mais si, par exemple, toi, t'imagines, toi, tu t'es engagé à l'armée, à faire 3 ans d'armée. Qu'est-ce que tu fais à l'armée pendant 3 ans ? Ben, pendant 3 ans, tu peux monter de grade et tu peux commander ceux qui vont à l'heure actuelle. Mais faire quoi ? Ben, j'ai commandé à faire quoi ? Faire leur lieu au carré, à éplucher des patates ? Ben ouais, ça, éplucher des patates. Maintenant, à l'armée, faut dire une chose qu'ils ont... Non, non, il y a des mixeurs. Non, non, ils ont des trucs exprès. Tagada. Ah, non, attends. Oui, il y a INT qui te demande si t'as appris à lire à l'armée. De toute manière, t'as pas besoin d'apprendre à lire à l'armée, tu... Ça se saurait, sinon. T'as pas besoin de savoir lire pour faire l'armée ? Pas besoin, hein. Il suffit de savoir te torcher, c'est tout. Voilà. Tagada. Tang, T-A-N-K. Tagada ! Oui ? Alors, moi, je pense que... Franchement, non. Alors, tu peux préciser ? Euh... Non. Non ? Alors, Tagada, je te conseille une chose. Soit que tu réponds correctement aux questions quand on te les pose, et quand on te demande de préciser, tu le fais, ou sinon, tu gerbes. C'est bien précis. C'est admissible. C'est clair ? Ok. Ok ? C'est net. Alors, je te préviens, c'est le dernier avertissement que je te donne depuis tout à l'heure. Merci. Au prochain, tu dégages. Hein ? Ou sinon, tu vas passer voir Manu, il va te mettre les points sur les îles et barres sur l'été, comme je dis souvent. Tu sais qu'il va mettre les barres ? Ouais, ouais, tu vas voir. Alors, Tagada, tu vas voir Manu, s'il te plaît. Allez, hop. Euh... Canis... Canis... Moi, Gérard, si j'avais dû rentrer dans l'armée, ben, ouais, j'aurais bien voulu... J'aurais bien voulu, mais... Oui, on peut, je pense, ouais. Oh là là, elle est où, elle ? Elle est où, elle ? Elle est où ? Si tu t'amuses à faire des conneries, tout à l'heure, je vais me lever, je vais te massacrer. Ah ouais ? Ok. Tu vas pas commencer le premier débat ? Tu vas me faire des tortures indiennes et tout ? Ah ouais, tu vas voir. Pulgure au poing ! Ouais, t'as l'air pulgure au poing. Flak au gire ! Donc, Canif, pour terminer. Ben, je pense que Gérard, moi, je pense qu'on peut... Oui, on peut s'engager dedans, ouais. Non, mais est-ce qu'on peut faire carrière ? Ben oui, c'est ce que je te dis, on peut faire carrière dedans, ouais. D'accord. Gérard, t'es prothèse ? Ouais, prothèse. Je voulais savoir, parce que comme toi, t'as fait ton service, t'es un peu enseigné sur le tout, quoi. Je voulais savoir si on pouvait faire un animateur radio à leur maison. Non, pas du tout, tu vois. Tu peux inventer une radio, Radio Kaki, par exemple ? Non, parce qu'ils ont leur système de radio à eux, donc c'est pas... C'est de la Cibi qui font ça, Gérard ? Non, non, non, non, non, non. Ils font quoi ? Euh, oui. Il y a Cyber Ticket... Titi sur l'IRC qui dit que la fanfare de la caserne de Surenge ou Terremix pour motiver les troupes de Corvée de Chiotte, c'est vrai ? N'importe quoi, lui. Bon, t'arrêtes, Fildar, avec ça. Ça, on le sait, hein. Donc, quatrième question, ça, ça va intéresser Canif, Andouille et Croupion. Ah, c'est une question pour des meufs. Peut-il supprimer l'armée aux femmes de nos jours ? Alors, on va demander à Canif, parce qu'apparemment, vous êtes vachement bien réveillé, ça fait peur. Ben écoute, Gérard, on attend que tu nous cites, quand même. Mais non, mais, hé, au début, je vous pose la première question, je vous demande à tous de réagir. Maintenant, quand je demande, faut-il supprimer l'armée aux femmes, quand j'ai pas besoin de préciser, donc... Bah, tu vas pas te plaindre ! Bon, écoute, Gérard, on va pas te plaindre. Oh, tu te calmes, toi ! Comment elle parle, là ? C'est laquelle, là, qui s'énerve, là ? Oh, tu parles à Gérard, là, ou... C'est quoi, c'est quoi, cette bouffonne ? C'est laquelle, là, qui s'énerve ? Ben, mais j'ai lu une ! Andouille ! Oh, pisseuse, va ! Et Andouille ! Andouille ! Va m'emmener au standard, si j'y suis ! Allez ! Allez, Gérard ! Allez, Gérard ! Allez ! De voir ! Canip ! Bon, écoute... Moi, je veux ce numéro, parce que j'adore les dominants. Non, non, non, c'est bon, c'est bon ! Canip ! Oui, oui, bon, donc, ben non, je pense pas, parce que moi, j'aurais bien voulu, mais bon, la plupart des meufs, elles veulent pas la faire. Ouais, non, mais, je te demande, faut-il supprimer... Je te dis, je te dis, pour moi, moi, pour moi, non, je pense pas, parce que moi, j'aurais bien voulu la faire, l'armée, mais... Il y en a beaucoup qui veulent pas le faire, donc, je pense que, vu la majorité, ouais, je pense qu'il faut le supprimer, ouais. Ouais, mais, de toute manière, toi, à 19 ans, je pense que c'est un peu... C'est un peu jeune, encore, hein ? Ah, mais, de toute façon, je les ai fait tomber, hein, donc... Ouais, non, non, mais, même, de toute manière, faut que tu te fasses recenser d'être la majorité, hein, donc... Ouais, ils en parlent... Oh, là, qui c'est qui s'amuse, là ? Ça commence à bien faire ! Tagada ! Chier, hein ! Et je peux répondre à la question, Gérard ? Non, mais, à la minute, toi ! Vas-y, 5 minutes ! Tagada ! Oui, moi, j'étais avec Manu, tu peux me répéter la question ? Alors, faut-il supprimer l'armée aux femmes ? Ah, oui ! C'est pour toi, ça, Tagada ! Alors, moi, tu vois, je me l'ai pas fait écouter assez tôt, donc j'ai dû la faire. Ouais. J'étais dégoûté. Bon, maintenant, ça va mieux. C'est propre, hein, tu me diras. Non, mais, Tagada, tu prends ta voix normale, tu prends pas la voix d'un travelo, d'accord ? Parce que, tout à l'heure, tu as dégagé, ça va être le dernier... Ça va être vite fait pour toi, parce qu'il y a d'autres personnes qui veulent participer au débat. Ok ? Alors, soit que tu réponds correctement, soit que tu dégages. Alors, je viens de répondre correctement, et t'as vraiment aucun respect pour la dignité humaine, hein, parce que c'est, depuis l'opération, c'est ma nouvelle voix, tu vois ? Ça me plaît pas ? Hop, c'est bon, Manu, tu me mets quelqu'un d'autre, parce que là, je crois que c'est pas... Je vais pas continuer avec lui comme ça. Gérard, je voulais te demander, est-ce que les femmes, elles font la même chose que les hommes à l'armée, ou pas ? Euh, oui. C'est-à-dire ? Ben, ils sont obligés de faire... Elles font pipi debout, tout ça ? Non, non, mais... Non, mais ça, c'est... Non, c'est pas pareil. Mais elles sont obligées de faire comme les hommes, c'est-à-dire les corbets... Les pompes, tout ça ? Ouais, mais ça, c'est obligé. Attendez, s'il vous plaît, merci. Attendez, parce qu'il y a Sexe sur l'IRC qui te demande si, quand tu étais à l'armée, tu te mettais la mitraillette dans le cul quand on te privait de coton-tige. Bon, ça, je vais même pas y répondre. Je réponds pas aux conneries comme ça sur l'IRC. Est-ce que je peux répondre ? Euh, Andouille. C'est pas grave. Donc, je te mets à préciser que Manu m'a repris à l'antenne, et qu'il m'a calmée. Ouais, bah, t'as intérêt de te calmer, sinon tu vas faire comme ta gada, tu vas avoir... Pisseuse. Bah, tu te calmes, hein. Ouais, bah, c'est toi qui vas te calmer, parce que tout à l'heure, je vais passer à croupion tout de suite. Alors, fais gaffe. Ouais, passe à moi. Moi, je suis à ton numéro, parce que t'es une dominante, toi. C'est bon, je peux parler ? Vas-y, alors, dépêche-toi. Toi, tu m'excites. Oh, Tony, tu t'écrases, s'il te plaît. T'aurais été sergent-chef ? Alors, bah, moi, non, moi, je suis contre. Parce qu'en fait, si les ananas, elles ont envie de s'engager, bah, elles ont bien raison. Et moi, personnellement, j'irais quand je serais plus défait au mec. Mais pour l'instant, ça va, donc j'irais pas. Bah, de toute manière, tu serais obligé d'y aller, hein. Faut pas l'oublier. Gérard, à la place... Pardon, à la place de ta gada, on a que je m'en fous. Ouais, c'est léger. Je m'en fous. Moi, Génie, je voudrais répondre à la question sur l'armée, là. Parce que tu parlais des filles. Moi, j'ai un copain qui fait l'armée, et il m'a dit que les filles... Eh, tu peux préciser ton nom quand tu parles ? C'est Tony. C'est Tony, bonsoir. Ouais, bah, pour l'instant, je vais demander à Croupion, tu vois. Toi, t'es un peu trop pressé. Toi, tu m'aimes pas, je sais pas pourquoi tu m'aimes pas. Ouais, bah, tu vas te calmer, s'il te plaît. Moi, je t'aime bien, Tony. Ah, merci. En plus, toi, t'es une dominante. Moi, tu m'écoutes, y a de la meuf. Oh, ça supplie, là ! Allez, on revient au débat. Croupion. Oui. Bah, y a des femmes, oui, qui sont dans l'armée. Mais, en général, c'est des lesbiennes ou des mal baisées, donc... Non, mais... C'est pas gênant pour la société qu'elles soient là-dedans, quoi. Eh, Croupion ! Oui ? Croupion, t'évites un peu trop les vulgarités, quand même. Il est 0h54, on va pas commencer à jouer sur des saloperies, hein. Mais non, je dis pas des saloperies. Les femmes dans l'armée, c'est des saloperies. Oh, Tony, s'il te plaît, merci. Eh, Croupion, vous vous calmez. Rigo, pour l'IRC. Sur l'IRC, on me demande si, en fait, c'est l'armée du salut que t'as fait. Non. Euh, Tony, maintenant. Donc, ouais, tu parlais des femmes. Moi, j'ai un copain qui fait l'armée. Et il m'a dit que les femmes, fallait pas croire que c'était, enfin, des mimours, G.I. Jane, tout ça. T'as des copains, toi ? Parce que... Ouais, ouais, j'ai des copains et des copines, aussi. Oh, on se calme, là, derrière, quand y en a qui parlent. Parce que ça, tout à l'heure, ça m'a chauffé. Un petit peu de respect, quand même, merde. Tony ! Ouais, euh... Donc, ouais, c'est ce que je disais. Et, euh... Donc, ouais, les femmes, faut pas croire qu'elles ressemblent à... C'est des canons, quoi. Parce que, en fait, c'est des boudins. Bah, oui. Là, je vais te dire... C'est la plupart. Et puis, ouais, elles sont souvent à l'infirmerie. Et puis, euh... Enfin, les bidasses, elles font tout pour pas se blesser, en fait. Elles ont toujours leurs règles. Enfin, bon, c'est chiant. Oh, mais ça, euh... Ça, c'est... Ça, c'est leur problème. Oh ! On meurt, les meufs, là. Eh, oh, on se calme. Vas-y, je t'en prie. On se calme un peu, là, derrière, s'il vous plaît. Merci. Prothèse. Ouais, bah, moi, Gérard, je pense qu'il faudrait leur supprimer, parce que... Si les femmes se mettent à faire l'armée, après, il n'y aura plus personne pour faire la cuisine quand on regarde la télé, quoi. Non, mais attends, Prothèse, je vais te le dire, maintenant, ça va devenir... Ça devient obligatoire, hein. C'est inadmissible. Ouais, mais ça devient obligatoire, hein, maintenant. C'est obligatoire, maintenant, hein. Oh, mais ça y est, là ! Celui qui n'arrête pas de jacter, là, ça commence à bien faire. Euh, Rigo ? Ouais, c'est encore Cybertiti. Comme tu lui as dit que t'avais pas fait l'armée du salut, il te demande si t'as fait l'armée des douze singes. Mais lui, il a pas fait l'armée des cons, lui, ça vaudra mieux. Je m'en fous, maintenant, pour finir. Euh, bah, moi, personnellement, les meufs, elles font ce qu'elles veulent, quoi. C'est tout ce que tu peux préciser ? Bah, je suis pas une meuf, alors je m'en fous, quoi. Bah, ouais, mais je te demande, est-ce qu'il faut supprimer l'armée aux femmes, maintenant, oui ou non ? Bah, tu peux essayer de préciser ta pensée, quand même. Bah, franchement, je sais pas. Hé, hé, hé ! Hé, avant qu'on t'appelle, t'aurais pas fumé la moquette, toi ? Mais t'es pas le tabou, là ? Parce que, dis donc, apparemment, vous avez l'air de répondre la moitié des... à côté des questions, hein. Mais c'est toi qui mets pas le feu, Gérard. Non, mais attends, je mets pas le feu. Je disais mieux, les gars, vous répondez à côté. Franchement, hier, c'était plus... Enfin, je sais pas, ça pulsait, quoi. Là, c'est... T'as pas le droit, t'as pas le droit. C'est tout, tout je m'endors et tout. Non, je critique pas ton débat, GG1, je constate, simplement. Et alors, mais de toute manière, le premier débat, il se passe toujours... Ah, d'accord, excuse-moi, je vais attendre le deuxième. Non, non, mais de toute manière, au deuxième, c'est pas sûr qu'on reprenne les mêmes, hein, pour s'y déconner, hein. C'est la première fois que je passe à l'émission de Gérard. Stop ! Pour reprendre un peu le thème du débat et parler de l'armée un peu... Fais-nous un petit sondage. Voilà, c'est ce que je vais faire, un petit sondage. À la question, combien donneriez-vous à une armée ? 32% des gens ont dit qu'ils donneraient 2 euros. 28% donneraient leurs animaux. 40% donneraient leurs domestiques. 40% donneraient leur approbation. Et 1% ont déjà donné leurs dents et n'ont pas voulu donner leur moustache. Qu'est-ce que t'en penses ? N'importe quoi ! Rigo, sur IRC ? Sur IRC, il y a toujours du monde. Enfin, bon, je passe les questions, genre, GG est-il homo ? A-t-il eu des rapports agibles avec une femme depuis son adolescence ? Ça sert à rien, quoi. Non, mais ça, c'est pas du tout... Ah, on te demande si tu connais Rambo. Non. C'est ça. J'ai un peu, peut-être. Bon, on va continuer, là, parce que... Il est quand même déjà, j'ai erreur, 57, donc il faudrait peut-être qu'on accélère. Il reste encore 1, 2, 3, 4, 5, 6 questions. On a déjà fait l'armée. Oui, mais plus que 3 minutes, GG. Alors, quels sont les inconvénients de... Ça va suffire, Manu. Quels sont les inconvénients ou les avantages de l'armée ? On va demander ça, ben, je m'en fous. Franchement, tu vois, les inconvénients... Ben, je sais pas, quoi. Je l'ai pas fait, moi, l'armée. L'auditeur qui siffle, il faut qu'il arrête, hein. Ouais, franchement, ouais. Ouais, GG, je te dis, moi, j'ai pas fait l'armée, donc je connais pas les inconvénients ni les avantages, donc je m'en fous, quoi. D'accord, tu t'en fous complètement. Non, je te dis, je l'ai pas fait, donc je peux pas te répondre, quoi. Prothèse. C'est logique. Ok, prothèse. Ouais, je pense que les inconvénients, ça pourrait être qu'on peut pas se faire les meufs, comme on l'a précisé tout à l'heure. C'était des gros boudins. Elles sont où, les meufs ? Et les avantages, je sais pas, j'en vois pas trop. Tony ? Ouais, les inconvénients, c'est qu'on peut pas se baisser, et les avantages, c'est que... Enfin, y'en a pas, en fait. Alors, attends, tu peux préciser, là, parce que je vois pas du tout le... Tu veux que je précise ? Ton nom. Non, mais tu précises la pensée que t'as. C'est qu'on peut pas se baisser, mais je peux pas le dire, ça passe pas. Ouais, d'accord. Alors, Tony, ça commence à bien faire, hein, toi. Non, il faut analyser la chose. Groupion ! Groupion ! Les avantages, c'est que quand t'es illettré, bah, tu peux trouver du travail. Mais les inconvénients, bah, c'est que ça fait chier tout le monde, quoi. Tu peux préciser le... Les petits jeunes qui ont pas envie de le faire, et puis ils sont emmerdés pour donner dix mois de leur vie à ces connards, quoi. Non, mais attends, parce que... Oh, Tony, ça commence à bien faire, toi, là, maintenant. C'est pas moi, là, là. Ouais, bah, tu vas te calmer, parce que tout à l'heure, ça va être... Arrête de t'en prendre toujours à Tony. Oh, Andouille, tu te la permes ! Maintenant, tu vas répondre ! Oh, Andouille, je vais te parler à... Eh, ta gueule, Andouille ! Bon, alors... Tu sais pas, là, bordel ! Eh, eh, tu mets Tony et Andouille ensemble, là, qu'ils arrangent leur salade, quand ils auront terminé... Nous, dimanche aussi, on va se marier. Ouais, ça suffit ! Tu mets Tony et Groupion, là, en rentonne, ils vont faire leur petite popote ensemble, parce que c'est pas dans le débat qu'on fait leur popote. Euh, Canif ? Bah, écoute... Écoute, tu peux me répéter la question, s'il te plaît, Gégé ? Alors, quels sont les inconvénients ou les avantages de l'armée ? Bah, écoute, pour moi, les inconvénients, c'est l'uniforme. Ouais. Et puis, l'avantage, bah, je sais pas, il y a plein de gars, quoi. T'as le choix, au moins, hein. Là, t'es sûre de pas être toute seule, hein. Ouais, mais, euh... Comment ça, euh... Bah, je veux dire, si t'es infirmière, là-dedans, je veux dire... Bah, c'est un ken, quoi. Tu peux y aller, hein. Ouais, mais ça, de toute manière, tu peux très bien faire ton armée en étant infirmier ou infirmière, hein. Ça, c'est strictement pareil, hein. Ouais, non, mais pour moi, c'est ça, les avantages, hein. Ouais, mais ça revient à peut-on faire carrière en faisant l'armée, tu vois. C'est à peu près le même rapport que ce que tu me dis. C'est à peu près pareil que la troisième question qu'on avait posée, hein. Ouais, ouais, c'est vrai. Euh, Rigo ? Oui, il y a Davy1 sur IRC qui te demande si tu connais le... Enfin, si tu as connu le soldat inconnu. Non. Non, ok. Et Ryan, non, tu ne connais pas Ryan ? Bah, enfin, sur IRC, on m'a dit que Gérard, c'était le soldat Ryan qu'on n'a pas retrouvé. Euh, est-ce qu'on va le sauver, au moins ? Ça y est, ils ont... Bah, il n'a pas été sauvé, ouais. Toi, fais gaffe, parce que tout à l'heure, je vais te sauver ma main sur ta gueule, quand même. Oh, oui, c'est calme, là. Ouais, c'est bon, c'est bon, c'est bon. Alors, ennui, maintenant. Ouais, alors, l'inconvénient, c'est qu'on a l'impression de perdre son temps là-bas. Ouais. Et l'avantage, c'est que, justement, on ne perd pas son temps là-bas. Alors, tu peux préciser le fond ? Bah, oui, donc, l'inconvénient, c'est que tu perds ton temps quand tu es là-bas. Ouais. Et l'avantage, c'est que tu ne perds pas ton temps quand tu es là-bas. Ok. Ouais, d'accord, je vois à peu près. C'est logique. Ouais, c'est logique. Non, mais de toute manière, je pense qu'il n'y a pas beaucoup d'inconvénients ni d'avantages là-dedans, parce qu'en fin de compte, les avantages que tu as, c'est que... De toute façon, tu es obligé de la faire, donc... Voilà. Et en plus, t'es payé. Ouais, t'es payé. T'es payé combien, Gérard, à l'armée, justement ? Je crois que c'est 4 euros. Non, non, non, attends, normalement, si je me... Oh, on se... Bon, ça y est, oui. Je les ai coupés, je les ai coupés. Exprès. Normalement, je pense que ça ne te fait même pas la moitié de ton salaire. Tu dois toucher à peu près 1 500 balles... C'est le SMAC ou pas, la main ? Non, même pas. Même pas ? T'as le droit à une cartouche de cigarette par mois et tout. Gérard ? Oui ? Ouais, c'est prothèse. On a parlé ce soir, je voulais savoir si t'avais fait le parcours du con en te battant. Alors, quand tu dis des trucs comme ça, tu vois, au lieu de dire con et puis battant, parce que toi, t'as l'air d'être con quand tu poses une question, donc pour toi, tu ne l'auras pas fait, le parcours du combattant, et ça, c'est un truc qui est assez dangereux à faire. Ouais, bravo, Gégé. Bravo. Il y a de l'air, alors ? Donc, la sixième question... C'est plus fort. C'est la sixième question, là ? Ouais. Déjà ? Ouais ! Vous allez réfléchir et on va s'écouter un petit morceau, à moins qu'il y ait une question IRC... Non, il y avait juste Denis qui donne les avantages de l'armée. C'est le premier lieu où on a accepté Gégé sans faire d'histoire. Le désavantage, c'est qu'ils ne l'ont pas gardé. Bon, ça, je ne vois pas du tout le rapport. Gégé ? Ouais ? C'est qui ? Je m'en fous, là. Tu peux te mettre en antenne avec Andoï, là, il y a moyen de moyenner. Ben, rien. Vous allez aller tous en antenne, maintenant ? Je vais vous poser la sixième question. La sixième question, là ? Peut-on s'engager dans l'armée si on n'a pas de boulot ? Oui, on va s'écouter Thierry Big Hop avec Yo-Yo, Passe-moi la moutarde, pour mon old dog. On se retrouve tout de suite après. Donc, un petit point sur l'IRC, on a dépassé les 2500, on en est à 2684, moins 3. Pourquoi moins 3 ? Parce qu'il y en a 3 qui viennent de partir. Ah bon, alors donc, on récupère Canif. Oui, c'est vrai. Oui, c'est vrai, je suis toujours là. Bonsoir, Andoï, j'espère que tu t'es calmée depuis tout à l'heure. Non, pas vraiment. Pas vraiment, mais tu vas te calmer. Non, je suis déjà pisseuse. Croupion ? Oui. Croupion ? Oui, oui. Tony ? Oui. Prothèse ? Salut, les loulous. Eh, je m'en fous. Ouais, je m'en fous. Donc, t'as pu discuter avec Andoï ? Non, j'ai pas pu, personne me... Non, n'importe quoi, on m'a filé un disque, là. Elle est où, la fameuse ? La fameuse, ben, tu as... Comment il parle de... Tu vas la récupérer tout à l'heure en rentonne, vous allez gérer votre petite salade, à l'instant. Non, mais j'ai... C'est ma miche, moi, c'est ma miche. Oh, ça y est, vous, merci. Donc, alors, on va demander à Canif si elle a compris la question. Ben, écoute, je m'en rappelle plus, j'ai rien. Ah, non, mais faudrait peut-être écouter quand je pose des questions. Je peux la remonter après le disque ? Je pense aux auditeurs qui viennent seulement de nous rejoindre. Alors, peut-on s'engager dans l'armée si on n'a pas de boudreaux ? Donc, Canif ? Ben, ouais, je pense, ouais. Mais tu fais quoi ? Tu fais quoi, toi, au fait, comme boudreau ? Moi, je suis secrétaire. Secrétaire ? Secrétaire comptable. T'es en tailleur ? Oh, hé, vous me tchonnez derrière, là ! Et vos commentaires, moi, je vous emmerde. Voilà. Comme ça, c'est bien répondu, tout ça. Moi, j'aime les femmes qui ont du caractère. Oh, tu t'écrases, toi ! Ça, tout à l'heure, tu as dégagé, toi, maintenant. Je vous préviens que, là, à 1h10, je vais gerber, hein. Ça va gerber sec. Non, gerbe pas. Voilà, c'est pas mal. C'est qui ? Ah, c'est une... parce que... C'est, ouais, c'est Prothès, c'était une cabine, je vais le rappeler. D'habiter mystère. OK. Donc, Canif a répondu. Andouille ? Ouais, bah, moi, je pense qu'on peut s'engager, effectivement. Voilà. Et j'ai rien d'autre à rajouter, parce que sinon, tu vas encore me gerber, alors je préfère rien dire. Voilà. Bon, alors, Andouille, c'est la dernière, c'est simple. Soit que tu réponds correctement, soit que tu gerbes tout de suite. C'est pas simple. Tu choisis. Non, non, non, elle passe à moi, avant. Hein ? Alors, Croupion ? Ouais. Donc, pour toi ? Bah, ça sert justement, quand t'as pas de boulot, à t'engager, ouais. Ouais, mais ça, c'est... Je pense qu'il y a beaucoup de personnes qui vont me répondre ça. Et quand ils arrêtent l'école, aussi, les gamins, ils vont à l'armée, non ? Non, non, non, non, ça... Non, mais attends, parce que l'armée... Faut que tu te fasses recenser à 18 ans. C'est une poubelle, l'armée, on dirait. Bah non, mais... Oui, oui, oui, c'est qui, c'est qui, là ? Canif, on peut ajouter quelque chose ? Oui ? Moi, aussi, j'avais entendu parler que, quand on voulait s'engager dans l'armée, il fallait pas avoir plus de 25 ans, je crois. Euh, non, je pense pas, parce que ça, j'en ai pas entendu parler, à mon avis. Non, non, attends, Tony, il y a une question, hier. Oui, il y a un Réa qui te demande si tu as rencontré Sandy à l'armée. Non, pas du tout. Sandy, je l'ai déjà dit la semaine dernière, comment que je l'avais rencontrée sur un magazine. Non, mais Sandy, elle a fait l'armée, par contre. C'est pas le débat sur les pouces qu'il fait. Elle réparait les tanks. D'accord, Tony ? Quoi ? C'est toi qui viens de répondre les tanks ? Pas du tout, pas du tout. Non, c'est moi, c'est moi, j'ai dit. Non, elle bosse à la banque. Donc, Tony ? Ouais. Donc, pour toi ? Ouais, bah, c'est sur l'engagement, c'est ça ? Hein ? Ouais. Peut-on s'engager dans l'armée si on n'a pas de boulot ? Peut-on s'engager dans l'armée si on n'a pas de boulot ? Bah oui, parce qu'on fout rien, on peut y aller. Non, je dirais... Hé, Tony ! Non, mais non. Attends, attends, j'essaye de réfléchir, là. Non, non, mais tu réfléchis vite, puis... Non, mais non, Gérard, ils te prennent pas à l'armée si t'as pas de boulot ? Bah, de toute manière, tu peux t'engager si t'as pas de boulot, hein. Pourquoi tu t'engages pas, toi, Gérard ? Eh, qu'est-ce que ça... Pourquoi que... Je t'emmerde, toi. Oh, oh ! Oh, oh, oh ! Non, mais moi, par contre... Eh, Tony, tu réponds, s'il te plaît. Ouais, bah, ouais, mais je suis tout à fait d'accord avec ce qu'a dit Rigaud, là. Par contre, moi, j'ai un exemple. J'ai une amie qui s'appelle Mélanie, et qui avait son bac. Et, euh... Donc, elle voulait s'engager à l'armée parce qu'elle s'est dit, « Ouais, j'ai un bac, maintenant, j'aimerais bien faire l'armée. » Et ils l'ont pas accepté. Mais attends, t'as pas besoin d'avoir un bac pour aller à l'armée ? Non, non, mais... T'as pas le droit à l'armée d'avoir un bac. Faut complètement instarber. Euh, Tony ! Pourquoi ? Tu réponds ? J'ai répondu, j'ai répondu. Attends, c'est bizarre, j'ai pas entendu ta réponse. C'est pas grave. Ouais, bah, Tony, je pense que... Non, mais non, mais vas-y, continue, continue. Y a pas que moi, allez, vas-y. Non, non, mais tu réponds ! Non, mais... Ça y est, l'engagement, il faut se faire en sensé. D'accord, voilà. Eh ben, enfin, dis-donc, t'es lourd à la détente, toi. C'est clair. Gérard, par rapport à l'armée, y a des V1 qui disent « Les fusils servent à fusiller, et les tanks, ils servent à t'enculer. » Ouais, bah, ça, je l'emmerde, lui. Euh, Manu ? Encore un petit sondage. La seule dernière, j'espère. L'avant-dernière. À la question « Combien donneriez-vous à une armée ? » 32% ont dit qu'ils donneraient 2 euros. Mais ça y est, tu l'as déjà fait, alors... Excuse-moi, il y en a une autre, il y en a une autre, il y en a une autre. Qu'aimez-vous chez une armée ? 50% des gens aiment bien, 25% des gens aiment beaucoup, et 100% aiment le balcon avec les drapeaux fan radio, je comprends pas. Ça... Toi, toi, toi, toi, tu vois, Pildar, tes conneries, ça, c'est tes conneries, ça. Non, c'est pas mes conneries. C'est tes conneries. On va demander la prothèse. Si... Oui, je suis là, ouais. C'est quoi, ça ? C'est Noël ou quoi ? Pildar, tu m'éteins ça tout de suite ! Ça me l'a dit. Pildar, t'éteins ça tout de suite ! Ouais, Gérard, c'est prothèse. Prothèse ? Ouais. Je pense qu'il est préférable de s'engager contre... Bon, t'arrêtes, Pildar, ou quoi, là ? Allô ? Allô, Gérard ? Allô ? Gérard, souris... Allô ? Vous entendez, Gérard, là ? Allô ? Qu'est-ce qu'il se passe ? Il a failli balancer le disque d'origo, donc... Prothèse ! Ouais, donc, je pense qu'il est préférable de s'engager quand on n'a pas de boulot, vu qu'on est payé à rien froté par tes caquilles, et j'aime bien les trahis. D'accord. Et je m'en fous, pour finir ? Bah, franchement... Il s'en fout ? Bah non, ouais, je sais pas. Oh là là, Doc Gynéco. Toi, tu vas gerber, toi. Ah ouais ? Ils sont pas réveillés, les auditeurs ? Je m'en fous, tu te réveilles, s'il te plaît, ou tu dégages ! Bah, je sais pas, franchement, si j'ai pas de ta faute... Mais il sait jamais rien, lui, pourquoi il vient ! Fume trop, lui ! Eh, tu reprends, je m'en fous, au standard, là, ça va pas. Ça va pas, là. Fume trop, là, ce gars. Enfin, bref. Donc, je peux vous dire une chose, que pour ceux qui ont envie de s'engager, ils peuvent le faire s'ils ont pas de boulot, mais comme l'histoire du bac, ça existe pas. Il n'y a pas besoin d'avoir un bac pour aller à l'armée. Ça, c'est des conneries. Quoi ? Même pas. Non, plus. Ok, alors voilà. Et toi, Gérard, alors, qu'est-ce que t'en penses de cette question ? Bah, moi, je viens d'y répondre. Mais je t'écoute pas. Bah, t'écoutes pas, t'as qu'à te déboucher les oreilles au lieu de faire des conneries. Alors, septième question. Faut-il parler de l'armée en cours ou à la télé ? On va demander à... Je m'en fous si ça va mieux pour lui. Ça va mieux pour lui. Ouais, j'espère. Alors, je m'en fous. Bah, à la télé, ouais, on voit des émissions, quoi. Non, mais je pense qu'on t'a demandé de te réveiller, là. Apparemment... Je réponds à ta question, là. Bon, alors, vas-y. Je te dis, les pubs et tout, on les voit à la télé, à l'école, il y a des mecs qui passent et tout, ils te parlent de l'armée, ils sont engagés, c'est beau et tout, c'est un métier. Et voilà, quoi. Ok. Prothèse ? Ouais, ouais, je sais pas. Je pense qu'il faut pas trop en parler à l'école et à la télé parce que ça pourrait donner des idées aux gens, quoi. Mais non, mais de toute manière, c'est ce qu'ils font, là, avec les... En cours, je ne sais pas, parce qu'on n'a pas des... On n'a pas d'étudiants. On n'a pas d'étudiants, là, avec nous, c'est dommage. J'aurais bien voulu avoir un étudiant pour savoir... Eh, moi, je suis étudiant. Qui ? Moi. Qui ? Moi, je m'en fous. Eh, t'appelles d'où, toi ? Je fais une thèse sur le shit, de Nantes. De Nantes ? Ouais. Et donc, à ton avis, ils en parlent, là ? Mais t'es étudiant en armée, toi. Non, mais est-ce qu'ils en parlent, là ? Est-ce qu'ils en parlent, là ? Bah ouais, il y a plein de pubs partout. Ah bon ? Il fait une thèse sur le shit, là, sur les tableaux. Une thèse sur le shit. D'accord. Je pense qu'à mon avis, je crois que t'es en train de me dire des conneries. Tony ! Ouais, il y a trop de pubs. L'autre fois, j'entendais, même sur Fun Radio, j'entendais une pub... L'armée de terre. Ouais, l'armée de terre occulte un mec avec une clé de 13 pour réparer les tanks. Donc, je trouve ça inadmissible. Tony ! C'est de la propagande. Tony, t'es sûr de ce que t'inventes, là ? Non, mais je te jure que ça passait. Non, mais il y a une pub en ce moment qui veut... Parce qu'en fait, j'ai l'impression qu'il n'y a pas assez de gens à l'armée. Ouais. Ils ne veulent plus y aller, donc ils font des pubs. Le pire, c'est qu'ils te mettent ça entre deux tubes. Ah, d'accord, entre deux tubes, t'as raison. Croupion. Ouais ? Bien tenu. Moi, je dis que non, il ne faut surtout pas en parler. Ça pourrait inciter les gens à le faire. Non, mais ça va, là... Bon, Gérard, t'écoutes les auditeurs, non ? Je suis en train de régler un problème avec Manu, ça ne te dérange pas, non ? Bon, Croupion. Oui, je te dis qu'il ne faut surtout pas en parler. Ça pourrait inciter les gens à le faire. De toute manière, pourquoi... S'ils en parlent, c'est pour inciter les jeunes à y aller, hein ? Oui, ben justement. Ok. Andouille ? Ouais, ben je suis désolée, moi, Fildar vient de me prendre en rentaine, donc je n'ai pas entendu la question. Non, attends, Fildar vient de te prendre en rentaine. Non, mais attends, Fildar, il est à l'arrière. Attends, attends, attends, Gégé, deux secondes. Hé, Fildar, tu te calmes, là ? Non, mais attends, c'est qui qui parle, là ? Comment tu parles à Fildar ? Qui c'est qui parle, là ? C'est mon père, non ? Non, mais attends, pour l'instant, ce n'est pas Fildar qui commande, c'est moi, c'est Médéba. Non, non, c'est pas toi. Non, non, je suis d'accord, Gégé, mais voilà, quoi. C'est Fildar qui commande. Non, non, c'est pas Fildar, non, Médéba, c'est moi. Alors, Andouille ? Fildar, c'est un petit teigneux, mais je l'aime bien, quand même. Bon, je m'en fous, tu te calmes, toi. Hé, Andouille, t'es blonde ou brune, concrètement, là ? Bon, je m'en fous, t'arrêtes ou tu dégages ? Andouille, elle est pour moi. C'est un boulot de merde, Manu, ça, je suis d'accord avec toi. Non, non, non, c'est pas Manu. Je m'en fous, t'arrêtes pas de faire chier son monde. Alors, Andouille, pour la dernière fois. S'il te plaît ? Andouille ! Oui ? Non, mais je te demande poliment si tu pourrais me répéter la question, s'il te plaît. Alors, faut-il parler de l'armée en cours ou à la télé ? Moi, je trouve qu'il faut pas en parler parce qu'on fait pas de politique à l'école. Non, mais attends, on parle de l'armée, on parle pas de la politique. Ouais, mais c'est la même question que la politique, faut pas nous prendre pour des cons, aussi. T'as changé armée par politique. Tony, si t'es pas content, tu dégages, OK ? Non, non, mais je suis content. Non, mais bon, c'est pour le dire aux auditeurs que t'as 15 millions d'auditeurs, faut les respecter, quand même. Ouais, ben attends, pour l'instant, toi, t'as... Parce que depuis 10 ans, c'est les mêmes débats et tu ranges... Bon, alors, Tony, tu dégages, allez, hop, t'es ennumé ! Hop, au revoir, Tony ! Non, je pense pas que t'es ennumé, hein ! Toi, Andouille, c'est pareil, au revoir, Andouille ! Allez, dégage, Andouille, allez ! Bah, si Andouille part, je pars. Ouais, ben, c'est bien, aussi, je m'en fous. Allez, dégage, je m'en fous. C'est bien, récupère... On est dans la merde, on n'a plus qu'à... Tu récupères 3 éditeurs, Manu, s'il te plaît. J'y vais, j'y vais, je les récupère, je vais les chercher, là, devant l'avenue, là. Alors, Canip ? Bah, écoute, Gérard, je crois que, de toute façon, notre avis compte pas vraiment là-dedans, parce que s'ils ont envie d'en parler, ils en parlent quand même, hein. Non, mais donc, je reviens à ce que Tony, soi-disant, qui disait, que c'était pareil qu'on... la politique, non. Parce que si on en parle à la télé, c'est que ça insiste pas les jeunes à vouloir perdre de l'armée. Comme Andouille a voulu. Comme Andouille a voulu les dire. Mais, moi, je pense qu'ils ont tout à fait raison de nous parler de ce qui se passe à l'heure actuelle dans certains pays. Donc, ça va être... Bah, ça va m'intéresser certains, de toute façon. Ouais, mais ça, ça va être la dernière question qu'on va poser. C'est rare, moi. Oui ? Tes prothèses, je voulais savoir, si, quand tu te mettais au garde-à-vous devant le général, t'avais la gaule ? Pas obligatoirement, non. Pourquoi ? Parce que ça t'est déjà arrivé, toi ? Bah, non, mais je te posais la question. Incroupion ! Oui ? Si on te gêne, tu nous le dis, hein. Ah, non, mais je vous écoute. Non, mais tu peux quand même parler, hein, parce que, pour l'instant... Le problème, c'est que, quand je parle, tu me dis de me taire, donc... Non, non, non, attends, pour l'instant, je t'ai rien dit, donc je te demande de réagir. Oui, bah, c'est... Parce que vous êtes plus que 3 sur 7... 6, hein. D'accord. Donc, tout le monde a fait le tour de la question. Ouais, ouais. Alors, là, il y a une question qui va être bien, parce que je pense que c'est Canif qui a voulu en parler, ou même toi, Incroupion. C'est laquelle question, Gérard ? C'est la numéro combien ? C'est la 8. Encore ? 2, putain. Ouais, ouais. Non, mais, hé, si t'es pas content, tu vois, tu poses ton casque et tu dégages. OK, tu rentres chez toi. Aïe. Hé, Rigo, c'est pas à toi que je m'adresse. Putain, maintenant, je barre aussi. Alors, pourquoi faut-il faire 10 mois au lieu de 12, maintenant ? Alors, on m'a demandé à Canif. Bah, là, là, j'en ai vraiment aucune idée, Gégé. Non, mais, avant, c'était 12 mois, maintenant, c'est passé à 10, donc, le pourquoi ? Ah, mais, c'est ce que je te dis, je ne sais absolument pas. Hum, d'accord. Et toi, croupion ? Euh, c'est pour des questions de budget. Comment ça ? Bah, il gagne 2 mois, il gagne du fric en se vendant que 10 mois. Bah, non, euh... C'est parce que ça a trop gueulé, je pense. Non, mais, je pense... Non, mais, comme ça, il ne paye pas les mecs pendant 2 mois, il ne les paye plus, quoi. Ah, ouais, c'est une bonne idée, ça, je crois. Bah, non, mais, même, de toute manière, ils sont... Oh, vous arrêtez, là, derrière, là ? Vous revenez bosser, là, correctement ? Bon, attendez, je reviens. Ah, d'accord. OK, on est tous 3, là. Bon, bah, euh... OK, ça va ? Bon, on rigole, vous revenez, là. Donc, prochaine question. Alors, Prothès, tu peux répondre, s'il te plaît ? Ouais, ouais, donc, euh... Bah, tu peux me répéter, j'ai pas bien entendu. Donc, la question, euh... Pourquoi faut-il faire 10 mois au lieu de 12 ? Disons, avant, c'était de 12, et maintenant, c'est passé à 10. C'est moi qui me suis trompé dans ma question. C'est des problèmes de calendrier avec les années bisextiles, non ? Non, non, non, non, non, parce qu'avant, c'était 12 mois, comme c'est... Et puis, maintenant, ça passe à 10 mois. Donc, on se demande pourquoi ils s'amusent à changer... Oh, vous arrêtez avec la lumière et vous revenez bosser, là ! Parce que tout à l'heure, ça va chauffer pour vous 3, là, hein ! Tu fais des blancs, Gérard. Donc, euh... Prothès, toi, alors ? Ouais, donc, je te disais, je pense que c'était un problème de calendrier, non ? Bah, non, parce qu'en fin de compte, non, il n'y a pas d'histoire de calendrier, là-dedans, hein. Ah bon ? Parce que c'est... Au début, c'était passé de... C'était 12, maintenant, on est... Ils sont descendus à 10, on ne sait pas pourquoi. Ils ont raison, finalement, on se fait moins chier à 10 mois que 12 mois. Ils vont descendre à une semaine, là, ça va être une semaine, après. On récupère, ok ? Ouais, alors, on accueille 3 nouveaux auditeurs, on accueille Face de Paix, Petit Fion et Général Moncu. Bonsoir. Bonsoir à tous. On a un Général, ouais, qui vient d'un petit peu de corps d'armée. De l'armée de l'air. Général Moncu, ouais. Apparemment, c'est ce que... Et l'autre ? Il y a Petit Fion. Ouais, bah voilà, c'était Petit Fion, pour finir. Petit Fion, bonjour. J'ai avec moi le sergent Susmon Gould, si vous voulez. Ouais, non, mais ça y est, bon, alors, maintenant, on va demander à Face de Paix... Et Face de Paix, là. Bon, Face de Paix. Ouais, salut. Salut. Ça va ? Donc, toi ? Oui. Donc, la... Alors, tu vois, moi, alors, je t'explique. Moi, je pense que, ouais, bah, 10 mois, franchement, c'est plus cool que 12, quoi, parce que les mecs, déjà, ils y vont, c'est pas marrant, quoi, t'sais, ça les galère. 10 mois quoi ? Bah, 10 mois de l'armée, quoi, c'est mieux que 12, quoi. De l'armée ? De l'armée ! De l'armée. De l'armée. Bon, euh... Fildar ! Ouais. D'accord. T'écrases. D'accord. Donc, euh, vas-y, je t'écoute. Bah, c'était pas bien. Je vais t'écraser. Ouais, alors, moi, je disais que, voilà, quoi, quand tu fais 10 mois, c'est classe, parce que 12 mois, c'est relou. Non, franchement, concrètement, le mec qui part faire son service militaire... Ouais. On est d'accord, c'est relou, 10 mois, 12 mois. Alors, il vaut mieux qu'il en fasse 10, t'as compris ? Non, mais de toute manière, maintenant, au début, c'était 12, maintenant, c'est passé à 10, on se demande pourquoi. Mais de toute manière, que tu partes 10 mois ou 12 mois, de toute manière, tu perds quand même ton temps en faisant l'armée. Dans quel sens ? Oh là là ! Manu, ça suffit, toi. Je demande, parce que je comprends pas. La semaine dernière, t'as fait du bon boulot, si tu commences à foutre ta merde, ça va... De toute façon, vous parlez de 10 et 12 mois, mais c'est pas ça, l'armée, c'est une semaine, maintenant. Non, non, non, non, non, non, non. Toi, tu l'as même pas faite, alors tu t'écrases. Si, si, Fildar, il a fait l'armée, mais pour revenir au débat, sur IRC, on te demande, on te dit en même temps, que maintenant, l'armée, elle est plus obligatoire. Pourquoi ? Si, l'armée est toujours obligatoire, encore. Non, c'est pour devenir un métier. L'armée est obligatoire. L'armée est obligatoire. Non, c'est tout. Généralement, tu... En tant que général, je peux témoigner, quand même. Vas-y. Parce que, maintenant... Maintenant, on recrute, surtout dans le civil. C'est fini, tout ce recrutement administratif. D'accord. Petit pion. Alors, tout d'abord, bonsoir, Gérard. Bonsoir. Bonsoir. Bonsoir. Ouais, bah, dis-moi... Ça te dirait de faire l'amour avec un gradé ? Oh ! Merci. Bah, écoute, on se retrouvera en peine, alors ? Pas de problème. Hé, attends, attends, attends, moi, je suis plus grand des clés. Hé ! Oh ! On accouche. On accouche, maintenant, là, sur la question. On va pas s'éterniser, là-dedans, hein. Bah, dis-moi, ça fait... 12 mois, c'est trop long, quoi. Bah, 10 mois, c'est pareil, hein. Bah, non, c'est 2 mois de moins. Bah, il y a 2 mois de différence. Bah, ouais, mais si tu fais le con pendant tes 10 mois, tu refais un mois de plus, donc ça fait 11 mois. Ouais, mais Gérard... Si tu fais le con au bout de 12 mois, tu t'en retapes un de plus. Que si tu fais le con au bout de 10 mois, tu t'en retapes un de plus aussi, mais seulement, ça fait plus 13, mais ça fait 11. C'est cumulable. Ouais, OK. Bah, Gérard, c'est prothèse. Ouais, je crois que c'est clair. Tu fais 10 mois, tu pars la fleur au fusil, puis tu fais 12 mois, bon, tu pars la baïonnette dans le cul, alors... Ouais, bah, de toute manière, moi, j'ai fait 12 mois, et je vais te dire une chose, que quand tu reviens, c'est chiant. Que ça soit 12 mois ou 10 mois, de toute manière, c'est vraiment des conneries, je sais pas pourquoi. Et t'avais des permes, ou pas ? Ouais, mais, je vais te dire, les permes, c'est 48 heures, et t'as une PLD, une... PLD, c'est une période de longue durée, c'est 10 jours. Dis-moi, Gérard, je peux te poser une question ? Est-ce que ça t'a plu, l'armée ? Non, pas du tout, je me suis fait chier, je viens de le dire. Pourquoi ? Bah, c'est la question. Est-ce qu'on s'amuse en pesant l'armée ? Ce sera la dernière question, après, on fera une petite conclusion rapide. De nos jours. Non, il reste encore... Non, non, non, on va abréger, on va abréger. On peut pas. On n'a pas le temps. Non, je te dis que... Non, Max, Max, il est venu, il a dit que tu gérais pas le débat, c'est à chier, donc on va faire l'autre débat. C'est toi qui poudre ta merde, alors toi, tu vas commencer par la permer. Non, Gérard, continue ton débat, c'est pas du tout la faute de fil. Alors, est-ce qu'on s'amuse en pesant l'armée de nos jours ? On va demander ça à Canif. Bah, écoute, ouais, je pense qu'il y en a qui s'amusent et d'autres qui s'emmerdent. Donc, c'est pour toi, de toute manière, même en faisant l'armée, on peut s'amuser avec ses copains, hein ? Pendant la récré, ils font des jeux, non ? J'ai des copains qui ont fait l'armée, et puis ils m'ont dit que même si des fois, c'était un peu chiant, ils avaient quand même de bons souvenirs. Ouais, mais ça, de toute manière, tu gardes quand même à la fin, tu gardes quand même un bon souvenir aussi, non ? Attends, faut quand même faire quelque chose, parce que si tu passes 12 mois à t'emmerder, faut quand même faire quelque chose. D'accord. Ouais, donc moi, je dis que dans l'armée, tu t'amuses pas beaucoup, parce que c'est clair qu'à part que si t'as des G.I. Joe ou des Small Soldiers, tu peux t'amuser. D'accord, je vois pas du tout le... C'est un sujet, un sujet. Groubillon ? Ouais, non, tu te fais chier à l'armée. Ah bah d'accord, toi, c'est carrément ta réponse. Bah oui, ça les passionne pas, les naines à l'armée. Faut abréger, même, toi. Attends, toi, pour l'instant, tu vas la fermer ! Ok ? Tu vas fermer ta gueule, maintenant. Ça va être clair. Passe de paix. Bon, on va se polier. Passe de paix, s'il te plaît. Je suis dans la hanche, moi. Passe de paix. Oui, je suis là. Gérard, c'est Prothèse, je suis dans la hanche. Ouais, mais Prothèse, tu t'écrases, maintenant, s'il te plaît. Merci. Gérard, assieds-toi bien, parce que là, j'ai un peu de mal. Bon, allez, Prothèse, tu me dégages. Hop, terminé pour Prothèse, comme ça, il fera moins le con. Il fera le con chez lui, à Rouen. Je suis dans la hanche, Gérard. Passe de paix. Hop, on termine. Ouais, si, c'est cool, l'armée, tu fais le con, quoi. Ouais, bah, tu t'amuses ou pas ? Bah ouais, parce que t'as pas envie de faire la reconnerie, alors que tu fais le con, donc tu t'éclates. J'ai l'air qu'il va t'éclater, parce que tout le monde devait se foutre de ta gueule avec ta face de paix. Non, mais tu peux pas. Non, non, attends, attends, attends, oh ! Toi, Pildar, tu as... Ouais, mais tu vas t'écraser un peu, toi. Tu vas laisser finir les gens parler, OK ? Trois minutes, trois minutes. Face de paix, vite paix, vite paix, là, on accouche, là. Je peux finir, là ? On accouche. Bon, alors... Gérard, je suis dans la hanche. Ouais, mais je peux finir. Prothèse, tu dégages ! Je voudrais dire aussi que quand on a les oreilles... Quand on a les oreilles... Dégage-moi la prothèse, là. Aïe ! Est-ce que je peux finir ? Non. Non ? Oui ? Aïe ! Non, mais aïe ! Arrêtez ! Aïe ! Non, mais aïe ! Vous vous chalmez, là, ou je vous chale, moi, maintenant ? Oh ! Alors, face de paix, tu réponds correctement. Ben, moi, ça y est, j'ai répondu. D'accord, général de mon cul, là. Ouais, répétez, première classe. Général de mon cul. On accouche. Je suis dans la hanche, répétez. Ta gueule, prothèse ! Répétez la question, s'il vous plaît. Bon, allez, vous me faites chier, je répète plus la question. Allez, conclusion. Hop, basta. Conclusion. Janif. Fais passer les autres, j'ai l'air. D'accord, petit pion. Petit pion. Petit pion. Petit pion. Petit pion, une fois, petit pion, deux fois, petit pion. Je suis là, je suis là. Conclusion. Je suis là. Mais bouge pas ta hanche. Prothèse, ta gueule. Donc, tu veux ma conclusion ? Ouais. Ben, écoute. J'ai écouté ton débat parce qu'en fait, je viens d'arriver sur la chaîne, donc j'ai eu le temps d'écouter très attentivement. Et ben, moi, je trouve que l'armée, c'est... En concluant vraiment très, très brièvement, parce que je sais que t'as pas trop le temps, mais il paraît que l'armée, c'est aussi excitant que de te rencontrer dans les chiottes de la loco. Alors, moi, je t'emmerde, petit pion, dégage, bonne nuit, au revoir. Général, mon cul. Aïe. Alors, c'était un très bon débat. Oui. Je voulais le dire. Et j'aimerais dire aussi un petit message pour... Non, non, il n'y a pas de message. C'est un dénommé Philippe qui est dans le truc. Non, non, il n'y a pas de message. Salut. Phase de paix. Je voulais dire. Phase de paix. Phase de paix. Oui, c'est phase de paix. Général, mon cul, vous voulez dire. Allez, vous me faire foutre dans son oeuvre. C'est bon, c'est bon. Je vous respecte, je te mets au trou. D'accord, allez, phase de paix. Oui, phase de paix, là. Ben, moi, est-ce que ce serait possible d'avoir Troufion, là, en quarantaine ? Ben, pas de problème. Bon, alors, tu... C'est pas la conclusion, ça. Allez, Gérard. Conclusion du débat, phase de paix, dernière fois. La ramée, c'est de la merde. Bon, alors, ben, d'accord. Pour toi, c'est la conclusion. Croupion. Ouais ? Ben, débat pourri, et puis regardez la 6, il y a Maxou, quoi. Ah, ben, alors, c'est vrai. Alors, attends, Croupion. Moi, je vais te dire une chose. Si mon débat, c'est de la merde, et que tu regardes M6 à la place, dans ce cas-là, t'as le cas de ne pas participer au débat. OK ? Regarde le chien. Va bouffer tes croupions. Mais arrête de bouger de la hanche. Cani ? Euh, ben, j'ai pas vraiment de conclusion. Mais enfin, si, quand même, c'était pas mal. Mais, euh, bon, voilà, c'était spécial, mais pas mal. Eh, quand je vous demande des conclusions, quand vous me dites, faites passer les autres, je voudrais bien que, quand tout le monde passe, que vous ayez quelque chose à dire. Parce que si c'est pour me dire, ah, ben, pour mieux écouter, regarder M6, il y a Max qui passe. Eh, mais, Gérard, t'énerves pas sur moi, j'y suis pour rien. Non, mais, c'est pour Croupion que je m'adresse spécialement. Ben, ouais, c'est pas moi qu'il faut engueuler, hein. Donc, on le sait, on l'a aussi dans les studios, Max. Alors, donc, voilà. On en a parlé en début d'émission. Bon, ça y est, euh... Gérard, j'ai une conclusion sur l'IRC. Alors, Davy One, qui donne sa conclusion, il dit, eh bien, si la plus petite unité de temps, c'est la milliseconde, la plus petite unité de longueur, c'est le millimètre, la plus petite unité de l'intelligence, c'est le militaire. Ah, ben, d'accord, c'est pas mal sa conclusion. Moi, conclusion, c'est dommage que, ben, qu'on a été forcés d'abréger sur la neuvième, parce que sinon, ça s'était bien passé dans la deuxième. Moi, j'ai pas appris grand-chose, hein. Toi, t'as rien appris parce que t'es con, toi, c'est pas de ta faute. Donc, toi, de toute manière, tu resteras toujours content de ta vie, alors... T'attends onze heures et demie pour bosser au standard, donc ça sert à même pas... Donc, conclusion, c'est... Dans l'ensemble, ça s'était bien passé. Si t'es pas content, je t'emmerde. Tu prends une chose, tu prends tes clics et tes claques et tu te taches chez toi. Comme ça, ça nous prend des vacances. Donc, conclusion, sinon, c'était pas mal dans l'ensemble. Je pense qu'on a atteint combien, là ? On a perdu... On a perdu, suite à la fin du débat, où les gens, en partant, m'ont dit que c'était vraiment trop le bordel et trop con et trop nul. Donc là, apparemment, on est descendu sous la barre des 2000. On doit être 1000... Attends, je regarde... 1597. Ben, c'est dommage. C'est dommage que les trois derniers que tu m'as récupérés ont foutu la merde. Ils me disent pas que c'est à cause des auditeurs. Ils me disent que c'est à cause de toi, Gérard. Non, c'est pas moi qui ai foutu la merde, c'est eux qui n'ont pas voulu répondre aux questions. Donc, voilà. Alors, le disque qu'on va s'écouter, c'est Gérard, du côté, avec la boule de travers. Et donc, vous pouvez nous appeler pour le deuxième débat qui va porter sur la prostitution. Ah, enfin, le débat. Attends, toi, tu vas rester à l'arrière, tu vas fermer ta gueule. Ah, non, non. Si, si, parce que je te bats pas en standard. Je te bats pas en standard. Ah, si, si, si, moi j'en ai marre, ça fait depuis 22 que je suis là, Gérard. Ouais, ben, tant pis. Donc, on écoute le disque et vous pouvez appeler Manu, bien sûr, les numéros, Gérard, vas-y. C'est 0803 085000 et toujours le... www.funradio. Et on se retrouve tout de suite après. J'espère qu'il y aura des putes, quand même. Ben, toi, t'en fais partie. == Le débat sur la prostitution == === Contexte === === Les personnages === === Transcription === C'est le deuxième débat et on salue les gens qui sont sur IRC, on salue un peu tout le monde, on leur fait les coucous, on les remercie d'être là. On a redépassé les 2000, quand ils ont entendu qu'on changeait de débat, ils sont tous revenus et on est 2147 plus 3. Par contre, il y a un petit problème avec Andouillette, je suis désolé pour toi mais je ne vais pas pouvoir te prendre pour le débat. Pourquoi ? Non parce que 13 ans et demi, je ne veux pas. C'est tout ? Non, non, non, il est hors de question. Non mais moi je suis précoce moi. Non, non, je ne veux pas le savoir, 13 ans et demi, je n'en veux pas dans le débat. J'ai dit non. J'ai dit non. Bon ok, je le jare. Ce n'est pas croyable. Voilà, c'est tout, moi je ne prends pas des mineurs dans mes débats. Et donc le disque, oh ça suffit là. Le disque qu'on venait d'écouter, c'est Gérard Ducoté avec la boule de travers et donc on va accueillir pour ça Barakouda, 21 ans, de la mode Beuvron. Oui, mais reste du soir. On écoute Fun Radio sur 106.4. Et demi, et demi. 106.4, j'ai moi. Et demi, ou alors je suis en avant, on ne sait pas. Oui, ce n'est pas grave. Grosse Bertha, 22 ans, Bordeaux, 91.8. Salut. Salut Grosse Bertha. Sanisette, 19 ans, Bourricot, c'est la ville ça ? On appelle de Bourricot. On écoute Fun Radio 97.3. Eh oh, il faut peut-être vous réveiller. Quand je vous parle, vous allez me dire si c'est bien les fréquences. Je t'ai dit oui. Ok. On se réveille. Bourricot. Sanisette, on se réveille. Moi, je te dis réveille-toi, je t'ai déjà répondu. Ok. Alors Twingo, 21 ans, Paris, sur 101.9. Ouais. Et Petit Suisse, 19 ans, Brest, 98.9. Ouais, bonsoir Gérard. Bonsoir. Donc le débat, ça porte sur... Les putes. Comment ? Les putes. Les putes. Sur la prostitution. Ouais, c'est pareil. Je tiens à rappeler, Gérard, quand même, qu'on a une prostitue avec nous. Ouais, je sais, j'ai vu. Donc tu charges quelqu'un à la place d'Andouillette, s'il te plaît. Merci, tu fais ton boulot. Vite fait, bien fait. Sinon, gare à ton matricule pour toi. Alors, la première question, donc, avez-vous déjà été voir une pute ? Si oui, pourquoi on va demander ça à un petit Suisse ? Ouais, ouais, j'y vais deux fois par semaine pour me vider les couilles. Ouais. Ouais, je ferai un maximum de plaisir à faire ça. D'accord. C'est pas mal. Voilà. Et donc, Twingo ? Oui, alors moi, je suis prostituée de profession. Ouais. Donc j'ai l'occasion d'en voir pas mal. Ouais, je vois mes copines qui sont prostituées aussi, quoi. Uh-huh. Donc ouais, je vais les voir des fois, on se fait des bouches. Donc je vais voir des putes. Uh-huh. Voilà. D'accord. Sanisette ? Ouais, bah moi, j'exerce occasionnellement pour arrondir mes femmes, moi. D'accord. Bah c'est pas mal. C'est pas mal comme truc, grosse Bertha. Bah non. Non, mais tu peux préciser ? Bah non, parce que j'en suis une. Non, mais attends, t'as un mec, commence pas à dire des conneries. C'est un guignol. Un peu, ouais. Ouais, bah, et Fildar, quand je t'appellerai potchampe, tu le sortirais dessous le standard. D'accord, mais des prostituées, mec, ça s'appelle des guignols. Pour l'instant, tu vas éteindre ton micro et tu vas faire ton boulot comme je te le demande, ok ? Des guignolos. Alors, Barakouda ? Des guignolos, s'il vous plaît, je préfère. Oh, grosse Bertha, tu te tais, c'est le top, là, merci. Barakouda ? Ouais, bah moi, j'y vais comme tout le monde, pour l'hygiène, pour me vidanger, quoi. D'accord, il n'y a pas d'autre solution que d'aller en voir. Tu peux me dire, attends, grosse Bertha, Barakouda, tu peux me dire s'il y en a de ton côté, là-bas ? Bah ouais, c'est quand même assez blindé au niveau pute, ouais, il y a tout ce qu'il faut, quoi, ouais. C'est abominable. De quel côté qu'il y en a ? Parce que je connais un peu... Des gauches. Tu connais les coins putes ? Non, mais je connais la mode Beuvron parce que j'y étais, alors donc... Ouais, mais je ne voudrais pas trop, trop citer parce que je ne voudrais pas qu'on me répète. Après, du boulevard Jean Jaurès, quand même. D'accord, mais c'est pas mal, c'est bien précisé, quand même, le... T'as bien précisé, quand même, le nom de la rue. Il n'y a pas de problème. À la place d'Andouillette, on accueille M. Claude. Bonsoir, je suis Macron. Salut. Et je le revendique. Salut, Macron. Bonsoir. C'est Barakouda. Salut, Macron. Ouais, ça y est, ça y est, ça y est. Donc, pour toi, M. Claude ? Ouais, bah écoute, moi, je mets des putes sur le marché. Ouais. Et ce qui se passe, c'est que c'est sur le boulevard Baie. Alors, hé, encore une fois, je tiens à préciser que le prochain qui me donne un nom de boulevard gerbe, c'est clair, net, précis. C'est pas valable. C'est pas valable ? Attends, toi, tu risques de gerber vite fait, toi. Je vais pas chercher qui c'est, hein. C'est horrible. Ok. Horrible. Alors, euh... C'est trop susceptible. Oh ! On s'écrase. Inonible. On s'écrase. Donc, M. Claude, pour continuer... Ouais, donc, excuse-moi, j'étais un peu... Je voulais faire un peu de débordement. Ouais. Je voulais faire un peu de pub pour mon commerce, je suis désolé. Ouais. Donc, euh... Oui, tout à fait. Mais je respecte ces femmes à leur juste valeur. De traîner. D'accord. S'il vous plaît. Oui, oui, c'est qui, là ? Euh, c'est, euh, Twingo. Ouais. Je ne supporte pas... Pas de marque. Oh ! Pas de marque. Ouais. Eh oh ! Le prochain qui ouvre sa gueule ! Quand quelqu'un parle, gerbe ! Ok, ouais. Ok, ok. Ok. Ouais. Alors, Twingo. Oui, je vous demande juste d'avoir un langage. Un langage correct en parlant de nous. On n'est pas détraînés. Ouais, mais toi, t'es pas de série déposée, toi. Ok, salope. Oh ! Qui c'est qui s'amuse à dire des saloperies, là ? Allez, hein ! Barakouda. Barakouda, bonne nuit ! Salut ! Non, c'est pas Barakouda, Gérard. Gère un peu, je vais essayer de voir qui c'est, mais fais quelque chose, quoi. Ouais, mais attends. Toi, je t'ai dit d'éteindre ton micro. C'est pas moi. C'est un Gérard. Bon, Gérard. C'est une odibe. Gérard. Oh ! Gérard, pour reprendre le débat, on a un petit sondage, allez. Donc, à la question pour ou contre la prostitution, 20% des gens... Attends, hé, Manu ! Ouais. Les pour ou contre, ça commence à me casser les... Non, mais tu vas voir, il est bien, celui-là. Il est bien, il va avoir des réactions. 20% des gens sont pour Alain Prost, 30% n'ont pas le permis, et 50% n'ont jamais été routiers, donc ne connaissent pas les prostituées. Alors, hé, tu vois, Manu ? Voilà. Ta réaction, là. Ouais. Ça, c'est de la connerie, donc c'est pas la peine d'intervenir pour modérer... Donner des réactions, puis... Bah, je sais pas, ça aurait... Non, parce qu'Alain Prost n'a rien à voir dans le débat de la prostitution, OK ? Alors, c'est pas la peine de dire des conneries, d'accord ? OK, d'accord. Les routiers, ils ont quand même à voir, hein. Bon, toi, tu t'écrases pour l'instant, OK ? Non, mais attends, j'ai été routier, et je me suis arrêté voir des putes dans les camionnettes, je sais pas de quoi je parle. Ouais, bah, de toute manière, il y en a un peu partout, hein. Des camionnettes ou des routiers ? OK, bon, qui c'est qui veut rajouter quelque chose ? Il y a une nana qui voulait parler, c'est qui ? Bon, bien, c'est bien, quand je demande qui veut parler, il n'y a plus personne. C'est pas mal. Nous t'écoutons. Bon, alors... J'ai des bons de réduction sur les fellations, si ça intéresse quelqu'un. C'est qui, c'est qui, c'est qui, ça ? C'est M. Claude. Ouais. Les dix premiers, plus un invité, j'ai une réduction sur les fellations. D'accord, eh ben... Prisca et Zoubira. D'accord, OK, on a très bien compris le message, donc... J'ai pas les manques, j'en ai peur. J'ai le sucre, je suis trop heureux. Oh, on se calme un peu, là, ou quoi ? Donc, alors, moi, je vais répondre quand même à la question. Il faut. Je vais quand même répondre à la question, parce que... Avez-vous déjà été voir des putes, si oui, pourquoi ? Moi, je peux vous dire une chose, que je n'ai pas eu l'occasion d'y aller. C'est tout. Oh, Gérard. Tu peux nous le dire, tu peux nous le dire, on est entre nous. Non, non, non, non, mais ça y est, j'ai répondu, donc... Ils veulent pas de lui. C'est bon, c'est bon, c'est bon. C'est qui ? Ça s'est peut-être arrivé, ça, Gérard, de te faire recaler par une pute, non ? Non, non, pas du tout. Deuxième. Non, mais... Quand vous voulez jacter, vous donnez vos noms, parce que j'en ai marre d'entendre... Ouais, c'est Polo, c'est un menteur. C'est qui ? C'est Polo. Ouais, il n'y a pas de Polo dans le débat. C'est Polo, et c'est un menteur. Bon, attends, toi, tu vas commencer à t'écraser. Hein ? OK ? Oui, c'est Pepito, je vous l'ai dit. Écrase ! Oh, Fildar. Ah, on sonne à la porte. Fildar ! Fildar ! Putain, j'ai oublié ! Putain, j'ai oublié ! Oh, s'il vous plaît, vous vous tchalmez ! C'est Lolo Ferrari. Bon, Fildar ! Oh, quand je te parle, les oreilles, là ! Elle sonne avec son téton. Putain, c'est pas possible de travailler avec un con comme lui, hein ! Ah, Blinquillon ! Lolo Ferrari, elle est pas baisable. Elle est pas baisable, cette meuf. Non, mais quand vous aurez fini vos conneries, on pourra peut-être... Hé, Fildar, tu gères un peu, là, au lieu de faire le con ? Mais quoi, je gère ? Je dis rien. Non, tu gères en rien, pour l'instant. Tu dis que t'as l'air de t'appeler pour les caméras... Pour revenir au débat... Pour revenir au débat, il y a un réa sur IRC qui te demande si tu connais personnellement une prostituée. Non, pas du tout. C'est Sandy ? Euh, qui c'est qui vient de dire ça ? Je te préviens, Fildar ! Troisième édition. Si ça recommence à parler de Sandy, tu me vires où, où, où, Sanisa Toutingo, je cherche pas à qui savoir. Ok, d'accord. J'ai trop de respect pour cette profession. Ok, alors, je te signale, t'as intérêt de te réveiller quand je te parle, parce que tout à l'heure, tu as morflé. Que pensez-vous des tarifs selon ce que vous voulez faire ? On va demander à Barakouda. Allô ? Barakouda, vas-y, réponds. Barakouda ! Il dort. Il est là, il est là ! Il est où, Michel ? Il est où, pute ? Allô, Gérard ? Barakouda, tu réponds, s'il te plaît. Ouais, je te disais, moi, j'ai une carte d'abonnement. J'ai souscrit à la carte Tepu. J'ai droit à une fédération gratuite pour 3 sauts demi-achetés. D'accord. Ça vaut relativement le coup. Ça marche aussi à Paris, dans tous les coins. C'est intéressant. D'accord. Grosse Berthe ? Alors, moi, mes tarifs... Pardon. Bon, je sens que tout à l'heure, je vais m'énerver, ça va... Je vais en saquer, déjà, vite fait. Je pense que les tarifs varient entre 5 et 10 000 francs sur l'avenue Foch, de Paris. Alors, Grosse Berthe, au revoir. Ça t'apprendra de préciser. J'avais bien précisé de ne plus donner de nom. Grosse Berthe, terminé. Il n'y a plus de pute à l'avenue Foch. C'est terminé, ça, Gérard. Terminé pour Grosse Berthe. Sanisette. Oui, en fait, moi, je te disais, je pratique à l'occasion pour arrondir mes fins de mois. Et en général, les tarifs, ça dépend des putes. Ça dépend de ce qu'elles font aussi. Et moi, en général, je demande pas mal, quoi. Salope. Toi, le salaud, tu vas faire mettre ta gueule. Alors, je t'explique pourquoi je demande pas mal. Honnêtement, en toute franchise, moi, j'aime la bite. Donc, forcément, je me donne à fond. Et donc, forcément, on revient me voir très souvent. Et donc, forcément, j'augmente mes tarifs. D'accord. Gérard, il y a Yopi sur IRC qui te demande si tu connais la différence entre une pute et une pizza. Non, mais ça, c'est quoi ? La pizza, tu peux l'avoir sans champignon. D'accord. Twingo. Oui, c'est dégueulasse. Pas de marque. Twingo. Oui, oui, oui. Moi, je suis... Bon, je suis prostituée de profession. Mais je fais pas n'importe quoi non plus. Donc, la pipe à 100 balles, c'est même pas la peine à 10 ans de paie. Mes tarifs commencent à 10 000. Et en fait, je fais 5-6 passes dans le mois. D'accord. Petit Suisse. Ouais, moi, j'ai des tickets Sodo. Donc, j'ai des promotions sur les Sodo. Je rappelle que je ne prends pas les tickets de la vie. Non, mais attends. Petit Suisse, je crois qu'il n'a pas tellement compris la question, lui. Si, si, j'ai des tickets Sodo pour avoir des réductions sur les tarifs. Non, mais que pensez-vous des tarifs selon ce que vous voulez faire, abruti ? Ah, ben, je pense que c'est excellent, quoi. C'est bien, hein. D'accord. On n'a rien à voir des réductions comme ça. Non, mais je crois que pour l'instant, je pense que vous déconnez à ce temps-ci. Non. Non, presque pas. C'est pas le genre de la maison. Non, pas du tout. C'est pas le genre de la maison. Non, presque pas. Donc, tu as dit qu'on se marrait. Non, presque pas. Bon, Jérôme, tais-toi, écoute-moi. On accueille à la place de... Attends, tais-toi et tu fermes ta gueule, toi. On accueille à la place de M. Claude qui est parti se coucher queue de velours. Et à la place de... M. Claude. La grosse Bertha, je cherche encore. Attends, c'est pas évident à trouver. Qui ? C'est qui ? Queue de velours. Ok. Bonsoir. Bonsoir. Alors, petit Suisse, t'as répondu, toi. Alors, donc, queue de velours pour toi. Excuse-moi, je me faisais une queue. Ouais, salut. Ah, d'accord. Je pense que, tout à l'heure, tu as retourné d'où que tu deviens. Fais gaffe que je te sperme pas dessus, quand même. Ouais, ben, moi, je te dis fais gaffe parce que, tout à l'heure, tu as retourné d'où que tu viens. Bonsoir. Alors, Sanisette, c'est terminé pour toi. Au revoir. Hop. Voilà. Bonne nuit pour elle. Terminé, ça y apprendra de parler de Sanisette. Ok, je l'en remets. Une admissible. Je te dis de la gerber. Et tu fais ton boulot correctement avant que je t'éclate. Bon. Ok ? Queue de velours, là, pareil. Queue de velours pour toi. Pour moi, quoi ? Que pensez-vous des tarifs selon ce que vous voulez faire ? C'est la dernière fois que je répète la question parce que vous commencez à me les gonfler, là, sur le deuxième débat. Les tarifs sont variés en fonction de Paris ou la province. Moi, j'ai le souvenir d'une époque, je t'écoute depuis très longtemps, où, apparemment, pour 1200 francs, on pouvait avoir une sode de mie plus un breakfast. Oui. Tu vois, ça peut rire les autres abrutis derrière, mais tu veux dire ça pour qui ? Pour toi, je me souviens qu'à une époque, il y avait des tarifs, c'était 50 francs la pipe, et 1200 francs pour un breakfast. Donc, à mon avis, à mon avis, t'es... Non, mais, à mon avis, t'es vachement au courant de cette publicité, donc je me demande si c'est pas... Parce que t'en avais pas l'avantage, il y a deux ans, espèce de con. Espèce de con, je t'emmerde, alors tu dégages Queue de velours, merci. Voilà. J'aurais bien mis un coup de langue à Queue de velours. Bon, Gérard, on a des nouveaux, on a Kékéthos. Non, non, mais tu me remplis une fiche... À chaque fois que tu me fais le coup, tu sais pas écrire ou quoi ? Non, non, mais tu te démerdes, tu me... Bonjour, Guillaume, c'est Kékéthos. Alors... Il est où, Michel ? Je sens que Fildard, tout à l'heure, avant la troisième question, je vais te mettre une gaufre, mais tu as ton souvenir, toi. Chocolat chantilly, pour moi. Banane, banane, chocolat. Bon, une question IRC, non ? Oui, si tu veux. Alors, est-ce que la carte ImagineR peut servir pour les putes ? Non. Moi, j'ai une question pour les mecs de l'Internet. gringo tu peux me trouver un site sur jacques vapeur alors toi je vais dire une chose que si tu as un truc à demander à rigaud pour le site internet comme ça tu fais le 01 40 521 521 voilà comme ça tu seras tout de suite renseigné merci gérard et vous pouvez toujours bien sûr laisser des messages sur le répondeur j'ai ou j'avais oublié de préciser donc allô allô allô allô bon ça y est vous avez fini la bouconnerie alors croyez vous qu'il faut laisser ouvert les maisons closes on va demander ça à barakouda sont fermés fils d'art tu cherches des ans et tu fermes ta gueule pour la deuxième fois ok gérard sur rc on me dit que si une maison est close elle peut pas être ouverte mais il y en a qui seront ouvertes ou fermées mais je pense que les trois quarts maintenant sont fermés on va demander à barakouda ouais il a pris le goldorak en plastique et donc à la place de sa visite on accueille bermuda et je suis en train et à la place de queue de velours on accueille à nu sans sky alors salut tous ceux qui viennent de nous récuer que revenir alors barakouda pour toi pour revenir au débat à turpentine qui te demande gérard vu que tu parles de maisons closes est ce qu'il y a des immeubles clos non pas ma connaissance ouais ouais je voudrais encore mon jingle un coup là non tu es tu réponds à la question s'il te plaît bon d'accord que je te propose c'est un compromis en fait les maisons closes tu les laisses entre ouvertes à l'eau à l'eau à l'eau à l'eau à l'eau à l'eau et quand vous aurez fini vos conneries vous vous ne direz alors barakouda ouais tu m'écoutes je t'écoute alors je te disais à l'eau à l'eau à l'eau à l'eau à l'eau les auditeurs vous m'entendez un bon moment temps manu mais c'est pas moi j'ai rien fait ils sont là rien et moi vous m'entendez pas moi à kouda vous faites quoi là soir je sais pas mais là ça vient pas nous allons touche derrière ton micro voilà vous l'entendez là vous l'entendez gérard maintenant c'est bon barakouda troisième fois barakouda c'est la troisième fois que je pense de la caisse je te fais appeler donc c'est barakouda de l'agence touriste que je voulais dire c'est que ben je te propose un compromis donc les maisons closes et bien au lieu de les ouvrir tu les laisses juste entre ouvertes ça suffira à quoi je pense qu'ils vont s'offiler ouais d'accord quelques toss ouais bah moi les maisons closes je trouve ça abominable et je trouve qu'on devrait tous les faire mais c'est horrible d'accord abominable bienvenue à tous les abominables moi personnellement j'en ai rien à foutre qu'elle soit fermée ou ouverte j'en ai rien à foutre c'est pas mon problème à ce propos gérard y'a yopi derrière merci yopi sur rc qui demande s'il faut une clé pour rentrer dans les maisons non maintenant c'est les personnes qui l'utilisent ont avec l'info une passe fil d'art tout écran s'il te plaît merci on m'a dit que c'était plusieurs euros tout est une baule il me posait une question qui est bien oui j'aurais voulu savoir si je travaillais dans une maison close qui serait ce type de passer non parce que je vais j'ai déjà ce qu'il me faut j'ai trouvé même alors qui c'est qu'il vient d'être c'est pas moi c'est pas moi j'ai rien dit je crois que c'est un animal c'était moi j'ai pas la zik de m'animal et les obis de lépreux c'est moi je fais dans la bouche je vais essayer de trouver jean je sens que vous commencez déjà toute la merde troisième question je sens qu'on va changer les auditeurs j'ai pas répondu moi on va demander un twingo oui à deux marques oui bah moi j'ai commencé ma carrière dans ce genre de détachement il y avait c'est mignon il y avait des mains de jardin dans la cour et tout mais voilà elle a fermé et bon je me suis retrouvé à la rue donc il a fallu que je me brouille par mes propres moyens donc au début c'était un peu dur j'étais dans une petite chambre de bonne mais j'avais juste un petit lavabo de merde et puis bon bah là je me suis dit que ça s'emballe et puis je me suis dit mais attends si tu prennes ta vie en main faut que tu t'assures quoi d'accord twingo twingo oui twingo cinq minutes celui qui s'amuse à jacter alors que la personne parle va virer mais vite je vais pas chercher gérard pour revenir dans le thème du débat il y a davy one encore lui non s'il vous plaît il y a davy one sur l'IRC qui te demande s'il faut payer un supplément à la prostituée si on veut qu'elle nous mette un coton-tige qu'est-ce que t'as fait là oh là là il a tout cassé t'as même pas entendu ma question non parce que j'étais en train de regarder ce qu'il était en train de faire manu à l'arrêt en train de faire des conneries je répète si t'es pas content tu dégages toi il y a davy one qui te demande le prix d'un supplément pour une prostituée quand tu veux qu'elle te mette un coton-tige non j'ai répondrai pas du tout comme ça ça va aller clair et c'est j'essaie d'être répondu à sa question à celui-là ouais on va demander à anus rancelet rancel pardon ouais concernant les maisons closes ouais nous on a eu des problèmes c'est qu'on moi j'ai travaillé pour une maison close qui a bien marché dans les années 70 et le problème qu'on a eu c'est qu'on a eu effectivement une prostituée qui s'est échappée ouais alors non mais on la recherche aujourd'hui on croit qu'elle traîne du côté de suren alors anus en sky terminé pour toi au revoir terminé pour toi c'est fini elle s'appelait christine et bah tu dégages allez hop tu me le vire terminé pour lui il a pas dit qu'elle était grosse petit suisse pour finir ouais donc moi je trouve ça inadmissible carrément les maisons closes surtout que moi j'ai la pute que je fréquente elle s'appelle pupute et moi j'aimais bien quand tu avais des journées cuisses ouvertes d'accord c'est pas mal moi je pense que à mon avis comme vous allez comme vous êtes en train de vous les gens s'il te plaît tu me laisse parler s'il te plaît comment est un temps merde ma copine tu vois c'est clair net et précis ce coup là tu vois à temps merde et atchi dans la gueule non non non alors maintenant celui qui s'amuse à déconner avec ça n'a dégagé tout de suite c'est n'importe quoi alors parce que ça commence à bien faire alors filard tu vas faire ton boulot correctement et tu as fermé ton micro c'est pas évident de chier dans la gueule ouais ben toi tu gérard on a on a perdu environ 500 personnes quand tu as parlé de ce qu'il y a non c'est une honte non mais c'est dégueulasse mais gérard vient t'asseoir il a rien fait fil d'art lui t'a pas dessus tu as tu as le permis le micro je te préviens toi donc quatrième question celui que ça plaît pas il peut ranger peut raccrocher on prend d'autres personnes il ya du monde derrière t'attends allez-y pose la question gérard faut-il se produisait pas et où il va il va se faire lui là avec ses allô alors faut-il se prostituer pour avoir du boulot et on va s'écouter avec une scie pour se raser les boules donc on va récupérer pour sa barracuda en espérant que vous vous êtes calmés durant ce disque ouais je suis là j'aimerais bien un peu mon jingle manu c'est plus la peine de le passer quand il te le demande parce que sinon il va il va gerber lui commence à m'énerver à l'opinion qui est aussi tu t'écrases pour un sens je récupère tous ceux qui étaient là ok animal ok merci bon alors barakouda était toujours là toujours présent avec mes chiens l'honore qui est quête hausse j'ai la gaule toujours la bernuda ah oui ça chauffe oh tu te calmes bernuda s'il te plait merci bon fils d'art soit tu me les chagnes ou soit tu me prends d'autres personnes parce que ça commence à gonfler ça commence à me gonfler c'est pas dirigeable alors twingo toujours là gérard est-ce que tu peux répéter la question s'il te plaît mais on va finir tout une pointe go toujours là et petit suisse ouais salut à la place d'annus en sky on accueille fleur de lotus je te préviens n'essaye pas de les repasser sur d'autres non je t'ai dit non le fleur de lotus lotus et donc salut à toi alors faut-il se prostituer pour avoir du boulot voilà la question que l'on me demandait sur l'hier c'est donc on va demander à barakouda non non ils ont jamais demandé ça je répète la question comme tu me l'as demandé donc barakouda tu réponds s'il te plaît c'était sur l'armée tout à l'heure tu m'entends moi je t'écoute ok je te dis objectivement dans la vie tu as une sale gueule et que tu peux rien faire d'autre moi je crois que ouais vaut mieux ok donc pour toi pour mieux avoir une seule gueule et puis se prostituer écoute si tu n'as pas le choix et que tu es obligé de vivre à la sueur de tes fesses écoute faut assumer quoi je pense que d'autres sont passés par là avant n'est ce pas ok t'inquiète hausse non je pense pas que ce soit un vrai métier quand même mais c'est bien pratique d'accord n'est ce pas oui je t'écoute non j'ai dit n'est-ce pas d'accord question à toi l'encontre bernuda écoute moi plus ça chauffe entre mes fesses c'est mieux c'est quoi tu me files ton number ça commence à bien faire là vous allez vous calmer avec les avec les gens quand ils parlent ok mais c'est que des cochons pour toi moi c'est un vrai métier donc je peux pas me permettre de dire que que plus ça chauffe je chauffe c'est vrai j'adore le cul mais bon toi t'es plus trop fou les deux moi je fais pas très sérieusement très sérieusement d'accord toi tu déclares pas tout exactement je le fais payer en liquide gg tu fais du black moi je veux bien payer en nature et vous précisez vos noms quand vous voulez parler ouais je voulais savoir si c'est un vrai travail et il y a quoi il y a des acédiques pour les il y a une retraite pour les putes tout ça tu cotises sur tes putes les prostituées payent une retraite tout à fait c'est à quoi où c'est que tu cotises à la banque du sang en fait non tu as une assurance personnelle est-ce qu'on touche les sodomisations sociales c'est à 80% est-ce que t'as un compte épargne à la banque du sperme celui qui s'amuse je vais faire des dépôts et des retraits assez souvent alors petit suisse pour toi ouais bah moi j'en profite parce que en tant que client quoi mais bon si elles veulent faire ça quoi donc c'est tout ce que tu as à dire ouais ok fleur de lotus écoute moi je veux prostituer avec grand plaisir mais je trouve ça un peu dégradant et ça ne m'empêche pas du tout d'aller aux putes sans sans sans problème sans après qu'il n'y ait aucun on va chez les putes et au cul au cul ok d'accord et chez le coiffeur on fait quoi voilà ok alors moi je peux vous dire une chose que celui qui veut faire son boulot son boulot comme ça bah tant pis non personnellement dans un fil d'art puis là si ça ne dérange pas tu non mais il est parti chercher un truc c'est pas grave par contre moi j'ai un petit son un petit sondage qui est bien par contre là à la question n'en rigolez pas à la question êtes vous déjà allé voir une prostituée 25% des gens ils sont allés avec leurs femmes 35% ils sont avec aller avec leurs enfants et 40% ont demandé mais alain prostituée qui n'importe quoi ça y est là vous vous calmez un petit peu là on se calme l'ascar et en mire toi d'accord c'est à moi qui parlais vas-y jara alors cinquième question pourquoi que les jeunes se mettent à la prostitution on va demander à fleurs de lotus pourquoi que pourquoi les jeunes se mettent à la prostitution écoute de la prostitution c'est le chemin le plus facile pour pour gagner de l'argent quand tu vois que j'ai pas il ya des jeunes qui veulent être cadre c'est pas de +2 alors que tu te fais sur le trottoir des cartes les cuisses et c'est parti alors je vais dire une chose que plus d'euros et puis dans le but c'est plutôt bien bien comment je fais maintenant moi il ya sur irc il ya un réa qui te demande s'il ya des réductions pour les prostituées après 19h comme france télécom non je vois pas de réduction alors petit suisse à la minute vient de couper petit suisse tu prends quelqu'un d'autre et c'est tout on va demander à twingo oui pas de marques gérard faut arrêter la balade qu'elle a qu'à prendre un autre nom qu'une marque de voitures c'est tout un appel toi qu'ils ont rappelé quito je faisais je voulais dire oui moi j'ai choisi d'être de prostituées parce que je moi j'avais envie de travailler dans la rue donc c'était ça ou pervenche donc mettre des pvc pas trop mon truc donc j'ai choisi prostituées et tu préfères te faire la chance de faire revanche oui j'ai eu de la chance à l'été il y en a sont trop moches pour faire plus tant qu'ils font elles font pervenche bernuda ben moi j'ai commencé à faire ça l'âge de 18 ans j'en ai 21 et je m'aperçois en fait avec les années qui passent que plus j'en ai eu et plus j'en demande ça suffit derrière s'il vous plaît parce que là ça commence à bien perdre maintenant vous allez vous tenez vous allez éviter de dire des cochonneries comme ça ok sur les putes tu veux qu'on parle de poésie si ça te plaît pas toi tu peux tu peux raccrocher ton téléphone ça nous prend des vacances je voudrais te faire un bisou ma pute tu dégages sinon à la place de petit suisse on accueille plus pute bonsoir gérard salut salut salut ça va c'est ça peut te foutre des médecins à laquelle vulgarité on va demander à bâtir on va demander on va demander toi pourquoi que les jeunes se mettent à la prostitution pas que j'en sais moi en tout cas moi j'ai fait la pute un bon parce que je n'avais pas j'ai pas d'autres moyens de gagner de l'argent et j'adore les grosses textes excuse moi non je pense que les jeunes qui se mettent à la prostitution c'est pas vrai il y a beaucoup plus de vieilles mamies toutes pas belles qui prennent un fric fou et je comprends pas c'est faux mais si c'est vrai non pilar tu t'écrases pour l'instant je donnerai mes réactions moi même je connais jeanette qui est avenue bip et bah un coup d'oeil pour finir ok bon manu ça suffit j'aime bien ce zik ouais mais moi j'en ai ras le bol hé non mais vous avez vous avez les idées de gâcher les débats ou quoi là ce soir gérard j'ai un sondage qu'on m'a rapporté sur internet par kevin klein alors quels moyens de paiement utilisez-vous ouais mais non mais tu gueules tu dis tu gueules il fait ça il fout sa merde avec la cause de barracuda l'autre qui fait la moitié du boulot il y a pour l'instant il y a krigo et ouais avec moi c'est abominable oh vous vous fermez vos gueules maintenant donc j'ai un sondage vite fait quels sont les moyens de paiement que vous utilisez lorsque vous allez voir une prostituée 55% utilisent la carte bleue 12% la carte jeune et 15% la carte routière non bah ça normalement les cartes jeunes et cartons routières ça passe pas vous avez commencé par vous tchalmé maintenant maintenant sa barracuda de réagir ok alors moi je veux dire déjà que les putes moi je paye en liquide déjà c'est clair deuxièmement je suis tout à fait d'accord il ya beaucoup de vieilles qui se prostituent et je sais pas si tu t'es déjà fait attend attend excuse moi une seconde barracuda barracuda c'est la dernière fois que tu me met ça terminé pour lui c'est futé je sens que tout à l'heure je vais je vais rester avec le twin go et bernuda vous allez dégager le débat c'est sur les prostituées là j'aimerais bien qu'on suive un peu le débat et qu'on arrête de délirer ouais bah toi le premier tu fais ton boulot correctement temps je te défends merde bon non mais tu vas me chercher un autre une autre personne j'arrête pas vite fait tu te démerde ya ya des lignes qui sonne alors donc il ya comme un gars qui sait qu'elle a pas répondu tout le monde a répondu non j'ai pas répondu moi j'ai raté non tu as déjà répondu je te fais passer je t'étais passé d'ailleurs en premier première alors donc je peux vous dire une chose qu'il ya beaucoup de jeunes qui se mettent à la prostitution maintenant on sait pas pourquoi ça faudrait voir parce que c'est quand même inadmissible d'avoir des jeunes qui si qui s'y mettent aussi maintenant pas fait de recherches gérard sur ce sujet tu sais pas pourquoi toi mais c'est une petite idée ça vient d'où si ils ont envie de se prostituer c'est leur problème c'est pas de mien en personnellement moi là dessus j'irai pas me foutre à la prostitution comme ça c'est à dire voilà s'habiller comme ça toi que tu cherches les gens et tu fais vite fait toi alors les stars d'aujourd'hui ce prostitutel on va demander à quelques tous tu peux répéter parce que j'ai mal compris les stars d'aujourd'hui ce prostitutel mais n'importe quoi les stars propres à protéger à la prostitu pas alors tu peux préciser un max de pognon et voilà donc elles n'ont pas besoin d'argent ben ok mais ailleurs peuvent le faire gratuitement bon ça ça m'étonnerait moi c'est que la dernière fois je me suis tapé pamela henderson bon le seul truc qui m'a repoussé ses pieds mais sinon va pas demander d'argent j'ai pas l'air ça malibu comme si non mais manu tu arrêtes un peu tes conneries s'il te plaît la prochaine fois je m'appelle mitch ouais ben la prochaine fois tu vas t'appeler ferme ta gueule maintenant pas de problème ok bernuda ouais ben moi j'ai déjà eu des clients effectivement des stars et des politiciens également c'est jean-marie le pen bernuda pas de marque tu vas tu vas te calmer avec des conneries comme ça d'accord sinon tu vas dégager pas d'insultes je dis plus de non alors enfin je voulais quand même que tu saches que le monde des stars c'est quand même un monde très très vicieux et que en fait vous seriez bien surpris de des gens de personnalités qui vient vous voir et surtout ce qui vous demande quoi c'est exact moi je me suis déjà pris entre autres des coton-tiges mais j'ai pas eu que ça quoi je veux dire c'est quand même affolant les gens de la radio ou pas des gens de la radio on peut pas donner de nom moi j'ai pas de marque moi je suis sûr que tu t'es déjà tu as tu t'écrases excuse moi tu dis par exemple le prénom et le nom genre sable z alors quelque chose terminé pour toi au revoir c'est pas quelque chose je l'avais viré je vais gérer sinon la place de barracuda on accueille giclette bonsoir là je vais te dire une chose que si c'est les mêmes mais non garat j'ai pris 25 lignes et valide en ligne alors on va demander à pleurs de lotus nantes windows a pas répondu j'ai pas répondu je suis d'accord avec les stars sont des putes dans le sens où bah oui j'aime pas peut venir nous voir quoi c'est des gens qui payent et qui paye bien donné quelques exemples vont s'entretenir de nom mais j'ai dû fouetté un comique un petit comique sans cheveux tu vois qu'avec une drôle de tête je les fouette et pendant trois heures d'accord avec fleurs de lotus il me semble que certains stars de la télé se prostituent certains stars enfin de la télé des animatrices qui couche avec des producteurs et ça je dirais pas de nom et je le sais mais personne ne me le fera avouer ok c'est qu'il s'est dit c'est et personne ne me le fera avouer ok c'est qu'il s'est dit c'est qu'il y avait il ya des stars qui doivent se prostituer oui c'est possible pour se faire encore plus d'argent mais c'est tout ce que tu peux préciser toi maintenant je suis en train de pomper j'ai pas que ça sert non bon alors dans ce cas là tu as pas que ça paie va continuer à pomper en voir allez allez hop et giclette ouais déjà bonsoir j'ai un soir et je vais dire que déjà les stars ils vont pas voir des plus qui vont voir des gold girls comme on dit et je pense que des google girls on connaît tu peux préciser on va pas donner de nom gérard non mais tu peux préciser non mais on va pas parler des stars de cinéma voilà quand même c'est leur vie privée on va être pas parasites quoi moi je peux vous dire une chose que à ma connaissance personnellement j'ai jamais vu de stars qui se mettait à la prostitution donc non j'ai jamais vu ça encore ça m'étonnerait que yann haye qu'il fasse un homme et gérard il ya fait plus de films bien et où elle a pu de reconnaissance à des plus célèbres elle peut tomber dans la prostitution ça on sait pas oui donc sur irc on me demande à propos des stars est-ce que les stars du x on peut les considérer comme des prostituées ben t'en as certaines qui font tout en faisant des films x donc je pense que si ici ils choisissent de faire ce boulot là c'est que c'est vraiment eux qu'on choisit c'est pas la prostitution les films x les deux s'ils se mettent dans le hic s'ils font de la prostitution quand même donc c'est la même chose voilà donc justement 20 la sixième basse ailleurs on vient de la paire 7e avant avant je voudrais m'adresser aux gens du standard que c'est possible d'avoir une invitée mystère qu'aurait fait pute alors je préviens qui s'amuse à demander ça alors pleurs de lotus tu dégages voilà comme ça plus vite alors septième question il ya plus y at il plus de femmes que d'hommes qui se prostituent on va demander à bernudas honnêtement j'en sais rien parce que dans le quartier où je bosse ya que des nanas mais je suis persuadé qu'il ya autant de mecs que non mais je te demande de ce qu'il y en a plus ou moins d'accord twingo il y en a un peu moins quand il ya un peu moins de mecs au fait de moi dans mon secteur mais il arrive qu'on fasse des trucs ensemble pour un client c'est lui qui s'amuse à faire du bordel avec son téléphone est prié d'arrêter tout de suite inadmissible ok qui c'est qui nous reste quelque chose non je crois que quelque chose je t'avais dit de dégager pas loin si tu veux répondre ouais je pensais beaucoup plus de filles qui se protégent et qui se prostituent ouais mais s'il ya plus de femmes que d'hommes et il ya plus de femmes que d'hommes et ceux qui se marrent comme un boucle avant à se calmer des oreilles oh là là tu vas te calmer parce que tu as dégagé c'est pas moi allez gérard je peux répondre ouais c'est ma croix la moutarde non tu sors d'où toi j'ai remplacé pupitre temporairement non non on l'avait viré j'ai oublié de le dire excuse moi c'est ma croix là mais non mais attend fil d'art tu es prié de faire ton boulot correctement c'est la dernière semaine que tu paies les débats j'étais dans les 24 lignes je peux pas tout faire ça y est ça se calme derrière où je vire tout le monde pour revenir au débat voilà comme allait dire manuel il ya rocco sur irc qui te demande si le téléphone rose est considéré comme une forme de prostitution justement on va on va en parler tout à tout à l'heure par contre moi gérard j'ai un j'ai un petit sondage donc à la question combien donneriez-vous à une pute donc 32% donnerait 2 euros 28 28% dans leurs animaux domestiques et 40% donnera leur approbation et 1% déjà donné leurs dents et n'ont pas voulu donner leur moustache alors je vais dire une chose soit tu étais tu étais truc de merde la sondage c'est à peu près le même sondage que le premier c'est même plus la peine de la marque et non mais pour l'instant tu as moitié bouché aveugle dimanche tu vas te pliancer passé dix ans tu en train de foutre ta merde aujourd'hui la semaine dernière tu faisais du bon boulot cette semaine que tu m'aimes tu es comme fil d'art fermez vos gueules bon je sens que moi je pense qu'il ya autant de putes au féminin qu'au masculin mais des masculins il en faut mais c'est tout bah ouais j'y clette il ya quand même vachement plus de femmes que d'hommes qui tu tu as qu'à voir les deux gros salope on a là au téléphone ça explique pas mal de choses quand même je suis désolé je ne peux pas laisser passer ça gérard vous êtes comme des grosses chiennes les filles tu vois à l'effort des pierres ça y est vous avez fini le profession mais je ne suis pas une chienne à moi je suis une chaîne vous savez ce que vous allez faire vous allez régler votre merde en antenne non ça y est c'est fini on va on va s'écouter roger le peu le pipeau avec du saoul parce que c'est dur de péter et on se retrouve après en espérant que vous vous êtes calmé et on récupère quelques tosses en espérant que ça s'est calmé ce coup là pas de problème moi je suis très calme et je te kiffe et bah moi je t'en moi je te dis merde ça veut dire que je t'aime bien bah moi aussi mais moi alors ok bernuda dans le bermuda est parti on accueille laura ingalls et laura ingalls manu s'il te plaît laura ingalls je vous préviens vous allez vous calmer maintenant donc on a toujours twingo on récupère twingo à la main macro on l'a il est parti macro on a su son c'est un il a encore plus haut donc il voudra en parler et savoir à suivre pour le débat bonsoir puceau pardon s'ils sont excuse moi plus on est des puceaux et on l'athlète dans l'éclaté toujours là et on l'a toujours tu m'aimais tu m'aimes tu m'aimes il est plus haut et on l'athlète dans l'éclaté toujours là et à la place de fleurs de lotus qui est parti aussi on a pu le sort ok ouais ben c'est pas mal ok donc on va reprendre oui rigaud alors pour reprendre le thème du débat il ya access sur rc qui te demande comment on désigne une plutôt masculin un put ou une pute simplement il n'y a pas de mais quand tu t'en prends un fil d'art tu lui dis que c'est une pute c'est un rappeur toi toi je vais t'attraper celui qui s'amuse à dire ça parce qu'elle met tout de suite sinon il va il va retourner au standard et on va prendre quelqu'un d'autre ok alors je peux bien que celui qui redit des conneries dégage maintenant je peux pas je vais pas m'emmerder longtemps ouais ouais je vais dire aux clients est alors que pensez-vous de l'amour par téléphone donc on revient à la question qui avait été posée sur lire c'est donc voilà alors plus le sort le l'amour au téléphone je suis pas très je suis pas très friands de ça en fait mais que pensez-vous de l'amour par téléphone oui c'est ce que je dis l'amour par téléphone moi j'aime pas trop j'aime bien le contact de boîte une peau sur une peau et les effets les étrances ravageuses des chaussures ouais ok ok j'ai pas fini ouais bah vas-y non mais attends je vois pas du tout le rapport avec d'accord quelques tosses ouais bah moi je trouve ça là vous l'avoir par téléphone comme le mec avant le sort du sort faut du contact non mais non mais ça suffit toi l'horreur tous les jours il faut du contact mais non mais ça suffit toi l'horreur non mais ça suffit toi l'horreur non mais ça suffit toi l'horreur non mais ça suffit toi l'horreur non mais ça suffit toi l'horreur ou tout le beau, vous allez vous calmer cigarette ? non mais ça y est là ? moi j'en ai plus moi il m'en reste 10 donc je te disais, il faut du contact sinon c'est pas bon je pense que t'es d'accord avec moi Gérard moi personnellement, j'irais pas m'amuser à faire ça par téléphone nuance, Laura écoute Gérard, moi je suis encore vierge et je veux faire ma virginité avec l'homme de ma vie donc pour moi, faire l'amour par téléphone c'est quelque chose de vachement important parce que ça me permet de m'extérioriser Manu, tu m'éteins ça s'il te plaît juste en fond tu m'éteins ça s'il te plaît Manu, sérieusement, c'est chiant on peut pas bosser Manu, tu m'éteins ça Manu Manu pour ta virginité, si tu veux, je peux te prendre ce service je voulais lui dire pour la mort du téléphone non mais pour l'instant, vous allez vous taire quand Manu on arrêtera ces conneries avant que je me lève oui, tu m'arrêtes ça s'il te plaît ok, ok, ok d'accord, alors Laura ouais, donc je te disais, en fait, moi je suis encore vierge et je voudrais faire ma virginité avec l'homme de ma vie je suis l'artiste, c'est bien oh, derrière, on se calme s'il vous plaît, merci je suis fière d'être encore vierge à 19 ans et en fait, j'aime bien faire l'amour par téléphone parce que vu que je ne l'ai jamais fait toi t'es chum, toi ça me permet en fait de voir un petit peu ce que ça fait et puis donc, j'aime bien, j'aime bien je préfère parce que je t'ai dit, je ne l'ai encore jamais fait et j'attends vraiment le bon moment donc pour moi, par téléphone, pour l'instant c'est ce qui me convient le mieux ok, question attends, 5 minutes, 5 minutes oh, s'il te plaît, on se calme oui, donc il y a Rocco qui te demande est-ce qu'il peut faire l'amour par téléphone même s'il a un téléphone bleu au lieu qu'il soit rose de toute manière la couleur n'a rien à voir alors pourquoi rose ? parce que c'est un truc il y a des téléphones téléphones roses, c'est des trucs c'est des magazines qui peuvent trouver un téléphone, c'est pas un magazine dans les magazines, t'as des numéros de téléphone et tu peux faire ça par téléphone mais pourquoi Gérard, on appelait ça des téléphones roses ? eh ben, tu demanderas à ceux qui s'amusent à en faire c'est pas les téléphones rouges ou verts non, il n'y en a pas Twingo Laura, tu voulais peut-être rajouter quelque chose avant ? non, ben non, c'est pas grave Manu, c'est la dernière pourquoi tu me mets ça ? tu mets ta ça, s'il te plaît, tout de suite Twingo oui, moi ça m'est arrivé de me prendre des téléphones dans des délires sadomaso mais c'est pas ce qu'il y a de plus agréable en fait c'est vrai que la chaleur moite c'est mieux que la froideur du plastique d'accord, Giclette ? ouais ben même en par téléphone, là je suis en plein dedans et je vais t'embêter plein la tronche bon, alors Giclette, tu dégages comme ça, t'es tranquille terminé pour Giclette non, non, non, c'est terminé pour toi c'est terminé terminé sussons ouais, ouais, donc moi vu que je suis puceau et que j'ai pas eu le cran d'aller aux putes, je suis assez friand de ça d'accord c'est assez cher, en plus je me suis fait couper la lime par ma mère, quoi, 223 francs la minute ça fait un peu cher c'est excessif, oui voilà voilà je pense que aujourd'hui vous avez décidé de foutre votre merde hein, Manu et Puldar vous avez l'intention de foutre la merde combien de temps, là, jusqu'à la fin du débat ? ben je sais pas, ouais, encore une demi-heure ouais, ben encore une demi-heure, ça se voit que dimanche tu vas passer au pli en sac parce que la semaine dernière, t'as fait un boulot correct cette semaine tu me foutes la merde parce que t'as Laura, tu t'amuses à me mettre des jingles pourris, t'as l'autre qu'on lui demande quelque chose, qu'il veut rien foutre moi je le fais, hein ouais, ben attends t'as intérêt de te réveiller vite fait, toi parce que ça va pas aller longtemps, toi alors, je peux vous dire que ça ceux qui s'amusent à faire ça par téléphone c'est vraiment qu'ils ont du fric à poutre en l'air à propos de téléphone, Gérard, sur IRC on me demande si avec un portable, c'est possible euh, mais ça coûte aussi cher qu'une communication normale c'est plus cher, en plus ça dépend des... et c'est accessible ? tu peux y avoir accès, facilement, oui pourquoi pas ? ok non mais ce qui est mieux, c'est d'avoir quand c'est comme ça quand tu veux faire du temps avec ton téléphone rose, avec ton portable c'est d'avoir un forfait ouais, mais de toute manière, le forfait tu le vides facilement avec ça non mais le forfait rose ouais, le forfait rose ouais, non mais ça, je sais pas si ça existe encore Gérard, c'est Lorraine Galf je peux juste rajouter quelque chose c'est que moi, en fait on paye pas 2,23 francs la minute c'est qu'on m'appelle directement chez moi sur ma ligne privée donc si ça intéresse quelqu'un tu verras ça après en rentonne avec Fildar ça va pas rester plus tellement non, non, non il y a moyen d'aller plus tard 30 minutes pour l'instant, on continue le débat et vous gérerez ça après, hors antenne alors, que pensez-vous des sex-shop dans toute la France ? on va demander à Pulsor c'est quoi cette question ? c'est pas sur la prostitution, ça ? non, les sex-shop, c'est pas sur la prostitution les sex-shop, non, c'est pas la prostitution non, ça n'a rien à voir c'est n'importe quoi si ça te plaît pas, tu plies le bagage tu vas voir ta copine ta copine, ok on va demander à Pulsor ouais, les sex-shop, je connais pas trop ce milieu mais, bon, enfin, j'ai pas trop d'avis, en fait sur les sex-shop mais j'aime bien le rap d'accord, Laura ? bah écoute, donc moi, comme je te disais, je suis vierge mais enfin, ça m'est déjà arrivé d'aller dans ce genre d'endroit mais enfin, je me déguise un petit peu pour pas qu'on me reconnaisse parce que je suis vraiment très physique tu te rases et donc, en fait, je prends certains objets, c'est vrai et je les donne à ma mère et je regarde un peu ce que mes parents font ok, Tungo ? oui bah moi, j'ai l'occasion, oui, souvent d'y aller soit pour m'alimenter en film ou en gadget d'hiver, quoi parce que mes clients sont demandeurs j'enfonce souvent des godes aux clients enfin, tu vois, des choses comme ça des menottes, des choses en cuir des cafés de porno d'accord ok, euh, Susson ? Susson ! oui ? tu te réveilles s'il te plaît parce que là, vous commencez à dormir, ça m'énerve ok, donc moi, j'étais routier avant donc j'allais dans les sex shops pour acheter des posters pour mettre dans mon camion mais sinon, j'y allais très rarement, quoi c'est difficile, là, c'est routier hé, je vais te dire une chose que pour l'instant, t'es en train de dire n'importe quoi de dire des conneries donc je pense que pour toi, ça va être terminé non, c'est vrai non, c'est des pervers donc je peux te dire une chose que c'est beau là, t'es en train de massacrer t'es en train de massacrer le boulot routier ouais, c'est vrai donc t'as intérêt de te calmer avant que je te vire c'est génial, c'est routier ok alors, ceux qui sont pas contents vous allez dégager parce que je vais pas chercher midi à 14h maintenant ok ? ok alors, tout le monde a répondu donc, des sex shops, si ça existe il y en a un peu partout en France et c'est dommage que ça existe t'en as plein sur Paris pourquoi c'est dommage ? non, parce que je trouve que c'est dégueulasse parce que c'est dégueulasse parce que les gens ouais, mais attends t'as les mecs qui sont là et dès qu'ils te voient y passer ils insistent pour que tu rentres mais n'importe quoi ça c'est pas de la prostitution, ça Gérard non, mais ils insistent pour aller voir ce que la nana est en train de faire et les trois quarts du temps c'est pas une prostituée, elle bosse tu l'es, ta mère va te faire chanter, toi, espèce de connard ta mère, c'est désordre putain tu vas te faire mettre la gueule, toi, quand je parle ou sinon tu gerbes, ok ? eh, debout, Sandi, debout, espèce de fainéant, toi viens avec l'où ? allez hop, dégage-moi celui-là pourquoi t'es tout mou, toi ? t'as rien fait, t'as rien fait ? c'est que... donc, euh... alors, on va... allez, paumez, Gérard, c'est plus bien non, parce qu'il y en a qui s'amusent à dire des conneries je sens que le débat, il va être terminé vite fait Gérard, on est... pourquoi t'es tout mou, putain ? depuis minuit, il se passe rien ? on est presque mille sur l'IRC, là oh la la, la catastrophe ! on en a perdu énormément ouais la catastrophe bah ouais, mais euh... tant pis, hein je veux dire, je suis désolé, on peut plus faire de débats, ça sert à rien, c'est tout eh bah, dans ce cas-là, on arrête, je pose même pas la dixième question, et puis c'est tout si, regarde, j'ai un petit sondage, peut-être, ça va t'aider bah oui donc, à la question : qu'aimez-vous chez une prostituée ? 58% des gens aiment bien 25% des gens aiment beaucoup et 100% aiment le balcon avec les drapeaux, fun radio, je comprends pas, non tu vois, c'est la dernière fois que tu t'amuses à balancer des conneries comme ça parce que sinon, je vais t'éclater ta gueule à bout c'est pas moi, c'est toi qui balance des saloperies mais non ! alors, je te préviens, c'est la dernière fois la semaine prochaine, tu vas dégager et je te le dis tout de suite la semaine prochaine, je veux pas de toi Maitre Olivier alors, y a-t-il autant de prostituées et d'homo dans les autres pays que la France ? on va demander un plus de sort pour terminer le débat euh... oui, bah, la France n'a pas le... comment dirais-je... le truc, comment... je trouve pas le mot l'ethnopole voilà, bah... en Allemagne, y avait le Titi récemment l'ethnopole... la France n'a pas l'ethnopole et les autres pays, pourquoi pas ? Manu, c'est la dernière fois que tu dis des conneries aussi, pourquoi ? c'est que le pote a gégé et il va en camion, il l'amène en Allemagne, alors un peu de respect, quand même alors, Laura ? ouais, bah, tu sais, moi, au départ, je suis originaire des Philippines et en fait, on m'a demandé... enfin, je me suis fait rapatrier en France parce qu'au début, on voulait me mettre sur le trottoir donc j'ai réussi à m'en sortir malgré tout de toute manière, la question, c'est... y a-t-il autant de prostituées et d'homo ? dans les autres pays que la France ? non, je pense pas je te parle des Philippines je pense pas au Philippines... Pildar, tu fermes ta gueule et c'est tout ouais, je t'écoute, Laura il faudrait que Pildar, il la ferme un peu, ça m'énerve non, mais on t'écoute, vas-y ouais, donc je te dis, aux Philippines, ça cartonne, mais quelque chose de grave parce que t'as tout, t'as même des gosses donc t'as des gosses, t'as des homos, t'as des vieilles, t'as des grosses t'as rien, t'as tout, quoi mais ça, de toute manière, faut dire que dans ces pays-là, c'est... en fin de compte, c'est des personnes qui viennent les chercher qui les pensent à se prostituer c'est des pays sous-développés, là-bas donc en fait, pour eux, y a que le cul c'est parce que c'est des pays pauvres, en fait voilà, c'est ça y a une question, IRC, Rigaud, non ? non, y a juste Arnett qui demande à Pildar de le rappeler non, non, c'est plus la peine le débat, il va être terminé, alors c'est pas la peine t'as tes mots alors, Twingo déjà, je vois pas le rapport avec les homos, excuse-moi mais y a aucun rapport avec les homos et les prostituées donc tu pourrais reformuler ta question ouais alors, y a-t-il autant de prostituées et d'homos dans les autres pays que la France ? oui, ben non, je te dis qu'il y a aucun rapport avec les homos, quoi ça me déplie ouais, on parle pas des homos, on parle de la prostitution, là voilà tu peux être homo sans être prostituée voilà donc, c'est ta réponse ? non, non, moi je te dis que c'est pareil, quoi y en a partout, hein et à ton avis, Gérard dans les pays, y a le plus de prostituées ? euh, c'est dans les pays étrangers, comme... mais ça, on en a parlé avec Laura tout à l'heure on l'a dit, c'est dans... c'est les... c'est les adultes qui vont chercher les mômes pour les prost... pour les mettre à la prostitution connard, on va te faire péter l'anus, du con ouais, ouais, ça c'est vrai aussi moi, dans la place Fildard, tu vas essayer de me choper tout de suite celui-là ? == Le débat sur les catastrophes naturelles == === Contexte === === Les personnages === === Transcription === Et pas d'insultes de Gérard ! Et voilà donc bonsoir à tous, 0h41 donc vous pouvez toujours nous appeler pour les débats du jeudi donc au 0800 308 5000 et 0870 5000 toujours l'IRC www.funradio.fr Oui tout à fait 1782,6 connectés quand même C'est bien Et donc n'essayez pas d'appeler sur le Minitel, il ne fonctionne pas Donc on va remercier Tony de l'IRC pour ce que j'avais demandé à Rigaud qui a été fait Donc je remercie Tony en passant Et moi Gérard, s'il te plaît, avant de commencer j'ai une dédicace à faire, dédicace à Sandy Et toi la grosse, debout espèce de peignasse là ! Tu vois pas que les autres s'amusent là ? Allez debout ! Viens avec nous ! C'est bon Magui, c'est bon ! C'est bon on va commencer, on va accueillir Gemma Lopez, 21 ans de Valence, 98.8 ! Ouais ! Bourdon, 20 ans Paris, 101.9 ! Ouais mais restez du soir Gérard ! Bonsoir ! Bonsoir ! Bonsoir ! Suisse la moi, 23 ans, Damien, on écoute Fun Radio, 91.8 ! Quand tu veux Gérard ! Astico, tu commences pas s'il te plaît, merci ! Astico, 18 ans, Pontiby, on écoute Fun Radio sur 94.1 ! Bonsoir Gérard ! Prout, 25 ans, Toulouse, 105.9 ! Bonsoir Gérard ! Et Tekel, d'Arcachon, 22 ans, on écoute Fun Radio sur 92... Salut Gégé ! Sur 92, voilà, terminé ! Donc on attaque sur les catastrophes naturelles Alors, la première question : comment se déclenche une tempête, on va demander à Astico Tant tu peux passer à quelqu'un d'autre parce que là je suis en train de mettre mon tampon et puis... D'accord, alors si ça commence comme ça, ça va pas aller, alors on va prendre Suisse moi là ! Oui, comment ça commence une tempête ? Ouais ! Comment se déclenche une tempête ? Je sais pas, t'appuies sur un interrupteur, ou je sais pas... Euh non ! Qui c'est qui veut répondre ? C'est Bourdon, c'est Bourdon ! Ouais bah vas-y ! Alors je fais des études de météorologie, et alors il faut savoir qu'il y a des nuages, alors t'as des cumulonimbus et des cumulohannus, ok, c'est deux types de nuages bien différents, et quand t'as le cumulopinus qui rentre dans le cumulohannus, ça fait une différence de température et ça fait un orage forcément, même une tempête ! D'accord, mais tu... Oh, Bourdon ! Oui ? Tu parles bien devant ton micro, tu t'éloignes pas quand tu parles, ok ? Ouais mais ça c'est à cause des elfes ! J'ai mal aux fesses ! Ouais bah en fait les tempêtes c'est à cause des courants d'air quoi, parce que parfois ça fait du vent, et quand il y a beaucoup de vent comme ça, et bah ça fait beaucoup de vent et ça peut faire des tempêtes quoi. D'accord ! Et parfois ça... Ouais mais dans ces cas-là tu fermes la fenêtre et puis c'est bon ! Ouais mais il faut le dire aux gens qu'ils ferment la fenêtre, mais si jamais il y a beaucoup de courants d'air dans le monde et ça fait des tempêtes quoi... Bah fermez les fenêtres alors, fermez les fenêtres ! Ouais il faut fermer les fenêtres en fait quoi ! Un sticot, un sticot c'est le top ! Ça peut être dangereux quoi ! Un sticot ! Ok donc j'ai fini de le mettre, donc la question c'est comment se déclenche une tempête c'est ça ? Ouais ! Parce que je ne vais pas m'amuser à les répéter alors vous écoutez bien quand je pose les questions hein ! D'accord Gérard ! Ouais bah je l'ai bien écouté hein la preuve ! Alors vas-y ! Alors bah une tempête c'est très simple, c'est dû à une différence de température, c'est-à-dire que quand il fait chaud chez toi tu ouvres la fenêtre pour que l'air rentre, et quand il fait froid tu la refermes, et quand il fait vraiment très très chaud tu ouvres les deux et là ça fait un courant d'air, et là il y a un choc thermique et la tempête arrive. Good ! Moi je crois que c'est par rapport à l'atmosphère quoi ! Eh celui qui s'amuse à faire des conneries derrière va se calmer parce qu'il va pas rester longtemps celui-là ! Ouais ! Alors Prout pour continuer ? Bah moi je pense que c'est l'atmosphère avec le vent tout ça quoi ! Bah voilà quoi sinon moi je sais pas trop donc je réponds ce que je sais quoi ! D'accord ! T'es quelle ? Bah moi je pense qu'au contraire une tempête est déclenchée par une voluote ! Oh tu te calmes derrière s'il te plaît merci ! Si tu m'as parlé vous avez déjà parlé donc c'est bon hein ! Eh j'ai mal au peintre, j'ai mal au peintre, j'ai mal au peintre ! Bourdon là vous allez vous calmer s'il vous plaît hein ! Au contraire c'est déclenché par une violente perturbation atmosphérique et le vent peut souffler à... ce que je veux savoir c'est que le vent il peut souffler de 1802 km/h ! Ok ! Moi j'ai pu voir à peu près sur un dictionnaire donc c'est une violente perturbation atmosphérique et le vent peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... == Le débat sur les moyens de communication == === Contexte === === Les personnages === === Transcription === Et voilà, toujours la suite du débat de Gérard, 1h54 et on vient s'écouter, au début c'était les mouettes de Boulogne avec la chaise dans les chaussettes et là c'était... Je sais pas, c'est toi qui avais le titre Gérard ? Bah moi j'ai la mouette de Boulogne avec la chaise dans les chaussettes et là j'ai pas le deuxième. Mais ça c'est la suite, c'est les colons de Neuilly avec ce que tu veux autour... Avec du caca sur les ailes qui pue. Ok, donc vous pouvez toujours nous joindre au 0800 75 000 et 0800 308 5000, toujours Rigo sur l'IRC www.funradio. On va passer des petits bonjours, aujourd'hui assez, Compi Music, Big Up, Super Ouragan, Davy One, Jarvis Cooker, Torkane, The We, Oxide, Junkhead et compagnie. Et on va saluer aussi les gens de Belgique. Et Coton-Tige ! Il y en a un qui s'appelle Coton-Tige. Et on va saluer aussi quand même les gens de Belgique. Et Yanti ! Yanti, pardon. Qui nous écoutent. Donc on va attaquer le deuxième débat, les moyens de communication. Donc on va attendre que M. Fildar se réveille. C'est arrivé Gérard ! Parce que là pour l'instant j'ai pas de nom à vous annoncer. Donc si ça y est c'est fait. Ok, alors on va accueillir Karambar, 23 ans d'Angoulême. Bonsoir Paris, bonsoir Christophe Coutant. Comment ? Non, t'énerves pas Gérard. Non mais quand on dit bonsoir, tu dis bonsoir. D'accord ? Bonsoir, oui. Alors Bénur, 27 ans Paris, on écoute... Non, 21 ans, pas 27, excuse-moi, 21 ans. Oui, bonsoir Gégé, bonsoir Adé, bonsoir la France. Bonsoir. Bonsoir. On appelle un accueil... Pustule ! Pustule ! Pustule, 27 ans d'Onis, où qu'on peut écouter Fun Radio sur 107.2. Bonsoir Gérard, bonsoir les garçons. Bonsoir Pustule. Bonsoir. Bonsoir Adé. Je parie qu'elle est dans le coup elle aussi. Ah ouais ? Tourniquet ! Tourniquet, 26 ans Damien. Oui, bonsoir. Eh oh ! Ah merde, c'est de Tourniquet Gérard. Non, non, non. J'ai un Bourriquet et un Tourniquet. C'est Bourriquet, moi. Non, mais attends, pour l'instant, je ne t'ai pas appelé. Alors, on dit bonsoir Tourniquet. Bonsoir Tourniquet. Bonsoir Gérard. Bonsoir. Bonsoir. Bourriquet, maintenant. Oui, bonsoir Gérard, bonsoir... 19 ans d'Orléans. Salut, bonsoir Fildard, bonsoir Ego. Salut Bourriquet. Bonsoir à tous. Bonsoir Bourriquet. Oh, ça y est, ça y est. Bonsoir à Gaëlle, qui nous écoute aussi chez elle. Bonsoir à Gélie, s'il vous plaît. Comment ? Qui ? Gaëlle. Non, mais attends, c'est bien de dire des conneries comme ça. Ah, ok. Proute apparente de Versailles. Poutre. Salut Gérard, c'est dommage que vous ne m'ayez pas appelé le débat précédent. J'avais des choses marrantes, là, ça va être tourette, je vous le dis direct. C'est bon, tu peux te lâcher. C'est reconnu. Non, mais ça y est, vous vous calmez, merci. On connaît les voix. Non, c'est moi qui commande, pour l'instant, ce n'est pas vous. Non, c'est bon. Ok, alors, le débat, c'est moyen de communiquer. Donc, quel moyen de communication possédez-vous ? On va demander à Carmbar. Les hormones. Hein ? Les hormones, les papillons, tout ça, voilà. Ah, ça va pour toi, c'est un moyen de communication, les hormones ? Oui, avec les pets que je lâche, des fois, ça fait fuir mes copains et tout, et ils comprennent tout de suite que j'essaie de communiquer. D'accord. C'est quand tu veux qu'ils s'en aillent de chez toi, c'est ça ? Voilà. Bien sûr. Moi, j'ai la bouche, comme tout le monde, pour communiquer. D'accord. J'ai aussi un portable. D'ailleurs, j'ai ton numéro. Ouais. Benioir, tu fais gaffe, parce que tout à l'heure, tu as... C'est pas moi, c'est pas moi, c'est pas moi. C'est qui qui vient de dire qu'il y avait mon numéro ? Volo. Hein ? Jean-Luc. Jean-Luc ! Jean-Luc ! Jean-Luc ! Pussule. Oui ? Moi, je possède des phéromones, qui sont des hormones sexuelles, voilà. Et aussi un téléphone. Pas de marque. Comme moi, cochonne. Ton Ike ? Moi, j'ai un portable. Ouais, c'est tout ? Ouais, c'est tout, mais c'est déjà pas mal, tu sais. Ouais, bon, Ike ? Moi, j'ai un portable, j'ai un tatou. J'ai une Sibi. Hein ? Et voilà, j'ai du papier, du stylo, j'ai tout, quoi. D'accord. Question. Je vais laisser un petit sondage, vite fait. Par le biais de quel appareil préférez-vous communiquer ? 96% par la bite, 15% par la langue, 45% par portable, 25% par téléphone, 28% par Game Boy et les autres consoles de jeux vidéo. Et pour toute l'apparente ? Ouais, moi, j'ai un PC. C'est Jean Voyageur qui fait caca sur les balcons. Non, attends, je vois pas. Regarde bien, regarde bien. Regarde bien sur ta terrasse. Ouais, bah, fais gaffe, toi, parce que tu pourras peut-être dégager avant la fin du débat. C'est bien possible. On dégage jamais, lui. Ouais, non, mais c'est ce qu'on verra. Parce que c'est pas lui qui commande, ça sera moi. Donc, qu'est-ce que je voulais dire d'autre ? Quel moyen de communication posséder ? Moi, j'ai simplement un portable. Qu'est-ce que t'as, toi, Gérard ? Moi, j'ai simplement un tatou. Ça me suffit. Largement. Non, t'as un portable. Un tatou. Les hémorroïdes. Le portable et le tatou, voilà. C'est tout. Et quand même, Gérard, tous les gens de l'IRC reconnaissent qu'ils utilisent Internet pour communiquer. Ouais, mais ça, justement... Internet. Voilà. Donc, pensez-vous que l'Internet a beaucoup changé de nos jours ? On va demander à 40 bars. Comme dit Tony, pourquoi moi ? Alors, 40 bars... Ouais, mais ouais, Internet, bien sûr que ça m'a changé ma vie. Bien sûr que je fais mes courses par Internet. Plein de trucs par Internet, bien sûr, c'est génial. Internet par vous, Internet. Merci, Internet. Non, mais attends, parce que tu vois, là, ce que tu dis, de faire ses courses par Internet... Moi, je vais te dire une chose, hier, ils m'ont appelé pour ça, et justement, j'avais vu le reportage là-dessus, comme quoi tu pouvais acheter des vaches et tout ça par le site, par le moyen de l'Internet. Attends, toi, qui c'est qui vient de sortir ça ? Je sais pas, on va chercher. C'est bon, on gère. Continue, continue. Bénure. Non, mais continue, ce que t'es en train de dire, Gégésie, sur ce que t'avais à la télé. Non, parce que sur... Parce qu'on parle de l'Internet, donc c'est vrai que tu peux acheter beaucoup de choses. Qu'est-ce que tu peux acheter, par exemple, sur Internet ? Ben, tu peux faire tes courses, tu peux acheter des vaches, des bagnoles, un appartement, tout, tout ce que tu peux trouver. Avant tout, carrément ? Ben, ce que t'as besoin dessus. D'accord, donc si tu veux, tu passes une annonce, tu tapotes, là, ouais, je cherche une vache, des années 80, d'occasion. Même des CD, je pense que tu peux trouver ça par le bien de l'Internet, maintenant. Ah, carrément. Et puis, l'Edric et Martin ? Bénure. C'est Bénure, et je voulais dire que, comme on dit, ouais, ça a bien changé. C'était plus que c'était, à l'époque, au bon vieux temps, on faisait des Pac-Man, maintenant, c'est Internet, c'est autre chose. Ben non, mais pour toi, est-ce que... Et je pense que toi, t'en es resté quand même un peu à l'époque du Pac-Man, en général, quand même, non ? N'importe quoi, toi. Quand même, quand même. Pistule. Ouais, moi, j'ai pas Internet, je suis pas in, par contre, j'ai une console ségale. Et là, c'est pour le Larsen. Merci pour le son. Tournique. Ouais, ben, moi, j'ai Internet, et depuis le temps que je l'ai, ben, je bouge plus de chez moi. Et tu peux préciser ? Ben oui, je fais mes courses, au lieu d'aller au supermarché, je vais sur Internet. Je veux des cigarettes, et ben, je vais sur Internet. Je veux tout ce que je veux, je le prends sur Internet, et je bouge plus de chez moi. Une bille. Tu prends ton pied sur Internet, aussi, non ? Euh, ça dépend avec qui, ouais. En général, ouais, parce que je loue les services... Tu prends ton pied sur Internet ? De Rigaud, de Rigaud. Tu prends ton... Oh là ! Tu prends ton pied ? Oh, Rigaud, il s'en fait pas mal, hein, le Rigaud, là. Alors, euh, ça y est, bon, bourriqué. Ça crache cher. Oh ! On se calme. On reste, on reste tranquille. Oh ! On ne touche pas que des boutons, hein. Tu ne caches pas derrière ton écran. Bourriqué. Oui, bonsoir à tous. Oui, donc, c'est vrai, ça a bien changé, l'Internet. Moi, je me souviens encore du temps où ça s'appelait Intermarché. J'ai compliqué de faire mes courses, et puis, j'ai dragué la caissière. Bourriqué. Bourriqué. Attendez, hé, bourriqué. Ouais. Ouais. Ouais. T'as bien compris le sens de la question ? Ah, bah, ouais, aussi bien que toi. Non, mais je ne crois pas, hein. Ok. T'avais qu'à écouter ce que j'ai dit, déjà, tout à l'heure. D'accord. Prout apparente. Oh ! Putre ! Bon, alors, qui c'est qui a un portable et qui s'amuse avec de la flotte, là, depuis tout à l'heure ? Ouais, parce que ça me donne envie de pisser. C'est moi, je suis dans ma main, je veux faire un jardin secret. Hé, ça commence à bien faire, vos conneries, maintenant. Je vais venir me masser le dos, là. Ah, il y en a un qui a coupé. C'est pas moi. Manu. Donc, prout apparente. Je kiffe aussi les boom blasters qui ont... Quand tu baisses les basses, c'est un son pourri. Et quand tu montes, c'est carrément une discothèque. N'importe quoi. Oh, là, là, il y a des portes. Hé, qui c'est ? Oh, là, là, on t'appelle de partout, là. Oh, Manu ! C'est pas moi qui ai pris les auditeurs, c'est Fildar. Moi, je ne comprends rien à ce qui se passe. Pour en revenir au débat et à Internet, il y a Delight qui dit qu'Internet, ça a bien changé. Il y a même des blaireaux comme toi qui savent ce que c'est. Si je suis un blaireau, ben lui, pourquoi il s'amuse à tapoter pour avoir des notes astronomiques ? Parce qu'il n'y a pas que l'Internet qui fonctionne aussi de nos jours, qui peut changer. Il y a aussi le bien du Minitel, mais ça coûte plus cher que l'Internet, je crois. Donc, le Minitel, ça coûte cher et l'Internet, c'est pareil, ça doit coûter aussi cher parce que déjà, il faut que tu t'abannes là-dessus. C'est faux. Non ? C'est faux. Non, ça m'étonnerait. C'est faux. Ça m'étonnerait, moi, je te dis. T'as cherché dans le dico si ça voulait dire Internet ou pas ? Non. Pourquoi ? Non, parce que j'ai pas pensé à regarder et Internet, ça veut dire ce que ça veut dire. Et toi, celui qui me dit abrège, il va se calmer. Fildard, tu as commencé par te calmer parce que tu m'as trouvé des auditeurs qui sont nazes. Oui, c'est vrai. Attends, tu crois que c'est facile en 5 minutes de trouver des gens potables ? Gérard, d'ailleurs, il y a Bourriquet qui est parti et on accueille Je Pus de l'Arrêt. Oui, bonsoir. C'est l'invité mystère. Donc, c'est Je Pus de l'Arrêt à la place de Bourriquet. Appelle l'invité mystère. Bonsoir. Gérard, bonsoir à tous. Salut, à Tulipe. Salut. Donc, alors, je te répète la question. D'accord. Pensez-vous que l'Internet a changé beaucoup de nos jours ? Ouais, c'est vrai que ça a pas mal. Ça a pas mal. Oh, mais c'est pas un bordel, là ! Manu, tu vas te prendre une gaufre, hein ! À propos d'Internet, il y a Ouragan sur l'IRC qui dit que le meilleur moyen de communiquer maintenant, c'est le site gg-mois-le-cul.com. N'importe quoi. N'importe quoi, ce con. Alors, Je Pus de l'Arrêt, donc, pour toi... Ouais, ouais, ça a pas mal évolué. J'ai déjà cliqué sur Mulo hier soir. J'ai été d'ailleurs sur ton site de www.tantous-de-surenne.fr. Alors, Je Pus de l'Arrêt, tu dégages à ton mère, tu dégages. Voilà, comme ça, ça va être vite fait, Je Pus de l'Arrêt. C'est un nouveau, celui-là. Je me disais bien que tu Pus de l'Arrêt. C'est un nouveau, celui-là. C'est pas un habitué. Merci pour les Larsen, encore ! Eh ben, c'est pas la cateaube ! Possédez-vous un portable, un tatou pour votre travail ? On va demander à 40 barres. Non, ni l'un ni l'autre, et j'aimerais bien que tu m'en offres un jour. Non, ben, ça, tu vois, tu fais comme tu viens de faire. Tu demandes à ta pelle quand il y a la possibilité d'en gagner. Tu téléphones, tu fais 0875 000 et... Non, ben, tu n'as qu'à regarder Fun TV, il y en a gagné cette semaine. Voilà. Donc, pour toi... Voilà, cateaube ! Putain, il commence à me penser les couilles, ce espèce de petit con, là. C'est au standard, Ben Hur. Eh, connard ! Alors, Ben Hur. Voilà, cateaube ! C'est le gamin qui a l'habitué, là. Ben Hur ! Oui, je suis là. Non, mais il a raison, le gamin. Ben Hur, tu réponds correctement, tu dégages ! Ouais, ben, je voulais te dire que j'ai un portable, et si tu veux le numéro pour marceler, là, ce quart, tu peux toujours rêver. Ben, toi aussi, tu peux rêver. Mais je t'ai redemandé. Non, ben, alors, tant mieux. Mais tu peux me le filer, quand même. Non, ben, là, tu iras te faire sodomiser. Gérard, j'ai calmé, je pue de l'arrêt. Non, non, non, je t'ai dit de le dégager. Non, mais moi, je veux plus le savoir, moi. Quand je te dis de virer la personne, tu la vires. C'est pas la peine de le calmer, tu le vires. C'est tout, c'est tout. Ça va vite avec moi. Il est propre, il sent bon de l'arrêt, maintenant. Alors, Pissul. Ouais, moi, j'ai ni tatoune ni portable, et je veux bien le numéro de portable de Ben Hur. 0-1-42-3-1, là. Euh, hé, c'est... Oh ! 92-4-6-9. 92, c'est bien. Non, c'est bon, là, Manu. Tu peux me gérer, là ? Il y en a deux, là, qui sont en train de s'échanger des numéros. Oh, mince. À l'antenne, merde, Manu. C'est nul. C'est naze. 0-1-43. Oh, putain. Je suis là, hein. Euh, Tourniquet. Oui. Euh, oui, ben, moi, je m'en sers énormément parce qu'en fait, je suis commerciale. Et, euh, en fait, donc, je vends des portables. Ouais. Et je m'en sers énormément parce que j'ai des clés... J'ai de la clientèle qui m'appelle régulièrement pour, justement, acheter des portables. Bon, attends, parce que là, ça commence... C'est lui qui est dans sa baignoire, là. C'est qui, là, qui est dans sa baignoire ? C'est moi, c'est moi. C'est qui ? Moi, moi, c'est Poutre Apparente. Ah, mais attends, je voulais dire une chose, que peut-être que Poutre Apparente, il est dans sa baignoire, mais lui, au moins, il se lave, quoi. Attends, moi, je t'en viens, d'accord ? C'est qui ? C'était Pépito. Eh, putain, mais, eh. Manu. Manu, je sais pas par où il passe, je sais pas ce que Fildar a sélectionné. J'ai la proute. Proute Apparente. Proute Apparente qui répond à la question et je sens qu'on va poser une question, on va mettre un disque et on va changer d'auditeur. Ah, carrément. À la place de, je sais plus, je suis plus de l'arrêt, on accueille Viens dans mon trou. Non, mais t'as fait c'est quoi ? Bonsoir. Bonsoir. Bonsoir. Bonsoir. Bonsoir à tous. Salut. Bonsoir. Bonsoir. Bonsoir à tous les auditeurs de fun. Répète-la, s'il te plaît. Proute Apparente. Répète la question. Non, non, attends, tu me fous de ma gueule ou quoi ? Pour calmer le débat, Manu, sur IRC, il y a Arnaud qui te demande de le rappeler. Non, non. Dès que j'ai une ligne. Ouais, dès que tu viens, le nouveau qui vient d'arriver. Alors, Proute Apparente. Ouais, je te copie, c'est pas un habitué, lui. Ah, ouais, ouais. Non, mais répète-la moi parce que j'étais au standard, s'il te plaît, parce que j'ai du Larsen, c'est vrai en plus. Possédez-vous un portable ou un tatou pour votre travail ? Non, non, non, non. Je travaille pas, je suis au chômage. D'accord. J'ai des émergements, en fait. Eh, Viens dans mon trou. Faut pas trop le dire. Ouais, ouais, ouais. Faut pas trop le dire parce que je suis dans la balette. Pas tous en même temps, s'il vous plaît. Pas tous en même temps. Allô ? Pas tous en même temps, merci. Ouais, Viens dans mon trou. Ouais, moi, j'ai un portable, j'ai un tatou et j'ai deux pots de yaourt avec une ficelle. D'accord. Celui qui s'amuse à faire du mort s'arrête. Pourtant, c'est le débat. Attends. Celui qui fait du mort s'arrête. Attends, j'essaye de te rappeler, là. Grosse merde. Ta femme, elle pue, là. Bon, alors... Ça y est, ça y est. Le disque. Le disque. Le disque, ouais. Ben, pose la question, moi, Gérard. Non, non, mais de toute manière, on va changer, parce que là, ça va pas être... Tu peux poser... On va changer tout le monde. Tu peux poser la question pour les futurs auditeurs qui écoutent déjà la question de chez eux. Alors, pensez-vous que le phoque est un meilleur moyen de communication que le mort, c'est ça ? Ah, ben, tu vois, on y revient. Et on se retrouve juste après. Donc, vous pouvez toujours nous appeler au 0800 308 5000 et 0800 75 000. Et toujours, il y a Rigo qui vous attend sur l'IRC www.fanradio. Et on s'écoute... Un petit cadeau. C'est un petit remix. Donc, bonsoir à Rigo. Et voilà, donc, vous pouvez toujours nous appeler au 0... Qui c'est qui s'amuse avec ça, là, depuis tout à l'heure ? Manu, Manu ! Y a personne honneur au standard ? Si. C'est bizarre, parce que là, ça s'arrête, là, comme par hasard, Manu. Donc, qui c'est qui répond déjà, là ? Je dis, il était pour le remix. Alors, si t'es pas content, tu restes chez toi, toi. C'est Jean-Luc. Jean-Luc ! Alors, tu dégages, tu peux rester chez toi, ça me perd des vacances. Donc, vous pouvez toujours nous appeler au 0800-308-5000 et 0870-5000 et toujours www.funradio.fr ce .fr funradio sur l'IRC. Donc, Rigo, vous êtes... Roger ! Vous fermez vos gueules, là, ou quoi, quand on parle ? Gérard, à propos de ta question, il y a quelqu'un qui répondait tout à l'heure à ta question. Tu vas la reposer, peut-être, pour les gens qui n'ont pas entendu. Euh... Laquelle ? La dernière. Que pensez-vous que le FOC est un meilleur moyen de communication que le... le morse ? Celui qui s'amuse à ça, comment s'amuse... Justement, il y a un panel sur l'IRC qui me demande la différence entre l'invité mystère et un FOC. Il me dit que... Il me dit qu'il y en a un qui a des moustaches qui sent le poisson et qui est énorme et l'autre, c'est un mammifère marin. Non, ça, c'est les auditeurs, Gérard. Bon, Manu, t'essaies de me trouver qui c'est qui s'amuse à ça. Ça y est, j'ai trouvé. Je vais aller le kiquer en live, tout à l'heure. Il y a l'un des deux qui s'est jonglé avec un ballon, aussi. Alors, j'avais oublié. J'ai un petit truc à vous dire. Sur la première question, quel moyen d'économisation procédez-vous ? Donc, il y a 40% des Français qui n'en veulent pas chez eux. 20% de Français ne savent pas ce que c'est. 18% des Français n'ont pas compris la question. Et 15% des Français aiment le commus clinique. Alors, ça, je vois pas du tout ce que c'est. Le commus clinique. Le commus clinique. Le commus clinique. Alors, on récupère 40 barres. Ouais, bonsoir. Ouais, bonsoir. Moros. Bonsoir, monsieur. Non, non, c'est... Vous fermez vos gueules ! Et pas tous en même temps, s'il vous plaît. Merci. Ouros, il s'appelle. Ouais, c'est Ouros. Ouais. C'est Yougoslav. Moros. Moros. Oui, je suis là, bonsoir. Bonsoir. C'est un nom de pédé, ça. Tomate. Eh, je te permets pas. Oh, mais parlez plus fort devant les combinés quand je vous... Parlez pas tous en même temps, surtout, parce qu'on n'y comprend rien, sinon. Alors, Tomate. Salut, Gérard. Salut. Luciole. Salut, Gérard. Salut. Blanche, suis-moi la... La caverne. La caverne. Salut, Gérard. Salut. Et je pue la pisse. Ouais, je sais pas, ça, c'est moi. Non, c'est... Non, c'est toi. Je ne sais pas lire, pardon. Ouais, ouais. T'as compris, y'a que moi qui ai un nom normal, quoi. Ouais. À part des noms des autres qui prennent des noms de... Non, non. Vous êtes habitués, vous prenez vos noms, merde. Non, mais attends, Gérard. Ouais, je te copie. Roger. Ouais, bref, go, t'as taillé. Oh, tu t'es fait un peu, là, toi ! Bac de verre gras. Bac de verre gras à 300 mètres. S'il vous plaît, s'il vous plaît, vous gérez un peu, là. Manu, tu gères un petit peu, là. Pose ta... Pose ta question et on enchaîne, quoi. Eh, mais merde, tu vas... Je vais pas la répéter 50 fois, tu vas calmer tes... Demande aux gens, à part un, alors. Alors, 40 barres. Oui, au début, ouais, avant que je le quittais. D'accord. Tu sais ce qu'il aime bien ? Qu'est-ce que c'est que ce salope, là ? Tu sais ce qu'il aime bien ? Je te jure, je sais pas. Il faut qu'il y ait dans le porte-monnaie. Tu sais ce qu'il aime bien ? Non. Non, non, non, non, ça, non. 40 barres. Oui, tu peux répéter, parce qu'il y a quelque chose qu'il n'a pas entendu. Oh, non, non, non, mais vous commencez à me les casser à 2h14, là, hein ? Alors, pensez-vous que l'époque est un meilleur moyen de communication que le morse ? Ben, ouais. Et celui qui s'est mis à ça, arrête, eux ! Manu ! Je vois pas la lumière verte. Bon, Gérard, pour revenir au débat, il y a D-Light qui dit qu'on utilise le morse parce que le phoque est en voie de disparition et qu'on n'a plus le droit de l'utiliser. Moi, je pense, ouais. Moi, enfin... Ouais, je suis d'accord, ouais. 40 barres, toi ? Je vais dire ouais, encore. D'accord, ben, toi, 40 barres, ça va être... J'ai un manque d'inspiration, j'ai ce soir, je sais pas ce qu'il... Ouais, ben, dans ces cas-là, si t'es malade, tu dégages. Mais non, ça va bien. T'as qu'à te liser, comme moi, drogue-toi. Ouroz ! Ouais, c'est Ouroz. Ben, je voulais dire, tu parles des phoques, je crois qu'on devrait appeler Brigitte Bardot, y'a que ça à faire, parce que les phoques, comme on l'a déjà dit, c'est une espèce protégée. Et je pense que l'armée, parce que c'est l'armée qui utilise le morse et le phoque, devrait pas se servir de ce genre de choses et je voulais savoir si toi, c'est vrai que t'étais spécialiste non pas en phoque, mais en phoque. Non, pas du tout. D'accord. Une question IRC. Oui, sur IRC, y'a Superouragan qui m'explique qu'on utilise le morse parce que le TKL est trop lourd à porter. N'importe quoi, lui. Euh, Tomate. Ben, il est monté sur moi ! Fildar, fais gaffe à ce... Mais c'est pas moi ! Fais gaffe, Fildar. Fais gaffe à toi, Fildar. Fildar, la DAT, merde. Tomate ! Je sais pas, parce qu'il dit que c'est ses amis qu'à lui, il faut pas que je t'effraie avec ses amis, tout part. Au début, c'est... Eh, ça commence à bien faire ! Qu'est-ce qu'il aime bien ? Non ! J'ai coupé. Tomate ! Tomate, Tomate ! Voilà, je sens que la conclusion va se faire vite. Non, non, Tomate, Tomate. Gérard, parle bien dans ton micro, aussi. Tomate ! Oui, je te réponds, regarde. On utilise le morse parce qu'ils arrivent mieux à voler que les pigeons voyageurs. Non, mais ça, je vois... Non, mais le morse, c'était un moyen de communication avant. Oui, mais le pigeon voyageur aussi, les morses arrivent moins bien à voler que les pigeons, donc... Ouais, mais le morse, il est quand même long à... Il était quand même long à... à envoyer, hein. Ouais, il nage vite. Oh, je doute ! Non ? Luciole ! Ouais, ben, en fait, le phoque comme le morse c'est quand même assez dépassé comme moyen de communication, maintenant. Ben, maintenant, ça n'existe plus aussi. Non ? Je crois que ça n'existe plus. Si, si, ça existe encore dans certaines postes. Hum, hum. Et, non, mais maintenant, il y a des moyens beaucoup plus adaptés comme le courrier, par exemple. C'est toi qui mets les tampons ? Ouais. Bon, ça y est... C'est une technique et je les mets avec les dents. Blanche, suis-moi la caverne ! Ouais, ouais, ouais. Moi, je voulais dire que j'étais pédé comme un phoque et il y avait ma grosse bite qui s'amorce. Oh, là, là, là, là. Oh, ça, c'est pas mal, ça. Ouais. Et, je sais... Ça peut faire du genre au casse, ça. Ben, il s'est pour moi fêté ! Je ne sais pas lire ! Ben, ouais, euh... Il s'est pour moi fêté ! Non, le morse, je ne le maîtrise pas trop. Gérard ? Ouais ? Blanche, suis-moi la caverne, je veux savoir si... Je veux savoir si t'es... Ah, j'entends pas ce que tu parles. Toi, toi, t'es un rigolo, toi. Vas-y, vas-y. Justement, j'avais déjà utilisé les Toki Whiskey. Les Toki Walkie ? Les Toki Whiskey. Zéro, allez, viens-le, reprends. Ça, c'est raide, ça. Oh, mais vous fermez vos gueules un peu, maintenant ! On est en net, merde. Je ne sais pas lire. Ben, il montait sur moi. Ouais, ouais, non, non, non. Le morse, je t'ai dit que je ne maîtrisais pas. Je préférais le... Enfin, c'est tout, ouais, comme tu disais, là, je... Mais, puis l'art ! Mais, il me faut rire, les auditeurs, Gérard, j'y peux rien. Fais gaffe, parce que tu as pris une taille de commande de la télé, on en a besoin. Bon, eh, Manu ! Je te préviens ! Putain, c'est bon, c'est le connard, là, au deuxième débat. Parce que c'est pas possible de travailler comme ça. Ça marche. Et toi, t'arrêtes de balancer n'importe quoi ! Arrêtez, là, le débat, c'était bien, là. Eh, dégage ! On est pour le cul, Gérard ! Non, dégage ! Non, non ! C'est toi qui fais des conneries, tu sais, non ? C'est vraiment une merde. Toi, t'es un branleur fort possible, hein. Tiens, tout ça, de mes couilles ! C'est bon, c'est bon, c'est bon ! Eh, on parle de tes 4%, ça m'étonne pas que t'es aussi con ! Bon, Gérard... Bon, allez, vous fermez le global, maintenant ! Gérard, pour revenir au débat, on me demande si tu préfères le Morse ou le FistFox. Je vois pas... Je vois pas du tout le rapport. Vous n'y êtes pas. Ah ! Vous n'y êtes pas ! Ah, vas-y, vas-y ! Gérard, t'as arrêté le débat ! Attends, Gérard, il est debout ? Il a lancé quelque chose contre Fildar ? T'es gaffe ! T'es gaffe ! T'es gaffe ! Vas-y, droite, gauche, dans le ciguerie ! T'es gaffe ! T'es gaffe ! T'es gaffe ! T'es gaffe ! T'es gaffe ! T'es gaffe ! T'es gaffe ! Mais qu'est-ce que je fais, moi, Gérard, là ? Rigo, faut que tu viennes m'aider, là ! Ouais, je vais au standard. Arrêtez le merde, tout le monde a la DAT, là ! Viens m'aider ! Bon, je veux juste dire aux gens de l'IRC que je vais au standard vu qu'il n'y a plus Fildar là-là, il faut que Manu y aille. Alors, donc, pour la question sur le morceau... Oh là là, ça commence à m'énerver, ce soir. Le con, le roi des cons ! Bon, Manu, tu vois, là, il y a des trucs qui vont pas, là. Bah, attends, je viens d'arriver, je regarde, je regarde. M'excuse, m'excuse ! Non, non, toi, tu vas dégager. Ouais, vas-y, hein ! Non, non, t'inquiète ! Non, non, tu vas là, tu vas là, tu vas là, je veux plus te voir ! Je veux plus te voir ! Je veux pas te voir à l'arrière, tu vas y, au standard ! Non, je te promets, Gérard ! Je te promets, Gérard, j'arrête. Non, c'est Gérard ! Je te promets, fais gaffe ! Non, j'arrête, promis. Fais gaffe ! Ouais, je fais gaffe. C'est Gérard, c'est lui qui décide, hein ! Fais gaffe. Alors, tu vas au standard ! Non, parce que je connais pas les auditeurs, j'aime pas. Ouais, bah, t'aimes pas, tu vas peut-être faire ton boulot correctement, parce que tu commences à faire chier ton monde, toi, aujourd'hui, hein ! Alors... Oh, non ! Bon, Manu, t'essayes... Bon, Manu, je vais essayer de gérer. C'est quand même... Non, non, non ! C'est toi qui fais des conneries. Moi, je fais mon possible, hein ! Ouais, mais il peut les calmer, quand même. Alors, bon... Pour la cinquième question, Jésus, J.S. Utilisait-il encore des pigeons voyageurs pour communiquer ? Jésus ? Putain ! Ils vont se calmer, ces bandes de cons ? Eh, oh ! Eh, tu te calmes, Goliens ? S'il te plaît, mon Goliens ! Reste poli, là ! Et si vous êtes pas contents, vous raccrochez vos téléphones, on prend d'autres personnes. Mais tu nous parles sur un autre ton ? Ouais, bah, si je veux, d'accord ! Il va se calmer, l'hydro-stéphane. Comment il est ? Le bulbeur achidien. Bon, euh... Décode le trisome. Alors, 40 bars. Oui, est-ce que tu peux répéter, s'il te plaît ? Alors, J.S. Utilisait-il encore... J.S. ? J.S. Non, non, c'est pas J.S. Oh, là, là, oh ! Non, mais vous êtes lourds, ce soir, hein ! J.S. utilisait-il quoi ? Des pigeons, des pigeons voyageurs pour communiquer. Bien sûr, et même, c'était dans la Bible et tout. Ah, c'était beau, c'était... Oui. D'accord. Euh, O.R.O.S. J.S. n'y est pas ! Oh, là, là, oh ! Tu sais qu'il s'amuse à personne, là ! Mais c'est la D.A.T., putain ! C'est ça ! Ouais, c'est O.R.O.S. Ouais ? Ouais, je voulais dire que J.S., le KGB, la CIA, tout le monde utilisait des pigeons voyageurs. C'était nul. D'accord. Tomate ? Ouais, euh... Il utilisait les pigeons voyageurs, et, en fait, quand il en recevait, il les bouffait. Hum ? Il m'a volé baldis, dans mon porte-monnaie. Euh... Si ça vous fait rire, moi, ça me fait pas rire, parce que celui qui s'amuse à ça, il m'a dégagé, je vais pas chercher qui c'est, maintenant. Oh, non, non, non, non, non. Le ciel ! Ouais, tu peux répéter la question, s'il te plaît ? Alors, J... Mais fais gaffe, toi, le connard, à ce que tu dis, toi. Ouais. Et O ? Alors, J.S., utilisait-il encore des pigeons voyageurs pour communiquer ? C'est qui, J.S. ? Oui, mais c'est qui, J.S. ? À votre avis ? Je sais pas, je te demande. C'est pas le gars d'Andalas ? Non. C'est pas le gars d'Andalas ? Oh, là, là, là, là, là, là, là. John Soros. Mais non, mais dis-leur, tu sais, parce qu'ils captent pas. J'ai écrit, on voulait pas le dire, espèce de con, ma nuit, aussi. Je commence à faire... Ouais, mais gagne-toi. Ils captent pas, les auditeurs, faut bien leur expliquer. Alors, voilà, Luciole, maintenant. Ouais, mais c'est pas le gars d'Andalas. Oh, là, là, là, là, là, là, là ! Oh, là, là ! Là, vous avez fait rire le gars, quand les gens y parlent, maintenant ! Tu vois, pour une fois que c'est pas moi. Luciole ! Ouais, ben, on fait pas de religion à la radio, Gérard. Là, c'est n'importe quoi. Là, je crois, de cette manière, ça va être la fin, j'arrête à la 5. Non, non, non, mais là, il faut remettre Manu. Ça y est, c'est bon ? Non, mais le standard... Non, non, mais attends, pour l'instant, que... Tu les calmes, hein. Ça y est. Ouais, ben, tu vas les calmer. Tu vas voir, t'écoutes, tu vas voir. Luciole ! J'ai dit, ben, te laver les feux, tu pues. Oh, là, là ! Non, mais, Gérard, Gérard, sur IRC, il trouve ton débat tellement nul qu'il se demande si t'es le vrai Gérard. Non, ben, attends, si ça leur plaît pas, dans ce cas-là, ils arrêtent, ils se demandent, ils empruntent après Manu et puis, là, ils font les cons. Alors, Luciole, tu veux... Tu es bon, maintenant ? J'ai dit, ben, te laver les feux, tu pues. Bon, alors... Dégagez, dégagez, dégagez. Bon, terminé pour celle-là, ça va vite, c'est moi, maintenant. Ça y est, ça y est. Alors, blanchis-moi, là, à la caverne. J'ai dit, ben, te laver les feux, tu pues. Attends, Manu, tu gères, là. J'ai pu, personne, merde ! Attends, c'est pas n'importe quoi, ce que tu dis, hein. Ouais, ouais. Blanchis-moi, à la caverne. Non, maintenant, j'ai pas le temps. Mais quoi, il est ouvert en bouquet ? Allô ? Ouais. Ouais. Donc, c'est pour toi ? Attends, j'entendais pas parce que je l'ai pas sur l'antenne. Putain, mais vous avez décidé de me faire crier ou quoi, aujourd'hui, là ? Tu peux me répéter, s'il te plaît ? Alors, Jésus-Christ utilisait-il encore les moyens des pigeons voyageurs pour communiquer pour un sixième point à la question que je répète ? Ouais, c'est fort possible. Ouais, je pense que, ouais, ça doit être écrit dans la Bible et puis, tout ça, c'est de la religion. Ouais, je pense que c'est possible. D'accord. Je ne sais pas lire. En fait, ces animaux-là, c'est un don de table parce que c'est pas comme les chiens, ils donnent pas de papade, tout ça. Tu leur dis d'aller porter un message à ta dulcinée et ce qu'ils font, c'est quitter les corps des grains de pain et ils t'écoutent pas, ces animaux-là. Non, mais attends, de toute manière, les pigeons, les pigeons... Bon, attends, n'importe quoi, les pigeons voyageurs, de toute manière, ça existait. On n'a jamais délivré les messages. Si. Non, non, non, attends, faut pas déconner. Non, non, c'est ce que je dis. J'ai essayé d'en dresser quelques-uns et j'ai jamais réussi. Si je leur attachais des trucs à la patte, des bagues, ouais, voilà, des bagues avec des messages, oui, j'ai envie de te baisser comme une chienne, tout ça. On m'avait coupé le portable, en fait, et j'envoyais le pigeon comme ça et jamais il n'y allait. D'accord. J'ai eu des problèmes, je me suis retrouvé... Non, mais ça y est, on a compris. Je me suis retrouvé avec une grosse force. Ça y est, on a compris. Oui, Gérard, sur IRC, il y a Super Ouragouin, il te demande comment tu fais pour envoyer les pigeons voyageurs assez loin. Eh ben... Avec une bague. Avec une bague ? T'arrives à lancer les pigeons avec une bague ? Non, mais... Les pigeons voyageurs, tu l'envoies à 2000 kilomètres, comment tu fais ? Non, mais... Ils s'envolent, ils prennent leurs ailes et puis ils volent. Oula, j'ai perdu 1000 personnes, là, d'un coup, ils m'ont dit que c'était à cause de Manu. Voilà, voilà, bravo. Non, c'est à cause de Christy, bravo Manu. Donc, c'est quoi comme... On va s'écouter un disque, tu poses la question, Gérard, le temps que je te donne la question. Non, je ne sais pas si tu puisses. Celui-là, tu me le vires. Tu le vires, mais... Je l'ai trouvé, je le viens. Non, non, mais tu vois, ça va aller vite, là. Alors, pour... Oui, Rigo ? Non, non, Rigo, pendant que... Pose une question Internet pendant que je note le disque. Alors, peut-on dire que Gégé est transgénique mi-pigeon, mi-phoque ? C'est quoi, ça ? Je ne sais pas. C'est Citrouille qui demande ça. Et il y a Jarvis Cooker qui demande si on peut attraper des maladies viagras ou autres en communiquant. Non, ça, c'est plus le débat sur les maladies. Qui c'est qui s'amuse avec cette musique de là ? Et sinon, il y a Yankee qui me dit qu'on utilise le morse maintenant parce que les phoques font de la radio. Non, mais je ne vois pas du tout le rapport. Donc, sixième question. Pour draguer, vous servez-vous de votre regard comme moyen de communication ? Et vous pouvez toujours nous appeler au 0875 000 0803 085 000 et toujours Rigo qui vous attend sur le site www... Je n'arrête pas d'attendre depuis... .funradio et on s'écoute Riri... Riri. Riri, Fifi, Loulou avec Moi, c'est mieux avec du couscous. Et on se retrouve tout de suite après pour la suite du débat et la fin. ''Musique'' Et voilà, donc vous êtes toujours sur PUN Radio, c'est la suite du débat sur les moyens de communication, et on vient de s'écouter Ricky, Fluffy, Loulou, avec ses... moi c'est mieux, avec du couscous. Donc en parlant de couscous, on va être bien servi, parce qu'il y a justement... Ah, il y en a quelqu'un qui a amené du couscous ? Non, non, mais on a un auditeur qui s'appelle Couscous, qu'on avait vu depuis longtemps, donc on récupère... Ah, il y a Couscous qui est là ? Carambar, bonsoir. Oui, bonsoir. Eh Gérard, est-ce que tu me permets pour une fois d'être gentil ? Je voudrais dire bonsoir à ma petite amie Jessica, bonsoir Paris, bonsoir Jessica. Voilà, ok. T'as pas de petite amie. Bon, ça y est, vous n'allez pas recommencer pour la pain ? Oui. Ok. Ou Rose ? Ouais, je suis dans la place, et je voudrais dire bonsoir à ma main droite. Ok, Tomate ? Bonsoir à tous, je suis Carrie, à la main droite. Carotte ? Salut. Salut. Couscous ? Oui, bonsoir. Ah, Couscous ! Ouais. Bonsoir à tous, bonsoir à ma main, et bonsoir à Abdel Wahid. Ok, c'est bon, Couscous. Vous n'avez pas remarqué que les autres habitués en voulaient pas, là ? Ce mec, là. Oh ! On se calme, s'il vous plaît, hein, maintenant. Et bonsoir à tous les terroristes qui m'aiment. Non, non, non, non, non. Eh, ta gueule toi-même, toi, connard. Oh là là. Eh, mon doigt. J'aime pas Couscous. Mon doigt sent le caca, là. Mon doigt sent le caca, pour terminer. Ouais, ouais, bah ouais. Alors. Bonsoir. Bonsoir, ça y est, là, oui. On va commencer, on va finir le débat, maintenant. Non, non, ils sont cools, hein, ils sont cools. Alors, pour draguer, vous servez-vous de votre regard comme moyen de communication ? On va demander à 40 barres. Ouais, pour comment, encore ? Bah, ouais, tout à fait, ouais. Énormément, ouais. La persuasion, et en plus... Attends, bouge pas, je change de côté la cassette. Non, non, mais attends, si t'enregistres en même temps... En plus, tout ça, c'est des trucs à moi, ça. Ouais, pour lui, après. En plus, je suis serveur, donc ça aide. D'accord. Et je me fais plein de nanas, mais là, depuis quelques temps, je me suis calmé, je suis avec une super fille, et je l'embrasse très fort. Ok, d'accord. Non, mais... Je t'aime. Attends, il passe ses messages persos, c'est quoi, ça ? Il est amoureux. Euh, 40 barres ! Alisabeth Guigou ? Non, 40 barres, c'est bon, c'est... J'ai été dit, ça nous écoute... Comment pour 40 barres, hein ? Tu m'as dévibré, Alisabeth. Ouros ! Ouais, bah, écoute, moi, j'ai un petit problème dans la vie, c'est que j'ai un regard de tueur, donc, bon, je suis un peu obligé de mettre des lunettes de soleil, parce que c'est... Désormais, les filles, j'ai fusé, j'ai regardé... Oh, vous arrêtez de vous marrer, là ? Ah, vas-y, vas-y, vas-y, vas-y... Oh, non, non, non, non, non ! Je sens que ça va se terminer vite fait, Manu, avec toi. C'est que ça vient de moi, je les ai presque... Vas-y, vas-y, vas-y, c'est bon. Tomate ! C'est quoi, la boîte mobilique, là, c'est quoi ? Tomate ! Moi, j'ai un petit appareil, dont je ferai le nom, qui, en fait, envoie des messages à quelqu'un qui a le même appareil. Donc, si j'ai envie de... Si je crois que quelqu'un est dans la rue et que j'appuie sur un bouton, ça sonne sur son appareil. Ouais, c'est le nouveau truc, Gérard. T'as vu à la télé ? C'est le truc pour les amoureux, là. On est des espèces de beepers. Ah, ouais, mais... Les fucklovers, là, les fucklovers. Ouais, ouais, ouais. J'avais vraiment vu ça, ouais. Carotte ? Bah, moi, j'ai des sales yeux, donc je m'en sers pas... Je me sers pas du regard pour draguer. C'est un du cul, toi. D'ailleurs, je ne drague pas et puis on ne drague jamais parce que je suis moche, on se compare toujours à Sandy, donc tu vois, ça n'arrange pas. Alors, Carotte, tu vois, tu viens de dire un nom qu'il ne fallait pas, donc tu peux retourner chez toi, c'est terminé pour toi. Au revoir. Ça y est. Salut. Couscous. Coucou. Coucou. Vous êtes un méchant chiant ou pas, là ? Couscous, on t'écoute. Pas de marque. Moi, on m'appelle la Clash, Couscous. Moi, quand je la regarde, c'est méchant, c'est terroriste. D'accord. Mais moi, je dois être dans le caca, là. Non, moi, je suis borgue. Non, mais tu peux quand même répondre à la question ou pas ? Je suis borgue, j'ai qu'un oeil, donc ça ne le fait pas, tu vois. Bon, d'accord. Sans manquer de respect, il ne faut pas se moquer des aveugles. Oui, entre parenthèses, voilà. Super Montagné, si tu nous regardes. Oh, c'est bon, on a pu, on se calme. Ouais, euh... Non, non, il n'y a personne à la place de Carotte. Il n'y a personne. Attends, je vais, je vais. Tu vas, tu vas, tu vas te manier, maintenant. Oh, merci, c'est Carotte. Alors, euh... Question IRC. Oh, oh, oh ! Appelle le TK de Mystère. On se calme, là ! Le TK de Mystère, il t'emmerde ! Le TK de Mystère ! Ok. Alors, Rigaud, une question IRC. Alors, question de Hatt. Les pigeons, ouais, mais voilà, ils parlent des pigeons voyageurs parce qu'il y a un délai avec Internet. Quand ils écoutent par Internet, ils écoutent ce qu'il y avait il y a 20 minutes. Donc, ils me parlent encore des pigeons voyageurs. Eh, Gérard, je voudrais demander à TK si c'est possible qu'elle me suce ma saucisse à quatre pattes. Va te faire foutre, t'abrouti ! C'est qui qui vient de dire ça ? C'est qui qui vient de s'amuser à dire ça ? Je vais le trouver, Gérard, continue. Et d'ailleurs, d'ailleurs, à la place de, je ne sais plus trop qui, on accueille Tom à la Catalane. À la place de Carotte, alors. Voilà, exactement. Alors, vas-y, Tom. Oui, bonsoir, Gérard. Bonsoir. C'est Griselda. C'est encore la même. Bon, tu as compris la... Pour draguer, servez-vous de votre regard comme moyen de communication pour toi, la question. Oui, ben en fait, je louche, alors tu vois, c'est pas très évident pour moi. Non, c'est sûrement, c'est tout. Oh non. Oh, ça commence à... Vous laissez parler les gens ou pas ? C'est Groton qui vient de dire ça. Il n'arriverait pas à me faire jouiller. Non, je vous ai pas sympa parce que je louche et j'ai un grave problème. Eh, je sens que le prochain qui s'amuse à dire ça... Ça va dégager ! Il jouait pas, c'est tout. Il jouait pas. Il jouait pas. Si je jouais, je suis juste resté avec lui. Euh, Manu, quand tu vas... Ouais, je vais, je suis en train de les chercher. Ouais, alors... Je suis en train de les chercher dans mon porte-pone. Donc, euh... Gérard ? Donc, ouais, oui ? Il y a Ertonio sur l'IRC qui te demande si on peut draguer avec leur regard aussi bien que... Parce qu'il a des lunettes, en fait. Il voulait savoir si c'est pareil que quand on n'a pas de lunettes. Ben, je pense, oui. Ben, il est monté sur moi, c'est tout. C'est tout, hein ? Et il manque plus que les doubles sons, maintenant. Ben, quand vous aurez fini... Quand vous aurez fini vos conneries... Ouais, j'en ai... On pourra demander à Ton qui va répondre. Je passe le bonjour à tous les égords d'Israël. Hé, Couscous ! Couscous, ça suffit ! C'est abusé, ça ! C'est abusé, là. Elle est tensionnée, là. Oh là là ! Mais c'est quoi, là, ce bordel, là, Manu, là ? Tu me l'as... Tu peux peut-être les calmer, mais je peux les calmer, tu vois, un par un, donc... Couscous, il a abusé, là. Alors, Ton... Ouais, alors, moi, je te disais, je louche. C'est un gros problème. J'ai des doubles foyers, donc tu vois, ça m'arrange pas, alors je vous demanderais un petit peu de pitié pour moi, quand même. Euh, je te calme, moi. En plus de ça, donc, j'ai une sale gueule, donc il y a rien qui m'arrange. C'est clair. Et, ben, du coup, je sais pas quoi faire. D'accord. Et en plus, ton pote, il s'est fait virer de la sécu, alors c'est la top. Je sens que ça va... Ça va jarcler, ça va jarcler. Ça y est, ça y est. Ça va... Alors, quel mot... Quel est le moyen de communication... Quel est le moyen de con... Quel est le moyen de communication quand on a n'a pas... Donc, on va demander... Le meilleur moyen, quel est le meilleur moyen... Voilà, de communication quand on a n'a pas. On va demander à Karnevar. Euh, le P, le... Non, la lettre ou la parole, je sais pas, moi. Hum. Voilà, Gérard. Euh, Ouros ? Bah, je sais pas, je dirais un français correct. Ouais. Euh, Thomas ? Il faut crier très fort. Comment ? Dans quel sens ? Bah, il faut crier très fort. Bah, si t'es autiste, hein, j'en sais pas. Hum-hum. Ok. Euh... Thomas ? Tu veux que tu viennes répondre ? Ton, euh... Je sais pas, à quoi, là ? À la Catalane. Ton, à la Catalane ? Ouais, bah, moi, je me sers du téléphone. Au moins, on me voit pas. Et puis, on peut pas imaginer le monstre que je suis. D'accord. J'aime bien ta voix, moi, gros boudin, là. Oh, vous fermez vos gueules, s'il vous plaît, derrière. Merci. Elle est moche, elle est moche. Ouais, euh... Sur IRC, il y a Arnette qui dit que quand on n'a pas de moyen de communication, elle ferme sa gueule. Bah, voilà. Eh, couscous ? Le téléphone à arme. On raconte pas n'importe quoi. Sinon, on leur coupe les cordes vocales à coups de rachois. Ouais, ouais, ouais, mais... Couscous, tu réponds comme il faut à la question. Bah, je te dis que le téléphone à arme. Moi, je te dis le téléphone à arme. D'accord. Euh... Mets-moi le doigt... Oh, putain, non ! Ouais, Gérard. Mets-moi le... Embrasse-moi. Mets-moi le doigt dans le caca. Ouais, viens, t'assures que sur mon sexe, on est réactifs. Bon, allez, allez. Hop. Terminé pour lui, il répondra même pas. Allez, hop, c'est fini. Il dégage. Voilà. Allez, hop. Alors, euh, donc, euh... Alors, il y a un petit sondage, là, pour ou contre les moyens de... Bon, couscous, s'il te plaît, tu me laisses finir ? Ouais, d'accord, mais je t'emmerde. D'accord, mais je t'emmerde. Euh, là, je crois que... C'est pas moi, Gérard. C'est un mec qui s'est émimité. C'est qui ? C'est pas moi. C'est ce moule. Ouais, mais restez quand même polis, s'il vous plaît, avec les gens qui vous emmerdent. Merci. S'il vous plaît. C'est pas gênant. Faut pas être tentaculé en cul de tâcheur. Euh, donc, pour ou contre les moyens de communication, il y a 60% qui n'ont pas le temps de répondre à la question. Hum. Il y a 30% des Français pensent pouvoir le faire eux-mêmes. Hum. Et 10% des Français qui estiment que ce n'est pas le thème du débat. Ben, je vois pas pourquoi que 10% disent que c'est pas le thème du débat, alors que c'est le thème du débat. Ben, ouais. Mais j'étais sur moi, c'est tout. Oh, là, là ! C'est pas moi. C'est à toi, Gérard. Moi, euh... Alors, euh... Excuse-moi, Gérard. Quand même, à la place de mon doigt, sans le caca, machin, on accueille Gilles Comoisy. Bonsoir. Bonsoir. Salut, Gilles Comoisy. Salut. Bonsoir, tu vas bien ? Salut. A tous. Salut, chat de pourri. Alors, donc, la question, donc, Carambar, tu réponds, s'il te plaît ? Tu peux répéter, s'il te plaît. Alors, quel est le meilleur moyen de communication quand on n'en a pas ? J'ai déjà répondu, j'ai dit la lettre ou la parole. C'est vrai, il avait déjà répondu. Ah, ok. Où, Rose ? Ben, j'ai déjà répondu, tu ne suis rien à ton débat ou quoi ? Mais attends, tu restes poli, toi, parce que tu n'avais même pas répondu. Mais si je te dis un français correct, alors tu es un peu ce qui se passe, quand même, putain. Le roi des cons, ouais. Thomas ? J'ai aussi répondu, Gérard. Ben, ton... ton, elle a... Je t'ai déjà répondu aussi, Gérard. Alors, pousse, pousse. Je t'ai déjà dit, téléphone arabe, putain, t'es sourd. Elle t'a peut-être posé cette question-là, déjà, Gérard. Non, mais il y en a un, il y a le Comoisy, là. Si, j'ai le Comoisy. Ben, alors ? Tu devrais le savoir. Non, non, non, pas de moyen de communication. D'accord. Je vis dans une grotte. Ok. Alors, huitième question. Les hommes utilisent-ils les animaux pour communiquer ? Les hommes utilisent-ils... Les hommes utilisent-ils les animaux pour communiquer ? Ah, ben, t'es bien placé pour en répondre. Oui, tout à fait, ouais. Attends, tu sais qu'ils viennent parler, comme ça, là ? Ils sont à la Catalane. Ah, ben, répond à la Catalane, tu peux. Tu me viens répondre à la Catalane, ça y apprendra de répondre des conneries. Je mets pas à mine à l'huile, à la place. Bienvenue chez les pizzas, avec la pépère au lait. Alors, 40 bars. On va t'en faire de la colisse de bras. 40 bars, s'il te plaît, tu réponds comme il faut. Ah, mais vous vous salmez un peu, là, maintenant ? La pépère au lait, là. Ouais, Christine en est l'exemple. 40 bars, quand même. Oui. Pour toi ? Euh, je suis d'accord. Ouais, je pense que oui, oui, tout à fait, ouais. Je tiens, ouais. Ouais ? Ouais. Euh, Ouros ? Ah, pardon, il est parti. C'était lui, les conneries. Ouais, ben, c'est bien, alors. Ouais, ben, t'as bien fait ton boulot, une fois, Manu. Ouais. Gérard, sur l'IRC, il y a D-Light qui dit, oui, on peut utiliser des animaux pour communiquer. La preuve, les dirigeants de Fun Radio utilisent bien Gérard pour communiquer avec les animaux. Oh, n'importe quoi, lui. Tomate ? Ouais. Euh, ben, j'ai connu un mec qui utilisait des puces savantes et des morpions. D'accord. Ouais, à la place de ton à la Catana, Catalane, pardon, on accueille Oasis. S'il n'y a pas de bulles, là. Oasis, OK. Bonsoir, Oasis. Elle veut te planter, c'est pas le gars. Ah ! Oasis, c'est pas le gars. Elle veut te planter, c'est pas le gars. Oasis, c'est pas le gars. Il n'y a personne qui va oser s'appeler Fildar, là, pour les chaussettes. Je sens qu'on va conclure le débat ici. 4%, il ne faut pas déconner. Oui. Donc, Oasis. Moi, si tu pourrais me répéter la question, je viens d'arriver, donc... Les hommes utilisent... Qu'utilisent-ils les animaux pour communiquer ? Euh... Ouais, ouais, ouais, c'est... C'est un excellent moyen de communication, de... De prendre, par exemple, un chien avec soi. Oui. Ça permet, franchement, de développer... J'aimerais te dire que je t'aime avec un tatou. T'as le cœur de l'oreille. Je voudrais te dire que je t'aime, mais tu ne me réponds pas. C'est où ? C'est les feuilles, c'est ce qui s'allume en vert, Manu. Je voudrais te dire que je t'aime, mais tu ne me réponds pas. Bon. C'est vrai, Manu, il est nu, ce soir. Alors, je sens que c'est... Non, mais ce qu'il faut faire... Gérard, Gérard, Gérard, Gérard. Tu fous un coup de fouet à Manu, là, hein ? Non, non, mais ça va aller vite, c'est la... Ça va être la dernière question. Je ne sais pas si... Parce que ça y est, j'ai retrouvé quelqu'un. C'est pour ça que j'ai galéré. Ah, ouais, d'accord. À la place de Ouros, on accueille Préparation H. Bonsoir, c'est Préparation H, Fably. Préparation H. Oui, bonsoir. A tous. Oui, alors... Aïe, aïe, aïe, aïe, aïe, aïe, aïe. Oui, tout à fait, oui. On se calme. Vous ne l'avez pas, celui-là ? Aïe, aïe, aïe, aïe, aïe, c'est pas mal. Avec qui, la chaise, là ? Le tabouret. Et puis le trou du cul qui saigne. Voilà. Non, mais quand vous aurez fini vos conneries, les gens, ils pourront peut-être répondre. Oui, c'est vrai. Il y en a qui veulent répondre et faire un débat sérieux. Alors, euh... Est-ce que vous l'avez, ce capsule ? Euh... C'est qui qui demande ça ? C'est Finger. Je sens que tout à l'heure, on va conclure, hein ? Oui. Alors, préparation H. Oui, ben, je viens d'arriver, j'ai pas entendu la question. Alors, les hommes utilisent-ils des animaux pour communiquer ? Les hommes, ben non, je crois que c'est interdit par la loi d'utiliser les animaux pour niquer, donc... Pour communiquer ! Ben, que ce soit en communauté ou pas, c'est pareil, c'est interdit, c'est tout. Non, mais je crois que... Non, mais discute pas, c'est tout, c'est la loi. La loi, elle est appliquée, il faut se plier, c'est tout. Moi, je suis d'accord. Ben, couscous. Non, non, moi, je suis d'accord. Non, non, moi, je suis pas d'accord. C'est impossible, on peut pas niquer dans la commune avec un dromadaire. Fais pas les animaux ! Fais pas les animaux, t'écorches les moutons, salauds ! Putain, t'en as qui sautent des phacochères... Vous allez énerver, couscous, arrêtez ! Intégriste ! Hé, Gérard, c'est pas parce que tu niques un phacochère que tout le monde a le droit, hein ? Ça y est. C'est le combat. Non, mais... C'est pour l'eau, c'est pour l'eau, c'est pour l'eau, pardon, Gérard. J'ai le cou moisi, là. Ouais, moi, je veux bien me sacrifier et m'appeler Fildar, t'as qu'à faire. Non, non, c'est bon, c'est bon, ça va aller. Pour passer la pub des chaussettes qui te puent. Non, ça va. Alors, moi, je peux vous dire une chose, comme vous êtes en train de déconner, le débat, il s'arrête là. Non, non, Gérard. Encore une question. Non, non, non, non. Encore une, là. Il était bien, il est bien, le débat. Non, non, ils sont tous gentils, n'est-ce pas, les auditeurs, vous êtes gentils ? C'est là pour comprendre les gens qu'on est cons. Ouais, c'est vrai. Non, Manu ? Alors, les transmissions de pensées, est-il un moyen de communication en faisant l'amour ? Et ça sera la dernière question. Est-ce que tu peux la répéter, s'il te plaît ? Alors, les transmissions de pensées, est-il un moyen de communication en faisant l'amour ? Manu ? Quoi ? Tu fais chier. Alors, 40 bars. Est-ce que, à ton avis, tu sais à quoi je pense, là ? Non, eh bien, tu vas le dire. Ben, contenté, Jean. D'accord, eh ben, bonne nuit pour toi, 40 bars. Faisons-te... Non, non, c'est bon, c'est terminé. Est-ce que t'as une réponse à donner ? Qu'est-ce que t'as à donner sur la question, 40 bars ? Les transmissions de pensées. Moi, je sais qu'avec ma copine, sans faire exprès, on dit beaucoup de choses semblables ensemble. C'est-à-dire ? Eh ben, c'est-à-dire, oui, avec nos meilleurs potes, c'est ça. On a la même expression, des fois, ou des trucs comme ça, quoi, en faisant l'amour, et tout, c'est bien. Vous faites quoi ? Hein ? C'est... Ah, vas-y, c'est bon, c'est bon, c'est bon. C'est très bon. Préparation H. Je ne vais pas le dire, celui-là. Oui, ben, moi, je suis sûr qu'après l'amour, comme tu disais, toi et ta copine, vous avez de la transmission de pensée, que vous avez envie d'une gamelle de fresquises au même moment. Toi, tu ferais mieux de faire des préparations pour cons. Fildar, mets-nous un double son, là. Ah, j'ai pas, j'ai pas envie. Non, arrête, arrête, arrête. Fildar, il t'a un peu le faux cul, là, ce soir. Ouais. J'ai pas besoin d'utiliser la pensée, parce que je crie très fort, donc je pense qu'il entend assez. Fildar, mets les auditeurs en double son. Tu jouis ? Je jouis, je jouis, je jouis très fort. Tu jouis très fort ? Je jouis et pas. Lui, je jouis, ça dépend. Oh, Aziz ! Fildar, mets les auditeurs en double son. Ben, moi, sexuellement, avec mon copain, ça se passe très bien. Ah, t'es un copain, toi ? Ouais, ouais, ouais. Tant pis, Tony. Je crois que c'est un dommage. On est au top au niveau transmission de pensée, et puis tout va bien, quoi. On est exactement sur la même longueur d'onde. Moi, je vais te transmettre, moi, salope. Tu viens de trouver quand tu veux. Ton tampon, il vient de tomber, là. Ça arrive. Là, quel équerre on va faire ? Vous êtes perpés, vous. Vas-y, Gérard, on enchaîne. Non, non, mais on prendra peut-être qu'il se calme. Donc, Aziz. J'ai absolument pas envie de faire ça. Couscous. Ouais, Gérard, c'est vrai que depuis que tu t'es fait enculer par une lampe torche, on t'appelle la luciole. Couscous, tu restes poli, parce que sinon, ça va mal finir pour toi. Ouais, tu vas gerber, hein. Moi, je suis d'accord avec Aziz. Gérard, je te... Sous la console, là. Je le coumoisille. La transmission de pensée, pourquoi pas. D'accord. Alors, moi, je peux vous dire une chose. Il y avait un truc que je voulais dire. C'est que pour les aveugles, le moyen de communication... Le moyen de communication... Bon, tu es calme, s'il te plaît, Manu. Merci. Et après, on fait la conclusion, comme ça, ça va être terminé. Donc, pour les aveugles, c'est sûr que c'est pas évident pour eux de pouvoir communiquer. Et c'est... Maintenant, je crois qu'il y a des nouveaux trucs qu'ils font. Donc, on va demander la conclusion du débat à 40 bars. À moins qu'il y avait une question hier, c'est non ? Oui, il y a Sandi, la pute, qui demande qui veut lui bouffer le cul. Mais bon, c'était pas le thème du débat. Voilà, bon, donc, 40 bars, conclusion. Deux choses à dire. Déjà, tu t'es fait griller parce que 40 bars, en fait, c'était 40 bars. Et deuxièmement, toutes les expressions de Christine, c'était moi. Donc, j'ai pris le plaisir. OK, ben... À la semaine prochaine, Gérard. C'est ça, ben, tu repasseras pas la semaine prochaine pour toi. Et ils vont être sur moi. C'est ça. OK, ben, tu repasseras pas la semaine prochaine pour toi. Préparation, préparation H. Ouais, alors, deux choses aussi. La première, c'est que je te mets un fulgurant pour où je pense. Et la deuxième, c'est que tu t'es trompé. Tu l'as appelé j'ai le coup moisi au lieu de j'ai le con moisi. Et on savait déjà que t'avais le coup moisi, c'est clair. D'accord, ouais, tu l'as dit, Thomas. Enculpant qui ? Ouais, ben ouais, c'est comme d'habitude. Toujours aussi nul, toujours aussi à chier, toujours aussi... Toujours aussi Gérard, quoi. Eh ben, dans ces cas-là, Thomas, c'est simple. Tu allais bouffer tes tomates, comme ça, tu nous emmerderas plus qu'on nous fait des conneries. Bravo Gérard, ouazis, t'es bien calmé. Ouais, eh ben, moi j'ai trouvé que le thème du débat, il était franchement très très intéressant. Ouais. Il était vraiment bien, mais c'est dommage que ce soit toi qui l'a présenté. Ah mince. Pourquoi ? Ça parlait bien. Pourquoi ? Ben, parce que t'es toujours aussi catastrophique et rien ne change, quoi. Ben, dans ces cas-là, tu fais pareil, tu la gardes ton ouazis. Ouais. Gossos. Gossos. Ouais, ouais, ben, le débat, il était pas trop mal. Bon, il y avait un petit peu de bordel dans la maison, mais sinon, c'est toujours de la merde. Ouais, mais de toute manière, eh, Gossos, non, n'empêche, on aime bien t'avoir dans... J'aime bien t'avoir quand même dans les débats. Tu le sais bien, on rigole bien avec toi. Ah, d'accord, je te réserverai une petite égorgerie de... C'est ça. Ok, allez, bonne soirée à toi, Gossos. J'ai le coup moisi pour finir. Ah, mais je rouillais pas. Bah oui, je sais, on fait tous ça. Ouais, moi, je voulais seulement dire, enfin, je voulais seulement te demander si je pouvais avoir la grosse vilaine au standard, après. La grosse vilaine, c'est qui ? C'est laquelle ? C'est quel mystère ? Euh, non, tu vois, tu l'auras pas. Donc, voilà, donc, c'est tout, c'était ta conclusion ? Ah, bah ouais. Eh ben, c'est bien. Je te souhaite une bonne nuit aussi. Eh ben, moi aussi. Je te kiffe, l'ascar. Eh ben, moi, je veux pas moi, ok ? Donc, c'est dommage qu'il y ait eu des petits... Petite conclusion de l'IRC, quand même, avant de finir, de Yankee. Quand on se balade avec un tekelborg et qu'on n'a pas d'amis, on fait pas des débats sur la communication. Euh, Gérard, c'est une pute. Non, on va pas dire ça, quand même, c'est pas gentil. Et, euh, bah, c'est... Apparemment, il y a que des trucs méchants. Eh, on était combien, quand même, là ? On est remontés à combien ? Là, on est quand même remontés à 3867. Combien ? 3867. C'est le record, non ? Je sais pas. Bah, si, c'est le record, 3867, je crois. Je crois qu'à la dernière fois, on avait fait 3400, là. Donc, là, à mon avis, on a battu le record, ouais. Eh ben, on aura les sondages, les mecs, ça va faire plaisir, hein. Bravo. Bravo, bravo. On aurait peut-être été un peu plus s'il n'y avait pas eu le problème avec Manu, en ce temps-là. Ouais. Ouais, ça, c'est vrai que Manu, cette semaine, t'as fait chier le monde. Ouais, mais toi aussi, t'as quand même fait un peu ta merde. Non, je t'ai... C'est ça, ça fait quand même un peu ta merde aussi, toi. Faut pas l'oublier. Donc, voilà. Oui, Rigo, pour finir ? Non, rien, j'attendais une félicitation de papa. Non, mais c'est bien, de toute manière, il a bien bossé, Rigo. Il y a que lui. Il y a que lui qui bosse bien, en ce moment, alors. C'est bizarre, quand même. Ouais, non, mais il y a que lui. Ça cache quelque chose. Non, non, mais il y a que lui. Il y a que lui qui bosse comme il faut. J'ai remarqué aussi. Parce que lui, on ne l'entend pas. Quel plaisir de te retrouver, en tout cas. Donc, pour moi, la conclusion des moyens de communication, dommage que ça foirait, mais sinon, je pense que dans l'ensemble, c'était pas... Bon, écoute, je crois que tous les records ont été battus. Bravo. Un fil d'art, tu continues, ça se voit que c'est terminé. C'est terminé pour toi, un fil d'art. Tout ça, la semaine prochaine, on trouvera peut-être quelqu'un d'autre. Ouais, j'ai l'impression, parce que là, le double son, j'aime pas trop. Par contre, je voulais signaler que celui qui s'amusa à envoyer un truc bidon sur l'IRC en mettant avec 10 poules... Oui, donc c'est faux. Voilà. Donc, je vous souhaite une bonne nuit. Vous allez retrouver Rousseau pour la nuit sans pub. Et demain, 6h-9h, Barthes. Et puis, Max à partir de 22h. Arrête. Tu vas prendre une gaufre avant la fin, toi. Et vous allez retrouver Max à partir de 22h. Il y aura des surprises, d'ailleurs. Il y aura des surprises. Déjà, il y aura Jean-Denis Debert, puis il y aura plein de petites surprises, peut-être. Non, mais pas par rapport à toi, mais des trucs nouveaux. Et moi, je vous retrouverai la semaine prochaine, si tout va bien. Bon, à la bonne nuit à tous. Et je voulais faire un petit cadeau, je voulais me faire plaisir, parce que tu as 10 minutes avant, avant de reprendre le programme officiel de l'antenne, où il y a une compilation qui s'appelle F-Communication, la belle français. Ils ont sorti des compilations Musique pour Plante Verte. Ils avaient également sorti déjà une compilation Megasoft Office 97. Ils viennent de sortir la compile 98, avec dedans Nova Nova, LJIA, Frédéric Galliano, Readymade. Que les artistes français ont fait un compte avec des noms un peu étrangers. Et là, sauf un ou deux, et là on va écouter Aquabassino qui s'appelle The Melokey Voilà. == Le débat sur New York == === Contexte === === Les personnages === === Transcription === Les débats pas de radio et pas d'insultes de Gérard Et voilà, donc bienvenue pour, donc Gérard 35, donc bienvenue pour le premier débat Alors ça, ça, une fille d'art, tu vas te prendre une claque Tu vas te prendre une gaufre, mais méchante tout à l'heure Pourquoi ? Tu me refais ça Mais attends c'est propre Non mais je lui avais dit qu'elle avait un surnom Elle ne me l'a pas dit donc je ne peux pas le démerder C'est moi qui vais me démerder, c'est pas grave Donc premier débat qui va porter sur New York Donc vous pouvez toujours nous appeler au 0875 000 0803 08 5000 et toujours IRC, donc www.fr, jeune radio Et ça n'arrête pas de monter, on est déjà à 2413,8 connectés Eh ben c'est joli Gérard Alors on va accueillir Cutepool, 24 ans, qu'on écoute Fun Radio à New York sur 93.4 Bonjour Cutepool Salut Gérard On va accueillir Saucisson à l'ail, 101.9 Paris Allo Allez y'a toi, c'est bon Allo Salut Gégé Salut Non mais c'est parce que je t'entendais pas, donc c'est pour ça Allo Allo Allo Allo Allo Allo Ça commence C'est quoi ça ? C'est à côté, là, ils font des essais, là C'est ce truc, là Non Ça y est, merci Euh, Sufboun, 21 ans, 103 points, 100.3 à Le Mans Bonsoir Bill Big Bill Big Bill Euh, tu dis bonsoir correctement et tu l'as pas commencé Parce que sinon tu vas pas faire la première question, je te le dis tout de suite, ok ? Bah tu viens de dire que c'était toi qui faisais Bill dans le Big Bill Bon, je t'ai pas demandé si... Je t'ai pas demandé à quelle heure elle était, si ta sœur faisait du vélo Ok Alors euh... T'as l'air prêt ou pas ? Ouais, toi, je te signale que tu es allé voir Pildar tout de suite au standard Jérard, t'accueille les gens, s'il te plaît Hé, Gérard, Gérard, Gérard, le... Non, non, non, j'ai rien J'ai rien J'ai rien J'ai rien Ah bon ? Donc euh... Non, j'ai rien dans le froc J'ai rien dans le froc Donc 22 ans, une écoute 94.6 à Salo Allo Exactement, bonsoir Salut, Tony, ça t'apprendra ce qu'on t'avait vachement reconnu C'est pas grave, c'est pas grave Ah mais j'ai rien dans le froc, Tony, tu vois Voilà, donc euh... Non, mais on va mettre Tony C'est mon nom de famille Tony, c'est Arnett Ouais, c'est ça, t'as raison Avec cuisses de blours Salut, Gérard On écoute à hausse 98.7, hein Et peau de chambre à dinant 103.5 Ouais, salut, Gérard, ça va ? Salut Donc, alors, première question qui porte sur New York Alors, êtes-vous allé à New York ? Bon, celui qui commence à rôter déjà, il va commencer à fermer sa gueule Parce que ça va aller vite avec lui D'accord ? C'est du calme, Gérard Ok, ben celui qui rote aussi Alors, première question : êtes-vous allé à New York ? Si oui, quel type de transport avez-vous pris ? On va demander à Saucisson à l'ail Ouais, j'y suis déjà allée Et donc, le transport que j'ai pris, c'est bien sûr l'avion Et quand j'ai pris l'avion, j'ai énormément faim D'accord Question de Gérard, je suis en train de parler Il y a Davey1 sur l'IRC qui te demande : c'est quoi la fréquence de fun à New York ? Alors là, je ne sais pas Et il faudra demander ça à Pildar Attends, je vais vous donner ça dans deux minutes Alors, cul de poule Oui, moi j'y suis allée J'ai pris des gros taxis jaunes D'accord Sous ce boule Moi, je n'y ai jamais été, mais ça me dirait bien Tony ? Non, je ne suis jamais allé à New York D'ailleurs, j'ai été un petit peu vexé que tu ne m'aies pas invité à aller en avant-première Attends, ce n'est pas moi qui ai décidé, c'est la radio, d'accord ? Désolé Cuisse de blour Oui, moi j'ai décidé d'aller et j'ai pris l'avion D'accord J'ai la fréquence, Gérard Oui A hundred four four five Six point five seven Non, mais tu parles français, s'il te plaît You got a man in the film Oh, derrière vous, vous vous calmez, s'il vous plaît, merci Non, non, non La fréquence A hundred five four point seven Bon, alors quand tu parleras en français, je te répondrai Cent quatre point sept Cent quatre point sept, ça m'étonnerait Il parlait pour les New Yorkais chambre oui oui non pas de chambre tu apprends la question qui m'a dégagé bon j'étais en état plein avec le micro d'accord je crois que t'as pas tellement compris d'aller la question je crois que non mais je crois que t'as pas tellement compris êtes-vous allé à new york si oui quel type de transport avez-vous pris tu lui expliques comment ça se passe en débat il comprend mais je lui dis tu y expliques tu y expliques tu y expliques parce à mon avis il n'a pas tellement compris le truc donc alors moi tu utilises à brèze d'un gérard pose des conditions et d'abord c'est n'importe quoi avant la fin de l'émission tu pourras peut-être recevoir le restant du café surtout sur ta gueule ok donc qu'est ce que je voulais dire ouais je voulais dire que donc bon ben j'ai été à new york on était j'ai été avec samedi donc on a pris l'avion c'était super bien alors les habitants de new york paye-t-il moins d'impôts qu'à paris on va demander à peau de chambre bon alors et peau de chambre on t'a sélectionné c'est pour quoi faire seulement on t'a sélectionné c'était pourquoi faire pour participer au débat ou pour te foutre de ma gueule je peux vous pas de ta gueule je réponds même pas new yorkien je suis à paris moi non mais moi je te demande à paris c'est pour ça que j'ai 103.5 dix noms ah oui ah ouais dix noms tu prendrais pas les gens pour des cons celui qui s'amuse à seul qui s'amuse à dire que je suis dehors tout à l'heure avait dégagé et je veux pas chercher je vous préviens soit vous répondez correctement question soit vous vous foutez de ma gueule et vous n'avez pas envie de participer au débat ça sert à rien qu'on vous sélectionne ok c'est clair et net oui il y a encore des v1 qui 2 qui te demandent si les nouilles york c'est un plat surrénien à la fin pour l'instant on n'est pas arrivé à la question qu'est-ce qu'on mange là bas alors on va demander un peu de chambre s'il est réveillé alors tu as commencé à tout de ma gueule là ou quoi je n'ai pas entendu la question alors que j'ai demandé la première fois apparemment il a dit j'ai pas envie d'y répondre alors s'il a pas envie d'y répondre du parti c'est pas au débat ça sert à rien de se laisser s'il vous plaît c'est moi qui commande je vous préviens si on vous sélectionne on se calme si on vous sélectionne c'est pour participer au débat si vous voulez pas participer ça sert à rien qu'on vous sélectionne c'est clair et net alors pas de chambres les habitants de new york fait une moins d'impôts qu'à paris d'accord pourquoi aussi il faut peut-être expliquer un peu alors tu peux expliquer non mais attends non mais là je crois que tu as compris ta question mais je ne sais pas y répondre j'habite pas à new york et voilà je crois pas trop mieux maroc et cuisses de blour tu peux répéter la question elle vous commence à me les gonfler là mais non mais j'ai pas entendu mais les oreilles c'est comme le cul ça ça vous avez très bien compris la question maintenant j'arrête et tu me suis pas avec une semaine alors si j'ai si tu n'as pas compris la question je passe à tony merci je crois qu'il comprenne pas le sens de tes questions mon gg alors tony moi je voulais dire que les habitants de new york ils doivent payer un petit peu plus d'impôts parce qu'il me semble que le dollar c'est plus fort en amérique qu'en france en fait ouais mais d'ailleurs tu pourrais témoigner même toi parce que tu as vu que mon c'est qu'ils ont payé plus plus d'impôts parce qu'il paraît qu'il ya un gros monstre qui a tout détruit dans la ville ça fait qu'en fait ils ont payé plus d'impôts mais attendez il ya une question il ya booster qui te demande enfin il te demande pas il explique que les habitants de new york ne paye pas souvent de pot c'est pour ça que les bistrots sont vides non mais non mais je vois pas du tout le rapport gérard thiel et dans les histoires la bataille qui peut nous en parler non non pour l'instant on n'est pas en train de parler des cafés d'accord si je boule je pense que le gros monstre de payer beaucoup d'impôts parce que les gens vont fuir l'art tu me cherches celui qui fait le con était un ton micro parce que tout à l'heure je vais ça va même se terminer pour ton matricule alors si vous pour toi moi je pense que il fait beaucoup d'impôts parce que le gros monstre à l'oeuvre de new york il doit avoir une grosse maison quand même ok saucisse en l'aïe sérieusement moi je pense qu'à new york que les gens ont plus d'avantages que la france parce que notamment les problèmes des impôts comme on parle non mais tu peux préciser le fond de ta mais pourquoi pourquoi parce que il faut qu'il paye des impôts et c'est comme ça d'accord c'est en dollars gérard non sans de son dollar pour l'instant c'est lui de chercher qui c'est qu'on est en train de faire le compte de l'euro pour l'instant c'est lui de chercher qui c'est qu'en train de faire le compte de l'euro pour l'instant c'est lui de chercher qui c'est qu'en train de faire le compte c'est pas demandé de filard ce signal au lieu d'allumer ta club tu essaies de savoir qui fait le con parce que sinon c'est toi qui déroule je te préviens tu la cherches tu de suite jamais toi ce qui fait un l'aïe mystère permet ça suffit d'accord alors tu poules oui ça dépend de ta vie dans new york et à côté du tower bridge tu payes tu peux répéter la piste et j'ai pas compris le tu peux répéter la piste et j'ai pas compris le je peux pas vous dire parce que comme nous on a été on a été dans new york tout ça va être à new york trois jours tu peux pas dire tu connais le york non maintenant en trois jours tu peux visiter new york je suis désolé gérard tu as été dans le groupe quoi tu as été dans le groupe c'est où ça c'est à côté de harlem normal à temps il ya des grands négros avec des couteaux de châssis c'est tout ce signal qu'on a on a visité certains quartiers et je peux vous dire une chose que c'est quand même pas évident de se balader là dedans pour vous dire ça tu dis au fil d'art oui mais je peux pas deviner je n'avais tu peux pas dire c'est ton boulot tu veux faire le sondage maintenant tu fais ton boulot correctement pas du tout d'accord ok gérard en attendant à propos du bronx sur hier c'est on me demande si tu as coulé un bon non non donc j'ai pas vous dire s'il paye plus d'impôts que nous à paris ça je peux pas vous le dire parce qu'on n'a pas eu à faire des recherches non on n'a pas eu l'occasion de trop discuter avec les gens et tout donc en porte que on ta gueule à toi je t'emmerde et est-ce que tu as rencontré à bittelborg de quoi tu as rencontré à bittelborg n'importe quoi toi tu es en train de planer à 24 alors j'ai un tel et à new york pour voir un film c'est ça bah oui c'était quoi le film de cul à zobzila contre les présences n'a rien fait gaffe à toi tony parce que tu as l'heure tu as dégagé je te signale tentera de rester à carreau si tu veux finir les dix questions non mais moi je te dis t'as intérêt à te calmer ok pas de problème mais pour l'instant on n'en est pas arrivé là d'accord d'accord alors on commence quand on est à new york leur spécialité d'abord pour vous donc on va demander à un mec en moto toi tu cherches d'une sorte un trou bleu il est un portable en plus c'est sûr allez-y continuer et attend parce que lui veut pas faire son boulot au c'est bon apparement apparemment il s'est arrêté apparemment il s'est arrêté basique à tout à l'heure je vais me lever j'ai tant que les mines ça va faire tout drôle à vendre avant la fin toi je te le dis merci alors pour calmer le débat oxy qui dit qu'un jour il ira à new york avec toi on y jouera tu verras non mais ça c'est une chanson donc je m'en fous alors que le mensonge c'est pas gentil de ta part m'a ainsi votre manière j'irai pas à new york avec lui j'irai plutôt avec ma femme non personnellement j'ai pas trop on comprend pas trop bien ce qu'ils nous disent à part excuse me excuse me ou qu'un tueur et ça c'est ça là donc on revient sur la 6 à l'aïe il n'a rien fait gérard il ya jupilère qui te demande si à new york a vu starsky hutch non alors on revient à la troisième question que m'en sont quand on est à new york leur spécialité on va demander ça à peau de chambre vous commencez vous commencez à me casser les couilles sérieusement on est déjà la troisième question vous commencez à foutre un foot boîte merde c'est pas bon une amie si ça va pas être bon pour le deuxième débat je le sens alors peau de chambre tu crois qu'ils mangent des frites à bas tous en même temps s'il vous plaît cuisse de velours je viens de répondre à la question non mais je demande à peau de chambre c'est pas qui répond c'est pas mal tony il me semble aussi que c'est beaucoup d'aval de sauvetage de viande rouge et de frites d'accord ce boulot moi j'étais dans un fast food et j'ai pris un menu mcgaver anthony tony tony tony laisse le parler donc j'ai pris un menu mcgaver un couteau suisse d'accord tu vois mon pote à temps qu'il y a un couteau suisse une boussole et un sandwich au paté d'accord tu vois mon pote attendez j'ai un couteau suisse j'ai un couteau suisse et un sandwich au pâté d'accord tu vois mon pote attendez j'ai un couteau suisse et un sandwich au pâté ça c'est pas comestible dans ce cas tu sais ce que tu vas faire tu vas aller voir fildar tu vas aller voir fildar au standard maintenant ça va être terminé pour toi je peux pas l'aider hein non non mais c'est bon tu prends quelqu'un d'autre parce que j'aime pas les cons qui s'amusent à dire des conneries donc on n'a pas le droit d'être drôle saucisson à l'ail alors la nourriture la plus répandue je dirais les hamburgers les hot dogs les frites et les oeufs brouillés et comme c'est ça je prendrais une pomme d'accord cuttool bah moi j'ai entendu dire qu'ils faisaient des hot dogs avec des chiens écrasés mais bon alors cuttool cuttool oui je crois que t'as pas tellement bien compris la question bah si arrête pas vas-y non mais attends tu crois que je m'amuse à faire que ça toute la soirée je vous demande ce qu'ils mangent je t'ai dit ils mangent des hamburgers faits avec des chiens écrasés ouais bah ça ça rend signe qu'on mange des bêtes non mais pas du tout j'ai l'impression que moi j'ai l'impression que tu saurais ce qu'ils font des hot dogs avec des chiens écrasés d'accord alors moi je peux te dire une chose que c'est beau donc le les plats le plus qu'il y ait demandé attends c'est le qui s'amuse à à rnipler comme un comme un un bœuf c'est Sandy alors Sandy à ton merde toi d'accord pétasse ça ça va aller vite maintenant je vous préviens je modère pas mes mots alors ah bon on a vu là gare au gorille donc donc qu'est-ce que je disais donc ouais je voulais répondre donc bah c'est sûr que la spécialité d'avoir c'est hamburger brouillé voire même café du café souvent c'est hamburger café là-bas en règle générale donc ouais non mais c'est vrai qu'ils mangent aussi des glaces mais je pense que merci pour le larsen quand je parle c'est sympa donc je peux dire que c'est vrai qu'il y a aussi il y a des glaces mais quand il fait froid ça m'étonnerait c'est vrai qu'il y a beaucoup Gérard c'est vrai qu'il y a beaucoup d'obèses aux états unis non non mais je peux je peux dire que en règle générale là dans dans dans les quartiers attendez s'il vous plaît merci déjà je vais couper je vais te répondre Tony après mais il y a une question hier c'est que peut-être important oui il y a Jardis Couture qui te demande quand tu es allé à New York est-ce qu'il y avait encore le vaisseau d'indépendance B au-dessus de l'Empire State Building non qu'est-ce que je voulais dire merci c'est pas à Manu qu'il faut les envoyer c'est à moi d'accord alors pour la première question êtes-vous déjà allé à New York alors il y a 50% des gens qui ne connaissent pas New York dans la Manche alors ça la Manche c'est dans le département 50 donc je vois pas du tout l'Europe il y a New York là-bas non mais il faut passer par la Manche pour la New York c'est la mer la mer tu connais pas la Manche non mais attends tu me dirais il faut traverser la Seine pour aller à Suresnes c'est pareil à Broutille 32% des gens répondent ne répondent pas aux mondiaux donc je vois pas du tout le rapport avec êtes-vous déjà allé à New York qu'est-ce qu'il y a encore 18% sont allés à Euro Disney alors je sais pas si Euro Disney ils veulent parler d'Euro Disney celui qu'il y a à Paris mais à New York ça s'appelle pas Euro Disney c'est même pas Disneyland c'est Disney World c'est Disney World je crois que le parc d'attractions là il est en il est en voie de disparition oui Rigo il y a Raptor qui te demande vu qu'il n'y avait pas le vaisseau d'indépendance D est-ce qu'il y avait King Kong sur l'Empire State Building non plus donc je répondais à qui c'était donc Tony tu peux me je répète pas la question donc tu voulais me parler s'il y avait des obèses voilà j'ai très bien compris je répète pas la question si ça te plaît pas mon pote tout à l'heure tu vas dégager et puis je vais pas te répondre tout de suite vas-y on te réponds quand même alors donc pour te dire s'il y avait des obèses là-bas je sais qu'on en a vu pas mal et c'est vrai qu'il faut voir aussi ce qu'ils mangent parce que quand tu vois le nombre de restaurants qui sont les uns à côté des autres ça fait un restaurant tous les 20 mètres à peine grosso modo et je peux te dire une chose grosso modo il y avait un restaurant tous les 20 mètres oui Rigaud avant qu'on fasse une pause non il me demande si attends c'est méchant il parle de Sandy bon alors c'est pas la peine donc alors j'ai une question est-ce qu'ils ont toujours le syndrome de la vache folle au McDo non mais attends je vois pas du tout le rapport avec New York là dans les hamburgers non mais attends je vois pas du tout le rapport parce que le temps c'est pas le temps je vois pas du tout le rapport parce que le temps c'est pas le temps je vois pas du tout le rapport parce que le temps c'est pas le temps je vois pas du tout le rapport parce que le temps c'est pas le temps le truc sur la vache folle ça vient pas de New York ça vient d'Angleterre donc vas-y toi parle plus fort comme ça on comprendra bien donc oui moi j'aimerais te poser une question est-ce que tu crois que la viande qu'ils mettent dans les hamburgers est-ce que c'est la même viande qu'on prend attends 5 minutes tu parles encore plus fort je comprends pas c'est de la viande de riz c'est de la viande de riz dans les hamburgers attends mais je pense à les 24 lignes je suis en train de me faire une question je suis méchant attends 5 minutes je vais bouffer ton saucisson en lait attends tu fermes ta gueule toi connard ok connard écoute je fais les 24 lignes ouais tu fais les 24 lignes et tu parles moins fort quand les gens ils parlent ok allô non Gérard arrête arrête arrête de le frapper Gérard arrête il continue ton débat bon alors saucisson en lait vas-y je t'écoute vas-y avant qu'on fasse ta pause oui donc je voulais te poser la question suivante est-ce que tu crois que la viande qu'ils mettent dans les hamburgers est-ce que tu crois que c'est la même viande qu'en France ? si je pense si parce que c'est faut dire une chose que les hamburgers donc c'est des trucs qui sont apportés d'un peu partout dans le monde donc c'est de la viande hachée donc je pense que ça peut être de la viande fabriquée aussi ouais mais je pense bon on arrête pour cette question maintenant tout le monde a répondu alors que représente New York pour vous et on va s'écouter on va s'écouter quoi ? la croûte des pieds de ma femme sont bonnes avec du caviar et on se retrouve tout de suite après au 0800 308 5000 et 0870 5000 et toujours www.inter.radio sur le site internet que Rigo vous attend à tout de suite à tout de suite à tout de suite au revoir bonne radio et donc il y a toujours Rigo qui vous attend sur le site internet www.fr j'ai une grande nouvelle on a déjà dépassé les 3000 personnes alors qu'il est qu'une heure du matin on est en train de voir tout l'heure ce qu'on a 3104,3 ouais mais j'espère qu'il y en a pas qui vont s'en aller à cause de fil d'arbre on vient de s'écouter quoi Gigi ? on vient de s'écouter les croûtes de pieds de ma femme sont bonnes avec du caviar vous pouvez toujours nous appeler au 0800 308 5000 il y a toujours monsieur fil d'arbre quand il sera décidé à faire son boulot correctement parce que les 24 lignes sautent mais il prend personne au standard donc ceux qui essayent d'appeler n'ayez crainte c'est fil d'arbre qui déconne allô ? hein ? on retient les lignes qui sautent alors donc on récupère cul de poule c'est bien si Manu ? oui je peux avoir les gens ? ah bah excuse-moi merci donc on récupère cul de poule oui je suis là rebonsoir rebonsoir saucisson à l'ail salut salut euh sudboule toi tu viens d'arriver bonsoir euh Tony salut ma couille salut cuisse de poule cuisse de blour pardon moi je suis là euh pot de chambre pour terminer allô Gérard ok alors donc la question c'est que représente New York pour vous ? alors on va demander ça bah on va demander ça bah bah bah cuisse de blour tiens bah pour moi ça représente un lieu historique enfin je parle de la société de liberté ouais et et voilà c'est tout ça euh pour toi euh ah ouais mais toi tu y as jamais été ouais ouais je parle de ouais ouais donc euh avec les boutiques en fait hum d'accord mais euh t'as pas eu l'occasion de d'aller dans dans dans le centre de dans le centre ? non non d'accord euh pot de chambre ? ouais bah moi ça me fait penser aussi à ce qu'il y a de la liberté et puis au cinéma mais attends mais pourquoi le cinéma ? euh je sais pas si t'as vu Dimorphi dans la presse à New York ? mais non mais mais attends mais mais attends pot de chambre non mais je vois pas du tout le rapport que représente New York pour vous toi tu me dis la statue de la liberté et les cinémas mais attends mais je vois pas du tout le il a raison moi j'ai vu aussi euh perversion non mais attends Tony pour l'instant je demande à pot de chambre oui oui bon alors vas-y Tony si tu... bon toi pour toi c'est le cinéma et la statue de la liberté c'est ça pot de chambre ? hum hein euh Tony non mais je voulais dire qu'il avait raison parce que moi j'avais vu perversion anal à New York aussi et ça parlait de New York et puis il y avait Antoine Lefond de New York ah Delphine excuse moi allô ? ouais salut chérie ça va ? ça va ? ouais non mais euh Tony ouais Tony tu arrêtes s'il te plaît ? je te rappelle plus tard là je parle à Jean-Loup non Tony s'il te plaît je parle au bouffe de l'antenne ok ok Tony ! euh ouais et puis aussi ce que ça m'inspire aussi New York c'est des filles blondes qui vont se baigner à moitié à poil en baillot de bain rouge dans la tamise non mais attends parce que là je vois pas le rapport tu veux dire la série ? euh Suzeboule ouais ça me fait penser à King Kong et Godzilla d'accord ouais tu vois tu peux... je vais répéter la première question du débat je vais y répondre non non je répète plus les questions euh saucisson à l'ail alors ce que ça représente bah la statue de la liberté les vacances et évidemment les beaux garçons d'accord ah ben donc voilà cul de poule ouais moi ça représente 6 mois de ma vie je suis partie 6 mois là-bas j'ai fait la fête pendant 6 mois quoi ouais mais alors pas con alors comme toi tu y as été pendant 6 mois ouais donc tu peux me dire qu'est-ce que t'as visité ? j'ai visité plein de trucs mais j'ai surtout fait la fête en fait j'étais dans les boîtes j'étais pas là-bas pour visiter vraiment quoi j'allais à la statue de la liberté dans l'Empire State Building pourrais-tu nous inviter quand même ? voilà pourrais-tu nous inviter ? mais attend non mais la prochaine fois j'y retourne bientôt y'a une question hier c'est Rigaud non ? ouais y'a Davy Wan laisse tomber Rigaud laisse tomber non mais attends euh Rigaud impose-toi Rigaud assieds-toi Gérard toi fais gaffe parce que tout à l'heure j'étais éclaté toi Gérard y'a juste Davy Wan qui te demandait si New York c'était la capitale des Etats-Unis euh je... non c'est Washington pour le remettre à sa place voilà alors euh donc tout le monde a répondu donc euh pour moi que représente New York ? donc bah bien sûr y'a la statue de la liberté y'a le stadium building y'a le central park y'a la cinquième avenue qui est super belle à visiter avec euh Manhattan hein ? Manhattan c'est où ça ? c'est New York ouais mais euh attends tu peux préciser le fond de... Manhattan bah euh Manhattan ? ouais ouais bien sûr on a visité tous ces coins là on a même visité le Wood Boulevard ? mais on a même visité le... les quartiers euh chinois, italiens et... et autres t'as visité le Wood Boulevard Gérard ? hum ? t'as visité le Wood Boulevard ? bah bien sûr on... je t'ai... qu'est-ce que je viens de dire ? on a fait la cinquième avenue on a... on a fait qu'une marché de... durant les... les trois jours mais qu'est-ce que t'as dit en le... attendez attendez tout le... tout le monde... bah pas tous en même temps ouais mais Tony je voulais te demander si t'étais allé dans le quartier euh Black à Amsterdam bah je viens de... eh qu'est-ce que je viens de dire dans les quartiers noirs espèce de... d'abruti ? ah excuse-moi j'ai pas entendu un pralem donc c'est un pralem ? bon euh celui qui... celui qui reçoit du monde là c'est plus la peine qu'il... qu'il participe au débat parce que ça commence à m'énerver eh dégage de chez toi tu les fais pas rentrer ok ok on veut pas... on veut pas... on veut personne arrêtez de rigoler là tu gères un peu ? eh tu fais quoi ? oh non je fais... tu fous ta merde mais non mais j'ai pas que j'ai une émission à faire avec le boeuf de soin de... oh non mais t'es en train de foutre ta merde ou quoi toi ? oh là là c'est nous New York euh donc qu'est-ce que je voulais dire moi c'est tout Gérard ? oui il y a Ethan sur IRC qui te demande si t'as rencontré des stars à New York euh alors qu'on... non on a pas eu l'occasion d'en voir à part que ils puissent... ceux-ci sont à l'aïe il y en a dû voir euh... euh moi j'ai vu Al Pacino et... et Jean Reno bon alors celui-là c'est plus la peine maintenant Fildar tu fais ton boulot correctement président de la république des Etats-Unis Bill Clinton d'accord euh Fildar écoute ton micro et tu me gères celui qui est en train de recevoir du monde parce que ça m'énerve je voulais te poser une question Gérard je voulais te poser une question est-ce que t'as été dans la... dans la rue tu sais où ils font leurs... ils laissent des empreintes de pieds là c'est avec leur nom ? euh ouais on l'a visité aussi ça on y est passé c'est Hollywood ? ouais c'est dans Hollywood boulevard bon Fildar tu gères maintenant ça commence à bien faire je vais ouvrir alors d'ailleurs je vais t'ouvrir mon poing dans ta gueule toi t'es allé à South Fork ? non euh les touristes vont tu le puces ? je vais plus facilement à New York qu'à Roubaix c'est pas la même ambiance ouais ouais c'est sûr c'est pas pareil elle est bien elle est bien la question donc euh on va demander à Tupoul ouais bah ouais moi je vais plus facilement à New York ouais je suis désolée pour les gens qui habitent Roubaix mais euh non non je peux pas là d'accord euh... ceux-ci sont à l'aïe ? non moi je pense que les touristes peuvent se rendre plutôt à Roubaix plus facilement ouais non mais attends parce que y'en a un qui est en train de faire le con tout à l'heure si je me lève il va s'en prendre une il va dégager des studios vite fait lui ouais donc je te disais je pense que les touristes peuvent se rendre plus facilement à Roubaix je vais t'expliquer pourquoi parce qu'à Roubaix ils peuvent s'y rendre en voiture ou en train et que c'est moins cher que l'avion c'est à quoi avoir à Roubaix ? à l'avion quand tu payes ton billet de train déjà que ça te fait cher en plus tu fais la queue pour avoir ton billet de train donc euh... mais t'as pas la statut de la liberté à Roubaix mais y'a des "bouldings" à Roubaix ? y'a pas de "bouldings" là-bas non mais vous la laissez parler c'est tout ok, bon merci euh... Susboul ? bah moi je pense que c'est quand même plus facile d'aller à Trifouille et Jours parce que c'est en France et c'est plus près n'importe quoi toi Tony ? ouais moi tant qu'à faire je préférerais aller à New York avec plus de poules qu'aller à Roubaix ouais ouais ouais ouais euh... Cuisse de Blour ? bon bah je préfère aller à New York c'est clair on t'emmènera on fera des trucs à Troyes attends attends y'a D-Light sur IRC ils demandent quelle langue on parle à Roubaix bah à Roubaix on... Roubaix quoi ? euh... non on parle le ch'ti-mi donc comme Roubaix c'est dans le nord donc on parle le ch'ti-mi voilà euh... Potcham pour terminer ouais mais on s'intéresse plus facilement à New York aussi ouais on part tous les 5 là d'accord, bah moi je peux vous dire je préfère aller à New York qu'à Roubaix parce que à New York au moins c'est... on t'en met un peu comme moi alors ? moi je préfère aller à New York parce qu'il y a plus de trucs à visiter que dans le nord de la France voilà voilà voilà donc alors y'a peut-être un... un petit sondage là mais je pense que ça m'étonnerait que ça fasse plaisir aux gens non monsieur Edou... Edou New-Yorkais de naissance 60% ont répondu euh... euh... 60% des gens le sont depuis le 1er janvier je vois pas du tout le rapport ça ça a rien à voir euh... après j'ai 30% des gens sont... des gens le sont depuis que Dieu est là alors là je vois pas du tout le rapport 10% des gens se... se sont fait vacciner contre New York cet après-midi n'importe quoi ça c'est des conneries au PD de... au PD de Fildar donc ça a rien à voir avec les questions donc je sais même pas pourquoi qu'on me donne des sondages comme ça, ça sert à rien du tout la sixième question celui qui s'amuse à vouloir répondre qui est pas sur l'antenne il va s'écraser merci bonjour Gérard alors qu'est-ce qui vous fait le... qu'est-ce qui vous a fait rêver à New York bonjour Gérard hé ça y est t'as fini ça y est t'as fini toi de dire allô Gérard là le connard putain c'est bizarre on l'entend plus alors euh... bonjour Gérard bah moi je sais pas aller à New York alors euh... je peux pas savoir ce qui peut me faire rêver le plus quoi non mais attends tu peux imaginer parce que t'as... ils en parlent quand même... non mais tu peux imaginer ils en parlent quand même à la télé non mais tu peux imaginer ils en parlent quand même à la télé non mais tu peux imaginer ils en parlent quand même à la télé ouais d'accord je crois que euh... il est blasé il est blasé non non pas du tout mais euh... j'ai une idée je crois que je vais le dégager ouais je pense plus de blours bah les beaux garçons le soleil t'as pas besoin d'aller à New York ma petite t'as pas besoin d'aller à New York ma petite tu viens à Paris bon Tony s'il te plaît tu te calmes non mais Tony tu te calmes ou sinon tu vas faire comme pas de chambre non mais Tony tu te calmes ou sinon tu vas faire comme pas de chambre non mais pourquoi aller si loin on la laisse parler ok vous la laissez vous la laissez Tony s'il te plaît tu laisses parler les gens après on te laissera parler d'accord alors tu laisses parler un peu les gens aussi ok merci donc cuisse de blours c'est bien ce que je dis mais je suis allée que 3 jours donc euh... tu y as été 3 jours ? ouais et de quand à quand ? bah j'en sais rien moi il y a 2 ans au moins d'accord Tony donc maintenant ouais mais New York j'ai eu l'occasion de connaître ouais mais New York j'ai eu l'occasion de connaître mais en fait que par la télé et puis ça me dit rien en fait je viens à Paris oui oui donc New York pour toi personnellement ça ça me dit rien franchement d'accord euh... suisse boule ? bah moi j'aurais voulu rencontrer Jock Ewing mais il est mort non mais attends qu'est ce qui vous a fait rêver à New York ? bah c'est Jock Ewing dans son orange non mais attends je vois pas du tout le rapport avec la question Tony s'il te plaît merci bon alors suisse boule ? et bah c'est Jock Ewing parce que... bah vous vous réveillez un peu parce que là c'est mort quoi oh punaise bon allez au revoir pour les saucissons à l'ail oui alors moi je vais te dire franchement ce qui me fait vraiment rêver c'est d'habiter dans un grand building et de voir les habitants de haut n'importe quoi non mais ça euh... même si on monte au 40ème étage on te voit non là je vais te dire une chose que ça m'étonnerait Tony non non Tony je vais te dire une chose Tony non mais moi j'ai pas d'odeur Tony s'il te plaît merci tu te poules bah moi en fait j'ai rêvé de tout et puis en fait si tu claques un peu de frites tu peux assouvir tous tes fantasmes là bas quoi d'accord je répondrai après oui Rigo sur l'IRC qui te demande si tu t'es bien bourré la gueule à New York là je vais te dire une chose tu vois là c'est que le plus gros problème à New York c'est que si tu te fais piquer avec de l'alcool tu vas directement en cabane donc il faut mais il n'y a pas beaucoup de cafés à New York euh non c'est plus des c'est plus au nord hein on va préciser même avec saucisson à l'ail comme on y a été donc on peut préciser c'est que là bas c'est rare que tu as le droit de boire de l'alcool ou sinon faut que tu la planque dans un espace moi je crois pas y avoir été avec toi c'est moi qui y suis allée c'est pour ça que là tu dois faire arrête arrête c'était avec toi vous êtes allé voir Zodzilla ? saucisson à l'ail ? tu te fous de moi là ? bah oui je me fous de toi attends toi je te jure t'as intérêt de répondre aux prochaines questions correctes il y a Rennes sur l'IRC qui te demande si tu te fais piquer avec de l'Adidas tu vas en prison aussi parce que le parfum tu as le droit d'en acheter mais pour revenir à la question d'Ethan donc pour l'alcool il faut que ça soit planqué et ça je pense que personne pourra me le contredire c'est qu'ils mettent ça dans des dans des poches dans des trucs qu'on fasse pas les gars ah mais quand tu vas dans les cafés c'est pas dans les cafés arrête arrête de lui mettre des coups de pied arrête de lui mettre des coups de pied tu vas te prendre le poing dans ta gueule dans peu de temps allez enchaîne le alors donc moi qu'est-ce qu'il m'a fait qu'est-ce qu'il me fait rêver oh vous fermez votre gueule ou quoi là maintenant ah ouais Gérard ce que tu aurais dû faire c'est mettre de l'eau de vie dans une bouteille d'évian comme ça tu aurais eu ta douce quotidienne d'alcool oh Gérard ah oui j'ai fait un like et il m'écrit pas du tout il est parti ? non d'accord vous allez arrêter de punir votre connerie maintenant vous allez peut-être reprendre le débat correctement I'm leaving today branche ta gueule toi connard un jour Gérard sera à New York avec toi Gérard Gérard Gérard Gérard Gérard Gérard Gérard Gérard Gérard ton débat toi Gérard assieds-toi Gérard assieds-toi et reprends dans le calme avec les auditeurs c'est bon un jour Gérard sera à New York avec lui allez allez allez ouais marque toi bien toi espèce de connard va c'est une question bon les auditeurs oui la question de Gérard on écoute alors pensez-vous qu'il fait jour et qu'il bouge salope bon et ben c'est simple on va s'envoyer un livre non mais on peut pas non non tu peux pas je veux pas le savoir moi Fildar il fait pas son boulot on va reprendre le calme Gérard on arrête on arrête il y a un petit débat calmement il y a D-Light sur l'IRC qui te demande si tu étais en première classe dans l'avion et où étaient la piscine et les cours de tennis dans l'avion déjà pour lui dire il n'y a pas de piscine et il n'y a pas de cours de tennis en première classe c'est réservé aux hôtesses de l'air donc on n'a pas eu l'occasion d'être en première classe il n'y a pas de première classe dans les avions il y a un écran Gégé comment ? il y a un écran ouais il y a un écran télé donc qu'est-ce que je voulais dire du béton et du macadam la plus belle piscine c'est la plage tu sais ce qu'on va faire si tu veux poser la question on va mettre un petit disque je crois que c'est mieux toi tu vas me gérer ça parce que tout à l'heure je vais t'éclater je le sens combien on est ? on est toujours plus de 3500 ça va alors je peux faire le con je crois que tu vas faire le con on va le faire avec mon pied dans le cul pose la question Gérard alors pensez-vous qu'il fait jour à New-York quand il est 18h à Paris et qu'il pleut et on s'écoute les petits pousseaux en Paname avec les chiens d'Henri en break je te signale et voilà donc on vient de s'écouter les petits pousseaux de Paname avec les chiens d'Henri en break il est toujours 1h22 exactement donc vous êtes toujours sur Fun Radio donc vous pouvez toujours nous appeler au 0803 085 ou au 0875 où il y a Fildar qui vous y accueille qui ne veut pas vous répondre c'est pas de notre faute et puis Rigo toujours toujours l'internet lui il bosse bien donc www.fairfunradio.fr et ouais ? donc tu me disais ? il y a rien là maintenant ? on est un peu moins de 4000 3856 moins 3 parce qu'il y en a 3 qui viennent de partir bah ouais à cause de Fildar bravo ils allaient se coucher ils connaissent New-York et ils s'en foutent de ton débat tant pis pour eux donc on est quand même à 3800 c'est quand même pas mal à 1h23 du matin donc c'est bien donc on récupère Cutpool bonsoir Gérard, bonsoir Manu, bonsoir Fildar bonsoir bonsoir à tous je te prends par devant et par derrière y'a pas de problème t'es salope t'es salope à ton merde toi pétasse c'est quand tu veux hein oh ceci soit à l'aïe attend je réponds à celle qui vient de dire y'a pas de problème Gégé non mais moi je t'emmerde salope au pied c'est gentil hein d'accord ? alors celle qui s'amuse à dire des conneries va dire tout de suite d'accord ? c'est clair et net plus de blour j'ai le boule j'ai les boules j'ai les boules attends j'ai les boules c'est pas moi c'est bien c'est bien pour en venir au débat pour en venir au débat tu le dois 1h24 on recommence juste après la pause toi tu fous ta merde tu les laisse dire les auditeurs c'est bien ils ont raison continue à cause de toi ça va descendre celui qui s'amuse à recevoir du monde c'est pareil donc j'accueille le dernier auditeur c'est Géléboule qui gratte bonsoir dis donc tu pourrais mieux écrire on t'a pas appris à écrire bonsoir à tous bonsoir bonsoir bonsoir bonjour bonjour enchaîne Gérard alors 7ème question le menu il est vélaire aujourd'hui bon toi tu le teues s'il te plait pensez vous qu'il fasse pensez vous qu'il fesse oh tu la viens une salope ok quitte poule ou puce de blour là je vous préviens vous allez vous calmer les deux salopes qui nous restent Gérard pour en revenir au débat il y a Yankee sur l'IRC qui te demande si on peut payer les putes de New York en euros alors là pour l'instant je peux pas répondre parce que l'euro c'est pas avant janvier 99 et les billets sont pas avant ça sera que les pièces qui seront sorties maintenant toi je t'emmerde ok bonsoir lui bonsoir allez pour Tony c'est terminé Tony c'est terminé pour lui allez hop tu le bires tu prends quelqu'un d'autre allez hop terminé comme ça on entendra pas le téléphone sans arrêt Gérard c'était pas la même sonnerie que le téléphone de Tony c'était chez moi mais j'ai décroché ça commence à bien faire ça y est j'ai décroché le téléphone Manu tu m'éteins le double son j'ai rien mis Gérard mais j'ai rien mis je m'en fous je pense pas à la 7ème question vas-y vas-y bon alors fil d'art tu gères ou sinon je t'éclate écoute je cherche des auditeurs je peux pas tout faire autrement je fais la vaisselle aussi pensez-vous qu'il fasse jour à New York quand il est 18h à Paris et qu'il pleut on va demander à ça à cul de poule ça dépend ça dépend ça dépend qu'il soit laissé lever ou pas non mais tu m'as arrêté de dire allo constamment parce que ça commence à me faire chier là d'accord bon alors tu t'écrases toi pour l'instant quand je t'appellerai poitrine tu sortiras de sous le lit toi excuse moi à la place de Tony j'ai trouvé un auditeur très sympa au demeurant qui s'appelle mon chéri. Salut ! Salut mon chéri ! Tu peux foutre où tu veux, tu le sais. Salut ! Salut ! Je te signale, Fildar, fais gaffe à ce que tu me prends comme auditeur parce que c'est toi qui es responsable si tu ne me prends pas au-dessus des 24 lignes. D'accord ? On verra toi. Alors saucisson à l'ail. Alors te dire qu'il pleut quand il est 18 heures, je ne crois pas. Pensez-vous qu'il fasse jour à New-York quand il est 18 heures ? Et qu'il pleut ? Je n'ai pas compris la question. Alors je te dire qu'il pleut là-bas, je ne crois pas. D'accord. Je ne pense pas non plus. Attends, saucisson à l'ail, je te préviens, tu es de poule ou tu es de mort, vous avez vu ce que j'ai fait ? Vous avez vu ce que j'ai fait ? Je te préviens, tu es de poule ou tu es de mort, vous avez vu ce que j'ai fait ? Je te préviens, tu es de poule ou tu es de mort, vous avez vu ce que j'ai fait ? Vous fermez-vous sur vos gueules, vous fermez-vous sur vos gueules, les deux pétasses. Ce n'est pas moi. Tu ne nous insultes pas comme ça, alors ce n'est pas moi. Alors vous fermez vos gueules. Ce n'est pas nous. Mais effectivement, je crois qu'il peut faire jour quand il est 18 heures à Paris, voilà. Et quand vous avez fini de prendre de la poudre de ma gueule, là. Je sens qu'il va prendre mon poing dans ta gueule. Tu n'écoutes même pas ce que je te dis, là. Pour l'instant, il y a des connards. Moi, tu n'écoutes même pas les questions qu'on te pose. Gérard, t'as payé combien pour faire la big pile ? Et ta soeur, elle a payé combien pour faire une pipe ? Bon, Gérard, tu continues ton débat, là ? Tu sues, franchement ? Bon, s'il vous plaît, s'il vous plaît, les auditeurs, on se répond à la question. Alors, on continue, je repose la question. Saucisson à l'ail, pensez-vous qu'il passe jour à New York quand il est 18 heures à Paris et qu'il pleut ? Je viens de te répondre, je viens de te dire qu'il ne pleut pas et que là-bas, effectivement, il peut faire 18 heures quand il fait jour, là-bas. D'accord, je te prends. Moi aussi. Bon, alors, toi, tu dégages comme ça, t'as tout de suite répondu. Mais il n'a pas répondu, Gérard, laisse-le répondre. Mais attends, pour l'instant, il est en train de me prendre pour un con. J'ai dit que tu voulais que je te prenne, c'est pour ça. Toi, Manu, tu fermes ta gueule et tu fais ton boulot correctement. Je n'ai rien dit. Quand je te prends, tu réponds à la question pour la dernière fois. Mais bon, moi, je pense qu'il fait nuit à New York. Quand il fait jour, à Paris, du Luxembourg. Bon, alors toi, tu n'as pas compris la question, tu dégages ça. Réexplique-lui, Gérard, plutôt. Pensez-vous qu'il passe jour à New York quand il est 18 heures à Paris et qu'il pleut ? C'est clair, net, précis. Non, moi, je pense qu'il fait nuit à New York et qu'il neige à 18 heures à Paris. A 18 heures, il fait déjà jour à New York et à Paris, il fait nuit. Je te signale. Oui, mais ça, c'est pas vrai. Parce qu'il y a un décalage d'horaire de 6 heures. Pourquoi tu ne l'expliques pas, ça, au lieu de leur poser une question ? Toi, tu fais ton boulot, tu la perds. Ce n'est pas au Big Bill, là. Ce n'est pas à toi que je m'adresse. Ce n'est pas au Big Bill, tu ne poses pas des questions pour gagner des cadeaux. Ce n'est pas à toi que je m'adresse. Gérard. Oui ? Ça dépasse, ça dépasse, quoi. C'est qui ? C'est les saucissons à l'ail. Oui ? Gérard, pour revenir au débat, il y a un VNS sur l'IRC qui te demande si les New Yorkais dorment sous la pluie le jour à cause du décalage d'horaire. Ça, je ne peux pas dire parce que le décalage d'horaire, je ne sais pas s'ils le font aussi ou pas. Donc, je ne peux pas lui dire. Est-ce que toi, tu en as vu qui dormait le jour sous la pluie ? Là-bas, on n'a pas eu l'occasion d'avoir de pluie, donc je ne peux pas le dire. On n'a pas eu l'occasion d'avoir de pluie. OK. Alors, tu es en série ? Oui. Moi, je pense qu'à New York, déjà, il pleut tout le temps. Ah oui ? C'est un phénomène qu'on peut se trouver. Et en fait, à cette heure-ci, à New York, il doit faire jour. Il est quelle heure ? Une heure plus ? Il est 18h17 à New York, exactement. Oui, il y a... Oui, oui, oui, 18h17. OK. Cuisse de blour ? Je n'en sais rien du tout. Attends. Tu n'en sais rien ? Oui, c'est vrai. Non, mais ça va, tu ne veux pas que Sam t'achète un lit non plus, non ? Oui. Tu fais bien ton boulot, là ? Bah ouais. Oui. Ah bah, dis donc. Tu ne me dirais pas. Bonne nuit à toi. Ouais, bah, l'autre, il est vautré sur les deux sièges. Monsieur, il n'est même pas capable de prendre les gens au standard. Alors, les 24 lignes sonnent. Les gens, ils s'amusent à appeler. Monsieur ne veut rien prendre. Monsieur, il est fatigué, il faut le comprendre. Non, mais il est fatigué pour rien de la journée. Bon, Gérard, pour en revenir au débat, il y a Ethan sur IRC qui demande si tu as visité une radio à New York, genre Fun Radio. Non, là-bas, on n'a pas eu l'occasion de visiter. Tu as visité des radios. Si, à ce qui paraît, tu as été invité pour l'émission de World Siam. C'est ça, tu as raison, toi. J'ai les boules qui grattent. Il y a des champagnes pour ça. Oui, Gérard. Moi, je suis, je suis d'origine New Yorker. OK. Et je pense que, enfin, je pense que, enfin, le temps, le temps, oui. Oui, oui. OK. D'accord. D'accord. Tu as vu Big Bill ? J'ai les boules qui grattent. Tu dégages. Au revoir. Au revoir. Au revoir. Tu ne veux pas dégager. Il vient de New York. Non, je ne le dégagerai pas. Au revoir. Au revoir. Je ne le dégagerai pas. Il est de New York. C'est intéressant. Il prend son boulot comme il faut. J'ai vu la Big Bill Tower. OK. Bon, ben, moi, quand Pilar prend son boulot, je continuerai le débat. Attends, j'essaye d'avoir des New Yorkais parce que tu fais un débat sur New York. Je me suis fait chasser ta journée. Le New York. Quand ? Quand ? Quand ? Quand ? Tu n'as rien foutu. Tu n'as rien foutu. Tu n'as rien foutu. Alors, on le dégage. Non, on le garde. Non, non, non, non. Gérard, il y a Turpentine sur l'IRC qui te demande si tu es monté sur la statue de la liberté. Est-ce que d'en haut, tu as vu la tour Eiffel ? Non. La statue de la liberté, de toute manière, elle était trop loin et on n'a pas pu monter dessus. Elle était partie ? Non, elle est trop loin par rapport à là où on était du 102ème étage du… je ne sais plus où. Vous étiez au 102ème étage ? Je ne sais pas si il n'y a que 100. Il n'y a que 50 étages. Alors, Tony, je te signale que je viens de te faire connaître encore. Non, Tony n'est pas là. Il n'est pas là. Tony, il s'est couché. Oui, oui. Enfin, bref. Fildar, il fait vachement bien son boulot. Ça se voit qu'il va vite dégager de ce qu'on a. Il fait bien son boulot comparé à certains. Oui, il ferait mieux son boulot. Ça irait peut-être mieux pour gérer le débat. Pour l'instant, il fait que de la merde. Oui, c'est ça. C'est ça. Bon, Gérard, c'est mieux ton boulot. Il pose ta question, là. Enchaîne. Attends. Toi, si tu n'es pas content, tu vas dégager. Ok, super. Ok ? Ok, super. Bon. Alors, huitième question. New York est-elle une ville plus dangereuse que Paris ? Si oui, pourquoi ? On va demander à Saucisson à l'ail. Oui, absolument. Parce que New York, je pense qu'il y a plus de problèmes avec la police. Oui. Et on entend que c'est plus dangereux que Paris. Oui, oui. Parce que New York, c'est moins dangereux que Paris. Et New York, c'est moins dangereux que Paris. Et on entend souvent les sirènes. Les sirènes des polices, si tu veux. Oui, il y a la police et les ambulances. Et il y a souvent des meurtres aussi. Mais ce qu'il y a, c'est que, comme on y avait été, c'est bête qu'on n'a pas pu voir les… Oui, mais voilà. C'est un genre de sirène comme ça. Voilà. Non, non, non. Pour l'instant, c'est un genre de sirène. pour l'instant celui-là c'en est un qui s'amuse donc ok c'est bien comme réponse mais parle un peu plus fort devant ton combiné s'il te plaît s'il s'en aille parce que c'est ce que je fais mais je peux pas faire autrement ok, cute poule non non c'est pas plus dangereux New York, il suffit de pas sortir la nuit bah de toute manière il y a des gens qui sortent quand même la nuit tu sors dans la journée, tu crains rien même dans la journée je peux te dire on peut te confirmer avec saucisson à l'ail on pourra te... je t'ai dit Gérard que je ne te connaissais pas donc pourquoi tu crois que je te connais moi je te connais pas ouais ouais, friconne ma gueule toi je me fous pas, tu dis ça pas mal que je ne te connais pas c'est ça, t'as raison je te prends quand tu veux y'a pas de problème non tu réponds bon d'accord, c'est terminé pour lui je te prends, t'es là tu réponds allô on entend très mal ouais, c'est vrai ça c'est bon, je me prends je te prends, tu réponds à la question, s'il te plaît je me prends par la barbichette le premier de nous deux qui... ne me fais pas comme Fildar, d'accord ? je me prends contre lui sinon tu seras pas celle du standard, toi ah merde DG ? je te prends par la bistouquette moi je t'emmerde t'emmerde parce qu'ils sont à l'ail, c'est bien ? t'emmerde ? je te prends, tu m'emmerdes ? bravo, bravo j'ai le débat ok connard bon allez hop, terminé, moi je fais conclusion, je retourne à la septième terminé, grâce à Fildar, on arrête ici mais non, c'est pas de ma faute attends, tu traites saucisson à l'ail et c'est de ma faute ? t'es égal, tu fais même pas ton boulot mais je le fais mon boulot, il est fait non, attends, il est mal fait t'es même pas capable de dire à l'autre t'es à l'antenne, tu réponds à la question mais si, t'attendais non, même pas, même pas attends, t'es pas capable de répondre si tu réponds à la statue de la liberté tu sais même pas répondre ta gueule ferme ta gueule et c'est tout alors je te prends pour la dernière fois ah la derbichette ok ok ok ah Gérard, j'ai perdu 200 personnes sur l'IRC parce que t'as dit trop de gros mots non mais c'est bien, merci Fildar aussi non mais c'est toi qui les a dit les gros mots Gérard ouais mais Fildar il fait même pas son boulot, il est même pas capable de gérer un stand-up bon je te prends bon je te prends à part travailler pour Max à partir de 11h30 lui trouver des auditeurs potables le débat c'est sur New York il y a que Manu qui est capable de bosser en plus ça continue c'est Manu qui va prendre le standard ça commence à bien faire alors je t'en prends pour la troisième fois tu réponds à la question ou tu dors je t'en prends pour la troisième fois mais faut que tu me prennes moi mais c'est qui celui qui dit allo ? putain mais tu commences à me cacher toi allo allo je t'écoute Gérard je t'écoute Gérard 2276 ça va ? bon allez les gars vous me faites chier j'arrête mais non mais non je te prends tu es tout seul à l'antenne comme ça Gérard t'entendra vas-y je t'écoute Gérard non tu réponds à la question je ne la répète plus peux-tu la répéter s'il te plait putain mais Fildar tu commences à me cacher les couilles sérieusement tu commences à me cacher les couilles sérieusement c'est pas de la faute de Fildar sérieusement tu commences à me cacher les couilles allo ? il y a tellement de boxons que j'ai pas entendu la question alors New York est-il une ville plus dangereuse que Paris si oui pourquoi ? alors New York est-il une ville plus dangereuse que Paris si oui pourquoi ? bah oui parce que je pense qu'il peut y avoir des criminels à New York comme à Paris bah oui parce que je pense qu'il peut y avoir des criminels à New York comme à Paris d'accord alors mon chéri maintenant ouais bah moi je pense que New York c'est bien plus dangereux que Paris une question IRC une question IRC est-ce que tu t'es fait arrêter à la douane pour transport de substances illicites dans ton froc ? est-ce que tu t'es fait arrêter à la douane pour transport de substances illicites dans ton froc ? non parce que à la douane donc pour répondre à cette personne donc à la douane on est passé ils nous ont simplement souhaité un bon séjour ils nous ont simplement souhaité un bon séjour donc c'est tout voilà ce que je pouvais dire ouais bah toi détecteur détecteur de bagages détecteur de bagages je voudrais bien savoir qui c'est qui vient de me sortir ça encore comme connerie Gérard il y a Turpentine qui te demande est-ce que c'est vrai qu'à côté de la statue de la liberté ils ont mis le gargantua de Mirapolis ? non non pas du tout alors cuisse de blour c'est bon cuisse de blour bah je viens de répondre là ok donc qui c'est qui nous reste l'autre joli boutique moi je pense que c'est plus dangereux parce qu'il y a plus de circulation dans la ville parce qu'il y a plus de circulation dans la ville j'ai vécu à New York j'ai vécu à New York j'ai vécu à New York et je pense que c'est plus dangereux et je pense que c'est plus dangereux et j'ajoute et j'apprécie beaucoup ok donc celui qui recommence à faire ça va dégager celui qui recommence à faire ça va dégager si vous pouvez arrêter de jouiller merci Ça commence à me gonfler, là. Déjà, le premier débat, ça va aller vite. Je fais la dernière question, là. Il est 1h40. Je fais la dernière question. Alors, à votre avis, quelle est la différence entre Paris et New York ? Oui, c'est bon. Vas-y, vas-y. C'est qu'est-ce que j'aime bien ? Non ? Mais t'as contenté, j'en sens plus. Oh là là ! C'est énorme, je le dirais. C'est énorme, mais c'est bon. Alors, je répète. On a compris Paris et New York. Je n'y voyais pas. Donc, quelle est la différence entre Paris et New York ? Voilà. Donc, je peux répondre, c'est saucisson à l'ail. Vas-y. Donc, là-bas, à New York, l'avantage, c'est que les gens, en particulier en été, sont plus habillés cool que les Français à Paris. Et l'inconvénient, c'est qu'il n'y a pas de papier par terre, évidemment. Tu as une amende, quoi. D'accord. Et en plus, tu te fais arrêter par la police. C'est dangereux. Vas-y, c'est bon, c'est bon. Alors, vous arrêtez quand je parle. OK, super. Celui qui s'amuse à faire des conneries quand les gens parlent, tout à l'heure va gerber. Je ne vais pas le chercher. Alors, cul de poule. Oui. Il y a 6 000 bornes entre Paris et New York. Non, mais attends. Allô ? Allô ? Bonjour. Allô ? Allô ? Ah là là, on n'entend rien. TF1, bonsoir. A votre avis, quelle est la différence entre Paris et New York ? Cul de poule. S'il te plaît, tu réponds. Oui, je viens de te répondre. Vas-y, vas-y, vas-y. Oui, il y a 6 000 kilomètres. Alors, je te prends. Non, mais non, je ne veux pas que tu me prennes. Tu réponds à la question ou tu dégages ? Bonne nuit pour lui. Alors, ce coup-là, c'est terminé. Le fil d'air, c'est fait. Mon chéri. Fais gaffe parce que toi aussi, tu vas faire comme lui. OK. Alors, la différence entre Paris et New York, je pense qu'il n'y en a pas beaucoup. Alors, tu peux expliquer pourquoi ? Parce que la Tour Eiffel, la Statue de la Liberté, déjà, ce n'est pas pareil. Non, attendez. Tu n'as jamais vu la Statue de la Liberté à Paris, toi ? Non. Il y a une mini-Statue de la Liberté à Paris. Tu l'as déjà vue, Gérard, quand même, près de la Seine. Non, mais je ne vois pas du tout le rapport. Je te demande, à votre avis, quelle est la différence. C'est cassé, c'est tout. Voilà. D'accord. Regarde, Gérard, il y a Choc Norris à la télé. Fils de bleu, toi, tu fais ton boulot et tu fermes ta gueule. Quel chêne, quel chêne ? Non, mais l'autre, il est complètement charbé. Il est à moitié fou, lui. Fils de bleu. Oui, je pense qu'à New York, c'est toujours beau. Et à Paris, je ne peux pas. Vous vous tenez derrière. Sans déconner, vous êtes trop lourds. Oui, on est comme nous. Oh là là, je sens. Fils de bleu, tu réponds et c'est terminé, on fait conclusion. Non, non, non. Le premier, c'est de la merde. Grâce à lui, le deuxième, ça va être encore pire. Alors, je crois qu'autant conclure sur la neuvième et terminer. On attaque le deuxième. Excuse-moi, Gérard, avant qu'on fasse ta conclusion, à la place de Je te prends, on accueille Chias de Noël. Bien sûr. C'est encore des mecs. C'est encore des mecs. Ça fait une heure que j'appelle au standard. J'ai galéré, arrête. Je veux bien croire. On verra. Gérard, il y a René sur IRC qui te demande si à New York, les gens qui crient sont considérés comme des criminels. Alors, les gens qui crient sont-ils considérés comme des criminels ? Je ne pense pas. Tu n'entends pas condamnément crier dans New York, à mon avis. Gérard ? Oui ? Ces soucis sont là et j'aimerais te poser une question. Oui ? Gérard ? Oui ? Do you speak English ? C'est bon, vas-y, c'est bon, vas-y. Non, mais ça suffit. Vous arrêtez maintenant. Moi aussi, je vous parle. D'accord ? Donc, je vous pose une question à Gérard. Do you speak English ? Yes. Donc, yes, tu parles anglais. Voilà. Voilà, c'est tout ce que je voulais savoir. Tu es de l'homme lourd. Pour finir. Je disais qu'à Paris, c'est jamais beau. Pas le temps de merde. Et à New York, c'est bien. D'accord. Donc, je tiens sur... Hello ? I don't know if I have a question. If you speak English, I don't have a question. Just to answer the question, please. Vas-y, Rick. Yes, I think the difference between New York and Paris is because there are more circulation in New York. And that is between the person dancing. Non, mais attends, mais lui, de toute manière, c'est même plus la peine que tu le dis. Regarde dans l'équipe. Bon, euh... Gérard, t'as dit que tu parlais anglais. Tu peux traduire, s'il te plaît ? Non, va pire tout, toi. Tu vas te faire enculer. Chiasse de... Je sais pas quoi, là. De Noël. Chiasse de Noël, ça va arriver bientôt. Vas-y, toi. Écoute, c'est dommage, parce que moi, j'arrive à la fin du débat et, en fait, j'aurais pu te faire plein de trucs parce que mes parents sont américains. Donc, voilà, c'est dommage que j'arrive à la fin. Ben, je suis désolé. Voilà, ben, écoute... C'est pas de ma faute, parce que... Non, non, non, attends, je vais te dire chiasse de Noël. C'est pas de ma faute. Ah, bien sûr, bien sûr. Non, non, c'est pas moi. C'est pas moi qui... C'est jamais, jamais, jamais. C'est vous, pas les auditeurs. Moi, je peux soumettre une idée, c'est qu'étant donné qu'il vient d'arriver, Gérard, on peut le garder pour le deuxième débat. Non, c'est pas toi qui commandes. C'est moi. Je te demande. C'est moi qui commande. Je te demande. Tu me donnes l'air au deuxième débat, t'es pas là, tu te casses. Non, non, t'es plus là. T'es plus là. T'es plus là, toi. C'est ton chéri. Vu que je suis à l'arrivée, je peux rester aussi. Non. Ben, ouais, je peux rester. Non, pas de rien. S'il te plaît. Bon, vous, je vais répondre à votre avis. Quelle est la différence entre Paris et New York ? C'est que, comme Saucisson a dit, là-bas, les gens sont plus cools, sont mieux habillés que dans Paris et que là-bas, c'est plus propre parce que dès que tu jettes un papier par terre, de toute manière, t'es tout de suite sanctionné. Tandis qu'à Paris, c'est dé-gueu-lasse. C'est quoi, c'est la ville la plus dégueulasse que d'autres villes. Moi, je peux vous dire que New York, par rapport à Paris, c'est vachement plus propre et les gens sont vachement plus cools que Paris. C'est pas que tu y es resté moins longtemps qu'en France, non ? Non, non, mais même, les gens sont vachement plus cools. Deux petites bouscules. Attends, tu permets que je réponde à Manu, OK ? Les gens sont vachement plus cools parce que dès qu'ils te bousculent, ils te disent excuse-moi. Tandis qu'à Paris, dès qu'ils te bousculent ici, ils n'en ont rien à foutre. J'en ai eu l'expérience, je ne sais plus quand, avec Saucisson à l'ail. Elle a été bousculée. On n'y a même pas dit pardon. Elle a été bousculée complètement. Elle n'est pas tombée enceinte, quand même. Non. Donc, voilà. Je le demandais par rapport à New York. Tu dis que c'est différent de Paris. C'est quoi les sanctions que tu peux avoir à New York si, par exemple, tu jettes un papier par terre ? Là-bas, tu te chopes une amende et tu peux te retrouver au commissariat de police. Carrément. Tu peux faire de la prison ou pas ? Ça dépend. Si tu es pris pour la première fois, tu te chopes une amende. Si tu es pris pour la deuxième fois, tu te prends une deuxième amende et puis tu es en garde à vue pendant 48 heures. Mais il n'y a pas des noirs ? Et si les amendes peuvent aller, très loin, plus cher que Paris par rapport aux voitures. Si tu es pris pour la troisième fois, tu te chopes une amende et puis là, tu passes au tribunal et tu te retrouves en taule. Gérard, tu parles de la propreté dans les rues. Moi, je voulais savoir, vu que tu as été à New York avec ton chien, qu'est-ce qui se passe si ton chien fait caca sur le trottoir ? C'est pareil. Sauf que, bon, à Paris, maintenant, tu as des... C'est quoi, la de chute of the dog ? Donc, je réponds à celui... Tu aurais pu préciser ce mot. Donc, je te réponds. Donc, là-bas, bon, c'est pareil à peu près qu'à Paris. Je pense que tu as des petites poches pour te ramasser et puis tu prends ça dans une poubelle. Donc, voilà. Donc, conclusion de ce débat. On n'ira pas plus loin. On pourrait la faire, notre conclusion, quand même. C'est un peu le solitaire. Vous allez attendre. Il y a encore... Qui c'est qui veut poser une question ? J'ai un sondage sur l'IRC, Gérard. Oui. Alors, un sondage effectué auprès des habitants de New York. A la question. Quelles souvenirs gardez-vous du passage de Gérard ? 2% réclament l'annulation de la dette que la ville avait... Alors, attends. ...que la ville avait envers les autres pays pour cause de catastrophes naturelles. 5% déclarent être opposés à son éventuel retour. Et 100% du personnel de son hôtel durant son séjour lui rappellent que c'est inadmissible non seulement de venir avec un chien... Oh là là ! Non, je continuerai pas. D'accord. Mais de manière... Moi, je vais... Avant que vous fassiez la conclusion, donc, je vais marquer à la question. MFV ou New York ? Il y a 70% des gens... ...répondent qu'ils ne trompaient jamais leur conjoint. Donc, je vois pas du tout le rapport. 20% des gens qui préfèrent les pizzas au... au pépéronis. Alors là, je vois... Ça, c'est même pas la peine que je continue. Et 55% des gens n'aiment rien. Et 55% des gens, j'ai dit qu'on terminait pas. D'accord. C'est toi qui fais des... des trucs de con. Alors, cul de poule, conclusion du débat. Alors, cul de poule, je te dis une chose. Si t'es pas contente, le prochain coup, tu restes chez toi. Donc, je vais parler de New York comme on l'a vécu, et c'est tout. D'accord ? D'accord ? Oui, oui, non, mais c'est n'importe quoi. Alors, euh... J'ai les boules qui grattent. Volga, derrière ! Allô ? Je pense que ce soir, c'était un débat très intéressant. Et d'autant plus que ce soir, avec ta coupe de cheveux, tu serais plutôt le... le... comment dire ? Le Ducon Blero du Tétanos. Et je pense que c'est toujours aussi un peu de la chute, le débat. D'accord. Eh ben, si c'est un chien, le prochain coup, tu restes chez toi. Tu se dobes lourd pour continuer. Ouais, ben, tout le monde devrait y aller pour voir la Statue de la Liberté, parce que c'est assez important, quand même. Bah oui, mais ça, de toute manière, la Statue de la Liberté, de toute manière, il faut prendre les bateaux, la cervelle en hélicoptère, mais je ne sais pas... C'est faux. Quoi, c'est faux ? Tu sais même pas ce que tu dis, toi. Alors, écrase, occupe-toi de ton standard. Occupe-toi de prendre des gens pour le deuxième débat, espèce d'abruti. Non, mais tu m'as dit... Tu peux répéter la première question du débat ? Je voulais répondre. Non, non, je ne répète plus. Tu se dobes lourd, donc pourquoi ? Ben voilà, donc, j'ai dit. Mon chéri, pour conclure... J'aime quand tu me parles comme ça. Ouais, ben, moi, j'aime pas. Alors, tu fais la conclusion et tu t'écrases. Tu m'appelles comme ça. Bon, ben, ton débat, je dirais, franchement, tu fais mal ton boulot, Gérard. Et puis, voilà, quoi, tu devrais être plus sympa avec ton équipe. C'est ça, c'est ça, c'est ça. Chiasse de Noël. Ouais, alors, ben, écoute, c'est chiasse de Noël. Alors, ce que je voulais te dire, c'est que, je sais pas si tu sais, mais New York, on appelle ça The Big Apple. Toi, je trouve que ça tombe bien parce que t'es quand même The Big Poirot. Et deuxièmement, est-ce que c'est vrai que tu vas servir de modèle pour la Statue de la Propreté ? Et toi, est-ce que c'est vrai que tu sers comme un... que t'es un con quand on te demande une conclusion ? Ben, c'est une conclusion. Ben, moi, je te dis que t'es un con. Voilà. Ceux-ci sont là, ils peuvent finir. Alors, moi, je veux te dire que c'est un excellent débat, mais le problème, c'est que t'as pas posé la deuxième question. Et je voulais te poser une question. Est-ce que tu veux partir à New York avec... Arrête ! Gérard, Gérard, Gérard ! Mais t'es fou ! Gérard, arrête ! Arrête ! Arrête ! Arrête ! Arrête ! Oh, fils de pute ! Oh, l'enculé ! Oh, l'enculé ! Qu'est-ce qui s'est passé ? Qu'est-ce qui s'est passé, Gérard ? On a rien vu ici. Qu'est-ce que t'as fait, Phil ? Oh, l'enculé ! Elle a fait quoi, là ? Gérard, reste dans le studio. Qu'est-ce qui se passe ? Je veux plus de vie, là. Qu'est-ce qui se passe ? Tu me dégages de l'équipe pour tout le temps. Tu me dégages ! Allez, sors, Phil, là. Ah, là, toi, tu dégages ! Là, t'es vraiment un enculé ! Alors, tu dégages, je vais te faire râper. C'est bon, on va la râper, Bernard. Ah, l'enculé, les barres ! Bon, Gérard, reprends, là. Non, mais de toute manière, il a coupé une saucisson à l'ail. Donc, moi, conclusion. Il s'est coupé une tranche ? Attends, il va y avoir des auditeurs, encore. Hugo, va voir s'il y a des auditeurs. Ils ont fait tous leurs conclusions. Donc, sur l'IRC, une petite conclusion. On est combien, là ? Alors, attends, je vais demander combien on est, parce que j'ai pas trop le temps de regarder. Donc, s'il vous plaît, les gens, est-ce que vous pouvez me dire combien ? Nous sommes 3 654. Ouais, on a perdu un peu, parce que tu t'es énervé, t'as pas arrêté de gueuler. Et... Est-ce que t'es allé au... aux Etats-Unis à deux de baleine sur Sandy ? Je sais pas, je comprends pas. Ah, Gérard, il y a quelqu'un. Non, mais c'est bon, la conclusion, ils l'ont toute faite. Donc, tu peux me donner ton air. Attends, parle-lui, Gérard. Ouais, je t'écoute. C'est qui ? Bah, réponds, maintenant ! Allô ? Non, tu réponds ! Bon, allez, c'est bon, on va pas faire de blague. Il est là, pourtant, il est là. Non, mais il répond pas, alors. Attends, je suis au standard, je vais essayer de le trouver. Non, c'est qui, là ? Tu donnes ton mot ? Je précise ton nom. Donne ton nom. Non, mais attends, pour l'instant, il veut pas, donc c'est pas grave, c'est pas grave. Allez, hop, c'est terminé. Moi, pour conclusion, c'est... Ce combat, c'est d'habitude... Allô ? C'était quoi, ça ? Je sais pas. Non, ça doit être toi, Rigo, sans le faire exprès. Donc, conclusion, c'est dommage, parce que le premier débat, d'habitude, toutes les semaines, il se passe bien. Là, ça foirait complètement grâce à Pildar. Bon, il y en a que deux qui ont bien fait leur boulot, c'est Rigo... Non, non, Pildar, tu dégages. Ouais, ouais, bah, tu dégages, parce que je veux plus de toi ici. Non, mais c'est sûr. Non, non, mais tu prends ton casque et tu t'en vas. Allô ? Il reste quelqu'un, il reste quelqu'un, Gérard. Ouais, mais on n'arrive pas à voir son nom. C'est qui, Pildar ? Allô ? Allô ? Allô ? Allô ? Bon, et hop, c'est ce qu'il fait. Allô ? Ah, ouais, bah... Donc, alors... Précise, qu'est-ce que c'est que le deuxième débat, quand même ? Donc, le deuxième débat, ça sera sur les grappes. Bon, je vais pas continuer la conclusion du premier. Donc, grâce à Pildar, ça a foiré, le premier, et j'aime pas trop que... Le premier débat a foiré. Donc, il y en a que deux qui ont bien bossé, c'est Manu et Rigo, pour... Comme d'habitude. On est arrivé à 3600. Donc... J'espère qu'on ira plus loin sur le deuxième. Donc... Il reste quelqu'un, Gérard, hein ? Mais non, mais on n'arrive pas à l'avoir, il répond pas. Donc, alors, on va se retrouver pour le deuxième débat qui va partir sur les grèves. Donc, vous pouvez nous appeler au 0800 308 5000 et 0875 000, et toujours lire, c'est www.funradio. Plus grosse poitrine de Suren, avec des... des gars, des os. Et on se retrouve tout de suite après pour le deuxième débat. A tout de suite ! == Le débat sur les grèves == === Contexte === === Les personnages === === Transcription === Oh, minuit, 2h Tu dégages, tu dégages Pourquoi, connard ? Allez, hop dehors Les débats de Gérard Et voilà, 2h du matin, donc vous pouvez toujours nous appeler au 0800 08 5000 et 0800 308 5000 C'est Manu qui va vous accueillir au standard, les bras ouverts Oui, je suis là Et donc, je pense que ça sera mieux qu'au premier débat, je l'espère Espérons, c'est pas gagné Et donc, on venait de s'écouter la plus grosse poitrine de Suren avec un dégât des eaux Et il y a toujours Rigaud qui est sur l'IRC, donc www.funradio Et là, c'était un de tes remixes, Gérard, c'était pas la plus grosse poitrine de Suren Oui, non, mais c'était le premier parce que le deuxième, je l'ai pas eu, d'accord ? Merci Le deuxième, c'est un remix de toi, donc Donc voilà, et donc, on a toujours Rigaud qui est sur l'IRC Salut Rigaud Salut à tous Ça va, ouesh, ouesh Salut, ça va, tranquille, pépère Je voulais passer quelques bonjours quand même à tous Bonjour qui sont là, quand même Si, si, on peut saluer les gens de l'IRC On va saluer Yankee, Arnett, Philippe Détoubifry quand même C'est quel honneur Jarvis Cooker, Oxyd, Prez, Youpla, Booba Fett, Olaf Kool, Turpentine Pff, j'en oublie, Terry, Spiral, Tony, Tachat, Cyril, Terry, etc Ok, et donc McFisto D'accord, ok, donc Et Ethan Ok, c'est bon Il y en a fait d'autres ? Cybersep, bah tu sais, on est quand même 4822, donc si je le cite tous Bah balance tous les noms, Rigaud Non, non, mais c'est bon, combien ? Alors on a Workboss, on a Oxyd, on a Delight C'est bon, on salue tous ceux qui sont, tous les gens qui sont sur IRC, c'est-à-dire les Une bulle de bonbons, choupa choups, choupa choups Alors, Fildar Non, c'est pas moi Non, tu commences pas s'il te plaît, d'accord ? Donc, on va saluer tous ceux qui sont dessus, donc les 4822 personnes Et on va saluer tous ceux de la Belgique aussi, s'ils pouvaient nous appeler Au 0033147 Euh... 7995000 7995000, donc... On salue aussi tous les Belges qui sont sur l'IRC Alors, il y a Davy, il y a Ethan aussi, qui est Belge apparemment Et bah, il y en a plein, quoi Il y a Perfouras aussi, d'ailleurs, il m'a dit qu'il t'invitait à Fort-Bayard D'accord, d'ailleurs, Gérard, il va falloir que tu fasses une dédicace pour tous les internautes Non, bah, on verra ça plus tard, d'accord ? Donc, on va accueillir Josson Loirent Allô ? Oui, salut Allô ? Putain, mais il sort... Il recommence celui-là ou quoi, là ? Oui, il sort... Là, ça doit venir de nous Allô ? On t'entend peut-être pas, je sais pas Allô ? Allô ? Josson Loirent Allô ? Salut Salut Allô ? Comme toi Salut Salut Coca de Pâques Non, caca de Pâques Caca de Pâques, pardon Oui, salut à toi, camarade Trou du cul Je t'emmerde Je t'emmerde, moi aussi, connard Non, je te remercie, je te remercie, ouais Je te remercie, putain, lave-toi les oreilles Bon, tu partes sur un autre tourne, d'accord ? Bonsoir à toi Là, je t'attends un peu Ouais, c'est vrai, ouais Eh, la chagatte Là, je t'attends un peu Je suis là Eh, ping-pong pour terminer Salut Gérard, salut Manu, salut Fida, salut Gigi Goré Salut Gigi Goré, le pauvre, comment tu t'appelles ? Ça te fait marrer ? Non, mais moi, ça me fait pas rire, c'est con Eh, Rigo, t'as oublié D-Light, Grindr aussi Non, mais ça y est, ça y est, ça y est, ça y est Ça y est, on se calme un peu, là Putain, mais vous allez vous calmer ou quoi, là ? Eh, bonjour, hein, bâton Bon, alors, le thème du deuxième débat porte sur les grèves Allô ? Merde à toi, celui qui dit allô Faut faire la grève, moi, je dis Alors, tu as pensé... Tu en veux de la bonne grève ? Moi, j'en veux Tu en veux de la bonne grève ? S'il vous plaît, les auditeurs, j'aimerais bien qu'on se calme Parce que le premier débat était de la merde Ouais, grâce à toi Le deuxième, ça sera peut-être de la chasse Ouais, ben, j'espère pas, parce que c'est Manu qui est au standard Et avec Manu, vous allez pas rigoler longtemps C'est moi qui vous le dis Salut, c'est moi Salut Salut Donc, la première question Que pensez-vous des... Ah, il est pas possible Putain, mais il nous fait chier, ce mec Je vais le trouver Enchaîne ta question, je vais le trouver Alors, que pensez-vous des grèves de nos jours ou de nos nuits ? À quoi cela sert-il ? On va demander à... C'est tout ce que tu dis Je sens le haron Alors, moi, je vais te dire que je pense que De nos jours ou de nos nuits, les grèves Je pense que ça sert tout simplement à rien Parce que, tu vois, ils bloquent les passagers Sur les quais de métro ou même de bus Et quand ils veulent se rendre à leur travail C'est quand même assez difficile C'est pas le haron qu'elles sont, elles Et de plus, la nuit, c'est difficile Parce qu'il y a moins de monde D'accord Comme toi Donc, c'est pas sa grève D'accord, ok, ok, ok C'est... Attends, je m'excuse parce que je t'ai coupé Parce qu'il y en a un qui s'amuse à parler sur toi Celui qui... Celui qui... Tu penses aussi quand tu fais caca ? Celui qui s'amuse à reparler quand les gens parlent Je vais pas chercher midi à 14h C'est clair, net, précis Le premier qui... Le premier qui déconne va dégager Je vais pas chercher Comme toi Hé, Gérard Tu penses aussi quand tu fais caca ? Comme toi Tu réponds ? Oui, ben je te réponds Ils font la grève parce qu'ils ont que ça à foutre Ils sont payés à rien foutre Non mais que pensez-vous des grèves de nos jours ? Ou de nos nuits ? Oh là là là Un peu mal Bon, oh Celui... Eh, ça y est, vous arrêtez quand les gens y parlent S'il vous plaît Bon, ça y est ? Bon, alors... Caca de Pike Ouais, c'est caca de Pike Ben écoute, je pense que tous les camarades ont droit à la grève Je pense que c'est un droit auquel Tous les camarades ont droit C'est le cas de le dire Et faites la grève, moi je dis un maximum Faut pas emmerder le monde, faut faire chier les gens Faut que ça bouge Mais ouais, c'est ça, tu crois qu'on est pas assez emmerdés ? Mais attends, les routiers sont les premiers à faire la grève Ah ouais, non mais attends, pour l'instant C'est peut-être les routiers qui ont commencé les premiers Je suis d'accord avec toi Mais faut dire une chose, c'est que maintenant Les routiers, ils ont obtenu satisfaction C'est pas eux qui commencent, maintenant c'est les RATP et la SNCF Et alors, ils ont le droit de faire la grève aussi D'ailleurs, c'est aujourd'hui, Gérard Tu te rappelles l'article qu'on a vu dans l'aujourd'hui ? C'est aujourd'hui la grève C'est depuis 20h ce soir Donc je pourrais vous dire à peu près Pour ceux qui auront l'occasion de se déplacer Je pourrais vous donner des... Oui, faut pas aller Non, je pourrais vous donner à peu près Les... Les trains, combien il y aura de trains qui circulera Et autres, mais... Un peu plus tard, pas lors de la première question Gérard ? Attendez, s'il vous plaît, on se calme S'il vous plaît, sur IRC, il y a Turpentine Qui te demande si ton école, elle était en grève Pendant toute ta scolarité De toute manière, il y a... Je vois pas du tout le rapport avec la question Mais Gérard, c'est trop du cul aussi Non mais attends, tu permets ? Attends, c'est quelque part que j'avais pas fini Ce que je voulais dire, c'est que j'encourage tous les gens À aller voir les camarades Pour les piquer de grève, pour leur amener des merguez Et des cronambours, parce qu'on se les gêne Et on se fait chier, quoi, quand même Non mais attends, là, je crois que tu... Je crois que tu vas un peu loin, toi, quand tu réponds Moi, j'appelle tous les gens à aller bloquer Les voies de métro et de RER, demain D'accord, eh ben... Fais comme tu veux, toi, mais... Mais oui, c'est ça, c'est ça Et je pense que tu devras les toucher à travers de la voie Ça fera un bon débat Ouais, bah, moi, je pense que la grève, c'est très très bien Et on devrait la faire plus souvent Parce que ça emmerde bien le monde et c'est... C'est bien sympa, voilà Et d'ailleurs, en parlant de grève, il y a Yankee sur IRC Qui me demande... Ce qui est dommage avec Gégé C'est que chez lui, c'est le cerveau qui est en grève Je dois savoir ce que t'en penses Alors, trou du cul, si tu réponds aux questions De l'IRC, tu restes chez toi, d'accord ? Bah non, mais... C'est pas la première question que tu vas commencer à foutre ta merde Parce que tu as dégagé, là, maintenant Je te le dis tout de suite, lâche ton feu Bah, en fait, ouais La grève, ça sert un peu à rien Si on la fait pendant un mois, ça peut marcher Mais sinon... Non, mais là, je peux te dire que pour l'instant Ils parlent de l'affaire Jusqu'à vendredi soir Mais ça peut aller plus loin Ça peut... Tu sais qui vient de dire ça ? Qui vient de dire ça ? Je sais pas, j'ai pas vu, moi C'est pas moi, quoi Y'a la grosse qui a parlé, mais... Attends, la grosse, ça t'emmerde, connard Voilà, alors, ping-pong Ouais, ouais, moi, je dis que la grève, c'est excellent Faut foutre le bordel, on descend dans la rue Et tout de suite, on devrait faire le blocus général Non, mais c'est bien, la grève Faut descendre avec les pancartes, les pochettes bouchées Faut les emballer, tous ces mecs Non, mais c'est clair, faut foutre le souk, quoi Non, mais foutons le bordel ! Ouais ! Demain, je vais aller faire une grève Je vais me mettre sur les voies du RER Et puis, ça va être bien Tu fais ça, puis tu penses que j'y arriverai, moi, tout seul Allons-y, camarade Révolution ! Unissons-nous, quoi J'ai rien à dire ? Donc, moi, je pense que ceux qui s'amusent à faire grève C'est qu'ils se rendent pas compte Hey, Dark Vador Oui, vas-y, parle, on t'écoute Fildar, fais gaffe, parce que tout à l'heure, tu vas dégager, toi J'ai rien fait, j'ai rien fait Donc, je disais que les grèves, ça sert à rien Parce que ça fait chier le monde Alors, je peux vous dire Qu'à l'heure actuelle, depuis ce soir, 20h Et c'est jusqu'à samedi, 8h du matin Donc, voici les premières prévisions des trafics Donc, TGV Sud-Est et Atlantique 1 train sur 3 TGV Provence sur... À quelle heure, aussi ? Oui, tu dis pas... Oui, bonjour, je voudrais... Bonjour, je voudrais un billet pour Valence, s'il vous plaît C'est bien ou pas, Gérard ? Le petit Gérard, attention Gérard, tu continues ? Ça commence à être relou, celui qui parle sur moi Donc, TGV Provence-Provence 1 train sur 3 TGV Paris-Lille, légère perturbation Thalys-Paris-Bruxelles Amsterdam-Cologne Trafic normal Eurostar-Paris-London Trafic normal Eurostar-Lille-Bruxelles Eurostar-Paris-Bruxelles Trafic normal Et... Traf... Pardon Le petit Gérard, s'il te plaît, tu vas... Et moi, je t'emmerde, espèce de fils de con ! Non, non, non ! Hop, hop, hop, hop, hop, hop Ok Et... Très grande ligne 1 train sur 3 En moyenne Transport express régionaux TER Trafic très perturbé Avec en moyenne un train... RER, répète, RER ? Non, trafic... Non, TER Et le RER, il s'est pas écrit ? Si, mais... Il y a Tony sur ERC qui me demande le RER RER A Et moi, je voulais savoir... Trafic normal Et le B ? Le B, 1 train sur 4 Sur la branche nord Entre Gare du Nord et Roissy Et le F, merde ! Et le F Y'a pas de F, espèce de con ! Ah, pardon Mais toi, si tu veux prendre le F, toi, t'en as pas besoin Et si sur la ligne 15, y'a des... Gérard, Gérard, Gérard C'est qui ? C'est K4PAC, oui, j'ai une question Je suis à Denfert-Rochemont Et je vais aller me faire sucer par une pute à Pigalle C'est où, le changement ? Tu te démerdes ! Trop du cul ! Bon, ça y est, je peux... L'heure des grèves, payez-vous votre titre de transport Putain ! Fil d'art, fil d'art Manu ? Ouais, bah, j'essaye, hein T'essayes de gérer, s'il te plaît J'ai une question à deux balles C'est clair Allô ? Qui c'est qui a le téléphone, les mecs ? Ça se fait pas Bonsoir, je voudrais avoir un renseignement, s'il vous plaît Je voulais savoir si la gare Montparnasse était ouverte Ah, il se renseigne Alors, pas du tout, monsieur Pas du tout pour ce soir Très bien, je vous emmerde, au revoir Alors, la deuxième question L'heure des grèves, payez-vous... Rigaud, une question IRC avant Oui, il y a Turpentine qui te demande Est-ce que c'est plus facile d'avoir la grève l'hiver ? Bah, ça fait chier plutôt les gens Pour mieux qu'ils se mettent en grève l'été, ça serait... Ou sinon, ils mettent une écharpe Non, mais en hiver, c'est plutôt chiant que de la faire en été Donc, l'heure des grèves, payez-vous votre titre de transport On va demander à Ping Pong Bah non Bah non, puisqu'on fait la grève, donc Non, mais tu peux préciser ? Bah non On fait pas... Punaise, vous allez... Vu qu'on fait grève, on risque pas de payer le titre de transport à Bruxelles Alors, abruti, t'emmerdes, tu dégages C'est bon, tu dégages, ça t'apprendra Au revoir, Ping Pong Au revoir, Ping Pong Non, mais attends, hey Si on répond ce con, hein Il était poli, ouais Tu fais des questions à deux balles T'as tendance à dire C'est terminé pour lui Attends, il a dit abruti, il aurait pu dire ça En plus, il est en train de jouer, c'est une honte Non, non, mais c'est bon, il peut dégager Il peut dégager Celui qui joue au Ping Pong, là Il aurait pu dire enculé aussi, je veux dire Ouais, c'est vrai Il aurait pu dire bien d'autres choses encore Bon, Gérard, qu'est-ce que tu fais, là ? Non, non, mais attends, mais moi Pour l'instant, quand ils se calmeront On continuera le débat Alors, la chatte en feu Ouais Donc, pourquoi ? Oui, je suis d'accord Tu peux préciser ? Ben... Non, mais si tu dors Tu le dis tout de suite, tu vas... On va te laisser dormir, hein Gérard, je vais te choper à la sortie de la radio T'as l'air ta gueule On va te niquer, on va te niquer Manu, s'il te plaît, tu me gères un peu Pour l'instant, on accueille à la place de Ping Pong On accueille Badminton Ouais, non, mais attends Manu, tu me prends d'autres personnes que les mêmes Ben non, non, c'est pas le même C'est Badminton, c'est pas Ping Pong Bonsoir à tous Bonsoir Alors, trou du cul Ouais, trou du cul Bon, ben, tu disais Ouais, non, moi, je paye jamais Le métro, je paye jamais Non, tu peux préciser Tu fraudes ? Je fraude, je suis un sale fraudeur Je suis un enfoiré, mais je m'en fous, je paye pas Je vais pas payer le métro, faut pas déconner C'était que là S'il y a du monde, ils font chier On voit des gens comme toi Non, c'est pas possible, le métro, franchement Alors, je préviens que celui qui recommence Ça va être clair, il est 2h13 Soit que vous vous calmez Non, non, non, non, non Soit que vous vous calmez Que vous répondez correctement aux questions Ou soit j'en arrête là Et je rentre chez moi Vous choisissez Ok ? Alors, on va demander à K4Pack Ouais, c'est comme mon camarade Déjà, je paye pas en temps normal Tu crois pas que je vais raquer les jours Il y a grève, en plus Tu sais qui s'amuse à faire des conneries comme ça ? Bah, c'est toi Non, c'est pas moi qui s'amuse à faire des bisous, d'accord ? Ah, ok GG, c'est K4Pack J'ai un plan pour toi, si tu veux Si t'as des PV et des contraventions à faire sauter Par les contrôleurs Je peux t'arranger le coup, si tu veux Non, mais j'ai pas besoin de toi, merci Comme toi Ah, vas-y, vas-y, c'est bon Moi, je paye pas le bus, c'est un agresse de bus Parce qu'il y a pas de bus, donc j'ai pas à payer C'est tout ce que t'as à dire ? Bah oui, il y a pas de bus, donc j'ai pas à payer un ticket de bus J'ai des sous dans mon porte-monnaie Manu, je sais pas ce que tu fous Mais c'est pourri, le standard Bon, allez, on enchaîne Non, mais attends, il est moins pourri qu'avec toi Attends, attends, attends J'ai un gros problème Ils ont tous fait grève Je suis tout seul Ils font grève sur Internet ? Bien joué Je sens le harangue, pour finir Gérard, j'ai un problème Ils ont tous fait grève au standard Bon, alors moi, j'en répète J'arrête, comment je fais ? Gérard, t'as l'air, s'il te plaît ? J'arrête Il en reste un, apparemment Ouais, mais je sais pas où il est Non, non, mais t'as gerbé tout le monde, donc j'arrête, c'est terminé Allô ? Allô ? Allô, trou du cul ? Non, mais ils sont là, ils sont là Allô ? Allô ? VOLGAIL ! Trou du cul Allô ? Allô, connard ? On entend plus le connard, là Connard ? Gérard, il fait grève ? Non, mais moi, là, j'arrête, là C'est plus la peine C'est pas la peine, là Non, non, mais j'arrête, parce qu'il y en a l'autre C'est pas moi, là, non, j'ai rien fait, moi Ah, ils sont tous revenus, c'était une grève d'une minute Alors, je sens le harang pour... Juste une minute Comment il y a de connectés ? Là, on est à 4028 Quand même, hein ? On a perdu un peu, mais c'est déjà beaucoup Donc, je sens le harang pour toi Eh, tu viens chez moi, après, Gérard ? Je sens le harang Je sens le harang Tu réponds ? Mais elle est conne, celle-là, elle répond jamais aux questions, putain Non, mais tu vas voir ailleurs si j'y suis, si t'es pas content Bah, réponds, réponds Justement, je réponds, mais tu me laisses pas parler Maintenant, vous fermez vos gueules, vous laissez parler, les gens Eh, tu viens chez moi, après, Gérard ? Moi, je t'emmerde Alors, je sens le harang Donc, pour la troisième fois, je réponds à ta question Donc, non, je mets jamais de ticket Parce que, déjà, le ticket, ça coûte énormément cher Ça coûte 8 francs Et moi, j'ai pas 8 francs à mettre pour un ticket Et, de toute façon, j'aime pas les fonctionnaires D'accord C'est bien, parce que, moi, je... Moi, non plus, c'est que je suis pareil Moi, les fonctionnaires, je dirais un seul mot, mais je peux pas le dire Ouais, je sais qu'on les emmerde Eh ben, moi, je le dis pour toi Bravo Donc, moi, tous ceux qui sont fonctionnaires de la RATP Eh ben, n'ayez crainte que vous nous faites chier Et je sais même pas pourquoi qu'on paye un titre de transport avec vous Parce que, là, vous nous faites chier en fin de mois Et en début de mois, vous allez nous coller des amendes Alors que c'est vous qui nous faites chier Alors, ça sert à rien Eh, Gégé, Gégé, Gérard Gérard, je te laisse parler Je voudrais savoir un truc Si, si, comment, tu sens le harant, c'est ça ? Elle paye pas dans le métro, c'est bien ça ? Non, mais elle paye au carré Alors, comment tu fais pour rentrer dedans ? Elle paye pas dans les portillons Je tape sur le nec et puis, voilà, je l'avais déjà Non, mais comment elle fait pour rentrer dans le métro si elle paye pas le ticket ? Bah, il monte Non, mais, de toute manière Tu vas pas me dire qu'elle escalade Attendez, attendez, attendez, là Qui c'est qui demande ça, là ? Je sens le harant Mon Dieu, tu peux préciser ton nom, s'il te plaît, merci Non, mais même De toute manière, maintenant, il y a des portillons Tu peux essayer de... Trou du cul Calme, calme, calmez-vous Tu disais, Gérard, donc, des portillons Non, il y a des portillons Tu peux essayer de passer Dès qu'il y a des gens qui sortent, maintenant Gérard, c'est badminton J'ai pas répondu, je peux répondre Ouais, bah, vas-y Ouais, moi, donc, je paie pas mes billets de transport, j'en fais en papier Hum, attends J'ai mal compris la question, parce qu'il y en a un qui s'amuse Je paie pas mes tickets de transport Je prends un paquet de clapes, et puis je découpe Et puis je passe direct Un coup de feutre, et puis c'est bon Gérard, si t'as des amendes, je peux te les faire sauter Si tu me laisses te faire sauter le cul Ouais, bah, là, tu vas te faire foutre, toi, abrouti C'est gentil ce qu'il te dit Si t'as des amendes, c'est pour toi, moi, je m'en fiche C'est dans ton intérêt Les oreilles, c'est comme le cul, ça se lave Ouais, vous restez polis, parce que sinon Je vais virer tout le monde et je vais en garder qu'une De tout à l'heure Gérard, c'est moi, Fildar, tu veux un Un bubblegum, gros et tout mou Non ? Non, mais je crois que toi, la semaine prochaine, tu vas plus être là Donc, il y a une question hier C'est pour là Une réponse Peut-être des informations là-dessus Oui, non, peut-être pas là-dessus Mais, est-ce que quand tu pointais A la NPE, ils étaient en grève ? Ouais, mais ça, la question va y venir aussi Alors, donc, je vois pas du tout Tu peux pas répondre On va y venir On va y venir sur cette question-là Donc, ça sera que la neuvième J'en ai le temps, Manu Il y a D-Light qui te dit que tu dois pas t'inquiéter Si tu reçois une amende de la RATP Parce qu'il a filé ton nom et ton adresse quand il s'est fait attraper Mais c'est ça, c'est bien Alors, troisième question Avec quel... Ça y est, celui qui s'amuse Ça y est, celui qui s'amuse Allo Il y a un mec qui a une double ligne Je m'excuse de vous déranger, pourrais-je pas ? J'appelle des gens, là, Gérard Donc, je vais gérer après la double ligne Non, non, mais faut quand même gérer en même temps Ouais, quand même que t'accouches, Manu Alors, avec quels moyens de transport vous déplacez-vous lors des grèves ? On va demander ça Oh, ils suivent Parfait, gars Récupère ton briquet Et leur lance plus comme ça Toi, la semaine prochaine, c'est plus toi ici Non, ça, c'est terminé C'est terminé pour toi Je suis pas un putois, hein Ouais, bah, c'est terminé C'est terminé pour ta gueule, je vois plus de quoi dans mes débats C'est tout Manu ? Ouais, à la place de trou du cul, on accueille fromage de cul Allo Ça tourne autour du cul, hein, le débat, là Beaucoup, beaucoup, bonsoir, Gérard Bonsoir, c'est le même défi Salut Salut à toi Salut, Paco Alors, donc, la troisième question Avec quels moyens de transport vous déplacez-vous ? Avec mon vélo à 4 roues Alors, on va demander à Babington Ouais, Babington, je te prie Hum ? Je me déplace en patinette Ouais, mais non, mais tu peux préciser Euh, à 2 roues Hum ? Voilà Ok Euh, l'achat en feu ? Avec mes rollers D'accord, bah, c'est bien, mais... Ouais, je pense que vous vous creusez pas trop la tête pour répondre aux questions, hein Bon, merci pour le Larsen, là Je pense que vous avez pas l'intention de répondre aux questions, hein, donc... Mais si, mais si Bah non, euh... Mais si, je t'ai dit Bah, mais ça y est, le Larsen, là Alors, euh... Fromage du cul Ouais Fromage de cul, je sais pas quoi, là Oh là là, de Larsen, oh ! Oh, le... Arrêtez de Larsen, là, c'est... C'est pas un petit peu de sérieux, là T'es un hélicoptère privé Oh là là ! Bon, allez, répondez ! Oh, fromage, là ! Ouais, ouais, je me déplace à pied, moi D'accord J'ai pas de voiture, j'ai rien Ok, caca de Pâques Ouais, caca de Pâques, bah, avec des chaussures du genre, bon, sans citer de marque, hein, sans citer de marque Des Nike, des Adidas Des 4R Ou des Reeboks Euh... Comme toi Comme toi Moi, j'ai une Mégane coupée, donc j'ai pas besoin de prendre les... Les transports en commun Ça, c'est pas bien, ça Non, mais... Moi, je peux... Moi, je vais... Je sens... Pas de marque ? Ouais, mais elle est un peu politique Mégane coupée, c'est un peu... C'est un peu merdique, comme voiture, ça Non, non, c'est vachement bien, t'es fou Grigo, ou non ? Euh... Y'a Oxide qui demande à combien on peut faire une grève Bon, euh... À plusieurs À plusieurs ? C'est combien, à plusieurs ? Bon, à plusieurs, c'est... C'est tous ceux qui... Qui sont... Vous pouvez être une vingtaine, cinquantaine, centaine, mille, voire deux mille, vingt mille ou autres Et plus à la rigueur Et y'a des... Y'a des V1 qui te demandent, quand on fait grève, qui c'est qui fait le rôle du piquet ? Bah, tout le monde C'est tout le monde qui se met sur le devant et qui empêche les bus de sortir ou autre C'est comme un ski, alors ? Non, pas spécialement, non Et y'a Ethan qui te demande si on peut faire grève tout seul Euh... Ça, c'est dur Parce que si tu fais grève tout seul... Tu y arrives, toi ? Non Ouais, mais regarde, la grève de la fin, c'est des gens... Les gens, ils font grève tout seuls Ouais, non, mais ils se mettent... Après, ils se retrouvent à plusieurs quand même, ils se... Ils se font une bouffe ? Non, mais ils se rejoignent Ils se rejoignent Donc, voilà Donc, je sens le harang pour conclure sur le thème de la troisième question Oui, alors moi, je me déplace souvent avec mon cheval Tupu Quoi ? Je me déplace souvent avec mon cheval Tupu Avec ton cheval qui pue ? Tupu Qui s'appelle Tupu C'est quoi, c'est quoi ? C'est une oise C'est son nom, mon cheval, non ? C'est le nom de ton cheval ? C'est le nom de ton cheval ? Bah ouais, c'est le nom de mon cheval Non, mais attends, mais... Mais elle est drôle ou pas, elle ? Non, mais attends, mais c'est quoi, là ? C'est la réponse à la question ? Bah bien sûr que c'est la réponse à la question Gérard, tu devrais la dégager, parce qu'elle répond pas à la question Oh, toi, je sens qu'il va t'arriver... Tu vas finir sans culotte, toi On peut dépasser un cheval dans les rues de Paris Ouais, bah toi, je crois que tu vas finir sans culotte ce soir Ouais Alors ça, ça m'étonnerait Ouais, bah... T'inquiète entre les dents C'est ce qu'on verra Attends, j'ai pas besoin de t'attraper pour t'avoir Bah toi, on a pas besoin de te trouver, on sait où t'es Alors, donc, avec quels moyens vous vous déplacez-vous pour leur dégrève ? Bon, il y en a qui ont dit en roller, ça c'est vrai Mais je pensais qu'on allait dire souvent en vélo Ou même voire en covoiturage C'est quoi ça, Gérard ? Le covoiturage, donc, c'est des gens qui habitent pas loin Qui sont à peu près dans la même société Qui s'appellent le soir, comme là, en ce moment Là, je pense qu'on peut dire que c'est un peu comme ça On va parler, ça va en parler beaucoup, du covoiturage Donc, ils s'appellent entre eux le soir Et ils disent, bon, bah, tu viens me chercher à telle heure le matin Pour m'emmener au boulot Mais tu peux faire du co-vélonnage Ou du co-camionnage Ou un truc comme ça ? Du co-vélonnage, je pense pas Du co-camionnage, c'est à peu près comme le covoiturage C'est à peu près pareil Donc, pour répondre à ça Je pense que Le plus gros, c'est ou le vélo Ou le covoiturage Qui se fait Régulièrement lors des grèves Alors, donc, je vais vous donner quand même Encore des chiffres pour ceux qui ont Un petit sondage, non ? Pour ceux qui vont se déplacer Tout à l'heure pour aller à leur travail Alors, en Ile-de-France, réseau banlieue Intens sur 30 devrait circuler Sur les lignes de Paris-Montparnasse Paris-Saint-Lazare et Paris-Est 1 sur 4 sur Paris-Nord Question RER Donc, trafic RER à trafic normal RER en mer de crédit C'est France Info, là ? RER-B 1 train sur 4 sur la branche RER-B, ça m'intéresse Tu peux répéter, j'ai pas entendu 1 train sur 4 sur la branche Nord, entre Gare du Nord et Roissy Et Mitry Interconnexion suspendue En Gare du Nord Il y a le Roissybus, quand même, qui passe Attention, le mouvement de grève Engagé hier matin sur la branche De l'Arme Sur la branche Gare du Nord Mitry pourrait se poursuivre Ce matin Question RER-C Pour ceux que ça intéresse toujours 1 train sur 3 RER-D 1 train sur 3 Voilà ce que je pouvais vous dire Je crois qu'il y a Corsair Tu peux donner les horoscopes du TGV Atlantique ? Alors, TGV Atlantique Pour les béliers seulement Non, je parle pas TGV Atlantique, je sais même pas Je pense qu'ils en parlent pas dessus Si, c'est en bas, vers la Corse N'importe quoi, toi Donc, on va récupérer Je sens le harang Tu viens chez moi, après, Gérard ? Putain, lui, il commence à me gonfler Je sens le harang Est-ce qu'elle est toujours là ? Salut Re-salut Comme toi Re-salut Re-salut, caca de Pâques Ouais, salut à toi, Lascar Fromage de... De cul De cul Ouais, bonsoir Je voudrais parler à... À la fille qui était chatte en feu tout à l'heure Allô ? Chatte en feu Oui Allô ? Et Babinton Allô ? Ouais, salut à toi, poète de l'an 2000 Allô ? Donc, la question... Allô ? Putain, mais il est chiant, celui-là Allô ? Alors, donc, la quatrième question Vous avez eu le temps d'y réfléchir ? Non, non, non Alors, pensez-vous... Vous voulez parler à la chatte en feu, on n'a pas pu la voir Alors, je répète la question et on se calme Là, il est 2h32 même Donc, pensez-vous normal que les jeunes Ne laissent pas leur place aux personnes âgées Ou autres, lors des grèves ? On va demander ça Gérard, je vais te choper à la sortie de la radio T'as l'air ta gueule On va te niquer, on va te niquer On va demander à Babinton C'est relou Ouais, ouais, ouais C'est de la merde On va te marrer, on va te marrer Ouais, ouais Babinton Ouais, ouais, ils ont raison, les jeunes Mais faut les virer, les vieux crotins de mammouth Faut les têches Ouais Babinton Faut les têches, faut prendre leur place Ouais, mais tu m'écoutes, là ? Ouais Il a marre des gros, ça, là Alors ? Ouais, ben c'est bon, je t'ai dit Faut les virer, tous les dieux Bon, donc, apparemment, t'as pas envie de répondre correctement à la question, toi Ben, c'est son avis, hein Je t'ai dit que j'étais d'accord La chatte en feu ? Non, elle est chaude T'es en train d'énerver, est-ce que tu peux répéter la question ? Oh non, non, elle va s'énerver, non Pensez-vous normal que les jeunes ne laissent pas leur place aux personnes âgées ou autres lors des grèves ? Ben ouais, c'est normal C'est normal, toi ? Ouais Alors donc, toi, tu laisserais pas ta place à une personne âgée pour qu'elle s'assoie avec ? Ben non Ben non Ben non, faut les virer Ouais, ben d'accord Elle paye quand même leur transport comme nous Non, mais c'est égal, c'est égal Non, ils ont une carte vermeille Fromage de cul Ouais, euh, non En fait, moi, sérieusement, je laisse ma place aux personnes âgées, c'est normal Ben oui, c'est normal Parce que moi, j'aimerais que quand je sois un petit peu plus vieux, qu'on fasse la même chose pour moi Non, mais ça, je pense que c'est tout le monde, tout le monde a envie de faire pareil que toi Ouais, mais là, j'entends des témoignages qui me laissent pas trop Non, non, pas du tout Je suis désolé, je suis désolé Mais pourquoi ? Non, non, mais attendez Non, non, moi, je suis pas d'accord avec ça Que quand une jeune te laisse la place Faut pas, faut pas t'en amuser quand même C'est quoi, t'es pas d'accord avec ça ? Alors, c'est la consommation à tout prix, c'est ça ? Alors, c'est pour rendre un service, voilà ? On a un coup de dévié qui pue le roquefort de 5 mètres Non, mais elle pue l'eau de Cologne Excusez-moi les auditeurs, excusez-moi les auditeurs Ça y est, vous avez... Ah non, mais là, je peux pas laisser à dire ça À la rigueur, on lui pique On les coupe ou quoi, Manu ? Tu joues à quoi, là ? Bah, ça y est, j'ai trouvé celui qui foutait le bordel Tu te paluches, là ? Alors, comme toi Oui Donc, pour toi Ah non, moi, je laisse jamais ma place aux vieux dans les bus Moi, je trouve que les vieux, il faut les tuer à la naissance, donc... Non, mais attends, je vois... Toi, t'es vraiment dégueulasse, alors Bah ouais, je suis pas dégueulasse Mon avis, c'est le chien, bien sûr Ils prennent toujours le bus quand il y a du monde dans le bus T'as un petit peu de respect pour les vieux, quand même, merde Mais non On se calme, vous laissez les gens répondre, s'il vous plaît, merci Ils ont qu'à prendre des taxis, puis ils puent la mort, quoi, c'est horrible Non, en plus, on peut pas laisser dire ça, Gérard Bon, je sens le harang Ouais, non, moi, je pense que c'est pas normal Parce qu'il y a aussi des personnes de 30 ans En plus, aussi, qui laissent pas Qui laissent pas leur place aux personnes âgées Et il y a également aussi les femmes enceintes Les femmes enceintes, tu leur laisses pas la place Ah, si, parce que de toute manière La personne qui est enceinte, moi, je peux te... Oui, mais les personnes qui veulent s'asseoir Les gens, ils se laissent pas Pour laisser la place à une femme enceinte Mais moi, je peux te dire une chose, que la personne âgée Va voir carrément le machiniste Et demande à ce qu'elle s'assoie Et fais-moi confiance que le machiniste Il a le droit de faire dégager une personne Pour laisser la place Si, si, si, si Si, si, si, si, c'est vrai Si, si, non, non, mais moi, je peux... Oh, vous me laissez répondre Donc, moi, je peux... Il y en a qui se marrent, Manu Non, mais je sens que... Et ça recommence Tony Comme ça, Manu, putain Je sens qu'il y a du Tony là-dedans Ça, c'est encore lui Donc, moi, je peux... Je réponds à... Attends, j'ai pas répondu Non, mais attends, si, t'as déjà répondu, toi Non, c'est qu'à 4 packs, c'est qu'à 4 packs, j'ai répondu J'ai pas répondu Non, mais attends, toi, t'es en train de jacquer Pendant que tout le monde répondait, alors Pas du tout Alors, tu réponds Bah, je voulais te dire qu'effectivement Il faut éliminer les cartes vermeilles, c'est clair Y'a pas besoin de laisser des places Dans les transports en commun pour les vieux croutons Elle disait, il faut les tuer à la naissance Moi, je dirais même, il faut les empêcher de se reproduire Passer 80 ans Tony, tu t'écrases On parlait de l'odeur, c'est vrai que ça fouette Mais y'a pas que chez les vœux Y'a aussi des gens de 38 ans qui sentent à 5 mètres Ouais, y'en a qui puent la mort aussi à 38 Voilà, ça sent la mort Il peut rien si ça sent le cercueil Tu crois qu'il sent ? Alors, moi, je réponds Maintenant, ça y est, vous avez assez répondu Maintenant, c'est à moi Donc, moi, je peux vous dire une chose Y'a les personnes âgées Putain, il commence à me casser les couilles, ce mec Donc, je peux vous dire une chose Y'a certaines personnes qui laissent pas les places Je trouve ça dégueulasse de leur part Et pour les femmes enceintes Ils vont s'adresser au machiniste Le machiniste lui demande à se convaincre On lui laisse la place Et y'a d'autres personnes qui ont le droit Tout comme toutes les personnes âgées de s'asseoir Et les femmes enceintes, c'est les aveugles Bon, écrase-toi Rigaud, une question Oui, y'a Davy One Qui te demande combien ça coûte Une grève en euros Et est-ce qu'il y a des réductions pour les cartes vermeilles Et les militaires ? Non, y'a aucune réduction pour tout ça Et combien ça coûte alors ? Je n'en sais rien On est pas encore au moment de l'euro Alors, les gens Lors des grèves Il y avait un petit Larsen J'ai Manu Non, non, non Ouais, ouais, Pildar, fais le malin Fais le malin Fais bien le malin, toi Lors des grèves T'es un pauvre type Ça vient d'où ? Moi, ça le fait pas Si ça le fait, regarde Mais qu'est-ce que c'est que tu fais ? Mais c'est quoi ce bordel ? Qu'est-ce que tu fais ? Non, mais Pildar Pildar, quand t'auras fini, tu vois ? Non, non, non, non, non Il ouvre la boîte, ça marche Connard, dès qu'il arrive, tu l'arrêtes Alors, fais pas chier ton monde, toi J'ai rien fait, moi Pauvre con, va Là ? Non, mais là, c'est bon Mais non, c'est Pildar qui s'amuse, alors T'inquiète pas, il s'amuse Il s'amuse depuis tout à l'heure Non, là, j'ai plus rien Non, non, il s'amuse, là Il s'amuse Ah, c'est ça Ouais, ouais Péga, parce que tout à l'heure, je vais t'éclater, toi Tu m'énerves Dans les deux débats, c'était le bordel Ouais Non, mais on peut remercier Pildar L'audience Et lui, là, au standard, t'as mis le bordel, toi Attends, je suis en train Et lui, c'est Manu Je peux pas me concentrer avec tous tes pauvres sons, là Non, ouais, c'est lui qui s'amuse aussi Tu mets ça sur le doigt à Manu, tu vois, mon cul Ouais, ouais Tu vas te choper à la sortie de la radio, t'as l'air ta gueule On va te niquer, on va te niquer Bon, ces bandes de petits cons, là, je les emmerde Alors, lors des grèves, tripotez-vous, les gens Les jeunes femmes ou des siens C'est n'importe quoi, le standard, ce soir Je suis dégoûté Non, mais moi, je suis plus dégoûté parce que c'est toi qui fous le plus ta merde Non Nuance Alors, lors des grèves, tripotez-vous, les jeunes femmes ou des siens Quand il y a les trains qui sont complets On va demander à Babington Eh, tu viens chez moi, après, Gérard ? Babington Ouais, ouais, ouais Ouais, ouais, moi, je pense que ouais Tu peux préciser ? Parce que c'est toujours le mercredi, c'est comme ça C'est toujours comme ça Donc, c'est tout, c'est toute la précision Voilà, voilà, mais c'est toujours complet, comme ça D'accord, lâche ça, t'en veux Oh, je te baisse Lâche ça, t'en veux, s'il te plaît Je ne réponds pas à cette question Alors, dans ce cas-là, tu réponds pas à cette question C'est terminé pour toi, le débat Au revoir Au revoir pour elle Alors, fromage de cul Ouais, moi, je fais Qu'un intérêt de De faire des grèves si on peut pas tripoter Des nanas, je veux dire C'est normal, c'est tout à fait Je suis sûr que toi, petit vicieux, tu l'as fait aussi quand t'étais jeune Non, ça m'est arrivé, ouais Oh, raconte ! Allez, raconte Les premières expériences sexuelles dans le RER Qu'est-ce qu'elle raconte ? Vas-y, raconte avant Non, si je laisse parler, toi, tu t'écrases Les auditeurs voulaient qu'ils racontent Bien sûr, bien sûr Pour l'instant, je demande aux auditeurs Leur truc Qu'est-ce qu'elle raconte ? Ouais, raconte quand tu mettais des oeufs dans le cul au chien, vas-y Qu'est-ce qu'elle raconte ? Ouais, bah, je vais te dire que moi, ça m'est déjà arrivé Je vais te raconter une petite anecdote L'autre fois, c'était genre dans l'ouest parisien Et j'ai touché une espèce de grosse vache Avec des tresses qui sentaient pas très bon Alors, caca de Pâques, c'est même plus la peine Caca de Pâques, c'est plus la peine Terminé ! Attends, j'ai le droit de toucher des grosses qui sentent mauvais Je me suis tapé des mycoses, des champignons sur les doigts C'est pas ma faute, mais j'ai le droit Non, non, mais c'est terminé pour toi, tu peux... C'est terminé, ça t'apprendra Comme toi... T'as pas le monopole des grosses, je te signale T'as pas le monopole des grosses Comme toi... Ouais, moi, je touche pas les femmes ni les chiens Ça me dégoûte un peu, mais bon, je touche d'autres trucs D'accord Ça te dirait de me tripoter C'est bien, parce que fromage de cul, c'était Tony Et Tony, il fait les deux débats N'importe quoi, c'est pas grave, c'est pas grave, enchaîne Donc, comme toi, c'était ta réponse ? Oui, c'était ma réponse Ok Je sens le harangue, ou à moins qu'il y ait une question IRC Non, on voulait juste dire que même s'il n'y a pas de grève, on peut tripoter les filles dans le train, et pas que dans le train Bah ouais Ok, donc, je sens le harangue Je viens droguer Je me drogue à la frite Je ne peux pas me passer de frites, c'est plus fort que moi, ça me rend fou Je ne pense qu'à ça, manger des frites Non, mais tu crois que c'est Manu, alors que c'est toi qui viens d'allumer le truc Pff, n'importe quoi, ça c'est pour régler le son du CDR Mais oui, le CDR, on me fout de con, on va Je te disais que je tripote les fesses des hommes, parce que c'est ce que je regarde en premier chez un mec Et après... T'as vraiment des goûts de merde ? Non, mais il s'amuse Attends, je sens le harangue, parce que là, Max, il vient d'arriver Donc, c'était pour préciser que ce n'était pas pour régler le CDR qui s'amusait C'est qu'il est en train de s'amuser à mettre une connerie là-haut Salut Max Donc, je sens le harangue Tu viens chez moi après, Gérard ? Je sens le harangue Non, mais je te réponds, là Donc, je te disais que je tripote souvent les fesses des hommes Ah, vas-y, j'en dis, vas-y encore Dans le tramway ou dans le métro Et donc, je regarde ce que je regarde en premier Vous laissez parler les gens ou quoi ? Donc, voilà, je t'ai répondu D'accord Si t'as pas entendu, sens le harangue J'ai compris quand même ce que tu m'avais dit Alors, pendant les grèves SNCF ou autres, les trimpes ont-ils l'amour ? On va demander à Babinton Chérin Babinton Oui, tu peux répéter la question, s'il te plaît ? J'ai pas bien entendu avec le bruit Alors, pendant les grèves SNCF ou autres, les trimpes ont-ils l'amour ? Euh, ouais, je pense que c'est possible Comment on peut répondre ? C'est possible techniquement Techniquement Par contre, je pense que ça arrive que sur certaines voies ferrées Pas partout en France D'accord Que dans les grandes gares Tony ? Quand je suis contre tes pieds Les trains, ils ont pas d'appareil génital Non, mais, généto Merci Tony pour... Généto, si tu veux C'est des bateaux, généto Parce que c'est transitif, c'est ça ? Non, c'est transpirif Ah, ok Donc, alors Gérard ? Oui, Manu ? Donc, on accueille Je t'écoute à la place de Caca de Pâques Oui, allô ? Et on accueille Slogan à la place de J'ai la chatte en feu Les routiers, c'est tous des enfoirés La CGT au pouvoir Enfoiré C'est Slogan, ça, c'est Slogan Il est dans le débat de la grève, grave Non, non, non, mais je crois que tu lui dis qu'il se calme Non, mais il va t'écouter, y'a pas de soucis Donc, Tony ? Ouais, ça y est, j'ai répondu, j'ai répondu, ils ont pas d'appareil génital Ok, alors, je t'écoute ? Ouais, je t'écoute Vas-y, je t'écoute, GG Non, mais tu réponds à la question Bah, écoute, des trains qui coculent, non, pas des masses Mais il y a quand même Eh, eh, eh, on me laisse parler Il y a quand même un maximum de gens Qui sont enculés dans les chiottes de la loi Je t'écoute Alors, je t'écoute, tu vois On t'a très bien entendu Maintenant, tu dégages, au revoir Moi, j'ai une aventure Voilà, c'est très bien Alors, comme toi Bah non, les trains peuvent pas faire l'amour Par contre, ça baisse le sexe dans les trains Quand il y a grève Ouais, bah ça, ça revient presque à la Sur quelle ligne ? Bah, ça revient presque à la cinquième Tu viens chez moi, c'est ça, Gérard ? Ça revient presque à la cinquième question Ce que tu veux dire C'est quoi la cinquième ? Bah, la cinquième, c'était lors des grèves Tripotez-vous les jambes en arté Il y a une différence entre tripoter et faire l'amour D'accord Tu fais l'amour sur quelle ligne, toi ? Slogan, toi, tu veux répondre, là ? RRB Slogan, tu réponds à la question ou pas ? Bah, j'ai vu que j'étais au standard J'ai pas tout entendu Alors, pendant les grèves SNCF ou autre, les trains font-ils l'amour ? Ouais, Gérard, tu peux répéter la première question du débat ? Je voulais répondre Attends, tu me laisses parler, s'il te plaît Les trains font-ils l'amour ? Tu me prends pour un con ou quoi ? Non, je t'y prends pas Stylès Ouais, mais c'est pas moi qui l'ai dit, alors Pauvre chave C'est pas moi qui l'ai dit, slogan C'est vraiment un bacard, hein Abrouti, va Espèce de doigt en douille, va Tu travailles, hein ? Non Alors, c'était un... Il y a un autre Gérard, il y a un autre Gérard Ouais, il y a un autre Gérard à l'antenne, là Slogan ! Ouais, bah, je viens de répondre Ok, alors, je sens le marrant Alors, effectivement, je pense que les trains ont une vie sexuelle plus épanouie Oh, la folle Parce qu'ils peuvent faire ça à une vitesse plus rapide Non, non, c'est toi, Fildor Ils vont plus vite, quoi, si tu veux N'importe quoi Ils peuvent avoir une vie sexuelle plus épanouie Vu qu'ils vont plus vite J'aimerais te dire je t'aime à la loco J'aimerais te dire je t'aime quand je fais un travlo Celui qui s'amuse à dire ça va se calmer T'as compris ce que je t'ai dit, Gérard ? Ouais, ouais, j'ai entendu Donc, y'a pas de problème Ok, alors, sixième, septième question Pourquoi faire grève lorsqu'on est bien payé ? Gérard ? Oui Juste avant que tout le monde réponde Donc, on accueille J'ai des poux Sous les bras, j'ai des poux Pardon, excuse-moi, c'est un peu compliqué Oui, allô, bonsoir Et on accueille, donc, Couscous À la place de Badminton Salut Couscous Couscous Couscous Couscous Couscous Allô, couscous Couscous Allô, vrai bonnet Je passe le bonjour à Abdel Wahed Salut Tu m'éteins ça, toi ? Tu m'éteins ça, là-bas ? Couscous, c'est une dédicace, hein, ce soir Alors, donc, euh... Bon, vous fermez votre gueule un peu, maintenant On salue, on salue Sous les bras, j'ai des poux Bonsoir à toi Oui, bonsoir Eh, Couscous, bonsoir à toi Bonsoir, tout le monde Eh bien, bien revenu dans les débats du jeudi, toi Bonsoir à tous les bouddhistes Alors, donc, pourquoi faire... Bon, maintenant, vous allez vous calmer Parce qu'il est 2h45 Et je voudrais terminer le débat correctement On peut se... Allô ? Allô ? Ne quittez pas, ne quittez pas Allô, bébé ? Oui, ça va, tranquille Ça va, ça va On peut savoir le nombre de personnes qu'il y a sur internet Puis le darpega, parce que tout à l'heure, ça va mal se finir pour toi Sur... Alors, allô ? Oui, on t'écoute Allô ? Allô ? Allô ? Ok, non, c'était pour... FILDAR ! Oui, Fede, bonsoir, c'est au standard Oui, Fede, bonsoir, c'est au standard Euh, s'arrêtez de bouger Bon, Fildar, tu dégages Non, non, mais là, ça commence à bien faire, lui Oui, Fede, bonsoir, c'est au standard, tu veux parler de quoi ? Ouais, salut Fede, c'est à l'antenne, c'est pour... Bon, ça y est, c'est Manu, là, t'as vu ? Gérard, on est 4131 FILDAR, TU LÊTES PAS LES RIGAUX, QUOI ? Fais ce con ! 4131 Bon, moi, j'arrête le débat On est 4131 Arrête Non, mais là, c'est pas Manu C'est Fildar qui déconne Bon, c'est Fildar, t'arrêtes maintenant D'accord, j'arrête Qu'est-ce qu'il se passe ? Donc, on est... Ça va ou pas ? Non, mais qu'est-ce que c'est que ce bordel, là ? Non, mais je crois qu'il y a un problème Non, il n'a rien allumé Fildar, ça commence à bien faire Il n'a rien allumé ! Regarde ! Il n'y a pas de problème Non, mais il s'amuse, là-bas Non, mais c'est pas grave Manu, c'est la dernière semaine que tu peux les débattre, toi Ça, la semaine prochaine, c'est terminé pour toi On verra Non, non, il n'y a plus de... On verra maintenant, c'est fini Deux semaines qui me foutent la merde, c'est pas la peine Donc, on est 4000... 4000... 4000... Arrêtez, derrière... C'est quoi ce bruit qu'on entend ? Je ne sais pas, je... C'est dingue Bon, on est 4321, c'est en train de remonter un petit peu Mais on n'atteindra pas... Je vais m'accrocher, Gérard On n'atteindra pas les 3000 ce soir Non, les 5000 Les 5000 ce soir, excuse-moi, je suis fatigué Alors, septième question Je vais m'accrocher, Gérard Pourquoi faire grève lorsqu'on est bien payé ? On va demander à Couscous Moi, je ne sais pas Je ne vois pas le problème dans la... Est-ce que tu fais des grèves, toi, Couscous, des fois ? Oui, ça m'arrive Tu fais des grèves de la faim, non ? Oui, j'ai déjà fait le ramadan J'ai déjà fait le ramadan Mais je me suis déjà fait aussi des grèves des poumons Des grèves du cœur, des grèves du foie D'accord Sous les bras, j'ai des poux Je suis en point Tu réponds ? Mais tu es en point, Gérard Tu réponds ou tu ne réponds pas ? Tu réponds, c'est bien Si tu ne réponds pas, attends Manu, tu le prends... Tu réponds ou tu réponds fort ? Manu, tu le récupères On va passer à Slogan La question, j'attends un peu trop On va s'écouter un petit morceau Vos gueules ! Moi, je ne réponds pas aux questions Je ne réponds pas à la question dans ces conditions Il faudrait que tu mènes un peu mieux ton débat Alors, Slogan Répète-la, répète-la Répète la question N'échouiez pas ! Pauvre con, va Arrête tes conneries, tu veux ? Arrête tes conneries depuis tout à l'heure Arrête ! Arrête ! Ce que tu m'énerves ! De poisson ! Lorsque Slogan ! Ouais ! Il y a de l'écho dans la maison C'est Notre-Dame de Paris, là Arrête ! Arrête, Gérard ! Gérard, arrête ! Arrête, arrête, arrête ! Bonne heure, Gérard ! Bonsoir à tous les égorgeurs de France ! Bon, allez, hop, terminé Ce n'est même plus la peine de continuer le débat J'arrête, hop, terminé Fildar, tu dégages, c'est fini pour toi Moi, j'arrête, je continue pour le débat Bonsoir à tous, vous faites les conclusions Couscous pour la conclusion du débat Non, ils sont tous là, Gérard Non, non, non, tu dégages Je ne vois pas le savoir Ces conclusions, c'est tout Tu as bien foutu ta mère lors des deux débats Mais non ! Tu as foutu ta mère pour lors des deux débats Le report a été battu partout On fait ça pour Internet, alors Fais-le pour Internet Il y a encore plus de 4000 personnes On peut peut-être continuer pour eux Toi, tu... Tu vires Non, mais je ne fais plus rien Tu vires, tu vires, c'est des roms Je ne bouge plus Alors, Slogan, si tu veux répondre correctement à la question Ben oui, mais il y avait tellement de brouhaha que je n'ai pas entendu Alors, il faudrait que tu répètes Ce n'est pas possible Tu peux répéter, s'il te plaît ? Pourquoi faire grève lorsqu'on est bien payé ? Alors là, c'est une question bien difficile C'est une bonne question, ça C'est une bonne question Je ne sais pas ce qui t'arrive en ce moment Gérard, sur l'IRC, on me demande que tu répètes cette question, justement Alors, pourquoi faire grève lorsqu'on est bien payé ? Gérard, au standard, on me demande aussi que tu la répètes encore une fois Non, non, mais ils me font chier, au standard Ben ouais, mais bon Gérard, sur Minitel, moi, ils me demandent que tu fermes ta gueule Non, ben toi, tu vas fermer ta grande gueule de con C'est Minitel C'est Minitel C'est Minitel Oh là là Eh Gérard, tu penses aussi quand tu fais caca ? Voilà, pour le Minitel, il ne fonctionnera plus Ah, bien joué Alors, slogan, si tu veux répondre correctement à la question, maintenant Ben, je la trouve tellement compliquée Ben, non, je pense que ce n'est pas utile de faire grève quand on est bien payé D'accord Donc, Tony Ouais, non, en fait, ce n'est pas les riches qui font grève C'est les pauvres comme nous Ben ouais, mais... Non, mais Tony Oui Est-ce que... Pourquoi faire grève lorsqu'on est bien payé ? Non, mais tu ne comprends pas que c'est les pauvres, les pauvres qui font grève Ce n'est pas les riches Les riches, ils n'ont pas besoin de faire grève puisqu'ils ont déjà tout ce qu'il faut Mais n'essaye pas de l'inscrire Ils font des émissions sur M6, ils ont la radio et tout ça Tony, tu évites de dire des noms Eh Gérard, tu penses aussi quand tu fais caca ? On est pauvres, on est pauvres, on est pauvres Donc, la semaine prochaine, pas de Tony Alors, comme toi Ouais De toute manière, c'est la fin du débat, il est 2h51, j'arrête un peu Mais Gérard, mais t'es où ? Comme toi Ouais Bah non, c'est pas utile, moi je suis le même avis que Tony D'accord, et je sens le harangue pour finir Alors, quoi te dire ? Je pense que c'est pour emmerder les gens Tu ne crois pas ? Elle est con Non, mais ce n'est pas la question, ça Ça n'a rien à voir avec la question Elle n'a rien dans la tête Viens là, viens là, viens là, la cinglée Elle est con Allez hop Alors, je vous préviens Elle est priso Elle est moins con que vous parce qu'elle sait répondre aux questions que vous, vous ne savez pas répondre Alors, moi, pour vous dire Oh, vous fermez vos jeunes maintenant Merci Alors, moi, pour vous répondre, je ne sais pas Pourquoi ça sert de faire grève lorsqu'on est bien payé Vu qu'il y en a qui se touchent des briques par mois Combien ? Des millions par mois, je me demande pourquoi ils font grève Ça ne sert strictement à rien Tu peux toujours réclamer 200 balles de titres qui restent en plus Et alors ? Ça dépense Mais ouais, c'est pas possible Conclusion Je sens le harangue et que tu suces la bite, ça y est Non, non, non, mais il ne faut pas déconner J'ai un problème au standard Donc, c'est terminé C'est rien terminé du tout, tu continues Allez, je ne sais pas, fais pas la pute Il y a un problème au standard C'est un problème d'insert, quand même Si quelqu'un m'entend dans le CD-ROM Allô, je suis perdu, là C'est mieux, déjà Conclusion Gérard, avant de finir, quand même, il y a Davy1 qui te pose une question Est-ce qu'il y a des universités où on apprend à faire grève ? Arrête, Gérard, il ne sait pas ce que c'est, une université Ça a merdé encore Personnellement, non, je ne pense pas De toute manière, même les lycéens font grève Mais comment on sait comment il faut faire la grève, alors ? Ça, c'est eux qui savent S'ils sont mal payés, ils font grève Non, non, mais ce n'est pas que ça Je vais t'expliquer, par exemple, tu es étudiant, tu n'as jamais fait de grève Il y a quelqu'un qui dit, bon, on va faire la grève Si tu ne sais pas comment on fait, qu'est-ce que tu fais ? Tu l'essuies, c'est tout Tu l'essuies, tu fais quoi ? Tu l'essuies comme un mouton ? Tu rentres dans le truc, et puis c'est tout Tu l'essuies avec un chiffon, non ? Mais non, tu fais comme ils font, et c'est tout Donc, conclusion du débat, on va demander à Couscous C'est bâclé, ton débat Tu n'avais qu'à moi faire le compte, ça ne serait peut-être pas arrivé Ça n'a rien à voir Je les coupe, ils rigolent Couscous Continue, continue, Gérard Non, non, c'est terminé C'est terminé Allez, une question Continue ton débat Combien coûte une grève en général ? Bon, laisse tomber, on conclut Bon, alors, conclusion, Tony, conclusion Allez, hop Merci, Tony C'était bien, bravo C'était bien marré C'était bien, bravo C'est un peu trop le bordel, quand même Et qui est-ce qui paye ? C'est les auditeurs Donc, j'aimerais que la prochaine fois, on fasse ça mieux que ça Voilà, comme d'habitude Et puis, c'est tout Ok C'est qui ? C'est Goldo Qu'est-ce qu'il vient faire ? Non, je te jure Slogan Slogan Sérieusement, pour une fois Plus t'avances dans le temps, plus c'est de la merde ce que tu fais Et faudra que tu... C'est faux C'est faux C'est faux C'est faux Franchement, on te prendra pas Toi, tu resteras chez toi Alors, sous les bras, j'ai des poux Non, mais j'ai pas fini Non, non, mais ça y est Si, t'as fini Sous les bras, j'ai des poux Ouais, bah, donc, je continue avec ma soucoupe volante Je voulais dire que tu mets tout sur le dos de Fildar Mais faudrait quand même un petit peu que tu te calmes, quand même Non, mais attends, qui c'est qui a foutu sa merde au premier débat ? T'as quand même déjà la grosse qui n'aide pas du tout le débat, quand même Non, Manu n'est pas grosse Non, mais je parle pas de Manu Elle apporte pas des réponses très constructives Et déjà, tes questions ne volent pas très haut Après, si tu mets ça sur le dos de Fildar, ça le fait pas Mais attends, les questions de la grève Fildar, il travaille, regarde-le, il travaille, il s'acharne et tout Et toi, tu le tapes Les questions de la grève, on les a revues et corrigées avec Rigaud et Manu Donc, je vois pas du tout pourquoi c'est de la merde Et c'est pas une raison pour faire du kickboxing avec Fildar C'est terminé Ok, couscous Ouais, bah, le débat, il aurait été plus intéressant Si t'avais pas trop gueulé sur tes standardistes Non, mais j'ai pas gueulé sur mes standardistes Manu, il a bien fait son boulot au deuxième débat Rigaud, il bosse toujours bien sur l'IRC Donc, je vois pas, au deuxième débat, je vois pas sur qui j'allais gueuler À part Fildar qui s'amusait à passer des doubles sons Ça, c'est tout T'es d'accord, couscous ? Y'a pas de problème Bon, Gérard Y'a quand même quelques conclusions sur l'IRC On va pas lire les 4000, quand même Alors, y'a Turpentine qui dit que ton débat avait ni queue ni tête comme toi Comme d'habitude Y'a, je sais plus qui, qui disait qu'ils ont apprécié la grève de ton cerveau Qu'est-ce qu'il se passe ? Euh, voilà, donc, ça sert à rien de faire la grève Mieux vaut tenter sa chance au Big Bill si on veut plus d'argent Ouais Si c'est pour insulter ses assistants et passer son temps à gueuler en bâclant les débats GG devrait faire grève C'est vrai, ça ferait du bien que tu nous fasses une grève de débat C'est ce qui pourrait peut-être se produire Ouais Ok Et je voulais juste finir pour dire que le 13 décembre Y'a une grève planétaire des internautes contre France Télécom Ouais J'en reparlerai dans la semaine Ouais, ouais, c'est 9h Comme toi Ouais Donc pour toi, conclusion Déjà, je vous fais tous des gros bisous Et puis, je voulais dire que tu pues la moule Faudrait mieux qu'elle reste chez elle Parce qu'elle a déjà les questions à l'avance Elle répond n'importe quoi Elle sait pas du tout avancer le débat Ça commence vraiment à puer la moule Tu pues la moule, reste chez toi Ben, c'est simple parce que j'ai pas de personne Mais si, c'est le poisson là C'est le thon C'est le thon Le harangue pourri C'est le thon Ah non, le harangue, pardon Gérard C'est qui ? C'est Pierre Fulain Non, mais c'est bien C'est de la merde, peut-être Je sens le harangue pour conclure Je sens le harangue Allô, je sens le harangue Elle est là Allô Pas elle là, pas elle là, son piquet Si, il est là, son piquet Pas elle là, pas elle là, son piquet Oui, il est là Hein ? Ouais Tu as pas entendu ce que j'ai dit ? Non Non Gérard, je t'attends à la sortie de la radio Donc, je te répète, c'est comme t'as pas entendu Ouais Donc, j'ai un truc au départ Gérard, je t'attends à la sortie de la radio Bon, celui qui s'amuse à dire des conneries, vous laissez parler des gens, merci Gérard, je t'attends à la sortie de la radio Donc, ouais, je t'écoute Et j'écoute pas trop souvent quand même D'accord Bon, bah, c'est pas grave, j'ai vaguement entendu ce que tu me disais parce que c'est coupé à moitié Fildar, tu recommences ? Non, non, mais tu recommences, c'est bien, mais ça c'est terminé pour toi Est-ce que tu fais des bêtises, celui-là ? Alors, on va s'écouter, pour moi, la conclusion, c'était de la merde Le débat, c'était comme le premier, j'ai pas pensé que ça allait se terminer comme ça, c'est grâce à Fildar quand même Parce que celui qui a foutu sa merde, on termine avec combien de personnes sur l'IRC quand même, Rigo ? Allô, Gérard ? Non, mais... Allô, Gérard ? Manu, là, fait quelque chose Allô, Gérard ? Non, mais je peux pas parler si... Donc c'est bon Alors, on a fini à 4563 personnes, ce qui est vraiment excellent C'est pas mal Franchement, Gérard, y'a aucune radio qui va faire un... Non, mais je pense que d'ici... On aurait pu faire mieux s'il y avait moins eu de bordel avec Fildar Oh non ! Tu te rends compte, Gérard, qu'il fait de la merde et t'as 4000... Non, non, mais c'est toi qui a foutu ta merde, t'as foutu ta merde sur les deux débats Allô, Gérard ? Y'en a que deux qui ont bien bossé, c'est Manu et Rigo, c'est tout Y'a que eux qui bossent bien lors des deux débats Alors, on va s'écouter... Ah, c'est clair, y'a même pas toi, toi tu bosses pas non plus bien Allô, Gérard ? Pour terminer, 256, on va laisser Rousseau pour la nuit sans pub Allô, Gérard ? Demain matin, 6h, vous allez retrouver Bart Allô, Gérard ? Et demain soir, 22h, vous allez retrouver le Star System Et surtout, y'a des places à la loco et... Y'a Jean-Denis Berre demain, c'est... Jean-Denis Berre, pour en offrir, là ? On peut en offrir Eh ben, pour demain soir, ceux qui veulent venir à la loco avec le DJ Regueuillat, je serai là Et puis, y'aura également DJ Sinclair, c'est maintenant qu'ils appellent au standard On va prendre les 3, 4, 5, 6 premiers Avec la personne de leur choix, ils viennent gratos Grâce à Gégé, quand même Et donc, samedi, t'es où, tu peux préciser ? Samedi à Vannes, on est à... Malverne Malverne Voilà, donc, je vous souhaite une bonne nuit Je vous retrouve la semaine prochaine Et on s'écoute les poules du Cirque Pain d'Air Avec du saucisson Bonne nuit à tous et à la semaine prochaine == Le débat sur les jeux télé == === Le contexte === === Les personnages === === Transcription === Nous avons une parodie de Gérard, sympathique paraît-il, bonsoir faux Gérard. Allo ? Oh putain, tu es réveillé, c'est grave. Il est dans une cabine, ça va Gérard ? Bonsoir à tous, donc bon ben, petite parodie des débats je crois. D'accord, ben le vrai Gérard t'écoute, on y va. Donc balance le jingle et c'est bon. Ah faut que je mette le jingle, pardon, alors excuse-moi, vous l'avez calé, attention on y va, prêt, 3, 2, 1, top. Et voilà, donc bonsoir à tous et bonjour, c'est les débats de Gérard, donc on va saluer Rigaud à l'internet www.funradio.fr. Oui, bonsoir, big big up. Ok, donc Manu au standard 0870 5000. Ouais, en gros, salut. Et Fildar à la pro. Ok, donc on va accueillir Couille de loup. Bonsoir Gérard. Couille de loup, bonsoir. Bonsoir Gérard. Bonsoir. Bouledogue mystère. Oui, bonsoir Gérard, t'aurais pu m'imiter aussi, je suis quand même une star, merde. Ouais, salut. Donc le débat, je pense, va porter sur la poésie. Donc première question, que pensez-vous de la poésie, si oui, pourquoi ? Donc on va demander à Bouledogue mystère. C'est bien tu Gérard. La poésie. Non mais tu travailles. Est-ce que tu peux me répéter la question ? Non mais tu te fous de ma gueule, alors bonne nuit, dégage. Hop, tu me gères ça, d'accord ? Ouais, Gérard, c'est Manu. En gros, à la place de Bouledogue mystère, on accueille Saucisson à l'ail. Ok, donc Saucisson à l'ail, bonsoir. Bonsoir. Allo. Bonsoir. Saucisson à l'ail une fois, Saucisson à l'ail deux fois. Je suis là, je suis là. Bon, alors t'as écouté la question ? Ouais. Donc pour toi ? Ouais, bah moi j'aime bien la poésie, je trouve que ça ouvre l'intellect sur... Non mais attends, Saucisson à l'ail, on va pas aller voir l'intellect ou autre, hein. On va pas chercher Midi à 14h, d'accord ? Que penses-tu de la poésie ? Bah en fait, j'aime bien. Donc couche de loup pour toi ? Ouais, bah moi j'aime pas ça. Je trouve que ça sert à rien, on nous fait chier à l'école, là, toujours, apprendre des poésies, on s'en fout. Mais bon, c'est bien parce que t'apprends à lire quand même. Non mais attends. Quoi ? Attends, à l'école, déjà d'une. Quoi ? Déjà, à l'école, la poésie, ça m'étonnerait qu'on en apprenne, je suis désolé. Ah bon ? Non mais attends, moi je veux te dire une chose que... T'es à quelle école, toi ? Non mais attends, déjà, moi je veux te dire une chose que l'école, bon bah, je sais pas que j'ai pas été, mais j'ai pas trop pratiqué de ce métier. Mais je veux te dire une chose, tu vois, ça m'étonnerait, hein. Donc... Tu changes d'école, hein. Ah ok. Donc moi, en ce qui me concerne, c'est dommage parce que, bon bah, moi, la poésie, c'est un truc que j'aime bien. C'est pas un truc qui me déteste. Donc, moi, je veux te dire une chose que, d'ailleurs, ce chisson-là, il pourra confirmer. Ouais, tout à fait. Tout à fait. Déjà, ce soir, toi, je vais te bouffer ta petite chatte. Je veux te dire une chose que, tu vois, la poésie, c'est un truc que, moi, pour faire craquer les filles, c'est ok, quoi. Voilà, donc, bon bah, on va... On s'écoute un petit disque ou pas, là ? On fait quoi ? Non, conclusion, d'accord. Donc, conclusion, c'est pas mal. C'est dommage que, bon, les auditeurs, c'est un peu des habituels, j'ai l'impression. C'est Tony, on t'a reconnu. Donc, tu pourras pas dire que c'est le contraire. Et toi, ce chisson-là, je t'attends, je sais pas. Dans mon lit, on va faire la fête. Rigaud, sans indiscrétion, on a combien de monde, là, sur Internet ? Oui, énormément de monde sur Internet. On est deux. Il y a moi et un mec de France Télécom à qui, d'ailleurs, je fais une petite casse-déli. Ok. Donc, là, je crois que le record mondial d'Internet est pas prêt d'être battu, parce que, là, c'est bizarre. La semaine dernière, on avait atteint les plus de 3000. Et maintenant, on est que deux. Donc, là, je crois qu'on touche le fond du rouleau. Donc, bon, bah, on va s'écouter un petit disque, quand même. On va s'écouter des annus sans feu avec Bouffe-moi la chatte le week-end, mais pas la semaine, je travaille. Voilà, donc, dans un instant, vous allez retrouver Blondo pour les nuits sans pub. Et bonne nuit à tous. Bravo, t'es bien assuré. Excellent. Bravo. Il faut l'embaucher, il faut l'embaucher. Ah, là, franchement... Big up, big up. Ah, ouais, big up à toi, parce que, franchement, bravo. Bravo. Dommage, tu peux me refaire un petit coup de fil d'art ? C'est dommage qu'on n'ait pas entendu assez fil d'art. C'est hallucinant, c'est hallucinant. C'est hallucinant, hein, Tony ? On connaît bien la voie du fil d'art. Putain. Tony, entre Tony, Manu et fil d'art, et Rigo, putain, mais c'est hallucinant. qui n'a pas trop apprécié qu'on se foute de sa gueule, il s'est vexé. Alors que je lui ai expliqué que c'est un peu comme les guignols, c'est la consécration que quand on est une star, on est imité. Gérard fait une parodie. Gérard est en train de fumer sa cigarette dans le couloir, il n'est pas content, il fait la gueule. C'est dommage, mais en tout cas, vraiment félicitations. Il n'y a rien à dire, c'est du top top de chez Top Top. Quand tu as l'occasion de nous en refaire d'autres, n'hésite pas. J'avais prévu de faire ça toutes les semaines, mais je ne sais pas si... Ah si ? Je ne sais pas. Avec grand plaisir. Avec grand plaisir. Merci encore. N'hésite pas quand de temps en temps, Pierre Fula, tu peux également nous faire des petites engueulades entre Gérard et Fildar. Si tu avais à inclure ça dans tes débats, je sais que ce n'est pas facile. Petit à petit. Merci. Qu'est-ce qu'il y a, Gérard ? On l'a repris en antenne. Qu'est-ce qu'il y a ? Bah non, fais pas la gueule, merde ! Il est vraiment... Il est vraiment... Il est vraiment phénomène ! Il est vraiment... Il rigole, vas-y ! Il est vraiment phénomène ! Allez, Gérard ! Bon, allez ! Dans moins de 5 minutes, sur Fun Radio, les débats de Gérard vont démarrer. La pression est mise à son maximum, que les radios d'en face s'accrochent, car le bulldozer de la bande FM va arriver. Le monstre, par définition. C'est Alain Delon au cinéma. On a connu Spielberg en tant que metteur en scène. Et il y a sur la bande FM l'animateur qui, sans nul doute, va marquer ses 5 dernières années. Et à mon avis, c'est loin d'être terminé. On est au début d'une grande aventure. Encore 15 ans de signature pour un débat de Gérard, comme chaque jeudi. Un sur la posie et un sur les séries télévisées. TF1, entre autres, qui sont remis bien largement en avant grâce au Big Bill. Les débats de Gérard, si vous voulez y participer. 75 000, Internet également à votre disposition. irc.funradio.fr Et dans l'immédiat, Lenny Kravitz pour foutre la pression, les enfants. Toute la bande FM, ce soir encore, va cramer dans tous les sens. Prévenez-les, Sky, Energy, RFM, Chérie FM, Nostalgie, RNC. Ils sont morts, eux. Europe 1, RTL. Gérard de Suren déboule sur la bande FM. Les débats, pas de radio et pas d'insultes de Gérard. Qui vous attend sur l'Internet. www.frfunradio.fr On est combien, là, pour l'instant, Rigo ? On est déjà 1280. Et ça arrive, ça n'arrête pas d'arriver. Et tu vois, plus ça va, plus ça monte. Donc, le premier débat va porter sur les jeux télé. Donc, on va accueillir pour ça Je Pue, Je Pue la Crotte, Je Pue la Crotte, Yetto, On peut écouter Fun Radio sur... Ifto, Gérard, excuse-moi. Ifto. Ah, Ifto. D'accord. T'écriras mieux, d'accord ? Non, non, mais t'écriras mieux. C'est Manu qui a écrit. Gérard, c'est mon écriture, tout ce qui est ville et fréquence. Ok, je te remercie, Manu, de préciser. Donc, on peut écouter Fun Radio sur 97.9. Oui, bonsoir, Gérard. Bonsoir à tous. Oui, bonsoir, Tony. Mais non, Tony, il est là. Écoute, Tony, allô. Oui, bonsoir, Gérard. Bonsoir à tous. C'est pas moi. Bien sûr, Tony à Brest. C'est ça. Alors, Tony, c'est Paris. Il a le droit de voyager ? Dans Vacances à Brest. Enfin, bref. Pipouin. Pipion. Pipion. Albi. 97.1. Ouais, c'est ça. Non, mais répondez pas quand je parle. Bon, Pipouin, là. Pipion. Pipion, tu réponds ou quoi ? Il est là, merde. Oh, quoi, merde ? Je vais pas te faire foutre, ok ? Oh, Gérard, doucement, quand même. C'est le début. Pute de nuit. Pute de nuit, Aras. C'est ça. Bon, bien sûr. Allez, foutez-vous de ma gueule. Foutez-vous de ma gueule. Allez, hop. On attaque. Comme ça. Non, mais présente quand même tout le monde, Gégé. Attends. Pour un instant, c'est quoi ce bordel que tu me fais ? Tu commences. Gérard. Tu commences. Tu commences. C'est juste le nom. Attendez, attendez. Merde ! Putain, mais c'est quoi ce bordel ? Moi, je fais le standard. Mais quoi ? J'ai rien fait. Mais t'es dans ce bordel. Putain, mais c'est quoi ? Putain, rigole pas. On va avoir trois auditeurs. Oh, non, non, non, non. Mais attends. C'est quoi ce bordel qu'il nous fait ? Quoi ? Il y a je pue la crotte. Non, non, non. Allez, hop. Allez, hop. Allez, hop. Mais calme-toi. T'es énervé pour rien. Putain, mais merde. Qu'est-ce qu'il me fait, là ? Qu'est-ce que c'est que ce nom ? C'est surnom. J'y peux rien. Attends. Je te jure. Dégage. Dégage. Je veux plus te voir ici. Dégage. Casse-toi. Casse-toi. Casse-toi. Mais qu'est-ce qu'il va faire, le standard ? Comment on fait, Gérard ? Attends, putain. Non, mais Gérard, ça va. Moi, j'en ai ras-le-bol. J'en ai ras-le-bol. Toutes les semaines, c'est le bordel. Mais non. Mais si, ce soir, ça va être le bordel. Mais non. Mais si. Je vois le coup arriver. Mais arrête des bêtises. C'est toi qui es énervé, ce soir. Attends. Moi, je vois le coup. Non, t'es énervé d'office. Alors, Tony. Ça va bien se passer. Ça va bien se passer. Bien sûr. C'est le bordel. T'as décidé. Donc, c'est ta faute. Oui, pourquoi ? Parce qu'il est là. Il n'a pas été... Je ne voulais pas ce soir. Mais qui est à ta place ? C'est bon. Je ne veux pas. D'accord. Tu choisis quelqu'un. Alors, il n'y a personne au standard. Comment on fait ? Non, mais là, il voulait quelqu'un. C'est lui qui remplace. C'est lui le chef. J'en ai parlé hier. Bon. C'est Gérard au standard. Il fait tout, Gérard. Françoise. Oui ? Bonsoir. Bonsoir, Gérard. Ah, Françoise, salut. Oh, on se calme. Bah, écoute, j'ai le droit de dire bonjour, quand même. Elle est quand même Gérard, la star. Ouais. C'est clair. Vas-y, Gérard. Allez. Ça commence à... Allez, boum. Première question. Allez. Génial. Voilà. C'est bien. Fais voir. Non, non, non. Attends. C'est quoi, les noms que tu me cherches ? J'en ai rien à foutre. J'en ai rien à foutre. Vas-y, j'en ai rien à foutre. Salut, Gérard. Ça va ? Salut. Hé, Gérard, est-ce que tu pourrais me prendre au standard, là ? J'ai quelque chose à te dire, s'il te plaît. Non, non, non, non, non, non. C'est qui ? C'est qui qui veut me parler ? Rodrigo. Hein ? Rodrigo. Bon, Gérard, allez, on y va. On y va, on y va. Parce qu'il n'y a personne au standard, c'est la merde. Alors, vas-y, Gérard. Première question. Dans le débat, dans le débat. Première question, c'est sur les jeux télé. Quel est votre jeu télévisé préféré ? On va demander ça à Je Pus La Crotte. Je Pus La Crotte, bonsoir. Moi, mes jeux télévisés préférés ? Alors, mon jeu télévisé préféré, c'est quand même le Big Bill. Il faut le dire, c'est un jeu passionnant et j'adore. J'adore la gaffe. Oui. Voilà. C'est tout ? Ouais. Alors, Pipion ? Moi, c'est sans aucun doute le juste prix. Ouais. C'est vraiment bien, quoi. C'est intéressant et c'est culturel. Enfin, c'est tout, quoi. Ouais, d'accord. Vous cherchez pas trop à... Bah, c'est vrai. Non, mais vous cherchez pas trop à répondre aux questions. Bah, pourquoi ? Bah, tu me dis... Alors, Pute de Nuit ? Ouais, moi, c'est 100% question sur Arte. Comment ? Moi, c'est 100% question sur Arte. Non, sur Arte... Non, non, non, non. Sur Arte, y'a rien. Si, si, y'a Formos sur... Il y a assez Formos qui me précise. Le mieux, c'est 100% question. Pas d'animateur, pas de décor, pas de candidat. Non, non, non. Sur Arte, y'a aucun jeu télévisé. Je suis désolé. C'est pas Arte, c'est la cinquième. C'est la cinquième. Arte, ça fait un peu plus... Artoni ? Ouais, non, moi, en fait, j'aime pas trop les jeux sur TF1. Je trouve que c'est un peu débile, quoi. J'ai l'impression que c'est un peu pour les beaufs. Moi, ce que j'aime bien, c'est les jeux sur France 3, question pour un champion. Et puis, aussi, 100% question. Le Cadoc ? Pardon ? Le Cadoc ? Le Cadoc, non, j'aime pas trop, parce que ça me fait trop penser à la 4-10-9. La famille en or ? Non, non plus, parce que c'est sur TF1. Et alors ? Ouais, ben, j'aime pas, non, en fait, non. Dans ce cas-là, si ça te plaît pas, tu changes de chaîne, c'est tout. Voilà, il a le droit de pas aimer. Il a le droit de pas aimer. Il regarde les autres chaînes. Ben ouais, c'est ce que je fais, c'est ce que je t'ai dit. Françoise ? La gaffe. La gaffe, le juste prix, et puis... Là-haut de la fortune ? Oui, avec Philippe, ouais. Philippe, tu le connais ? Ben, bien sûr, ouais. Ah bon ? Ouais, ouais. T'as déjà couché avec lui, Françoise, non ? Oh, Manu, ça suffit. Oh, je demande, je me renseigne. Et Françoise, tu regardes Cascado ou pas ? Non. Et j'en ai rien à foutre pour terminer ? Moi, c'est le Big Bill, mon préféré, et j'ai pas tribu une fois. Et, en fait, derrière Zeno, j'ai une botte de coton-tige. Alors, toi, j'en ai rien à foutre. J'en ai rien à foutre, c'est terminé pour toi. Non, mais je l'ai vu, je l'ai vu, cette émission, c'est vrai. Ben oui, c'est vrai. Bon, alors, si vous commencez à me casser les bureaux... Mais je te casse pas les bureaux, Gérard. C'est vrai, j'ai participé. Tu réponds comme il faut à la question, et tu la fermes. Bon, alors, c'est le Big Bill, voilà. Parce que, pour l'instant, vous avez... Là, pour l'instant, vous êtes en train de me casser les couilles, et j'aime pas ça. C'est bon signe, alors. Allez, Gérard. Allez, continuez. Continuez comme ça, vous allez... Allez, enchaîne un peu, là. Quoi ? Qu'est-ce que t'as, toi ? Ben quoi ? T'es animateur radio ou t'es un branquin ? Qu'est-ce que t'as ? Qu'est-ce que t'as, là ? Ben quoi ? Tu me cherches, là ? Vas-y, j'ai quatre palmanouches qui s'éveillent en moi. Eh, si t'es pas content, tu te casses. Ok ? Allez, Gérard, arrête d'être agressif. Allez, enchaîne, enchaîne. Alors, lors des émissions des jeux, jouez-vous à deux, ou à plus, ou à autres ? On va demander à Françoise. À plusieurs. Tu peux préciser ? C'est-à-dire que je joue moi, mon fils, et puis mon partenaire. Ouais, mais tu peux préciser sur quels jeux, à peu près, Françoise ? La plupart, c'est Laïga. C'est un cycle juste pris. D'accord. J'en ai rien à foutre. Ben moi, disons que je joue tout seul, parce que j'ai qu'un chat, donc je joue tout seul. D'accord. Je crois que toi, pour l'instant, t'as pas l'air de comprendre ce qu'on pose comme question. Rico ? Oui, sur IRC, il y a Davy1 qui te demande si il serait intéressé... Est-ce que tu serais intéressé de présenter un jeu télé sur Fun Radio ? Non. Présenter un jeu télé sur Fun Radio, ça m'étonnerait. Bon, alors celui qui s'est mis à rôter va arrêter. Ça pourrait s'appeler le Fun Big Bill. Allô ? Allô ? Non, mais c'est... Vous allez pas commencer le premier débat comme ça ! Bon, allez, tu poses ta question. Un jeu comme le pauvre Blaireau, ça t'intéresserait pas ? Alors, Tony ? Oui ? Le Blaireau, il t'emmerde ! Non, mais c'est un jeu sur Fun Radio, c'est un pauvre Blaireau, là. Bingo ! Bon, Gérard, je sais pas, fais quelque chose. Non, non, mais attends, pour l'instant... Non, non, mais attends, pour l'instant, personne n'est capable de gérer l'autre. L'autre, Pildar, il prend des cons. Personne au standard, tu l'as viré, c'est pour ça que c'est la merde. Tu vas là. C'est un Gérard. Olivier ! Olivier ! Olivier, c'est quoi, là ? Allez, vos dialles derrière, s'il vous plaît, merci. C'est un Gérard. Olivier ! Olivier, merde ! Olivier, tu peux laisser en l'air. Non, non, tu laisses ouvert. Non, non, tu peux laisser en l'air, tu me calmes tout le monde déjà pour commencer. Bon, vous vous calmez un peu. Non, non, mais... Prends-moi, prends-moi. Il y a Tony qui veut te parler, donc tu te débrouilles avec lui. Donc... Allez ! J'en ai rien à foutre. Tu peux reposer les questions, s'il te plaît ? Non, non, non, non, non, non, non. Je repose plus les questions. Même les gens de l'IRC, ils l'ont pas compris, la question. Alors, à l'heure des émissions de G, jouez-vous à deux ou... ou autres ? Bon, alors... Bon... Alors, quand vous avez fini de me faire chier comme ça, ben, vous me le dites. Tu peux répondre, Gérard ? C'est qui ? Ben, vas-y. Ben, moi, je suis un peu comme l'autre garçon, j'ai aussi qu'un chat, donc, ben, je joue toute seule, mais... Ben, oui. J'ai joué avec lui, je veux bien, hein. Ben, Gérard, tu gueules, mais si on n'a qu'un chat, comment tu veux qu'on fasse ? Ben, attends, pour l'instant, je t'ai pas sonné, toi. Ben, si, tu m'as engueulé tout à l'heure. Non, mais pour l'instant, moi, je t'ai dit que je t'ai pas sonné. Donc, tu laisses parler les gens. Donc, pute de nuit. Ouais. Pourquoi ? Ben, je t'ai dit, je joue avec mon chat aussi, donc, jouer à deux, c'est plus sympa. Donc, si le garçon veut que j'aille jouer avec lui, il n'y a pas de problème. OK. Pipion ? Ben, moi, je regarde comme ça. Je regarde la télé, je joue pas, ça m'intéresse pas. J'avais les fesses. Voilà. OK. Euh... Je pue la crotte ? Ouais, ouais, je tue la crotte, bonsoir. Moi, je joue avec mon chat aussi. D'accord. Euh... Tony ? Il est au standard avec Olivier, Tony. Ouais, ouais, je suis là, je suis là. Donc, moi, GG, moi, je joue en famille. Question pour un champion, mais comme c'est... J'ai une famille d'immigrés, c'est... Enfin, ils arrivent pas à répondre aux questions, donc c'est moi qui gagne tout le temps. Bon, Tony, tu vas te calmer. Non, mais c'est vrai, écoute, c'était... Tu vas te calmer parce que tu passes sous le test pendant les débats. Écoute, ben, je te kiffe, c'est pour tes 100% FN. Ben, moi, je te kiffe, je t'emmerde, OK ? Mais Gérard, il a rien dit, là. Ben, t'es pas insulté, là. Et pour le même prix, je t'insulte, je te le dis direct. De dos, quoi, Gérard. Comprends-le. Bon, allez, Gérard, on enchaîne. Allez, allez. Alors, troisième question. Et je répondrai après aux questions. On y abrège. Attends, si t'es pas content, toi, tu dégages, OK ? Allô ? Allô ? Allô ? Allô ? Allô ? Allô ? Allô ? Ben, Gérard, allez ! Non, mais attends ! Celui qui s'amuse à dire que j'insulte ton cul, je l'emmerde ! Allez, Gérard. Pas d'insulte. Parce que là, ça va pas commencer comme ça. C'est pas forcément à toi qu'il parle. Vas-y, enchaîne, enchaîne. Trouvez... Qu'est-ce que t'as, Tony ? Je t'ai dit de dégager. Mais il sait pas, Tony. Allez, Gérard ! Je sens la crotte, c'est bon. Allez, enchaîne. Allez, allez. Eh, putain, vous savez pas comment ça me casse les couilles au premier ! Gérard, on dit rien, alors fais ton débat. Alors, trouvez-vous qu'il y a trop de pubs entre deux ? Entre deux quoi ? Entre deux quoi ? Entre deux cul. De toute manière, vous allez réfléchir, on va s'écouter. Les six sont... Attends, attends, repose la question. Calmement. Alors, trouvez-vous qu'il y a trop de pubs entre deux ? Et on va s'écouter. Voilà, attends, où est-ce que les gens peuvent nous appeler ? Aux heures 875 000, c'est Olivier qui vous attend. Et sur l'IRC, il y a toujours Rigaud. Ouais ! Donc, vous pouvez toujours essayer de nous appeler sur l'IRC. Donc, www.fr, Fun Radio. Voilà, tout à fait. Et on a dépassé les 2500, on est à 2782. Ouais, c'est bien. Ça monte bien, quoi. Donc, Gérard, j'aimerais bien que ton débat se passe bien pour ces gens-là qu'on essaye encore de battre. Moi aussi, je voudrais bien que ça se passe bien. Donc, on va s'écouter les soupçons de ma grosse. Elles sont les meilleures avec des portes gertelles. Et on se retrouve tout de suite après. Les débats. Pas de radio et pas d'insultes. De Gérard. Et voilà, donc, on se retrouve. Il est 0h45. Donc, c'est toujours Olivier qui est au standard, qui vous attend aux heures 8. 0800. 0800 08 5000 et 0800 3. 0800 70 5000. 0800 70 5000 et 0800 3 08 5000. Et toujours Rigaud qui est sur l'Internet. Donc, vous pouvez toujours nous laisser des petits messages sur l'Internet. www.fr. Tout à fait. Oui, Rigaud. Oui, tout à fait. Non, mais je te laisse finir. T'allais dire quoi ? On va saluer quand même les Belges parce qu'on n'a pas beaucoup de Belges. Si, si. Contrairement à ce que tu crois, il y en a beaucoup sur l'IRC, justement, vu qu'il y a des gens de partout à travers le monde. Et voilà, les Belges, ils sont en train de s'exciter parce que je parle d'eux. Et il y a même des gens de très, très loin. Et malheureusement, il y a des gens qui ne captent pas TF1. Ils écoutent quand même le débat via Internet. Donc, on va réécouter. On récupère. Je pue la crotte. Pardon, c'est moi. Merci, Manu. Donc, je pue la crotte. Donc, j'espère que vous avez compris ce qu'Olivier vous a dit. Donc, Pipion. Oui, bonsoir. 18 ans. Pute de nuit. Bonsoir, Gérard. Donc, Tony. Bonsoir. Françoise. Bonsoir, Gérard. Et j'en ai rien à foutre. Bonsoir. Alors, donc, maintenant, je vais quand même répondre aux deux questions. Non, mais vous commencez pas. D'accord ? Parce qu'Olivier vous a calmé. Si vous continuez, de toute manière, on va changer les noms. Non, mais de toute manière, on va reprendre d'autres personnes à la place. Parce qu'il y a quand même 24 lignes qui sonnent. Donc, je voudrais bien que vous répondiez, qu'on fasse des débats corrects. Je voudrais bien qu'on arrive à faire au moins les deux débats potables. Pas comme toutes les semaines que ça foire. D'accord. Donc, alors, la première question. Quel est votre jeu télévisé préféré ? Donc, j'ai pas répondu. Maintenant, je vais vous répondre. Donc, comme Françoise a l'écoute et puis tout le monde, je pense, regarde TF1. Donc, il y a le Big Bill. Il y a le Juste Prix. Il y a le Millionnaire. Il y a Drôle de Jeux. Et il y a plusieurs jeux qu'on peut regarder. Bon, bien sûr, ceux qui adorent le Big Bill. Donc, c'est sûr qu'ils regardent tous TF1. Bon, sur la deuxième question. Lors des émissions de jeux, jouez-vous à deux ou autres ? Bon, là-dessus, je pense que là, c'est un peu dur de répondre. Parce qu'en fin de compte, on peut regarder le Big Bill ou autre. Même le Juste Prix. Bon, c'est sûr que c'est pas évident à trouver sur des chansons. Parce que là, ce soir, j'ai écouté. Les chansons, elles étaient faciles. D'habitude, c'est un un un Gigi qui le fait. Et donc, c'est pas évident à trouver les chansons. Donc, la troisième question. Trouvez-vous qu'il y a trop de pubs entre deux ? Alors, que je m'explique bien, les pubs, dès que le début de l'émission commence, au bout d'une demi-heure, à peu près, vous avez une pub. Est-ce que vous trouvez ça normal ou pas ? Donc, on m'a demandé à... À la française. J'en ai rien à foutre. Non, je trouve pas que c'est normal du tout. Ils mettent beaucoup trop de pubs. Ouais, mais tu peux te l'expliquer ? Bah... Disons qu'ils mettent une à deux pubs pendant une émission qui est une demi-heure. Ça fait beaucoup trop. Ouais, mais... Bon, d'accord. Non, ok. T'inquiète pas. De toute manière, je vais avoir une réponse aussi là-dessus. Rigo ? Non, Gérard, j'ai un sondage. Vite fait, sur Internet. Alors, sondage sur Internet. 32% des internautes se cuisent des choux de Bruxelles en regardant le Big Bill. 23% des auditeurs voudraient savoir ce qu'ils peuvent gagner en répondant au sondage. 20% des auditeurs ne trouvent plus leur télécommande. 15% des auditeurs ne savent pas suivre les jeux TV car ils n'ont pas Arte. Et 7% des auditeurs préfèrent regarder Santa Belgica. Ok. Bah, de toute manière, sur Arte, il n'y a pas beaucoup de pubs. Il n'y a pas beaucoup de jeux sur Arte. Tu regardes souvent, Arte ? Non. Non ? Bah, comment tu peux savoir, alors ? Non, parce que je regarde plus la première, comme Françoise. Donc, bah, Françoise ? Bah, moi, tout ce que je peux te répondre, moi, je trouve un peu dommage qu'ils mettent trop de pubs, mais d'un sens, comme tu regardes la gaffe, ça permet aux candidats qui sont au téléphone en direct de chercher dans leur dictionnaire. Non, non, attends. Tony, Tony, Tony, Tony. Non, non, non, non, c'est pas truqué. Parce que moi, je vais te dire une chose, que ce soir, la question a été, qu'est-ce que c'est un palindrome ? C'est une... C'est un mot qu'on peut prononcer d'un sens à un autre. Et tu le savais, ça ? T'as un exemple ? C'est-à-dire, ouais, un exemple, ouais, parce que moi, je ne capte pas. Palindrome, par exemple, tu prends en cassette. Tu fais... Tu prends à l'envers. Ça fait... 7K. 7K, mais c'est du... C'est du verlan, ça. Wesh, wesh. Bah, ouais. Ouais, wesh, wesh. Big up. Bah, ouais. Tu connais quoi, en verlan ? Comment ? Non, j'ai rien dit. Non, tu connais quoi, en verlan, toi, Gérard ? Non, non, mais moi, en verlan, je connais rien du tout. Comment on dit, Gérard ? En verlan, comment tu dirais ? Je sais pas, moi. Bonjour à tous, en verlan. Coton-tige. Olivier ? Non, pardon. Gérard, en verlan, c'est feu beau, feu beau. Bon, on va demander à Tony, maintenant. Ouais, je trouve qu'il y a trop de pubs à la télé, c'est vrai, mais c'est surtout sur TF1. C'est clair. Ouais, parce que France 2, ils n'en ont pas trop, de pubs, en fait. De toute manière, ils n'en mettent quasiment pas du tout. Ouais, c'est vrai. France 2, tu rigoles ? Non, non, non, non, non, non. Non, attendez, attendez, attendez, attendez. Attends, Tony. Tony, Tony, Tony, Tony. Oui, ouais. Tony, laisse parler... Laisse la finir. C'est qui qui... vient de dire ? C'est Pute de Nuit. Ouais, ben, maintenant, ça va être à ton tour. Après, je vais vous répondre. Je te disais qu'il y avait autant de pubs, en fait, sur la 2, sauf que eux, ils ne coupent pas les émissions, donc il y en a encore plus entre les émissions. Ah, d'accord. OK. Gérard, je sens l'accroche, tu peux répondre. Non, non, attends, t'as déjà... Non, j'ai pas répondu. Non, non, mais attends, on va demander à Pipion. Tu peux répondre à ta question, quand même ? Mais qui c'est qui a coupé, là ? Qui c'est qui a coupé ? Non, non, c'était Pierre Fulain, mais j'ai rappelé. Bon, c'est Pipion, je peux répondre ? Attends... Eh, Olivier ! Je sens l'accroche, bonsoir. Quoi ? Non, mais c'était pour moi, je veux dire, il m'a appelé pour moi, pour demain. Non, non, mais Olivier, ça va pas aller, hein. Quand quelqu'un coupe, tu me prends d'autres personnes, hein. Ah, d'accord. Ben, je prends des appels. Ouais, bon, moi, je trouve qu'il y a beaucoup trop de pubs. Il faut pas trop se plaindre, parce qu'en Amérique, il y en a encore beaucoup plus. Donc, voilà. Bon, d'accord. Toi, je crois que t'es carrément à côté de la plaque. Ah, ouais, comme ça. Je sens la crotte. C'est pas je sens la crotte, c'est je pue la crotte qu'on m'a marqué. Donc moi je trouve ça normal qu'il y ait de la pub sur TF1 vu que c'est TF1. TF1 c'est 100% pub, c'est pas 100% tube comme fan, c'est 100% pub. Donc c'est normal. Mais sur France 2, je confirme, il y en a bien. Il y en a trop. Avant de regarder l'épisode de Friends, il y a un quart d'heure. Non, non, non, attendez, attendez. Attendez, attendez. C'est qui, c'est qui là qui veut répondre avant moi ? Elle est chaude elle. Non mais tu réponds comme il faut s'il te plaît. Oui, non mais je te réponds. C'est vrai, avant Friends, il y a un quart d'heure de pub. Non, moi je peux te confirmer. Moi je te confirme que de moins 25 jusqu'à 50, il y a de la pub. Bon, moi je peux confirmer. Et ça je reviens. Oh ça y est, derrière. Le seul pub que j'apprécie c'est quand on voit Jennifer Niston. Ouais, à la fin. Bon, vous me laissez parler ou pas ? Moi Ross, je trouve qu'il a un peu une tête de chien battue quand même. Tony ! Ouais, ouais. Tu te calmes. D'accord. Donc je vais répondre à Françoise. Oui. Donc de toute manière, tu m'as appelé. Ouais. Donc on a regardé vaguement et t'as vu comme moi, c'est qu'ils ont passé des pubs. Donc moi je trouve une chose. Et ça, je pense que personne ne me le contredira. C'est que sur TF1, c'est malheureux à dire, c'est que sur TF1... Oh, vous arrêtez derrière de remplir comme des putes ! C'était un bruit de mobilette. Ouais, mais les bruits de mobilette, ils vont se classer. Je vais les calmer. Je vais calmer les mobilettes. Hein ? Continuez à ce que vous disiez. Ça commence à bien faire. Allez, Gérard, vas-y. Continue sur TF1. Donc, tout à l'heure, la question c'était qu'est-ce qu'est un palindrome ? Ouais. Donc, ils ont passé la pub. Il y a eu 4 minutes de pub. Pendant ces 4 minutes-là, t'as rien pu comprendre. Parce que t'as eu la pub et après tu l'as eue. Et ça, c'est un truc que je trouve dégueulasse. 4 minutes ? Il y a eu 4 minutes. Gérard, s'il y a de la pub dans une émission, ça veut dire que ça marche ? Donc c'est plutôt bien, quoi. Non, mais même, moi je trouve pas... Non, non. Moi je trouve que lors des jeux... Moi je suis d'accord avec Gérard. Moi, lors des jeux, tu mets pas de pub. C'est fou. Mais non, mais attends, dans ces cas-là, t'es lancé dans un jeu... Bon, c'est bon ! Laissez Gérard parler. Lors d'un jeu, de toute manière, on peut pas se concentrer pour trouver quelque chose. Par exemple, sur la 2, il n'y a pas de pub. Il n'y a aucune pub. D'ailleurs, il y a plus de gens qui gagnent sur la 2 que sur la 1. Ouais. Parce qu'il n'y a pas de pub. Parce que, que ce soit le millionnaire ou juste le prix, de toute manière, il y a des pubs dans partout. Mais faut pas non plus se concentrer pour jouer au juste prix. Faut arrêter d'halluciner, quoi. Ouais, mais attends, au juste prix, de toute manière, t'es sélectionné, faut bien te concentrer pour trouver le cadeau, pour trouver le rideau. Gérard, sur IRC, il y a Alf qui dit qu'en fait, la pub, ça sert à réfléchir pour trouver les bonnes réponses. Non, non, non, non, non. Et Gérard, est-ce que tu regardes le jeu, là, après Friends, là, c'est Kiki, c'est avec Marie-Ange Nardino. Euh, qui est qui ? Non. Kiki, c'est avec Marie-Ange Nardino. Non, je le regarde pas. Non, non, mais même... Bon, Tony ? C'est pas lui, c'est pas lui. C'est qui ? C'est le but du jeu, hein, qui est qui, faut retrouver qui c'est, quoi. Ouais, mais même, de toute manière, moi, je trouve que c'est un peu con, parce que... Non, mais même, de toute manière, tu peux pas regarder dans un dico... Non, mais c'est clair, moi, j'ai du mal à me concentrer quand je vois le millionnaire, il met une pub, j'arrive pas à tourner la roue de mon VTT, c'est clair. Bon, alors toi, tu vas tourner, la roue de ton VTT avec Olivier au standard. Salut à toi, salut à toi, tu vas tourner la roue de ton VTT. Je dégage, je dégage. Ouais, ouais, ouais. Pour calmer le débat, il y a Oxip qui te demande comment on fait pour gagner Marie-Ange Nardi, comment on fait pour la gagner. Euh... Comment ? C'est Marie-Ange Nardi Namoc. Euh, Tony, tu te calmes. D'accord ? Parce que toi aussi, tu vas faire comme les autres. Non, mais c'est son vrai nom, mais c'est un nom d'artiste, elle l'a coupé en deux. Elle est gentille, cette Marie-Ange. On se calme. Ouais, mais elle a un petit peu grossi, hein. Je sais pas, depuis qu'elle s'est fait griffer par le tigre, là. C'était un lion. C'est bizarre, hein. On se calme. Ah, c'était un lion, excuse-moi. Alors, avez-vous déjà participé à un jeu télé ? Si oui, lequel ? On va demander ça à Je Pus La Crotte. C'est parce qu'elle avait ses règles. Je Pus La Crotte ! Non, non, tu l'as viré. Je viens de le virer, là. C'est celui que t'as viré tout à l'heure. Ah bon, euh... Celui ? Je suis en train d'appeler quelqu'un d'autre. Ok. Euh, mais, euh... Olivier ? Pas... Pas sur le même nom ? Hein ? Non, d'accord, non, non. Tu me prends sur les... Non, mais j'ai appelé quelqu'un d'autre, là. Voilà. Euh, donc, on va demander à Pipion. Non, j'ai assisté à aucune émission télé. Non, non, non, non, Pildar ! Non, non, Pildar ! Attends, Pipion, avant que je te parle... Non, non, c'est pas la peine d'essayer de donner des numéros à Olivier. Olivier, il prend le standard et c'est tout. Ouais, sur les marketing. Non, c'est moi qui l'ai pris, Gérard. C'est une vraie auditrice qui a participé au Big Bill. Voilà, elle vient de m'appeler. Elle vient de me rappeler. Elle voudrait participer au débat. Elle a 40 ans, elle est amoureuse de toi, elle est folle de toi. Non, non, non, non, mais... Mais si ! Il faut qu'on la rappelle, Gérard. Elle a participé à un jeu télé, c'est la question. Vas-y, vas-y, vas-y. Vas-y, tu l'appelles, donc. On va demander à Pipion. Gérard, pour revenir au débat, il y a Le Chiant sur IRC qui te demande si les jeux télé sont tous en direct. Euh, oui. Oui. Mais en direct d'où ? Non, non, ils sont en direct dans les studios comme là où on est. C'est bien fait en direct, c'est pas truqué. Non, non, je crois pour Gérard. Est-ce que tu crois que c'est le même public qui fait toutes les émissions toute la journée ? Le public change. Mais de toute manière, je peux le certifier. Et ça, Françoise pourra le confirmer parce que Françoise, elle va... Elle me l'a dit tout à l'heure au téléphone quand elle m'a appelé chez moi. Elle va participer dans... Oh ! On a un scoop. On se tait. Le scoop, c'est que Françoise va être dans le public le 18 janvier. De quel jeu ? Lors du Big Bill ! Ouais ! Et Françoise, fais-nous un coucou. Si la caméra, elle est sur moi, oui, bien sûr. Tu fais une bonne rôle, Max par système. Voilà, tu fais un peu de pub pour Fun Radio. Ne vous inquiétez pas pour ça. Donc, on va demander à Pipion. Attends, Gérard. Autretemps, Gérard. C'est là-bas, ça se passe là-bas. Autretemps, on accueille On Se Calme avant d'accueillir Béatrice aussi. Mais d'abord, On Se Calme. C'est un auditeur. Donc, je t'écoute. On Se Calme. Oui. Bonsoir à toi. Bonsoir. Allô ? Oui, je t'écoute. Ouais. Je viens d'arriver. Tu peux me poser la question ? Donc, avez-vous déjà participé à un jeu télé ? Si oui, lequel ? Donc, je demande à Pipion. Non, non, j'ai off. Je n'ai pas assisté à vos émissions. Donc, toi, pour toi, tu n'as jamais été sur un plateau télé ? Non, mais ça ne m'intéresse pas trop. Mais pourquoi ? Parce que je n'ai pas envie qu'on me voit à la télé. Tu es moche, toi. Non, non, attends. Tony, s'il te plaît. On Se Calme, là, parce que c'est moi. C'est moi qui pose les questions, d'accord ? Donc, je voudrais avoir plus de renseignements. Non, je n'ai pas envie de passer à la télé. Donc, toi, pour toi, si un jour, on t'appelle chez toi, tu ne voudras jamais participer à un jeu télé ? Non, non, je ne veux pas. Parce que tu ne veux pas qu'on voie avec ta tête ? Non, ce n'est pas ça. Mais je n'ai pas envie. Ça ne m'intéresse pas. Ouais, mais précise. Je ne sais pas comment dire. Précise ton nom. Non, non. Tony, s'il te plaît. Non, ce n'est pas lui. Non, mais tu m'en veux, là, ou quoi ? Ou j'en ai rien à foutre, là. Tu te calmes. Hein ? Bon, ok. Je n'ai pas du genre à crier sur un plateau. Voilà, c'est tout. Mais non, de toute manière, tu n'as pas à crier. Tu as simplement à applaudir. Et toi, tu as envie de le faire, Gérard ? Personnellement, non. Tu n'as pas envie d'aller gagner des trucs à la télé ? Non, non, non, non. Tu n'as pas envie d'aller gagner une bagnole ? Une bagnole ou un petit million, Gérard ? Tu ne dirais pas non, quand même ? Une bagnole, à la rigueur, je ne dirais pas non. Bon, on va demander à plus de deux nuits. C'est 7 ans. C'est à Paris. Je ne sais plus du tout comment ça s'appelle, mais je sais qu'il y avait Rika Zaraï. Parce que c'était à fond dans le studio. Elle est moche, elle. Non, mais attends. À 7 ans, tu peux participer à un jeu télé ? Oui, c'est vrai. C'est vrai que, là, ce soir, j'ai regardé, il y avait des enfants qui avaient 5, 6 ans à peu près. Je confirme, il y avait un bébé de 2 semaines aussi. Non, non, non. Il y avait un bébé pas né aussi dans le public, ici. Il y avait même des femmes enceintes. Non, non, non. Tony ? Moi, j'ai participé à Fort Boyard, mais j'ai failli me noyer, en fait. D'accord. Toi, quand tu répondras correctement aux questions, avant de demander à Françoise, Rigaud, oui ? Oui. Est-ce que... Non, mais parce qu'ils sont en train de se parler entre eux. Ils sont en train de tous... Ils s'en foutent. ...de se raconter leur jeu télé. Pour l'instant, ils ne t'écoutent pas vraiment, mais depuis que j'en parle, ils n'arrêtent pas. Turpentine te demande si tu as déjà joué à Top Santé. Non. Top Santé, c'est quoi ? Ça n'a jamais été un jeu. Tu peux gagner des rasages gratuits, je crois. Non. Si, je te jure. Tu peux te faire opérer du kiss gratuitement, je crois. Tony, tu te calmes, s'il te plaît. Bon, Tony, tu retournes voir Olivier au standard. C'est le jeu, c'est comme ça. Tu retournes voir Olivier au standard, s'il te plaît, merci. Olivier. Tu gagnes un an de kiss gratuit. Oui, je gère, je gère. Olivier, tu prends Tony, tu lui dis qu'il se calme, sinon il s'en va. Terminé. Françoise. Oui ? Donc, toi. Moi, ça y est, j'ai déjà répondu. Ça ne va pas, là. Tu fais du bordel, tu vois. Tu ne peux pas aller. Ouais. Tu te calmes. Bonjour. Bonsoir. Ton cul, ton cul. Donc, toi, Françoise, pour l'instant, tu n'as jamais participé, donc tu as participé pour la première poêle. Je n'ai pas participé. Tu vas faire... Je vais être seulement spectateur. Donc, tu vas y être à partir du 18 janvier. 18 janvier. Lundi 18 janvier. Ok. J'en ai rien à foutre. Moi, j'ai participé à l'école des fans, là, avec le gros porc. Le gros porc, le gros porc, tu restes poli, s'il te plaît. Avec Jacques Vartin, et j'ai gagné un circuit électrique et deux patins de... Deux paires de patins à roulettes. Ouais, c'est ça. Alors, j'en ai rien... J'en ai rien à foutre. Tu retournes voir Olivier Austandard, c'est Paris pour toi. Je ne peux plus, là. Je ne peux plus. On se calme, je peux répondre. Bien fait. Alors, on se calme maintenant pour toi. Ouais, donc, moi, j'ai participé à un jeu, ça s'appelait Les grosses têtes, avec Philippe Bouvard sur RTL. Et ouais, c'était assez sympa, quoi. J'ai pu avoir un autographe de Castelli et puis le cheveu sur la langue d'Isabelle Mergot. Non, mais attends. Un jeu de télé. Un jeu de télé. Il ne faut pas confondre. Tu avais fait un abruti. Un abruti, va te faire sauter, toi, connard. Oui. Ok ? Oui. Alors, tu dégages, on se calme. Allez, hop. Mais non, mais non. Terminé pour toi. Tu dégages tout le monde aujourd'hui, Gérard. Ça ne rigole pas, hein. Allez. On tue ton cul. Tiens, on accueille tout de suite. Tu dégages à l'antenne. Non, non, non. Non, non, tu dégages. Je l'ai déjà eu la semaine dernière. J'en vois plus. Hop. Oui, mais il va être sage. Il va être sage. Il va être sage. Il a plein de choses à dire sur le téléphone, Canal+, tout ça. Non, non, non, non, non, non, non. Mais Gérard, allez, fais pas le con. Non, non, non, non. Allez, fais pas la pute. Oui, bonsoir. Donc, aujourd'hui, les jeux de 21 avec Gérard Dessuren, le plus beauf des plus beaufs. Bon, alors, Gérard. Enfin, alors, donc, on reste avec Pipion. Gérard, sur IRC, il y a Kenji qui te demande si tu as déjà joué par téléphone à Hugo Délire. Non. Non, je ne pense pas que ça existe. Parce qu'il a eu une cassette et il a enregistré et il me dit que c'est ta voix que Karine Chéril. Alors, donc, vous allez... Gérard, j'aimerais savoir si c'est vrai que Sandy, elle a couru dans Interville et pourquoi est-ce que... Alors, Tony, tu dégages. Alors, Tony, tu dégages. Tony, c'est terminé. Terminé pour Tony. Terminé. C'est terminé pour lui. Ah, non, pas Tony. Non, non, terminé, terminé, terminé, terminé. Alors, Tony, j'en ai rien à... J'en ai rien à foutre et on se calme. Attends, attends, attends. J'ai pas suivi. J'en ai rien à foutre aussi. Il est parti. Il était méchant. Alors, j'en ai rien à foutre. On se calme. Et Tony, ils s'en vont. Et tu me récupères d'autres personnes sur les 24 lignes qui sonnent. Connard. Connard va te faire enculer, toi, bâtard. Gérard, pas de... Alors, le Big Bill était vraiment un extraterrestre et on se retrouve tout de suite après. Et vous pouvez toujours appeler Olivier au standard. Gérard, vous pouvez toujours appeler Olivier au standard au 0875 000 et 0803 08 5000. Et toujours sur l'IRC, il y a toujours Rigaud qui vous attend. On est combien ? On a dépassé les 3000. On est à 3280,8. Donc, ça booste, ça booste. Voilà. Donc... Big Big Up. Heureusement que t'es là pour faire du boulot. T'inquiète. T'inquiète. Donc, on va s'écouter Bouffe du couscous avec des petits beurres. S'il te plaît. Merde. Ah ben, c'est bien, ça. C'est bien, hein. Et on se retrouve tout de suite après. Et voilà, vous venez de vous écouter Bouffe du couscous avec des petits beurres. S'il te plaît. Merde. Donc, c'est ce que Manu m'a donné comme disque. C'est bien, hein. À mon avis, c'est un truc techno. C'est de la techno. C'est techno. C'est techno grave. Grave, grave. Bon, alors, donc, la question. François, c'était toujours. Ah oui, je suis là. Ah oui, je t'avais oublié. Non, non, mais tu m'as cité. Tu m'as cité, hein. Ah, OK. OK, OK. Je croyais que je t'avais... J'avais pas... Non, non, tu m'as cité. OK. Donc, alors, la question, c'est que le Big Bill est-il vraiment un extraterrestre ? Eh ben, on va demander à Pipion. Pipion. Pipion. Pipion. Ouais, donc, non, Big Bill n'est pas un extraterrestre, évidemment. Et, c'est juste un... C'est virtuel, quoi. C'est en 3D. C'est un truc... Une image de synthèse. Ouais, une image de synthèse, ouais. Qui c'est qui répond, là ? C'est Chang. Heureusement qu'il m'a aidé parce que je cherchais le mot, en fait. C'est le terme technique. Ouais. Alors, on va demander à... à Pute de Nuit. Ouais. Ben, Big Bill, c'est un vrai extraterrestre. D'ailleurs, t'as sa famille aussi. Donc, c'est la preuve. Ouais, non, mais dans la famille, bon, c'est sûr, ça, c'est pour faire voir aux candidats ce qu'ils veulent comme cadeau. T'as le frère, t'as... T'as la soeur. T'as la soeur et t'as la mère. Ouais, mais c'est vrai. C'est sa vraie famille. Non, mais ça, on le sait pas. Ben, si, ils le disent. Non, non, non, non, non, non. Ils ont la même tête. Non, non, non, non, non, mais... Non, non, non. Moi, je peux te confirmer qu'à mon avis, je pense pas. Donc, qui c'est qui a un... Il y a un double son, là. Il y a... Il y a un double son. On va régler ça. Donc, Françoise ? Oui ? Moi, je te dis non. Pour la bonne raison, c'est qu'on l'a déjà vu une fois, en vrai, sur Drôle de Jeu. Ouais, ouais. Ouais, je pense que... Ouais, j'ai... Non ! Manu, s'il te plaît ! Je te jure que je touche à rien ! Mais si ! Mais non ! Manu ! Tu faisais du bon travail ! Mais attends ! Micro ! Mais attends, tu joues à quoi, là ? Ah non, regarde, tu vas voir. Françoise a bien de le confirmer. Il y a... Elle vient de le confirmer. Bon, reprends, Gérard. Reprends le débat. Donc, Françoise. Oui ? Ah ouais, ouais, ouais. Toi, tu m'as dit qu'on l'avait vu à Drôle de Jeu. Bon, toi, tu dégages. Avant que je t'éclate. Avec ta caméra, là. Toi, tu as dégagé ! Avec ta caméra. C'est dangereux, Gérard. Euh, Shang. Oui, donc... C'est une image de synthèse. C'est obligé. Et... Je ne l'ai jamais vue en 20 ans. Non, mais tu peux préciser si ça ne te dérange pas ? Shang. Tu peux préciser ? Oui, c'est une image de synthèse. C'est-à-dire que c'est fait par ordinateur. On te demande si c'est... La question est... Le Big Bill est-il vraiment un extraterrestre ? Est-ce que tu peux préciser ta pensée ? C'est pas un extraterrestre. C'est une image de synthèse. C'est fait par ordinateur. Donc, un extraterrestre, c'est... Oh là là ! Mais attends, mais toi, t'as... Mais c'est pas vrai ! C'est toi qui comprends pas. Là, tu comprends rien du tout, Shang. Mais si il a tout compris, c'est toi qui comprends pas. Non, mais attends ! Moi, je demande si le Big Bill est vraiment un extraterrestre. Mais il l'a jamais vu ! Mais attends, il me dit que c'est une image de synthèse. Non, c'est pas une... Non, non, non, non, non, non ! Il travaille sur Nintendo et sur Sony. Je peux te dire que c'est une image de synthèse. Je suis programmeur. Ça vient d'où, ça ? Le Big Bill est une image de synthèse, c'est tout. Mais qu'est-ce que tu fais ? Attendez, il y a Gérard qui se lève. J'ai besoin de toi, Gérard. Non, non, mais ça, tu... Mais j'ai quelque chose d'autre, là ! Non, non, mais non, non ! J'en ai besoin ! Ouais, non, mais... C'est pas tout ! Ouais, non, mais t'amuses pas à faire ça. Bon, Gérard, reprends le débat, là, parce que là, tu parles. Bon, alors, qui c'est qu'il nous reste à répondre ? Il y a moi. Il y a Fleur d'Anus aussi, t'as pas accueilli. Fleur d'Anus. Qu'on accueille. Bonsoir. Salut. Salut, Fleur d'Anus. Ça sent bon, hein ? Ça sent bon, le sperme, là. Quelle bonne odeur de merde. Vous fermez vos gueules ou quoi, là ? J'aime. Eh, putain, mais... Allô ? Gérard, je peux répondre ? Pour calmer le débat. Dégage ! Avec ta caméra. Dégage, Gérard ! Arrête, arrête ! Gérard, assieds-toi. Gérard, donc, il y a Paradox sur IRC qui te demande si tu serais au courant que Bill serait le cousin de E.T. Non. Non, mais ça, tu vois, j'ai vu des truculations, des sondages, j'en parle même pas parce que c'est des conneries. C'est des conneries, ouais. Tony, c'est bien. Gérard, c'est Fleur d'Anus, je peux répondre ? Ouais, bah, réponds. Donc, moi, je pense que le Big Bill n'est pas un extraterrestre. C'est comme disait Chang, c'est un personnage inventé qui a été dessiné sur un ordinateur et qui a été envoyé sur l'écran. Non, mais... Non, mais je pense... Gérard, tu veux dire que c'est un mec qui est dans un gros truc bleu ? Voilà, un mec qui est dans une boîte. Tu veux dire que c'est un costume qu'il porte ? Voilà, c'est ça, en fait. Ah, d'accord. Voilà, avec des ampoules pour... Attends, Casimir, qui c'est qui parle de Casimir, là ? C'est moi, c'est Françoise à l'appareil. Ah, c'est Françoise qui parle de Casimir. C'est le cousin de Casimir. Toi, je te dis que tu... Dégage tes caméras, Fildar ! Fildar, tu as dégagé mes bits ! Allez, hop, pile d'art ! Alors, donc... Moi, est-ce que je peux parler, là ? Mais c'est qui ? Tenez d'art. Ouais, le Big Bill, c'est pas un extraterrestre. C'est le nom de l'émission, c'est Bill qui est l'extraterrestre. Comment ? C'est Bill qui est l'extraterrestre. Le Big Bill, c'est le nom de l'émission. Ah, voilà quelqu'un qui répond à la question. Hé, attends, le Big Bill, c'est quoi pour toi ? Le Big Bill, c'est le nom de l'émission. Big Bill. Big Bill. Big Bill. Bon, enfin, bref. Apparemment, je pense que... Il a pas compris la question, il répond à côté. Non, mais... Non, c'est le seul qui répond à côté. Ah, non, Bill, c'est un extraterrestre, d'accord. Non, mais t'es le seul qui répond à côté. Ah, vas-y, elle a pas... Tony, d'accord ? Il est pas là, Tony. Non, presque pas. À partir de quel âge peut-on jouer ? Attends, moi, j'ai un petit sondage, moi, avant la question. On a un petit sondage, quand même. À la question pour ou contre les jeux télé, il y a 52% des gens qui sont pour. Non, non, non, mais attends. 36% des gens qui sont contre. Péter la nuit. Hop. Alors, moi, si ça commence comme ça, c'est simple. Le premier débat. Va ça. Oh, non. Il jouillait pas. Va te laver les fesses, tu pues. Arrête, tu vas faire bander. Bah, Gérard, t'envoies le bois, là, un peu. Ça y est, vous avez fini vos conneries ? Oh, les blancs. Ouais, bah, les blancs, celui qui s'amuse à mettre des conneries. Maintenant, ça commence à me faire chier. Je sens que tout à l'heure, on va garder que Françoise et on va reprendre d'autres personnes au standard. Ça va aller vite fait. Pipillon et Pute de Nuit aussi, elles ont été sages. Ah, ouais. Moi aussi. À partir de quel âge peut-on participer à un jeu télé ? On va demander à Fleur Danus. Moi, je pense qu'on peut participer dès l'âge qu'on peut participer. C'est-à-dire à partir de 10 ans. Voilà. Pute de Nuit. Bah, moi, je pense qu'il faut être majeur. Non, non. Parce que quand même, tu gagnes des jeux. Gérard, Gérard, arrête. Qu'est-ce que tu fais ? Gérard, assieds-toi. Arrête. Il veut taper Fildar. Laisse Fildar. Avec la cam. Non. Pute de Nuit. Gérard, t'occupes pas de la caméra. Continue. Moi, je te disais, je pense qu'il faut avoir 18 ans parce que j'imagine que tu joues au beat-beat. Bien le standard, Olive. Tu sais pas d'où ça vient. Je comprends. Non, mais là... Là, je pense que... Olivier, ça commence à bien faire. Je sens que dans deux minutes, j'arrête. Ouais, bah, si t'es pas content, tu dégages. Et Manu, tu me coupes le double son. Ouais. C'est Big Bill qui nous parlait. C'est un auditeur qui fait ça. Je sais pas. Max, il a dit que ça venait peut-être du standard. Bah oui, ça vient du standard. C'est ça. J'ai l'impression que vous avez l'intention de me faire chier sur les débats jusqu'à la fin de l'année. Pas du tout. Parce que pas. Non, c'est toi qui te fais chier tout seul. Attends. Comment ? Bon, allez, allez, allez. Hop. Alors... Plus de deux nuits. Oui. Ça fait cinq minutes que je te réponds, mais tu m'écoutes pas, Gérard. Je te disais qu'à mon avis, il faut être majeur. Parce que si tu participes au Big Bill et t'as 10 ans et que tu gagnes une voiture, t'as pas l'air con. Au moins, c'est ton permis. Non, mais attends. T'as pas ton permis, tu peux pas participer. Ça dépend, il faut gagner des voitures à pédales aussi. Tony, tu fermes ta gueule ! C'est pas Tony. Barnette ! Alors, celui qui a... Putain, Olivier ! Olivier, tu me calmes ça ! Tu calmes ! Oui, je calme, je calme. Magne ! Oh ! On se calme ! C'est bon, c'est bon. On se calme. Alors, Pipion ? Je suis d'accord avec Tony. Il faut être quand même mineur ou majeur. Ah, le blanc. Non, non, mais attendez, parce que là, je suis en train de... Non, parce que Gérard, Gérard, tu suis pas ton débat, c'est tout, et c'est pour ça qu'il y a des blancs, quoi. Fais attention à ce que les gens disent plutôt que ce qui se passe en studio. Alors, euh... Il me manque de la maturité, en fait. Et on a 2 francs en égo, s'il te plaît. T'as 2 francs ? Prenez-la. T'as 2 francs en égo, s'il te plaît. Non, mais vous jouez à quoi, là ? Ça dit le gras, ça. Oh ! Mais j'ai dit quoi ? Gérard ! Gérard ! Gérard, tu t'appelles... Dégage ! Dégage du studio, toi ! Dégage ! Dégage ! Dégage ! Dégage ! Dégage ! Reprenez-le. Dégage ! Non, mais sors de là, si tu veux qu'il dégage. Dégage ! Va t'asseoir, va t'asseoir. Je vous explique, il est en train... Gérard est en train de courser, fil d'art, dans le studio. Dégage ! Oui, oui, il dégage, il dégage, il s'en va. Vas-y, je te couvre. Il s'en va, il s'en va. Allez ! Voilà. Gérard, pour calmer le débat, il y a Izen sur l'Internet qui te demande si, toi, dans la radio, là, tu te sens pas un peu comme Big Bill dans sa télé. Non. Pas du tout. Et on n'a qu'avec Pot de Couille. Non, euh... Bah si, on n'a qu'avec Pot de Couille, à la place de Canada qui est raccroché. Bonjour, Gérard. Pot de Couille. Bonjour, Gérard. J'ai pas entendu la question, hein. Salut, Pot de Couille. À partir de quel âge peut-on jouer aux jeux de télé ? À partir de quel âge ? Bah, pour le Big Bill, le truc pas fut-fut, là, je sais pas, 8 ans ? Bill. Big Bill, ouais. Non, mais... Non, mais je t'écoute ! Bah oui, j'ai dit 8 ans. 8 ans, d'accord. Shang ? Bah, je crois qu'il faut avoir la majorité pour participer à un jeu de télé. Majorité absolue ? Ouais. Non, mais tu... Vous pouvez préciser ou pas, là ? Bah oui, il faut avoir la majorité, c'est-à-dire 18 ans... 18 ans, c'est-à-dire un peu plus de 7, 17 ans. Bon, d'accord. Et toi, quand t'auras fini de te foutre de ma gueule, tu me préviendras. Ok. Françoise ? Ouais, bah moi, je réponds à partir de la majorité. Attends, Françoise. 5 minutes. Olivier ? Qu'est-ce qu'il y a ? Le Shang, sinon, parce que ça va pas aller long. Ça va pas durer. Maintenant, on répond au début. Non, non, mais ça va pas durer longtemps, hein. Je sens que... Non, mais je le calme, je le calme. Réponds à Françoise. Il y aura pas... Je vais pas faire 11 questions. Mais toi, à la question, tu penses quoi, d'ailleurs ? Enfin, quel âge a-t-on vu ? Donc, toi, Françoise ? À partir de la majorité. Ouais, mais je pense, là, ce soir, t'as regardé comme moi ? Bah oui. Bon, donc, t'as vu qu'il y avait des personnes avec leurs enfants, donc... Oui, mais ils ont pas le droit de participer, hein. Bah oui, mais ça, je suis d'accord avec toi. Mais je pense que t'as plusieurs personnes qui ont... Il y a des enfants qui se mettent de la peinture sous les pieds. Ils sauraient pas répondre aux questions, aussi. Comment ? Quand on est trop petit, on peut pas répondre aux questions. Ouais, mais attends, faut quand même dire, c'est que y a le mari, y a les enfants qui sont là pour essayer de conseiller. Gérard, depuis tout à l'heure, tu demandes est-ce qu'il faut avoir la majorité à partir de quel âge, mais est-ce qu'il y a... Un âge limite ? Est-ce qu'on peut être trop vieux pour participer à un jeu ? Non ! Voilà, exactement, parce qu'il y a Yanki sur l'IRC, il te demande jusqu'à quel âge on peut jouer au Monopoly. Par exemple. Non, mais ça, le Monopoly, t'as pas d'âge, c'est comme le Scrabble, t'as pas d'âge pour jouer là-dessus. Là, c'est autorisé à toute personne. C'est pas possible qu'il y ait une dame de 94 ans qui joue au Big Bill ? Bah si, si, j'espère, parce que... T'as déjà vu, toi, qui regardes tous les soirs ? Non, mais tu peux demander à Françoise, on a vu des personnes qui étaient assez vieilles, donc, qui ont joué. Bon, c'est sûr... Elles ont pas gagné, alors ? Bah si, tu peux gagner. Ouais, mais c'est pas toujours évident, parce que c'est pas facile. T'as déjà vu à Fort Boyard une mémé faire un soir à l'élastique, toi ? Non, non, attends, là, Fort Boyard... Mais faut pas comparer Fort Boyard avec Big Bill. Non, parce que là... Yann Or, c'est pareil, les trucs comme ça. Non, mais... Françoise, sur IRC, on me dit que c'est aussi dangereux. Bah oui, c'est dangereux. Imagine, ils font une crise cartel, ils gagnent une bagnole. Non, non, mais attendez, attendez, attendez, attendez, attendez, là, on va éclaircir un peu les jeux. Tiens, mets de la lumière pour éclaircir au lit, s'il te plaît. On va éclaircir un peu le système des jeux. Là, faut dire une chose, qu'aujourd'hui, dans la famille Yann Or, il y avait une qui s'est... Dans les... Les imitatrices. Je pense que, Françoise, tu l'as regardée comme moi. Dans quoi ? Dans la famille Yann Or. Non, je regarde pas la famille Yann Or. Bon, donc, y'en avait une qui se faisait passer pour Madonna. Ouais, bah ça, j'ai vu le passage. Y'a Colombo et tout ça, mais disons que je ne regarde pas, c'est... Je ne regarde plus la famille Yann Or pour la bonne raison, c'est que depuis qu'il y a Pascal, ça n'est plus pareil. Ouais, ouais, mais... Non, non, non, non, non, non, non. C'est plus qu'à brûler. Attendez, attendez ! Bouge ton cul, toi, va te faire enculer, toi, connard ! C'est pas Patrick Roy ? Non, bah non, il faut pas parler de Patrick Roy. Attendez, attendez ! On accueille Benjamin. Allô ? Benjamin, bonsoir. Bonsoir, bonsoir. Donc, une question IRC avant que Benjamin réponde. Oui, on me demandait si on peut jouer à la famille Yann Or tout seul. Euh, non, pour être 5... Ah, mais si on n'a pas de famille, et qu'on peut être la famille... Non, mais tu peux très bien trouver des gens que tu connais, et tu les inscris avec toi, c'est tout. Mais s'ils ne sont pas de ta famille... Mais même... C'est plus une famille en or. Comment tu fais ? C'est des copains en plomb. Non, non, non, même si c'est pas de ta famille, tu peux... Mais non, c'est pas possible. C'est pas possible s'ils ne sont pas de ta famille, si c'est une famille en or. J'ai coupé les auditeurs pour pas qu'ils te... Gérard, mais comment on fait ? Et quand on n'a pas d'amis... Et quand on n'a pas d'amis... Attendez, attendez, attendez ! Pas les trois d'un seul coup, donc Rigaud. Rigaud en priorité. Quand t'as pas de famille et pas d'amis, et que t'es tout seul, comment tu fais pour gérer une famille en or ? C'est discriminatoire. De toute manière, tu peux prendre quelqu'un que tu connais bien. C'est plus une famille. Donc le titre du jeu, il a plus rien à voir. Non, je m'inscris en faux, je suis désolé, c'est pas possible. C'est discriminatoire. Toi, tu fais la réa, tu te tais. Ouais, mais c'est pas possible, ça ! Non, c'est pas possible ! C'est pas possible ! On me dit aussi que si on est tout seul, on peut peut-être amener des animaux avec soi, non ? Pour faire une famille. Là, dans une famille en or, il y avait le faux Colombo qui est venu avec son chien. C'était quoi ? Un chien, c'est... Un boule-boule ? Non, c'était pas un pic-boule. Donc, Benjamin ! Allô ? Ouais, excuse-moi, Gérard, je suis en train de regarder le Big Bill, en même temps. Non, mais Benjamin ! Benjamin ! Ouais ? Tu dégages ! Bah attends ! Oh non, non, Gérard ! Je sais pas où il est ! Je sais pas où il est ! Non, non, non, Benjamin, c'est terminé. Ouais, non, donc je disais, tu... Donc, par rapport à la question, moi, j'aime bien les jeux de télé, quand même. Non, mais je te demande, à partir de quel âge peut-on jouer ? Bah, je pense que ça dépend des jeux, hein. Parce qu'il y a des jeux qui sont faits pour les enfants, et des jeux qui sont faits pour les adultes, il y en a qui sont faits pour les vieux, il y en a qui sont faits pour les ados... Il y en a qui sont faits pour les adultes... Comment ? Il y en a qui ont dit un truc pas cool, là. Non, mais... J'ai l'impression que tout à l'heure, je vais tous vous zapper, et on va rencontrer d'autres personnes. C'est clair, comme ça, ça vous matra, bande de connards. Oui. Ça, je pense que ça va aller vite fait, tout à l'heure. Ouais. Je le sens. T'as raison, Gérard. Je le sens. Donc, Rigo, oui, une question hier, c'est avant... Maintenant, ça parle de questions pour un champion. Gérard, t'es un mec cool. Merci, Benjamin. On me dit, est-ce que c'est pas discriminatoire, aussi, quoi ? Parce que les questions qu'il pose, il y a plein de gens. Toi, si tu regardes questions pour un champion, tu peux répondre à combien de questions ? Vraiment. Moi, deux. Manu, pour l'instant, tu... Gérard, aucune visite, juste un bonjour. Sur toutes les questions de Julien Boubert. Non, là, sur questions sur un champion, il faut vraiment avoir les trucs en tête. Donc, c'est discriminatoire. Attendez, s'il vous plaît, derrière, on se calme, je réponds à Rigo. T'es un mec cool, Gérard. Benjamin, tu te tais, s'il te plaît. Il dit que t'es cool. Il dit un truc gentil, et toi, tu te tais. Non, non, mais pour l'instant, je réponds. Je voudrais répondre à Rigo. Mais laissez-le répondre, merde. Gérard, lui, c'est plus histoire naturelle, ces jeux, quoi. Olivier, pour l'instant, tu es à ton micro. Merci. Donc, alors, la question. Ta question, donc, c'était... Est-ce que t'arrives à répondre à combien de questions de Julien Boubert dans Questions pour un champion ? Sur Julien Le Perse, pour questions sur un champion, fais-moi confiance que c'est pas évident. Déjà, pour que tu puisses savoir toutes les questions, il faudrait que tu regardes sur l'audito, mais t'as pas le temps. Vraiment, t'as... C'est ça, le jeu. Surtout sur le plateau, quoi. T'as vu quelqu'un avec un dico ? Non, mais attends, mais même... Vas-y, t'as moins de 20 secondes pour répondre. La question pour un poupon, parce que j'ai jamais vu ce truc. Quand tu connais le champion... T'as une question, Gérard ? Non, mais ce que je voulais dire, c'est que quand tu connais le champion, tu peux répondre aux questions sur le champion. Ouais, non, mais c'est pas évident. Parce que, par exemple, je vais poser une question à Manu. Quelle est la capitale de... Quelle est la plus grande ville... Quelle est la... La capitale de New York ? Bangkok. Non. Ah, je sais pas. De quoi ? La capitale de New York. La capitale de New York. Attends, merde, je sais pas. Le Bronx ? Non. La capitale de New York. C'est un grand pays, en plus. C'est simple. Washington. Eh ouais, la capitale de New York. Non, Washington, non. C'est Washington. Non, si, c'est ça. Non, c'est ça, c'est Washington, la capitale de New York. Donc, par exemple, quelle est... T'as une autre question ? Quelle est la plus grande pute de Paris ? Ça, je sais, mais je vais pas le dire. Ça va avec, c'est ta femme. Ça va avec, c'est ta femme, donc je... Moi, je sais pas. T'es vraiment accueillé, toi. C'est la Tour Eiffel, parce qu'elle écarte les jambes. Allez, allez, allez. On récupère Flore Danus. Flore Danus. Oui. Attends, qui c'est qui vient de parler de Sandy, là ? T'as un mec cool, Gérard. Non, mais attends, Benjamin, pour l'instant, je veux savoir qui c'est qui s'amuse à parler de Sandy. Moi, c'est une conne. Laisse tomber. Attends, c'est une conne. Attends, merde, toi, d'accord ? Mais non, mais pas Sandy. Pas Sandy, c'est le qui a dit ça. Grillez. Les boules d'encre sont de nos jamais. Et il faut les aimer, aussi. Ouais, calmez-vous, les mecs. Ouais, calmez-vous, les mecs. Flore Danus. Oui, Gérard. T'es cool, Gérard. Toujours là. Pipion. Ouais. Pute de nuit. Ouais, je suis là. Françoise. Oui, je suis là. Pot de couille. Ouais, je suis là. Et Benjamin. Ouais, je suis là, et je veux dire que t'es un mec cool. Alors, être animateur... Oh, vous vous calmez, s'il vous plaît. Bonjour. Bonjour. Bonjour. Non, mais quand vous aurez fini, je pourrais peut-être poser ma septième question. Vas-y, vas-y, vas-y. Et très... Ah, vas-y, vas-y. Eh, je t'en tue, je t'en tue, tu vas pas en tuer, toi, sale pédé ! Oh ! OK. C'est bon, c'est bon, c'est bon. T'es un mec cool. Alors, être animateur d'un jeu... Bon. Eh, Olivier, tu fais quoi, là ? Ben, de toute manière, c'est tous les jeudis, c'est comme ça. Eh, Gérard ! Gérard ! Il te parle, Benjamin. Ouais, Benjamin, je t'écoute. J'aimerais bien qu'on fasse un peu le débat, parce que moi, tu sais... Il a raison. J'ai des trucs à faire, j'ai pas que ça à foutre. Ouais, mais pour l'instant, je voudrais bien savoir qui c'est qui s'amuse à dire des conneries. Ben, je vais essayer de le trouver, t'inquiète pas. Alors, donc, être animateur d'un jeu, vous tente-t-il ? Ouais, Benjamin, je veux répondre. Ouais. Ouais, parce qu'en fait, voilà, je vais te le dire tout net, en fait, j'écoute tes débats depuis longtemps, je m'appelle, je vais le dire, je m'en fous, je m'appelle Benjamin Rizzoli. Oh, non ! Et en fait, mon père, c'est Philippe Rizzoli, quoi. C'est pas vrai. C'est l'une des deux. Non, non, non, sans déconner, c'est sérieux, et donc, moi, je suis bien passé pour en parler, parce que, étant donné que mon père, il fait le millionnaire, ainsi que la roue de la fortune, euh, non, merde, j'ai un trou. Le juste prix, excusez-moi. Donc, moi, je peux vous dire que c'est un métier qui en vaut, quoi. Ah, ouais. Parce que, moi, je sais qu'on a pas mal de thunes, qu'on en profite grave, et, euh, moi, je conseille à tout le monde de devenir un animateur télé, hein. Bon, ok. On va demander un pot de couille. Gérard ? C'est qui ? C'est Benjamin, encore. Non, mais attends, Benjamin, attends. Non, je veux seulement dire que t'étais cool. Bon, ok, ça y est, j'ai compris. Pot de couille. Ouais. Ouais. Bon, tu réponds ? Bah, je sais pas. Non, bon, alors, vas-y, hop. Bah, non, vas-y, attends, vas-y, répète. Hé, non, non, non, retends, moi. Bah, répète. Bah, non, non, je répète plus. Moi, t'as dit que t'étais cool. Moi, t'as dit que t'étais cool. Attends, dégage. Allez, allez, dégage, dégage, dégage. Allez, hop. Je te dégage. Dégage-le, dégage-le, dégage-le, dégage-le. Hop, hop, hop. Allez, dégage-le. Euh, Françoise. Toi aussi, je vais te dégager. Je suis là, je suis là, je suis là. Françoise. Disons que, euh, disons que, non, moi, ça m'intéresserait pas de... de remplacer quelqu'un, euh... C'est quoi, cette colonne-là ? Non, ça, c'est Olivier. Olivier, je te dis de me dégager, l'autre. Et c'est ça qui nous fait des jingles, putain. Putain. Il fait des jingles et il est même pas capable de faire un standard. Pour l'instant, vous êtes en... C'est la septième question et c'est de la merde. Il est déjà 1h33... Euh... 1h34. On est à la septième. Et pour l'instant, c'est de la merde que vous me faites. Pour revenir au débat, super, les auditeurs. Il y a Formos qui te demande si tu animerais... si tu aimerais animer un jeu télé et si oui, lequel ? Alors, tu peux répéter la question. Alors, Formos sur l'IRC te demande si tu... si tu voulais animer un jeu télévisé, est-ce que ça t'intéresserait et si oui, lequel ? Non, ça m'intéresserait... Ça m'intéresserait pas de... Ça m'intéresse pas. Manu, s'il te plaît, quand je te demande de me couper tout le monde, tu le fais et tu te tais, maintenant. D'accord. Donc, pour très... Bon, Manu, ça commence à bien faire ! J'ai rien fait ? Oh là là là là ! Mais je touche à rien ! C'est mon micro ! Viens, mais t'es chiant, hein ! On n'a qu'à effacer. Ouais, non, mais attends, attends, attends, pour l'instant... Non, j'ai bien l'antenne, ça. Donc, pour te répondre, je prendrais... Je ne ferais même pas de débat télé ni rien du tout. Non, un jeu, pas un débat, un jeu. Non, mais même un jeu télé, je ne le ferais pas. Allez, pourquoi ? Tu serais bon, en plus. Non, non, je ne le ferais pas. De remplacer la gaffe. Non, non, non. Oh, Gérard... On peut t'inscrire à des jeux, ici. Non, non, non, non. De toute manière, rien qu'à voir les emmerdeurs, c'est bon. Sinon, il y a Philou... Attends deux secondes, il y a Philou qui te demande si tu comprends le principe des chiffres et des lettres. Oui. Le principe. Le principe, c'est de trouver le compte est bon et de chercher des mots. Il ne faudrait pas quand même qu'il me prenne pour un con, lui, sur lire, c'est... Donc, passé. T'as compris, Philou ? Oui, je réponds à la question ? Oui. Moi, je ne voudrais pas être animateur télé, non. Je ne sais pas, je ferais plutôt de la radio comme toi, à rien foutre, à faire des émissions à la con. C'est qui qui s'amuse avec son téléphone ? Ça va gerber ? Qui c'est qui s'amuse ? Ça va casser, sinon. Ton cul, ton cul ! Bon, là, c'est Benjamin. Arrêtez avec le téléphone, c'est chiant. Bon, Benjamin, pour l'instant, ce n'est pas toi que je m'adresse. On va demander à Françoise. Gérard, c'est trop cool. Je t'ai répondu, Gérard. Oui, aussi, c'est bon, c'est bon. Plus de deux nuits. Moi, je ne voudrais pas être animatrice parce que je ne pourrais pas gagner les cadeaux. Non, mais de toute manière, tu n'as pas besoin d'être animatrice. Non, mais quand tu es animatrice, tu ne peux pas gagner les cadeaux. Rigo ! Moi, j'aimerais bien gagner des cadeaux. Rigo, c'est Benjamin. Est-ce que Fleur d'Anus, elle est sur l'Internet, là ? Non. Parce que je suis en train de faire de l'Internet en même temps. Et tu ne la trouves pas ? Ben non. Va voir sur Dièse Fleur d'Anus. Ou Dièse en couleur de GG. Merci. Qu'est-ce que tu viens de dire ? C'est rien, c'est rien. C'est les noms des serveurs. Et le débat ? Benjamin ! Benjamin ! Excuse-moi, GG. Benjamin ! Ouais ? Si tu paies de l'Internet en faisant les débats, ce n'est pas la peine. Ok, super. Gérard, c'est Fleur d'Anus. Je peux répondre ? Oui, je t'écoute. Justement, ils te cherchent, Benjamin. Ouais. Non, mais ce n'est pas le même. Oui, ce n'est pas le même. Je ne suis pas au mot. C'est mon frère jumeau. Donc, oui, moi, je n'ai pas l'intention de devenir animateur de jeux télévisés parce que c'est complètement débile. D'accord. Pipion ? Je ne veux pas être animatrice. D'accord. C'est bien, toi, tu réponds. Comme pute de nuit. Pute de nuit, c'est pareil. Oui, d'accord. Tu sais, tu as des questions des villes. Alors, nous aussi, on répond des villes. De toute manière, si ça ne vous plaît pas, les débats dans ces cas-là, pourquoi qu'on vous sélectionne ? Si, c'est génial. Tu es trop cool. Non, mais là, pour l'instant, on n'est même pas arrivé à... On s'endort, surtout, quoi. Parce que tu n'es plus dans ton débat. Donc, reprends-le. Non, mais toi, pour l'instant, quand tu me prends du boulot correctement... Je ne fais pas le boulot correctement, là. Non, mais pour l'instant... Reprends, reprends. Comment ? Qui c'est qui n'est pas contente, là ? C'est qui qui n'est pas contente, là ? C'est laquelle qui vient de dire Jabrej ? C'est laquelle, pauvre meuf, qui a dit ça, là ? Benjamin, tu dégages. Entre pute de nuit et pipion, là, c'est laquelle des deux ? C'est Benjamin. C'est Benjamin. C'est Benjamin, il a mis... C'est Benjamin, il faut le gerber. C'est Benjamin. Mais, Gérard, ils veulent me gerber, ça va ? Alors, que doit-on supprimer comme jeu télé ? On va demander ça à pute de nuit ? Ben, je ne te dirai pas le fond de ma pensée, mais... Je voudrais changer un peu le concept de ces jeux. Non, c'est faux. Ben, Benjamin, s'il te plaît, tu te calmes. Ben, attends, si jamais ils arrêtent tous les jeux, moi, mon père, il n'a plus de taf, j'ai plus de thune. Benjamin, tu te tais ! Il va sur une autre chaîne, ton père. C'est connu. Bon, pute de nuit, tu réponds correctement à la question, parce que ça commence à être lourd. C'est vrai, tu dis que des conneries. Gérard ? Les jeux de TF1, pour moi, c'est bidon, c'est rien, quoi. T'apprends rien. Ouais, elle a raison, cette fille. À propos des jeux de TF1, il y a... Alors, ce qui s'était, c'est Chocobo sur l'IRC qui a dit à tourner Manège. Non, mais justement... Non, c'était dans 30 millions d'amis. Qui c'est qui vient de dire ça ? C'est Benjamin. Alors, Benjamin, tu dégages. Benjamin, tu dégages ! Et pourtant, t'es un mec. Tant pis pour toi ! Mais non, t'es trop cool, Gérard, tu peux pas me virer, t'es trop cool comme mec. Je sais pas où il est. Je te suis depuis 10 ans. Ah, c'est bon, je crois que j'ai trouvé. Je suis dans la rue depuis 10 ans, Gérard. Il est super cool, Benjamin. Et c'est lui qui t'amène des lettres. Ça y est, vous avez fini, quoi, connerie ! Bon, Benjamin, je suis désolé. Je dégage. Alors, Françoise. Oui. Moi, en supprimer un, je supprime la famille en or. Pourquoi ? Parce que j'aime pas Pascal du tout. Non, mais c'est sûr... Non, non, non, non, attends... C'est plus Cabroule, là, je sais plus trop quoi. Cabroule, non. C'est qui, maintenant ? C'est Pascal Bonner. Parce qu'il a chanté sur la 3. Un tout naze, lui. Attends, attends, attends, Françoise. Il y a une question IRC. Non. Il te demande... Enfin, ça change de jeu encore, mais c'est Oxide qui te demande comment on reconnaît les billets gagnants du millionnaire. Comment on fait ? Alors, pour le millionnaire, tu grattes et si t'as 3 télés, tu passes à la télé. C'est 4. C'est 4. Non, 3. Non, c'est les morpions. Non, c'est 3 télés. C'est 3 télés pour passer directement à la télé. Eh, eh, eh ! Directement ? Eh ! Eh, sans déconner ! Sans déconner ! D'accord, Françoise ? D'accord, Gérard. Sans déconner ! Sans déconner ! Donc, c'est vrai qu'avant, on avait... Cabroule. Vincent Cabroule. Et Patrick Roy, avant. Non, non, non, non, non, non. Non, mais Patrick Roy... Non, non, non, attendez, attendez, attendez. Celui qui a créé le premier jeu télé, ça a été... Patrick Roy, ça, je suis d'accord avec Françoise. C'est lui qui a... qui a rentré là-dedans lors du... juste prix. Après, il y a eu Vincent Cabroule, qui a capé... Il a fait quoi, lui ? Capé... Merde, comment qu'on appelle... Les marches des héros. La famille en or. Après, ça a été repris par... Maintenant, c'est repris par Pascal Bruner, donc maintenant, il faut dire que c'est vrai que... Il y a pas eu l'autre pédale de Montiel, aussi, là ? Bernard Montiel, oui. Gérard, en parlant de Rizzoli, en parlant de Rizzoli, il y a Davy One sur l'IRC qui a une question pour Benjamin. Et on a qu'avec Pipo, en même temps, tiens. Bon, c'est dommage que Benjamin n'est plus là. Mais il se demandait comment Philippe Rizzoli fait pour présenter le juste prix à une millionnaire. Est-ce qu'à chaque fois, tous les jours, il doit gratter pour trouver trois télés ? Non, non, non, non, non. Allô ? Ouais, Pipo. Ah, quand même ? Ouais, ben attends, cinq minutes, je réponds quand même au question Internet. Ben attends, c'est bon, ça fait déjà un quart d'heure que je suis en attente. Ouais, ben attends, pour l'instant, si t'es pas content, pour l'instant, je réponds aux questions Internet avant vous, d'accord ? Mais putain, c'est quoi cette organisation à deux francs, là ? Eh, si t'es pas content, tu restes chez toi, d'accord ? C'est chez moi, hein. Connard. Vas-y, reste poli. Donc, je réponds à la question. Donc, la question, c'était... C'était comment Rizzoli fait pour trouver trois télés tous les jours pour aller au millionnaire. Non, non, mais attends. Mais ben, d'artiller, hein. Oh, mais ça y est, Pipo, tu la fermes un peu ! C'est bon, Pipo, t'es cool. Ouais, putain, mets-moi tout le monde en attente. Hop. Donc, pour te répondre à ta question, donc, il gratte pas trois télés, c'est lui qui anime deux jeux à l'heure actuelle. Et c'est sûr que je voudrais bien savoir comment qu'il fait pour animer le millionnaire le samedi... Ben, il court vite. Non, mais... C'est presque dans les mêmes... Dans les mêmes locaux que là où il fait le juste prix. Donc, il a juste le temps de changer et il reprend tout de suite le millionnaire, le juste prix. Tu crois qu'il change même de slip ou... Il fait comme Superman, il passe par une cabine. Voilà. Combien qu'on est sur IRC, Rigo, quand même ? On flotte autour de 3400, 3500. En plus ? Ouais, on n'arrête pas de flotter, là, parce que... C'est nul, par rapport à l'Europe. Ouais. Il y a des gens, ils viennent, ils écoutent par l'Internet et ils s'en vont parce qu'ils trouvent que tu gueules. Alors, Flore Danus. Ouais, mais moi, j'ai tout zappé, là. Ah ben... Dans ces cas-là, c'est pas grave. On va s'écouter... Attends, finis ta question. Allô ? Alors, Flore Danus. Ouais ? Tu réponds ? Ça n'avance pas, hein. Bon, tu réponds. Allô ? Flore Danus, tu réponds. Ouais, donc, moi, je pense que les jeux de téléphone, c'est de la merde et c'est bien normal, quoi. D'accord. Ah ben, dans ces cas-là, tu changes de chaîne, ça ira plus vite. Pipion. Ouais ? Donc, pour toi. Non, c'est Pipo, moi. Pipion ! Je ne me souviens plus de la question. Putain, t'es lourde, toi. Tu commences à me casser les couilles. Allez, hop, dégage. Je t'emmerde, d'accord ? Je t'emmerde, moi, je te pisse au cul, toi, salope ! Allez, hop, dégage ! Hop, Pipion, tu me la dégages. Qu'est-ce que je fais ? Je la dégage, je la garde ? Non, non, tu me la gardes. C'est dommage, elle était cool. Non, non, je n'aime pas les connes. On aime ton cul, Gérard. T'as un problème de voix, Gérard. Ah, Manu ! Ouais, Manu ? On travaille bien ! On travaille bien ! Ah, Manu ! Ah, Manu ! Allez, hop, terminé ! Conclusion du débat ! Allez ! Conclusion ! Maintenant, je prends ce soir. Comment ? Or, toi, tu dégages. Gérard, calme-toi. Calme-toi, Gérard. Hop, terminé. Hop, terminé. Donc, on va s'écouter. Je me mets une pisse sale dans l'arrière avec des punaises et des clous. Conclusion ! Mais Gérard, putain ! Mais conclusion ! Mais quoi ? Mais arrête ! Dégage ! Dégage ! Dégage de là toi ! Qu'est-ce que tu fais ? Arrête, tu vas faire un blanc Gérard. Qu'est-ce qui se passe ? Ça marche bien là ! Qu'est-ce que tu fais ? Tu vas tout couper, arrête Gérard. Dégage ! Fais de la merde ! T'es aussi con que Pildor ! Toi c'est pareil ! Dégage ! Dégage ! Dégage ! Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? J'arrête ! Parce que là tu viens de firer Olivier, Manu et Pildor. Il ne reste plus que Rigaud. Moi je ne sais rien faire. Moi je ne sais pas faire le standard, je ne sais pas faire l'arrêtage, je ne sais rien faire. Alors qu'est-ce qu'on fait ? Non mais on va s'écouter, je me mets une ficelle dans l'arrêt avec des punaises et des clous. Mais ce n'est pas une solution ça Gérard. Non mais on met ça comme disque et je vais essayer de voir si je trouve des gens au standard. C'est impossible. C'est impossible de travailler comme ça. C'est impossible de faire des débats que je dis comme ça. Non mais là d'accord, mais attends. Là c'est impossible. Manu, il fait le coup, il s'amuse là. On met des doubles sons. L'autre qui lui demande de virer des gens, il ne les vire pas. Pour l'instant il y a Rigaud qui bosse. Moi je commence à avoir mal bol. Moi je vais finir par ne plus faire de débats. Mais là il faut faire super gaffe parce que... Attends, regarde. Tu as 24 lignes qui sonnent. Là je ne suis pas d'accord. Alors qu'on soit allé où ? Tu peux revenir Gérard ? Attends Gérard, tu parleras avec eux. Qu'est-ce qu'on fait ? Pour l'instant tu mets 2 10. Non, non, non, non. Toi tu dégages. Toi tu dégages. On n'a rien fait. Allez Gérard. Allez Olivier, c'est bien. Non mais claque pas la porte comme ça, tu vas tout casser putain. Toi Manu. Ah non les gars. Manu ça commence à bien faire. Je peux revenir Gégé ou pas ? Attends, vous me prenez déjà au standard moi. Il y a le 10 que là tout tourne. Alors François ça allait où ? Non mais attends, on s'en fout de François. Qu'est-ce qu'on fait ? Non mais moi pour l'instant tu mets 2 disques. Ah non, non, non. Si, si, si, si. Pour prendre le débat là Gérard. Non, non, là c'est même plus possible. Gérard, Gérard, je vais perdre des gens. Je vais perdre des gens sur l'IRC. Je vais perdre des gens sur l'IRC. Mais même, on est à 3500, moi je ne suis pas d'accord. Je ne suis pas d'accord qu'on soit à 3500 à 1h46. C'est bien. C'est vachement bien. Non mais attends. Nous la semaine on est à 100. On est à 100 pendant toutes les 10. Non mais là il faut pas déconner. Il faut pas déconner. Attends. Les mecs ils ne veulent même pas répondre aux questions. Qu'est-ce qu'il s'est passé ? C'est terminé. Maintenant tu ne me prends plus de personne avant. Tu ne me prends plus personne avant les débats. Tu attends que j'arrive et je sélectionne les gens. Parce que Tony j'en veux plus. Arnett aussi, Goldo, tout ça. Qu'est-ce qu'il s'est passé ? Là je n'écoutais pas. Qu'est-ce qu'il s'est passé ? Attends, l'autre il me met du double son. Mais non. J'ai rien fait. J'ai rien fait. Je suis innocent. Olivier, elle est un sable. On va reprendre l'antenne. Olivier, qu'est-ce qu'il se passe ? Olivier, c'est pareil. Tu me demandes de dégager quelqu'un. Il ne va pas. On ne peut pas déconner. Moi je ne continue pas les débats comme ça. Non mais c'est clair. Je suis d'accord. C'est pas vrai. Tu n'as rien fait. Non, tu n'as rien fait. C'est pas vrai. Tu n'as rien fait. Attends. Tu n'as rien fait. Je te demande 150 fois de me virer des mecs. Tu me les reprends. Tu les remets sous le dos de ton nom. Alors qu'il y a 24 lignes qui sonnent. Arrête tes conneries. Dégage. Va faire ton truc à la pointe. Attends, ça va. Il a fait du bon boulot. Alors qui c'est qui fait le truc ? Attends, l'autre s'il se calme. Il revient au standard. Je suis hyper calmé. Il faut que je m'accroche. C'est tout. Alors qu'est-ce qu'on fait ? Qui fait quoi ? Qu'est-ce qu'on fait ? Non, je n'ai pas raccroché aux gens. Qu'est-ce qu'on fait ? Pour l'instant, il reste combien de temps sur le disque ? Il reste 40 secondes. Même pas. Plus tard, il revient au standard. Il me laisse François Zéon. Il me reprend l'autre genre. Bon, alors OK. Allez, on se remet à l'antenne. On reprend dans 40 secondes. Allez, on reprend dans 40 secondes. Et voilà, vous venez d'écouter. Je mets une picelle dans l'arrêt avec des punaises et des clous. Ça, c'est ce que tu m'as donné comme papier. C'est ça. Excuse-moi, Gérard. Je vais chercher un stylo. Je n'en ai pas. Oh non. Tiens, un fil d'arbre. Attends. Olivier est là. Il a volé le stylo, Olivier. Olivier ! Non, non, dégage, quoi. Quoi ? Fil d'arbre, fil d'arbre, fil d'arbre. Fil d'arbre ! Fil d'arbre ! Bon, ça y est. Alors, tu me récupères les gens, là, vite fait. Allez. Alors, donc, maintenant, c'est fil d'arbre que vous avez au standard. Bonsoir à tous. J'espère qu'il va prendre des gens sur les 24 lignes. Tu es trop cool. Tu es cool, Phil. Tu te dépêches ? Hé, Phil, t'es cool. Alors, donc, il nous reste qui, normalement ? On devrait avoir Françoise. Françoise, ouais. Françoise ? Ouais, je suis là. Qui c'est qu'il nous reste ? Bah, c'est tout. Non, père. Bien joué, bien joué. T'as plus que toute seule. Je sais pas. Si tu veux garder qui, tu m'as dit de virer tout le monde. Bah, tu remets plus de deux nuits. Plus de deux nuits. Allez, là, ouais. Plus de deux nuits. Ouais, je suis là. Salut. T'as au boulot, toi ? Ouais, non, non. Non, non, mais après, tu me prends d'autres personnes, là. T'as mes règles. Ouais, t'as tes règles. T'as l'air que tu vas avoir tes règles. Tu vas aller voir Phil Dard. Il va t'arranger ça. T'aimes changer mon tampon ? Ouais, il va... Avec les noms. Il va te les retirer, tes tampons, tu vas voir. Bon, alors, qu'est-ce que... Hé, Dard. Oui ? Il y a une personne qui voudrait participer au débat. C'est possible de l'appeler ? C'est qui ? C'est qui ? C'est un certain Guillaume. Pas de favoritisme. Ouais. Ouais, mais là, je sais pas. T'aurais dû demander ça. À Phil Dard. Bah oui, mais disons que... Bon, je veux pas être toute seule sur le... Sur le débat. Bah, je suis là. Bah oui, mais t'es toute seule. On est que deux, là. Bah, on est deux. Non, mais attends. Pour l'instant, qui c'est qui me reprend, Phil Dard ? C'est Max. Juste deux secondes, Gérard. Juste qu'il est 1h50 et qu'après, il y a ton deuxième débat qui est intéressant. Donc, dans 10 minutes, il faut passer au deuxième. Ouais, bah, dans ces cas-là, on fait conclusion sur celui-là, puis c'est tout. C'est qu'on... Conclusion, et on met un disque, cette fois-ci. Ouais. On met deux disques. On vient d'en mettre un. Jouge. Jouge. D'habitude, entre deux débats, on met Jouge. J'ai t'expliqué. On vient de mettre un disque et à l'époque, il y avait trois heures de débat. Maintenant, ça dure deux heures et demie. Donc, on met plus qu'un disque. On attaque à minuit et demi, on arrête à trois heures. T'es d'accord ? Et les gens, ils demandent. Il y a combien de connectés, Rigo ? 3008, 3009 ? Non, on est redescendus suite à l'engueulade avec Olive. Et ouais, putain ! Et on est sous les 3000, mais c'est en train de remonter parce qu'ils sentent que le débat est plus calme. Ah, et puis, Fildar est revenu. Ils sont peut-être contents aussi. Ils sont contents. Ils le trouvent super cool. Dommage, on ne va pas pouvoir continuer la fin du premier débat parce que c'est bête, parce qu'il y avait quand même des questions qui étaient intéressantes. On l'a fait. Pourquoi les jeux télévision existent-ils ? C'est nul. C'est nul si t'es pas contente, c'est le même prix. Peut-on tomber amoureux d'un jeu télé ? C'est nul. C'est nul si t'es pas contente, tu vas te coucher. Et d'après vous, les jeux télé sont-ils truqués ? C'est nul. Dans ce cas-là, tu vas te faire foutre. Tu vas aller retirer tes tampons. Comme ça, t'auras plus tes règles. Donc, la conclusion du premier débat... Non, c'était pas mal. Non, c'était pas mal. C'était bien. Bien sûr, on a fait que cette question, ça a été le bordel. Donc, le deuxième débat va porter sur les poèmes. Et je peux vous dire que je suis venu avec 4 poèmes. Mais toi, tu vas faire le standard. Et tu vas la fermer. Tu vas la fermer. Tu vas pas t'amuser à ouvrir le micro. Ça sert à quoi que je revienne, moi, pour faire 2 minutes, là-haut ? Tu crois que je suis payé à ça, moi ? Attends, toi, pour l'instant, on est en train de chercher quelqu'un pour te remplacer. Alors, tu vas pas nous les gonfler ? Sans déconner. Sans déconner ! Donc, pour l'instant, il y en a qu'un qui travaille le mieux, c'est Régo à l'Internet. Oui ? Bip bip. Comment ? Bip bip. C'est qui, ça ? Bip bip. Bip bip. Ah, bip bip. Ouais, OK, d'accord. Je vois pas ce que tu veux me dire, mais c'est pas grave. Bip bip. L'autre a dit bip bip. Mais non, la gaffe, quand il arrive, il fait bip bip. Mais non. Tu sais même pas ce que c'est, le bip bip. Tais-toi, tais-toi, tais-toi. Écrase, écrase, écrase. T'es un faux fan du bip bip, en fait. Écrase. T'es un faux. Un faux fan. Ce soir, je l'ai regardé. Fais-moi confiance. Je me suis bien marré. C'est quoi qui t'a fait marrer, ça ? Ouais. Hein, Françoise ? Ouais, ouais, ouais. L'autre que t'aimes pas, là, comment tu l'appelles ? Vous l'avez regardé ensemble ? Non, non, ben... Non, on l'a pas regardé ensemble. Non, mais... On était au téléphone ensemble. Et quand on a arrêté de se parler au téléphone, il y avait Ramucho qui... Ouais, avec une... Avec carrément la maison sur la tête. Ramucho ! T'as cru que c'était la gueule ! Ah, t'es trop cool ! Ah ouais, c'est cool ! Elle est cool, Ramucho. Non, mais attends. T'inquiète pas, Françoise. C'est Manu et Fildar. Ils pètent les plombs, là. Je crois qu'ils ont fumé la moquette. L'autre, il doit faire du 90B, maintenant. Rigaud ! Il est trop rigolo. Rigaud ! T'es marre pas, Rigaud, c'est pas drôle. Rigaud, il y a... Oui, qui y a-t-il, Gérard ? Rigaud, il y a que toi qui bosses bien dans... Fais pas le con ! Fais pas le con ! Moi, je bosse bien parce que les gens de l'IRC sont bien. Fais pas le con, Rigaud ! Bon, conclusion ! Qu'est-ce qu'on se marre ! Alors, conclusion, donc, on... Ben... Il n'y a plus personne pour la conc... Ah, si, il y a Françoise. Ouais. Ben, je veux pas te... te vexer, mais j'ai trouvé ça nul. Eh ouais, mais... Tu sais à qui t'en prendre ? Ben oui, je sais à qui m'en prendre. C'est dommage parce que c'est rare que je participe à tes débats, mais là, je l'avoue, c'est franchement nul. Ben ouais, mais ça, tu sais à qui t'en prendre, hein. Tu t'en prends après Manu et Olivier de la... Voilà. Gérard, conclusion, si toi... Et toi, qu'est-ce que t'en prends ? Ben, moi, je suis comme toi. Comme toi. C'est de la merde complète. Et j'aime pas ça. Donc, j'espère que le deuxième... J'espère que le deuxième, il sera aussi bien, mais disons que moi, je participe pas. Pourquoi ? Parce que t'as vu qu'il a retenu, il est 2h05, et puis, bon, il est temps que t'avais une couche. Ok. Pute de nuit. Ouais. Ben, c'était à chier, ouais, la raison, Françoise. Et tes fins, ben, c'est chaîne de beau. De toute façon, on te l'a dit, hein. Si tu m'aimes pas, tu changes de chaîne, hein. Ben, justement, moi, je regarde RC, donc... Eh ben, dans ces cas-là, tu nous emmerdes pas, puis c'est tout. Gérard, sur IRC, il y a la conclusion de Turpentine qui dit que ton débat, il avait ni queue ni tête comme toi. Non, mais ça, de toute manière, à chaque fois, moi, je commence à en avoir ras-le-bol. Putain, celui qui a un micro derrière, il va se prendre mon poing dans la gueule. Hein, Manu ? Quoi ? C'est bien de parler derrière moi. Hein ? Bon, les conclusions, de toute manière, je pense qu'on va perdre plus qu'un débat par semaine, et ça sera terminé. Allez, on se retrouve pour le deuxième, pour les poèmes, et à tout de suite. == Le débat sur les poèmes == === Contexte === === Les personnages === === Transcription === Les débats, pas de radio et pas d'insultes de Gérard Eh bah lui tu peux annoncer le disque Le disque c'était je sens pas bon entre les cuisses avec mais je me soigne Et bah voilà, donc alors on va écouter, on accueille Verlaine de Montigny le Bretonneux On écoute Fun Radio sur 101.9 Oui bonsoir c'est Montigny le Bretonneux Ouais bah je le sais D'accord Puis celle du sud Salut Gérard Bonsoir Petit Nénuphar Salut Gérard Bonsoir à toi Et String en fleurs String à fleurs oui, Ami Poète du soir, bonsoir De Montluçon De Montluçon oui On écoute Fun Radio sur 87.8 Exactement Et puis celle du sud c'est 98.9 c'est ça ? Exact Excuse moi Gérard on a un nouveau là j'ai eu le temps d'en faire Enfin une nouvelle c'est la chaude Salut Gérard Salut la chaude Salut la chaude Salut la chaude Salut ça va ? Ça va la chaude ? Je suis grave excité le soir avec Gérard Tu fermes ta gueule toi Non mais calme toi la chaude Gérard tu m'excites putain Mais calme toi la chaude quand même Ok D'accord ? Oui Donc tu as 19 ans c'est ça ? C'est ça Et tu appelles de ? J'appelle de la chambre Ouais mais de quelle ville ? Ouais ta chambre Ok j'appelle Versailles Versailles voilà 101.9 Fm Je sais que tu es chaude Oui je suis chaude je sais que tu es chaude Oui je suis chaude j'ai un doigt dans la chaude Non non attends T'as reconnu que t'étais en vie là T'as l'air tu vas être vachement chaude Que tu as dégagé C'est un débat sur la poésie donc tu dis que tu mets un doigt dans ton sexe féminin D'accord Voilà Ouais ben toi Pildor tu commences à t'écraser d'accord ? Alors le deuxième débat se portera sur les poésies Les poèmes Et n'ayez crainte Y'en a quand même 4 après Oh non Qui seront à lire Oh non On fera des poèmes après Moi je raccroche pas Euh ce que ça plaît pas Ça sera le même prix Moi je raccroche Si t'es pas contente que tu vas te faire foutre D'accord ? Tu vas pas commencer à me casser les couilles Ok ? C'est bien compris ? Oui C'est bien compris Hein ? Alors comment doit être réalisé un poème ? On m'a demandé ça à la chaude là comme elle a un doigt dans la chaude Alors comment doit être réalisé un poème ? On m'a demandé ça à la chaude là comme elle a un doigt dans la chaude Comment je l'ai retiré ? Oui c'est quoi la question ? Comment est-ce qu'on doit réaliser un poème ? Oui c'est quoi la question ? Comment est-ce qu'on doit réaliser un poème ? Non c'est comment qu'on encule ta sœur ? Non c'est comment qu'on encule ta sœur ? Non c'est comment qu'on encule ta sœur ? Non c'est comment qu'on encule ta sœur ? Non c'est comment qu'on encule ta sœur ? Non c'est comment qu'on encule ta sœur ? Non c'est comment qu'on encule ta sœur ? Bravo là Bravo là C'est à l'heure Oui donc répète ta question s'il te plaît Bon elle tu me la prends au centre Attends j'ai envie de répondre Alors tu réponds tout de suite Alors c'est quoi la question ? Non bah allez hop on va demander à Verlaine Comment doit-on réaliser un poème ? Moi je pense le plus simplement du monde Avec des phrases, des mots, des virgules, des points à la ligne Et surtout un point final Voilà un point final à la ligne c'est ça ? Un point final et tout à fait Ok Je pense Puis celle du sud Ouais il faut compter les pieds pour faire des vers Donc c'est soit douce, tu fais des alexandrins Soit moins, soit plus Mais ouais tu fais des rimes, tu fais des jolis mots Des jolies phrases qui vont ensemble Ok Voilà Petit nénuphar Bah oui donc tu dois faire des tercets, des vers Faut que ça rime etc Faut que ça ait du son, de la tonalité Bon c'est quoi là ce bordel là ? C'est que tu m'as écouté j'espère Parce que je répète pas On va pisser Manu il n'y a pas de problème Non mais c'est bon là Régo On travaille Gérard j'ai un super service à te demander Ça va te faire chier mais il faut que j'aille faire pipi Bah tu es sûr ? Non mais attends Manu Avant de sortir je te demande l'autorisation Mais Manu tu veux pas que j'aille te la tenir ? Non ça va mais je te demande si je peux y aller quoi Bah tu te démerdes tu te mailles Bah merci Gérard je reviens Je te lave les mains Alors petit nénuphar Bah je t'ai répondu tu vois tu m'as pas écouté comme d'hab Non mais c'est pas de ma faute Donc vas-y Donc il faut que les phrases aient de la tonalité De l'expression etc D'accord string en fleur ? Bah écoute moi je dis qu'il faut trois choses que je suis pas sûr que t'aies C'est l'art de conjuguer, le sens de l'orthographe et quand même un minimum de syntaxe Non mais de toute manière il y a Si si quand même Non attends attends C'est n'importe quoi ça donne je voudrais te dire je t'aime et puis bon Non mais de toute manière il y a pas spécialement je veux dire je t'aime ça c'est mes trucs à moi ça c'est Il faut de la syntaxe toi tu mets de la syntaxe dans tes poèmes t'en mets un maximum Il en faut il faut de la syntaxe il faut aussi de la conjugaison Il faut du Becherel du bled J'ai pété les rimes aussi hein voilà ouais Non mais attendez attendez on accueille qui là maintenant ? Attends pas encore non non non je vais la rappeler parce que j'ai besoin d'une ligne Alors tu bières la chaude et puis tu prends la ligne ? Rappelle le secret Ouais voilà le bulldog secret tu vois tout le monde le veut et apparemment il y en a un qui s'appelle Arnett ou Tony ? Non Non ? Ouais Alors donc comment doit être réalisé un poème bon bah de toute manière ça va être des rimes Mais j'ai pas répondu Non mais toi tu vas te faire foutre Je rentre s'il te plaît Bravo Mais non Mais je t'ai dit de toute manière je veux pas t'entendre toi Je t'ai dit de toute manière je veux pas t'entendre toi Je t'ai dit de toute manière je veux pas t'entendre toi T'as pas envie de me dire comment je réalise mes chers poèmes ? T'as pas envie de me dire comment je réalise mes chers poèmes ? Ouais vas-y Ouais vas-y Eh bien moi j'aime deux doigts de sensualité avec un tiers de whisky et un tiers de Gérard Eh bien moi j'aime deux doigts de sensualité avec un tiers de whisky et un tiers de Gérard Eh bien moi j'aime deux doigts de sensualité avec un tiers de whisky et un tiers de Gérard Ouais alors tu vois Fildar Fildar Fildar Fildar Fildar Fildar Quoi ? Fildar Quoi ? Fildar Quoi ? On travaille T'as laissé le pisser un peu ? Oh Benjamin Je m'amuse bien je fais de la Gameboy Oh putain l'autre au lieu de travailler il est en train de faire de la Gameboy en plein Oh putain l'autre au lieu de travailler il est en train de faire de la Gameboy en plein Oh putain l'autre au lieu de travailler il est en train de faire de la Gameboy en plein Oh putain l'autre au lieu de travailler il est en train de faire de la Gameboy en plein Oh putain l'autre au lieu de travailler il est en train de faire de la Gameboy en plein Non mais il est cool Non mais il est cool Non mais il est cool Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Bah apparemment comme il a pas l'air de vouloir travailler au standard c'est… Bah il est cool De Turpentine, est-ce que tu comptes tes pieds pour faire un poème ? Laisse-le Gérard, il répond à la question. Donc tu me disais ? Est-ce que tu comptes tes pieds quand tu écris un poème ? Non. Non, pas du tout. Et tu comptes tes verres ? Non plus. Non, il picole les verres. Les verres du cul. Les verres du cul, toi, tu la fermes un peu. Donc string en fleur. Oui, tu peux draguer, c'est clair, ça aide à draguer les poèmes. Moi, je me souviens, l'autre fois, j'ai branché une nana, je lui ai récité un poème. C'était un truc du genre, je ne sais pas, viens là cochonne, que je te ramone avec mon gros dard, je vais t'éclater ta boîte à souchards. Et direct, j'ai réussi à la serrer, direct. Et tu as pu trouver quelqu'un comme ça ? J'ai pu trouver plein, plein, plein, ça marche à chaque fois. Ça marche à chaque fois, tu leur fais deux, trois rimes et c'est bon, pas mal. Oui, mais je ne pense pas, mon ami. Toi, tu as fait pareil, tu as bien conquis. Des dizaines et des dizaines de femmes grâce à tes poèmes. Non, je pense qu'à mon avis, là, tu te trompes, vraiment, vraiment, tu te trompes. On reconnaît que tes poèmes ont quand même fait ta gloire. Ah mais attends, mais ce que je lis à l'antenne, ça c'est différent. Mais ça n'attire pas les femmes ? Non. La chaude, tu t'écrases un peu. Mais tu m'as touché, moi. Non, mais toi, tu as t'écrasé parce que tu m'énerves. Tu t'as touché où, la chaude ? Donc, on accueille, on accueille Santa Belgica, il nous appelle de Belgique. Et voilà, il est cool, il a... T'as quel âge, Santa Belgica ? J'ai 23 ans. Voilà. Salut, Santa Belgica. Salut, toi. Salut, Belle. Bonjour. Donc, patinez du phare. Putain ! C'est quoi, cette merde, là ? Calmez-vous, les auditeurs, merde. N'oubliez pas. C'est bon, quoi. Oh, putain ! Non, on se dépêche. Gérard, vas-y, continue le débat, je vais essayer. Allez, encule ton cul, toi, la salope. Là, tu vas permettre ta gueule pour deux bons. Mais c'est la chaude. Hein, la chaude ? C'est un conseil que je te donne avant que... Allez, dégage ! Hop ! T'es pas très poli. T'es pas très poli, Gérard. T'es pas très poli, tu puisses. Calmez-vous pour la chaude. Il est monté sans moi. Quel bordel, dans ce débat. Donc, petit délire char. Ouais. Donc, c'est quoi, la question ? Alors... Peut-on séduire avec un poème ? Peut-on utiliser un poème pour séduire ? Manu, fais gaffe ! Tu te calmes, Manu, hein. Bah, j'en sais rien, parce que... Donc, un mec m'a séduite avec un poème. Ah ! Ah ! Pour l'instant. Ah ! Ah ! Ah ! Ah, mais je sais pas. Ah ! Ah ! Ah ! Ah, bah, ils s'en foutent, là. Ils sont déjà partis. Attends, c'est quoi, ça, Gérard ? Ça vient d'où, ça ? Non, mais, Fildar, quand tu feras bien ton boulot... Qu'est-ce qui se passe ? Ouais, Fildar ! Bravo ! Merde ! Qu'est-ce que t'as fait ? Non, non, non, non. Non, non. Non, non, non, non, non. C'est quoi ? Non, non, tu l'auras pas. Mais c'est quoi ? Je sais même pas ce que c'est. J'aurais quoi ? Tu l'auras pas, parce que tu vas le mettre là, MD ? Ouais, ouais. Ouais, c'est un petit truc... MD, GG, insert. Gérard ? Avec Niette. Gérard ? C'est qui ? C'est un remix, un exclusif que je voulais pas te dire, parce que c'était une surprise. C'est qui ? C'est Verlaine. Ouais, Verlaine. Moi, je pense quand même qu'on peut, pour revenir un peu dans le débat, je pense qu'on peut répondre à la question, quand même, parce que t'as réussi à séduire la grosse Sandy avec tes poèmes. Verlaine, tu restes poli, parce que la grosse Sandy, elle t'emmerde. Oui, c'est vrai, pardon, mais c'est comme toi, c'est parce que tu l'appelles comme ça, toi, donc je pensais qu'on pouvait l'appeler comme ça, quoi. Non, non, mais attends, moi, je lui dis ce que je veux. C'est vrai, c'est vrai. Enfin, voilà, quoi. Bon, alors, dans ce cas-là, comme vous faites les cons, eh ben, on arrête. Oh, non ! Non, on n'arrête pas ! On arrête ! Non, j'ai dit pas ça, là. Sur l'IRC, on a dépassé les 4 1882,4. Je suis tranquille, on commence à arriver vers notre record, alors j'aimerais bien que le débat se passe calmement. Non, mais moi, dans ce cas-là, je voudrais bien que les gens, je voudrais bien que Fildar fasse bien son boulot avant qu'il se prenne des claques. Allô ? Gérard ? Oui, allô, fun, bonsoir. C'est qui ? Oui, t'es au standard, tu veux parler de quoi ? Mais qu'est-ce que c'est que ça, Phil ? Tu veux parler au doc, oui, quitte pas. Bon, Gérard... Fildar ! Moi, j'attends que tu fasses ton débat, moi, je peux rien faire sans toi. Ouais, c'est bon, c'est bon. Je peux rien faire sans toi, Gérard. Non, non, mais... Bon, Gérard, pour en revenir au débat, il y a Turpentine qui te demande si t'as séduit Sandy grâce à tes poèmes. Ah, ça, c'est une bonne question. Ça, c'est une question que tout le monde voudrait savoir. Est-ce que ça attire les animaux ? Comment ? Est-ce que ça attire les animaux, les poèmes ? Est-ce que ça attire ta connerie ? Ah, t'es drôle. Gérard ? On va demander à Petit Nénuphar. Oui ? Tu m'as pas écouté une fois de plus. Bon, alors, vas-y, dis. Non, c'est bon, j'ai répété, c'est bon. Je peux aller passer à un autre ? Donc, on va demander à Pucelle de Nuit. Allez, Pucelle du Sud. Gérard, on me repose la question sur IRC. On me redemande si Sandy... Sandy, on ne me la redemande pas. Non, attends, Manu, s'il te plaît, c'est pas toi qui commandes, c'est Régo, toi. Tu ne fais rien et tu te tais. Elle va venir plus tard, la question. Non, je la garde pour... La grosse, ça t'emmerde, toi, connard ! Elle va venir plus tard, la grosse. Tu peux répondre ? On reprend le débat, là. T'as un nouvel auditeur, en plus. Alors, on a Santa Belgica et Potiron du Sexe. Oui, salut, Coco. Oh ! Salut, Potiron. Salut, Potiron. Allô, Coco ? Potiron, tu réponds comme il faut ! Ouais, bonjour. Salut, ça va ? Oh là là ! Putain ! C'est quoi, là, ces auditeurs que tu me prends, toi ? Qu'est-ce que c'est que ça, là ? Putain ! Attends, Gérard, j'ai rappelé un mec de Belgique parce que tu voulais des Belges dans le débat. En plus, c'est quelqu'un de l'Internet et tu ne l'as toujours pas fait participer. C'est Santa Belgica. Il n'a toujours pas répondu à ta question. C'est un Belge et il attend. Oui, Gérard ? Alors, toi, toi, ça qui est plus sale du sud, tu vas fermer ta gueule un peu. Non, mais dis rien. Vas-y, réponds, Santa Belgica. Alors, je voudrais savoir si... En fait, je suis poète à mi-temps en Belgique. Je voudrais savoir si Gérard connaît mes oeuvres. Non ! Non, mais je peux lire un poème, peut-être ? Non ! Oh, mais tant pis, quand même. Une mélodie est née le jour où nous nous sommes rencontrés. Et cette mélodie... Il a mis sa gueule à lui ! Elle sera toute notre vie. Vas-y, gros. Voilà, c'est fait. C'est génial, quand même. Deuxième débat, vous allez me foutre la mère d'encore ! Il était beau, son poème. Gérard, tu pourrais faire correctement ton travail. Mais c'est pas vrai, hein ! Gérard, il était beau, son poème. Tu pourrais écouter. Ça m'a pris trois ans pour faire ce poème. Plus sale du sud. Oui, Gérard. Moi, on ne me séduit pas avec des poèmes. Avec des billets, avec des carottes râpées, des clés de douze, des choses comme ça. Hum. Verlaine. Oui, moi, je pense que je suis d'accord avec plus sale du sud. Non, mais tu es précise. C'est-à-dire qu'on peut, effectivement, ou on ne peut pas. Maintenant, chacun a un peu pour soi. Et pour un marque, tu fais quoi ? Non, il n'y a pas de marque. C'est-à-dire que, par exemple, quelque chose comme Orangina ou Coca-Cola... Bon, alors... Verlaine, au revoir ! Pour en revenir à ma question de tout à l'heure, donc, sur IRC, on te demandait si Sandy avait été charmée par tes poèmes. Tais-toi, la grosse débout, espèce de finiasse, là ! Tu ne vois pas que les autres s'habillent, là ? Allez, débout ! T'es vraiment un bâtard, toi, là-bas ! Quoi ? Dédicace ? T'es vraiment... T'es vraiment un fumier, là ! Tu nous le demandes à chaque fois ! Ouais, mais attends ! Tais-toi, la grosse débout, espèce de finiasse, là ! On va l'appeler. Bon, ben, justement, on accueille Poupou le mystère. Salut, Poupou ! Salut, le sanglier ! Salut, le sanglier ! Salut, le sanglier ! Tais-toi, la grosse débout, espèce de finiasse, là ! Tu ne vois pas que les autres s'habillent, là ? Allez, débout ! Et ils sont bien avec nous ! C'est la fête ! C'est la fête ! C'est la fête ! C'est la fête ! C'est la fête ! C'est la fête ! Poupou le mystère ! C'est la fête ! C'est la fête ! Oui, c'est la fête ! C'est la fête ! C'est ça, la fête ! Bon, ça y est ! Ça y est, là, ça y est ! Bon, alors, Poupou le mystère ! Oui, bonjour, Gérard ! Bon, t'es là ? Oui, oui, je suis là, t'inquiète pas ! T'es bonne ? Bonsoir ! Bon, donc... T'es bonne ? Bonsoir, bonsoir ! Bon, Poupou, t'as bien vu que c'était pour toi ? Oui, oui, j'ai bien vu, oui ! T'inquiète pas, j'ai bien écouté la musique ! Donc, alors, maintenant, comme tout le monde sur IRC me demande si je t'ai séduit avec mes poèmes, donc, est-ce que tu peux répondre à la question IRC ? En sachant que c'est Poulmystère ! Voilà, en sachant que c'est Poulmystère comme rigolo ! Il y a trop de mystère dans ce truc ! Non, non, mais vous la laissez répondre, d'accord, maintenant ? Non, je pense qu'en effet, tu m'as séduit avec tes poèmes ! Oh, tu peux faire moins de bruit, s'il te plaît, joue, là ! Attends, toi ! Gérard, Gérard, arrête, le tape pas, le tape pas ! Ah, mais Gérard, si tu ne m'écoutes pas, c'est pas un problème ! Mais non, il ne t'écoute pas, là, il est en train de taper Fildar ! Il te fait parler, c'est un poème de quel siècle ? Gérard, Gérard, vas-y ! Maîtrise quelque chose, là, au lieu de taper Fildar, reprends ! Je t'écoute ! Il y a Poupou le mystère qui te parlait, tu ne l'as même pas écouté, du coup ! Donc, alors, vas-y ! Moi, j'ai fait un poème sur le pont de l'Alma ! Non, ta gueule, à toi, sur le pont de l'Alma ! Non, mais ça, en plus, ça n'a rien à voir avec toi ! Oh, Mercedes ! Putain, putain, putain, putain ! Mais, balance, balance-moi un disque ! Mais non, j'ai pas un disque ! Toi, pilier du pont de l'Alma que j'aime tant ! Toi, haussier ! Au pont de l'Alma, non, je ne l'écoute pas ! Il est incroyable ! Alors, tu le prends, tu l'emmènes dans ton bureau, tu ne lui donnes plus ! Ah, d'accord ! Tu l'emmènes dans ton bureau, tu vas jouer avec ! Quand je m'éclate dans un pylône ! Bon, alors, attendez, attendez, attendez, attendez ! Oh ! Maintenant ! C'est combien, Game Boy ? Oh oui, Sandy, je joue, oui ! Oh oui ! Alors, on va garder Poupou le mystère ! Oui, je suis là ! Donc, tu restes ! Potiron du sexe ! Toi, tu vas te calmer, ou sinon, tu vas dégager ! D'accord ! Puis celle du sud ! Oui ! On va te garder ! Attends, c'est moi qui décide ! Attends, c'est toi qui décide, c'est moi qui commande, d'accord ? Oui, d'accord ! Ok ! Donc, Manu, tu me balances le disque ! Tout de suite ? Oui, oui, oui ! Il est 2h18, vous allez réfléchir à la troisième question ! D'accord ! Quels sont, pour vous, les poèmes les plus beaux ? Et on répondra, avec Poupou le mystère, à la question IRC, tout à l'heure, qu'on nous demande, comment j'ai fait pour... Non, mais ils s'en foutent, maintenant ! Ils m'ont dit que Manu, on s'en fout ! Non, ils ne veulent pas que tu répondes, ils vont s'en aller, si tu réponds, alors ! Non, non, mais on va leur répondre, avec Poupou le mystère, et on se retrouve... On va perdre des gens, Gérard, on va perdre des gens ! Eh ben, dans ce cas-là, on va s'écouter, quoi ? On va s'écouter, attends que je te dise pas de conneries ! Je me mets... Quoi ? Je me mets un doigt dans le cul, non ? Non, c'est pas ça ! Bouge la grosse ! Non, non, non ! Je me mets un carton dans les fesses, parce que je ne me suis pas essuyé ! Mais quand est-ce qu'on va l'avoir en CD, Bouge la grosse ? Ah ben ça, je sais pas, faudra voir si tes débats sont bien ! Ouais, mais faudrait qu'on l'aille en entier ! Donc, pour l'instant, c'est, je viens de te le dire, le titre... C'est, ben... C'est toi qui l'as... J'ai un carton dans les fesses, quoi ? Attends, il y a Max... Avec Je me suis mal essuyé ! Avec Je me suis mal essuyé, et donc, vous réfléchissez à la question... Je me suis mal essuyé ! Avec Je me suis mal essuyé, et donc, vous réfléchissez à la question... Quels sont pour vous les plus beaux poèmes ? Donc, vous pouvez toujours nous appeler au 0800 70 5000... Et 0800 308 5000... Oh, ta gueule ! Ta gueule, toi, tu es un peu ignorant ! Bon à rien, qu'est-ce qu'il fait, là ? T'es tombé dans la poubelle ? Pauvre tâche ! Pauvre tâche ! Tâche ! Tildar ! Allez ! Attends, parce qu'on ne l'avait pas mis en entier, le truc, elle est là, grosse ! Elle est où ? Elle est au standard ! Ta gueule, elle est au standard, attends ! Merde, ma grosse, ok ? Tu ne vas pas lui raccrocher au nez, comme tu as l'habitude de faire ? Donc, on se met le carton dans l'arrêt, et puis, voilà ! On se retrouve tout de suite après ! Manu, annonce le disque, s'il te plaît ! J'ai un carton dans l'arrêt, avec Je me suis mal essuyé ! Ok ! Voilà, et vous pouvez nous appeler au 0800 70 5000... 0800 808 5000 ! Et toujours l'IRC ! Toujours l'IRC ! www.funradio ! Et donc, c'est Rigo qui vous répond ! Voilà, on est... C'est les débats de Gérard, quand même ! C'est toujours les débats ! Le ! Gérard, ok ! Sur Funradio ! Sur Funradio ! Par rapport à l'IRC, vite fait, je voulais juste dire qu'on a dépassé les 4500 quand même, ce qui est un record, même si ça ne fait pas encore 4900 ! On est 4623, et je voulais saluer quelques personnes, Spoutnik, Izen, Cédric, Yankee, Ice-T, Chocobo, Cédric, et les autres, quoi ! Allez, faites-moi plaisir ! Faites-moi plaisir ! Aujourd'hui, on est... On est le... Combien ? On est le 3 décembre ? Ouais ! Non, le 4 décembre ! Allez, faites-moi plaisir ! Montez-moi l'IRC ! Faites-moi monter l'Internet ! Faites-moi monter l'Internet à 5000 personnes ! Allez, on récupère ! Allez, allez ! Spring en fleurs ! Oui, mais restez à toi, Gérard ! Ouais, salut ! Salut ! Pour le... Pour le... Match Talk... Chose... Mystère ! Allez, bouge la grosse, là ! T'inquiète pas, on a une surprise ! Salut, Rigaud ! Salut, Manu ! Et salut, Fildard ! Salut, machin mystère ! Ouais, salut à tous ! Et puis moi, je pue de la gueule ! Ouais ! Non, je viens de te dire salut, Gégé, donc t'as pas entendu ! Ouais ! Non, mais moi, j'ai mal entendu ce que tu m'as dit ! Bon, allez, c'est pas grave, on y va ! C'est pas grave ! Puis, celle du Sud, j'espère que tu t'es calmée ! Salut, Gérard ! Verlaine ! Oui, bonsoir, Gérard ! Tu t'es calmée ? Oui ! Euh... Potiron du sexe, j'espère que tu t'es calmée ! Oui ! Et Santa Belgica aussi ! Oh, j'étais pas énervé, moi ! Bon, alors... Ouais, Gégé, toi, t'es calmée ? Maintenant, on va continuer le débat ! Sérieusement ! Je suis pas calmée, je te le dis ! Bon, qui qui est pas calmée ? C'est String Enfleur, tu m'as pas demandé si j'étais calmée ! Bon, tu t'es calmée ? Ouais ! Bon, alors, maintenant, on y va ! Quels sont pour vous les plus beaux... Quels sont pour vous... Les poèmes les plus beaux ? On va demander ça à Santa Belgica ! Eh bien, un des poèmes les plus beaux qui existe, c'est Ecolalie de la mémoire, arborescent au trédit bitoir. Tu le connais ? Comment ? C'est Ecolalie de la mémoire, arborescent au trédit bitoir. C'est un poème belge. Euh, je connais pas. C'est beau, en tout cas. Enfin, euh... Potiron du sexe ! Ouais, bah, moi, le poème qui m'a le plus touché, c'était le grand classique de la charcuterie, ça, c'est un truc, ça m'a touché, parce que ça parle de la mormoine poêleuse, et j'aime bien. Tu aimes aussi, Gérard ? Non. Mais tu connais ? Non, je connais pas. Tu veux que je t'envoie ? Non, euh... Oui, tu peux l'envoyer au 143 menu Charles de Gaulle, 92 521, noyé sur scène SEDEX. Oh, quelle belle voix ! Donc, tu peux... T'es vrai, Gérard ? Non, mais vous pouvez toujours nous écrire, et puis m'envoyer des petits poèmes. On peut t'écrire directement à toi ? Oui, bah, vous mettez à l'intention de Gérard, et... N'ayez crainte. Je serais... Fildar m'avait dit qu'on pouvait pas. Ah bon, Fildar, depuis quand que... Attends, mais maintenant, il va vous rater. Depuis quand que les gens, ils ont plus le droit de m'écrire ? Ouais, c'est quoi ce bordel, là ? Fildar m'avait dit qu'on pouvait plus. Il a dit qu'il y avait pas de fan club au 143 menu Charles de Gaulle. Tu réponds, tu réponds. Non, je parle pas, je parle pas. Tu réponds aux auditeurs ! Faut savoir ce que tu veux, là. Tu dis que j'éteins mon micro, donc je parle pas. Attends, Gérard ? Oui ? Je t'ai envoyé des chocolats, tu les as reçus ou pas ? Non. Moi, j'ai envoyé des bonbons. Attends, mais on t'a envoyé des trucs, comment ça se fait que tu les as reçus ? J'avais mis l'attention de Fildar pour Gérard. C'est Fildar qui les a gardés ? Fildar ? C'est où ? Je comprends pas. C'est chez moi ? Avec des millionnaires. Moi, je lui ai envoyé des photos intimes, mais bon... Qui c'est qui a envoyé des millionnaires ? Verlaine, j'avais envoyé pour Noël, déjà, les cadeaux, l'attention de Fildar pour Gérard, parce que Fildar m'avait dit qu'il fallait lui envoyer à lui. Ah non, mais Fildar, tu t'en... Mais Fildar m'a dit qu'il fallait tout lui envoyer à lui. C'est pour ça que j'ai envoyé une télévision couleur. Mais Fildar, c'est pour ça que t'as des nouvelles sapes ? Ah, le salaud ! Max ! Je t'ai envoyé des coton-tits, je t'ai envoyé des t-shirts Nike. Je t'ai envoyé une pochette surprise millionnaire, tu sais, avec 20 tickets de millionnaire dedans. Attends, l'autre, il m'a envoyé des trucs... Oh ! Ah, mais calme-toi, Gégé ! Je comprends pas. Ouais, je t'avais envoyé des chocolats, hein. Attends, et l'autre, il me pique mon courrier ! Et les chocolats ? Très déçu. Il y avait des bons tickets au kiwi. Eh non, il pique ton courrier ! On en parlera après. Eh ben, je t'en faisais Chantal Goya, il l'a eu. Bon, alors, question Verlaine. Quels sont les... Je tenais quand même à vous remercier pour les millionnaires et tout ça, les mecs, c'est cool. Non, mais c'est un bâtard, lui, c'est pas grave, on va régler ça après. Pour en revenir à l'IRC, il y a Fiji Lido qui te demande si t'as entendu parler de l'hypraconductivité des poèmes le soir quand il fait nuit. Non. Non, j'ai pas eu l'occasion d'en entendre parler, de ça. Attends, je comprends pas, qu'est-ce que ça veut dire, ça, Gérard ? Ben, justement, moi non plus. L'hypraconductivité, tu vois ? Non, je sais pas ce que c'est. Moi, je t'expliquerai après, là. Tu me l'expliqueras. Donc, Verlaine ? Oui, ben moi, bizarrement, c'est un poème à toi qui m'avait le plus marqué, mais il y a longtemps, quoi. Ah, ben, dis, dis, dis ! Ben, je me souviens à peu près du texte, je sais pas si t'en souviendrais, c'était, bien sûr, je voudrais te dire je t'aime. Ouais. C'était dans un camion frigo, c'était sur un air de trompette, avec, sur un fendrier, je sais pas si tu te souviens. Ah, bon, ben, c'est... Sur un aigle. Ouais, ouais, ouais, c'est la merde. Ben, Gérard, c'est vrai que tu couches avec Big Bill ? Qui, qui, qui, qui, qui demande ça ? Ben, moi. Euh, Pissache du Sud. Oui. Donc, toi ? Ben, moi, ce sont les poèmes de Yaponov. Ben, Gérard, c'est vrai que tu couches avec Big Bill ? Oh, là, là. Pissache du Sud. Ouais, moi, c'est un poète russe dont les oeuvres ont été traduites en français, c'est très beau. C'est très dépouillé, t'as un mot par page, mais c'est très bien pensé. Ben, Gérard, c'est vrai que tu couches avec Big Bill ? Euh, Poupou le mystère. Oui, ben, écoute, moi, ce que je peux te dire, c'est que, pour moi, les poèmes les plus beaux, c'est Baudelaire. Ouais. C'est très, très beau. Oh, non ! Et, euh, bien sûr, les dix. Oh ! C'est exactement grâce à ça, grâce à tes poèmes, que je t'ai connue, quoi. Que j'ai fait ta connaissance, et puis, voilà. Ah, ben, voilà, elle répond à la question de l'Internet, Gérard. Il me mentait dessus, c'est tout. Ben, la question... Non, mais il y en a une autre. Ah, une autre ? Parce que l'IPRA, il perd contre l'activité, apparemment, tu sais pas ce que c'est. On te demande si c'est vrai que... Alors, attends, si les poèmes du Figaro signés Gégé de Suren, est-ce que c'est les tiens, c'est Chocobo qui demande ça ? Non, c'est le Figaro. J'ai jamais mis de poèmes sur le Figaro, et j'irai jamais mettre des poèmes. C'est quelqu'un d'autre, alors. Non, mais, là-dedans, j'irai jamais mettre... Ben, il faut payer, en plus. Comment ? Il faut payer. Oui, il faut payer. Et, Poupou le Mister, pour l'instant, je réponds, tu me laisses parler, s'il te plaît, merci. Ok, y a pas de problème. Avant que je t'assomme. Alors, ça, sûrement pas, parce que t'as pas... Bon, allez, c'est bon, c'est bon, laisse-le répondre, putain. Eh, oh, tu la laisses parler, toi ? Tu la laisses parler, toi ? Comment ? Eh, Gérard, t'as le juste prix de ton cul ? Euh, string en fleur... Euh, donc, euh... Tu réponds ? Pour répondre à la question IRC, donc, non... Vite, vite, vite, vite, vite. Donc, on va demander à... Ben, string en fleur, maintenant. Eh, Gérard, t'as le juste prix de ton cul ? String en fleur. Voilà, oui, déjà, je voulais dire que Moby Dick Mister, là, elle a pas beaucoup de goût au niveau des poèmes. Et, deuxièmement, les plus beaux poèmes, ben, c'est ceux qu'on fait avec le cœur, hein, ou ceux qu'on fait avec l'alcool. Non, mais, de toute manière, en principe, quand tu fais un poème, tu le fais du fond du cœur, pour la personne que t'aimes. Ouais, tu peux le faire du fond du cul, aussi. Non. String en fleur. Ouais, mais je te disais, avec l'alcool, reconnais que quand t'es un peu éméché, ça aide pour l'inspiration. Euh, non, je vais te dire une chose que... Non, non, non ! Les plus grands poètes, ils ont toujours consommé un maximum, quand même. Eh, je vais te dire une chose que... Ouais, il y a autre chose. Ben, attends, il y en a un, là, pour l'instant... J'ai rien fait ! Non, mais c'est lui, là. Tu vois, Pildar, tu me laisses ton micro, et c'est tout. D'accord ? Euh, Rigo ? Question IRC, avant que je réponde. Alors, est-ce que c'est vrai que j'ai lu dans le Surenois magazine que Gégé donne des cours de poème ? C'est Turpentine qui te demande ça. Non, je donne pas des cours de poème, et... C'est peut-être une idée, ça. Non, mais même, je donnerai pas mes cours... Je donnerai pas comment que je fais mes poèmes, ni rien du tout. De toute façon, t'as pas le temps, t'es pas bouqué. Comme Coca-Cola, c'est top. Est-ce que tu lui donnes des cours de comique involontaire ? Oh ! On se calme, derrière, on laisse parler la personne qui pose la question. Oui, donc, c'est beaucoup plus clair. Donc, ce que je voulais te dire, c'est que si, moi, tu me donnes des cours par correspondance pour faire des poèmes. Alors, les cours par correspondance... Et donc, ce que tu n'as pas dit ? On n'entend rien à ce qu'elle dit. Non, mais c'est normal, parce que Pildar, il parle dessus. Donc, alors, les cours par... Les cours par correspondance... Manu, tu vas te taire, s'il te plaît. Donc, les cours par correspondance... Putain, ça commence à bien faire. Je vais pouvoir répondre. Quel bordel ! Oui, mais je pense que ça va être les deux débats qui vont foirer. Si les deux débats foirent, la semaine prochaine, j'en ferai qu'un, ça sera les jeux vidéo. Donc, alors, avis aux amateurs... Pour les autres... Gérard, pour revenir au débat, bravo, déjà. Et il y a Chocobo, encore, qui te demande où est-ce qu'on peut trouver ton papier peint, les poèmes de Gégé, avec tes poèmes d'écrit dessus. Alors, là, dans ces cas-là, le truc avec les poèmes de Gégé, donc, dans ces cas-là, vous achetez le best-of qu'on a fait avec Max... Le papier peint ? Non, mais le papier peint, ça n'existe pas. Si, lui, il l'a vu chez des gens. Oui, ben, il l'a peut-être vu chez des gens. Moi, j'ai vu du papier toilette à Saint-Ouen, la dernière fois. Je te jure, c'est vrai. Ouais, ben, moi, j'en ai rien à foutre. Donc, si vous voulez savoir plus... On me dit qu'il y en a qui ont vu des 4x3 sur des nationales, aussi. Non, ben, ça, c'est des conneries. À côté du Mans. Oui, c'est ça. T'as raison, toi, pucelle du Sud. Continue comme ça, et tu m'intéresses. Vas-y, cochonne. Alors, donc, pour répondre à la question quels sont, pour vous, les poèmes les plus beaux, donc, c'est sûr qu'il y a Verlaine, il y a Baudelaire, il y a... Même, je pense qu'il y a plusieurs personnes qu'on en fait. Bon, pour dire que... Herbert Léonard ? Non, Herbert Léonard, c'est un chanteur. Voyons, voyons. On ne confond pas les chanteurs. C'est un peu des poètes, les chanteurs. Non, non, non. Justement, Gérard, on avait récupéré sur Internet un petit sondage à la question quel est votre poète préféré. Donc, il y avait 43% des gens qui préfèrent Pythagore. 24% des gens préfèrent Lili à poil. Ah, très bien. Et 100% des gens détestent le poète de Suren. Ah, là, c'est clair. Non, non, mais ça, c'est des trucs confidentiels. Non, c'est ma pochette, ça, Gérard. Du calme. Non, non, mais attends. Déjà, il y a un truc que j'ai retiré. Parce que dessus, c'est marqué Lili. Alors, il est hors de question, donc tu fais gaffe à ce que tu vas lire. T'as jamais lu ses poèmes ? La tienne, toi, connard. Alors, doit-on parler plus souvent de... Doit-on parler le plus souvent de quoi ? Je n'ai pas répondu à ta question. C'est qui ? Je t'écoute. Les poètes que j'admire beaucoup, il y a par exemple un poète belge qui est très connu, c'est Hergé, qui a écrit les poèmes de Tintin et Mille. Donc, il y a Rigaud qui a une question IRC, non ? Non, la question, c'est pourquoi mon micro il ne s'éteint plus ? Ben si, il s'éteint. Alors, ça y est, Rigaud. Ça y est, ça y est, ça y est. On se calme, hein. On va essayer de continuer le... Doit-on parler plus souvent de... Attends. Doit-on... Attends, attends. Calme-toi, Gérard. On reprend un peu de sa petite... Doit-on parler plus souvent... On va parler plus souvent des poèmes à la télé. On va demander ça à Stringanfleur. C'est quoi cette obsession du doit-on, là ? Qu'est-ce que ça peut te foutre ? Si tu ne veux pas répondre, tu le dis. On prend quelqu'un d'autre à ta place parce qu'il y a 24 lignes qui sonnent. Gérard, toi, perso, rapport au doit-on, tu mets un doigt ou deux doigts ? Voilà, exactement. Et toi, est-ce qu'on te demande si tu mets deux doigts ou un doigt ? Mais non, mais moi, je te le demande. Gérard, pour revenir au débat, Gérard, pour revenir au débat, il y a Formos qui me dit que... pour les débats à la télé, il ne devrait plus s'en parler dans le Big Wheel. Ouais, mais ça, c'est pas évident. Donc, Stringanfleur ? Tu peux me refaire la question, là, parce que je suis largué. Alors, doit-on parler plus souvent des poèmes à la télé ? À la télé, non. Je pense que, franchement, les poèmes, ça reste dans le milieu de la radio. Je pense qu'il y a quand même déjà suffisamment de gens qui souffrent avec tes poèmes. Donc, il ne faut pas trop que ça se diffuse à la télé parce que sinon, tu pourrais quand même contaminer pas mal de monde. Non, mais attends, Stringanfleur, dans ces cas-là, moi, les poèmes que je fais, c'est pour tout le monde. C'est pour tous les auditeurs et les auditrices. Je sais, c'est là qu'il y a le danger, justement. C'est qu'il peut toucher tout le monde, ton poème. Non, mais ça, de toute manière, ça a touché déjà... Bon, on va... Non, non, mais attends... Oui, Sylvain, tu parles de tes conneries, là ? Allez, c'est tranquille. C'est un peu le mystère, là. C'est un peu le mystère, là. Non, parce que tu me remets à l'antenne et après, tu me remets à le standard, là. Ça va pas du tout, hein ? C'est vrai que t'es pas bon, ta fille d'art. Il fait ça à tout le monde, hein ? Ah, la menteuse. Ah, non, non, je suis pas une menteuse. Je dis toujours la vérité, hein. Alors, Poupou le mystère. Oui ? Attends, attends. Oui, Rigo ? Alors... On te demande si t'es bourré quand tu fais tes poèmes. Non. Bah non, je l'ai dit tout à l'heure. J'en ai parlé tout à l'heure. Gégé, c'est qui, ta muse ? C'est Sandy, ta muse, ou pas ? Non, Gégé, c'est Mumus tout seul. Ah, est-ce que Sandy, c'est ta muse ? C'est ton égérie ? Est-ce que c'est là que tu trouves ton expiration, par exemple ? C'est qui qui parle, là ? C'est String en fleurs. Bon, alors, String en fleurs, pour l'instant, tu viens de répondre, tu laisses parler, les gens. Donc, Poupou le mystère. Poupou le mystère. Eh oui ! Elle est là ! Gérard, elle est là ! Elle est là, elle est là ! Elle est là, elle est là ! Elle est là, elle est là ! Elle est là, elle est là ! Elle est là, elle est là ! Elle est là, elle est là ! Elle est là, elle est là ! Vous m'entendez, là ? Elle est là, elle est là ! Elle est là, c'est bon, Gérard, reviens ! Bon, alors, Gérard, c'est absenté du studio, je ne sais pas pourquoi. C'est pareil, il est parti dans le... Je sais, je vais te répondre ! Attends, c'est pas la peine, Poupou le mystère, il est parti. Il va revenir, là. Poupou le mystère, t'as pas un poème pour Gérard, pour le faire revenir ? Bah, écoute, je vais essayer de trouver dans mes affaires, et puis je vais le lire par... Allez, charge bien. Gérard, Poupou le mystère, elle veut te lire un poème. Et si, pas bien, il va te lire un poème. Tiens, je t'en prie. Non, mais là, il n'arrête pas de... Les gens sont en art, comme ça, ça va pas. Allô ? Là, moi, c'est terminé. Qu'est-ce qu'il s'est passé ? J'en comprends rien, là. C'est Caliméron le mystère. Allô ? T'es là, Poupou le mystère, Poupou le mystère, t'es là. Oui, t'es là, sans doute. Vas-y, balance. Allô, l'autruche ? Bah, il m'écoute, j'ai le jeu, ou pas ? J'écoute ! Donc, c'était quoi, déjà, la question ? Alors, doit-on... Non, mais attends, ça va lâcher encore pas le dégât. Mais non, il y a une basse cour derrière. Elle suit pas, Gérard. Non, mais moi, c'est simple, il est 2h40, je pense que je vais arrêter. Ça va aller plus vite, hein. Que certains auditeurs se calment de temps en temps, que ça fasse pas masse et que tout le monde s'y mette, quoi. Alors, Poupou le mystère, tu veux répondre ? Donc, c'est, doit-on parler plus souvent des poèmes, je sais pas quoi, là ? Ouais, à la télé. Ouais, bah, je pense qu'on devrait, sans doute, consacrer des reportages à propos des poèmes. Des poèmes. Et essayer de parler de ça, parce que c'est vrai qu'on n'en parle pas assez à la télé. Et donc, voilà. Moi, je pense qu'on devrait faire des reportages, quoi. D'accord. Régo ? Oui ? Attends, excuse-moi, Poupou le mystère, il y a une question hier, c'est ? Oui, on te demande combien de poèmes tu as écrits dans ta vie ? Alors... C'est toujours le même. Donc, les poèmes que j'ai écrits dans ma vie, donc, à l'heure actuelle, il y en a plus de 200. Oh, quand même. Alors... 200 quoi ? 200 feuilles ? Non, non, mais attends, toi, t'éteins ton micro, parce que c'est moi qui ai la feuille, maintenant. Bah, je te pose une question, Gérard. Ouais, non, mais moi, c'est 200 poèmes que j'ai sur des feuilles. Alors, à la question, quel est votre poète ? Après, vous allez... Puis, celle du Sud ? Oui. Verlaine ? Ouais. Potiron du sexe ? Oui. Et Santa Belgica, donc, n'ayez crainte, je vois... Vous allez répondre à... Je vais répondre à la question, je vais quand même lire un petit sondage, là, que j'ai sur les yeux. Il y en a un, par contre. Celui-là, il va être vite lu. Alors... Ok, à quel poète aimeriez-vous ressembler ? Merde. C'est Gérard. Celui-là... C'est à la question, quel est votre poète préféré ? Tarié ? Non, mais ça, j'ai déjà lu. On l'a déjà lu, celui-là. Non, non, non, non, il a lu la haute. Non, il a lu celui-là, tu t'es énervé à cause de ça, tu ne te rappelles même plus pourquoi tu... Alors, à la question... Que verriez-vous comme thème de poésie ? Donc, 20% des gens sont aveugles et n'en font que d'écouter. 25% des gens verraient mieux avec des lunettes. 37% des gens ne voient pas le rapport. Et 43% des gens n'aiment pas la question. Donc, des trucs comme ça, moi, ce n'est même plus la peine qu'on fasse des débats. Ça ne sert à rien d'essayer de jouer au con comme ça, à fil d'art. Allez bien, tu vois, tu pourrais répéter la dernière question. Pucelle du Sud. Oui. Donc, pour toi. C'était quoi déjà ? Parce qu'on a beaucoup parlé, là. Alors, doit-on parler plus souvent des poèmes à la télé ? Non, non, je pense que c'est bien. C'est bien que les gens ignorent que les poèmes existent. Comme ça, ils ne vont pas évoluer culturellement. Et puis, ça ne fera pas des intellectuels. Verlaine ? Oui, je pense qu'on amènerait une transaction translative si on parlait plus des poèmes à la télévision. Ce qui permettrait de... De plus voir en quoi est constitué le poème. Et ça revaloriserait l'ensemble du monde de la poésie. Ouais. Potiron du sexe. Il est parti, il est parti, il est parti. Ah, il est parti. Alors, Santa Belgica. Ben oui, écoute, Gérard, puisque je représente le public belge, il faut savoir qu'à la télévision belge, il y a énormément d'émissions de poésie. Ça passe toute la journée avec des musiques de violon. C'est un petit peu chiant. D'accord. Merci, Fildor, de le couper quand... Ah, il est là, il est là. C'est tout ce que tu avais à me dire ? Santa Belgica. Oui. J'ai juste dit que c'était un petit peu chiant, et c'est tout. Ah, d'accord. Là, je ne comprends pas, parce que les trois quarts du temps, ça saute. Je me demande ce qui se passe. Pourquoi ? Les poèmes sautent. Non, non, non, mais la ligne saute. Ah, ce sont des poèmes en octosyllabes, alors. C'est quoi ce bordel, là ? Je ne sais pas. Tu as bien vu, je ne touche à rien. Si tu veux que je te dise... Oui, je ne sais pas d'où ça vient, moi. Putain, mais Léo ! Vous savez, ça veut dire quoi, là, ce bordel ? Je ne sais pas. Putain, mais ce n'est pas possible. Depuis quelle date existent les poèmes ? On va demander à Stringham Pleur. Gérard, Gérard, Gérard ! Tu as ta gueule ! Va te faire enculer, connard ! Oh là là, ça dégénère. Ouais, Gérard ? Stringham Pleur. Ouais, bah écoute, les poèmes, je pense que ça remonte à l'aube des temps. Tu peux préciser ? Bah, je ne sais pas, l'Antiquité, la Renaissance... Le Moyen-Âge, la Grèce antique, tout ça. Tout ça, il y avait déjà les plus grands poètes à cette époque-là. D'accord. On n'a pas entendu que tu arrives, heureusement, d'ailleurs, pour avoir des grands poètes, quand même. Non, mais attends, moi, je les ai fait sur l'antenne de Paine Radio depuis 93. Non, mais je sais, mais heureusement qu'on n'a pas attendu et qu'il y avait des Platons et des Dioscures et tout ça avant toi, parce que... Voilà, quoi. Attends, Marc. Si ça ne te plaît pas, ce que je fais comme poème... Non, mais attends, écoute-moi... Écoute-moi, si ça ne te plaît pas, dans ce cas-là, tu changes de radio, c'est tout, ça va plus vite. Mais si, Gérard, je te dis que tu es le digne représentant de la lignée des pédagogues, c'est plutôt un compliment, je veux dire, arrête. Bon, Poupou le mystère. Bah, écoute, moi, ce que je peux te dire, c'est que les poèmes existent déjà depuis Jésus-Christ. Ah, bah, depuis 1900, hein, OK ? Non, même avant 1900. Ah, bon ? Parce que Jésus-Christ, il est né avant 1900. Ouais. Donc, c'est un cas... Mais moi, je suis bien né avant Jésus-Christ. Ouais, mais toi, tu n'es pas Jésus-Christ. Non, mais je suis qui ? Je m'excuse, mais en fait, ça existe depuis que Jésus est écrit. Oh, on se tait derrière, on la laisse parler. Donc, tu disais, toi ? Ouais, donc, je pense que les poèmes ont été créés à l'époque de Jésus-Christ. Et alors, moi, je suis bien né avant Jésus-Christ. Non, t'es né après... Tu ne comprends pas ce que je veux te dire, mais... Non, non, mais de toute manière, je ne comprends pas le français. Ah, bah, si ce n'est pas qui le dit, alors, tu le reconnais, eh ben... Puis, celle du Sud. Ouais. Bah, les poèmes, ça date depuis que les gens écrivent. Hum. On a commencé par ça, en fait. D'accord. On a commencé par l'écriture cunéiforme, et ils ont fait des poèmes, tout de suite, pour séduire leur belle pour les sodomiser. Ouais, bah, de toute manière, on n'a pas besoin de séduire sa belle pour la sodomiser, comme tu dis si bien. Mais, à l'époque, si. Ouais, bah, peut-être. Mais, je ne pense pas, à mon avis. Euh, Verlaine ? Oui, bah, moi, je pense que les poèmes existent depuis très, très longtemps, quand même. Je ne sais pas exactement depuis quand. Par contre, je suis sûr que la poésie, elle est apparue il y a trois ou quatre ans avec toi. D'une camille téléphonique assurée, la vraie poésie, la pure. Bah, disons, ça m'est venu comme ça, d'en faire. Et puis, maintenant, ça ne m'empêche pas de continuer de les faire. Non, c'est sûr. C'est sûr que... Attends, Verlaine. C'est sûr qu'au début, tout le monde me disait, bon, bah, que j'en repasse. Bon, c'est... Tout le monde, même Max, m'a demandé à ce que j'en repasse. Oui, vas-y, continue, je t'écoute. Donc, bah, là, il y en a... Il y en a quatre pour ce soir, donc on ne va pas faire les temps sereins, non ? Je le sais bien. Et d'ailleurs, Gérard, si tu pouvais me permettre, moi, j'en ai fait un petit. J'aimerais bien que tu l'écoutes à la fin, à la fin, avec les tiens, pour me dire ce que tu en penses plus tard. Non, mais de toute manière, tu vas lire le tien, toi, en premier. D'accord. Et moi, je lirai les quatre miens. Maintenant, bon, bah, écoute, je vais te le lire maintenant. Bah, vas-y, vas-y, fais-en un tout de suite. Les gens de l'IRC, ils ne veulent pas t'entendre. Ah, c'est comme ça ? Enfin ! Ah, putain ! Mais, je... Arrête ! Gérard ! Carrel ! On l'enlève, là ! Ah, il copie, là ! Arrête de taper ! Arrête de taper avec le téléphone ! Ah, bah, voilà, tu l'as trouvé ! Ah, bah, voilà, tu l'as trouvé ! Alors, il est où ? Eh, tu viens chez moi après, Gérard ! C'est vachement bien ! Bon, Gérard, tu fais quoi, là, oh ? Alors ? Eh, tu l'as coupé ! Putain, t'es vraiment un bâtard, toi ! Ah, mais c'est vraiment très beau, tes poèmes, hein ! Eh, tu viens chez moi après, Gérard ! Ta gueule, toi, va te faire foutre ! Donc, de toute manière, on ne va pas continuer, on va s'arrêter. Eh, tu viens chez moi après, Gérard ! Va te faire foutre, toi ! Vas-y, enchaîne, enchaîne, Gérard ! Non, non, mais, de toute manière, on arrête, là ! Oh, non, non, non ! On continue, on continue, là ! Je n'ai pas attendu tout ce temps pour rire ! Gérard, tu me le gères ! Allez, je te fais une petite surprise, pour les dix dernières minutes, j'accueille Couscous à la place de Poitiron du Sexe. Bonsoir, Gérard ! Bonsoir, à tous ! Salut, Couscous ! Bonsoir ! Bon, alors, Couscous, depuis quelle date existent les poèmes ? Ah, moi, je pense que ça existe depuis que les poétons existaient, disons, dans les années 1900. Ah, ben, 1900, c'est la date que j'ai lue. Hum ? Après Jésus-Christ. Bon, Verlaine, tu fermes ta gueule ! Ah, c'est pas Verlaine, là, hein ? Eh, s'il crie, c'est à cause des clous, hein ! Ah, c'est bon, Gérard, rentre chez toi ! Allô, c'est Couscous, là ! Ouais, Couscous ! Qu'est-ce qu'il y a ? Qu'est-ce qu'il se passe ? Allô, c'est Merguez ! Putain, Fuldar... Gérard, pour revenir au débat sur l'IRC, il y a D-Light qui te demande si, comme lui, tu es fan du poète grec Sergei Boubka. Je connais pas. Pourtant, il a écrit de super trucs ! Il est génial ! Il est grand, il a un grand grand stylo ! Donc, il est 2h48, 2h49, ça y est ? Oh oui, oh oui, oh oui ! Allô, qu'est-ce qu'il se passe ? Allô, c'est quoi ce bordel ? Allô ? Oui, allô, Fede, bonsoir, t'es au standard ? Ouais, bonsoir, c'est Couscous, ça va pas ? Bon, Gérard, pour continuer le débat, vu qu'apparemment, tu veux pas continuer, moi, j'ai des questions à te poser. Il y a Izen sur l'IRC qui te demande lequel de tes poèmes aimes-tu le plus ? Ah, c'est une bonne question, ça. Non, ça, justement, je l'ai pas là, et j'en ai fait quatre nouveaux pour éviter de changer. Donc, je vais en faire un, et puis après, je pense qu'on va se mettre... Non, on se met un disque... Non, on se met pas de disque, Gérard. On fera la conclusion... On finit dans dix minutes, donc... On fera une conclusion, donc... Donc, alors... T'as pas répondu, Gérard, en fait, c'est lequel de tes poèmes que t'aimes le plus ? Le mieux que j'aime, c'est... Je voudrais te dire « I love you », mais tu écoutes ton « What man ». C'est celui-là qui me touche le plus, et que tout le monde a apprécié. Je sais, si je peux me permettre, Gérard, j'étais pas encore ici, mais je t'écoutais déjà, et il y en avait un où... Je me souviens d'une phrase, en fait, mais ça faisait « J'aimerais te tenir la main sur le dos d'une vache ». Non. Et je pense que dans ce poème-là, il m'avait captivé. Non, je vais te dire une chose que là, tu vois... Non, je décroche, je m'en souviens. Non, mais attends, Manu, là, j'ai jamais été lire ce que tu viens d'annoncer, tu peux redire la phrase ? « J'aimerais te tenir la main sur le dos d'une vache ». Non. Ah si ? Non. Témoin. Non, non, non, non, non. Alors là, je peux te dire une chose que j'ai jamais été lire ça à l'antenne. Bon, c'est pas grave. C'était dans un poème. C'est pas grave, c'est pas grave. Non, mais attends, il y a un nouvel auditeur à la place de Verlaine que t'as viré, on a son copain Rambo. Non, mais c'est pas la peine, Manu, c'est de l'occlusion. Salut Rambo. Donc, alors, on va... Allô, on m'entend ? Salut Rambo. Allô ? Ouais, c'est Rambo, là. T'es bonne, Gérard. Elle mesure 1 mètre pour 400 kilos. C'est le Sandy ! Eh, Sandy, attends, merde ! Ok ? Sandy ! Voilà, alors... Allô ? Bon, ça y est, pour l'instant, je veux lire les poèmes. Manu, tu mets le double son, s'il te plaît. On m'entend bien, là, je suis au Vietnam, là. J'entends, j'entends. Gérard, on a Rambo au Vietnam, donc tu peux... Bah, j'en ai rien à poutre. C'est un grand poème, Rambo. On peut me perdre parce que je suis sur une valise satellite, hein. Putain, mais il va fermer sa gueule, lui. Merci. Alors, ça s'intitule Mon bébé. On le fait tout de suite ? Oui, on les paie maintenant. Bon, bah, on y va, on y va. On devrait plutôt peut-être faire la conclusion, ensuite tes poèmes. Non. Je pense que c'est mieux, quoi. Non, je paie. Non, mais vraiment. Non, mais c'est pas toi qui commandes, c'est moi. Non, mais comme ça, il fait les poèmes avec les auditeurs, comme ça, c'est cool. Non, mais c'est pas... C'était juste une suggestion, quoi. Non, mais de toute manière, on va faire... De toute façon, Max, il vient de me dire, Max, on fait la conclusion et après, on fait les poèmes. Voilà, tu vois, c'est pour ça que je te dis ça. Sinon, je te le dirai pas, on est venus me le dire. On est venus me le dire. Tu m'éteins ton micro et tu te la fermes. Fais la conclusion ! Non. Conclusion, d'abord, si, si, si. Mon bébé, fais-moi l'amour. Non, sérieux. Putain, mais c'est moi qui commande le jeudi, d'accord ? Bah, tu verras avec Max après, hein. C'est toi qui vois, hein. Mais bon, conclusion d'abord, quoi. Non. Bon, s'éclate-moi les fesses. Non, mais quand vous aurez fini de commander... C'est pas nous. Bon, Rigaud, tu peux me donner le nom de combien de personnes ? On a perdu, là. Si tu fais pas ta conclusion tout de suite, ils s'en vont, les gens. On a perdu 1200 personnes, là. Oh ! Non, non, non, non, ça, j'y crois pas trop, non plus, là-dedans. Bah, tu verras. Bon, donc, mon bébé. Mon bébé, fais-moi l'amour dans un camion. Manu, tu fermes ta gueule ! Non, mais, bah, je sais pas ce que t'en penses, Phil, mais moi, je pense que la conclusion, elle serait la bienvenue. Bon, alors, vous me faites chier, il y aura pas de poème ce soir, c'est tout. On fait conclusion et voir. Ok, poème d'abord, ok. Non, non, non, non, conclusion. Conclusion, on va demander à Serignan-Fleur, comme ça, ça va aller plus vite. Mais non, mais attends ! C'est qui qui commande le jeudi ? C'est moi ? Non, c'est moi. C'est toi qui ferme ta gueule ! T'as compris ? Tu fermes ta gueule ! Tu fermes ta gueule ! T'es bon, Gérard. Ok ? Là ! Maintenant, c'est moi qui commande. Alors, conclusion, il y aura pas de poème. Bah, moi, pourquoi il y a pas de poème ? Bah, ça, c'est pas à eux de commander, c'est à moi. Pourquoi il y aurait pas de poème ? Donc, moi, je fais les poèmes et je fais les conclusions derrière. Bah, tu crois pas que ça serait peut-être plus intelligent de faire la con ? Non. Non, parce que t'as tous les auditeurs qui vont t'alentir, ils vont pas arrêter de t'emmerder. Et après, tu vas gueuler. Tu fais ta conclusion, tu fais vite une torchade en 10 secondes et tu prends 5 minutes de ton temps, entre vos 55 et l'heure, pour faire tes 4 poèmes tranquilles. Alors, string en pleurs. Ah, c'est quand même inadmissible, ça. Ta gueule à toi ! On te l'a vu. Ta gueule ! Ouais, GG. String en pleurs, conclusion. Oui, tu m'entends, là ? Oui. Ok, donc, bah, je voulais te dire en conclusion que quand je suis dans ma Mercedes et que je suis à fond la caisse, je m'éclate sur un pylône et que je me fracasse la colonne. Quand il y a du verglas, non, je ne déraperai pas sous le pont de l'Allemagne. Voilà, c'était pour toi, Gérard. Gérard, pourquoi tu vas taper Fildar tout le temps ? Il était beau, son poème. Allez, à suivre. Poupou le mystère. Poupou le mystère. Moi, ce que j'ai à dire à GG, c'est que, là, franchement, je suis vachement dégoûtée parce que, là, les débats se passent très mal. On lui pose des questions, il répond pas correctement en question. C'est vrai. Et, là, je comprends pas, là. Pour moi, c'était nul. Merci, au revoir. Après, c'est... Attends, merci, au revoir. Attends, c'est toi qui commande depuis quand ? Pourquoi tu coupes saucisson à l'ail ? Poupou le mystère. Poussel du Sud. Poupou le mystère. Ouais, non, mais je suis là. Tu restes là parce que tu me diras ce que tu penses des quatre poèmes. Non, mais dépêche-toi parce que j'ai une grosse envie d'aller aux toilettes. C'est que ça contient... Allez, Poussel du Sud. Bon, Poussel du Sud. Moi, je voudrais te faire une conclusion en faisant un poème. Gérard est optimiste rien ne lui résiste car il a des kystes. Ok, merci. Verlaine ? Non, c'est Rambo. Rambo ? Allô ? Allô ? Rambo, ouais. Ouais. Vous m'entendez, là ? Ah, tu fais ta conclusion ! Gérard, il est au Vietnam. Attends, il y a un décalage. Non, je suis au Cambodge, j'ai changé. Ah. Ouais, bientôt, tu seras à Paris. Eh, il va vite, ton hélico. Je voulais juste dire qu'au niveau des poèmes, bon, je te laisse parce qu'il y a des Khmer rouges. Il dégage. Hop. Santa Belgica. Oui, Gérard, un instant, parce que j'étais en pleine création. Alors, eh bien, c'est très simple. Moi, mon père spirituel, c'est un certain J.Suren, qui est un auteur contemporain, plutôt temporain, d'ailleurs. Et je trouve qu'il était nécessaire de présenter, avec le maximum de rigueur, ce trésor de mots français qui est classé selon l'homophonie des syllabtoniques. D'accord, d'accord. OK, on a compris. Hop. Euh, couscous ? Ouais, Gérard, il n'y a pas de problème. Mais le débat, il était pas mal. Sauf que ça gueule un petit peu trop, mais il n'y a pas de problème. Quand tu veux, tu viens à la maison. OK, j'y pense. Toi, Manu, je vais t'éclater. Qu'est-ce que j'ai fait ? Toi aussi, je pense que tu vas perdre comme Filda. J'ai rien fait ? Je pense que... Tout à l'heure, on va discuter. Hein ? Rigo, combien sur l'Internet ? On a perdu un peu. On est quand même à 3000 et quelques. Je demande vite fait. 3000 combien, les gars ? 3125. C'est pas mal. On est à 4500. Bah ouais, mais je t'ai dit, si tu faisais pas ta conclusion tout de suite, ils partaient, les gens, ils sont partis. Non, mais il y en a... Bon, euh... Regarde, ben regarde, regarde. Tu vois où, un son, là ? Là, tu commences à m'énerver. Ça ? Vas-y, écoute. Attends, me prends pas pour un con. Ouais, c'est pareil. Ça, c'est Olivier. Voilà, donc c'est pas moi. Bon, ben, y aura pas de poème. Y a pas de double son, là ! Non, non, attends, faut pas déconner. Il te reste 3 minutes, dépêche-toi. Y a rien, là. Allez, allez, allez. Poupou le mystère, elle est toujours là ? Ouais. Non, mais toi, t'es... Non, mais elle est là ! Je suis là. T'es là, Poupou le mystère ? Ouais. Poupou le mystère, t'es là ? Poupou le mystère ! Oui, je suis là. Non, c'est pas toi. Mais si ! Non, c'est pas elle. J'ai envie de faire pipi. Attends, c'est un trap. T'as un trap, ça, attends. Me fais pas chier, toi. Pêche-toi, j'ai envie de faire pipi. Voilà, bravo. Bon, Gérard, y a quand même sur IRC une conclusion de paradoxe. Il dit que... T'as cassé, regarde ! Oh, il a pété le standard. Bon, je vais refaire ma conclusion de IRC, de paradoxe. Conclusion, les poèmes de Gégé sont aussi nasses que les surprises Kinder, que le dernier top album d'André Verschuren, et que les Feux de l'Amour, et que Témoin numéro 1, et que Skyro très unis. Alors là, André Verschuren, c'est pas moi. Bon, Manu, ça suffit, s'il te plaît ! Ça suffit, maintenant ! Vous faites que du boulot de naze, là ! On fout, maintenant ! Pour les émissions de demain, comment je vais faire, moi, à cause de toi ? Bah, attends, tu t'en prends après lui ? Non, non, c'est toi qui a cassé le truc en baissant le truc, en cassant. Bah, vas-y, maintenant, Gérard, vas-y. Donc, si elle écoute Poupou le Mister, c'est pour elle, les quatre qui sont dédiés. Donc, mon bébé. Mon bébé, fais-moi l'amour dans un camion. Mon bébé, fais-moi l'amour sur une voiture. Mon bébé, fais-moi l'amour dans une niche. Celui qui s'amuse avec les micros va fermer sa gueule et vite. D'accord ? Mon bébé, fais-moi l'amour sur un Magnum. Mon bébé, fais-moi l'amour sur mon Godot. Godzilla. Mon bébé, fais-moi l'amour sur un Saint-Pangé. Mon bébé, fais-moi l'amour sur une toupie. Mon bébé, fais-moi l'amour quand tu as tes règles. Mon bébé, fais-moi l'amour sur un Bambi. Mon bébé, fais-moi l'amour sur une girafe. Voilà, le premier. Le deuxième. Bravo. Le deuxième, aimer. Alors, je voudrais dire je t'aime sur une carte orange. Je voudrais te dire je t'aime sur un trèfle. Je voudrais te dire... Je t'aime sur un compresseur. Je voudrais te dire je t'aime quand ça ne va pas. Je voudrais te dire je t'aime sur un livre. Je voudrais te dire je t'aime sur un cheval. Je voudrais te dire je t'aime sur une cornemuse. Je voudrais te dire je t'aime sur un dalmatien. Je voudrais te dire je t'aime sur un concombre. Je voudrais te dire je t'aime sur un corbeau. Troisième, amour. Mon amour, je voudrais te faire des caresses sur une chouette. Mon amour, je voudrais te faire des caresses sur une cigale. Mon amour, je voudrais te faire des caresses sur un cormorant. Mon amour, je voudrais te faire des caresses sur un nuage. Gérard, excuse-moi, c'est quoi un cormorant ? Ta gueule. C'est quoi un nuage ? Va te faire foutre, toi. Mon amour, je voudrais te dire je t'aime. Je voudrais te faire des caresses sur une... Cigogne. Mon amour, je voudrais te faire des caresses dans l'espace. Mon amour, je voudrais te faire des caresses sur un chevreuil. Mon amour, je voudrais te faire des caresses sur une chicorée. Mon amour, je voudrais te faire des caresses sur un chouca. Mon amour, je voudrais te faire des caresses sur un chromosome. Le dernier. Il s'intitule poulette. Ma poulette, donne-moi ton amour sur un mini-tel. Ma poulette, donne-moi ton cœur sur une platine. Ça, je pense, en parlant de platine, c'est... C'est au DJ. Au DJ. Il faut dire quand même. Donc, ma poulette, donne-moi ton cœur sur un briquet. Ma poulette, donne-moi ton cœur sur une carotte. Sur une carotte. Ma poulette. Donne-moi ton cœur sur un fax. Ma poulette, donne-moi ton cœur sur un radis. Ma poulette, donne-moi ton... Donne-moi ton cœur sur un volcan. Pardon. Oh, le déculasse. Ma poulette, donne-moi ton cœur sur une assiette. Ma poulette, donne-moi ton cœur sur un livre. Et ma poulette, donne-moi ton cœur quand je te dis grenouille. Voilà, terminé. Point final à la ligne. Et on se retrouve la semaine prochaine. Le thème du débat portera sur les jeux vidéo. Et c'est tout. Gérard, quand tu dis donne-moi ton cœur sur un radis, tu parlais pour les jardiniers ? Pierre Pout, à toi, c'est pas toi que je m'adresse. Et pour faire plaisir à Sandy, à moins que Rigaud, il y a peut-être une question inversée. Oui, conclusion, la poésie est écrite par des vieux frustrés qui devraient se pendre pour faire un minimum d'argent. Moralité, t'en vas à la cruche à l'eau qu'à la fin, Gérard nous les brise. Eh ben, c'est dommage. Très beau, dit-on. C'est dommage parce que... Les... Il y a une autre question. Une autre conclusion de Turpentine. Le débat n'avait ni queue ni tête comme toi. Eh ben, c'est bien. Eh donc... Ça s'est plutôt bien passé. Ouais, ben... Non, non, mais ce que toi t'as cru, mais de l'autre côté, je peux t'assurer que c'était vraiment bien. Donc maintenant, est-ce qu'on peut avoir... Fildar était quand même meilleur. Vas-y, passe-la nous. Poupou le mystère. S'il te plaît. Poupou le mystère. Poupou le mystère. Putain, Fildor. C'est lui. C'est toi, Gérard, quand t'as pété le scandale. Non, non, non, non, non. Putain. Qu'est-ce que tu fais, là ? Allô ? Elle est où ? Ben... On repasse l'heure directe. Oh là là, là, là, là, là. T'as bêté vraiment. Putain, mais c'est... Dégage, dégage. Viens. Mais qu'est-ce que tu fais, Gérard ? Viens de là. Mais quoi ? C'est bon, je pourrais se faire le coin. Viens, viens. Je veux te voir. Allez, rappelle l'heure directe, s'il te plaît. Attends, je vais en numéro, si tu veux. Non, non, je te le permets. Ça va, c'est pas toi. Viens, viens, viens. Bon. Il sait même pas son numéro. Oh là là, là, là, là. Dépêche-toi, fais vite. Il reste deux minutes. Oh là là, là, là, là. Hop. C'est long, c'est long. Mais t'as fait deux fois le zéro. T'as pas besoin. Y a pas besoin, oui. Oh là là. Dégage, je vais le faire. Laisse-moi faire. Qu'est-ce qu'il se passe ? Ben, il arrive pas à faire son numéro au téléphone, le Gérard. Allez, dépêche-toi. On va pas lui dire, parce qu'il entend même pas. Si, vas-y. Y a Dylan qui dit qu'il a trouvé... Il a trouvé que Gérard avait réagi avec poésie ce soir. C'était très romantique. Merci, Gégé, pour cet intense moment d'extase littéraire. Sergueï Boubka n'aurait pas fait mieux. Vas-y, Manu. Vas-y. Allô ? Salut. Viens, t'es un peu le Messire. Putain, non, tu es... Oh là là. Mais j'ai rien fait ! Arrête ! Arrête, Gérard ! Ça va pas, Gérard, arrête ! Mais elle est là ! Mais qu'est-ce que t'as fait ? T'as fait la mauvaise ligne, elle est là. Mais qu'est-ce qu'il se passe, Gégé ? Ben alors ? Qu'est-ce que ça sert de t'énerver, Gérard ? Bon, pour le Messire. Oui ? Ben, c'est moi. C'est moi. Alors ? Alors, qu'est-ce que t'en as pensé ? Alors ? J'ai rien touché. Bon, dégage, Manu. Je prends la banque. Dégage. Ben, si tu veux, vas-y. Casse-toi, casse-toi. Ben, vas-y, vas-y, fais ton malin. Fais ton malin. Vas-y, tu vas bien me faire rigoler. On va dire que c'est l'autre, là-bas. Oh l'enculé, là. Oh la pisse de pute. Gérard, il est parti. Il faut peut-être expliquer aux gens. Je ne capte rien. L'enculé est parti. En fait... Bon, on va couper ça. Bon, alors, Gérard, qu'est-ce qu'il s'est passé ? Il lui a raccroché au nez, fil d'arbre ? Un machin mystère ? Bon, on recommence. Bon, allez, refais le numéro, mais vite, Gérard. Vite. Attends, laisse allumer la micro. Allez, Gégé. Vas-y, Gérard. Ah, il est parti se planquer, tu m'étonnes. Ah, putain. C'est occupé ? Ouais. Ouais, maintenant, ça, c'est un occupé. Elle ne répondra plus. Putain, putain. Oh là là. Putain, putain. Bon, sinon, moi, j'ai trouvé ça bien, quand même, tes débats, ce soir, Gérard. Franchement. Moi aussi, ouais. Putain, cause de putain. C'est dommage qu'on n'ait pas pu aller plus loin dans les jeux vidéo, mais... Putain. Dans les jeux vidéo, dans les jeux télé. Putain. Gérard, tu... Qu'est-ce qu'il y a ? Gérard, reviens ! Gérard ! Il est parti. Ils sont partis en courant, dans le couloir. Bon. Ben, reviens. C'était débat, on fait quoi, avec Rigaud, nous ? On n'a pas de micro pour arriver dans le couloir. Les gens, ils nous écoutent. Bon, ça va, Rigaud, c'était bien le Cosmic Laser, cet après-midi, quand même. C'était cool. C'était bien marré. Non, mais moi, je vais lire un petit peu l'IRC, alors... Il n'y a plus personne, là, à l'antenne, là ? Allô, l'IRC ? Gérard, fais quelque chose, là-dedans, on est en train de... Vas-y, tu mets la chanson, j'essaie de... Ma poulette, j'y... T'as eu une course poursuite dans les locaux de la radio, il a failli se faire déchirer la gueule. Dégage, toi ! Non, Gérard, maintenant, reste là, Gérard ! Arrête, c'est bon ! Let's groove tonight. Bon, finis là, on arrête là, c'est bon, on s'en fout, tu lui demandes en antenne, on lui demande en direct ? Vas-y. Il compose le numéro. Voilà, c'est bon. Je m'en occupe, je m'en occupe, vas-y, va te mettre en face. Allez. C'est là, là ? Vas-y, Gérard. Allez, on y va. Vas-y, mets à ta place ! Reprends-moi mon casque, là. Je la prends, là. Oh là là, t'es relou, Gérard. C'est tout au standard, Manu. Allô ? Oui ? Euh, bébé ? Ouais ? Bon, qu'est-ce que t'en as pensé ? Comment ? Qu'est-ce que t'en as pensé des quatre poèmes ? Ben, écoute, ça m'a touché énormément, hein. Ouais, ben, t'inquiète pas, tu étais encore plus touché. Parce que... Putain, qu'est-ce que t'as fait, encore ? T'es là ? Au fil d'art ! Putain, mais vous me faites chier, allez, au fil d'art ! Hop, on... Non, c'est le truc qu'elle fait, là. C'est le fil d'art qui a encore fait ça. Là, le truc, le potard qu'elle fait. Bon, pour... Là ? Ouais. Faites la fête, la grosse ! Et voilà, c'est dédié pour samedi, et on se retrouve la semaine prochaine. Sur Femme Radio ! Sur Femme Radio, et demain, Max, le Star System, à partir de 22h ! Wouhou ! C'est le café ! == Le débat sur l'argent == === Contexte === Ce débat occupe une place particulière dans la compréhension de cette émission. Sa clôture illutre un point clé, souvent débattu, quant à l'innocence de Gérard de Suresne sur le système autour de lui et de son émission. En effet, en din d'émission, alors qu'il identifie, très clairement, que les titres qu'il lit sont faux et loufoques, il veut lire les vrais, il n'y arrive pas. Il revient alors aux titres écrits par l'équipe. C'est une preuve absolue qu'il est parfaitement conscient de ce qu'il se passe, mais s'en acquitte de bonne grâce parce qu'il sait ce qu'il en tire, malgré le prix à payer à son niveau. Prix à relativier quand on sait l'apport de l'émission dans sa vie et que, cette même vie, il la réécrit souvent au gré d'une mémoire authentiquement traumatique. === Les personnages === === Transcription === Les débats, pas de radio et pas d'insultes de Gérard. Et voilà, donc vous venez d'écouter Manu s'il te plaît. C'est Roudoudou avec Peace and Tranquility to Earth. Et voilà, il est 0h32, donc bienvenue sur VN Radio. Vous pouvez nous appeler au 0875 000 et 0803 085 000. Et toujours sur l'IRC www.fr, il y a Rigaud qui vous attend. Et Rigaud, si tu pouvais nous dire à peu près combien qu'on est. Je suis là, bonsoir à tous. On a dépassé les 2000 déjà, ça va très vite ce soir. On est à 2543,1, c'est pas mal. C'est beau ce que tu fais Gérard, c'est beau. Donc j'espère que ça ne va pas faire comme la semaine dernière. On s'échappe, la semaine dernière on était à combien Rigaud à peu près ? Je ne sais plus, mais on n'avait pas fait beaucoup la semaine dernière. Je crois qu'on était des... Descendus à 3005. Oui, mais ça va aller ce soir. Donc à un moment donné, ça va aller. Ça va aller, ça va aller Gérard. On espère. Ça va aller. Un fil d'art. Ça va aller Gérard. Ça va aller, on fait le débat. On y va Gérard, j'arrive. On y va. Bah oui, mais on y va. Ton premier débat portera sur quoi Gérard ? Sur l'argent. Sur l'argent. Alors la première question donc... Vas-y, pose la première question pour les auditeurs qui nous écoutent déjà. Alors pour vous, l'argent, fait-il votre bonheur ? Donc voilà, et donc on va accueillir... Merci fil d'art. On va accueillir des gens, oui. Donc on va accueillir Tony. Tony, bonsoir. Bonsoir Gégé, bonsoir Manu. Bonsoir Tony. Bonsoir fil d'art. Salut. Bonsoir. Salut Tony. Non, non mais... Tu vois, il y a un problème fil d'art. Ouais. C'est que Tony, il faudrait que... Permettez qu'on passe toutes les semaines. Non mais j'ai des choses à dire, c'est pour ça. Non, non mais attends. 103.3. Déjà 101. Non mais je me suis trompé parce que tu vois, j'ai rayé là. C'est pas ça. Ouais, ouais, c'est 101. 101.9. 101.9. 101.9. Tony, tu ne commences pas, d'accord ? Ok. La suite, Tabouret, bonjour. Alors Tabouret. Salut Gérard. 10 demandes d'Axe, on peut écouter Fun Radio sur 95.3. Ouais, c'est ça. Donc Sandwich, 23 ans de tour. Bonsoir Gégé. 102.8. Oui, c'est ça. Alors, tu me fais bouder, 10 demandes. Bonsoir Gérard. Tu me fais bander. Ouais, bander. Ouais, ben, non mais tu vois, Fildar. Qu'est-ce qu'il y a ? Non, non, attends, Fildar. Là, il y a... Oh, qui c'est qui a un portable ? C'est Sandwich, mais elle n'a que ça. Ah non. Non, parce que les portables, c'est pitoyable. Tony, pour l'instant, tu t'écrases. Non, mais elle n'a que ça parce que chez elle, elle n'a pas le télécom. Ah ouais, non mais attends. Moi, dans ce cas-là, moi, je ne fais pas des débats avec des portables. C'était bien prévu. Parce que regarde, là, déjà... Ça commence. Je vais essayer de la rappeler, on va voir si la ligne passe mieux, OK ? Et puis tu la reprends dans deux minutes. Alors, tu me fais... Bon, allez, tu ne commences pas, d'accord ? Tu me fais bander. Oui, je suis là. Donc, on peut écouter, donc, à Ifto, 96.9. Ah, tu me confirmes la fréquence ou pas ? Oui, oui. Ouais, bien sûr, pas dans mon cul, ma tête est malade. On le savait, ça, Gérard. Non, non, mais attends. Déjà, hé, Fildar, tu me la reprends, tu la réveilles un peu, parce qu'à 19 ans... Allez, Gérard, on y va, on y va, on enchaîne. Après, on a... Fildar, le prochain coup, tu écris mieux. Oseille. Oseille. Ouais, bonsoir, Gégé, bonsoir. Donc, maintenant, Royan sur 99. Salut, Oseille, ça roule ? Ouais, ça roule. Et après, j'écarte... Quoi ? Barret. J'écarte Barret. J'écarte Barret, Paris, 101.9. Bah, si tu le dis, hein. Bah, ça va, et toi, Gérard, mon petit Gérard, comment vas-tu ? Non, non, mais attends, je suis pas ton petit Gérard, d'accord ? Vous allez pas me casser les couilles, maintenant ? C'est mignon. OK ? Alors, première question, donc, vous l'avez entendue. Pour vous, l'argent peut-il le bonheur ? Ouais, ouais, ouais, oh ! Qui c'est qui commence à dire, tu peux la répéter ? Parce que je vais pas répéter les questions 50 fois, hein. Bon, d'accord. D'accord. Alors... Allez, première question, on y va, on répond. Bouge ton doigt, mets ton doigt dans mon cul. Celui qui dit ça, ou celle qui dit ça, bah, commencez par la fermer, d'accord ? Et puis, vous allez arrêter de redipler comme des porcs. Gérard, si tu commences jamais, on fera jamais le débat, hein, donc pose la question. Alors, première question... Tony, tu la fermes, c'est pas toi qui commandes. Non, mais Tony est en attente, donc il est pas là, donc vas-y, j'ai l'attaque. Alors, première question... Première question... Pour vous, l'argent fait-il le bonheur ? On va demander à Tony s'il est là. J'ai pu en attendre, là ? Non. Ah, c'est dommage. Non, t'as alors... Pourquoi c'est dommage ? Non, non, parce que j'avais dit des choses marrantes, mais c'est pas grave. Bon, alors, tu dégages. Allez, hop, il a... Retourne voir, puis le dernier... Non, non, mais attends, j'ai rien dit, là. Il a rien dit, là, Gérard. Je réponds à la question. Y a pas de souci, hein. Je réponds à la question. Parce que là, tu as pas commencé. Tu passes toutes les semaines dans les débats. J'ai des choses à dire. Non, mais tu passes toutes les semaines dans les débats. Tiens, oh ! C'est moi qui commande ! Bon, pour répondre à la question, moi, j'ai pas trop d'argent. Eh, oh ! Toi, déjà. Hop ! J'en veux pas. Pas de problème. OK ? Pas de souci. Allô ? Ça va pas faire comme la semaine dernière. Tu peux répondre ? Attends. Eh, oh ! Moi, c'est pareil. D'accord ? Parce que là, ce soir, vous avez pas me cassé les couilles. Parce que sinon, je suis caléba et je me casse. Oh non ! OK ? Ouais, d'accord, d'accord, d'accord. On y va. Non, mais calme-toi, calme-toi. Bon, alors, Tony, pour l'instant, tu réponds à la question. Ça fait toutes les semaines que tu passes. Ouais, mais arrête de m'agresser comme ça. Moi, je veux... Non, mais attends. La semaine dernière, t'es passé. Alors, on dirait rien de bon. Mais non, mais s'il dit rien de méchant... Bah ouais. Non, mais même. Moi, j'ai pas. Même. Même. Eh, y a 24 lignes qui sonnent. Donc, faut prendre sur les 24 lignes. Je les ai fait sonner, les 24 lignes, moi. Non, mais tu les as fait sonner, mon cul ! Bon, alors, moi, j'ai pas beaucoup d'argent, mais je suis heureux. Voilà. Hop, je les ai zappés. Hop. Alors, tabouret. Ouais, moi, je pense que l'argent... Eh, là, attends, tabouret. Ouais. Mais attends, Fildar, tu me prends quelqu'un d'autre. OK. D'accord ? OK. Non, non, mais... Eh, là, ça commence à bien faire ! Alors... Oh, bah, dis donc, Gérard, calme-toi. Bon, Gérard, là, on va pas avancer, quoi, si tu commences comme ça, sans déterminer. Non, mais, sans déconner, moi, je vais te dire une chose... Sans déconner... Bon, ça y est... Mais, Gérard, ça fait 8 minutes qu'on attend le débat, ça commence ! Alors, tabouret ? Ouais, bah, moi, je pense que l'argent fait le bonheur de ceux qu'on n'ont et le malheur de ceux qu'on n'ont pas. Tu peux expliquer ? Bah, comme disait Coluche, quoi, l'argent fait pas le bonheur des pauvres. D'accord. Euh, sandwich ? Bah, écoute, moi, je crois que l'argent fait pas vraiment le bonheur, parce que c'est pas parce que t'as du fric que tu vas être heureux, quoi. D'ailleurs, si t'as des problèmes de santé ou même si t'as pas d'amis, je veux dire, tu te méfies, quoi. Ah, voilà ! Voilà ce que... Oh, qui c'est qui a un portable, là ? C'est moi, c'est moi, j'ai un petit... Bah, c'est, euh, sandwich. J'ai rappelé, mais c'est toujours pareil, je suis désolé. Bon. Là, je peux vraiment pas faire mieux, hein. D'accord. Euh, tu... Tu me fais bander, là ? Ouais, ouais, ouais. Enfin, moi, j'ai pas beaucoup d'argent, mais je veux dire, moi, je suis heureuse dans ma vie, et puis, de toute façon, quand on est trop riche, on a plein d'hypocrites autour de nous. Voilà. Euh, Ozaï ? Ouais, bah, c'est un peu ce qui m'est arrivé, moi, ça m'a fait mon malheur, parce que j'ai fait un gros héritage, et depuis que j'ai plein de thunes, et bah, tout le monde arrête pas d'essayer de me taper, parce qu'il y a ma famille, mes amis, et voilà. La nuit, vous ? Ouais, y a pas que moi, hein. Ouais, bah, ouais. Bah, ouais, hein. Non, euh... J'ai la carte, euh, Rigo, oui. Y a une question sur IRC, c'est Oxip qui te demande s'il faut beaucoup d'argent pour être pauvre. Euh, ça, je vais répondre. Oh ! Tu sais qui veut répondre à ma place, là ? Toi. Non, mais, euh, faudrait peut-être... Ton cerveau. Attends, mon cerveau, tu sais ce qu'il te dit, toi ? Pas grand-chose. Il me dit, euh... Oh, ouais, Fildar ! Fildar, on commence pas la première question avec des gens pourris, hein. Bah non, mais c'est des gens que j'ai pris sur les 24 lignes, j'essaie d'en trouver d'autres, Gérard. Alors, euh, Tony, pour l'instant, tu t'écrases. Mais il est pas là, Tony, Gérard. Il est pas là. Alors, euh, j'ai... j'ai carte... Marais. J'ai carte Marais. Euh, si tu le dis, mais moi, en fait, moi, j'ai eu le même problème que... Je crois que c'est Oseille. J'ai le fils de milliardaire. Je n'aimerais pas la marque. Et, euh, bah, il y a plein de gens autour de moi qui savent ne pas que c'est mon pognon et c'est l'or. Bon, alors, euh... D'accord. T'as pas 10 balles ? Euh... Je peux te faire un million. Euh, par contre, qui c'est qui a un sandwich, je pense, qui avait posé une... qui avait répondu à la question. Oui, c'est... Et quand t'as des amis, t'as... Et quand t'as de l'argent, t'as des amis. Et quand t'as pas d'argent, t'as plus d'amis, c'est ça ? Non, mais ce que je veux dire, c'est pas parce que t'as du fric que tu vas forcément avoir de bons amis, hein. Non, mais... Ouais. Non, mais, attendez, attendez. J'étais un peu d'accord. J'étais un peu d'accord avec la personne qui avait répondu comme quoi on avait des hypocrites, mais je suis un peu d'accord avec elle, c'est vrai, hein. Bon, alors, moi... Les gens, ils n'y aiment rien pour ton fric, quoi. Hum ? Non, mais, Malheur, il y a une question que... Oh, mais, c'est quoi, là, le son, là ? Bah, écoute, le son, il est comme il est, hein. Il faut s'en accommoder, puis y aller, quoi, hein. Non, mais, Gérard, excuse-moi, je peux raccrocher, hein ? Non, non, non, non, non, non, non, non. Gérard ? Euh, oui, Rigo ? Oui, à propos d'argent, il y a Yankee sur IRC qui te demande combien t'as payé pour animer les débats. Alors, ça, ça regarde personne, et c'est tout. Donc, sa question ne tient pas debout. Donc, je vais répondre à peu près à la question. Vas-y. Donc, alors, pour vous, l'argent peut-il le bonheur ? De toute manière, je vais répondre la question à Sandwich. Hum, hum. Vas-y, vas-y, vas-y. Euh, donc, moi, je peux dire une chose. C'est quand t'as des amis, tu as de l'argent, et quand t'as pas d'argent, tu n'as plus personne. Donc, tu te démerdes toi-même. Ouais. Ouais. Hein ? Donc, ça veut dire ? Ouais. Bon, allez, vous arrêtez, là, parce que vous commencez à me casser les couilles. Tout à fait, ouais. Non, mais ils t'écoutent. Vas-y, Gérard, continue. Ouais, ouais, attends. Continue ce que tu voulais dire. Ah, ah, hum, hum, hum. Non, mais... Je veux dire pas, là, à ces auditeurs, c'est qui qui les a choisis ? Ben, j'en sais rien, moi, continue. Donc, c'est pas la peine d'essayer de vouloir me contredire. Donc, là-dessus, quand t'as de l'argent, t'auras toujours quelqu'un qui t'aidera. Ta gueule, toi ! Bon, alors, vous me faites chier, je réponds pas à la question. Mais vas-y ! Non, non, non, non, non. Non, pour l'instant, vous déconnez ! Vous avez pas à commencer comme ça, tous les deux ! Parce que sinon, je vous balance ! Ok ? Mais arrête de gueuler, on n'a rien fait ! C'est toi qui crie tout seul, là ! Non, non, non, non, pour l'instant, qu'est-ce que tu me fais, là ? Ben, je fais rien, je vais couper les auditeurs pour qu'ils répondent à la question. Arrête de gueuler ! Arrête de gueuler ! C'est bon, il faut les couper. Mais ils sont coupés ! Non, non, tu es... Non, mais au moins ça, parce que sinon, il est minuit et demi, on tiendra pas. Pour l'instant, Manu, tu as... Ils sont coupés, tu réponds pas à la question, Gérard, j'y peux rien, après. Non, Manu ! Mais crie pas, il n'y a pas besoin de crier pour parler. Punaise, mais... Eh, Manu, toi, je crois que ça va être pareil, hein. Allez, vas-y. Donc, alors, je vais répondre à Sandwich. Vas-y, Gérard ! Non, mais attends, tu permets ? Ben, vas-y ! Ben, ça fait qu'un quart d'heure qu'on a démarré, d'accord ? Mais pour l'instant, ça fait un quart d'heure que tu me fais de la merde ! Ben, un quart d'heure que t'avances pas, aussi. Ouais, mais ça fait un quart d'heure que t'es en train de me faire de la merde ! Gérard, tu peux parler du débat et arrêter de parler de l'équipe ? Ouais, mais attends, pourquoi ? Non, mais là, tu continues, parle du débat, on fait le débat. Non, mais attends, Rigaud ! Rigaud, pour l'instant, il n'y a que toi qui fais du bon boulot, les deux autres, là, pour l'instant, nous font de la merde ! Ok ? Alors, c'est clair et net. Ou on travaille en équipe, on fait du bon boulot, ou on travaille pas ! Un patron, il s'énerve pas, il gueule pas ! Il n'y a pas besoin de gueuler ! Hein ? D'accord, Manu ? Ça y est ? D'accord, Pildar ? Ah, moi, je suis ok, hein ! D'accord, Gérard ? Bon, alors maintenant, il n'y a que Rigaud qui va faire du bon boulot. Comme d'hab ! D'accord, ok ! Vous faites de la merde, les mecs ! Nous, on fait rien ! Ouais, pour l'instant, vous me faites de la merde ! Bon, on y va, on y va, on y va, on y va, on y va ! Quand tu fais ton débat, parle pas de ce qui se passe ici, passe plutôt aux auditeurs, à ceux qui écoutent la radio. Alors, avez-vous de l'argent de poche par vos parents ? On m'a demandé un tabouret ! Ouais, non, moi, je travaille, donc mes parents ne me donnent pas d'argent. Je suis bien toute seule à mes besoins. Ouais, mais... d'accord. Ouais, mais quand j'étais petite, ouais, ils m'en donnaient un peu, ouais. Ah, voilà ! Je piquais dans le porte-monnaie de ma mère. C'est qui, celui-là, qui dit tout à fait ? Bah, c'est vrai ! Quand elle était gamine, tout à fait, il lui donnait de l'argent. Non, mais attends ! C'est qui, là ? C'est qui qu'on récupère ? Non, non, c'est... Attends, que je retrouve... Apparemment, tiens, je t'ai récupéré un truc. Oui, c'est ce que j'ai déguisé. Spécial sur l'Internet, avec... J'ai récupéré l'adresse. Et là, t'as des questions... Il y a des trucs qui ont été faits, c'est sur le... C'est pour l'euro. Il y a un 36, un www.euro. C'est des questions qu'ils posent sur l'agence, sur des jeunes étudiants. C'est marqué où, www.euro ? Non, c'est pas marqué, là, mais... C'est là où ça a été pris. Je l'ai récupéré, ça, sur le site de l'euro. D'accord. Sandwich ? Sandwich ! Oui, oui, je suis là, Gérard. Bon, tu réponds à la question, ou pas ? Bah, écoute, tu m'as coupé dans mon élan. J'étais en train de parler, je t'explique, quand même. Alors, j'étais en train de te dire que j'étais plus chez moi, et que, bon, bah, je travaille, mais étant petite, moi aussi, j'avais un peu d'argent de poche, mais... C'est pas la grosse fortune, quoi, quand même. Hum. Voilà. Tu me fais bander ? Bah, non, mes parents me donnent pas d'argent tous les mois, mais quand je leur demande, ils me le donnent facilement. Ouais. Ouais. Euh, Oseille ? Ouais, alors, tu m'entends ? Ouais. Ce qui se passe, c'est que moi, j'ai fait un héritage, donc, en fait, je suis... Bon, alors, Oseille ! Oseille, ton héritage, on n'en a rien à foutre, OK ? Alors, tu vas avoir... Non, non, tu vas avoir pile d'or au standard. Attends, il répond à la question, et toi, tu t'énerves. On n'a pas le droit d'être riche, dans le débat ? Alors, ouais, c'est vrai. Non, mais attends, on parle pas d'héritage ! Bah, écoute, écoute... Je te demande, avez-vous eu de l'argent de poche par vos parents ? Eh ben, il a eu un héritage ! Pourquoi ? Parce que t'as eu un héritage, toi ? Eh ben, ouais. Bah, ouais. Eh, alors ? C'est que là, j'en veux pas de ça ! Et maintenant, attends, je t'explique, maintenant, c'est moi qui donne de l'argent de poche à mes parents, parce qu'ils se sentent... Non, mais c'est ça, allez, hop ! Allez, hop, bonne nuit ! C'est sympa ! Allez, hop ! Allez, hop, Gérard, Gérard, Gérard ! Allez, hop, Gérard, Gérard, Gérard ! Ça y est, je l'ai viré, Gérard. Non, mais là, tu vas pas commencer, toi. Non, bah, je vais lui repiquer ses thunes, et puis il aura pu dire... Non, non, mais tu te démerdes ! D'accord. Eh là, vous me faites du bon boulot, parce que, pour l'instant, vous commencez à me... À Brèges ! Comment ? Non, elle dit, continue la question. Non, elle dit à Brèges ! Ouais, bah, c'est un peu... À Liège ! À Liège, en Belgique, je crois qu'elle est belge. Oh, ouais, c'est ça, t'as raison, Manu. Fous-toi bien de ma gueule ! Ouais, ouais, c'est ça. Ah, le métro, deux secondes. Euh, j'ai les cartes marées. Non, j'ai les cartes marées. J'ai les cartes marées, c'est vrai. J'ai les cartes marées, vas-y. Bah, en fait, moi, je t'ai dit, je suis fils d'Axel, de milliardaire, et moi, en fait, je cite pas de marque, j'envoie mes domestiques travailler à ma place, au McDo, pour qu'ils me gagnent de l'argent de poche. Putain, mais vous savez... Eh, vous savez ce que c'est, un débat ? Bah, moi, je te réponds à la question que tu poses ici. Non, mais moi, je te demande, est-ce que tu sais ce que c'est, un débat ? Oui, un débat, on pose une question et j'en réponds. Ouais, et bah, pour l'instant, t'es à moitié dehors. J'ai pas besoin d'argent de poche de mes parents, puisque j'envoie mes domestiques travailler. D'accord, allez-y, allez-y, faites de la scène. Moi, là, je dis, l'équipe va pas. Comment ? L'équipe, elle va pas, là. Ouais, bah, pour l'instant, c'est vous qui allez pas. J'ai répondu aux questions. Euh, qu'est-ce que c'est ? Tabouret, je pense qu'elle a répondu. Donc, à la place de Tony, on accueille J'ai pas une thune. Ouais, ouais, mais attends, Fildar. Oui. Non, non, non, non, non. Non, non, Fildar. Non, non, non, non, non. Non, Fildar. Mais pourquoi ? Fildar, non. Non, je te dis. Il t'a dit non. Tu vois, parce que là, pour l'instant, t'as pas viré, tu l'as pas viré, tu l'as fait prendre sur un autre nom. Pas du tout, bonsoir. T'es en mon cul, Tony. Alors, c'est pas la peine. Non, non, non, non, non, non, non, non, non. Moi, je... Non, non, je travaille pas. Je travaille pas comme ça. Bon, alors, on reprend tabouret, sandwich. Euh... Non, non, mais tu vas sur les 24. Oui, bah oui, sur les 24. Je monte sur les 24. Ouais, bah, tu te dépêches. Parce que, pour l'instant, pour l'instant, je crois qu'avec Manu, j'ai dit, on fait du bon travail ce soir. Oui, mais là, Gérard, c'est toi qui avances pas, quoi. Il l'a viré, maintenant, Tony. Alors, on y va. Non, mais attends, pour l'instant, il reprend sur un autre nom. Non, non, moi, je suis pas d'accord. Je suis pas d'accord. Gérard, il y a plein de questions sur l'IRC, donc je vais en lire une vite fait. Il y a Kenéda qui te demande combien tu donnes d'argent de poche à Sandy pour qu'elle reste avec toi. Alors, à Sandy, ça, ça regarde personne, donc c'est mon problème personnel, donc... C'est un problème, quand même, alors. Non, non, mais ça, ça regarde personne. Ouais, mais c'est toi, même, tu dis, c'est un problème. Ça regarde pas les auditeurs, donc, ça questionne, j'y réponds pas. Après, Rigo ? Quoi ? D'autres questions, non ? Si, si, peut-on acheter de l'intelligence avec son argent de poche ? Demande Blouder. De l'intelligence, je pense pas, non. Non ? Non, après ? Non, et je sais plus qui c'est qui me demandait combien d'argent t'avais pris dans la poche de Christine. De Christine, alors ça, tu vois, le mec, celui qui parle de Christine, il va... Il va faire du bonheur. Ouais, ben, bien sûr... En monnaie ! Donc, si c'est pour entendre des conneries comme ça, c'est pas la peine. Donc, alors, je peux vous dire une chose, avez-vous de l'argent de poche par vos parents, donc, ça dépend des parents, parce qu'il y a des parents qui peuvent vous donner jusqu'à 50 francs, d'autres qui vous donnent rien du tout, donc, là-dessus, c'est des parents qui sont pas très riches. Ben, moi, parce qu'ils veulent pas. Ben, ouais, c'est qu'ils veulent pas, toi... Non, mais il y a des parents qui veulent pas donner d'argent de poche à leurs enfants. Ouais, mais ça, c'est... Ils préfèrent qu'ils le gagnent par eux-mêmes, en faisant des petits boulots. Ouais, mais ça, de toute manière, si les parents n'aident pas leurs enfants pour trouver quelque chose, je pense qu'on n'y arrivera pas. C'est-à-dire ? Donc, pour que les jeunes aillent de l'argent, il faut quand même que les parents soient derrière pour les aider. Ouais, mais tu vois... Parce que si on n'a pas... C'est peut-être que de les aider, il faut qu'ils aillent trouver un petit boulot. Ouais, mais si on n'a pas de parents... Ouais. Donc, tu peux pas avoir d'argent pour les aider. Tu comprends ? Ouais, ouais, ouais, je comprends, je comprends, je t'écoute. Toi aussi ? Ouais. Donc, si t'as des parents qui veulent te donner de l'argent, ils seront là. Moi, je comprends pas, j'ai pas... Ben si, ben... Attends... Si t'as pas de parents, ils peuvent pas te donner d'argent de poche, regarde. Ah ouais, voilà. Donc, ils peuvent pas t'aider. T'es obligé de le voler. Pareil, euh... Non. Quoi, dans la poche de ton ex ? Non, non, non. Non, non, y a pas de voler. C'est que là, bon, ben, tu fais carrément la manche. T'es le distor. Non, non, non, t'es pas obligé de faire la manche comme tes gamins, que t'as pas de parents. Attends, attends, si, si, si, si, si, si. Tu fais des petits boulots. Mais oui, non, non, non. Tu livres du lait, tu t'achètes des gens. Non, non, non, non, t'as des gens qui font la manche, je veux pas dire... Ouais, mais on parle de l'argent de poche. On parle pas des S9. Les S9, ils veulent pas de l'argent de poche. Quand ils sont dans la rue, ils veulent de l'argent pour manger, nuance. Bon, Rigo, tu voulais rajouter quelque chose ? Ouais, je voulais te demander comment on fait si on a des parents, mais qui sont pauvres et qui peuvent pas te donner de l'argent de poche. Ben, le problème, c'est que tu reviens à la manche. Ah, tu vas faire la manche, finalement. Ben oui. T'as pas assez de thunes pour aller en Méditerranée, donc t'es baisé, quoi. Voilà. Alors, troisième question. Vas-y. Je te refais une liste, Gérard. T'inquiète pas, ça arrive. Donc, on a toujours tabouret, sandwich, tu me fais bander. À la place de Oseille, il n'y a pas rappelé. Oui, bonsoir. Oui, bonsoir. Et on a toujours G4 Marais, voilà. Ouais. Toujours là. Oui, salut. En espérant que... T'en es sûr de ce que tu me racontes, Filtre ? C'est-à-dire ? T'en es vraiment sûr des noms, là ? Ben oui. Ouais, ben, je pense que... Pour l'instant... Manu. T'as prévu, Gérard, que tu peux te dépêcher. Non, non, mais si t'as envie d'aller pousser... Non, non, non, non, non, non, non, non, non, non. Non. Non. Non, mais dépêche-toi un petit peu, parce que quand même, il est une heure, et si on continue comme ça, on va pas y arriver. Attends, si t'es pas contente... Et si vous êtes pas contentes dans ces cas-là... Non, non, je suis très content, mais bon, tu fais du boulot. Bon, alors, si t'es... Alors, toi, c'est qui, toi ? T'es qui, toi, qui vient de dire ça ? C'est un bon auditeur. Ouais. Qui tient rien. T'as la liste. C'est la police, un peu, Gégé, ça va plus, là. Non, non, mais de toute manière, ça va être Fildar. Maintenant, Fildar... Non, c'est pas Fildar. Arrête avec Fildar. Ok, mais vous vous calmez derrière, s'il vous plaît, c'est moi qui commande le jeudi. Bon, la question, c'est... Gérard, j'ai une bonne question, là, sur IRC. Voilà. Y a Turpentine qui te demande comment on fait pour avoir de l'argent de poche quand on a pas de poche. Ah, tu peux acheter en fait. Comment ? Tu peux acheter en fait. Mais c'est... Tu piasses dans le sac. Non, tu peux acheter un sac. Ouais, ben, le mieux, c'est de voler dans un sac à main. Et c'est pas tellement... C'est pas tellement recommandé. Ouais, non, faut pas le faire, même, ouais. Quoi, tu dis aux gens de voler dans un sac à main ? Non, non, non, non, non, même... Je le déconseille. Je le déconseille complètement. Alors, donc, troisième question. Est-ce que... Est-ce que vous travaillez pour avoir de l'argent ? On va demander à Tabouret. Ouais, ouais, moi, je travaille. Et je gagne de l'argent. Sans indiscrétion, tu fais quoi comme travail ? Ben, je trouve que c'est indiscret, donc... Je te réponds pas. D'accord. Alors, dans ces cas-là... Non, j'ai pas envie de te dire ce que je fais. Je trouve ça indiscret. Parce que, bon, c'est pas... C'est pas quelque chose dont on parle à la radio si facilement. Bon, attends. Dans ces cas-là, quand Max... Quand Max vous demande ce que vous faites comme boulot, vous lui répondez. Et quand c'est moi, vous me répondez non. Non, mais... C'est pas du tout ça. C'est bon, Tabouret. C'est bon. Sandwich. Sandwich. Sandwich. J'en ai pas non plus. Sandwich. Tu vois comment faire ? Je suis là, je suis là. Oui, moi, je travaille, oui. Et sans indiscrétion, tu fais quoi ? Moi, je suis secrétaire dans une entreprise. Voilà. Tu me fais bonder ? Ben, je travaille pas, mais voilà. Et tu cherches quelque chose ? Non, pas pour l'instant, d'abord. Non, mais pour l'instant, tu t'empoutes, tu te dis... Je touche plus par le chômage, c'est pas la peine que je travaille. Non, attends, je... Non, euh... T'es étudiante, à mon avis ? Oui. Dix ? Euh... Dix-deux ans, ouais. Ok. Euh... Gérard ? Oui ? Sur IRC, il y a Philippe Détoubifry, le vrai, qui te demande combien tu serais prêt à payer pour virer Fildar. Bonne question. Ça, j'attends toujours. Apparemment, on devait nous trouver d'autres personnes pour remplacer Fildar, parce que... Non, mais c'est pas le débat. Non, mais c'est pas ça, la question. La question, c'est combien tu paierais pour le virer. Oh, mais moi, je paye pas, c'est pas à moi de le payer, c'est à la direction. Ok. Donc, euh... J'ai carte marée, là, je sais pas quoi. Allô, oui, je suis... Tu vois, j'ai pas besoin de travailler, parce que je suis milliardaire, en fait, et je vis de l'argent que je place en bourse, et je comprends vraiment pas que les pauvres travaillent, parce que c'est si facile de gagner de l'argent en bourse. Non, mais attends, tu... Eh, tu te fous de ma gueule, à 19h, t'es... À 19 ans... À 19 ans, t'es milliardaire... À 19 ans, t'es milliardaire... Ah, oui, parce que je suis le fils d'Axel... Tu vois, je suis un fils de milliardaire... Ouais, bah, alors, pour l'instant, tu vas fermer ta gueule... D'accord ? Tu vas fermer ta gueule, parce que pour l'instant, t'es en train de me dire des conneries. D'accord ? Comment ? C'est quand même le fils du boss, hein. Ça peut aller loin, Gérard, s'il y a... Ouais, non, mais attends... Mais attends... Comment ? Ouais, t'as raison. Eh, ma mère ! Ma mère, tu sais ce qu'elle est ? Eh, je t'en meurs, c'est une pute ! Eh, bah, la tienne, elle t'en meurt, espèce de salope ! Allez, vous me faites chier ! Ça, c'est des filles, ça... Hop, terminé ! Je vous répondrai pas ! Oh, mais si, Gérard ! Non, non, non ! Castez-vous le plus souvent avec votre argent ! Hop ! Avant la question, Gérard, il y a une autre question de l'IRC, de Chocobo Gold, qui te demande combien il doit payer pour avoir l'honneur ou l'horreur de te rencontrer. Zéro franc ! Eh, Fildar ! Oui ? Fildar ! Fildar, maintenant, tu vas prendre 24 lignes, et tu vas te manier le cul, parce que là, tu commences à me faire du boulot de merde ! D'accord, je... Il est zéro heure ! Il est presque une heure du matin ! Ouais ? Pour l'instant, tu me donnes que des cons ! D'accord, bah, je vais essayer de trouver des gens intelligents, d'accord ? Ouais, ouais ! Non, non, mais, hé, là ! Gérard ? Oui, mais j'arrête pas de rappeler ! Gérard, depuis que t'as dit qu'on pouvait te rencontrer gratos, ils veulent tous te rencontrer, et il y en a un maximum qui vont venir devant la radio. T'es énervé ? T'es énervé ? Ouais, je suis énervé, pourquoi ? Parce que, normalement, j'ai eu Manu ! Avec Manu, il m'a dit qu'il me faisait du bon boulot ! Attends, il fait du bon travail ! Tu t'énerves pour rien, tu réponds jamais aux questions ! Il me fait du boulot de merde ! Non, mais t'arrêtes pas, il s'en fait une demi-heure ! Mais il me fait du boulot de merde ! Ça fait une demi-heure que je t'écoute, ça fait une demi-heure que je t'entends le cul gueuler, j'en ai rien vu ! Moi, je zappe, j'écoute pas, ce soir, y a pas d'audience ! Et alors ? Non, c'est pas de sa faute, c'est de la tienne, tu t'énerves, tu n'arrives pas à gérer ! Tu gères pas ton débat ! Je te repasse encore la liste, une dernière fois ! Vas-y, vas-y, trouve-moi des auditeurs, et pas des... Non, non, non, non, prends pas les mêmes, et demande pas qu'ils changent leur nom ! Poussin, bonjour ! Salut ! Voilà, merci ! On va mettre un disque après, parce que là... De toute manière, c'est maintenant ! On va peut-être... On va peut-être accueillir les auditeurs, et tu vas poser des questions pour qu'ils réfléchissent, bah si ! Cachez-vous avec votre argent de poche, cachez-vous le plus souvent avec votre argent, et on s'écoute ! On s'écoute, j'ai pas de tude pour me faire tirer l'arrêt avec des petits suisses ! Bah ouais ! Eh, c'est pas mal, parce que là, j'ai aucune fiche pour annoncer les disques, donc vous pouvez nous appeler au 0803 085000 et 0870 5000 ! Et voilà, donc, toujours le débat de Gérard, il est 1h03 du matin, donc vous pouvez toujours nous appeler au 0803 085000, même si ça répond pas, ce n'est pas grave, donc, ou sinon, au 0870 5000... Et c'est fan radio, quand même ! La radio où tu bosses, c'est fan radio ! Toujours, toujours, toujours, Rigo qui vous attend sur l'IRC www.fr ! Ouais ! Et donc, vous êtes bien sur un fan radio... Ouais, on est 3482-4, donc on y va, on fait ça bien ! C'est pas mal, c'est pas mal ! Gérard, on fait ça bien ! Donc... On l'écoute même pas ! Si, si, si, j'ai entendu, Rigo, 3000... Non, mais le débat, il va bien se passer ! Ouais, mais j'espère ! Si, si ! J'espère ! Je l'espère, parce que si ça se passe mal, la semaine prochaine, il n'y aura rien ! De toute manière, comme ça va être bientôt les vacances de Noël, donc... C'est pas le débat, ça, Gérard ! On va se mettre un peu en vacances ! On va écueillir Poussin, 20 ans de besoins, donc on peut écouter un peu de radio sur 100.9. Poussin, bonjour ! Salut, Gégé ! Bon, allez, vous arrêtez derrière, parce que là, vous commencez à me casser les couilles ! Ok ! La suite, donc, on a toujours Tabouret, Gérard ? Tabouret, 10 demandes d'Axe, c'est bien, parce que tu pourrais me mettre les fréquences, Ah, si ça ne te dérange pas, Pildar ! Non, mais ce n'est pas grave, on va la trouver, vas-y ! Celui d'après, c'est qui ? Sandwich, 23 ans de tour ! Oui, salut, Gérard ! Tu me fais bander ! Ouais, salut ! Non, mais tu peux répondre comme il faut ? Bah oui ! Bonjour, Gérard ! Bonsoir, Gérard ! Pas à pluie ! Oui, enchanté de pouvoir enfin te parler, Gérard ! De 21 ans, Royan ! Ça fait ! Et... Camembert ! Bonsoir, je suis Camembert, j'appelle de Chuby, j'ai 19 ans. Ouais, et... Ah, 19 ans ? C'est bizarre, parce que j'ai 20 ans, moi ! Je me suis trompé, je suis désolé ! Non, mais... C'est rien ! C'est rien, c'est rien ! Arrête de t'acharner sur lui, on a l'impression que c'est une bête fauve, c'est bon, fous-lui la paix ! Fous-lui la paix, Gérard, Pildar ! Ouais, mais attends ! Tu me donnes bien les fréquences ! Mais alors ? Toi, t'écoches bien les noms, toi tu fais bien des fautes de français, je te dis pas, t'es gentil, quand tu vas faire de la radio, tu fais pas de fautes de français ! Alors, Camembert, 20 ans, de Chuby-Z, donc on peut écouter plein de radios sur 101.9. C'est FM. Hein ? T'es gentil, quand tu dis 101.9, c'est FM, si c'est pour dire n'importe quoi, Gérard, tu les dis pas. 101, 101.9, FM. Voilà ! Voilà, il faut être précis. Si ça te plaît pas, c'est le même prix, Camembert. Allez, ça recommence. D'accord ! Et je la regarde tous les vendredis soir. Comment ? Je regarde ton émission tous les jeudis soir. D'accord ! Donc, t'as tes PS ? Bah ouais, je regarde celle-ci. Ouais, bah... Eh ! Eh ! Eh ! Stop ! Stop ! Y'a une chose que j'ai oubliée, pour tous les auditeurs... Vous y allez plus. Pour... Manu, tu me l'es mis en attente ? Ça y est. Donc, pour tous les éditeurs de Fun, qui écoutent à l'heure actuelle Max, le Sarc Système, dans 10 minutes... Vous avez Techno Max sur M6. Donc... Et pour le moment, c'est le débat, hein. Ouais, c'est quand même ton débat, quoi. Et on reprend le débat. Donc, cachez-vous le plus souvent avec votre argent. On va demander à Poussin. Oui ? Oui, Poussin. Oui, Poussin. C'est quand tu veux, tu réponds. Bah, qu'est-ce que j'achète le plus souvent ? Bah, des fringues, du maquillage. Et puis, bah, c'est tout. Ouais, ouais, ouais. Et puis, bah, c'est tout. Et puis, bah, c'est tout. Et puis, bah, c'est tout. Et puis, bah, c'est tout. Et puis, bah, c'est tout. Et à boire. Qu'on boive en boîte. Et puis, des clopes. Et puis, des clopes. Et puis, des clopes. D'accord. T'achètes pas mal de trucs, elle, quand même, hein. D'accord. D'accord. T'achètes pas mal de trucs, elle, quand même, hein. Ouais, ouais. Ouais, ouais. Non, mais, de manière... Je répondrai moins. Ouais, ouais. Non, mais, de manière... Je répondrai moins. Ouais, ouais. Non, mais, de manière... Je répondrai moins. D'accord. Euh, t'as bourré. Ouais, bah, moi, j'achète à bouffer, parce que... Il faut que je me nourrisse et mon loyer, là, aussi. Il faut que je paye mon loyer. Donc, tu vois, j'ai pas trop de fric pour m'acheter des fringues, ni du maquillage, ni... Non, mais, attends. À 19 ans... ... acheter à bouffer, enfin... T'as bourré. T'as bourré. T'as bourré. Ouais, ouais. T'as bourré. Oui. Pour l'instant, t'es étudiante, toi ? Non, pas du tout. Je travaille. Qu'est-ce que tu crois ? C'est pas parce qu'on a 19 ans qu'on est étudiant, hein. Non, mais, eh... Tout à l'heure. Tout à l'heure. Non, mais, eh... Tout à l'heure. Tout à l'heure. Maintenant, je me démerde. Mes parents m'ont foutu dehors. Donc, je me démerde. C'est tout. Ouais, non, mais, attends. Attends. T'as bourré. T'as bourré. Ça, c'est... C'est un truc que... Quoi ? Je veux pas parler. Donc, dans ces cas-là, t'avais qu'à... Quand je t'ai demandé : "Avez-vous de l'argent de poste par vos parents ?" Ouais. Donc, t'aurais pu me répondre correctement à la question. Bah, je t'ai répondu correctement. Je t'ai dit que je travaillais, que mes parents m'en donnaient pas. Hum-hum. Et... Ouais. Et... Ouais. Ouais. Ouais. Ouais. par vos parents. Donc, tu auras pu me répondre correctement à la question. Je t'ai répondu correctement. Je t'ai dit que je travaillais, que mes parents ne m'en donnaient pas. Non, non, mais ce n'est pas ce que je voulais faire. Bon. Donc, tu as bourré, toi, alors ? Oui, je t'ai dit. Il faut que je me nourrisse. C'est tout. Ça part de là. Mais vas-y, passe à autre chose. C'est lourd. Oui, mais ça, c'est... Fais gaffe, elle va tomber du tabouret, si tu comptes. Non, non, non, non, non, non. On rééquilibre la mortelle. Non, non, mais attends. Pour l'instant, son truc, il est foireux. Elle va réfléchir et on la reprendra. Non, non, non, non, non. Non, non, il n'est pas foireux. Mais vas-y, ne te l'amende pas, ce n'est pas grave. Non, non, mais ne t'inquiète pas, j'ai connu ta situation. Oui, mais c'est bien, je te l'amende pas, passe à autre chose. Ok. Sandwick ? Ben écoute, moi, déjà, j'ai mon loyer à payer. Et puis, en deuxième, j'ai des petits cadeaux à mon copain, du moins, mon nouveau petit copain, parce que je suis très attentionnée, voilà. D'accord. Tu me fais bonder ? Ouais, ben, j'achète des disques, des casquettes de théo, ben tout, quoi, les vêtements, tout ça. Ouais. Par à lui ? Ouais, ben moi, écoute, je dépense ma thune, quand même, pour sortir un petit peu, aller dans les boîtes, boire des coups, tout ça. Et, ben, quand même, il faut reconnaître que, je ne sais pas si tu vas encore poser ton boîte, mais ça, écoute, quand même, un maximum de fric. Ouais, mais... Ben, voilà. Non, mais attends. Quand t'es jeune, tout ton argent de poche, il passe dans le compot. Attends, quand t'as pas de fric, quand t'as pas de fric, comment tu peux faire pour aller en boîte ? Mais si, j'ai de l'argent de poche, même si j'en ai pas beaucoup, moi aussi, j'ai le droit de me déchirer un peu, quoi. Donc, voilà. Mais je viens de te poser la question, si tu n'as pas de fric, quand tu n'as pas d'argent, comment tu fais pour aller en boîte ? Ben, tu... Par exemple, j'ai des mecs qui bossent... Oh, le dernier, vous pouvez la fermer ! Tu connais, par exemple, des mecs qui bossent dans une radio et puis ils te font rentrer gratos à la boîte et ils te payent des coûts ? Bon, euh... Pas appuyé ! Ben, non, mais c'est un exemple, tu me demandes, moi. Je sais pas, cherche-toi, tu connais des gens de la radio, donc peut-être que tu peux rentrer gratuit et boire à l'oeil, j'en sais rien, moi. Non, non, attends... Je sais pas si t'as quand même remarqué, le prix des consos et le prix de l'argent en boîte, c'est quand même cher, tu peux pas dire le contraire. Non, mais si ! Le prix de l'argent, c'est inabordable. Le prix de l'argent... Non, mais attends... Je veux tirer 100 balles, ça t'en coûte 500, je veux dire, c'est quoi, ces histoires ? Attends, tu payes combien pour aller en boîte ? En général, vous aurez autour de 300 balles, ça dépend de la boîte, mais vous aurez autour de 300 balles, quoi. Ben ouais... Si tes parents te filent 50 balles et que la conso, c'est 50 balles, tu peux même pas boire dans la boîte, tu dois être obligé de boire dehors. Voilà, exactement. Camembert ! Je fais une collection et donc ça me coûte très cher d'acheter des choses pour la collection. En général, j'achète... Ouais, parce que je collectionne les ampoules. Alors j'achète beaucoup d'ampoules pour ma collection. Non, mais attends, Camembert, t'as bien compris la question ? Oui, je te dis, j'achète des ampoules pour ma collection. Gégé, pour une collection d'ampoules, c'est pas une lumière, hein. Non, mais pour un cent, je crois que t'es en dehors de la plaque. Non, mais attends, je te dis que j'achète des ampoules. Je pense... Non, mais attends, t'achètes des ampoules pour quoi faire ? Ben, je fais collection. T'es grillé, toi, ou quoi ? Non, attends, je suis grillé pour un cent, c'est toi qui es grillé. Non, l'auditeur est grillé. Il est grillé complet. C'est toi. Ben, dis-donc, c'est dis-donc, c'est... C'est toi qui es grillé parce que tu réponds pas à la question correctement. Bon, tu veux que je te dise quoi ? Que j'achète des disques, que je veux au ciné... Attends, c'est qui, là ? C'est Camembert. Attends, Camembert... T'as fermé ta boîte à Camembert. Tu as pas de poutre de ma gueule, tu vas répondre correctement à la question. Je vais te foutre de ta gueule, putain. Il y a pas de putain, d'accord ? D'accord. On dit moment de travail, OK, Tony ? Ah, non, non, c'est pas toi. Non, non, c'est pas Tony. Non, c'est pas moi, Tony, je te promets. Bon, ben, attends, je vois... Attends, c'est la voix de Tony. Tony, il a une voix de canard. Non, de toute manière, n'ayez crainte, j'ai l'impression que ce soir, vous avez envie de me faire chier. Et toi, c'est pas grave. Qu'est-ce que tu fais ? C'était quoi la question, déjà ? Parce que j'ai un peu oublié. Non, mais attends, toi, pour l'instant, c'est pas toi que je m'adresse. Moi, ce que je fais, c'est que je m'achète à bouffer et, bon, je me paye des vêtements. Tu fais des petits cadeaux. Oui, des cadeaux à 100 euros. On me demande combien ça te coûte de l'Adidas tous les mois. De l'Adidas tous les mois, pour l'instant, je n'en trouve pas dans les magasins. C'est ça qui m'emmerde. Tu veux le faire importer en France, non ? Parce que si tu n'en trouves pas en France, eh bien... Attends, toi, je vais te faire importer une voiture, toi. D'accord, c'est cool. Sinon, en parlant de petits cadeaux, tu fais bien des petits cadeaux à Sandy ou des trucs comme ça, non ? Ah oui, mais ça, Sandy, c'est différent. Bah non, c'est là où tu dépenses ton argent. C'est quand même dans le débat. Non, mais attends, Sandy, c'est différent. Sandy, c'est ma femme. Donc, à une femme, tu as le droit d'y faire ce que tu veux. Toi, par exemple, est-ce que tu fais des cadeaux à ta femme ? Non, jamais. Non ? Non. T'es un peu vache. Bah ouais. Moi, jamais. Même pas. Moi, j'aimerais bien avec des tresses. Même pas. Ou des chaussures compensées. Je ne sais pas. Filder, fais gaffe, parce que tout à l'heure, tu vas te prendre un café dans la tranche. Non, j'aimerais bien les tresses à ma copine. T'as même pas essayé d'y acheter un petit bouquet de fleurs à ta copine. Rien, rien, rien. Je suis un rat. Putain, t'es un rat d'un. Eh ouais, j'ai plein de filles, mais je garde tout pour ma gueule. Je suis un rat. T'es un rat d'un, Rigo. Oui, il y a Desesperado qui te demande combien t'as acheté samedi. Zéro franc. Ah bah ouais, on le savait. Ah si, ah si. Ah. Ah si, trois francs. Prix de gros. Ah bah non, trois francs. C'est dans le sentier, non ? Euh, Manu. Ah, j'ai rien mis. Alors là, j'ai rien fait. T'éteins ton micro, tu bosses. Quoi ? Trois francs, c'est quoi ? Pourquoi trois francs ? Trois francs, c'est le prix d'une lettre. Ah ! Il est malade ! Il y a Yannix qui te demande trois francs, ça fait combien en euros ? Alors, trois francs en euros, alors là, je peux pas lui répondre. 50 centimes, c'est la moitié. Ouais. Non, c'est 7 francs 50 l'euro. Non, c'est 6 francs 60 l'euro. Donc ça fait, ça fait 3 euros. Bon, j'ai un sondage sauf frais, sinon, concernant l'argent. À la question, avez-vous de l'argent, 15% des personnes répondent oui, 38,654% répondent des fois, 127% répondent 1, et 2% répondent j'aime pas, j'ai rien. C'est bien, si c'est même pas bas, qui reste chez eux. Ils y sont, je crois. Donc, pensez-vous, pensez-vous que sans argent, pensez-vous que sans argent, la vie serait plus dure ? On va demander à Poussin. De quoi ? De quoi ? J'ai pas entendu la question, j'ai pas entendu la question, j'étais avec Fildar. Ah, t'étais avec Fildar. Je vous demandais de se réveiller un peu, parce que, Gérard, si tu peux parler bien devant ton micro, par contre, ce serait super sympa. Pensez-vous que l'argent serait plus dur ? Pensez-vous que sans argent, la vie serait plus dure ? Bah ouais, c'est clair. Donc, tu peux préciser ? Bah, je peux préciser, en effet. Bah, l'argent, en fait, c'est matériel, quoi. Comment ça ? Eh bah, ça sert à vivre, sans ça, tu peux pas avoir une maison, à manger. Voilà, quand l'argent, t'es pas le bonhomme, il contribue. Ouais, mais sans argent, donc, tu fais quoi, alors ? Tu fais rien. Bah, sans argent, t'es à la rue, c'est clair, t'es sous les ponts. Hum, d'accord. OK, je vois à peu près ce que tu veux me dire. Tabouret ? Ouais, bah, moi, je pense que sans argent, la vie serait géniale. Y'avait pas d'argent, en fait, du tout. Donc, t'aurais pas besoin de payer pour avoir les choses, t'aurais les choses naturellement. Non, mais attends. Attends, tabouret. Oui ? T'as vraiment compris le sens de la question ? Oui, oui, j'ai compris. Je veux dire, si l'argent n'existait pas, bah, t'aurais pas de problème du tout pour acheter les choses, puisque t'aurais rien à acheter. T'aurais même pas à faire le geste, tout sera à toi. T'en fous ? Non, mais attends, je crois que, là, tabouret, ça m'étonnerait que tu comprennes ma question. Euh, sandwich ? Ouais, Gérard, je trouve que, déjà, la vie est assez dure comme ça. Déjà, rien qu'avec du fric. Alors, si on en avait pas, je crois que c'est la question. Ah, enfin ! Une qui répond bien à la question. Elle a un portable, c'est pour ça que t'as... C'est pas moi, hein ? On n'y peut rien, je suis désolé. Le sandwich, c'est avec un portable ? Oui. Ah là là, ah là là ! Non, j'avais bien précisé, lors des débats, pas de portable ! Bah oui, je suis déjà passée plusieurs fois, j'avais pas de portable avant, mais là, je suis désolée. Ouais, mais... C'est pas tellement aujourd'hui, hein ? Ah ouais, mais, dans ce cas-là, t'essayes de voir... Tu demandes à... à Fildar qui te rappelle sur une cabine téléphonique, parce que là... Non, mais là, j'ai l'air... Non, mais attends, là, dans ton portable... Non, mais attends ! Attends, sandwich ! Là, pour l'instant, dans ton portable, on entend ma voix. Oui. C'est agréable, quand même. Alors là, moi, ça me plaît pas. D'accord ? T'essaies de trouver une cabine téléphonique et tu dis à Fildar où qu'on peut t'appeler. C'est impossible. C'est impossible, Gérard, là. Ouais, ben, si. Y a rien qui est impossible. Gérard, sur Yanty, y a Yanty qui te demande comment tu fais sans argent pour payer ton portable. Alors, sans argent, ben, de toute manière... Euh... Une fois que la carte était à mon nez, ben, je la renouvelle pas. Alors, tu me fais bander. Ben ouais, ben, c'est clair, quand on a pas d'argent, on peut pas s'en sortir, mais... Si on a la volonté de réussir, et de travailler, c'est sûr qu'on peut en gagner facilement. Sondier, t'es grillé. Non, c'est pas Sondier, tu vois. C'est pas Sondier, là, qui est au téléphone. Donc, t'as tout pour celui qui dit que c'est Sondier. Parce que pour l'instant, Sondier, elle est en train de... Elle fait quoi, Sondier ? Pour l'instant, Sondier, elle t'emmerde. Mais ils ont rien dit, c'est pas grave. Non. Alors, pas à lui. Ouais, ben, écoute, bon, moi, je suis tout à fait d'accord avec lui. Je pense que, effectivement, sans argent, la vie est plus dure. Ça, je crois que c'est clair, c'est acquis. Par contre, ce qu'il faudrait savoir, savoir si c'est inné, d'ailleurs, c'est, est-ce qu'avec de l'argent, la vie est-elle plus molle ? Moi, je pense que c'est plutôt à ça qu'il faudrait s'intéresser. Je voudrais savoir ce que t'en penses. Non, mais, je te demande si, pour vous, pensez-vous que, sans argent, la vie est plus dure ? Tout à fait, tout à fait. Mais est-ce qu'elle est plus molle si t'en as, quoi, avec ? Attends, on te me dit, la vie sera plus dure, même que t'ailles avec de l'argent ou pas ? Parce que, je reviens, je reviens à une question. Est-ce que, pour, je ne sais même plus la question que j'avais répondue, de manière, voilà, pour vous, l'argent fait-il le bonheur ? De manière, je reprends les questions, donc, c'est à peu près à la question numéro un que tu veux répondre, toi. Non, ce que je voudrais savoir, en fait, c'est que tu parles de la vie est dure, est-ce que toi, t'es dur pour de l'argent, quoi ? Non, non, non, non, non, attends, tu deviens dur si on te donne de l'argent ou pas ? Non. Non ? Tu restes mou ? Non, mais moi, de manière, avec de l'argent, de manière, t'iras partout. Sans argent, t'auras rien. Et de manière, je reviens à la première question, pour vous, l'argent fait-il le bonheur ? De manière, je ne sais plus qui c'est qui m'avait posé la question, la question est simple. De manière, quand t'as de l'argent, t'as des amis, et quand t'as pas d'argent, tu n'as personne. Et ça, c'est un truc qui me dégoûte, c'est bien ça. Ça, c'est bien ça, parce que quand t'as de l'argent, tu as tout le monde qui vient te voir, qui vont venir te dire « Ah, bah oui, tiens, je réponds tout après. » Rigaud, oui ? Bah non, continue de répondre. Non, non, vas-y, vas-y. C'était juste Mulder, le vrai, sur l'IRC, qui te demande si tu penses que sans argent, t'aurais pu téléphoner tous les soirs à la fin de ta cabine. Ah, bah ça, de manière, vu que c'est un numéro vert, tu peux téléphoner, téléphoner comme tu veux. Il n'y a pas de problème, même avec une carte ou qu'il te reste une unité, tu peux appeler le 0875000, que si tu vois que ça sonne occupé, tu vas taper le service et t'insistes. Et Gérard, est-ce que tu penses que c'est la monnaie qui dirige le monde, c'est la monnaie qui dirige la Terre et qu'on ne peut rien y faire ? La vie, c'est comme ça, on n'a pas tout ce qu'on veut, mon gars. Qu'on le veuille ou non, quoi. De toute manière, maintenant, il faut... Non, mais... Non, mais il y a des trucs qui... qui sont assez durs à l'heure actuelle, c'est que maintenant, sans argent, tu ne peux rien faire. Donc toi, tu penses qu'il faut arrêter de compter à mon barrette et compter... Si tu n'as pas de caillasse, t'es un chien, hein ? Non, mais même... Si tu n'as pas de thune, tu ne vaux rien, c'est clair. Mais même, c'est pas parce que tu n'as pas de thune que tu ne vaux rien. C'est quand même beau, la vie, quoi. Viens voir le docteur, n'aie pas peur. Le docteur Doc, il n'est plus là. Tu viens d'avoir 15 ans, intéressant, quoi. Arrête tes conneries, Filder, s'il te plaît. Ah, il fait chaud, hein ? Non, il est grave. Pour l'instant, Filder, lui... Lui, il ferait mieux de se taire. Camembert, Camembert, pourquoi ? C'est un passement de jambe sur le bit de flambe, hein ? Comment ? C'est un passement de jambe sur le bit de flambe. Non, non, d'accord. Alors, Camembert, c'est terminé pour toi. Non, non, pour l'instant, tu viens de répondre à côté de la plateforme. J'ai compris la question, effectivement. Je pense que si on n'avait pas d'argent, moi, sans argent, je ne pourrais pas tâcher puisque je ne pourrais même pas avoir un téléphone puisqu'il faut déjà l'acheter avant de pouvoir faire le 0800. Non, non, non, non, non, non, non, non, non, non, non, non. Le téléphone, tu dois l'acheter. Non, tu n'as pas besoin d'acheter un téléphone. Le truc, une chose qu'il faut bien se dire dans sa tête, tu prends une carte, pour prendre une carte téléphonique et avec une carte téléphonique, tu peux avoir, tu peux l'avoir, le numéro. Parce que... Pour avoir une carte téléphonique, il faut l'acheter, même si tu n'as pas d'argent. Il faut l'acheter, même si tu n'as pas d'argent. Il faut l'acheter, même si tu n'as pas d'argent. Et s'il ne reste plus qu'une unité, il faut déjà l'acheter. Non, non, non, non, attends, le 0803-08-5000, il est gratuit. Donc moi, je peux te confirmer, moi, je l'ai déjà fait plus d'une fois, avec une unité. Oui, mais je suis d'accord. Non, non, mais attends, tiens mon verre, pour un instant, tu me laisses répondre. Je réponds à ta question, on est bien d'accord. Avec la carte, avec une unité, tu peux appeler toute la nuit, jusqu'à temps qu'on te réponde. Je suis d'accord, mais pour appeler, il faut déjà avoir une unité. Et pour avoir une unité, il faut déjà avoir acheté une carte. Et pour avoir acheté une carte, il faut avoir de l'argent. Bon, dans ce cas-là, t'essayes de voir si t'as des bons amis. De toute manière, les amis, il faut les compter sur les 5 doigts d'une main. On est d'accord, Camembert ? Nous sommes d'accord, mon petit Gégé. Donc, moi, pour l'instant, j'ai que 3 amis. Donc, sur 3 amis, je peux m'en sortir. Mais oui, mais moi, j'ai pas d'argent, donc j'ai pas d'argent. Donc, je peux pas me faire passer de carte. Mais non, mais attends, t'as des voisins ? Oui, mais non, je suis SDF. Non, mais attends, tu te fous de ma gueule, là, ou quoi ? Non, non, je t'appelle d'une cabine. Bah, la carte, je l'ai trouvée dans le nom de la cabine. Ah, il a du bol, quand même. Il a quand même un peu de bol, ce mec. J'ai peur qu'il me demande qui sont tes amis. Qui sont tes amis ? Mes amis sont... Je donnerai pas les noms à l'antenne. Non, mais tu donnes pas les noms. Non, mais je sais pas, ça peut être une voisine, ça peut être un copain, un copain d'école, j'en sais rien. Non, non, je donne pas les noms à l'antenne. Mais c'est pas des noms, ça, de dire que c'est ta voisine ou un copain d'école. C'est pas les noms, c'est de dire ce que c'est. Non, non, mais j'ai trois amis, et ces trois amis-là, j'y tiens. Atos, Porto, c'est Aramis, non ? Voilà. Tu peux me donner la petite fiche, là ? Ah, pour le disque ? Donc, pose la question. C'est la combien ? La sixième. Ah, encore quatre. Je taquine. Vas-y, pose. Alors, avoir un portable avec ou sans argent, peut-on y arriver ? Et on va s'écouter. Si quelqu'un veut gagner de la thune à ma place, c'est OK. Avec des cacahuètes en plus. Donc, vous pouvez toujours nous appeler au 0803 085000 et 0870 5000. Et toujours lire c'est www.fr. Et pour les Belges, 0033 147 259 50. Et on se retrouve tout de suite après. Et voilà, donc, vous venez d'écouter un remix qui a été fait par un auditeur, donc, deux sur moi, donc... Qui se vend sous le menton, je te rappelle. Donc, je sais pas qui c'est qui a fait ce remix. On sait pas non plus que ça se vend sur les marchés au puce. Ouais, c'est ça. Et donc, qu'est-ce que je voulais vous dire d'autre ? Donc, le premier disque, c'était si quelqu'un veut gagner de la thune avec ma place, c'est OK. Donc, avec des cacahuètes en plus. Donc, pour l'instant, vous pouvez toujours nous appeler au 0803 085000 et 0870 5000. Et toujours lire c'est www.fr. Rigo vous y attend. Voilà, et ça cartonne grave du fait que le débat s'est calmé. Il y a beaucoup plus de gens. On a dépassé les 4000 déjà. On est à 4122, moins en racine de 3. 4000, un 4, un 1. 4000, un 1. 4122. Racine de 3 qui vaut à 4 quand même. Non, non, 4122. Donc, alors, qu'est-ce que je voulais vous dire d'autre ? On va peut-être faire un petit sondage, non ? Un petit sondage, alors. Combien dépensez-vous d'argent par mois ? Donc, 50% dépensent plus de 100 000 euros. Donc, pour l'instant, l'euro, on n'y est pas encore. Oui, mais ça a été cherché sur le site de l'euro. C'est pour ça que c'est en... 1 euro. D'accord, Régo. Attends, il y a le métro, là. Je m'en fous. 20% dépensent moins de 3 francs. Ça, c'est pas beaucoup. Donc, ça, je ne sais pas. 25% veulent être payés pour répondre à la question. Ils vont se faire foutre. Que dalle. 5% pensent que Gérard de Suren gagne de trop. Alors, ça... Hop ! Qu'est-ce que t'en penses, toi ? Poubelle ! Qu'est-ce que t'en penses, Gérard de Suren ? Poubelle, c'est des conneries. Tu crois que tu ne gagnes pas assez ? Ça, c'est pas ton problème. C'est pas ton problème, c'est mon problème. Est-ce que t'aimerais être augmenté, alors ? Ça, tu peux le dire. La direction écoute. Ça, ça ne regarde personne. Si j'ai besoin de demander quelque chose, je passe par mon chef. Moi, je te dis, pour ce que tu fais, je donnerais beaucoup plus. Je te donnerais beaucoup plus d'argent. Toi, pour l'instant, tu fais déjà ton boulot. Je suis prêt à donner la moitié de ma paie, si tu comptes. Pour l'instant, donne... Attends, attends... C'était pour blaguer, vas-y. Non, non, non, non, non, non, non. Mes genoux. Gérard de Suren fout. Pensez-vous que l'argent est important ? Donc, 60% ne savent pas à quoi ça sert. C'est ça, à quoi l'argent ? En fin de compte, ça sert à manger. Donc, 20% préfèrent l'art. Alors là, je ne vois pas le rapport avec l'argent. Bah si, ils préfèrent l'art que les gens. L'argent. Bah, dans ces cas-là, 30% n'ont jamais répondu. Alors, est-ce que l'argent fait le bonheur ? Donc, c'était la question... C'était la question, la question, la question, la question... 1. Alors, donc, 50% ne savent pas ce que c'est le bonheur. C'est dommage, parce que le bonheur, ça n'arrive pas qu'aux autres. Ça peut arriver à tout le monde dans la vie. Et c'est simple. Et il y en a, il y en a qui se moquent parce qu'ils n'ont pas encore trouvé leurs chaussures à leurs pieds. N'est-ce pas, chef ? Allez, hop ! Oh, tu l'as cassé, hein ! Tu l'as cassé, hein ! On va te mettre un peu de... On va te mettre un peu de sucre, hein ! On va te mettre un peu de sucre sous les pieds. Ah, ça va donner un... Pour que tu trouves la chaussure, on va te mettre du sucre. Ne t'inquiète pas, tu vas la trouver. Tu vas voir. Je pense qu'avant... D'ici... D'ici le... 5 ou 10 ans, ça sera bon. Non, d'ici le 2-3 janvier, tu auras quelqu'un de sûr. Tu verras. Tu verras. Tu trouveras ton bonheur. Gérard, tu me dis, il y a Yankee qui te demande si le bonheur, pour toi, c'est pas de te payer un cerveau. Non. Moi, mon bonheur, je l'ai maintenant. Je suis tranquille. Ah, t'es insortable ? Non, mais moi, j'ai mon bonheur. Moi, j'ai pas eu... Moi, j'ai... J'ai trouvé la chaussure à mon pied. Ouais. Donc, le chef, il va la trouver pour le 2-3 janvier. Coupe-toi les ongles, quand même, des pieds. Non, non, mais... C'est des corps, à ce niveau-là. Non, non, mais faut qu'il essaye de voir. Tu mets des chaussures en transpiration ? 20% n'ont pas d'argent. Ça, c'est sûr que... Là-dessus, on peut rien faire. Et 30% ne comprennent pas la question. Alors, là... Ils sont cons, parce que c'est quand même simple. Parce que l'argent fait le bonheur. Le bonheur, c'est l'argent, c'est tout. Ouais, non, mais... Ils ne comprennent pas la question, donc c'est pas grave. Bon, on n'a pas d'argent, ça, c'est sûr que... De toute manière, avec... Si t'as pas d'argent, de toute manière, tu peux rien faire. De toute façon, c'est la conjoncture. Voilà. Avec Patel. Donc, on va... La conjoncture qui vit. Donc, on va récupérer Poussin. Allô ? Ouais, Poussin. Ouais, Poussin, ouais. Donc, tabouret. Ouais, toujours là. Sandwich. Toujours là aussi. Tu me fais bander. Toujours là aussi. Parapluie. Galopos. Et Camembert. Je suis dans ma cabine, c'est ça. C'est bon. C'est quoi, là ? Donc, Camembert, s'il repasse avec... Non, mais c'est pas Camembert, c'était une fille. Je sais pas si t'as remarqué, mais t'as quatre nanas, quand même. Quatre nanas. T'as quatre nanas, gamin. C'est parce que ça groove. Ça groove grave, là. Ça prend la couche. Tu vois, elle écoute de la musique, en plus. Faudrait peut-être qu'elle arrête aussi. Tu vois, ou tu me fais bander, t'arrêtes ta musique. Elle brandit, là. Voilà. Donc, avoir un portable... Elle est chouette, en plus. Merci, je peux poser la question ? Vas-y. Bon, oui. Avoir... Gérard ? Attends, il pose la question, Camembert. Vas-y, Gérard. Vas-y. Avoir un portable, avec ou sans argent, peut-on y arriver ? Oui. On va demander à Poussin. Moi, je pense que, déjà, quand on achète un portable, il faut avoir de l'argent. Et quand on vend un portable, il faut... Bah, il faut investir. Et que ça se réfléchit, quoi. Parce que, déjà, ça rapporte, quoi. Ouais, mais tu peux aller plus loin dans... Bah, pour m'analyser ? Bah... C'est vrai, c'est une analyse. Bah, aller plus loin, euh... Non, mais tu... Hé, Fildard. Tu coupes la personne qui s'amuse à dire ça, et tu coupes ton micro quand je parle. D'accord. Je vous rends de ça. Tu devrais le savoir, de toute façon. Le dictateur. Alors, euh... Donc, euh... Pour toi, Poussin. Ouais. Bah, moi, j'ai répondu. Ah, t'as répondu ? Bah, oui, moi, je pense que... Je sais pas, avoir un portable... Je sais pas, il faut investir... Je sais pas, ça s'investit, quoi. Non, mais attends... Ça s'est réfléchi. Non, mais attends. Par exemple, si quelqu'un te vend un portable... Ouais. Tu... T'achètes une carte ? Une carte ? T'achètes une carte, euh... Sans abonnement. Bah... Bon, c'est... Hé ! Attends, Poussin. Hé, celui qui s'amuse derrière à dire des conneries, arrête ! Allô ? Parce qu'elle est avec ses copines, Poussin, c'est pour ça, quoi. Non, non, non, c'est pas Poussin, attends. Non, t'es pas mort ! Non, moi, je suis toute seule, moi. Attends, Pilsard, tu... Pilsard, tu me fais du bon boudon ? On avait comment... On avait... Bah, c'est impeccable, vas-y, je vais... Ouais. Ouais, c'est impeccable. Donc, t'as bourré. Moi, j'ai pas fait une réponse. Réponds-moi ! Bah, vas-y, Poussin. Bah, moi, je dis que quand on a un téléphone, il faut investir, voilà. C'est pour ça que tu m'interromps ? Ouais, t'avais déjà fini, alors, Poussin, hein. Ouais, bah ouais, d'accord. Ok. Ah, d'accord. Euh, t'as bourré. Derrière, les mecs, vous fermez vos gueules. Ok. Merci. Ouais, bah... T'as bourré. Ouais, bah, moi, une fois, j'ai gagné un portable sur Fun. Ouais. Et, euh... Et, en fait, quand j'ai reçu le dossier, les abonnements étaient trop chers. Donc, j'ai pas pris, quoi. Non, non, mais attends, attends. Et, de toute façon, mes amis m'ont dit qu'ils m'appelleraient pas sur un portable, c'était trop cher. Alors, t'as bourré. Je vais te dire une chose. Ouais. Que lorsque tu gagnes un portable... Ouais. Sur Fun Radio... Ouais. Normalement, la mise en service, c'est gratuit. Oui, la mise en service, oui, mais tu payes tous les mois un abonnement, et moi... Et alors, bah, dans ce cas-là, si t'as pas envie de payer d'abonnement, tu reprends, tu fais une chose... Ouais. T'en gagnes un tous les mois. Tu retournes là où le portable, tu l'as eu... Ouais. Et tu demandes à avoir une MobiCard. Ouais. C'est clair, net, précis ? C'est la pub, ma... Hein ? OK. Ouais, ouais. Bah, je ferai ça, ouais, avec mon dossier. Ouais. OK. D'accord ? Ouais, mais enfin, merci quand même à Fun de m'avoir offert un portable. Y a pas de quoi, y a pas de quoi. Et tu l'as gagné quand, par Fun Radio ? Oh là là, y a, je sais pas, six mois. Ouais. Ouais, c'est ça. Ah, c'est pas mal, hein. C'est pas mal. Ouais. Bon, fil d'or. Hop. Je peux même pas participer. Non, non, toi, tu t'écrases. Ah, super. Toi, tu t'écrases, tu fais ton boulot. Ouais, bah, je veux faire. Hein, OK. Euh... Tu me fais bander. Merde. Merde ? OK, bah, t'fais refoutre. C'est bon pour... Tu me fais bander, tu me... Tu me prends quelqu'un d'autre. OK. T'as rappelé ? Ouais, bah, écoute, c'est clair qu'il faut avoir de l'argent pour avoir un portable potable, quoi. Donc, moi, ce que je te conseille, c'est le Tattoo. C'est un peu moins cher. C'est tous les trucs genre Tattoo, Tamtam, Cobi. Oui. Parce que tu vois, bon, alors, après, le problème, c'est que tu ne peux pas que ton numéro passe à l'antenne. Je crois que tu connais le problème. Sinon, bah, tu peux... Tu prends un téléphone avec un fil et puis tu tiens une rallonge. C'est des merdes. Euh... Bah, tu tiens un câble, il n'y a que ça à faire. Si t'as pas de thunes pour avoir un sans-fils... Non, mais attends, tu vois, le Tattoo, c'est pareil. De quoi ? Parce que le Tattoo... Non, non, mais attends, attends, attends. Attends, je vais te répondre par appui. Le Tattoo, d'accord, on... Moi, j'ai eu des problèmes avec. Mais j'ai été forcé de faire changer mon numéro. Hein, t'es... Ouais, je me souviens, ouais. Donc, t'es au courant ? Yes. Hein ? Do you know... Do you know speak English ? Yes, I want to talk to you in the ass. Yeah. Yes. Yes, I want to explore... Yeah, yeah, yeah. Ah, non. Ah, non. You want to talk to me in the ass ? Non, je... Euh... Déjà, je peux te dire une chose. Il faut que tu mettes une pile dedans. C'est vrai. Ouais, une pile, ça coûte pas trop cher, c'est bon. Euh... Ouais, mais... Vu les piles qu'on a dedans, c'est pas évident. Si tu reçois beaucoup de messages que t'es une star, c'est sûr, les piles, elles se vivent rapidement, quoi. Dites-le moi en position vibrante, en permanence, dans la poche, tu vois ce que je vais dire ? C'est sûr, ça se vive. Hum-hum. Ah ouais. Non, mais, te dire, le tatou... Ouais. Le tatou avec la pile, si personne t'appelle, donc, il va s'éteindre à une certaine heure que tu programmes, il va se rallumer à la même heure. Ouais, Gérard, sans vouloir te vexer, c'est pas... Ni le débat, c'est pas les tatous ni les portables, quoi. C'est la thune. Ouais, mais... Donc... Donc, j'ai bien répondu à ta question, par appui ? Ouais, impeccable. Camembert ? Pardon, impeccable. Ouais, on aime mieux ça. Camembert ? Oui, ben moi, en fait, je pense qu'on peut avoir un portable sans avoir l'argent, parce que j'étais dans la rue, parce que je fais le def, et puis il y a un camion qui est passé, et puis il y a une caisse qui est tombée, et puis il y avait plein de portables dedans. Non, mais attends, là, pour l'instant, Camembert, t'es en train de me dire des conneries, Alors si c'est pour continuer à dire des conneries. Non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non. Gérard, Gérard, sur l'internation, on te demande de répéter la question parce qu'ils n'ont pas entendu. Alors, avoir un portable avec ou sans argent, peut-on y arriver ? Ok. Alors, septième question. D'après vous, l'euro sera-t-il plus efficace que le franc ? Ça, c'est une bonne question. On va demander à Poussin. C'est dégueulasse. Je n'ai pas entendu la question. Oh ! Est-ce que l'euro est quoi ? Est-ce que l'euro sera plus efficace que le franc ? Non, moi, je pense que non. Parce que déjà, pour les personnes âgées, ça va être compliqué. Et le temps qu'on assimile tout ça, il nous faudra bien, je ne sais pas, au moins cinq ans. Non, mais déjà, déjà, il faut se dire une chose. Ouais. Avant que tous les autres répondent. Moi, je peux vous dire une chose, que l'euro, pour l'instant, c'est prévu pour là, 2000, pour 1999. Donc, ça ne sera que les pièces. Les billets seront prévus qu'en l'an 2000 ou 2002. Ben, vas-y, continue ! En l'an 2000 ou 2002. Donc, maintenant, j'ai vu des pubs. Il paraît qu'on peut... On peut garder même la carte bancaire. Les petits dessins animés, là, à la télé, c'est ça ? Ouais. Des trucs. Ouais. Ils peuvent... On peut garder... Par exemple, t'as une carte bancaire, tu vois, une carte bleue. Ouais. Et tu pourras payer avec ta carte bancaire. En franc. En franc ou en euro. Et comment je fais pour choisir ? Avec ma carte bleue, il y aura un bouton dessus ? Non, non, mais... Je sélectionne euro ou... Non, non, ça sera là, au magasin, où tu iras. Gérard ? Oui, euh... Si on regarde ici, on me dit que l'euro, c'est quand t'as bien mangé. Non, non, non, non. Ça, ça n'a rien à voir. Et on te demande si l'euro sera plus fort qu'elle le paie. Non, ça, je ne réponds même pas. C'est Zeewee qui demande ça. Ouais, ben, Zeewee, je n'y réponds même pas à sa question. Pas de politique. Donc, poussin. Ouais. Donc, pourquoi ? Ben, pour moi, c'est une source d'emmerde, quoi, parce que ça ne sert à rien. Déjà, l'avantage, c'est que ça va être une monnaie européenne. Et moi, je pense que, déjà, moi, déjà, ça me fait chier parce que ça ne sert à rien, voilà, quoi. Les personnes âgées, ça va, ça va... Franchement, les personnes âgées, ça va leur faire chier, quoi, tant qu'elles affluent tout ça. Elles vont crever, donc... Voilà, quoi. Tu sais, qui c'est qui dit que les personnes âgées peuvent crever, là ? Je n'ai pas dit qu'elles peuvent crever, j'ai dit que... Ah, c'est dégueulasse, Sam. C'est dégueulasse. Mais non. Non, non, non, mais attendez, attendez, attendez. Il faut bien se dire une chose, que l'euro, ça va emmerder tout le monde. C'est que là, ça ne sert à rien. Et ça, ça va, je dis, emmerder plus les personnes âgées. Le tabouret. Oui. Donc, pour toi ? Moi, je pense que c'est génial, l'euro. Et moi, j'attends vraiment une monnaie mondiale. Ce n'est pas que pour l'Europe, c'est vraiment pour le monde. Je ne sais pas, ça paraît le mondiaux, je ne sais pas, le périod. On ne s'emmerderait plus, au fond de terre, à changer les monnaies. Ce serait la même monnaie partout, pareil. Non, mais de toute manière, l'euro, tu vas être obligée de changer, hein ? Oui, non, mais je suis d'accord, mais... En euro, par exemple. Mais tu vas être obligée de changer. Tu vas être obligée de changer le franc contre l'euro. Oui, bien sûr. D'accord. D'accord ? Il y a quelqu'un qui se fait tirer sa caisse, hein ? Tu me fais bander. Non, elle est partie, tu me fais bander. C'est pour ça que je voulais t'annoncer. Donc, ta sandwich, quand même, Gérard, ne t'oublie pas. Puis tout à l'heure, elle est là, elle attend. Ben, sandwich. Ben, merci, quand même, ouais. Tu as répondu à la sixième ? Ben non, je n'ai pas répondu, mais bon, ce n'est pas grave. Non, non, mais attends, je... Non, elle veut... Non, non, non, attends. Avoir un portable avec ou sans argent, peut-on y arriver, donc, pour toi ? Ben non, pas pour moi, non. Non ? OK, septième. Merci. Septième, ouais. Ouais, donc, je voulais... Ouais, mais attends, il faut préciser les gens qui restent. Ben oui, ben, c'est marqué. Ben ouais, mais si tu me dis... Si je fais tout le monde et que tu ne me précises pas qu'il y a une personne qui n'a pas répondu, il faut me le dire, hein. Ben oui. Non, c'est alors sandwich. Ben, écoute, moi, pour moi, au niveau de la manifestation qu'elle finit, elle parlait, là. Moi, je suis un peu... Je suis un peu... Comment dire ? Je ne suis pas vraiment d'accord, parce que je crois que ça va être trop tard, de toute façon. La manifestation, elle ne changera rien, hein. Non, mais même, de toute manière, l'euro, là, il arrive dans moins de 15 jours. Oui. Donc, juste après les fêtes de... L'arrêt de vous ? Ah, c'est le 1er janvier, l'euro ? L'arrêt de vous ? Ouais. 1er janvier, là ? Le 2 janvier. 2 janvier 99, t'auras les pièces. On va faire comme toi, on va payer notre dinde en euros, là. Non, non, non, tu vas faire les fêtes de fin d'année, si tu veux, avec le fond normal. Ah, là ? Et au moment de... Le 2 janvier, juste après les fêtes de fin d'année, tu vas avoir de l'euro. Mais là, par contre, il ne faudra pas mélanger, par exemple... C'est un bordel, hein. Non, mais attends, regarde. T'as déjà des euros ? Non, non. Je prends 5 francs. Moi aussi, j'en ai. Tu vas avoir des euros en plus. Et là, je ne sais pas, parce que... Des zéros ou des euros ? Oh, tais-toi, toi. Non, il faut savoir. Tais-toi, toi. Tu l'ais, toi. Bah, OK. Non, je ne sais pas, parce que moi, j'ai une pièce, là, je ne sais pas, d'où qu'elle sort. Il faudrait que je voie si c'est pas un euro ou pas. Non, mais c'est un genre de pièce d'emprunte. Mais il y en a déjà, des euros, actuellement ? Non. Ben, je pense. Gérard, il y a Turpentine qui te demande si la vie sera moins dure avec l'euro. Euh, non, je pense qu'elle sera pareille, hein. Ouais, c'est la même chose, c'est de la monnaie, de toute façon. Ouais, mais même, elle sera aussi dure, hein. De toute manière, en fin de compte, c'est pas pour nous que ça va être le plus dur. Ça va être pour les personnes âgées, comme certaines personnes m'ont dit. Ouais, tout à fait, tout à fait. Ouais. Ça va être le plus dur, ça va être pour les personnes âgées. Il faut les tuer à la naissance. Ouais, non, mais attends, il faut les tuer à la naissance, et si on vous tue, vous, à la naissance, bande de cabs. Gérard, sur IRC, il y a Daf qui me dit que le masque de Zorro, il est déjà sorti, hein. Bon, ben, attends, lui, il est carrément en dehors de la plaque. Après, Sandwich, donc, à la place de Tu me fais bander, on a Roblochon, 19 ans, de Brest. Salut, Roblochon. Salut. Voilà, donc, il peut répondre. Ouais, Roblochon, je t'écoute. Ben, ouais, je sais pas, tu peux répéter la question, parce que j'ai pas bien écouté, là, en fait. Eh, putain, mais merde ! Il est au standard avec moi, GG, merde. Non, mais attends. Non, moi, quand je suis... Gérard, arrête de tourner comme ça, tu fais mal à la tête, t'as vu ? Ah, le portable qui vient, là. Ouais, le portable... En plus, il y a quelqu'un... En plus, il sonne, ben, je vais essayer de gérer le portable, Gérard, vas-y, pas la Roblochon. Alors, Roblochon, je t'écoute. Non, mais attends, tu peux répéter la question, parce que j'ai... Alors, d'après vous, l'euro sera-t-il plus efficace que le franc ? Ben, ouais, je sais pas, peut-être. Ouais, ouais, ouais, ouais. Hum ? Par rapport à d'autres pays, ouais, ça ira mieux. Euh, Camembert ? Euh, non, Camembert, attends, 5 minutes. Sur IRC, il y a Sardine qui te demande, avec l'euro, est-ce qu'il va falloir changer les billets du Monopoly ? Ben, pour l'instant, les billets ne sont pas prévus. Donc, les billets sont pas avant l'an de... Pas avant 2002. Donc, qui commence pas à nous casser les burnes ? Ben, il y aura que des pièces au début. Au début, oui. On aura des pièces de 5000 balles ? Non, ça sera des pièces... Je sais même pas... Des pièces de voiture, des pièces de moto ? Non, euh, donc... Donc, Camembert ? Non, parapluie, Camembert, il est parti. Alors, parapluie ? Ouais, ben, écoute, moi, ce que je peux te dire, c'est que l'euro, ça marchera mieux en Europe. Et que, si t'es en dehors de l'Europe, donc, par exemple, en France, ben, il vaut mieux utiliser le franc. Hum. Par contre, ce que je peux te dire, c'est que ça va poser des problèmes, parce que, tu vois, ça va plus te faire des contrôles. C'est-à-dire que, bon, je prends un exemple, faut pas que tu t'énerves, imagine, tu vas aux putes te faire sucer, ça coûtait 100 francs. Hum. Maintenant, il va falloir que tu viennes avec de la monnaie. Parce que, t'imagines la galère, les putes, elles vont se travailler avec des sacs entiers de monnaie. Parce que, 100 francs, ça fait quoi ? Ça fait 15 euros et des centimes, tu vois ? C'est clair. Et, t'imagines, les putes, elles vont passer leur temps avec des tonnes et des tonnes de monnaie. Ouais, avant... Oh, oh, oh, derrière, vous le laissez parler. Avant, quand j'allais pécho une red bat kiff, c'est 100 francs. Là, pareil, ça va plus faire des contrôles, c'est pas possible, ça va être trop une galère. Ouais, tu m'étonnes, maintenant, on va avoir plein de pièces dans les poches, et voilà. Mais, ouais, mais, mais, attends, attendez, attends, attends, attends, reblechons, reblechons. Ouais. Je vais calmer tout le monde. De toute manière, s'assoyez avec des pièces ou des billets, de toute manière, on sera toujours emmerdés. Mais, on sera toujours bien sucés, ça c'est clair. Ça c'est clair. Mais, t'imagines, les putes, elles vont se trimballer avec des sacs en deux pour se trimballer la monnaie, quoi. Mais, tu dis pas putes, c'est ce que tu dis. Ah, pardon, les péris, pas péris. On dit maman travaille, ok, on passe péris. Gérard, attends, sur l'URC, il y a Mulder, le vrai, donc le vrai, qui te demande si l'euro fera de toi un homme riche. Non. Non, pourquoi ? De toute manière, même avec de l'euro, tu pourras pas être riche, c'est pas facile. Mais dans quel sens ? Non, mais ça serait impossible, tu peux pas être riche avec de l'euro, ça c'est impossible. De toute manière, ça va être un débat que je pense qu'on... Ah, on va le faire, ce truc-là ? On le fera l'année prochaine. Si, si, tu l'as déjà fait l'année dernière. Ah, je pense qu'on l'a cassé. On a déjà fait un débat sur l'euro. Ah, je m'en souviens. Comme si j'y avais participé, je m'en souviens. Mais t'as pas fait sur l'EP, par contre. Ah ouais, c'est vrai. T'as fait sur l'euro, mais pas sur l'EP. Euh, Vasquerie. Oui, bonsoir, je suis Vasquerie, j'ai 21 ans, j'appelle de Lyon. Ouais, ben, on le sait, j'ai la fiche... Ouais, ben, je t'écoute. En fait, moi, j'ai de la famille en Italie. Ouais, mais t'as pas une vache qui pleure ? Je suis pas t'excité. Oh, c'est rien, ouais ! T'as pas une vache qui pleure ? Tu m'as vanné, tu m'as vanné. Mais par contre, oui, donc j'ai de la famille en Italie, donc je voyage beaucoup. Et c'est clair, quand je passe au change, parce qu'il faut changer l'argent, ben, je perds beaucoup. Tandis qu'avec l'euro, je perdrai moins. Le voyage sera plus abordable. Par contre, c'est un aspect négatif, parce qu'en Italie... Hé, là, attends. Vache qui rit. Hé, la salope ! Qui est en train de se prendre son pied. Arrête ! Et par contre, je vais saluer un petit Lyonnais qui travaille à la radio le matin de 6h à 9h. C'est M. Babart ! Parce qu'il nous écoute, et il me dit à chaque fois... À ce temps-là, il écoute, c'est sûr. C'est con, parce qu'on ne lui sait pas le débat. Non, oui. Ouais, ben, on se calme après, Bart. Il va vous laisser, il va vous réveiller demain matin, entre 6h et 9h. Euh, on se calme derrière ! Pour revenir au débat, il y a Perforas sur l'IRC qui te demande comment... Le vrai ? Ouais, le vrai, aussi. Et, putain, il y a de la célébrité ce soir. Comment est-ce qu'on pourra jouer pile ou face avec l'euro ? Eh, c'est pas con. Ah, ben, alors là, déjà, il faudrait que j'aille d'une pièce d'euro pour essayer de savoir d'où est le côté pile ou face. Donc, huitième question. Bon, parce qu'après, on va attaquer le deuxième débat. Oh ! Ouais, mais ça y est, pour moi, t'as fini. Attends, je voulais juste ajouter que, ben, l'euro, tu vois, qu'en Italie, un euro, ça vaut 6 000 lire. Non, ça vaut pas 6 000 lire, ça vaut 6 francs, 6 francs 50. C'est pas en Italie, c'est pas en Italie. Oh, mais, mon dieu ! Un euro, ça vaut 6 000 lire italienne. T'en fous de ton cul ! Eh, moi, t'en es une salope ! Attends, attends, attends ! Mais, c'est un mec, ça. S'il vous plaît, s'il vous plaît ! Un peu de calme ! Non, ça y est, c'est terminé. Non, mais attends, j'ai pas fini. Maintenant, tu me laisses parler. Oh, si je veux ! Erreur, je peux te poser une question ? Oh, ta gueule, elle est la tienne ! Non, mais calme ! Donc, tu me laisses... Tu me laisses parler, Gérard ? Non, t'accouches, parce qu'il a déjà eu... Donc, en Italie, un euro, ça vaut 2 500 lire. Et donc, tu passes de 2 500 à un, donc tu y perds. Quoi ? Attends, attends, je prends des notes, je fais des divisions. En Italie, un euro... Gérard, prends des notes, merde ! Tu fais une tournée en Italie, après. Alors, un euro, ça fait... Non, non, laisse tomber, laisse tomber, laisse tomber ! Mettez-vous de l'argent ! Un euro... Mettez-vous de l'argent aux autres ! Bon, ça y est, ça y est, ça y est, ça y est ! Oh ! 253 couronnes. Non ! Gérard, assieds-toi, assieds-toi, frappe pas, file d'un. 3, 2, tu marques, ok ? Voilà. Oh, merde ! Et sinon, Gérard, il y a Yannix sur l'IRC qui te demande comment on fera pour retirer de l'argent quand ce sera en euros, vu que là, on tire 100 francs, c'est un billet, mais... En euros, on va tirer des pièces ? Ah, voilà. Voilà la question que j'attendais. Enfin, une bonne question sur l'IRC ! Il y a que toi qui parraille bien, pour l'instant, Rigo. C'était une question de Yannix. Le vrai Yannix. Mais ça y est, Gérard, arrête de me faire des signes, je sais ce que je fais. Alors, donc, pour... Bon, ça y est, bravo ! C'est le tel à bien travailler ! Bravo, Rigo ! Merci, les mecs. Bon, faut s'appeler les Blancs, hein. Donc, pour l'instant, les billets, ils sont prévus pour 2002. Donc, par distributeur, je sais pas si t'auras les pièces, t'auras toujours les billets normaux. C'est faux. Quoi, c'est faux ? Ouais. C'est grave. Pourquoi c'est faux ? Bah, je sais pas, c'est toi qui pose la question. Ah non, moi, j'ai pas le micro allumé, hein. Bon, enfin, bref. Mettez-vous de l'argent. G, G, G, G, G, G. Ok. Je vous écoute. Ouais, c'est par rapport à ce que les billets et les pièces, c'était en 2002. T'es juste comme un héros. Attends, toi, la salope, tu vas te faire baiser par quelqu'un d'autre, Gérard. Oh, qui t'en cul. Bah, moi, je t'emmerde. Gérard, je te pose une question. Vas-y. En fait, je voulais te demander, tu me dis, à partir de 99, on va avoir des pièces en euros. C'est pour ça, je le dis, parce qu'elle a pas donné son prénom. C'est pour ça, ouais, c'est pour ça. Ouais, bah, faudrait peut-être préciser. Vas-y, je t'écoute. Excuse-moi, excuse-moi, Gégé. En fait, je voulais te demander, tu vois, par exemple, dans les téléphones, dans les cabines, il y a des téléphones à pièces. Non, non, depuis maintenant, non. Maintenant, c'est des cabines à cartes. Ouais, bah, disons, dans les péages, dans les billards, dans les baby-foot, il va falloir payer en euros, maintenant. Ah bah, oui. Et ils vont faire comment ? Ils vont changer les baby-foot ? Ils vont changer les pièges ? Non ! Les pièges, ils vont acheter des jetons. Non, non, non, non, non. Les pièges, elles seront de la même taille, en fait. Non, non, non, non. Ce qui va se produire, et ça, là, je pense que je suis pas assez informé dessus. Faudrait voir avec des personnes des champs de café que là où ils ont les plus peur les billards et les baby-foot ou autres, donc, pour savoir comment ça va se passer avec les pièces en euros. Oui, alors, Rigaud ? Oui, il y a Benichou, le vrai, sur l'IRC, qui donne un petit sondage sauf presse. Est-ce que l'euro sent mauvais ? 23% des gens ont répondu non. 38,894% disent oui quand il sort de la Lyonnaise. Et 86,70% disent oui quand il sort de la poche de Gérard. Ouais, bah, ça... Merci, merci, Rigaud. Bravo. Le truc, je vois pas du tout... Je vois pas du tout le rapport avec les questions. On est combien ? On est combien, là ? On est à 4, là. On stagne autour de... Ça va, toi, Phil ? Non, on est 4 dans le studio. Toi, t'as ton micro et... Ça tourne autour de 4 500, quoi. On stagne un peu, mais c'est déjà énorme. 4 500 ? Ouais. Ça a monté par rapport à tout à l'heure. Ouais, mais c'est un peu mieux que la semaine dernière, parce que la semaine dernière... Je demande combien on est. 4,5 et 2,0, j'ai dit. 4 528, toi. Ah, bon. Ah, 2 et... On n'est plus que 4 522, maintenant. Non, Gérard, on va faire la conclusion, là, parce que c'est 2 heures. D'accord ? Ben, non, on peut se... Ah, ben non, attends. Si on veut faire l'autre débat, on va jamais arriver à 3 heures. On arrête à 3 heures, donc on va faire la conclusion, quand même. Ben, attends, pour l'instant, c'est toi qui commande. Ben, attends, depuis quand t'es passé chef, toi ? T'es passé chef ? Non, mais je suis pas passé chef, je te demande si on peut faire la conclusion. Non, mais attends, pour l'instant... Eh, c'est moi qui commande. C'est moi qui commande. C'est moi qui commande. Ben, dis ta question. C'est moi qui commande, Gégé. Alors ? Conclusion. Les femmes devraient-elles payer leur mari ? Attends, on va demander à Poussin. Poussin ! Oui ! Les femmes devraient-elles payer leur mari ? Ouais. Pourquoi elles devraient payer leur mari ? Ah, je te pose la question. Ben, non. C'est les mecs qui payent leurs femmes, quoi. Ils les entretiennent. Ah, d'accord. C'est normal, parce qu'une femme, elle est censée faire la cuisine. C'est les mecs qui le disent, ça. Hum ? Alors, voilà, quoi. C'est les mecs qui entretiennent les femmes. Moi, c'est comme ça, quoi. Et tu crois qu'on va continuer à vous entretenir ? Ben, non. Ça rêve, là. De toute façon, maintenant, les femmes, elles sont égales aux hommes. Alors, je sais pas, moi. Ah, non, non, non, non. Attends, Poussin, Poussin. Bon, attendez, attendez, attendez. On va répondre à ces conneries, là, Gérard. Attendez, attendez, attendez. Mais c'est pas macho ? Mais dis-tu que ça, Gérard ? Bon, Poussin. Attendez, Gérard. Gérard va répondre. Attendez. On laisse... On va demander à Tabou. Ouais, je vais répondre juste derrière. Gérard, Tabouret. Ouais, ben, manquerait plus que ça, encore, qu'on paye les hommes. Hum ? Sandwich. Des fois, ouais, si je pouvais payer le mien pour qu'il ferme sa gueule, je le ferais. Attends, qui c'est qui vient de dire ça ? C'est Tabouret, Tabouret. Tabouret. Sandwich. Sandwich est parti, Gérard. Son portable est mort. Ah, ben, d'accord. C'est quoi, là, ses conclusions, Gérard ? Non, non, c'est pas la conclusion, c'est... Gâteau, désespère pas, ça va arriver, hein. C'est la dixième. Ça va bien, alors. En notion ? Ben, moi, je pense que ouais, parce que, vu qu'elle nous font chier toute la journée, ça serait à peu près normal, quoi. Puis, ouais... Attends, attends. Hé, derrière, derrière, vous vous taisez ? Ah, les filles. Hein, Tabouret et Poussin, toutes tes... Ouais, ça me vaut les gueules, un peu. Oh, tu restes poli, tu... Tu restes poli, Robleson. Ouais, on parle pas comme ça aux salopes. Bah, toi, le salope, tu fermes ta gueule. Ouais, excuse. Ok ? Ouais, tu fermes ta gueule, pas de ta mère. Ok, cochonne. Oh ! Bon, Robleson. Ouais. Robleson. Robleson, tu dégages ta conclusion, je la veux pas. Non, mais c'est pas Robleson qui dit... Ouais, tu dégages, salut. Hop, le Robleson, il... Ça sent pas bon, là. Il pue, voilà. Parapluie. Ouais, bah, écoute, moi, je suis plutôt dans le style gigolo, donc me faire entretenir par des vieilles cochonnes de 50 ans qui sont pétées de thunes, ça le fait. Non, mais attends. Attends, attends. Parapluie. Ouais. Hé, les femmes de Bretel, payez leur mari. Bah, justement, moi, je te dis, je prends des vieilles, je leur mets une cartouche une fois dans le mot, elles sont contentes, en attendant, elles m'arrosent deux thunes, et c'est bon. OK. Voilà. Euh, Vasquerie ? Bah, moi, je pense que c'est une bonne idée, parce que c'est toujours nous qui payons tout, le ciné, les sorties, machin, tout ça, et ce serait une bonne idée qu'on retourne et nous fait d'un salaire. Alors, là, moi, je suis pas d'accord avec vous, parce qu'en fin de compte, en fin de compte, les femmes, elles sont là pour nous faire à bouffer, elles sont là pour nous laver notre linge, pour nous entretenir, pour faire la vaisselle et tout. Maintenant... Non, non, non. Non. Qu'est-ce qu'il faut pas ? Tu vas pas te faire sucer par ton chien, c'est bien ta femme qui te suce, donc elles sont là aussi pour sucer. Attends, toi, tu fermes ta gueule, tu vas te faire sucer par une pute. Bah, écoute, c'est logique, non, j'ai ce qu'il faut faire. C'est des femmes. Ouais, mais, de toute manière, jusqu'à maintenant, moi... C'est pas la loco. Alors, moi, la loco, attends, merde, alors, conclusion, ça t'apprendra. À cause de toi, je... Merci beaucoup. On va commencer ta conclusion. Non, non, mais, vous allez voir. Vous allez voir au deuxième débat. La conclusion de l'IRC, Gérard. Ouais, donc, il y a Yankee sur l'IRC. Attends, faut que je la retrouve, parce que je sais plus où elle est passée. Conclusion, pour faire un débat sur l'argent, il faut déjà en posséder. Quand on fouille dans les poubelles, il faudra mieux qu'on fasse un débat sur les déchets domestiques. Ça, c'est pas un débat que je ferai. Et il y a Turpentine sur l'IRC qui dit que ton débat, il avait ni queue ni tête comme toi. Dans ces cas-là, si ça leur plaît pas sur l'IRC, dans ces cas-là, qu'ils arrêtent de dépenser leurs poignons. De toute manière, l'IRC, il faut le payer. Avec de l'argent. Donc, il faut avoir de l'argent. Quand est-ce que c'est la grève, Rigo ? Le 13. Je crois que c'est pour bientôt. Il vient de te dire le 13, on est le 11. Donc, dans deux jours, merde ! C'est bien marrant tout ça ! Un dimanche ! T'as tout compris, t'assures. C'est vraiment mortel. Alors, conclusion, on va demander à Poussin. La conclusion, moi, je dirais que ce débat était très intéressant. Grâce à toi, Gégé, j'en ai pris plus sur l'euro. Puis voilà, merci Gégé. Il n'y a pas de quoi. Tabouret ? Moi, l'argent, j'en ai pas. Donc, je lance un appel. S'il y a un vieux qui est prêt à claquer, qui m'écoute et qui a plein de fric, je suis prête. Non, mais attends, Tabouret. Tu te fous de ma gueule ? Non, mais je crois que tu prends le train. Tu prends le train. Pourquoi ? Parce que tout à l'heure, quand je t'ai posé une question sur de l'argent, tu m'as dit je ne suis pas lycéenne et je travaille. Oui, ben oui, mais je travaille mais je ne gagne pas beaucoup d'argent. Une fois que le loyer est payé, je n'ai plus rien, c'est tout. Moi, je cherche un vieux. A la rigueur, je l'aide à mourir et puis j'ai tout son fric et je m'éclate avec. Je l'aime à mourir, c'est ça ? Oui, c'est ça. Robloçon, il n'est plus là ? Non, tu l'as vu ? Non. Un parapluie ? Oui, ben écoute, l'argent, l'euro, je voulais juste te dire que je ne sais pas si tu savais, mais avant l'euro, ça s'appelait l'écu et je voulais savoir pourquoi la Banque de France et toi vous visez des fixations sur le gerbille et le caca et je voulais te dire que tu as bien une tronche à être payé en monnaie de singe, voilà. Alors moi, je vais te dire une chose, parapluie. Non, mais attends. C'est coupé. Toi, tu mets ça à ton micro, tu m'énerves avec ton micro. Maintenant, tu me remets parapluie à l'antenne ? Oui, je suis là. Ben moi, je vais te dire une chose, parce que ce que tu viens de me dire comme conclusion, ben moi, je t'emmerde. Ah ben, on est deux alors. Ok ? Et je te chie dans le bec. Vas-y. Ok, alors bonne nuit. Bonne nuit. Vas-y, Ray, pour terminer. Ben moi, j'ai trouvé que c'était un débat assez intéressant. On a appris pas mal de choses et je voudrais terminer, si tu le permets, sur une citation de Descartes qui est tout à fait dans le cadre du débat de plus à quoi servirait l'infinie puissance de cet infini imaginaire s'il ne pouvait jamais rien créer. Voilà. Bonne soirée. Ok, bonne soirée à toi. Donc, moi, ma conclusion, il y a peut-être une autre conclusion, non ? Conclusion, Fildar, passe-moi ton stylo, s'il te plaît. Ouais. Jolie conclusion, Hugo. C'est toi qui bosses le mieux. Voilà. Alors, moi, conclusion, ben moi, ce que je peux vous dire, c'est que pour l'argent, donc sur l'euro, donc maintenant, ça va être assez compliqué parce que ça va être pour les personnes âgées, donc ça, ça va être le plus dur. Sinon, qu'est-ce que je pouvais vous rapporter, vous dire d'autre ? Bon, ben, donnez à ceux que... Donnez ce que vous pouvez à des associations que vous êtes sûrs de connaître, mais faites attention. Faites attention parce que l'argent ne fait pas le bonheur. En fin de compte, on croit que l'argent fait le bonheur, et en fin de compte, non. C'est pas avec de l'argent qu'on y est. Avec de l'argent, on peut aller partout dès qu'on en a, mais si on n'en a pas, ben... Qu'est-ce que je peux vous dire d'autre ? Si on n'a pas d'argent, ben, on crève. Et donc, comme j'ai dit, comptez vos amis. Parce que les amis, ça se compte sur les 5 doigts d'une main. 1, 2, 3 ! Ouais, moi, j'en ai que 3. Et comme le remix, il dit, et 1, et 2, et 3, 0. Donc, voilà. Bravo, bravo, bravo ! Alors, on va se retrouver pour le deuxième débat qui va porter sur les jeux vidéo. Et donc, on va s'écouter. La petite fermière du bois avec des oursins dans le cul. Ouais, les Zeldas où il y a... Plus le... Plus le remix de merde. Euh... Alors, toi, quand tu viens là, tu vas prendre une blague dans ta gueule. Oh, mais, Gérard ! Alors, plus le remix de merde. C'est pas ça. Donc, tu me donnes la pochette, Manu, si tu veux. Quelle pochette ? Mais tu vas rien comprendre. La pochette de quoi ? Ça, on ne le met pas tout de suite, ça. Si, si. Non, on ne le met pas tout de suite. Si, c'est le deuxième. C'est ça. Parce que plus le remix de merde. Eh ben, alors, tu me les donnes. Je vais les annoncer gentiment. Eh ben, vas-y, fais le malin. Alors, euh... Vas-y, on va se marrer, là. Vas-y, fais le malin. Alors, le premier, c'est quoi ? Le premier, c'est... C'est plage 10. Plage 10. Alors, plage 10... On va se marrer. Allez. Alors, c'est, euh... Soon... Soon die. Oui, one... D'accord. Donc, en fin de compte, je vous dirais pas le premier donc c'est en fin de compte le premier c'est la première du bois avec des oursins dans le cul et le deuxième pour terminer donc un remix de merde donc c'est pas c'est ça le noir là c'est qui qui pro prodigy avec firest artères donc à tout à l'heure pour le deuxième débat sur fun radio n'oubliez pas ce système s'empêcher == Le débat sur les jeux vidéo == === Contexte === === Les personnages === === Transcription === Et voilà, donc vous venez d'écouter. Fildar, s'il te plaît, tu peux l'annoncer. C'était les Pro DJ avec Firestarter, c'est ce que tu as dit tout à l'heure, Gégé. Ah ouais, mais moi, c'était pas ce qui était annoncé, c'était en principe plus un remix de merde. Ah non, mais on l'a pas mis, parce qu'on a changé au dernier moment la prog. Ah ouais, ben d'accord. Ok, donc vous êtes toujours sur PN Radio, donc au standard, c'est Manu qui vous attend. Ouais ! Donc au 0803 0803. 0800 75 000 à moins que le 0803 le 0800 ne fonctionne plus. Ils essayent les deux et puis ils verront bien. Ouais, voilà. Donc Manu vous attend toujours au standard. Rigaud toujours sur l'internet, prêt à répondre aux questions. Ouais. Donc... Ouais, y'a pas de problème. Et ben... Fildar à la réa, en espérant qu'il va me faire du bon petit boulot comme le premier. J'espère. Donc, il y aura une surprise pour... Ben, pour les auditeurs qui ont l'habitude d'écouter Max le soir. Je vous dis pas quoi, parce que sinon... Bon, sinon, on peut l'annoncer, Fildar ? Ben, je sais pas, je sais pas, c'est une surprise, je sais pas. Ben si, ben, tu l'as, là. C'est... Ça va être dévié pour toi, Sandy, ma chérie. Ça va être fête à fête. Relaxation, ouais. Le pouvoir de la méditation. Mais non, c'est pas ça ! Là, tu l'as, là, là, devant tes yeux. Je te suis dessus, Christo. Mais non, mais non, c'est pas ça. Ça va être... Ça va être dédié pour Sandy, ça va être fête à fête. C'est ça ? Voilà ! Voilà. OK, d'accord. Et comme elle l'adore, on va lui dédier, malgré qu'elle... Ça lui rappelle des souvenirs. Ouais, mais... Non, mais ça lui rappelle pas des souvenirs, Manu. Ben, je sais pas pourquoi, elle l'aime bien. C'est pas le débat, c'est pas le débat. Non, mais elle aime bien, parce que... Depuis qu'elle l'a écouté, bon, ben... Ben, voyons, balance tout, toi. Gérard, on va peut-être commencer à accueillir les auditeurs, parce qu'il est déjà 2h20. Donc, le deuxième débat, donc, il est 2h18. Oui, c'est vrai, il faut qu'on avance. Donc, le deuxième débat porte sur les jeux vidéo. Et pour les jeux vidéo, on va accueillir Monica Latégresse. Salut, Gégé. 19 ans, de Paris. On peut écouter FN Radio sur 101.9 FM. Ouais, salut, Gégé. Donc, bonsoir à toi. Bulbul Gomme, 20 ans, de Marseille. On peut écouter FN Radio sur 103.9 FM. Salut, Gérard. Salut, Philippe Barre. Salut, Manu. Salut. Lara... Lara Graff. Hein ? Lara Graff. Ah, ben, moi, j'ai Graff. Ah, c'est Graff. Donc, 21 ans de Max et Bill. On peut écouter FN Radio sur 95 FM. Bonsoir, Gérard. Bonsoir, Manu. Bonsoir, Philippe Barre. Et bonsoir, Max. Max, il est... Pour l'instant, il est en train de préparer son petit... Ah, j'ai regardé Techno Max tout à l'heure. Ah, ben, c'est bien. Ah, ben, au moins des... J'espère que tout le monde l'a regardé. Ouais. Et l'éditeur suivant, c'est quoi ? Donc, c'est Pierre Mario. C'est Lara Graff. Bonsoir. Super Mario, 19 ans, de... Albertville. D'Albertville. On peut écouter FN Radio sur 97.5 FM. Oui, Rigo. Je voulais juste dire à Super Mario que je suis fan. Ah, OK. Ah, merci. Pac-Man, 23 ans. Oui, bonsoir, toute la populace. Salut. On peut écouter... On peut écouter FN Radio sur 101.9. Yes, c'est pareil. OK. Et Sonic, 19 ans, de Tokyo. Oui, j'appelle du Japon. J'ai un décalage. Je vous écoute sur Internet. Et il est 8h du matin à Tokyo. Ah, OK. Il fait beau, non ? Non, il se clope. Alors, donc, que peut-on faire avec des jeux vidéo ? On va demander ça à Monica la tigresse. Ben, qu'est-ce qu'on peut faire ? Ben, on peut jouer avec. C'est une bonne chose. Ben, en principe, des jeux... En principe, les jeux vidéo, c'est pour jouer avec. Ben, qu'est-ce qu'on peut faire avec ? C'est pas pour se branler. Ben, on peut... Ça passe longtemps, quoi. On se défoule dessus. Quand on a passé une journée de travail, on est stressé et tout. Et le soir, quand on rentre, une partie de Tekken... Ah, une partie de Tekken ! Attends... Une partie de Tekken ! Non, mais... Ah, non, mais là... Non, mais là... Vraiment trop con, hein. Là, t'es vraiment trop conne, hein. Ouais. Là, t'es vraiment une tigresse, hein. Ben, c'est une partie de Tekken. Allez, c'est bon, va te coucher. Oui, ben, ça sert à se défendre. Ça sert à se défendre. Et puis, ça sert à se défouler quand les gens nous prennent la tête. Parce qu'on fait des petits Mortal Kombat, des choses comme ça. Voilà, tu peux répéter, parce que là, j'ai... Je te dis que ça sert à se défouler quand il y a des gens qui t'ont pris la tête. C'est un Mortal Kombat. Non, mais celui qui a une... Il y en a un qui est en train de jouer aux jeux vidéo, en plus, c'est pas cool. J'ai l'impression que c'est... Tiens, ça, je reconnais ce... Celui-là, je l'ai pas, je suis jaloux. Non, mais moi, je le reconnais, parce que c'était la première fois que j'ai connu Max. Oh, ta gueule derrière ! On va demander à l'oragraphe. L'oragraphe. Ouais, ben, je sais pas qui c'est qui m'a écrit ce nom-là, mais je prononce comme c'est marqué. Allez ! Ouais, donc, normalement, c'est fait pour se défouler, mais aussi, si t'as la table qui est bancale, tu peux le mettre sur le pied. Ah, sur le pied ? Ouais, sur le pied de la table. Comme ça, ça te fait une table droite. Ah, une table droite ? Ben, la boîte. La console. La console, tu la mets dans ta PlayStation, et puis, la boîte, tu la mets sous le... sous le pied. Ouais, d'accord. Attends, je regarde vite fait. Oui, il y a Oxyd sur IRC qui te demande si c'est vrai que Sandy a fait des jeux vidéo quand elle jouait avec ton joystick et que toi, en même temps, t'appuies sur tous ses boutons. Et c'est toujours Game Over. Alors, lui, je lui réponds même pas à la question. Ça vaudra plus... Ça ira plus vite. Super Mario. Et sinon, il y a Yankee qui te demande si c'est vrai que Tom. C'est clair. C'est un nouvel manette de jeu, ça. C'est clair, ouais. Euh, je réponds même pas à des questions pourrites sur l'Internet, parce que là... Mais qu'est-ce que c'est pourrite ? C'est pourrite. Tes questions, Rodrigo. Non, non, mais... Non, mais c'est pas les miennes, non. Non, non, mais... Les gens d'IRC posaient des questions qui... Qui mettent en valeur robot, quoi. Merde. Qui ont un rapport... Posez des questions qui ont un rapport avec des jeux. Filder, pour l'instant, tu t'écrases, parce que... Allez, mortel débat. On y va. Euh... Super Mario. Bah, moi, je pense que les jeux vidéo, ça se sert déjà pour se défouler. Puis en plus, on peut se détendre surtout avec, quoi. Comment ? On peut se détendre avec. On se détend, quoi, le soir. Parce que parfois, c'est relou qu'on rentre le soir, on est bien vénère et tout. Alors, on se détend. Voilà. Et par exemple, si t'as... Si t'as pas de jeux de vidéo, si t'as pas de PlayStation, tout ça, c'est quoi ? Comment tu fais ? Bah, je sais pas. Tu te débrouilles. Tu m'as de quoi ? Tu t'es fait un pote. Qui en a eu ? Comment ? Tu tapes sur ta femme. Oh, non. Mais attends. Alors, là, qui c'est qui vient me dire ça ? Les filles. Non, mais dis ton nom, celle qui vient me dire ça. T'as le courage de dire ton nom, mais... Pétasse, là, qui vient me dire ça ? C'est quoi, Sam ? Oh, là, là, putain, j'aime bien... Elle vient pas de fou, hier. J'aime bien les salopes, là, comme ça. C'est pas moi. Bon, mais attends, c'est pas moi, c'est... C'est pas moi, c'est pas moi. Mais non, mais c'est jamais personne. Mais allez, arrêtez vos conneries, là. Non, non, bah, c'est pas moi. Non, il y en a trois. Moi, je suis respectueuse. Euh, Pacam. Non, Pacman. Pacman. Pacman. Pacman. Pacman. Écoute, une console, ça te sert, bah, par exemple, si t'es chômeur ou t'es étudiant et qu'il sèche les cours, déjà, ça t'occupe. Et puis, deuxièmement, ça peut aussi te servir à mettre une branlée à Tekken 3 à des standardistes dans une radio, quoi. Ouais, bah, alors, Pacman, je vais te dire une chose, que si c'est pour me dire des conneries comme ça sur... Excuse-moi, Gérard, j'ai une rectification à faire à des gars qui s'occupent de l'IRC et des branlées. Merci. D'accord. Attends, Gérard, moi aussi, j'ai Internet, j'ai un message IRC, je peux te le lire ? Non. Non, non, non, non, non, non, non, non, il y a pas de message à lire. Hop, terminé. Ah, moi, j'en ai un, par contre. Ouais. Il y a un truc qui dit qu'il y a un jeu où on est camionnaire et on gagne des points en faisant des bouchons et les ennemis, c'est des plaques de verglas, ça s'appelle Super GG Bros. Ah, bah, lui, je l'emmerde. Euh, Sonic. Euh, oui, en fait, moi, effectivement, les jeux vidéo, ça me servait avant, quand c'était des cartouches, à caler mes meubles. Au bon cas, je mettais les cartouches, mais maintenant, avec les CD, c'est galère. Donc, j'ai décidé de me reconvertir en pirate, je grave des CD, je me fais de la tuerie. Oh, ça s'interdit, ça. Euh, Sonic. Attends, tu demandes combien tes disques ? Sonic ! Sonic ! Sonic ! Je suis intéressée. Euh, terminé pour lui. Hop. Allô ? Bon, euh, puis... C'est pas moi, hein. Eh, là, ça... Manu, tu gères un peu, là. Bon, Manu, euh... On va voir que c'est bien du standard. Hop, je coupe. Je remets, je coupe. Tu vois ? Gérard ? Sur l'IC, il y a des V1 qui te demandent comment on fait pour graver un CD, justement, c'est avec un marteau et un bureau. Ouais. Ouais. Gagné. Bah, je peux peut-être répondre. Ouais, doit-on être intelligent ? Attends, moi, je m'y connais, je peux peut-être répondre. Encore les deux. Allô ? Donc, doit-on être intelligent pour jouer aux jeux vidéo, c'est ça ? Euh, Fuldard ? Oui ? Pour l'instant, tu fermes ta gueule, c'est moi qui pose les questions. D'accord. Toi, t'es payé pour faire l'arrière. Gérard, tu t'es en train de faire la gueule, t'allais pas la poser, il a bien fait de la poser. Ouais, mais c'est pas lui. De toute manière, c'est moi qui pose les questions, c'est pas lui. Alors, doit-on être intelligent pour faire de la Game Boy ou autre ? Gérard ? Comment la pétasse, là ? Ouais. Y a Fuldard de mon sur la tête. Non, non, non, la pétasse, là, qui vient de dire que je sais pas parler, tu peux dire ton nom, là ? Voilà, Game Boy, hein. Bon, allez, hop. Gernier pour Rég. Allez, hop, celle-là. Gérard, Gérard. Deux secondes, il y a une question internet. Gérard ? Ouais, une question internet. Tu me prends quelqu'un d'autre, hein, parce que là... Gérard, y a Chandler, le vrai, qui te demande si tu fais de la magie noire avec ta... Vaudou 2. Non. Doit-on être intelligent pour faire de la... Oh, ça y est ! Gérard ? Ouais. Oh, oh, oh. Hé, Fuldard ! Hé, Fuldard ! Hé, Gérard ! Hé, qu'est-ce que tu fais, là ? Tes mains, tu les mets là. Gérard, t'as déjà la Game Boy ? Hein, parce que là, c'est le jeu, là. T'as le cadeau. Tu vois que c'est pas lui, arrête de... C'est les éditeurs. C'est les éditeurs. Bon, hé, Manu ! C'est bon, ils sont coupés, là, on y va, on y va, on y va. Alors... Donc, on m'a demandé à Monica, la tigresse. Ouais. Ouais, ben moi, je pense que... Gérard ? Ta gueule, derrière, pour un second ! T'as déjà joué, là, Gérard ? Monica, réponds, vas-y. Ben, je réponds. Donc, moi, je pense que, oui, faut être intelligent, hein, parce que ça montre de l'esprit et de la réflexion. Et voilà, quoi. Quand même. Ouais, on va rajouter, quoi. Ok, euh... Buble... Buble-gum, là. Double-gum. Ouais. Ben, non, moi, je pense que un QI de 30, ça suffit. Il faut juste appuyer sur deux boutons, donc c'est pas forcé. Tout le monde peut le faire. Oui. Qu'est-ce qu'on veut dire, c'est ? Ouais, il y a Yankee, le vrai, qui te demande si tu sais jouer à la console, toi. Non. Non, donc... Là, euh... Donc, il faut bien être intelligent pour jouer à une console, alors. De toute manière, il y en a un qui est super intelligent parce qu'il a gagné à la coupe. Il s'appelle Manu. Ah, mais c'est parce que j'étais pas là. Sans préciser. J'étais pas là, c'est bon. Merci, j'ai... Ah, c'est... Non, j'étais pas là. Si j'étais là, c'est moi qui aurais gagné. La coupe de TKL 3. Ah, ouais ? Ben, si, t'es... J'étais pas là. Mais si, t'étais là. Ben, ouais, ça s'est passé dans les studios. Me dis pas que t'étais pas là. Enfoiré. Ben, ouais, t'étais là, Hugo. Voyons. Euh... Là, là, là, euh... Là, Croft. Ouais, Croft. Ouais, vas-y. Ouais, ben, moi, je pense qu'il faut pas être intelligent. Avoir le QI d'une mouche, tu peux jouer à ça, hein. Et juste appuyer sur deux boutons, comme ça. Comment ? Ouais, ça, c'est Monica qui parle, hein. C'est pas moi. Ouais, ben, alors, Monica, tu t'écrases. T'en as rien dit, Monica, hein. Mais si. Je crois que c'est moi, peut-être. Le raccroche. Ouais, ça y est, j'ai répondu à la question. Faut écouter, hein. J'ai dit qu'en fait, il fallait avoir le QI d'une mouche pour jouer à ce jeu. C'est tout. D'accord. J'ai pas appuyé sur les boutons. Euh, Super Mario ? Moi, je pense que ouais, parce que parfois, il y a des notices, quoi. Elles sont tellement énormes qu'il y en a, ils peuvent pas comprendre, quoi. T'es intelligent, pour toi ? Ben, ça dépend pour qui, ouais. Des fois, la notice, elle est écrite en anglais, hein. Ouais, des fois, même à l'écran japonais, parfois. Ouais, c'est ça. Prends-moi pour un con. Un con. Ah, mais non, c'est vrai, hein. Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! C'est une simulation virtuelle de soirée de richesse de la loco. Alors toi, c'est terminé pour toi. Au revoir aussi ! Au revoir aussi ! Salut ! Au revoir ! Alors, Gérard, à la place de Lara Croft, on accueille Paul Fénix. Bonsoir. Salut, Gérard. Salut, Paul Fénix. Salut. Salut. Et à la place de Pac-Man, on accueille Fantôme Glouton. Salut à tous. Salut. Salut. Manu ? Oui ? J'espère que c'est pas les mêmes. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah, on se met le petit cadeau. Ouais. Dédié pour Sandy. C'est ça la fête ! Et on se retrouve tout de suite après aux heures 800, 308, 5000, 0800, 70, 5000. Et toujours lire cww.fr. Et vous êtes toujours sur Fond Radio, il est 2h39. C'est ça la fête ! Tous ceux qui ont l'habitude d'écouter Max, le Star System, le soir, on vient de vous mettre fête à fête. Donc, vous êtes toujours sur Fond Radio. Donc, vous pouvez nous écouter sur 101.9 et il est 2h42. Donc, Manu vous attend toujours aux 0800, 308, 5000. Excuse-moi Gérard, du coup, à la place de Sonic que t'as viré tout à l'heure, on accueille Zelda. Ah ben, tu me... Voilà. Ça te dérange de me faire une fiche ? Ouais, ouais, ça me fait chier. Ça te fait chier ? Ouais, ben ouais, tu me demandes, je te le dis. Ça te fait chier ? Ben, pas moi. C'est ton butier, c'est... Ouais, je sais, je sais. Tu connais les toilettes de Fond Radio ? Ouais, ouais, ouais. Bon. Oui, Rigo ? Non, je voulais juste dire à Zelda que je suis fan. Ah, ok. Alors, donc, vous venez d'écouter Fête à Fête et vous êtes toujours sur Fond Radio. Donc, 2h43 du matin. Donc, Manu vous attend au standard aux 0800, 308, 5000. Tu l'as déjà dit ça, Gérard. On est débat de Gérard du jeudi soir. Disons, on est vendredi. Donc, le débat, ça porte sur les jeux vidéo. Et on récupère donc... Monica, la tigresse. Salut, Gégé. Rebonsoir à toi. Ouais. Double gomme. Salut. Paul... Paul Fénix. Paul Fénix. Excuse-moi, j'étais en train de me faire une partie de Super Bulldog Mister 3. Ouais, ben, Super Bulldog Mister 3. Il t'emmerde. Attends, je suis contre le son de dinosaure, là. Ouais, ben, son de dinosaure, tu dégages. Ok. Oh ! Calme-toi, lui. Ça a été trop vite. Là, ben, lui, ça a été tout le visqueux. C'est la lumière. Il faut qu'il prenne les proutes magiques, là, pour dégommer son de dinosaure. Ouais, ben, son de dinosaure, pour l'instant, tu la laisses. Elle est en train de nous enregistrer, là, la peau. Ah bon ? Ouais. Elle pourrait un peu... C'est pas la grâce de vous, espèce de filiaste, là. Ouais, ouais. Ouais, elle remue pas trop bien. Oh, t'as encore une place pour elle. Ah non, hein ? Oh, si. Il n'y a plus de place, là. À la place de Paul Romix. Non, non. Bah, ouais, bien sûr, on va dégager quelqu'un d'intéressant pour quelqu'un de... Ouais, et alors ? Je vais te dire un truc, c'est que tu nous as saoulés toute la journée pour pas avoir d'habituel, alors il n'y a pas moyen. Ouais, ben, attends, on a bien eu Tony au premier débat. Ouais, mais il s'est fait garter. Ouais, ben, tiens. T'es pas encore là, toi ? Ben, non, c'est pas Tony. C'était pas Tony, ça. Super Mario. Oh, tu vois, quand je demande les noms, vous répondez ou pas ? Bon, d'accord. Super Mario. Ouais. T'es là ? Ouais. T'as répondu ? Ouais. Ouais, ben... Bon, d'accord. Fantôme Glouton ! Il est vieux, Super Mario. Ouais, celui-là, il a... Putain ! Oh, les grosses sanguines. Hé, les grosses sanguines, attends, merde, toi, salope ! Oh, là, là. Ah, mais les grosses, c'est celle-là, là. Ah, ça va mettre, avec le tampon vert. Attends, c'est pas moi le standard, hein. C'est toi qui gère, Manu, hein. Merci. Merci, Manu. Fantôme Glouton. Eh, celui-là. Oui, t'es gaffe, c'est Glouton qui attaque. Bon, alors, tu dégages, toi. Hop, terminé. C'était pas lui, c'était Zelda, je l'ai dégagé. Allez, hop. Zelda. Non, je viens de te dire que c'était lui qui avait dit ça. Regarde, Fantôme Glouton, il m'a dégagé, Zelda. Ok, alors... Donc, quatrième question, parce qu'on va faire vite, là. Alors, d'après vous, les jeux... D'après vous, jouer à un jeu vidéo est-il réservé aux garçons ? On va demander ça à Monica. Non, non, non, non, non. Non, non. C'est autant réservé aux filles qu'aux garçons, je suis désolée. Et voilà, quoi. Je vois pas pourquoi ce serait réservé qu'aux garçons, après tout. Ouais, mais de toute manière, il y a plusieurs parties. Hugo ? Oui, sur IRC, il y a Sardine qui te demande comment on fera pour compter les points en euros sur les consoles. Toi, je sais pas. C'est n'importe quoi, Hugo. Par contre, par contre, par contre... Oh, la salope, là, qui est incarnée comme une pute ! Arrête d'être vulgaire, Gérard. Ça sert à rien. Ouais, ben, toi, tu peux mieux... Ah, oui, j'ai pas. Manu... On peut rien faire. On peut pas faire un débat potable avec toi, Manu. Non, non, mais je pense que ça va aller vite fait. Hugo, on est combien, là, sur l'IRC ? Ben, on a perdu, quand t'as gueulé un peu trop, on est à 3852. 3852 ? C'est pas terrible, hein. Tu notes pas ? 3852. 3852. Allez, pas trop vite, quand même. En plus, je me suis renseigné par quelqu'un. Comment ? Tu vas les donner à Jean Donnader, les numéros ? Non, non, non. Je me suis renseigné par une personne qui peut avoir aussi Internet. Sur son tatou ? On peut avoir plus de 6000 personnes sur l'Internet. Mais ça dépend de l'appareil qu'on a. C'est pas le thème du débat. OK. Alors, Monica. Oui ? On m'accueille, pardon, à la place de Zelda. Link. Bonsoir. On s'accueille tous les jours. Gérard, deux secondes. Link. Oui, bonsoir. Ouais, je suis fan. Ouais, je te remercie. Je t'en remercie. C'est vraiment assez bio. Euh, oui, mais moi, par rapport au... Ouais, je pense que... Oui, je suis les filles aussi, pas que je joue à la vidéo. Eh, bonsoir, quand même. Bonsoir. Non, mais... Non, mais comment tu fais que je me concentre avec tous ces gens qui taisent autour de moi ? C'est vrai que c'est pas évident. Manu, tu pourras gérer un peu. Non, mais c'est bien. Là, je crois que le deuxième débat, il va être vite terminé. C'est n'importe quoi, Gérard. C'est vrai. Je t'écoute, Luc. Link. Link, mais moi, j'ai déjà répondu. Je t'ai dit que oui, les filles pouvaient effectivement jouer aux jeux vidéo. C'est les filles qui apprennent les consoles roses et les mecs les consoles bleues. C'est des consoles pour vie et des consoles pour garçons. C'est pour les filles, quoi. Ah, ouais. C'est une équivalentité. Super Mario ? Bah, moi, je pense que ouais, mais ça dépend des jeux, quoi. Ouais, mais tu peux préciser ? Bah, les jeux trop violents, quoi. Il vaut mieux que ça s'arrête. Il vaut mieux laisser des jeux de boysband aux filles. Ouais. C'est moi qui suis en temps. C'est moi qui suis en temps. Voilà. OK. Paul Fenix ? Non. Ouais. Je suis encore là. J'ai vu que Manu m'a calmé au standard. Je voudrais que tu me répètes la question, s'il te plaît, parce que j'ai pas pu entendre. Alors, d'après vous, un jeu vidéo, est-il réservé aux garçons ? Euh, je pense que oui, parce que j'ai jamais vu de console rose ou quoi que ce soit. Euh, si. Non, non, non. Bah, tu peux le reprendre. Ouais. OK. Une petite peinture ou de la gouache. Tu peux reprendre ta peinture. Voilà, OK. Euh, Bubblegum ? Euh, ouais, bah, moi, j'ai un jeu vidéo, donc je joue avec. Ouais, ouais, j'ai une manette ergonomique qui nous permet de faire plein de solutions et plein de sauts périlleux en arrière. Euh, Monica ? Oui ? Oui, Brandy ? Hein ? Oui, bravo. Oh, il a une licence. Il est fan, hein ? Vous laissez répondre, les gens, s'il vous plaît. Merci, Monica. Tu réponds à la question. Quelle question ? J'ai déjà répondu, j'ai... Ah bon, bah, alors, on va passer à la seconde. Eh, Fantôme Glouton, j'ai pas répondu. Quoi ? T'es encore là, toi ? Bah, oui, c'est Zelda qu'on a dégagé tout à l'heure. Voilà. Et Yannick, elle a... Merci, Rigo. Euh, pour gaucher, alors, ça, faudrait qu'on pose la question à un gaucher. Y'en a au Japon. Y'en a au Japon. T'es gaucher, non ? Non, du tout. Ah, merde. Non. Merde, non, ça, c'est pas... Et toi aussi, si elle est tout bitrée, mais ça n'a rien à voir. Ou alors, toi, tu t'écrases. Ouais, Gérard ? Quoi ? Fantôme Glouton, je continue, parce que je parlais quand Rigo m'a coupé. Bon, attends, pour l'instant, si Rigo, il vous coupe, c'est parce qu'il y a des questions IRC qui sont plus importantes que vos conneries. L'IRC, c'est un véhicule prioritaire, je sais. Voilà. Il y a des jeux pour les filles. Moi, j'ai une petite sœur. J'ai une petite sœur, elle joue aussi, ouais. J'ai une petite sœur, elle joue à Salope Fighting Beach 4. C'est un jeu de combat pour filles, quoi. Y'a que des filles dedans. Tu me les vires, celui-là, Manu ? Tu me les vires ? Pour vous jouer... C'est un Game Boy ? Non, mais il est mort, là. Il a Game Over. Vas-y, on y va. Game Over. Pour vous, jouez-vous à la Game Boy ? Est-il un passe-temps ? On va demander à Monica. De quoi ? De quoi ? De quoi ? Jouez-vous à la Game Boy ? Est-il un passe-temps ? Ben oui, je pense que oui. Ben, tu peux préciser ? Ben oui, c'est un passe-temps. Un jeu vidéo est un passe-temps. Non, mais tu peux préciser ? Ben, préciser comment, Gégé ? Précise ton nom. Non, mais tu précises ? Ton nom. Ton nom ? Ton numéro de téléphone, ton adresse, ta carte de crédit. Oh, tiens, tu permets ta gueule ! C'est un passe-temps, je crois plutôt que c'est un passe-temps. Ou un passe-partout. Voilà, un passe-partout. Gérard ? Oui ? Y'a Turpentine qui te demande si tu connais... Ah ouais, j'en ai pas, il a dit que les autres comme toi, Gérard. Mais vu que tu connais la Game Boy, est-ce que tu connais la Game Girl ? Non. Pulder, t'arrêtes, s'il te plaît, quand on parle. Tu n'as rien fait, Gégé. Donc, tu me disais quoi, Rigo ? Je te demandais si tu connaissais, comme il y a la Game Boy pour les garçons, est-ce que tu connais la Game Girl ? Non. Non, pas du tout. Et pourquoi ? Il n'y a pas de pourquoi. Donc, eh... Bubu le gomme. Ouais. Moi, non, je trouve que c'est une perte de temps, plutôt. Je préfère jouer avec mon tamamochi. C'est pas un jeu vidéo, ça ! Non, mais attends ! Eh, les tomatochips, là, c'est le truc... Les tomatochips, là ! C'est n'importe quoi, ce que tu dis. Bah, non, c'est bidon. Ah, ok. Bah, moi, tu perds pas ton temps, comme quand tu joues au Game Boy. Bah, ouais, mais de toute manière, si t'as de l'argent à foutre là-dedans, en l'air, tu peux, hein. Mais pas en l'air, je le fais en mon tamamochi. Bah, ouais, mais de toute manière, il faut bien lui donner à bouffer, ton tomatochi. Bah, oui, mais bon, ça coûte pas cher en bouffe, un tamamochi. Et quand il meurt, tu fais quoi ? Bah, quand il meurt, je rachète un autre. Et puis, attends, la thune dépensée, c'est n'importe quoi. Paul Phoenix. Tu rires. Avec Rigo. Bah, allô ? Attends, attends. Bubblegum ? Oui ? Tu veux retourner sur l'IRC ? Mais non, c'est une blague. Parce que sinon, y'a pas de problème. Non, mais elle l'a pas, IRC, comme elle fait chez elle. Tu demandes à Manu, et puis c'est bon. Il t'en achète un. Il t'achète un Internet, Manu, tu demandes, il est sympa. Pas de problème. Gérard, y'a Ziwi qui te demande si tu connais la console Neo-GGO. Non. Paul Phoenix. Ouais, c'est un passe-temps. Je voudrais savoir si, d'ailleurs, toi aussi, t'as un passe-temps. Si tu connais la Game Boy, mais est-ce que tu connais la Game Boy ? La Game Boys. Non, mais... Avec le jeu Super Penetrator 4. Tu connais pas ? Non. Tu peux préciser le fond de ta pensée ? En tout son cul. En tout son cul, toi, salope. Voilà, salope. Et hop, terminé. Moi, de toute manière, 2h53, dans 7 minutes, j'arrête. Ok, Michel. Super Mario. Moi, ouais, je pense que c'est un passe-temps, parce que, franchement, quand on a rien à foutre, c'est bien agréable d'avoir un truc pour s'occuper, quoi. Ouais, t'as qu'à toucher la cliquette, quoi. Ouais, mais bon, ça, c'est différent, quoi. C'est plus rapide, quoi. T'as qu'à toucher la cliquette, quoi. Voilà. Gérard. C'est pour ça que j'ai arrêté, quoi, à force, quoi. J'ai une info du vrai Yankee sur l'IRC. Le jeu de l'année, c'est Carmine Affion sur la console Gris. Carmine Affion. Il est pas mal, ce Yankee, je l'ai vu. Il tue, quoi. Je crois que c'est le jeu numéro 1. Qu'est-ce qu'il y a, Gérard ? Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? Mais arrête ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? C'est plus fort que ça, le DG, merde. Dernière question. Ah bon ? Pas... Pas... Fais-le exprès, toi ! Mais attends, c'est pas moi qui fais la technique, hein. Ils sont là-bas, ils sont en rue Bayard. Ils sont en rue Bayard, j'ai pas rien, hein. Dernière question. Genre, avant la dernière question, il y a Turpentine sur l'IRC qui te dit que, vu que t'as jamais joué à la Game Boy, elle va t'envoyer une Game Goal. Une Go-Goal. Ah bah, c'est bien. Une Game Goal. Une Go-Goal 64. Ouais. T'en passes pas. Sur l'IRC, il y a... Tu le veux dans la gueule, là ? Tu me tiens, ça ? C'est un quoi ? Une Go-Goal 64. Mais viens vérifier, c'est un truc d'allumé. Alors, attendez. Attendez, attendez deux secondes. Gérard va vérifier si c'est un truc d'allumé. Ah ouais ? Ah ouais ? Ça, c'est ce que c'est ? C'est le micro. Ça, qu'est-ce que tu veux que j'allume ou que j'éteigne ? C'est allumé... Tu comprends pas, hein ? Gérard ? C'est vrai que c'est un truc d'allumé. Non, c'est... Terminé ! Non, mais attends, t'as posé trois pauvres questions. C'est quoi, le débat ? C'est quoi, le débat ? Si vous plaît, les auditeurs. Si vous plaît, les auditeurs. Gérard va poser la dernière question. Gérard va poser la dernière question. D'accord, on écoute. On écoute, Gérard. Comment ? On écoute. Attends, celui qui vient de poser une question qui dise son nom. Non, je l'ai coupé parce que c'était pas bien. Et la dernière question. Avez-vous déjà participé à un championnat de Game Boy ? Oui. C'est quoi, ce travail ? C'est quoi, ce bordel ? C'est quoi, ces gens ? Et la laine avec le micro ? Vous répondez. Qui répond à la question, Gégé ? Personne. Monica ? Je vais être brève, Gégé. Non, j'ai jamais participé à des championnats de Game Boy. D'accord. Gérard, tu crois que c'est intéressant ou pas ? Pour l'instant, c'est pas toi que je m'adresse. Sur IRC, on me dit que sur Street Fighter 2, pour avoir les turbos de 10 étoiles, il faut faire bas, R, O, L, Y, B, X. Ah. C'est pas vrai, il faut les relancer des petits mains aussi. T'as oublié R2, hein. R2, voilà. Bon, enfin, bref. Je parlais du 2. Du 2, pas trop mieux. Pas du Alpha, machin. Du Alpha, c'est pas vrai. Double Gun ? Ouais. Non, moi, j'ai jamais participé à un championnat de Game Boy. Par contre, j'ai gagné un championnat de T-shirt mouillé. D'accord. Où ? Où ? À la mer. Ouais. Paul... Paul Phoenix ? Ouais, ouais. J'ai jamais participé de ma vie à un truc qui a... Bon, en conclusion, il y a plus de... Il y a plus de questions. Ouais. Laisse-moi répondre. Ouais, je... Gérard, je voudrais... Putain. Mais qu'est-ce qui... Mais qu'est-ce qui... Gérard, je voudrais répondre. Vas-y. D'abord, je voudrais dire... En fait, je comprends pas pourquoi toutes les questions tournent autour de la Game Boy. J'ai jamais participé à un championnat de Game Boy. Et je voudrais qu'on réhabilite ce soir la Master System. Non, mais maintenant, c'est fini. Mais non, la console a taré. Laisse-moi parler. Mais la Master System... Conclusion ! Je peux conclure, Gérard ? Ouais. C'est qui ? C'est qui ? C'est Link. C'est Link. Ouais. Je voulais d'abord dire que c'était un débat un peu moins intéressant que le premier, mais qu'on a quand même appris des choses. On a déjà beaucoup appris sur les jeux vidéo. Et je voudrais aussi... Tu peux même dire ce que t'as appris sur les jeux vidéo. J'ai appris que Gérard utilisait parfaitement le vocabulaire du jeu vidéo. Et que c'était toutes les nouveautés. D'accord. Et j'ai appris également que mon jeu allait sortir demain. Sortira demain, Link, quoi ? Ouais, je sais, ouais. Ah, c'est de la bonne chance. Conclusion ! Conclusion ! Conclusion ! Je vais parler, là. Il disait, la plénitude n'est que ce que l'homme recherche. Ok. Bon, Gérard. Ouais. C'est qui ? C'est qui ? Paul Félix. Ok. Je vais conclure en disant Game Over. Et aussi, je vais donner un petit tips pour le jeu Super League Mystery 3. Non, non, pas de marque. Pour buter le mode de fin, il faut lui envoyer un petit kiss puant dans la gueule. Et ça marche à tous les coups. Bravo, Manu. Merci, Manu. Merci. Euh... Qu'est-ce qu'il nous reste ? GG. GG. Et le fantôme glouton. Ouais. Ouais, alors, en conclusion, je veux dire, je suis déçu parce que t'as pas posé beaucoup de questions. Et je voulais dire que sur les jeux vidéo, est-ce que c'est vrai que toi, t'es comme la Nintendo 64, c'est-à-dire 64 bits par minute ? Alors, moi, je sors meilleur. Bah, attends, je te demande. Super Mario. Bah, la conclusion, moi, il y a un pote qui m'avait dit que tes dévats étaient nuls. Mais bon, en fait, non, c'est pas vraiment nul. C'est carrément pourri, quoi. Mais bon, c'est pas grave, quoi. Paul Fenix. Ouais, bah, on va en faire une deuxième, pendant qu'on y est. J'ai pas trop quoi dire, moi, j'ai tout balancé, donc... Bon, ça... Un autre tips, non ? Ouais, bah, moi, je voudrais dire que j'aimerais bien qu'il fasse partie d'un des personnages de Street Fighter, comme ça, je pourrais t'en parler ta gueule. Bah, moi, c'est ton merde, connasse. Euh, Monica. Je me suis sentie trop concernée par ce débat. Mais je voulais dire que si un auditeur se le m'appelait, y'a pas de problème. Enfin, pute. Ok. Connasse. Ok, bah, c'est bien. Régo, conclusion ? Elle était jouée à Insultator 3. Euh, conclusion ? Alors, conclusion de l'IRC, y'a Turpentine qui dit que ton débat, il avait ni queue ni tête comme toi. Y'a... Oh là là, parce que ça va trop vite, là. Entre les mecs qui parlent d'argent ou alors qui n'en ont pas, et ceux qui parlent de console, enfin, bon, là, j'arrive pas à suivre. Il est temps que GG s'achète une console avec son argent de poche en euros pour pouvoir connaître les règles du jeu. Et sinon, si les consoles n'existaient pas, on a quand même GG pour foutre la merde sur l'IRC. Et combien de personnes ? Douze. On en a perdu quand t'as gueulé. Ouais, là, on est descendu sous les 2000, je préfère pas en parler. Non, bah, ça me fait une dalle. C'est lamentable. Donc, conclusion, bah, c'est... Gérard, sinon, y'a le vrai Arnette sur l'IRC en conclusion, il dit que tu pues la merde. Alors, moi, je dors merde. Moi, je dors merde et j'y suis dans... Oh là là, c'est dégueulasse. Donc, alors, tu me casses pas les couilles. Bah, c'est tout ce que j'ai à lui dire. Donc, vous allez retrouver Rousseau pour la... Ta conclusion, Gérard, ta conclusion, quand même. Ma conclusion, c'était de la merde parce que tu pues ta merde toutes les semaines, comme d'habitude. D'accord. Manu, pour un sens, ça pouvait aller. Y'en a qu'un qui fait bien son boulot. Y'a que Rigaud qui sait travailler. Y'a que moi. Y'a que lui. C'est incroyable. Y'a que lui qui arrive à nous faire quelque chose. Donc, maintenant, vous allez retrouver Rigaud. Attends, attends, j'ai une conclusion sur l'IRC. Deux secondes. Rigaud, Ré va te donner du plaisir. Qu'est-ce que ça peut te foutre, toi ? Toi, t'es vraiment le pédé. C'est tout ce que j'ai à te dire. Il te fait quelque chose. Y'a que lui qui fait bien son boulot. C'est vrai. Et y'a Ziwi sur l'IRC qui conclut en disant que les jeux vidéo, c'est beau et que GG, t'es un chier. C'est bien. Donc, qu'est-ce que j'ai à vous dire d'autre ? La semaine prochaine, les débats... On sait pas. Non mais, Pildar, quand t'auras pris une idée connerie, tu me le diras. Donc, maintenant, vous allez retrouver Rigaud pour la nuit sans pub. 6h-9h. C'est moi, là, je fais la nuit sans pub. Rousseau, pardon, pas Rigaud. Qu'est-ce que je dis ? Rousseau pour la nuit sans pub. Demain matin, 6h-9h. Max, et après... Merde ! La grillantaine, elle est belle. Tu fais quelle heure, toi ? Tu fais le décrochage vocal, non ? Oh là là ! La nuit sans pub, avec Rousseau. Sans pub, y'a pas de pub cette nuit. Gérard, y'a quand même une conclusion du vrai muldeur des X-Files. Il dit qu'il aurait mieux fait de jouer à sa console que d'écouter ton débat de merde. Merci Rigaud, tu nous donnes du plaisir. Alors, donc... T'as donné du plaisir. Vraiment, donc... Là, vous allez retrouver Rousseau pour la nuit sans pub. 6h-9h. Barthes. Et 22h, Max, pour la libre-antenne avec Jean Deneuver. Donc, vous pouvez appeler... Dès maintenant, appeler dès maintenant. Appeler dès maintenant pour Jean Deneuver. Appeler dès maintenant pour la... Manu reste jusqu'à 6h. Pour la libre-antenne, donc, demain soir. Et moi, je vous retrouverai la semaine prochaine, si tout va bien. On a le temps, on a le temps. Je voulais juste dire à tous les auditeurs qui voudraient encore aller sur l'IRC, y'a Sandy qui vous attend, la vraie. Non. Sandy Amatora à la maison. Bonne nuit, Gérard. Le disque pour skitter, tu connais pas ? Ah, non. Zintonic, tu connais ? Euh... C'est le truc pour danser. One, two, three, four. Non. Tu connais pas ? == Le débat sur la CB (Cibie) == === Contexte === === Les personnages === === Transcription === Pas de radio et pas d'insultes de Gérard. Et voilà, vous venez donc d'écouter un petit remix qui a été passé hier soir lors de l'émission de Max. Non, non, non, c'est ce qu'on a récolté dans une boîte de nuit. Voilà. Dans une boîte de nuit, c'était pas sur le répondeur ? À la chunga. Ah, à la chunga, d'accord. Gérard, il dit des conneries. Vas-y, commence-toi. Gérard, c'est Turpentine de l'Internet qui l'a récupéré. Voilà, je la remercie. Et là, avant, j'étais en train de demander à Rigo combien qu'on était. On est déjà 3 000... On était 3 582 quand je te l'ai dit. On est déjà à 3 722 moins 4. Donc, le premier débat va porter sur la cibille des erreurs 55. Donc, on va accueillir Cendrier. Oui, allô ? 20 ans, Mazamé. On écoute Fun Radio sur 99.4. Oui. Bonsoir à toi. Bonsoir. Mets ton doigt. Oui. Salut, Gérard. 18 ans, Verdun. On écoute Fun Radio 93.9. Oui, c'est ça. Tais-toi. Oui, bonsoir, Gérard. 22 ans. Bonsoir, Gérard. Bonsoir à tous. 22 ans de... De... De... De... De... La Cachan. Oui. Bonsoir. La Cadeau, pardon. On écoute Fun Radio 98.6. Exact. Bonsoir, Gérard. Bonsoir à toi. Petite truie. 19 ans de Alès. On écoute Fun Radio 95.6, pardon. Oui, bonsoir à toi, Gégé. Bonsoir à l'équipe. Bonsoir. Salut, tout le monde. Salut. Fesse de taureau. Bonsoir, Gégé. 25 ans. Isola 2000. On écoute Fun Radio 101.7. Exactement. Ça va bien, Gégé ? Je sais pas. Je n'ai pas regardé ce matin, ça. Ah, Gégé. C'est la fin de la tournée. Et... Sans pitié. 19 ans. 10 ans. 103.5. C'est sans pitié. Ben oui, ben. C'est ce que je viens de dire. C'est ça. Bon, alors, les oreilles, c'est comme le cul, ça se lave. Mais sans contotiche, d'accord ? Ouais. Ok. C'est clair. Bon, alors, on y va. On attaque. Première question. Est-ce que vous possédez une CBC, oui ? À quoi cela vous sert-elle ? On va demander ça à Tétois. Ouais, ouais. J'en possède une. Ben, en fait, ça me remplace le téléphone chez moi. Non, mais... Ben, ça y est. Ça, je m'en serais douté. Ah, ben ouais. Je m'en serais douté qu'on m'aurait dit que ça remplace le téléphone. Tu t'en redoutes aussi. Ouais. Donc, tu peux préciser ta... Ma phrase ? Ta réponse. Ouais. Donc, ben ouais. Je m'en sers comme téléphone parce qu'en fait, j'ai pas le téléphone. Ça coûte trop cher. Puis, c'est pas ce téléphone. C'est pas ce télécom. Ouais. Non, mais attends. Attends, attends, attends, attends, attends, attends, attends. Commence pas. Quoi, quoi, quoi, quoi, quoi ? Oh, hé, hé. Hé, tu vas te calmer parce que sinon, c'est moi qui te calme. Ok ? Ok, gamin. Oh, c'est Michel. Oh ! C'est moi qui parle. Ok ? Ouais. Ça parle, alors. Non, vas-y. Alors, déjà, la CBI, ça a été agréé par les PTT, mais maintenant, ça y est plus. Ok ? Pourquoi ? Pourquoi ? Euh... Parce que maintenant, la CBI, tu peux la posséder comme tu veux. Ça veut dire... Vas-y, vas-y. Ouais, je sais pas ce que ça veut dire, agréé. Agréé, c'est... Ben... Quand t'achètes un téléphone dans un magasin, c'est agréé PTT. Donc, derrière ton téléphone, t'as une marque. Et dessus, c'est marqué agréé PTT. Petit travail tranquille. Ouais. Voilà, ça veut dire ça, PTT. Mais ça n'existe plus, les PTT, hein ? Ah non, presque pas. C'est eux qui nous envoient le courrier. Quand ça marche... À une condition que ça fonctionne bien. Ok ? Ok. Euh, Cendrier ? Oui ? Tu t'écoutes ? Non, ben attends, je t'écoute, c'est moi qui t'écoute, maintenant. Tu réponds à la question, ou si tu réponds pas, ben, on va te dire bonne nuit. Ok, bon, ben moi, j'ai pas de CBI, mais je compte bientôt en prendre une. Ouais. Donc, je sais pas, c'est laquelle la moins chère ? Alors ça, pour l'instant, tu vois, là, tu commences déjà à me parler des questions qu'on n'est pas dedans encore. Ah, excuse-moi, d'accord, j'attends. Ok ? Ok. Alors, pour toi, ça va être... Euh, si, la question que je vais te poser, à quoi ça va te servir ? Ben, en fait, ouais, c'est une bonne question, à quoi ça va me servir ? Ben, je sais pas, garder le contact avec les gens, c'est cool, avec les camionneurs, tout ça, c'est bien. Non, mais, Fildar ! Non, mais, je prends un gâteau, mais... Non, mais, attends, Fildar, s'il te plaît ! Attends, Fildar ! Excuse-moi. L'autre, il ouvre carrément le paquet. J'avance au micro. Gérard, pour commencer, enfin, pour le début du débat, il y a... Perforas, le vrai Perforas sur l'IRC, d'ailleurs, il te salue. Il te demande qu'est-ce que ça veut dire, 6 billes ? 6 billes, en fin de compte, ça veut dire... Ben, justement, c'est la question. Ça veut dire 4 bancaires ou... Ouais, ben, ça veut dire 4 bancaires ou... Ben, oui, c'est tout, hein. 4 bancaires ou 4... Cues bouchées, cues bouchées. Cues bouchées, cues de bite... Lâche-toi, lâche-toi, Lascar, vas-y. Ok, non, allez, allez, allez... Non, mais... Moi, je croyais que ça voulait dire communication brève. Ok. La prévision de 6 billes, non ? Moi, je croyais que ça voulait dire 6 billes trop, en fait. Comment ? Je croyais que ça voulait dire 6 billes trop. Sur l'IRC aussi, l'indie, ça veut dire connard bourré. Bon, ben, ça, ils peuvent dire ce qu'ils veulent, hein, de toute manière, tu peux... N'importe quel nom. C'est une bonne définition, quand même. Mets ton doigt. Mets ton doigt, tu réponds, s'il te plaît. Ouais, c'est moi, je dirais. Ah, il a son pont, lui. Vas-y, laisse ton doigt. Ouais, vas-y, vas-y, vas-y. Eh, mets ton doigt dans mon cul, là, celui qui s'amuse à passer à chanter ça, il va commencer par fermer sa gueule. Ok, merci. Ça a coupé, hein, Manu. Bon, Manu, c'est quoi, ce bordel, là, déjà ? Je sais pas, l'auditeur, il a raccroché. Ah, il a raccroché, mets ton doigt. Ah, ben, c'est bon, tu prends quelqu'un d'autre. C'est bon, c'est bon, c'est bon. Allez, là, mais en plus, c'est cause, je crois que c'est un passionné de 6 billes et qu'il en a une. Parce que, euh, sur le téléphone, tu peux... Tu peux pas parler de tout. Parce que, des fois, il y a des gens qui t'écoutent. Ouais. Donc, nous, avec mes potes, on a des business un peu chelous, donc on est obligés de passer par la 6 billes, on se met sur le canal 19, et là, personne ne nous entend. Non, presque pas, presque pas. Sur le canal 19, personne ne t'entend. Non, mais attends. Non, non, c'est privé, c'est un canal privé. Ah, ouais, mais attends, tu me prends pour un con ou tu me laisses ? Non, non, c'est pour moi et mes potes les routiers. Non, non, mais attends, attends. Ouais. Petite truie. Oui, je suis là. C'est toi qui viens de me répondre ? Ouais, ouais, tout à fait, ouais. Bon, je te demande si tu me prends pour un con ou tu me laisses ? Bon, comme tu veux, je te laisse, vas-y. Ouais, eh ben, je vais te dire une chose, que sur le canal 19, déjà, une, tu peux pas rester 50 ans à raconter ta vie. Ah, t'sais, j'ai pas besoin de 50 ans pour faire mes business, t'inquiète. Ouais, ouais, non, mais moi, je te dis, sur le canal 19, t'as pas besoin de... C'est quoi, le canal 19, Gérard ? Le canal 19, ça va être la question 4. D'accord, vous attendez la question 4. Ok, mais Gégé, tu fais quoi au niveau de la juridiction pénale à ce niveau-là ? Je veux dire, la civile, c'est quand même réglementé, tu fais quoi dans ce cas-là ? Non, plus maintenant. Ah, si, si. Non. Non. Ah bon, t'es sûr ? Maintenant, tu peux te procurer une civile comme tu veux. Ah, donc, en gros, il y a un mec qui peut prendre une civile et puis il fait une radio locale dans sa chambre, c'est ça ? Non, mais attends, déjà, une civile, tu sais ce que c'est ? Euh, ouais, c'est le truc avec des boutons et des numéros pour... Voilà, c'est un petit appareil comme, je dirais, un téléphone. Ouais. Hein ? T'as un mic ? Ouais, t'as un mic ? Tu branches ton mic sur la civile ? Tu tires une antenne. Tu tires un fil qui te donne l'alimentation avec ton antenne et là, tu peux parler. Attends, est-ce que t'as checké le flot d'abord ? Comment ? Tu checkes le flot d'abord ou pas ? Attends, tu parles français, toi ? Est-ce que tu checkes le flot d'abord ? C'est quoi, ça ? Avant de balancer la purée. T'es dans la place ou quoi ? Bon, j'ai la fièvre, je dirais. Bon, fesse de taureau, fesse de taureau, allez. Ouais, bah moi... J'achète pas de civile parce que je trouve que le son, il est pourra. T'as bien raison. Tout naze, le son, tout pourri. Il faut mettre une antenne. C'est vrai qu'entre un téléphone et une civile, il n'y a pas de flot d'aujourd'hui. Non, non, non, mais alors là... Là, par contre, fesse de taureau... Tu m'as un petit lobby avec cette antenne. L'antenne, l'antenne... Oh, s'il vous plaît ! Attendez, Gérard, réponds. Ouais. Fesse de taureau. Ouais. Si déjà, t'achètes une civile sans antenne, tu peux être sûr que t'entendras rien. Bah, je sais, mais même avec une antenne, le son, il est naze. Non. Mais pourquoi, Gérard ? Non, parce que là, il faut se dire une chose. Avec une antenne de civile, donc tu la branches sur ton TX et ça a toi de... C'est quoi, un TX ? Un TX, c'est un appareil, comme dirait le Minitel ou téléphone. Mais pourquoi, par exemple, quand tu branches une civile, ça fait... Non, mais ça, c'est... Non, mais c'est normal. Non, mais c'est bouffé. Attendez, il répond, il répond. Non, parce qu'il y a certains TX... Non, euh... T'as du mal à les régler. Mais c'est à toi de les régler, parce que, pourquoi ? Faut se dire une chose, qu'avec l'antenne de civile, il te faut un TOS. Un TOSmètre. Ce qui te permet... Un TOS, non ? Non, non, non. Non, non, un TOSmètre, c'est... Ce qui te permet... Gérard, un peu de respect. Attends, s'il vous plaît ! Respect, respect, respect, c'est pas la chose. Attends, j'en ai fait de la civile, donc je sais ce que c'est un TOSmètre, ok ? Un TOSmètre, ça te permet de régler ton antenne. Correctement, pour pas avoir de problèmes. D'infrastructure. Donc, si la personne ne sait pas régler son antenne, c'est son problème. D'accord, et pour régler une antenne, il faut un TOSmètre. Voilà, un travailleur clandestin, quoi. Non, non, non, non. Et il va vite, il est quick ou pas ? Non, non, ça dépend d'où tu te trouves, et je vais même pas insister sur vos questions. Sans pitié. Ouais, ça sert à rencontrer des gens, et il paraît que face à la région du Nant, on peut rencontrer des gens. Il y a des mecs sur la Cibi, je crois, n'est-ce pas ? Ouais, ouais, moi j'ai entendu qu'il y avait un réseau de cul, Cibi, c'est ça ? Ouais, non, mais attendez, attendez, attendez. Attendez, parce que Gérard a un petit sondage, justement, sur ce que vient de dire, sans pitié. Alors, donc il y a 45% des gens qui utilisent la Cibi pour faire des connaissances, et plus il y a infinité. Mais ça, c'est des questions... Infinité. Ouais, mais... Ouais, ouais, plus c'est infinité, ouais. Ouais, mais ça... Comment ? Qui c'est qui a parlé derrière ? Bon, les filles... Sans pitié. Ouais, sans pitié, je t'écoute. Sans pitié. Ouais, ben je te disais, il y a un réseau de rencontres sur du Nant assez cul sur la Cibi, donc je vais essayer de m'en procurer une. Ouais. Donc ce serait bien que tu m'expliques un peu comment ça marche. Enfin, je vais écouter le débat, et puis je vais essayer d'apporter mes lumières. Ah, mais ça, pour t'expliquer comment marche une Cibi... Ouais. Déjà, quand... Quand tu viens chez toi. Non, non, non, non, non. Quand il n'y a pas de problème. Non, non, non, non, il n'y a pas besoin de venir chez moi. Elle achète sa Cibi à demande au vendeur. Le vendeur lui explique comment que ça fonctionne. Maintenant, si elle ne sait pas, eh ben, elle se débrouille. C'est un petit poil. C'est tout. De toute façon, il y a une notice, Gérard, quand tu achètes une Cibi. Bah oui. Mais si la notice est en japonais. Comment, comment ? Si la notice est en japonais, je fais comment ? Eh, si c'est des poignées de ton petit nègre, comment qu'on fait ? Je te l'envoie, tu m'en prêtes ? Ah, le roi de l'imitation de Gérard. Ah, Gérard, pas de Gérard. Bon, alors, deuxième question. Graines de déchets. Euh, Rigaud, une question IRC avant. Euh, oui, on te demande, Le Chiant, il te demande depuis quand la Cibi existe-t-elle ? Euh, ça, je sais pas, j'ai pas les dates, j'ai pas les dates approximatives, mais je pense que ça existe depuis longtemps. Début juin, on m'a dit, 47. Non, non, non, non, non, non, attends, la Cibi, ça va pas depuis juin. Ça fait combien de temps que ça existe, la Cibi, à ton avis ? Je sais pas, moi. Ça fait plus de 20 ans, plus de 30 ans ? Ouais. Euh, attends, euh, la Cibi, c'est, c'est connu, t'as, t'as même des, des Cibis portables. Ah, oui. Sur Titanic, il paraît qu'ils en avaient une, les Cibis. Non, non, mais c'est pas... C'était une Cibi sur le Titanic ? Eh, toi, fais gaffe là-bas, parce que je vais te faire avaler tes lunettes, si tu fais le con. Mais non, c'est pour la télé, vas-y. Donc, euh, deuxième question, Gégé. Deuxième question. Ouais. Euh, de quoi parlent les Cibistes, en, en général, là ? On va demander ça à... C'est d'autant. Non, ben, euh, ouais, ben, tiens, euh, voilà. Voilà. Comme tu l'as ouverte. Parce que c'est que des routiers, je pense. Hum ? De cul. Parce qu'il y a que les routiers qui... Ah, il y a, à, à, à, à ton avis, il y a, il y a que les routiers qui... Non, mais il y a bien 90% de Cibistes, euh, c'est des routiers, je pense. Bon, alors, moi, je vais te dire une chose, que tu te trompes déjà. Bon, c'est sûr que, euh, il y a, il y a pas mal de routiers, je suis d'accord avec toi. Mais tu te trompes. Mais faut te dire une chose, que il y a des chauffeurs de taxi qui, qui, qui l'utilisent. Ouais, je voudrais dire aussi qu'il y a aussi des prostituées. Ouais, ben, ça, euh, c'est leur problème, c'est... Ça, c'est leur problème, c'est pas le mien ! Ben, avant, moi, je dis, les, les, les, les putes, elles tapinaient sur le trottoir. Et maintenant, je trouve ça un truc scandaleux, parce qu'elles viennent tapiner sur la Cibi. Et franchement, ça brouille les canaux, surtout si tu vas sur le canal 69, c'est un vrai bordel, là-dedans. Ah, ouais, attends, attends, attends, qui c'est qui vient de, qui c'est qui vient de parler ? C'est Petite Truie. Alors, Petite Truie, j'ai jamais vu, euh, 69 canals sur, euh, sur une Cibi. Il y en a combien, d'ailleurs ? Euh, t'en as 40. Des canals ? Hum. T'as, euh, tu passes du 1 au 40 et c'est tout. À moins que t'as la, euh, la BLU, là, tu peux... C'est quoi, la BLU ? La quoi, la quoi ? La BLU, c'est, c'est un, euh... C'est un petit gâteau, ça, non ? Non, non, c'est, c'est un truc que... Un de marque, Gérard. C'est un violet en plante d'arbre. Mais attends, BLU, t'es toi, toi ? Pas de pub ? Bon, ouais, oh, vous, vous... Non, c'est quoi, la BLU ? C'est quoi, la BLU ? Non, euh, la BLU, c'est, c'est, ça permet que lorsque tu vas à l'introngé, tu peux correspondre avec quelqu'un qui est en France. Donc, il te parle en étranger, en, je sais pas, en américain ? Non, non, en étranger, non, mais par exemple, t'as... Bon, s'il vous plaît, vous vous taisez quand je parle ? Merci. Ok. Oh ! Merci ! La BLU, c'est, c'est un appareil que, euh, tu payes pour que ta cible soit homologuée pour ça, donc. T'as, ça s'appelle la BLU, donc, homologuée. Tu payes combien ? Euh, je crois que... Je crois que c'est... Tu payes 250 balles en plus du prix de ta cible. Par jour ? Non, non, non, non. Tu payes 250 balles plus le prix de ta cible. Pour la vie ? Pour tout le temps. Et la BLU, ça te permet de correspondre, par exemple, toi, t'es ici à Neuilly. Par exemple, t'as, je sais pas, je vais prendre quelqu'un au hasard de ta famille, ta sœur, qui est, qui est du côté de la Thaïlande. Ouais, bah, putain, elle est en Inde. Ouais, mais, de la Thaïlande. Bien joué. Ah, en Thaïlande. On fait des massages, ouais. À peu, à peu t'appeler. Sur ma cible ? Oui. Mais attends, Gérard, avant... Non, mais, non, mais, attends. Attends, je vais, je vais expliquer pourquoi. Parce que la BLU, ça te permet d'avoir plus de correspondance avec l'étranger qu'on a à l'heure actuelle, nous, en France. Ça sert à quoi qu'on ait inventé Internet, alors ? Bah oui, mais, mais, ça, attends. On n'arrête pas le progrès. Attends, moi, non, mais, Gérard. Oui ? Imagine quelqu'un qui est sourd, il peut pas être sur, il peut pas être sur le téléphone ou la cible, donc, forcément, il est sur Internet, c'est tout. Non, mais... Mais, mais, attends. Attends, déjà sur... Attends, le mec qui est sourd... Pardon. Excuse-moi, j'ai fait une fausse manip. Je crois que toi, t'as l'air, je vais te mettre, et toi, la grosse bouche de l'âge, je vais te mettre, et toi, le maigre, tais-toi. C'est celle dédicace pour Mobilik. Comment ? Je disais, c'est celle dédicace pour Mobilik. Le film, le film, le film. Qui c'est, qui c'est, qui s'appelle comme ça ? Rodrigo. Pierre Chalot. C'est ça, c'est ça, oui, bon. Donc, Sandrier, il y avait une question Internet, non, Rodrigo ? Ben, il y en a plein, on est plus de 4000 déjà. Oh là là, ouais ! Alors, il y a Davy One qui te demande s'il faut éteindre sa CB quand on va au cinéma. Alors, là, c'est une bonne question. C'est une sacrée bonne question de putain de merde. Une colle. Donc, de toute manière, oui. Je vais dire que oui. Et Turpentine, elle te demande combien ça coûte l'abonnement à la CB et c'est quoi le prix des communications ? Est-ce qu'il y a des forfaits ? Non. Non ? Non, non. Il n'y a pas de forfaits sur la CB. Mais comment ça coûte l'abonnement ? Il n'y a que SFR et Itinéris. Non, non, non. Non, il y a Bouille aussi. Non, non, non. Ben, attends, mais arrête de parler, toi. Les Maudit Cards, c'est pour ton taf, les CB. Mais non ! Puneuse, mais, hé ! Non, mais t'as le 7 aussi de CGTL. Voilà, t'as le 7 de CGTL et puis t'as le 3615 aussi qui fonctionne, hein ? Ouais. D'accord. Il y a Ante sur l'IRC qui me dit qu'il y a le câble aussi. Non, mais attends, ça, ça n'a rien à voir avec mes questions. Oh, Sandrier. Ouais, allô ? Ouais. Tu peux m'envoyer la question, s'il te plaît ? Non, non, non, non, non. Je répète plus les questions. Non, non, on est déjà à la bourre. Je répète plus les questions. Alors, on accouche. Ok, d'accord. Bon, alors, en fait, de quoi ils parlent, les gars ? Ben, sur les directions à prendre, tout ça, non ? Éviter les bouchons... Attendez, laissez-la parler ! Ouais, s'il te plaît, ouais. Donc, je sais pas, éviter les bouchons sur la route, les directions à prendre, tout ça, non ? Non, mais ça, c'est la... Ça, c'est la... Ouais, ben, à la rigueur, ouais. Donc, en fin de compte... Bon, je vais te répondre après, Sandrier, avant qu'on mette un disque. Tais-toi. Moi, je pense que les civils, attention, on peut les appeler, ils parlent le langage civique sur la route. Donc, ils doivent se dire, ouais, salut, salut, Robert, disons que je te file des calendriers de cul de playboy. Je t'échange un playboy contre un penthouse. Ouais, je t'ai déjà dit, ouais. Moi, je t'échange ma main dans ta gueule contre une connerie. Ok. On se fait chier avec quelqu'un comme moi, on s'en vise. Mais attends. Non, mais moi, je t'emmerde. Oh là là. Ok. Justement, Gérard, par rapport au sondage, là, t'as vu la deuxième ? Ouais, ouais, mais attends, on va finir. Petite prie. Petite prie, je t'ai déjà répondu, mon amant. Attends, je suis pas ton amour, d'accord ? Alors, tu vas te faire sauter, toi, connard. Je te kiffe. Bon, alors, hop, bonne nuit à toi. Allez, hop, celui-là, dégagez. Fermez le vent, lui. Hop, fesse de taureau. Tiens, Michel, je t'ai déjà répondu. Ok. Sans pitié. Ça sert à communiquer. Ça sert à communiquer. Vous kiffez, ça, les gars. De quoi, de quoi ? Ça sert à communiquer des plans cul. Quoi ? Ça sert à communiquer. Hé, parle un petit peu plus fort devant ton combiné, parce que j'entends pas. C'est un téléphone de merde, hein. Ça sert à communiquer des plans cul sur la région du Nant. Ouais, d'accord. Je crois que tu vas retourner dans ton lit. Ouais. Tu vas continuer avec ta cibille pour essayer d'avoir des petits cochons qui veulent bien te sodomiser. Ouais. Hein ? Et puis, on va te dire une bonne nuit. Ouais. Ok ? D'accord. D'accord. Eh ben voilà, bonne nuit à toi. Salut. Il y a du poids sur la cibille, toi, là. Bon, c'est... Merci. Donc, sur la question, là... Attends, il y a Métondoa qui n'a pas répondu, s'il te plaît, Gérard. Ah, c'est... Ouais, Gérard, excuse-moi, mais tu m'as pas appelé. Ah, oui, oui, oui, excuse-moi. Ouais. Ouais, alors, moi, j'ai dit que sur la cibille, ils parlent un peu de tout, quoi. Mais quand ils parlent... Tu veux, là, j'ai la cibille à côté de moi et... Ouais. Allume-la, va. Tu mets quelle la 19, là ? Allume-la, allume-la, allume-la, vas-y. Tu mets quelle la 19, hein ? Vas-y, vas-y, vas-y. Voilà. Vas-y, demande... Demande quelque chose. Eh, il y a quelqu'un, là ? Déjà, pour commencer... Ouais, ben, ça gueule, mais c'est ce qu'ils font, hein. Non, non, attends, attends. Déjà, pour commencer, on ne demande pas. Il y a quelqu'un ? Tu demandes. Qu'est-ce qu'il faut dire, justement, voilà. C'est quoi ton QRZ ? Euh, moi, c'est DJ Boost. Bon, alors, tu dis DJ Boost... DJ... DJ Boss... Pour un... DJ... DJ... Ouais. DJ Boss pour un STTX. OK, alors, attends, j'essaie. Vas-y. Ouais, attention, les stations, c'est DJ Boss pour un STTX. Là, il a transformé les stations. Voilà. Donc, là, il y a du monde. Voilà. Donc, il y a du monde. Donc, là, quelqu'un répond, c'est ça, Gérard ? Donc, là, tu demandes... T'as demandé... Attends, attends, attends. Oh, mets ton doigt. Mets ton doigt ! Ah, là, ben, c'est ton doigt. C'est ton doigt ! C'est ton doigt ! C'est ton doigt, Manu. Ouais ! Faut que tu commences, là ! Ça y est ! Voilà, donc, là, je peux vous dire que, pour faire... Déjà, quand vous achetez un STTX, déjà, la première chose que vous faites, vous allez... Non, j'ai pris un 103XPX, moi. Non, non, non, non, non, mais attends. Déjà, pour commencer, quand vous achetez un STTX que vous savez pas vous en servir, déjà, le vendeur vous explique comment que ça marche. Après, vous allez sur le canal 19, vous dites, voilà, par exemple, un QRZ bidon, puis la pisse pour un STTX. Non, mais comme ça, tu vois, c'est un QRZ que je prends au hasard. Le mec, il va te dire, bon, ben, c'est OK, ça passe. Je te change ton slip. Stop, stop, stop ! Je dirais, sur IRC, il y a Sardine qui te demande si on peut mettre sa 6 billes sur liste rouge. Non. Oh, putain. Mais attends, mais c'est pas des téléphones, une 6 billes ? Moi, j'en sais rien. Non, mais tu vois, les gens de l'Internet, ils sont largués en 6 billes. Ils connaissent que leur... Ils arrivent pas à se connecter sur la 6 billes avec l'Internet. On peut pas ? Mais non, c'est impossible. C'est impossible. Donc, alors, à la question que je vais poser... Donc, là, va mettre un disque, mon chéri. Mon chéri... Attends, je suis pas ton chéri, d'accord ? Pas de marque ! Toi, tu vas te faire sodomiser, toi. Donc, il y a 23% des routiers qui utilisent... Utilisent seulement leur 6 billes pour trouver un endroit pour faire leurs besoins. Alors ça, Gaël... Ouais, Gaël... Gaël, je vais te dire une chose. Que là, t'as... Le sondage que tu viens de trouver des 23%, je sais pas où t'as été me le chercher. Peut-être qu'elle a voulu dire, tu vois, comme ils sont sur la route, par exemple, ils veulent une station-service parce qu'ils ont envie de faire leurs besoins, ils peuvent peut-être pas s'arrêter sur le bord de la route pour pisser dans le... Non, non, mais attends. Surtout sur l'autoroute, Gérard. C'est dangereux, un camion qui s'arrête sur l'autoroute, c'est dangereux. Non, mais sur l'autoroute, faut se dire une chose. Une chose, par contre... Merde, j'ai y arrivé. Par contre ? Faut se dire une chose, par contre, que t'as plusieurs aires de repos. On l'a bien vu quand on a été avec Max, je sais plus, à... Non, mais ne le dis pas, ça le dit pas où on est allé, ne le dis pas, ne le dis pas. Je sais plus, du côté du Havre, là-bas. Ouais, on a pris des photos et tout. Faire une soirée. Hum, hum. Donc, il y avait... Il y avait pas mal d'aires de repos. Donc, là, ils peuvent s'arrêter. Donc, il y a plusieurs routiers, donc ils peuvent papoter ensemble. Donc... Ah, d'accord. La troisième question qu'on va poser, c'est... C'est, peut-on acheter la Cibi en allant à la banque ou autre ? Et on va s'écouter les petits bois du bois de boulagne avec des envies de caca. Et on se retrouve tout de suite après au 0803 085000 et 0870 5000. C'est quoi ? C'est le disque ? Ah bah, dis-donc, il est pourri, hein ? Et voilà, c'était les petits bois du bois de boulagne avec des envies de caca. Et donc, il est 1h... 1h21 et vous êtes toujours sur Fun Radio. Donc, vous pouvez toujours nous appeler au 0803 085000 0870 5000. Et toujours lire, c'est www.fr.funradiorigo. On est combien, s'il te plaît ? On est 4324,2. Ça cartonne fort, ce soir. Le débat se passe bien. Je salue 2-3 personnes visées. Je salue Paradox, Bacchus, Christophe, Izen, Sardine, Le Vrai de Marseille, etc. Il est là, Davy One ? Ouais, bien sûr, il est là. Ah, c'est cool. Et moi, je salue une personne, un cibiste. Tout particulièrement, donc je vais saluer 2 cibistes aussi. Donc, c'est-à-dire Lolo91. C'est son QRZ, ça ? On va peut-être l'appeler tout à l'heure. On va l'appeler tout à l'heure, oui. On devrait l'avoir dans nos débats. Et je salue Petit Guépard qui est sur la route. Ah, Petit Guépard. Le guépard qui nous écoute. Le guépard. Donc, je te fais des gros bisous. Et on va récupérer Sandrine. Oui, allô ? Bonjour. Rebonsoir, pardon. Mets ton doigt. Ouais, rebonsoir, Gérard. Tais-toi. Salut, les bébés. Fesse de taureau. Sringue terre ouverte. Sringue terre ouverte, bonsoir. Oui, bonsoir, c'est Sringue terre ouverte. Fesse de taureau. Ouais, rebonsoir. Gérard, tu peux me redonner le titre du livre parce que j'ai bien kiffé. T'as bien kiffé ? Ouais, j'ai bien kiffé. Je kiffe. Tu kiffes à la FNAC, c'est tout ? Tu le kiffes à la FNAC ? Et puis, basse-toi. Ok, et Camembert ? Salut, Gérard. Alors, donc, troisième question. Peut-on acheter la CB en allant à la banque ou autre ? On va demander ça à Sandrier. Ouais, ben moi, je pense pas. À la banque, on peut pas trop acheter des CB, quoi. Mais je pense qu'ailleurs, ouais, genre au supermarché, au casino, des trucs comme ça. Pas de marque ? Pas de marque. Non, mais elle te m'a dit, en fin de compte, si on vient bien à la banque, on peut acheter des CB. Si on vient bien sur le débat, CB, ça veut dire quoi ? Ça veut dire carte bancaire. Ça n'a rien à voir. Ah, très bien. N'importe quoi, ça. Quoi, n'importe quoi ? Si vous êtes pas contents, derrière, vous vous écrasez. Bien sûr, Gérard, ça veut dire ça. Je comprendrais pas le principe, alors. Non, mais attends. Tout le monde me dit, ouais, mais CB, ça veut dire quoi ? Bon, ben, maintenant, je dis, ça veut dire carte bancaire. Il faut un code. Si tu veux faire de la CB, il faut avoir un code. Ah, oui, mais en fin de compte, t'as pas besoin d'avoir un code pour acheter une CB. Donc, mettons-lui un Z. Il y a une puce dans le soleil. CB, ça veut dire carte bancaire. Mets ton doigt. Ouais, Gérard, écoute. Ben, écoute, pour moi, la CB, moi, en ce moment, j'anime une radio gay sur Verdun. À partir de la CB, justement. Ah, bien. Donc, la CB, c'est pas moi qui l'ai achetée, donc je peux pas te répondre. Et le matos, on l'a déjà. Moi, la CB, je l'ai chez moi, mais c'est juste pour m'entraîner, quoi. Ouais, mais, donc... J'attends que 2-3 routiers, puis on se parle, et puis voilà, quoi. Ah, ben, attends. Mais attends, tu te fous de moi, toi ? Ben, non. Ben, si. Ben, pourquoi ? Je te demande de quoi parlent les cibistes, en général. Tu m'as même pas répondu. Tu m'as répondu à travers la plaque. Mais si, t'as répondu. Il t'a dit que lui, il faisait une radio sur CB, donc c'est de ça qu'il parle. Bon, OK. OK, merci, Rigo. Est-ce que tu vois ? Merci, Rigo. Euh, tais-toi. Ouais, ouais. Tais-toi. Ouais, ben. Moi, donc, ouais, ben, moi, ma CB, comme je t'ai dit, bon, j'en ai déjà une, hein, ça remplace le téléphone. Ouais. Je l'ai acheté dans un petit magasin qui s'appelle les CB Fuckers, et puis... Ouais, ben, euh, tais-toi, tu, tu, tu, tu pressurises pas les noms, d'accord ? Ouais, y a pas de pub, hein, sur le son. J'ai acheté dans un magasin de CB, et je voulais dire que c'était un gros routier poilu qui était à la caisse, d'ailleurs, il a voulu me prendre quand tu t'es fait tomber ma CB. Je sais pas trop. Hop, vas-y. Bonne nuit. Merci, tais-toi. Non, non, mais... Merci, merci. Tais-toi, tais-toi, tais-toi, tais-toi. Tais-toi, tais-toi, tais-toi, c'est bon, c'est bon. Tu es fier pour toujours. Au revoir. Mais par rapport, justement, par rapport au petit sondage de Gaël, là, y a 61%... Non, non, mais attends, euh, j'ai pas fini avec les jambes, là. Ah, d'accord, non, mais par rapport, tu vois, on peut... Ouais, non, mais, ouais, mais, euh... Ok, parce qu'il y en a pas mal, les sondages. Non, non, ouais, mais après, ben, là, c'est un peu trop long, tous les sondages. Ben, justement, en temps de temps en temps, ils peuvent réagir en même temps de la question. Fin de chair ouverte. Fin de chair ouverte. Ouais. Bon, je t'écoute. Quand je t'ai rencontré, j'y ai pas cru. Ça va pas, fin de chair ouverte, t'as un problème ? J'ai des bouffées de chaleur, là, je sais pas ce qui se passe. Ouais, ouais, je crois que, t'as l'air, tu vas avoir des bouffées de chaleur... En standard. Manu, au standard. Ok, bon, alors, ce que je voulais dire, c'est que j'écoute souvent Radio Vazdine, là, l'autre, Tarlouz, là. Ouais, ouais, ouais, c'est bon, c'est bon, allume, allume, allume, hop, hop, hop, hop, hop, terminé pour toi. Baisse de taureau. Ouais, alors, donc, moi, je sais pas, je pense pas qu'on puisse acheter une cibille dans une banque. Pardon. Mais peut-être, je sais pas, moi, dans un truc Paris pas cher, tu vois, un truc dans le style, tu peux trouver ça, quoi. Voilà. Ok. Tu as mon verre ? Ouais, bah, moi, j'ai acheté une cibille à mon copain, je l'ai acheté chez mon boulanger. Parce qu'en fait, ils vendaient la sienne, donc j'ai acheté une cibille chez mon boulanger. Justement, par rapport à ce qu'elle vient de dire, Gérard, est-ce que tu crois que c'est mieux d'acheter une cibille neuve ou d'occase ? Euh, ça, c'est une bonne question. Non, parce qu'en fin de compte, si t'achètes une cibille d'occase, tu sais pas sur quel matos tu vas tomber. Le mieux, c'est d'acheter une neuve. Mais les prix, je pense qu'on va en parler, on va essayer de... On va aborder le sujet ou pas ? Ouais, on va... On en parle maintenant. Non, non, mais on va aborder le sujet sur savoir combien coûte une cibille, parce que là, vu les questions qu'on a et puis vu l'heure qu'il est, donc faudrait qu'on écoute les questions. Ouais, Gérard ? Oui ? Ouais, une petite question, je vais faire un peu. C'est qui ? C'est qui ? C'est qui ? C'est André, excuse-moi. Oui ? Je veux savoir comment t'écris, cibille. Cibille ? Ouais. Alors ? Ouais. Une cibiste ? Non, cibille, une cibille. Cibille, bah, un CB. Pardon ? CB. CB, en anglais, quoi, cibille, c'est ça ? Bah, un CB ? Ah, ouais, pas bête, je viens de comprendre, ok. C'est pas français, alors ? Pardon ? C'est pas français comme matos ? Ah, si. Ah, pourquoi on dit cibille comme les anglais ? Ah, ouais, c'est ça. Mais non, bah, attends. Comment on dirait un CB, une CB ? Non, mais un CB, CB, c'est carte bancaire. C'est des feuilles, les CB. CB, c'est des feuilles pour rouler des joints ou autres. Des joints ou autres ? Non, mais... Mais, cibille, en fin de compte, c'est quoi ? C'est français, hein ? Tu peux le trouver ? Bah, cibille, non, cibille, c'est pas français, c'est anglais, comme tu dis, CB. Non, parce que moi, je voulais mettre une annonce dans le journal, quoi, parce que je cherche maintenant, ça m'intéresse, maintenant qu'on en parle, je cherche une cibille, quoi. Donc, je vais savoir comment l'écrire, et voilà. Ouais, euh... Donc, CB, ok. D'accord. Ok. Après, question, ouais. Attends, attends, attends. Si le copain de Gégé pouvait raccrocher son téléphone pour que je le rappelle, ce serait sympa, mais... Euh, Laurent, s'il te plaît, si tu peux raccrocher, si tu pouvais raccrocher, on essaye de te joindre, alors raccroche. Laurent, scan the phone. Merci. For tonight. Alors, donc, 61% des cibistes préfèrent utiliser leur téléphone portable, donc je vois pas... Bah, par rapport à la cibille, tu vois, il y en a peut-être qui considèrent que c'est mieux, le portable. Non, mais... Non, mais... Ah, oui. D'accord, je vois... Tu vois ? Je vois le rapport, le sondage que Gaël vient de me donner. Donc, en fin de compte, c'est vrai qu'il y a des cibilles portables. Ah, oui ? Et c'est un genre de petit Akiwalki. C'est un genre de petit Akiwalki comme un téléphone... Portable. Portable. Et en fin de compte, sauf que dessus, au lieu d'avoir marqué n'importe quoi comme nom, c'est des canaux. Donc, tu peux aller du 1 au 40 aussi. Oui. Gérard, sur IRC, il y a Sardine, le vrai de Marseille, qui dit qu'il ne faut pas acheter une cibille à un routier parce que c'est des voleurs. Non, c'est faux. Non, mais c'est une cibille d'occasion aussi, donc c'est des voleurs. C'est faux, c'est faux, c'est faux. Oui, Manu, on accueille ton pote, alors. Alors, à la place... Oh, l'eau ! A la place de... Bah, à la place de qui ? A la place de Tétois. A la place de Tétois. Salut, Laurent. Salut, Gégé. Salut, tout le monde. Salut. Salut. Salut. comment vas tu toi sans déconner bon alors sans déconner tu peux tu peux répondre à la troisième et aussi moi qui commande il est là il est là j'ai envie de revenir au débat il ya 10 ans sur l'hiver c'est qu'ils demandent si une cibi ça se nettoie avec des coton-tiges non j'y réponds même pas non c'est lourd on laisse parler laurent laurent donc alors peut-on peut-on acheter la cibi en allant à la banque ou autres non mais en fin de compte c'est quoi une cibi c'est bien c'est bien ça veut bien dire carte bancaire merci mais ça veut dire carte bleue carte bancaire si lolo explique nous ce que ça veut dire si oui c'est tout de quoi communication bref c'est ce que j'ai dit tout à l'heure il dit quelque chose de bien pour une fois à la classe donc troisième il ya zz sur l'hiver c'est qu'ils demandent si tu utilises l'antenne de ta cibi quand t'as pas de coton-tiges mais je ne réponds pas tu fais un boulot de merde ce soir à la plage de cinq terres ouvertes on accueille zona oui bonsoir c'est zonat n'accueille pas oui c'est zonat zonat allez tout le monde salut donc sur les cibi alors je tiens un petit magasin de cibi à paris donc sans citer l'adresse c'est boulevard du général tu peux retourner chez toi j'invite tous les cibistes à venir s'affolusionner boulevard voltaire terminé pour lui combien plus précisément non mais ça y est il est plus là donc alors en antenne il m'a dit 115 à l'heure en antenne il m'a dit 115 ah merci qu'est ce qui se passe tant à l'heure j'ai peut-être à 115 dans le cul toi ouais quel est et quel est les codes cibi les plus employés alors on va demander à cendrier celui qui fait du bruit derrière arrête parce que ça commence à m'énerver non c'est pas un portable on va demander à cendrier ouais les codes en cibi les plus connus ouais franchement je sais pas je connais pas trop la cibi donc je peux pas te répondre ah bah d'accord alors pourquoi tu participes au débat sur la cibi pour en savoir plus bah voilà c'est ça il faut être ouvert un peu quoi il faut comprendre il faut savoir ok t'es ouvert toi gérard ouais moi la cibi moi je la connais sur le bout des doigts la cibi moi c'est mon rayon euh mets ton doigt où je le mets où on l'a dégagé mets ton doigt ah en plus ah bon bah oui on l'a remplacé par le lot il est là bah non non non ah non c'est tais toi qu'on a viré t'es un manu tu lui fais un boulot de merde ce soir manu tu vas prendre le débat vas-y mets ton doigt ouais alors les codes les plus courants il y en a plein quoi donc t'es qtrs qtrz ouais toi t'es tataillé gérard je crois ouais bah attends gérard t'écoute pas il est en train de se battre avec manu gérard écoute le débat ouais je t'écoute ouais alors ton qtrz t'est tataillé c'est ça non non ça l'est plus parce que gérard arrête la cibi il a eu un accident hein t'as eu un accident t'as eu un mur avec oh oh au moins qu'on le voit ouais bah arrête c'est ton débat là mais mets ton doigt allez allez allez c'est bon c'est bon c'est bon allez on active là bah ouais bah je te parle gérard tu me réponds pas bah vas-y bah y'a qtrs y'a qrl y'a euh y'en a plein ouais c'est des faux codes hein yl aussi ouais c'est des faux codes mais c'est utile hein c'est utile attends bon ok laurent oui donc pourquoi non on dirait pas à white y'a gaso liquide gaso solide ouais c'est manger boire ouais un bisu c'est euh quand on se rencontre hum hum mais y'en a plein d'autres bon j'ai mon papier devant la porte mais je m'en rappelle plus non mais là devant ton téléphone mon coco comment devant voilà très bien devant le téléphone non mais je sais pas celui là t'as la petite chiasse aussi t'as grosse colique t'as j'ai pas du tout soin de vous et tout ça des trucs comme ça non et non gérard oui c'est un fvc qui te demande si c'est dangereux la cibi non totalement totalement non non gérard excuse moi à la place de zona que t'as dégagé on accueille blénaud bonsoir ouais blénaud oui bonsoir tout le monde bonsoir blénaud oui alors je vous appelle je vous appelle de limoges bonsoir à tous ouais mais on s'en fout que t'appelles de limoges attends je me présente mais la fréquence c'est 127.5 non non mais moi je m'en bats les couilles ok ben je tenais à dire sur le débat que donc moi je connais un endroit sympathique qui s'appelle cibi and trucks c'est 13 avenue clémento c'est à limoges ça c'est malin ça fesses de taureau viens nous dire à l'antenne que oui c'est à limoges ah d'accord et au combien déjà fesses de taureau ouais alors moi les surnoms que j'emprunte je sais pas du tout puisque j'ai pas de cibi et donc justement je participe à ce débat pour me renseigner ok ben moi je pourrais te renseigner après avec laurent on pourra discuter de certains de l'antenne tout ça ouais on en discutera un peu après ouais ouais pas de problème euh camembert ben moi je connais ben comme les autres quoi ykl qrz il y a un bruit de portante ça devient lourd là manu ben attends je gère je sais pas d'où ça vient à mon avis c'est laurent là il fait marcher son bordel non non non ça et le métro on est bavard on est vernis ouais en plus c'est le dernier métro ben c'est un film ça ouais euh camembert oui je t'ai dit gérard ouais je te copie hum hum etc etc ok mais en fin de compte personne personne essaye de d'aller d'aller au fond des pensées parce que en fin de compte qth c'est là où t'habites comme laurent disait hein laurent oui tout à fait ouais euh ykl bon ben ça c'est pour les nanas euh yc c'est quoi non yc euh ça existe pas ouais après t'as ton qrz c'est c'est ton nom de de siby ouais puis y'a quoi d'autre lpf non non non t'as oh t'as t'as plusieurs codes mais ça faudrait tpsg t'as non non non non non y'a y'a y'a y'a plus y'a plusieurs codes euh ouais gérard gérard c'était les tons d'oie là j'aurais en rajouté un petit peu quelques-uns là ouais vas-y y'a qra aussi c'est l'endroit où t'habites ouais euh ouais et puis je crois que y'a d'autres qra aussi quand tu vas aux toilettes je crois eh ben eh euh laurent il te l'a dit hein c'est eh de quoi euh laurent il l'a bien dit euh gastrolytique gastro liquide gastro liquide ah le gastro encériste quand tu vas aux toilettes aussi nan nan nan nan nan mais attends eh déjà qth c'est pareil que qra ah non ah ah bon nan qth c'est l'endroit où tu te trouves et qra c'est où t'habites eh ben alors c'est pas pareil euh si nan on peut trouver c'est dans pendant quand t'es en voiture t'habites pas dans ta voiture ah ouais mais attends nan nan mais nan nan merde on peut avoir une cibi en voiture hein ouais mais euh si en si euh en voiture si bah oui si si si en voiture parce que moi mon oncle mon oncle il a acheté une voiture de case le mec il l'a vendu avec une cibi dedans avec l'antenne et tout ça y est il l'a changé euh c'est quoi son qrz ah ben il en a jamais fait mais s'il veut il peut en faire parce que moi une fois j'ai branché et euh j'ai mis sur le canal 19 après j'ai appelé ma grand-mère sur le canal 22 ouais que j'avais dit de se mettre sur le canal 22 pour être peinard ouais et euh ça t'intéresse ce que je dis ou pas mais t'as pas appelé ta sœur sur le canal 22 - Elle n'a pas la fenêtre à serre sur le canal 50. - Non, parce qu'elle n'a pas la BLU. C'est pour ça. - Manu. - Oui, pardon, à la place de Blénaud, on accueille Sistitz. - Bonsoir. - Salut Sistitz. - Bonsoir à toutes les filles en particulier. - Salut. - On t'écoute. - Donc, je vous appelle de Toulouse. - Ouais, ben, ouais, eh oh ! Si c'est pardonné un truc que tu lui dis : "Ouais, j'ai un magasin à telle adresse", c'est même pas la peine. - C'est 12 rue du Capitole ! - Comme ça, tu iras faire le Capitole chez toi. - Il me dirait que c'est bien à Toulouse. - D'accord. - Et c'est 12 rue du Capitole. - C'est 12 rue du Capitole. - Ouais, c'est ça. - C'est à Toulouse. - Pas de pub, merde. - Alors, il y a un sondage. 32 des gens pensent que l'abonnement de Chibi est trop cher. - Donc, il n'y a pas d'abonnement. - Il n'y a pas d'abonnement. - Non. - D'accord, tu peux en faire une autre alors. - Euh... - Gérard ? - Oui ? - Tu veux dire que si il y a des vieillasses qui te donnent... - Tu me demandes ce que c'est ? - Il est là, lui ! - Salut, Davy One ! - Bon ! - Le GPT-AQBCOPIDKCLKKIRCT... Qu'est-ce que c'est ? - Quoi ?! - Attends, hé ! - C'est long, c'est long. - Hé, Davy One ! Tu t'essayes d'abréger parce que là, je comprends pas ce que tu me demandes. - Ouais, c'est pas grave. - Euh... Donc, euh... 32... - Ah, tu as fait celle-là. - Donc, 32%... Ouais. - Ouais. Après, 86% des gens ? - Alors, 86% des gens qui ont une Chibi... ...sont sourds et n'ont pas... n'ont pas le bac. Alors ça, euh... ça, c'est pour les étudiants. - Ouais. - Ça, on n'en a rien à foutre. - D'accord. - Mais ça, euh... je vais te dire une chose, si les étudiants se t'emballent avec une Chibi dans leur lycée... - Ouais, c'est mal. - Ils sont complètement starbés. - C'est clair. - Étudiants ou étudiantes. - C'est clair. 12% des gens... - 12% des gens rêvent toute la nuit de se prendre une bonne grosse Chibi. Alors là, je voudrais bien savoir... Euh... Je voudrais bien savoir le rapport avec le débat sur la Chibi. - Mais peut-être qu'il y en a qui, tu sais, qui rêvent d'avoir une Chibi... - Non, mais Gaëlle... - Non, non, mais attends... - Gaëlle, si tu écoutes Gaëlle... - On va demander... on va demander à Gaëlle... - Bonne fête, Gaëlle, aussi. - Ah, c'était la 5, Gaëlle. Bonne fête. - Bonne fête, Gaëlle. - Donc, on va demander à Gaëlle qu'elle me trouve une réponse à la... à la... au pourcentage qu'elle m'a donné. - Ok. - Donc, cinquième question. Pensez-vous que la Chibi devrait-elle être utilisée sur une autre personne ? - La Chibi devrait-elle être utilisée sur une autre planète ? On va demander ça... - Oui, euh... - Pardon, avant que tu commences, à la place de... de Blénaud... - Non, à la place de Sissi. - Non, à la place de Sissi, on accueille Veru. - Oui, bonsoir. - Salut, Veru. - Bonsoir à tous. - Manu. - Manu. - Ouais ? - On prend sur les 24 signes. - C'est ce que je fais, Gérard, regarde. - Bon, Gérard, pour revenir au débat, il y a Turpentine qui te demande si, avec la Chibi, on peut parler en morse avec une otarie. - Alors, euh... parler en morse avec une otarie, je ne pense pas. - Je ne pense pas, parce que... déjà, les otaries, c'est des... ça doit être des poiscailles, ça ? - Ouais, c'est... ouais. C'est des animaux. - C'est des animaux en plus, Gérard. - Comment ? - Tu vives au Kenya. - Mais tu fuckes un peu ou pas ? - Comment ? - Tu fuckes un peu ou pas ? - Non, je fuck pas. Je fuck ma wife. - T'en as pas, d'otaries, toi ? - Non, moi, j'ai pas d'otaries, moi, j'ai qu'une truie. - Moi, je fuck pas ta wife, hein. - J'ai qu'une truie. - Comment, ta truie ? - Elle s'appelle... elle s'appelle "Je t'emmerde". - Ah, d'accord, OK. - Elle s'appelle "Je t'emmerde" ? - Ouais, elle s'appelle "Je t'emmerde". Et elle vous chie dans le cul. - C'est fin. - Euh, Régo ? - C'est fin. On a perdu 1200 personnes, là. - Merde. - À cause de quoi, Régo ? - Bah, chie dans le cul, là. Ils ont pas aimé... Attends, je regarde un truc. - Ouais, ben, donc, je pose la question. Pensez-vous que la CBD devrait être utilisée sur une autre planète ? - On va... on va la faire, la question. Après, on va... - Ouais, on mettra le disque après, ce soir. - On le mettra après, vu qu'on a commencé à la bourre. Donc, Rousseau, il est pas pressé, hein. - Ouais, OK, comme Régo, je pense. - Ouais, ben, il va prendre à 5 heures du matin, et puis c'est tout, hein. Wesh, wesh, wesh, hein. - Ouais, ouais. - Ouais, wesh, wesh. - Donc, on va demander à Cendrier, allez. - Ouais, franchement, ce serait trop bien, hein, qu'on puisse communiquer avec les extraterrestres, tout ça. - Ouais. - Et tout ça. - En plus, t'imagines, avec le visiophone, ce serait génial, hein. - Ouais, mais... - On pourrait voir la touche des extraterrestres, tout ça, ce serait cool, hein. - Ouais, mais faut voir Canal. - Non, non, mais attendez, moi, je vais vous demander une chose. Ça, c'est une question que je vous pose à tous, donc vous allez me répondre. Là, ça fait deux choses, hein. Vous allez me répondre : est-ce que vous pensez que le Big Bill... - Rien d'info du Big Bill, on parle des CB. - Non, mais est-ce que le Big Bill, qui est à la télé, pourrait avoir une CB pour communiquer avec Vincent Lagaffe ? - Mais non, il a trop de tuts, ce mec-là, il a pas besoin, il a pas besoin, ouais. - Non, mais c'est bon, on n'est pas à un mariage, hein, pour mettre les klaxons, hein. On parle pas de mariage, hein. - Lagaffe, il communique pas, hein. - Ah non, il communique avec qui ? - Bah, je sais pas, mais il fait tout le temps des bruits et tout, je sais pas ce qu'il fait, ce mec-là, mais... - Il a pas de potes, il a pas de potes. - Il communique pas, c'est pas... - Bon, allez, allez, allez, mets ton doigt, là. - Un pauvre gars. - Ouais, Gérard. Bah écoute, moi, je dis qu'il est déjà tellement la merde sur la CB... - Ouais. - ... que si on en est ailleurs, bah voilà, c'est encore plus inaudible. - Ouais. - On a eu des bruits de routiers sur la route, alors en plus, ils continuent de nous rajouter de l'espace, on est mal, en plus... - Non, mais attends. Attends, mets ton doigt. Je vais te dire une chose, qu'on est bien contents de posséder une CB dans sa voiture et de communiquer avec des routiers pour savoir comment que ça roule. Hein, on est bien d'accord. Oh, mets ton doigt. Oh ! - Gérard se riaissait hier, il me dit : "La CB, c'est bien en abusé, ça craint." - Ben, ça, c'est vrai que... Après, une fois que t'es dedans, tu peux plus t'en... C'est comme une drogue. Tu peux plus t'en passer, c'est comme... C'est comme fumer... C'est comme fumer ou boire, voilà. Celui qui vient de dire "Merci". - T'as tous les vis, toi, alors. - Non, non. Moi, j'ai... Ah, il me manque un vis. C'est de baiser. C'est ça qu'il me manquait. - Non, non, non, non. - C'est pas ce que j'ai fait avec Bulldog Mister. - Bulldog Mister, attends, merde, toi, connard. T'as compris ça ? - Ouais, j'ai compris. - OK. - Et tu sais pourquoi il te dit ça ? - Il est vraiment... Il est vraiment... Il est vraiment phénoménal ! La, la, la, la, la, la, la, la, la... - Eh ben... - Bon, Laurent... - Il est vraiment... - Oh, mon gueule derrière, s'il vous plaît ! Merci ! - Eh, t'es vraiment... - Eh, non, mais attendez ! Mais attendez ! Il est 1h43, pour l'instant, ça s'est bien passé. Je voudrais que ça continue comme ça. - Non, mais GG, je disais juste que t'étais à fond anal, c'est tout. Je suis d'accord. - C'est qui ? - C'est un verru. - Un verru ! - C'est pas un verru ! - Ben voilà, t'as répondu, donc on passera ton tour après. Laurent ? - Oui, j'écoute. - Donc, pour toi... - Barry Walt. - Eh, Barry Walt ! Barry Walt. - Ouais, c'est ça. - Oh, sans déconner, là ! - Sans déconner. - Oui, pourquoi pas ? - Sans déconner. - Pourquoi, mon gueule, le lagaffe ? - Pourquoi pas ? - Pourquoi pas ? - Pourquoi pas ? - Oui, pourquoi ils sont de l'Est ? - Ben oui ! Donc, c'est pour aller avec sans déconner, avec lagaffe. Je pourrais te demander, est-ce qu'il a des chiens, Laurent ? - Oui, j'en ai vu. - Avec un break, non ? - Ah, ben ça, ça te regarde pas. - Gégé ? - Quoi ? - Ce verru, je voulais juste dire que Laurent, avec sa grosse voix, il me fait un peu penser à un genre de Tony déguisé. Je voudrais dire que c'est lui qu'on a vu pas d'habitude. - Là, je vais te dire une chose, verru, tu te mets une grosse verrue dans le cul. - Ouais, c'est sûr. Je vais te dire une chose, je prends mon pied. - Ouais, ben, tu prends ton pied, ben, moi, je prends pas mon pied avec toi, d'accord ? Pesse de taureau ! - Il est tenu dans la boîte à quelqu'un, ça peut le faire, quand même. - Bon, verru, tu fermes ta gueule, maintenant. - Oui, chef. - D'accord. Euh, pesse de taureau. - Ouais, ben, vu que j'ai deux au standard, tu peux m'appeler de la question, s'il te plaît ? - Si, je l'ai calmé, parce qu'il avait dit un truc pas bien, donc... Alors, pesse de taureau, pensez-vous que la Cibi devrait être utilisée sur une autre planète ? Bon, allez hop, terminé pour lui. Camembert ! - Qu'est-ce qu'il y a, Manu, au standard ? - Je sais pas, je l'ai coupé, ça le fait toujours. Terminé ! Camembert ! J'ai coupé tout le monde, ça le fait toujours, ça vient pas de moi. - Y a un problème standard, là ? C'est la table télécom, ça ? - Ah ouais, y a un problème au standard, hein, Fulda ? - Ah, regarde, c'est moi, ça ? - Bon, c'est chef de taureau, donc c'était pas moi qui ai fait le con. - C'est quoi, ce bordel ? - Euh, donc, je voudrais répondre à la question, non, je pense pas que... À ma connaissance, hein, enfin, je suis pas sûr, mais je pense pas qu'on puisse aller sur une autre planète. - Ouais. - Euh, donc, impossible d'avoir une Cibi sur une autre planète. - Ok. - Surtout, tu parles bien devant ton combiné, toi. - Ouais, je comprends. - On dirait que t'es un nouveau dans le truc. - Bah ouais, moi, j'arrive, moi. - Camembert, Camembert ! - On va te former, alors. - Ok. - Camembert ! - Ouais, moi, je dis, il faut avoir un grand BLU, sinon t'arrives pas à capter. - C'est quoi, un BLU ? - Bah, c'est le truc, là, pour parler en Thaïlande. - Ah, ok. - Ok. Bon, donc, euh, en fin de compte, euh... - T'as emmerdé, là, non ? - Non, je pense pas qu'on pourrait avoir des... des cibistes sur notre planète. - Pourquoi ? - Euh... - Ça coûterait trop cher, en fil ? - Ouais, je pense. Rigaud ? - Oui, y a un petit sondage que Booster est allé chercher sur l'Internet. Alors, 45% des personnes interrogées n'en ont rien à foutre de la Cibie, 23% n'aiment pas les routiers cibistes, 15% pensent que la Cibie... qu'avec la Cibie, ils vont pouvoir décoder Canal+ et 5% se rappellent de tatailler lors des rencontres cibistes et auraient bien aimé l'enculé. - Ouais, bah, c'est bien. Euh... Donc... je vais poser. - Oh, Steve ! Oh, Steve ! Arrête ! - Tu peux virer Steve Austin au standard ? Vas-y, Gérard, vas-y, vas-y, vas-y. - Donc, la question... Manu... - Tu fais chier. - Manu, tu vas prendre une baffe. - Je vais gérer. - Ouais, ouais, tu vas prendre une baffe. Euh... Pensez... Pensez-vous que la Cibie est-elle réservée plus aux hommes qu'aux femmes ou autres, et on s'écoute comme un ouragan : "Je pète avec des fleurs, je pète avec des fleurs, je pète avec des fleurs à épines." Et on se retrouve tout de suite après, au 0800 308 5000 et 0870 7000 et tout ça. Le Fun Radio est www.fr. Rigaud vous y attend et je vous retrouve tout de suite après. Vous êtes bien sur Fun Radio. A tout de suite pour la suite. - Les débats... - Pas de radio et... - Pas d'insultes ? - De chien. - Et voilà. Donc, on va faire une petite pause. ''Musique' Vous êtes toujours sur Plein Radio. Il est 1h50. C'était un bon scud. C'était quoi ? Comme un ouragan, je pète avec des pleurs à épines. En espérant que je n'ai pas écorché les noms. Ce que tu viens d'annoncer, à mon avis, c'est un tube. C'est Pildar qui me donne les titres. Il n'y a pas de plantade. On va finir le débat sur la CBI. On va finir le débat sur la CBI. Pour ça, on récupère Cendrier. Salut. Mets ton doigt. Salut. Laurent. Salut. Sans déconner. Celui qui dit Tarlouse, il ferme sa gueule. Toi, tu dégages. Bonne nuit. C'était qui ? Je ne sais pas. C'était pas lui. Verru. Fesse de taureau. C'est une passion. C'est moi qui commande. C'est pas vous. C'est lui le boss. Et Camembert pour terminer. Il en a des boss. Donc alors, la question, vous l'avez toute comprise. Vous avez bien compris la question. Non, non. Non, non, mais là, vous n'allez pas me faire chier maintenant. Alors, pensez-vous que la CBI est-elle réservée plus aux hommes qu'aux femmes ? Alors, Cendrier. Oui, je t'écoute. Ben écoute, ouais, ben en fait, c'est plus pour les deux, quoi. Parce que maintenant, il y a autant d'hommes que de femmes dans la profession de routier, quoi. Et donc, je ne sais pas, ça concerne de plus en plus de femmes, quoi. Salut, je réponds bien. Voilà, j'ai terminé. Mets ton doigt. Ouais, Gérard, ben écoute, moi, je pense que déjà, pour les hommes et les femmes, ben, c'est pareil, quoi. Ils ont le droit tous les deux. Et puis, autre, ben, moi, je pense à mon chien qui s'y entraîne, mais il a du mal quand même. Ça, c'était un méga job. Ok. Moi, je mettrais bien une super cartouche à Super Jimmy. Ben, moi, je vais te mettre une cartouche qui va fermer ta gueule, maintenant. Putain, Wonder Woman, elle est bonne, quand même. Ouais, ben, je t'emmerde. Euh, Laurent ? On parle de votre combiné, Laurent, t'es pas un gamin. Ah, ben, mon téléphone, il y a un problème, là. Ouais, ouais, il est dans son break, alors. Non, non, les chiennes. C'est ce qui pousse, et tout. Oh ! Ouais ! Eh ! Oh ! Bon, ouais. Gérard, t'arrêtes, s'il te plaît. Ça me prend la tête, ça. T'arrêtes, parce que, pour l'instant, ça s'est bien passé, alors tu vas pas commencer à me faire... Non, il y a rien que du bon boulot. Donc, Laurent ? Non, non, mais, c'est mieux pour les hommes que pour les femmes, hein, pareil. Pas de problème. Ouais, mais, par contre, si j'ai... Ou autre, tu veux à peu près ? Ou autre ? Ou autre ? Pas du tout. Je pense pas que des chiens peuvent avoir des cimis. Ah, ben, non. Bah, les perroquets ! Attendez ! Si je vous dis un perroquet, est-ce qu'il peut se faire vivre d'une cimis ? Non. Si... Si il a un QRZ ? Avec ses pattes ? S'il a un QRZ, ouais. Et alors ? Quand tu sonnes chez toi, et qu'il y a personne, et que t'as un perroquet, qu'est-ce qu'il dit, le perroquet ? Allô ? Eh, Gérard ? Ouais ? Je veux pas être méchant, mais si le perroquet, il tient la cimis, il se perce la gueule du perchoir, hein. Ouais, ben, alors là, là, non, pas du tout. Euh, Rigo ? Oui, il y a Canard WC sur l'IRC, il te demande si... Est-ce qu'il existe des cimis modèle Batman ? Non. Et est-ce qu'il y a des cimis de couleur, ou elles sont toutes noires ? Euh... Alors là, c'est une très bonne question. Merci, tu fais du bon boulot, ça, hein, Gérard. Et ça, je... J'en ai vu avec... Avec... Je dirais pas son nom. Donc, j'ai vu des cimis, c'est vrai que t'as des cimis qui sont carrément en forme de bois, mais teintés. Ah ouais ? Comme l'intérieur, avec des... T'as des branches avec des feuilles ? Non, non. Non, t'as... T'as... C'est une cimis, euh... Par exemple, tu vois, euh... Tu vas... Tu vas chez... Chez Ikea ? Non, chez... Dans un concessionnaire. Dans un... Dans un concessionnaire. Ouais, à Carrefour, au Champs, des trucs comme ça. Non, non, la concession... Bon, s'il vous plaît, derrière, vous fermez vos gueules, merci. Des marques de cimis ? Non, non, mais tu vas... Tu peux aller n'importe où, moi, j'en ai vu une, à Vaud, euh... Ben, justement, ça va être la question suivante, le prix. Donc, vers U. Je dis, la cimis, c'est pas réservé que aux hommes, les femmes, elles y ont droit, y'a pas que des cons, y'a aussi des connes, quoi. Bon, alors, vers U. Vers U. Vers U, terminé pour toi. Allez, hop. Terminé ! Je l'ai éclaté, je l'ai éclaté, la vers U. Baisse de taureau. Ouais, je pense que la cimis, euh... Ce serait plus pour les bouseux qu'autre chose. Comment ? La cimis, c'est plus pour les bouseux qu'autre chose. Alors, tu peux préciser ? Aïe ! C'est parce que c'est un bouseux. Pour toi, tu devrais le savoir, hein. Tu prends un coup de jus. Je m'en fous, moi. C'est un bouseux. Ben, en camembert. Ouais. Moi, je pense que c'est plus pour les hommes que pour les femmes, parce que les femmes sont un peu plus intelligentes pour qu'elles utilisent le téléphone. Non, ben, alors, attendez, parce que là, pour l'instant, vous répondez tous à côté de la plaque. C'est ce que j'allais dire en même temps que toi, en plus, t'as vu ? C'est fort. Donc, moi, je peux juste prendre contre ? Il est imprévisible, Gérard. Manu, tu vas commencer à être calmé. Ouais, t'éteins ton micro. D'accord ! Tu peux fermer un peu ta gueule ? D'accord ! Merci. Donc, je peux vous dire une chose, que maintenant, comme il y a l'égalité des hommes et l'égalité des femmes, donc il y a l'égalité des deux, donc, des sexes, donc là, la Cibi, c'est très bien réservé. Devant ton micro. Pour les hommes, aussi bien pour les hommes que pour les femmes. Parce qu'en fin de compte, t'as aussi bien, t'as autant de femmes routiers que d'hommes. Non, mais il n'y a pas que les routiers. Oui, mais il y a tout. Il y a les chauffeurs de taxi, il y a les routiers, donc en... Est-ce que, par exemple, les prostituées pourraient avoir une Cibi pour avoir des clients ? C'est plus simple. Non, je pense pas. Pourquoi ? Je peux pas te dire pourquoi. Attends, je suis en train de chercher... Qui c'est qu'il y a d'autres qui pourraient avoir des Cibis ? Souvent, des ambulanciers en ont. Ah oui ? Puis, bien sûr, nous, on peut s'en servir comme moyen de... De locomotion ? Non, oui. Gérard, il y a Canard DC qui te demande, est-ce que les marabouts peuvent guérir des gens par la Cibi ? Non. J'ai une question, Internet. Non, mais Manu, pour l'instant, tu te... Hein ? Non, mais attends, pour l'instant, toi, t'arrêtes avec ta merde. Toi, t'es un... Toi, tu... Hein, bande de nazes ? Hop ! Arrête, Manu, t'es pénible. Attends, c'est mon standard, ça fait des étincelles. Arrête, tout à l'heure, ton standard, il va... Tout à l'heure, ton standard, il va te mettre une barbe, toi. Donc, alors, à la question, donc, il y a... du débat sur la Cibi, donc, que Gaël m'a donné. Ouais. Il y a 47% des routiers n'utilisent leur Cibi qu'entre 21h et 21h. Alors, ça, ça m'étonnerait. Elle a dû se planter, voilà. Ouais, parce que là, 21h et 21h, je vois pas... Ouais, je vois pas trop le rapport. Je vois pas le rapport non plus. Ouais, du cheval. Donc, après, il y a 16% des gens sont prêts à tuer leur chien pour avoir une Cibi. Alors là, Gaël, tu vois... Là, tu chies. Tu chies dans la colle. Ouais. Et donc, la dernière question. Ouais. Quelle heure est-elle ? Elle est 1h57. 1h58. On a encore le temps de faire une question et la conclusion. Deux, deux, deux. Non, non, non. Non, non, deux. Une. Bah, tu choisis la meilleure. Tu choisis la meilleure. Bah, c'est moi qui commande. Je fais la sept. Et après, je repose une question. OK ? C'est pas toi qui commande, c'est moi. Non, ta gueule, toi. Non, mais... Ta gueule. C'est pas cool, ce qui m'arrive. Ta gueule. J'ai envie de faire caca et j'ai pas mon téléphone. Eh bah alors, si t'as envie de faire caca, tu fais une chose, tu raccroches ton téléphone et tu appaires caca. J'ai plus mon téléphone, je t'en fiche. Eh bah, je m'en fous. J'ai l'habitude de chier pendant les débats. Alors, euh... Devrait-on consacrer une émission de télé sur la Cibi ou à l'école ? Manu ? Oh non ! Oh non, Gérard. Devrait-on consacrer une émission de télé... Regarde. C'est pas toi. Non, je te jure que c'est pas moi, Gérard. C'est pas toi, c'est mes premiers trucs. C'est les premiers trucs que j'ai fait quand j'étais à la... Mais tout le monde de là, ça... Non, non. Devrait-on consacrer une émission de télé sur la Cibi ou à l'école ? On va demander ça à Camembert. Ouais, bah surtout pas, parce que la Cibi, c'est quand même réservé à une élite. Et si on apprend ça des tout jeunes aux gamins, la Cibi et le Canal 19, ils vont être complètement saturés. Non, mais déjà, le Canal 19, c'est saturé, déjà. Bon, tu t'écrases ? Je réponds aussi avec... Non, non, mais attends, tu t'écrases ? D'accord. Pour l'instant, c'est moi qui commande. D'accord, excuse-moi. Euh, fesses de taureau ? Ouais. Bah, je pense qu'enseigner ça aux gosses, c'est vraiment un truc à pas faire. Parce que, après, voilà, quoi, c'est pas cool. Bon, d'accord, euh... C'est tout ta réponse ? Bah non, mais qu'est-ce que tu veux enseigner de la Cibi aux gosses ? C'est impossible. Ça va leur niquer la tête, c'est clair, ça va les ruiner. Non, je pense pas. Stop, stop, stop. Rigaud. Gérard, il y a le vrai Perforas, si on y a assez, qui te demande quel est le jour de la grève des Cibistes pour faire grève contre France Télécom, c'est quel jour ? Il y en a pas. Pourquoi ? Parce que maintenant, c'est la Cibi, et ça, Laurent, il pourra le confirmer. Maintenant, la Cibi n'est plus agréée par les PTT. Tu confirmes la tarlouze ? Non, je te parle. La tarlouze à ton maire, toi, connard ! La France Télécom, Gérard. Elle confirme ? C'est Pedro. Euh, pour l'instant... Attends, Laurent. Celui qui s'amuse à insulter les gens comme ça, pour l'instant, va fermer sa gueule, ou sinon, il va dégager ! C'est pas cool. C'est Pedro, j'aimerais parler comme tout le monde, c'est Pedro. Moi, je t'emmerde, espèce de salope ! Oh, pas trop de vulgarité, quand même. Ouais, mais attends ! On se calme, Gérard, on se calme. Dis à Manu de les gérer, c'est son taf, hein. Laurent ! Au lieu de jouer à Zelda, là. Oh, ta gueule ! Laurent, tu peux confirmer ce qu'on vient de dire ? Tout à fait, Gérard. T'as tout à fait raison. Donc, pour toi, donc, le canal 19, c'est vrai que maintenant, il est... C'est un canal d'appel, donc, pour avoir d'autres renseignements, il faut changer de canal. Voilà. Voilà. Donc, tu peux... Donc, est-ce qu'on... D'après toi, est-ce qu'on peut enseigner ça... À l'école, peut-être ? Est-ce qu'on pourrait faire une émission de télé, ou d'enseigner ça à des jeunes... Qui seraient capables ? Pas question. Putain, celui-là, il va fermer sa gueule quand je parle. Merci. Mais pourquoi ? Tu veux les traumatiser, les gamins. Ben non, mais... Mais ça fracasse la tête. Regarde, t'en es le digne exemple. Je veux dire, qu'est-ce que faire de la cibier aux gamins ? Ils vont parler avec des mecs comme toi, après. Et alors ? Imagine le genre de fréquentation. Comment tu veux qu'ils évoluent dans un milieu stimulant, après ça ? Bon, écrases-toi. Je veux plus vivre dans un monde... Allez, tais-toi, tais-toi, tais-toi, tais-toi, tais-toi, tais-toi. Tout n'est pas si facile. Tais-toi ! Tais-toi, tais-toi, tais-toi. Donc, Laurent, donc, pour toi... Non, mais déjà, à l'école, ils ont toujours aimé parler l'histoire, et puis français, alors... Tu leur apprends à parler la cibier, alors... Ok. Mets ton doigt. Ouais, Gérard. Ben, écoute, si on enseigne ça, déjà, aux gamins, comme disait la demoiselle tout à l'heure, je crois que c'est ton rire qui... C'est Camembert. C'est Camembert, excuse-moi, Camembert. Ben, écoute, très saturé, on puisse faire atteindre gamins qui diraient des conneries partout, et puis, en plus, leur apprendre à boire à cet âge-là, c'est chaud. Bon, alors, mets ton doigt. Pour l'instant, c'était pas la... C'est pas... Tu réponds à côté de la plaque. Ben, si, l'alcooliste des mineurs, c'est ça, la question. Ouais, c'est ça. Allez, hop. Vas-y, hop. Au revoir, pour lui. Au revoir. Au revoir. Au revoir, mets ton doigt. Au revoir, mets ton doigt. Tu peux l'enlever, tu peux l'enlever. Allez, au revoir, mets ton doigt. Enlève-le. Euh, cendruyer. Cendruyer ! Ouais, mais, en fait, moi, je suis pas d'accord pour qu'on puisse enseigner la cibie dans les écoles, quoi. Arrêter l'école et tout, quoi. En plus, on se prend la tête pour, je sais pas, aménager les horaires, les réduire, tout ça. On perd du temps à leur enseigner la cibie. Moi, je trouve ça inadmissible. D'abord, il y a mathématiques, le français, après, on parle de la cibie. En option, en terminale, j'en sais rien. En plus, à la télé, c'est pas la peine, parce que tu mesures un peu la face télé, non ? Oh, tu t'écrases derrière celui qui fait... Je suis partie dans mon truc et tout, là. Ouais, c'est clair, ouais. Bon, ça y est, ça y est, c'est terminé. Donc, dernière question, il est... Deux heures d'heure, on va peut-être faire conclure. Non, deux heures trois. Là, conclue. Deux heures trois. Bon, ben, on va faire, alors, vas-y. Deux heures trois, parce que là, t'as pendule de nas. Ouais, c'est le truc, elle est réglée sur RTL. Bon, allez, tiens, voilà mes genoux. Moi, j'ai l'heure pile. L'heure des cibies. Ouais. L'heure des cibies. Alors, donc, moi, je vais vous poser une question. Vas-y, pose. Ça va être la dernière. Combien peut coûter une cibie, en général ? Et on va demander à Cendrier, tiens. Encore ? Eh ben oui, encore. Je vais te donner une fourchette. Attends, attends, attends, cinq minutes. Question, à la place de mets ton doigt que t'as viré, on accueille Pines de Chacal, qui fait de la cibie aussi. C'est ce que tu es, RZ. Salut. Salut, Pines de Chacal. Salut, tout le monde. Salut, Chacal. Salut. On peut t'appeler Pines ? Ouais, pas de problème. Bon, allez. Donc, Cendrier. Bonjour. Moi, je te donne une fourchette entre 2 et 4 millions de francs. Ah ! Non, mais entre 2 francs et 4 millions de francs, non ? Ok, alors toi, t'es le comique. Ouais, t'as dit ça. Toi, pour l'instant, derrière, tu vas t'écraser. Donc, toi, tu dis combien ? Entre 2 francs et 4 millions de francs. 4 millions. Voilà, comme ça. Ok. Pines de Chacal, ouais. Moi, je suis pas trop d'accord que tes potes les blaireaux, ils passent dans les débats comme ça. Bah, moi, je t'emmerde. Donc, toi, tu vas répondre à la question ou pas du tout ? Ouais, bah, répète-la-moi, je t'emmerde. Non, bah, alors là, tu vas plus écouter. Non, mais répète-la-moi. Il m'expliquait son QRZ. Non, non, non, non, non, non, non. Il a très bien entendu la question. Non, je te jure que non. Répète-la-moi, s'il te plaît. Combien coûte une cibie en général ? Ah, bah, moi, la mienne, je l'ai payée 500 balles. Et c'est du bon matos. Là, ça le fait. D'accord. Laurent ? Je voulais témoigner d'un truc aussi. Moi, ce que je m'amuse, parce que je suis un petit plaisantin, je m'amuse à faire des faux radioguidages. Eh bah, alors, dans ces cas-là, Pines de Chacal, au revoir pour toi, tu prends même pas la conclusion. Terminé, terminé. Excellent. Terminé, terminé, terminé, terminé. Ok. Laurent ? Premier prix, c'est 60 francs, c'est 1 000 dans les canaux. Et la plus chère, c'est 2 000, 8 000, 6 000, 3 000. Euh... Entre deux... Entre 500 et ? Entre 500 et 2 000, 8 000. Ok. Gérard ? Gérard ? Gérard, oui ? Je voulais revenir sur l'histoire des radioguidages. Non, non, non, non, il n'y a pas de radioguidages, tu donnes. Effectivement, il avait tout à fait raison. Moi, je sais que pendant des années, j'ai passé du temps à orienter des cars de bonnes soeurs et de maisons de retraite dans des ravins, des plans dans ce genre-là. Voilà, merci, Laurent. Merci, Beru. Baisse de taureau. Baisse de taureau ! Bah, tu m'écoutes ou pas ? Tu réponds ou pas ? Bah, je réponds. On a mis en rentaine, c'est tout. Oh ! Oh ! Euh, ça doit coûter... Ouais, je sais pas, parce que j'ai pas jamais été... Ouais, il y a du bruit derrière. Bon, tu réponds ? Ouais, 200 à 300 francs. C'est ça. Euh, Camembert, pour finir ? Bah, moi, celle de mon copain, j'ai payé 10 000 francs d'occasion, ce qui fait à peu près 200 euros. Ouais, d'accord. Et on parle pas des gens... Donc, moi, je peux vous dire une chose. Que là, Sibi, Laurent étaient plus proches. En fin de compte, ça vaut presque entre 500 et 2 et 3 000 francs. La quelle est la mieux ? Celle qui fait 500 ou 2 000 ? Euh, le mieux, c'est carrément d'acheter une neuve. Au moins, t'as une garantie. Mais là, tu payes pas loin de 2 500 à 3 000 francs. 3 000 balles, la garantie, c'est cher. Normalement. Bon, ça y est, derrière... Oh, espèce de connard, là ! Eh ! Oh, Dieu ! Et il y en a un qui a la diarrhée, hein. Ouais, lui, il commence à me casser les couilles. C'est pas pareil. Quitte, parce que ça revient quand même vachement moins cher. Eh, t'as... Eh, t'es sûr que je vais te demander, à toi qui réponds, t'as jamais entendu parler d'Essibi en soutien-gorge ? Non, non. Non, j'en parlerai pas. Non. Alors, donc, conclusion. Ok, Michel. Donc, Cendrier. Gérard, Gérard, Gérard. Il y a un... Non, non, non, non, non, c'est terminé. Il voulait faire sa conclusion. Bah si, pour la conclusion. Il s'appelle Quiquette de Bison. Non, non, attends. Non, non, non. Ouais, salut. Ouais, Quiquette de Bison va faire foutre. Cendrier. Ouais. Conclusion. Le débat, en fait, il s'est pas trop mal passé. Non, c'était bien. C'était bien, Gérard. Ouais, c'était bien. On peut dire que c'était la merde, quand même. Ouais. Et puis, bon, bah, je suis contente. Je connais un peu plus sur l'Essibi, quoi. Et puis, demain, j'irai dans une banque pour m'acheter une. Est-ce que Gérard a une envie d'en assumer ? Non, mais attends. Non, mais attends, Cendrier. Il faut te dire une chose, que là, on n'a pas un débat sur l'Essibi. On aurait pu le faire plus longtemps, parce que j'aurais pu faire carrément un débat entier sur l'Essibi. Merci pour celui qui rote, espèce de gros porc. Ouais, non, non. Je disais que j'aurais pu aller plus loin. J'aurais pu faire carrément toute la nuit pour faire toute la soirée, pour faire un débat sur l'Essibi. Pourquoi on l'a pas fait ? Parce que ça coûte cher, tout simplement. Et c'est tout. Laurent, qui c'est qu'on a à la place de Pindochacal ? Je t'ai dit, Quiquette de Bison. Alors, Quiquette de Bison, ta conclusion ? Est-ce qu'il y a le temps de faire une petite anecdote, là ? Non. Alors, ma conclusion, c'était bien. On a bien appris ce que c'était l'Essibi. Ouais. T'es enrhumé, non ? Ouais. T'es enrhumé, Tony, hein ? T'es pas le choix. T'es enrhumé, Tony. T'es enrhumé, Tony. T'es bien enrhumé, hein ? OK. Alors, salut à toi, Tony. Laurent. Ça a été bien, pour une fois. C'était super bien, pour une fois. Il n'y a pas eu de problème. Il faut bien faire que ça se passe bien. OK. Vers une. Ouais, ben moi, je voulais dire que le débat a été, donc, comme d'hab, constructive. La voix de Laurent m'a bien fait kiffer. Je suis sûr que ça se pignole dans les cabines. Et je voulais dire que l'Essibi, c'est sûrement le moyen de communication de l'an 2000, oui. Alors, Verru, Verru, je vais te dire une chose, que Laurent, il t'emmerde. Et moi aussi. Il y a beaucoup de filles, je suis sûr, qui vont vouloir son numéro standard. Tu ne peux pas dire le contraire. C'est ça, t'as raison. Ben là, tu rêves. Tu te mets un doigt dans le cul. C'est pour lui, hein ? Tu te mets un gros doigt dans le cul. Mais doucement, quand même. OK ? Bon, alors, dégage. Bonne nuit. == Le débat sur les Miss France == === Contexte === === Les personnages === === Transcription === Donc vous êtes toujours sur Fun Radio, c'est le deuxième débat, donc il est 2h21 et donc pour le deuxième débat vous pouvez toujours nous appeler au 0800 308 5000, puis l'art est au standard donc il va vous accueillir. Bonjour ! Bonjour à toi Brouty, Rigaud le super chef de l'internet qui fait du bon boulot toutes les semaines donc qui vous attend au www.frfunradio. Donc on est combien la matin Rigaud ? Tu peux l'appeler par téléphone avec ? T'as l'air Fildar, tu vas te prendre une baffe, ce coup là je vais pas te rater toi. Donc on est combien ? On est 4282, ce qui est beaucoup. Donc je voudrais qu'on aille jusqu'à 5000 et puis Manu qui est à l'Aria. Bonsoir à tous ! La grosse ça t'emmerde toi la grosse espèce de con. C'est pas bien de parler de la femme de Gérard comme ça. Donc on va accueillir Mego. Mego de 19 ans de Brest. Salut Gérard, ça va ? Je sais pas, j'ai pas regardé ce matin. Bravo ! Pierre, 24 ans de Bourbon, annoncez-moi les fréquences de Mego, Brest. Ouais, 84.16. 84.16 ? Ouais voilà. Ouais mon cul tiens. Ok excuse-moi 84.6, excuse-moi. Ouais bah je préfère. Pierre ? Salut. La fréquence ? Euh, 82. Ouais tu connais pas ta fréquence alors on va te faire sauter. Tu connais pas ta fréquence alors on va te faire sauter. Ouais tu connais pas ta fréquence alors on va te faire sauter. Miss Essonne, 19 ans, de Saint-Etienne. Miss Essonne, 19 ans, de Saint-Etienne. On a une Miss France, j'avais oublié de te le préciser. Miss Essonne qui était première dauphine en… Ohlala le 9 ans, le 9 ans. Au régional. La même suite de gaz quoi. Miss Essonne, 19 ans, de Saint-Etienne. Votre ablot, tu réponds. Salut le brésilien. Tu vas chanter à l'Eurovision bientôt. Oulala lalalala. Elle est enrouée. Ça commence, ça commence, ça commence, ça commence. Elle est enrouée. Elle est enrouée. Ça commence, ça commence, ça commence. Elle est enrouée. Elle est enrouée. Tu réponds ! Salut le brésilien ! Tu vas chanter à l'Eurovision bientôt ! Ça commence, ça commence, ça commence, ça commence ! C'est une nana, c'est un trablos, qui c'est qui m'a choisi ça ? Fildar ! Fildar ! Fildar ! Mon pote Fildar ! Un Fildar ! Donc Mikos, 20 ans de Lyon, Kudan, 24 ans de Nogent-sur-Marne, on écoute... Non c'est ça, 101.9, d'accord ? Fous-toi pas de ma gueule ! Foufoune de Nantre ! Salut à toi ! Non c'est Lady de Nantre ! Fildar, fais gaffe parce que tout à l'heure ça... C'est Lady Di ! Pas le tunnel Manu ! Pas l'alma ! Pas le tunnel anal ! Gérard, Gérard, assieds-toi, assieds-toi, t'as pas Fildar dès le début ! Je commence pas, d'accord ? Sinon tu retournes en arrière ! Pas le tunnel anal, on a dit ! Bon ta gueule à toi ! C'est Monsieur Bouygues ! Bon continuez, continuez à me casser les burnes au deuxième débat, on va éclaircir vite le débat ! Ouais ! Ça commence bien ! Allez on va creuser, vas-y ! Alors que préférez-vous dans Miss France ? On va demander ça à Mego ! Moi j'aime bien ses robes ! Ouais ! Ouais, je trouve que c'est des bons couturiers ! Elles sont vachement cultivées je trouve ! Non mais tu peux donner plus de précision ? Bah je trouve que, je sais pas moi... Ouais, elles sont cultivées quoi ! Tu peux leur poser n'importe quelle question, genre... Quelqu'un l'a fait hier, tu vois, à chaque fois elles te répondent bien ! Ouais ! Tranquille hein ! Ouais tranquille, tout à l'heure tu vas faire tranquille au standard toi ! Tranquille ! Pierre ! Ouais, moi j'aime bien les hawaïennes ! Donc j'aime bien son boule en fait et c'est ça ! Ouais Tony ! Ok Tony ! Allez ! Allez ! Allez Tony, terminez pour toi ! Non mais Gérard, Gérard là il a rien dit quoi ! Non mais attends, faut pas déconner ! Hier il est passé, il passe pas dans les débats aujourd'hui ! C'est clair, net, très précis ! J'ai dit, j'en veux pas ! Ok, et toi tu vas me faire du boulot correct ce coup-là ! Si Tony il peut plus passer jamais, s'il passe plus jamais, qu'est-ce qu'il va faire dans sa vie ? Et alors ? Qu'est-ce qu'il va faire dans sa vie ? Et alors ? Bah non, il faut le passer ! Il passe dans la semaine et c'est tout ! Mais il y a rien à côté ! On peut pas, on peut pas ! Ou alors on essaie de voir, parce que c'est vrai que dans la vie, bon, toi j'ai... Non, faut arrêter là de le passer ! Ou alors on teste, faut qu'on teste ! Bah la première incartade... Parce qu'à toute manière il est pas de Bourbon ! Il va en prison ! Mais non parce qu'il est pas de Bourbon ! Si si, il est en vacances ! Non non non, attends ! Je suis en vacances ! Bah ouais t'as mon cul ! Hier t'étais à Paris et puis là ce soir t'es à Bourbon ! Bah attends, ça t'arrive jamais toi ! Moi le soir je suis à Paris, le soir je suis à Lyon, quand je vais faire une soirée, je mets pas dix jours pour y aller ! Enfin ! Il y va hein ! Il a un scooter, c'est tout ! Et alors Tony, vas-y ! Non mais j'aime bien la wayenne là en fait ! Je l'ai trouvée très séduisante ! Mais c'est Tony ! Bah ouais c'est le Tony, c'est celui qui est passé hier avec toi ! Non mais il est bien, il est bien, il est bien ! Il a le cul propre en plus en ce moment ! Il a une belle boîte à caca, j'aime bien la wayenne en fait ! Bon non mais je te demande, que préparez-vous dans Miss France ? Ouais mais il paraît que c'était truqué ! Je sais pas si t'as entendu ça ! Non mais attends, pour l'instant Tony, tu dis pas de conneries ! Parce que c'est pas le... Non mais c'est vrai ! C'est pas les questions, d'accord ? Alors ou tu réponds correctement ou tu dégages ! Je vois que t'es un peu trop sur moi là, mais moi je te dis, moi j'aime bien Miss France ! Bon, ok ! Décale-toi un peu Gérard, t'es trop sur lui ! Ouais, trop sur moi ! Recule, recule que je m'interromps ! Gérard, il y a Madame de Fontenay sur l'IRC, la vraie ! La vieille là ? Ouais, qui voulait te prévenir que si tu dis que les élections de Miss France sont truquées, elle t'attaque en justice ! Eh bah, elle fait ce qu'elle veut, moi je l'emmerde ! Oh là là, procès ! Miss Saison ! Elle va te mettre un procès au cul ! On l'emmerde la vieille ! Miss Saison ! Oui, j'écoute ! Alors, quand est-ce que tu t'es fait opérer, toi ? Bon, allez, hop ! Raconte-nous tout ! Allez, hop ! Terminer, moi ! Non, non, mais moi, allez, hop ! Bonne nuit, bonne nuit, bonne nuit, bonne nuit, bonne nuit ! Allez, hop ! J'ai pas sommeil ! Non, non, mais bonne nuit pour Miss Saison, hop ! C'est fini pour elle, j'aime pas... Quand je pose des questions, j'aime pas qu'elle réponde à moi... Je peux la garder, quand même ? Non, non, non, tu la... Pour moi, pour moi ! Non, non, mais tu... Pourquoi tu la kiffes ? T'as qu'à la sauter, si tu veux, moi, j'en ai rien à foutre ! Euh, Mycose ? Ouais, bah, écoute, euh... Ce que je préfère chez les Miss, c'est quand même leur cul, hein, on va pas dire le contraire ! Ouais ! Faut être franc, leur cul est leur nibard ! Ouais ! Par contre, c'est vrai qu'il y a un peu de la triche, elles sont dopées à mort, c'est clair ! Euh, attends... Elles sont dopées, elles sont dopées ! Attends, attendez, attendez, attendez ! Attendez, attendez, attendez ! Attendez 5 minutes ! Je te laisse, je te souhaite une bonne nuit ! Et je te rappellerai peut-être la semaine prochaine ! Ouais, ouais ! Salut ! Et tu vas pas la rappeler, d'accord ? Et elle change pas sur un autre nom ! Mais tu... Tu joues à quoi, Fildar ? C'est parce que t'es là, tu vois ? Tu vas laisser ta place à Manu... Ah non, non, non, non, non ! Et tu vas se dégager là-haut ! Oh non, il fait du bon boulot, au standard, Fildar ! Ah ouais, ouais, il fait du bon boulot, tiens ! Non, c'est le meilleur, c'est le meilleur ! Ouais, ouais ! Et si on perd du monde à cause... Sur l'IRC, à cause de lui, faudra pas se plaindre ! Pas de soucis, on en gagne, on en gagne ! Merci ! Micose ! Oui, donc, je te disais, elles sont quand même dopées au maximum ! Je sais pas si t'as vu les formes qu'elles ont, je veux dire, s'il y a pas de l'hormone bovine là-dedans, je sais plus, je m'y connais plus, quoi, tu vois ? Madame de Fontenay, elle refile quand même pas mal de saloperies à ses miss ! Le PO ? Ouais, je crois, entre autres choses... Arrête, Gérard ! Bon, Gérard, c'est avec... Viens t'asseoir, écoute les auditeurs, au moins ! On fait le travail à ta place ! Euh, Cudan ! Ouais, bah alors, moi, les nanas de Miss France, tout ça, je sais pas, je leur trouve rien de spécial, des fois, je... Je sais pas, dans la rue, on a des mieux, quoi ! C'est ça que je comprends pas, ça t'intéresse pas les femmes, toi ! Ouais, c'est clair ! Foufoun ! J'aime pas trop ce que tu viens de dire ! Bon, ça y est, on se calme derrière, s'il vous plaît, merci ! Foufoun ! Moi, j'aime bien leurs dents, et Jean-Pierre Foucault ! Je trouve qu'elles ont des super belles dents ! Non, mais attends, hé ! Fildar, attends, attends 5 minutes ! Fildar ! Tu, euh, si tu veux, t'as qu'à allumer ton micro, et puis gueuler dans le micro, dire « Allô, Fun Radio ! » Je travaille ! Attends, c'est pourquoi, t'as besoin de gueuler comme ça ? Bah, ils m'entendent pas ! Bon, allez ! Bon, alors, Foufoun ! Ouais, moi, je te disais, j'aime bien leurs dents, et Jean-Pierre Foucault ! C'est ça, bah, t'as qu'à l'appeler, puis tu lui demanderas ce que c'est ! Non, mais moi, je le trouve vachement séduisant, puis... Non, non, mais attends, t'as qu'à lui demander ! T'as qu'à lui demander ce qu'il s'est passé pour élire Miss Tahiti ! Ok ! Gérard ? Non, attends, Rigo ? Oui, il y a Miss Devi One sur l'IRC, qui te demande si Sandy a gagné le concours Gros Plein de Soupe ! Miss Gros Plein de Soupe ! Alors, euh, c'est qui ? C'est Miss Devi One ! Alors, Miss Devi One, Sandy a ton merde ! Ok, pour toi ! Voilà ! Tony, tu... Non, c'est pas moi, c'est pas moi ! Gérard, il te dit qu'il t'emmerde, lui aussi ! Eh bah, c'est bien, maintenant ! C'est pas moi, c'est pas moi ! Le mec, là, il peut laisser des messages, c'est même plus la peine de me les annoncer pour lui ! Ah, je vais aller me connecter, là ! Sandy, c'est dommage pour son corps, parce qu'elle a une belle tête ! Tony, Sandy a ton merde ! Non, mais c'est vrai qu'elle est belle ! Sandy a ton merde ! Mais il dit qu'elle est belle ! Sandy t'emmerde ! Bon, alors, Tony, tu te calmes ! Sinon, on accueille à la place de Miss Essonne, Georges, 43 ans, de Saint-Louis, qui, en fait, est le père de Miss Berry. Tu sais, c'est le cas perdu ! Je l'ai au standard sur les 24 lignes ! Bonsoir ! Elle est sur IRC, Miss Berry. Oui, bonsoir. Bonsoir, Georges. Oui, bonsoir, Monsieur Georges. Oui, Georges, ta fille, c'est un boudin. Ça y est, derrière, oui ! C'est normal qu'elle ait perdu, c'est un plomb ! Elle est plus de points, aussi. Bon, tu me calmes un peu, ça, parce que ça va... Mais qui ? Je te calme qui ? C'est un peu un plomb, on va dire. Voilà. Par bien. Allez, allez, allez ! Mais quoi, j'ai rien fait ! Bravo, le boulot que t'es en train de me faire ! Bravo ! Tu nous fais de la merde ! Attends, tu peux mieux dresser à l'aria, ça vaudra mieux. Non, non, non, c'est bien, là. Alors, seriez-vous d'accord pour inscrire votre copine au concours de Miss France ? On m'a demandé ça à Mégo. Ouais, mais en fait, ma copine, elle a déjà concouru pour l'élection l'année dernière, mais le problème, c'est qu'elle est perdue, quoi. Donc, depuis, elle est un peu traumatisée, quoi. Et donc, voilà. Mais Gérard, il ne vous écoute pas, il est en train de taper fil d'art ! Putain, Manu ! Ah non, non, non, c'est pas possible, ça. Ça, c'est pas possible, Gérard. Bon, ben moi, dans ce cas-là, moi... Dans 14 minutes, j'arrête. Gérard, s'il te plaît. Dans 14 minutes, j'arrête. On repose la question, s'il te plaît. 14 minutes, j'arrête. Gérard. Il fait que tu as de la merde. Il est en train de se... Il fait que des conneries, donc moi, dans 14 minutes, j'arrête. Je ne fais même pas les 11 questions. Non, moi, j'écoute. Qu'est-ce qu'il y a ? Qu'est-ce qu'il se passe ? Mais attends, il est en train de faire que des conneries. Tu fais que des conneries ! Mais qu'est-ce qu'il a fait ? Ça s'est bien passé dans le premier débat. Ouais, pour l'instant, il est en train de me faire que des conneries. Pourquoi ? Mais qu'est-ce qu'il a fait ? J'écoute, moi, je n'ai pas compris. Je lui demande quelque chose. Ah oui, vas-y, donne des raisons. Donne des raisons. Donne une raison, j'écoute, moi. Qu'est-ce qu'il se passait à l'antenne qu'il ne te plaisait pas ? Moi, je lui demande de calmer les gens, il ne les calme pas. Si ! Non, non, il ne les a pas calmés, il est en train de se... Tout le monde se fout de la gueule des gens. Et lui, il ne fait rien. Il n'est même pas capable de faire un boulot correctement. Si, le premier débat, à l'arrière. Alors, autant mettre Manu au standard, ça vaudra mieux. Gérard ? Oui ? Non, ce n'est pas possible. Sur IRC, il y a Mister Yankee qui dit qu'avec une perruque et sans ta moustache, tu ferais bien, Miss Bois de Boulogne. Ça, je m'en fous. Mégo ? J'ai déjà répondu, moi. Tu ne m'écoutais pas, aussi, là. Ben non, vas-y, dis. Non, mais je disais, ouais, c'est quoi la question ? Ça ne m'a plus, là. Alors, seriez-vous d'accord pour inscrire votre copine au concours de Miss France ? Euh, non, je ne serais pas d'accord. Et arrête de renifler. Oh, excuse-moi, là, oh, là, là. T'es égrue, ce soir. Bon, non, moi, je ne suis pas d'accord. Je ne suis pas d'accord pour faire subir ça à mes copines. D'abord, c'est des amis, je ne leur ferai jamais ça. D'accord. Voilà. Euh, Tony ? Ouais, non, moi, je la garde pour moi. Ben, tu peux préciser ? Elle est trop chême. Comment ? Elle est trop chême. Elle est moche. Elle est laide. Ouais, tu peux préciser le pont de ta pensée ? Affreuse. Vilaine. Il y a des concours pour ça, hein ? Berck. Bon, OK. Georges ? Gérard, attends, attends, attends. Sur IRC, il y a Miss Olio qui te demande si les Miss France t'excitent. Non, pas du tout. Pas du tout. Georges ? Pourquoi ? Il te demande pourquoi elle ne t'excite pas. Parce que ça ne m'intéresse pas. Trop belle. Bon, Tony, ça suffit. D'accord. Maintenant, tu laisses parler les gens. Mais Miss Berrick, qui dit que t'es un menteur ? Je m'en fous. Georges ? Après Miss France, il faut avoir 20 ans. Ma femme, elle a 56. C'est pour après être Miss France. Elle est vieille, ta femme. Je ne l'ai pas vraiment. Je venais à 56. Il y a Miss Tigri qui t'encule. Je l'ai viré juste quand j'ai entendu ça, Gérard. Alors, lui, c'est terminé. Terminé pour lui. Mycose. Justement, je l'ai viré parce que c'est lui qui foutait le bordel tout à l'heure. Alors, c'est bien. Donc, à la place, on a Clafoutis, 19 ans, qui appelle de Brest. Au jour d'aujourd'hui, 14 heures précises, je viens faire une requête au sieur. Peri Grigali ! Et qui appelle de Brest et qui te souhaite une bonne soirée. Au jour d'aujourd'hui... Salut, Gérard. Salut. C'est Clafoutis. Alors, moi, j'ai été hôtesse de présélection des Miss. Et j'ai été refoulée parce que j'avais une jambe plus courte que l'autre. Et ça se voyait en maillot de bain. D'accord. Alors, je trouve que c'est inadmissible. Ok. Voilà. Kudan ? Moi, la question va être vite réglée. Je n'ai pas de copine. Ok. Foufoune ? Moi, j'avais une copine. Enfin, une copine. Je ne pouvais pas la blairer. Et je l'ai inscrite au concours de Miss Boudin Noir à la CUSA l'année dernière pendant les vacances de ski. Et cette conne, elle a gagné. Et ça y est, c'est tout ? C'est tout ce que tu as à me dire ? Ben oui, ça y est, c'est tout. Gérard ? Oui ? Sur IRC, il y a Miss Devitou qui te demande est-ce que les Miss, quand elles gagnent le concours, elles gagnent une CB ? Non. Ce n'est même plus le thème des débats sur les CB. Demande à machin Devitou s'il ne gagne pas une Dreamcast. Puis tu lui demanderas qu'il réponde correctement aux questions en dehors des débats. Gérard, il y a Madame de Fontenay qui te dit que vu que ces Miss ne t'excitent pas, elles supposent que tu es homo. Et alors, qu'est-ce que ça peut y foutre ? Ah, c'est vrai. Ben alors, Gégé, quoi ? Non, mais attends, qui c'est qui s'amuse à faire des conneries derrière ? J'ai coupé les auditeurs, là, Gérard. Donc, troisième question. De nos jours, la beauté de Miss France est-elle importante ? Non, elle n'est pas importante. Ouais, ben justement, Gégé ? À partir de 17h. Tu fais une partouze à 17h, moi je t'emmerde et tu vas fermer ta gueule maintenant. C'est où, c'est où ? Ouais, c'est 12 rues. Ouais, oh ! Du château, hein. Château comment ? Tu me calmes ça, là ? Déjà, tu me calmes Tony parce que là, il commence à... Ouais, il fout la merde. ...à me gonfler, lui. Et en plus, il est sourd. Tony. Non, non, non, non, non, non, non. Tony, tu te calmes. Non, tu les prends en antenne, ils se calment. Autrement, tu dégages, Tony. Moi, je te dis, à l'antenne, comme ça, il va flipper. Ouais, ben, il va dégager dans moins de deux minutes, lui, si il continue. Non, mais je sais même pas quand je suis à l'antenne, quand je suis hors antenne. Non, mais pour l'instant, tu vas répondre à la question, maintenant. Non, mais répète-la, moi, parce que je sais pas... Non, non, non, non, non, non, non. Non, non, non, non, non. Non, non, non, non, non, non. Non, non, non, non, non, non. Je répète plus les questions. Alors, attends, je vais te faire une... Attends, je vais la répéter pour toi, Tony. Mego. Mego. Ouais, je t'écoute, là. Ben, en fait, ouais, c'est vachement important, surtout pour les vicieux qui regardent, hein. Et puis, ouais, enfin, moi, je m'en fous un peu, quoi, de la beauté des Miss France, là. Voilà. Donc, pour toi, la beauté, c'est pas importante ? Ben, c'est important pour les vicieux qui regardent. Sinon, pour moi, non, c'est pas important, quoi. OK. Ça y est, j'ai compris la question. Je peux répondre ? Ouais. Ouais, c'est très important, la beauté. Sinon, à quoi ça sert de regarder Miss France ? OK. Hé, Gérard. Quoi ? Tu sais ce qu'elle fait, Miss France, quand elle voit... C'est qui ? C'est Cudan. Tu sais ce qu'elle fait, Miss France, quand elle voit une peau de banane par terre ? Non. Merde, je vais encore me casser la gueule. Ouais, ben alors, merde. Moi, je vais te dire une chose, que là, maintenant, tu peux dégager. Ben, c'est pas méchant. C'est pas grave. Ben, c'est pas méchant. Bon, putain ! C'est pas méchant. Putain, mais arrête avec ta merde, là. Tu me gères un peu ça, là. Tu me fais quoi, là, de la merde ? T'as compris ? Tu me vires Cudan. Hop, terminé. Ouais, c'était sympa, la blague. Hop, terminé. Georges. Oui, la beauté, ça, c'est... Faut pas tenter la France, quand même. Même, on aurait... Sinon, on aurait une mauvaise image de la France. La beauté, c'est ça. Euh, Clafoutis. Bonjour. Ouais, c'est pas... Moi, je trouve que la beauté, c'est n'importe quoi, parce que c'est pas parce que j'ai une jambe plus courte que l'autre que, en fait, ben, j'étais pas belle, quoi. C'est n'importe quoi. En fait, j'étais aussi belle que les autres, mais évidemment, maillot de bain, ça se voit de trop, quoi. C'est ça, le problème. Non, mais tu peux préciser ? Eh ben, je précise que, ben, la beauté, c'est pas si important que ça, quoi. On peut avoir une jambe en moins et... Ouais, c'est vrai. Ben ouais. Ouais. Et puis être miss, quoi. Ouais. Eh, Gégé, tu veux pas faire une blague à Sandy et l'inscrire à Miss France ? Comment ? Tu veux pas faire une blague à Sandy et l'inscrire à Miss France ? C'est qui ? C'est qui qui parle ? Rodrigo. Bon. J'ai l'impression... J'ai l'impression qu'on va s'arrêter dans moins de 3 minutes. Oh non, Gérard ! On continue ton débat, là. C'est bien, non ? Franchement, c'est cool, ouais. C'est bien, on s'éclate. Ouais. Alors, Foufoune ? Ouais. Ben, je pense que c'est un minimum, ouais, qu'elle soit jolie au moins et puis qu'elle sache aligner deux mots, quoi. Ouais. Bonjour, ça va ? Oui, ça va. Là, j'ai dit 3 mots, t'as vu ? Ouais, 3 mots. Bonjour. Gégé, tout à l'heure, il y a une fille qui disait qu'elle avait inscrit sa copine à Miss France. Moi, j'ai inscrit un copain, tu sais, question pour un champion pour lui faire une blague et il a été éliminé au 4 à la suite. C'est pas le thème du débat ! Hop, terminé pour Tony. Non, non, mais attends. Terminé pour toi, c'est fini, là, maintenant. Non, mais t'es pas insulté, là. Ça est terminé ! OK, alors retourne à la danse, espèce d'enculé. Bon, moi, je t'en mets, salaud ! Oh, là, tu me le vires complètement. Il est viré, il est viré. Là, moi, un connard comme ça, moi, j'en veux pas. Alors, maintenant, tu m'envoies la musique, on va calmer tout le monde, maintenant. OK, OK, OK. Bah, t'annonces les numéros de téléphone et tout ça, s'il te plaît ? Alors, donc, vous pouvez toujours nous appeler au 0803 08 5000 et 0870 5000 et toujours de lire cww.fr ou que Rigaud vous attend. Rigaud, tu peux nous dire combien qu'on est ? Je crois qu'on a dû perdre... 4 382, c'est bien, et on s'écoute le disque. 4 300 ? Bon, ça va. Donc, on se retrouve tout de suite après. Voilà, vous venez d'écouter les petits sissons de la bonne avec des bas résiliés. Résilés, pardon. Et donc, vous êtes toujours sur Fun Radio, donc, 2h44 du matin. Ouais. Donc, j'espère qu'on va atteindre, et ça, mon chef, il vient de me le demander, j'espère qu'avec Rigaud, on va atteindre des 5 000 avant la fin de l'année. C'est ça, c'est ça. C'est ça, c'est ça. 3h du matin. Je pense que ça devait être possible. J'espère. Possible. Si les bas se passent bien et que tu gueules pas trop, ça devrait le faire. Vu que là, quand le disque s'est arrêté, on était à 4 462 moins 4, ça devrait le faire. OK. Alors, donc, on récupère Margot. Mégot. Mégot, pardon. Ouais, ouais. Excuse-moi, excuse-moi, excuse-moi. D'accord, je t'excuse. J'ai dit Margot, mais c'est pas grave. Ouais, c'est bon, Margot, non ? Bah ouais, pourquoi pas, c'est le nom d'un chien, en plus. Ouais, d'accord, OK, bon. OK. Ouais, c'est ça. OK. Poussin. Bonjour. Oui, donc, bonsoir à tous. Bonsoir, Mégot. 24 ans de... Bonsoir, Balut. Bonsoir, Fildar. Bonsoir, Max. Salut. Bonsoir, mon chien. Bonsoir, Poussin Mystère. Ah, bonsoir, Gérard. Excuse-moi, je t'avais oublié. Ah ouais, bah, c'est simple. Georges. Bonsoir à tout le monde. Bonsoir, Clapouti. Ouais, salut, toujours là. Bouledopu. Oh, Bouledopu ! C'est quoi, ce bordel ? Salut, salut, salut, salut, Gégé. Bouledopu. Ouais, je suis là. Bonsoir, Gérard. Bonsoir, Sandi Capé. Bonsoir, tout le monde. Sandi Capé, je vais te dire une chose, que Bouledopu, tu vas pas commencer tes conneries, d'accord ? C'est pas le problème. C'est pas le problème. Moi, je suis calme. T'es dans le coup, aussi, non ? Ouais, à fond. Et Foufoune ? Ouais, salut, Gérard. Salut, Sandi. Alors... Je vous rassure tout de suite, je m'appelle pas Sandi. Tu me rassures. Alors, la quatrième question, donc... Non, c'était la troisième. Non, quatre. D'après vous, comment je les... Comment je... Comment je les misse France ? Ça doit être de la bite. Comment ? À mon avis, c'est des crudités, hein. Attends, attends, attends, attendez, attendez. Qui c'est qui vient de répondre, là, que c'est de la bite ? Pas moi. Pas moi. Pas moi non plus. Bon, alors, on va demander à Foufoune. Ouais. Je sais pas, ils sont allés au grain, en plein air, dans le foin. Non, mais tu peux préciser. Elles mangent des choses saines, sans bactéries, sans EPO. Elles sont des picoses et elles font de l'agime. D'accord. Elles sont bien gaulées, donc il y a du travail, quoi. Elles passent par la chirurgie esthétique, elles mettent des millions là-dedans pour faire Miss France. Ouais, mais ça, c'est pas elles, en fin de compte, c'est pas elles qui payent. Ah non, c'est Madame de Fontenay qui paye. Non, non, non, non, non, non. Faut bien se dire une chose. Non, c'est les Restos du Coeur qui payent. Non, mais attends, toi, t'es à ton micro. Donc, faut se dire une chose. Pour être Miss France, déjà, c'est pas Madame de Fontenay, comme tu viens de dire. Ouais, c'est les impôts. Donc, ça passe par des concours de mode et tout ça. Donc, on va demander à Bouledopu. Gérard, avant, sur IRC, il y a Triso, Miss Triso, qui te demande quel est le QRZ de Madame de Fontenay. Ça, c'est pas le thème des débats. Pas belle, je crois. Pas belle, ou vilaine. Non, non, mais c'est même, c'est pas du tout le thème des débats. La Cibi est terminée, maintenant, c'est sur les Miss France. Donc, on va demander à Clapouti. Bah, je pue de la gueule, moi. Ouais. Qui ? Bouledopu. Bah, tu viens de répondre. Bah, non, j'ai pas répondu. Bah, alors, tu réponds. Ouais, alors, je pense que, je sais pas, je dois vous faire 2-3 Big Macs le midi. Un bon sauciflard le soir et un rôti de veau. On va avoir une belle ligne. D'accord. Tu crois qu'en mangeant tout ça, elles auront une belle ligne ? Je crois que le midi, elles mangent des frites, moi. J'en suis la preuve. Bah, attends, parce que t'es belge, toi. Ah non, je sais pas, je dis ça comme ça. Eh, t'es devenu belge ? Et après, chez elles, ça pue l'huile. Ouais, mais t'es... Non, ça pue l'huile. Eh, t'es bien. Ouais, mais t'es devenu belge, toi. Hein, non, non. Ouais, mais t'es comme Pildar, vous devenez belge, là, tous les deux. Bah, alors, toi, qu'est-ce que t'es, Gérard ? Clapouti. Euh, ouais, bah, moi, je pense qu'elles mangent des asperges en boîte. Ouais. C'est super bon pour la forme. Et qu'elles boivent du lait de chèvre. Parce que ça, c'est super top pour le teint. Et puis, bah, en fait, la Fontenay, par contre, elle, elle mange des frites. Non, non, mais attends. Eh, Clapouti. Ouais. On n'en a rien à foutre de la Fontenay, d'accord ? Ouais, mais c'est quand même une mise. Non, non, mais on n'en a rien à foutre. On n'en a rien à foutre. On s'en fout de la Fontenay. Non, elle voit le régime dragounien. Elle mange de la salade. Elle mange vraiment de la grasse. On peut grossir. Qu'est-ce que t'as donné à manger à ta fille, toi, avant qu'elle fasse le concours, Georges ? On a été voir un diététicien. Il a fait un régime pour les salignes. Puis c'est tout. On s'en fout de la grasse. Hum, hum. Euh, Poussin ? Ouais, bah, moi, je suis d'accord avec Georges. C'est vrai qu'il mange surtout des salades, tu vois, prodités, concombres, même des... Ok, super. Bon, derrière, vous laissez les gens répondre, s'il vous plaît. Oh ! Excuse-moi. Vous laissez les gens répondre. Ça vaudra mieux pour tout le monde. Parce qu'il est 2h49, et on n'est qu'à la quatrième, et il y a 11 questions. Oh, putain. On dit pas putain. Euh, bah, qu'est-ce que je dis ? Alors, donc, pour finir, Poussin, si tu pouvais continuer ce que tu me disais. Ouais, donc, je te disais, bah, tu sais, les Miss France, ils ont franchement un régime draconien, parce qu'il faut qu'elles mangent des croûtes. Oui, des pétraves, des salades. Donc, ils n'ont pas le droit à la graisse, ni au sucre, rien du tout. D'accord. Euh, Margot... Euh, Mégo, pardon. C'est pas cool. Moi, je dis que les Miss France, là, elles mangent rien. Elles pensent à rien, elles mangent rien. Et puis, je dis, quand elles ont vraiment, vraiment faim, au bout d'une semaine, elles mangent une courgette. D'accord. Question IRC. Oui, une question de Madame de Fontenay, la vraie. Elle te demande pour quelle Miss tu aurais voté. Euh, personnellement, moi, je... Bonne question, ça. Moi, je voterais pour personne. Oh, t'as regardé ou pas ? T'as bien un petit avis, quand même. Non, non, mais même... Lequel tu préférais ? Non, non, mais même, vu ce qui s'est passé, ça m'intéresse pas. Mais... Non, non, mais... T'avais bien une préférence, je veux dire, moi, j'avais une préférence, Rigo, il avait une préférence. Il s'est passé quoi ? Euh, j'aurais... Qu'est-ce qui s'est passé ? De toute manière, ça va être la dernière question. Donc, on n'est pas couchés. Donc, 43% des gens utilisent la Miss France pour découvrir la région de la France. Les régions de France, pardon. Bah ouais. 28% des Miss France utilisent seulement les portables pour s'appeler entre elles. Ça, je vois pas du tout le rapport. 71% des Miss France préfèrent être Miss Univers... Univers Solitaire. Univers Solitaire, c'est quoi, ça ? Au-dessus de... T'as Miss France, t'as Miss Monde, t'as Miss Univers et Univers Solitaire. C'est le top des Miss. Ouais, bah, c'est bien. 23% des gens... Des gens pensent que la Miss France ne sert à rien sauf pour se masturber. Alors ça, euh... Ça, c'est vraiment des... Il y a beaucoup de gens qui pensent ça, quand même, hein. Ouais, bah, ouais. Si, si. Combien y en a ? 23%. C'est énorme, hein. Ouais, ça fait beaucoup, hein. Et 32% des gens pensent que l'abonnement aux Miss France est trop cher. Il n'y a pas besoin d'abonnement. Voilà. Si ! Non. Quoi, si ? C'est ça, Rigaud, hein. Je me suis pas trompé dans... Dans les sondages ? Non, non, c'est ça. T'as bien joué. Alors, une question que je vais poser à tout le monde, et ça, je peux préciser que sur la question que je pose, personne n'a été capable de me le donner sur les sondages, et ça, c'est bête. Donc, d'après vous, depuis quelle date Miss France existe-t-elle ? On va demander à Mégo. Ouais, bah, écoute, ça a toujours existé depuis la nuit des temps, parce que, au départ, l'élection de Miss France... C'est une légende. C'est une légende, et puis ça s'est perpétué, et puis... Pardon ? Allô ? Ouais, on t'écoute. Ouais, je disais, donc... Ouais, ça date de la... Bon, on me laisse parler, là ? C'est possible ? Ah, vas-y ! Ouais, bonjour, c'est Boule de Pue. Ouais, ouais, attends, Boule de Pue, pour l'instant, tu... C'est pas fini. Oh, Manu... Fildar ! Ouais ? Calme-moi, Boule de Pue, là, pour l'instant, c'est pas son tour. Ouais, calme-moi, Fildar. Ouais. Mégo, donc, précise. Ouais, alors, donc, je disais, ça a toujours existé, depuis le début, au départ, c'était une légende, et, en fait, voilà, comme maintenant, ça se concrétise, tout le monde peut voter, tout le monde peut participer, maintenant, c'est génial, voilà. D'accord. C'est pas pour Boule de Pue. Ok. Rigo ? Oui, il y a Miss Assetton qui te demande, c'est quand l'élection des Miss Calendrier de Routier ? Ça, je sais pas. Ça, je pourrais pas lui répondre. Qui c'est qui va passer derrière ? C'est quoi, ça ? Je sais pas. Ah, c'est le poussin vert mystère, là ? Un poussin mystère tout court. Un poussin vert mystère. Écoche pas mon nom, s'il te plaît. Bon, c'est ce que je vote, toi, d'accord ? Un poussin vert mystère. Bah, écoute, moi, ce que je peux te répondre, c'est que ça existe déjà depuis très, très longtemps. Ouais. Et que, déjà, à l'époque de Cro-Magnon, ça existait. À l'époque de qui ? À l'époque de Cro-Magnon. C'était qui, Cro-Magnon ? C'était qui ? C'était qui, Cro-Magnon, là ? C'était qui, Cro-Magnon ? C'était les hommes historiques. Oh ! On se calme derrière, on laisse passer le poussin vert mystère de mes genoux, là. Faites place, faites place. Ah, c'est les hommes préhistoriques. Ah ! Ah, mais c'est un homme préhistorique. Bon, non, c'est à l'époque des hommes préhistoriques, quoi. Ah ! Ah, attends, mais ça... Il y avait des femmes qui étaient mythes. Ah, ouais, mais c'est à l'époque où Jésus-Christ est allé sur la Lune. Ok, super. Hein, poussin ? Ça va être l'humour, ce soir, Gérard. Oh, putain. C'est cool, Gérard. Oh, poussin ! Oui ? C'est à l'époque où le premier homme est monté sur la Lune. Ouais, c'est super beau, oui. Gérard ? Allô ? Poussin ? Oui ? Quand tu parles de l'époque préhistorique, c'est l'époque des 100 dinosaures ? Oui, voilà, les 10 dinosaures, et puis je ne sais plus quoi, là, les... Les tranctosaures, là, les trucs comme ça. Ah, les brunosaures, les... Les brontosaures, les tricérapthos. Ouais, bon, Georges, les 100 dinosaures. Depuis le temps, trop tard. Georges ? Oui ? Comment c'est, en 1956 ? 66 ? Non, 56. 56 ? Oui. Je ne suis pas trop d'accord avec toi. Pourquoi ? Ah bon ? Non, non, mais on va laisser tout le monde répondre clapoutis. Ouais, moi, je pense que c'était en 1789, parce que la première, elle s'appelait Marianne, je crois. Oh, ouais, bah d'accord. Alors là, toi, t'es carrément parti sur... C'est vieux, hein ? Ouais, mais c'est vachement vieux, en fait. Oh, ouais, vache. Oh, la vache. Eh, pourquoi c'était pas l'année de la vache, les Miss France ? Mais non... Non, mais tu te rappelles pas, Marianne, avec son chapeau, là, et tout ça ? C'est clair, quoi, c'était elle, c'était l'ancêtre, déjà, de l'autre, là, Geneviève, et tout. Elle avait le chapeau, c'est clair, c'est 1789. Bon, ok, d'accord. Ok. Boule de puce ? Ouais, alors moi, je sais pas du tout. Faudrait pas te dire une date exacte, mais je sais que je regarde depuis l'âge de ma naissance. Que je kiffe Miss France. Elles sont bonnes, quoi. D'accord. Foufoune ? Ça existe depuis que Madame de Fontenay a pris un extra, en 1962. Et depuis, elle s'en est parmise. Je voudrais se partir avec Laurent Gardier. Elle a m'enflé, hein. À mon avis, je pense que vous vous trompez tous, ça existe depuis 1965, et il y a eu un reportage... Ah, j'ai fait trois ans. Il y a eu un reportage de fait... N'importe quoi. C'est faux ! Tu mens, Gérard. Tu mens comme tu respires. Ouais, moi, je t'emmerde ! N'importe quoi. Bon, tu me mets tout le monde en air. On est en air. En air. Tranquille. J'en connais un tout à l'heure, il va se prendre une bobe si je l'attrape, lui. Ouais, c'est ça. Bon, tu me mets... Tu me coupes tout le monde. Voilà. Voilà. Donc, alors, moi, je peux vous dire une chose, que ça existe depuis 1965, et ça, c'est vrai, parce qu'il y a eu un reportage qui a été fait samedi, sur la Une, avec... Patrick De Carolis. Non. Non ? Non, sur la première, c'est pas avec... C'est Emmanuel Chien. Henri Chambon. Ah, avec Henri Chambon. Et donc, ça existe depuis 1965. Exactement. Les sélections de Miss France. Moi aussi, Chambon. Regarde, Chambon, Gérard, sans... Hop, on... Suivante question. Sortirez-vous avec la Miss France en boîte ou autre ? Allô ? Allô ? Attendez, parce qu'il est parti savater Olivier, parce qu'il a eu le double saut. Olivier, casse-toi. Casse... Dégage, Olivier ! Arrête tes conneries, d'accord ? Et avec qui ? Je t'en reviens dans le studio, tu me fais une connerie, je te claque. Ok ? Allez, reviens, Gégé. Allez. On reprend, on reprend les auditeurs. Allez, c'est parti. Ok. Alors, on va demander à Foufoune. Ouais, non, moi j'irai pas avec elle. Mais tu peux expliquer ? Parce que je vais dans des boîtes pas très saines et je pense que pendant un an, elle n'a pas trop le droit de fréquenter ce genre d'endroits, donc non, j'irai pas avec elle. Non, bah là, tu te trompes. Ah bon ? Montez sur moi, c'est tout. Euh, Manu ! Tu arrêtes avec ce remix ! Regarde, tu arrêtes ! Ça, c'est du mix. Tu arrêtes ou sinon j'arrête, là. J'ai rien fait. J'arrête dans 4 minutes les débats. Bah ouais, c'est le but. D'accord ? Bon, allez, on y va. Donc, Foufoune, je suis... Il y a Miss Davy Free qui te demande si on peut lire dans les chromosomes d'un embryon si le bébé, il sera futur Miss France. Et si c'est un garçon, comment on fait ? Non, je pense pas qu'on peut lire là-dedans. Et il te demande combien ça fait en euros. Ouais, ça, j'en sais rien. Euh, boule de puce. Bah alors, moi, je suis chaud comme la brèze pour sortir avec une meuf, une Miss France. Elles n'ont pas le droit... Pendant l'année où elles sont Miss France, de sortir avec des garçons. Interdit d'avoir des gosses. Interdit de rien faire, les pauvres. C'est ça, bah... Je crois que tu te trompes complètement. Euh, non, pas du tout. Mais t'as dit au GG. Tu te trompes. Tu te trompes parce que... Les nanas qui sont élus ont le droit de sortir. Et après, une fois qu'elles sont élus, je t'explique pas les soirées qu'ils font. C'est quoi comme soirée ? À poil et tout. Non, non, mais attends... Des trucs cul-cul-cul ? Non, mais... Avec des menottes et tout. Non, non, après, ils sont invités dans... Dans des soirées... Moulin Rouge ou autre... Non, Ritz. Après, ils vont en Ritz. Ils prennent des Mercedes. Bon, Fildar, tu fermes ta gueule, maintenant. Euh, Georges ? Non, mais moi, j'ai ma femme. Elle s'est obligée. D'accord. Euh, Poussin ? Comme un bon sûr de ça. Comme un boule de pute, tu t'écrases. Oh, oh, oh. J'étais contentisant. C'est bon. Donc, Georges ? Ouais, non, mais avec ma femme, elle s'est obligée. Ok. Euh, Poussin ? Mystère. Poussin, Mystère. Putain ! Quelle bouffonne, celle-là, sérieusement. T'es la grosse. Bah, t'es toi, la grosse. T'es boule à dos, t'as fait finir ça. Putain ! Fildar ! Eh, mais calme-toi, là-bas, le vieux con, là. Mais non, mais Gérard, c'est bon, il revient. Reviens, Gérard. Attends, l'autre, il arrête pas de me couper les jambes. Il a laissé son truc, là, il me coupe n'importe qui. Là, il va se prendre des claques dans sa gueule, encore. Qu'est-ce que t'as fait ? C'est navrant. Y'a rien, hein ? Y'a rien, regarde, regarde. Viens voir, viens voir, viens voir. Mais, mais, mais, là, là. C'est-à-dire que là, ils sont tous talentés. Mais, bien sûr, pourquoi t'avais été là ? C'est moi qui viens de le remettre. Ah. Il l'avait mis en air, encore. Alors, il va se prendre des claques dans sa gueule. En air, c'est quand t'es à l'antenne. Il l'avait mis en out. En vête. Ouais. Il voulait pas qu'elle parle. Ah, c'était une erreur. Comme d'habitude. C'était une erreur. Ouais, ouais, c'est une erreur. Attends, tu vas te prendre des claques dans ta gueule. C'est comme un faux numéro, c'est pareil. Alors, Poussin. Ouais, bah, tu m'écoutes, Gégé, ou pas ? Je t'écoute. Fildar a fait un bon premier débat. Ouais, mais là, pour l'instant, il fait de la merde. Oui, mais comme tu me l'as pas remercié au début, tu remercies pas les gens quand ils font du beau boulot. Pour l'instant, au premier débat... Il fait que c'est crabe. Il fait un truc avec ses crabes. Bah, ouais, mais il va pas continuer comme ça. Mais d'accord, mais ça s'est bien passé. Ouais, bah, alors, dans ce cas-là, qui me passe un deuxième débat ? Qui bosse bien pour le moment ? Qui bosse bien ? Pour l'instant, Rigaud, on est à combien sur l'Internet ? On a perdu. Quand t'as dit que tu te cassais, il y en a plus de 1 000 qui sont partis. On est à 3 722. Donc, j'espère qu'on va récupérer. Bah, dis-leur de revenir, dis-leur de revenir. Manu, au premier débat, il a fait du bon boulot, au standard. Oh, merde, c'est pas vrai. Attends, c'était pas vrai. T'as gueulé dessus. Non, non, non, non. Bah, j'ai la DAT, t'as gueulé dessus. J'ai la DAT. Sur certains auditeurs... On va reprendre le débat juste pour dire à Rigaud, là, tu peux leur demander de revenir au 1000. Donc, tous ceux qui sont partis, là, sur Minitel, essayez de revenir... Non, Internet, ça s'appelle. Sur l'Internet, pas sur le Minitel, parce qu'il fonctionne pas. Non, mais Minitel, Internet, vas-y, parle de l'Internet. Donc, l'Internet, vous pouvez toujours nous joindre au www.frfunradio. Revenez, revenez, revenez. On va battre le record, ce soir, Rigaud, s'il te plaît. Faut qu'on arrive à 5000. Faut que tu nous en trouves 5000. Et là, il est 3h01, normalement. Moi, je devrais avoir fini le débat. On va chercher, on va chercher. Donc, Poussin. Oui, donc, je te disais, je pense que les... Ah oui, c'est sortir avec les Miss France. Oui. C'est pas sortir avec moi. Poussin. Moi, personnellement, je pourrais pas sortir avec une Miss France, vu que je suis une nana. Mais avec un mec qui fait Miss France, oui, pourquoi pas. Ah bah, t'as déjà vu des mecs... Je regarde si ça fonctionne. C'est pas facile pour les contourneurs de beauté. Qu'est-ce qu'elle est taubée, celle-là ? Qu'est-ce que tu fais, Gérard ? Non, je suis pas taubée, c'est vrai. Attendez, attendez. Non, non, on arrête, on arrête. Qu'est-ce que tu fais, Gérard ? On arrête, on arrête. Pourquoi tu... Mais non, on n'arrête pas, hein. Non, non, il recommence, il recommence. Il recommence, il recommence. Je suis là, je suis là. Poussin. Ah, mais c'est Manu. Mais non, parce que là, je les coupe, parce que tu parlais. Oui ? C'est Manu qui coupait. T'as été coupée combien de fois ? Manu, c'était Manu. Je peux pas te dire, parce que j'ai pas fait gaffe. Ouais. C'est pas la religion, en plus, on parle pas de la religion. Euh, donc, qui c'est qu'il me reste ? Mego ? Ouais, bah moi, je suis d'accord avec Poussin Mystère, là. Je trouve qu'elle a bien répondu à la question, et moi, je suis d'accord avec elle. - Hum ? - Voilà. Mais tu peux préciser, quand même, le fond de ta pensée ? Bah, que moi, je pourrais pas sortir avec une fille qui est dans l'élection de Miss France, parce que je suis pas intéressée par les filles. Et puis, par contre, un mec, qui va dans l'élection de Miss France, ouais, je suis d'accord, pourquoi pas ? - D'accord. - Voilà, c'est ce qu'elle a dit, non ? - Euh, ouais. - Voilà. De toute manière, y a pas que les boîtes. En fin de compte, qu'on peut inviter une Miss France, tu peux l'inviter au restaurant et autant. Ouais, mais il faut du pognon, putain. Ouais, mais ça, euh... Tu m'en prêtes ? Tu peux l'inviter à faire les boutiques, aussi, hein ? Ouais. T'as des lèches vitrines, t'as... - Fils de cul... - Poussin Mystère ? - Oui ? - Ouais, quand tu fais les boutiques, tu vas où, toi ? - De quoi ? - Quand tu fais les boutiques, tu vas où, toi ? Moi, je vais généralement dans Paris. Ouais, mais où, dans Paris ? Bah, y a une ville, mais je pourrais pas citer, quoi, parce que sinon, ça ferait trop de marques. Bon, bon, bon, bon, on va peut-être reprendre les débats, Gérard. Tu gères un peu, on y va. Donc, alors, sur la question, donc... Oui, Rigaud, une question, avant ? On va danser sur le débat ou pas, là ? Y en a plein. Y a Miss Paradox qui te demande : "Est-ce que tu penses que l'élection de Miss France, c'est pas un racket visant à enrichir France Télécom ?" Je pense pas. Mais ça... Mais justement, cette question-là, tout le monde l'attend, mais je vais la poser tout de suite, là. Non, non, je l'attends pas. Bon, attends, toi, tu perds de ta gueule et c'est tout. - Euh, Manu ? - Ah non. Tu me fais du bon boulot ? Bah ouais, je fais que ça, hein. Je fais que ça. Alors, donc, y a 86 % des gens... Bon, allez, hop, conclusion terminée, moi, j'arrête. Bah non, maintenant, Gérard, je suis en train d'essayer de récupérer des gens. Regarde, on va battre leur corps. On est remontés au-dessus de 4 000, Gérard. Gérard, reste, Manu, on y va, on y va, on continue. Alors, y a 86 % des gens qui ont vu Miss France ont vomi et s'en remettent pas. Donc ça, je vais te dire une chose, Gaël, quand tu me sortiras des trucs comme ça, tu me feras signe. 53 % des gens rêvent toutes les nuits de se prendre une bonne grosse Miss France. Donc, je sais pas où est-ce qu'elle est. Alors là, l'histoire des calendriers, je la pose pas, ça sert à rien. - Pourquoi ? Elle est bien. - Non, non. - C'est des routiers. - 47 % des routiers ont des calendriers de Miss France nus dans leur camion, c'est vrai ou pas ? - Non, c'est faux. Alors, toi, tu t'écrases. Toi, tu fais ton boulot et tu t'es... 36 % des gens ont tué Miss France pour avoir un chien. Alors là, Gaël, je vais te dire une chose, que là, je termine même plus. - Elle t'embrasse, elle t'embrasse comme elle te dit bisous, Gégé. - Allez, hop. - Sondage paru dans Miss France News. - T'as oublié de dire que 43 % des gens pensent que Miss France est une salope et que 1 % des gens préfèrent Monsieur France en string que Miss France en short. - Eh ben, ça y est, le sondage est terminé pour... - Ouais, c'est fini. - Bon, alors, maintenant, on va continuer le débat. Alors, l'élection de Miss France est-elle truquée ? Donc, on va demander ça à mégots. - Euh, non, non, elle n'est pas truquée. Je trouve qu'elle se passe normalement devant un huissier et tout ça. Voilà. - T'es sûre ? - Ouais, ouais, je suis sûre. - T'es sûre ? - Si, si, non, non, non. Moi, je pense que c'est tout à fait légal et puis il n'y en a aucune qui ait choisi dès le départ et puis voilà, quoi. Moi, je pense que c'est tout à fait légal. - D'accord. Pouce en mystère ? - Non, moi, je pense qu'au contraire, c'est truqué parce que quand tu vois ce qui s'est passé à la télé il y a à peu près 2-3 jours, ils ont expliqué que normalement, c'était la Miss Berry qui devait être élue. - Miss Berry ? - À la place de la Miss... - Miss Berry ? - Ouais, Miss Berry à la place de Miss... - Berry ! - Si, Berry ! - Oh, t'as le cœur de Paris. - Oui, c'est Berry, c'est ça que j'ai dit, Berry. - Euh, Georges ? - Oui, monsieur Aurélien, ma fille. - Mais, il y a Delphi. - C'est truqué, c'est un scandale, de toute façon. - C'est truqué. - D'accord. Question Minital... IRC, pardon. - Non, c'est pas une question, c'est... Attends, parce qu'il faut que je la retrouve... Je sais plus qui c'était qui me disait que c'est truqué, en fait, pour gagner Fos-Sucé. - Je ne pense pas. Euh, Clapouti ? - Bah, je me demande si Fos-Sucé est Geneviève ou quoi. - Non, Fos-Sucé est Jean-Pierre Foucault. - Ah, Foucault ! - Ouais, d'accord. - Ouais, ça. Boules de pus ? - Ouais, bah, moi, je pense que c'est bien truqué, parce que je me souviens, en 1975, il y a Sandy Plodocus qui a gagné le concours, et je voudrais savoir... C'est pas possible, quoi. - Puis, euh... Fildar, s'il te plaît. - Ouais ? - Tu me vires Boules de pus. - Salut, mec ! - Non, mais c'est intéressant, ce qu'il dit, Gérard, t'inquiète pas. - Euh, Foufoune ? - Ouais, bah, euh... C'est pas truqué. - Bah, tu peux expliquer ? - Parce que Sandy a dit que c'était truqué, donc je veux pas dire comme elle. - Alors, moi, je peux te dire une chose. - Oui ? - Bonjour. - Bonjour. - Gérard, en attendant, il y a Miss Davy Ford sur l'IRC qui dit qu'en tout cas, s'il voit Sandy au Miss France, il considérera que c'est clair que c'est truqué. - Mais n'importe quoi. Euh, donc, moi, je peux vous dire une chose, que l'histoire de Miss France... Bon, alors, pour moi, terminé, je... - Non, non, Gérard, c'est bon, là ! - Gérard, t'es niaque pas ! - Regarde ! - Qu'est-ce qu'il y a ? - Regarde, Gérard ! - Hé, Olivier, t'arrêtes, t'as pas tes conneries derrière ! - Allez, assieds-toi, Gérard, c'est bon, reviens, allez, allez. - Fais pas le con, toi, non plus ! - Olivier, il travaille dans le studio à côté, alors c'est lui. - Alors, fais pas le con, toi. - Salut, c'est pas moi, Gérard. - Fais pas le con, parce que de toute manière, c'est terminé. Moi, je fais la dernière question. - On te fatigue pas, Gégé, c'est bon. - Non, non, mais c'est terminé, maintenant. Allez, hop. Moi, je peux vous dire une chose, que ça a été truqué, parce que, pour une bonne chose, c'est que la ministre Haïti pleurait avant, la présidente qui a donné un mouchoir pour qu'elle s'essuie les yeux, et normalement, c'était Miss Berry, qui devait être élue non Miss Haïti. Donc, pour moi, ça a été truqué, ça a été truqué. Et ça, dans la presse, ils en ont parlé, mais maintenant, ils écrasent. Pour l'instant, ils ont camouflé, ils ont mis fin, comme dans un jury, ils ont dit : "C'est une affaire classée." Donc, pour moi, c'est de la merde. - On m'excuse. - Voilà. - Donc, conclusion du débat. - Ah ! - Non, déjà ? - Non ! - Non, c'est pas possible. - Je suis en train de rattraper des gens, là. Si tu veux qu'on dépasse les 5 000, il faut continuer le débat, là. On est à 4 722, on est beaucoup remontés. Ils ne m'écoutent même pas. - Si, si. - Non, mais non. - J'écoute, Rigaud. - Non, mais tu ne m'écoutes pas. - On était à 4 000. - Tu ne m'écoutes pas. - On est à combien ? 4 722. Voilà. - Bon, ça va, tu m'écoutes, c'est bien. - Alors, devrait-on faire une élection de Miss Boudin ? On va demander à Mégo. - Moi, je suis d'accord avec cette idée-là. Je pense qu'il n'y a pas que les beautés qui doivent participer à l'élection. Il y a aussi les boudins, il n'y a pas que des beautés sur Terre. Voilà, je pense que chacun y trouvera son compte, non ? - Je pense. Poussin vers Mystère. - Oui, donc moi aussi, je pense que pourquoi pas ? Parce qu'il y a bien aussi des Miss pour les personnes âgées, pour les mamies, il y a des Miss mamies. - Et il y a des mêmes, je dirai plus tard, Georges ? - Oui, tout le monde doit être égaux. - Ah bah, c'est bien, toi. - Bah oui. - Donc, on peut élire n'importe qui. Qui c'est qu'un téléphone pourri, là ? - Eh Gérard, là, c'est Poussin. Je voulais te dire qu'en Amérique, ils font aussi les concours d'élections sur les femmes qui sont un peu fortes. Et donc, ça fait les élections de Miss ronde. - D'accord. Ok, Poussin, Mystère, bière. - Tu t'es inscrit, non ? - Euh, Clapouti ? - Ouais, j'avais une question. Comment on fait pour les maillots de bain, alors ? - Bah, tu peux préciser ? - Bah, si on fait l'élection de Miss Boudin, on fait comment pour les maillots de bain, quoi ? - Bah, tu peux trouver des maillots de bain... - Taille unique. - Taille unique ? - Ouais, si taille unique, ça craint. - Non, mais de toute manière, tu peux trouver des maillots de bain qui sont assez... qui sont faits pour ta taille. - Eh, j'ai des toiles de teint. - Faut pas qu'ils crassent, ici. - Gérard, sur IRC, il y a Miss Pourras qui demande : "Est-ce que c'est vrai que Miss France est à la beauté, ce que Sandi est au saucisson à l'ail ?" - Ah, bah, ça, peut-être. On verra, on lui demandera. Euh, boule de pus ? - Ouais ? - Boule de pus ! - Tu l'as virée ! - Ah, bah... - Ah, bah, oui, quand même, je suis là. Bah, vu que Fildar, il m'a pas mal calmé, il m'a bien engueulé au standard. - Ouais, il t'a vachement calmé, il est en train de faire le con avec sa caméra. - Non, c'est quelqu'un d'autre, je sais pas qui c'est, je connais pas les voix. Mais t'as pas entendu la question. - Ah, bah, t'as pas entendu la question, je répète pas. - S'il te plaît, j'ai pas été méchant pendant le débat. - C'était l'élection de Miss Boudin. - Voilà. - Voilà, Miss Boudin. Et c'était quoi ? Répète, répète. - Non, mais attends, répète, maintenant, t'as compris. - C'était l'élection de Miss Boudin, c'est ça ? - Bah, si Sandy participe, y a pas de problème, ouais. - Alors, Sandy, attends, merde, tu dégages pour de bon pour toi. C'est terminé. Allez, hop ! Hop là ! - Alors, euh... Qui c'est qu'il nous reste, donc, boule de pus ? Tu me reprends quelqu'un d'autre, hein ? Oh là là, fil d'art ! - Quoi ? - Tu me trouves quelqu'un d'autre ? - Non, j'ai pas le temps. - Ouais, t'as pas le temps, tu vas travailler. Foufoune ? - Ouais, euh... Bah, pourquoi pas, non plus, faire l'élection de Miss Jambe de Bois, Miss Oeil de Vert, ou Miss Culotte de Cheval, quoi, c'est ridicule. - Hum-hum. - Voilà. - D'accord. - Gérard ? - Oui ? - Y a Miss Eason qui me demande : "Est-ce qu'une fille qui n'est pas française peut participer à Miss France ?" - Je pense. - Ouais ! - C'est faux, c'est faux ! - Pour une fois, elle a raison, c'est faux, hein. - Ouais, mais attends ! - Non, mais attends ! - Non, non, ça... Non, non, ça, moi, je peux vous dire une chose, y a toutes les villes qui participent. - Ouais, mais c'est français, les villes. - Gérard, y a Miss Paradox qui me dit qu'il a vu Sandy à l'élection de Mister Nobile 92. - C'est bien. C'est bien, c'est pas mal. Donc, moi, je peux vous dire une chose, qu'on pourrait faire... plus de... Bon, celui qui s'amuse derrière, il arrête ! Bon, allez, terminé, conclusion. Hop. Voilà, c'est fini. Conclusion, donc... - Attends, on est combien sur Internet ? - Combien, Internet, Rigaud ? - On a perdu, conclusion, il se casse. - Mais non, mais non ! - Mais non, Rigaud, t'es con ! Combien, sur Internet ? - Combien ? - 4 722. - Aïe, aïe, aïe, aïe, aïe. - Non, c'est pas grave. - La semaine prochaine, c'est les vacances, donc ça devrait cartonner, là. - Peut-être que dans la conclusion, ils vont peut-être... - Ils vont revenir ! - Tu t'écrases ! - Si ça se passe bien, mon avis, ils vont revenir. - Tu me fais du boulot de nasse, tu t'écrases au standard ! - Sinon, Gérard, Nassim... - Bon premier débat ! - Gérard ? - Oui, Rigaud ? - Nassim, il donne sa conclusion tout de suite avant de se barrer. Il dit que si Miss France s'est truquée, il n'y aurait que des Sandy en finale. Donc c'est pas truqué. - Si, ça a été... Ça a été truqué. Euh, Nassim, eh ! N'essaye pas de me virer tout le monde au standard avant les conclusions, parce que sinon... - Ouais, non. - Tiens, ça commence ! - Gérard, arrête, tu le tapes pas dessus ! - Arrête ! - Allez ! Gueule pas, ils vont pas revenir sur Internet, après. - Mais go ! - Ouais, conclusion, là, donc ? - Ouais, on arrête, là, c'est fini. - Bah écoute... Moi, Gérard, je vais te dire une chose. Pendant le débat, je suis tombée amoureuse de toi. - Non, bah c'est bien, mais je suis bien pris. - Moi, je suis tombée amoureuse de toi, grave. Je n'ai pensé qu'à toi, cette nuit, là. - Eh bah, c'est bien, t'as... - Non, s'il te plaît, fais quelque chose, là. - Non, non, mais moi, je peux rien faire pour toi. - Parole gentille, non, mais quelque chose de gentil, seulement. - Bah, attends, attends, tu reprends le fil d'art, il va... Tu reprends le fil d'art, pouce en vert. - Ouais, j'ai dessiné son numéro ! - Ouais, bah écoute, je pense que c'est... - Fil d'art ! - Allô ? Y a quelqu'un ? - Oui, y a moi, y a moi. - Pouce en vert ! - Oui, non, mais je suis là, t'inquiète pas, hein. - Conclusion ? - Tu m'entends, là ? - Ouais. - Donc, conclusion, bah, ce que j'ai à te dire, c'est que c'est un très bon débat, le meilleur que t'aies fait, et en fin de compte, bah, je pense que je vais m'inscrire à l'élection Miss France. - Non, non, non, non, non ! - Si, si, si, si ! - D'accord. - Jean ! - J'en comprends le tout, hein. - Georges ! - C'était bien, mais à la prochaine fois, ma fille, ça va être Miss France. - De quoi ? - Berry, l'année prochaine. - Qui ? - Ma fille. Miss Berry, ça sera Miss France l'année prochaine. - D'accord. - Voilà. - Tlapouti ? - Ouais, bah moi, je pense qu'il faut garder l'émission des Miss France, parce que comme ça, on peut bien se marrer à la télé, quoi. - Ouais, non, mais y a des limites. Et Foufoun ? - Salut, Gérard ! - Tlapouti, tu me rappelles après ? Et, euh... - De quoi ? - De quoi ? Qui c'est que je rappelle après ? - C'est un message personnel. - Allô ? - Je voulais dire qu'il te crevait pas trop le cul, parce que, depuis la rentrée, tu fais un débat suivant le reportage qui est passé samedi d'avant sur la Une. Donc, je pense que tu pourrais faire preuve d'un peu plus d'imagination et d'un peu plus de culture. Surtout que, en de bon intendeur... - Salut ! Eh bah, la prochaine fois, on t'appellera pas, parce que les débats que je fais sont déjà convenus avec Max, et ça, on en avait discuté. Donc, le débat sur Miss France, c'était prévu. Normalement, on devait faire la solitude et j'ai annulé. - Parce qu'on voulait rebondir... - Fils France ! - Fils France, ouais. On voulait rebondir sur l'actualité de Fils France. - Fils France ! - Fils fucking ! - Toi, écrases ! - Jérard... - Donc, moi, je voulais... - J'ai une grande nouvelle, on a dépassé les 5000, enfin. - Ouais ! - Quand ils ont entendu que j'avais demandé de revenir pour la conclusion, ils sont revenus. On est à 5003. - Ouais ! - Aïe, aïe, aïe, aïe, aïe ! - Je vais citer quelques conclusions. - On va peut-être remercier les 5000. - Bah ouais, on va remercier... - On va peut-être les citer, on va peut-être donner leur pseudo. Ça va peut-être être un peu long. - Miss Acetone, Miss Boudin, Miss Devi One, Miss Coras, Miss Zed Zed, Miss Olio, Rip, Ara, Beko, Bénichou, Bigo Pleu, Hélène Dille, Finger Eater, Jean Lucien... - C'est bon ! - C'est bon ! - Attendez, il m'en reste... Je n'ai pas fini. Triso, Web Shark, Sweet Boy... - Ça y est, ça y est, c'est bon ! - Rigaud, Rigaud, c'est bon, c'est bon ! - OK, et une petite conclusion ? Une petite conclusion quand même de Miss Turpentine. Elle dit que ton débat, il n'avait ni queue ni tête comme toi. - Bon bah ça, je m'en doute. C'est toutes les semaines que j'entends ça. - Sinon, il y a aussi Yankee, il y a aussi Madame de Fontenay, quand même. - Merci Rigaud, c'est bon. - Miss France, Miss Berry, Miss... - Salut, salut ! - Salut, salut ! - Donc, de toute manière, là, vous allez retrouver Rigaud. - J'ai oublié Beko, j'ai oublié Beko. - Ouais, bah Beko... - Je suis désolé. - Donc, voilà, merci à tous d'être restés. - Je voulais saluer les demoiselles auditrices. Il y en a 4 ou 5 qui sont venus ce soir du Havre. - Il y a 4 personnes du Havre qui sont venues. - Les 4 pour filles, là. - Qui sont venues aussi pour toi, spécialement, que pour moi. - Oh si, oh si, oh si, elles ont entendu. - Par contre, il y en a une qui t'a posé un lapin. - C'est qui ? - Ah ah ah ! - Cette semaine ? - Ouais. - Il y a eu deux lapins en l'espace d'une semaine. - Rien que toi, j'ai plus de batterie. - Bah non, t'as plus de batterie. - Gérard, j'ai oublié Miss LGM. - Ouais, bah ça, je vais pas aller. Bon. - Conclusion du débat, Gérard, toi, de Miss France. Qu'est-ce que tu penses de Miss France et de tout ça ? - Personnellement, j'en pense que c'est... En fin de compte, ça a vraiment été un peu... - Et Miss Paradoxe, excuse-moi. - C'est bien. Donc, pour moi, je pense qu'à mon avis, ça a été un peu truqué. Parce qu'il faut se dire une chose, que ça, ça a bien été précisé dans la presse. Même sur Exclusif, ça a bien été dit, comme quoi la présidente avait bien donné son mouchoir. À Miss Tahiti. Et que normalement, ça devait être bien Miss Berry qui devait être élue. Donc, la semaine prochaine, étant donné... - C'est le 24 au soir. Et non seulement nous serons là pour fêter Noël avec vous, pour tous les pauvres paumés qui sont de l'autre côté et qui fêtent pas Noël et qui sont malheureux. Donc, nous, on fêtera pas Noël en famille, en ce qui nous concerne, et on sera là. Et comme ça tombe un jeudi... - Ça tombe un jeudi. - Donc, Gérard sera là pour ses débats. Et un débat de trois heures. - Vas-y, dis, Gérard. - Un débat qui va porter uniquement sur mes copains les routiers ! - Ouais ! - Et je veux des routiers à l'antenne ! Et même devant la radio pour Noël, je veux entendre klaxonner ! - Voilà, donc un débat de trois heures avec à peu près 20 questions. - Euh, on va faire 22 questions. - Ouais ! - On va essayer d'avoir 22 questions. Et je vais les travailler pendant... - Avec la même équipe, quand même ? - Ouais, si ça se calme. Donc, vous allez retrouver, pour finir, Rousseau. Excuse-moi du temps, tu reprends avec un peu de retard, mais c'est pas grave. Je t'avais dit avant 4 heures, donc on n'est pas loin. - T'as de la veine. - Donc, Rousseau pour la nuit sans pub. 6h-9h, Barthes, après la suite des émissions. Bien sûr, demain soir, 22h, minuit max, avec Jean Deneuver. Et bien sûr, si vous voulez des places à La Loco, n'hésitez pas, Fildar va vous attendre. Il va vous récupérer pour avoir des places à La Loco. Donc, sur ce, je vous souhaite une bonne nuit à tous. - Des places de ciné aussi, des places de parking, des places de... - Tout ce que tu veux. Et bien sûr, demain soir, n'hésitez pas. Branchez-vous tous sur FUN. - Aucune hésitation possible. - Maintenant, vous n'avez plus le droit de vous tromper. Écoutez FUN. - Moi, je vous mets sur Énergie. - Oh, ma gueule à toi ! Toi, tu vas te faire sauter, tu vas aller dans une poubelle sur Énergie. - Voilà. Le dernier disque, avant de se dire au revoir, c'est... - Le dernier disque, c'est : "Mets tes doigts dans les fesses, avec le beurre, c'est mieux." "Avec du beurre, c'est mieux." Et c'est... Tu n'aimes même pas ça ? - Si ! "Avec du beurre, c'est mieux." == Le débat sur les routiers == === Contexte === Nous l'avons dit, l'époque était particulière. Époque des grands passionnés, des jeunes gens, d'une sorte d'euphorie. Pour ces gens, travailler à des moments sacrés n'était pas un problème. C'est évident pour Gérard, vu son manque de socialisation et de lien avec l'aspect familial de telles fêtes, mais ça l'est moins pour l'équipe régulière de la radio. Et pourtant, pas de best of, les animateurs sont là, au grand complet. Alors pourquoi ne pas fêter en direct Noël ? Et se faire plaisir avec un débat de Gérard, dans la pure tradition surréaliste. C'est à ça que ressemblera la messe de minuit de Fun radio. Pour faire plaisir à l'animateur, Max accepte son thème favori : les routiers. C'est un peu redondant par rapport à celui de la semaine d'avant, mais ce ne sera pas la seule redondance de ce thème. Et là-dessus, il est intarrissable. COmme si les astres étaient alignés, et cela n'arrivera plus ensuite, même les audituers vedettes étaient là, sans exception, malgré le moment. De quoi offrir un beau cadeau de Noël à la jeunesse adolescente de l'époque. === Les personnages === === Transcription === Je tais toi, je parle à Gérard, oh là là ! Bonne soirée Anne-Joëlle, merci, au revoir ! Allez hop, on dégage ça. Suivant ! Ah je peux plus Anne-Joëlle, je peux plus. C'est même pas physique, c'est vocal là. En plus c'est pas gentil ce qu'elle t'a dit. Ouais mais attends, tu vas voir ton répondeur, il va être blindé pour elle. Alors, donc ce soir, minuit pile dans 20 secondes, les conseils de Gérard et Sandy jusqu'à minuit et demi, une heure moins le quart, on va voir comment ça va se passer. Et même si ça se passe même plutôt bien, on fera peut-être jusqu'à une heure les conseils de Gérard et Sandy, c'est sympathique. Non mais moi j'aurais bien voulu un petit jeu de la vérité, un petit peu quand même ! En règle générale ça se termine toujours mal parce que les questions sont assez dures et il faut voir si vous assumez, on va voir. On va déjà démarrer la première demi-heure et voir comment ça va se passer. Qui allons-nous accueillir Gérard et Sandy ? Alors on va accueillir Nina, 17 ans de Paris. Nima ! 17 ans de Paris. Oui bonsoir. Oui bonsoir. Bonsoir Max. Salut Nima. Bonsoir. Joyeux Noël à tous. Merci. De même pour toi. Ouais merci. Bonsoir Michel. Oui alors j'ai un petit problème. Comment ? Non non moi c'est Sandy. T'énerves pas. C'est pas ta chienne d'accord ? Michel ! C'était l'américaine, bonsoir Michel et tu fiches pas ta chienne. D'accord. Tu commences à te calmer d'accord ? Ouais. Parce que sinon on passe à quelqu'un d'autre. Non non attendez, on va y aller mollo parce qu'il est minuit, il faut aller jusqu'à 4h. Donc tranquille les gars, tranquille les gars. Alors ton conseil c'est quoi ? Ce n'est pas offert de... Non mais attends il va le dire lui-même. Non mais Gérard, Gérard. Gérard. Oh non mais concentre-toi. Arrête de les emmerder toutes les deux secondes au standard. C'est à lui de poser son problème. Parce qu'il est noté sur ta feuille que tu dois dire pourquoi ton... Hein ? Bon merci Max. Qu'est-ce qu'il t'amène Ringo ? Quoi ? Allez vas-y magne ! Bon alors en fait mon conseil c'est que j'ai pas de cadeau pour ma mère pour demain. Et je vous donne un conseil de cadeau. Déjà moi j'ai une question à te poser. Qu'est-ce que ta mère elle aime ? Elle aime forcément quelque chose. Si c'est des fleurs ou si c'est... Je sais pas moi. Elle aime les voitures. Ouais. Quel genre de voiture ? Ah les voitures jaunes. De couleur jaune. Ouais. Et de quelle marque ? Une marque japonaise. Une marque japonaise ? Mais quelle marque ? Il y a plusieurs marques japonaises. Mais non mais non non non non non non non non. Non mais là déjà on va avoir des problèmes. Non non excuse-moi. On va avoir des problèmes avec ça direct parce que vous avez dit... Pas de marque. Une marque japonaise. Une marque japonaise c'est une marque. Donc... D'ailleurs on sait que tous ceux qui conduisent avec une voiture japonaise c'est une marque. Comme pourrait l'être Renault. Moi j'ai... T'as quoi comme voiture une japonaise ? C'est une marque. Pas de pays rien. A la rigueur des affluents ou des... Vous avez le droit à... Mais pas... Le parfum. Qu'est-ce qu'elle aime comme parfum ? Oh tu te réveilles ? Allo ? Une. Ouais. Bah alors tu réponds pas aux questions que je... Oh tu te réveilles ou quoi là ? Ou je te réveille moi de tout à l'heure ? Donc en fin de compte elle aime les voitures et qu'est-ce qu'elle aime d'autres ? Elle aime un peu de tout. Les parfums. Les vêtements. Ouais. Bon bah moi je serais avec toi. Mais tu disposes de combien d'argent déjà ? 200 balles. 200 balles. Donc déjà pour 200 balles je pense que tu peux lui offrir une bouteille de parfum. Une bouteille de parfum ? Je pense que c'est déjà bien quand tu... Une bouteille c'est grand. Comment ? C'est beaucoup une bouteille. Non mais attends tu trouves du parfum à moins de 200 balles. Arrête tes conneries toi. Comment tu vas faire ? Tu peux avoir du parfum pour moins cher. C'est sûr. Maintenant si tu veux lui offrir un bouquet de fleurs je pense que tu peux aussi. Poignée avec la bouteille de parfum. D'accord. Donc voilà mais tout dépend de ce qu'elle aime aussi. Elle aime les parfums exotiques. Les parfums exotiques. C'est-à-dire ? C'est quoi ? Quel parfum exotique ? Je ne saurais pas te dire précisément mais... Attends parce que du parfum exotique il y en a plusieurs. Alors précise. Avec la noix de coco ? Avec la noix de coco tout ça non ? Non mais attends. Laisse le préciser lui. Alors avec la noix de coco ? Ouais vas-y. Parce qu'on vient de te le dire. Vas-y. Non avec la noix de coco, ananas... Ouais c'est ça. T'as déjà vu du parfum à l'ananas toi ? Ah si si si. Il y a même du parfum à la pêche aussi. Non mais attends. Du parfum à l'ananas t'en as déjà vu toi ? Oui j'en ai déjà vu. T'as vu jouer ça dans Spirou Magazine ? Non pas dans Spirou Magazine. Non mais dans Tintin Milou. Non non plus non. Non mais dans Hercule. Non plus. Hercule et Pif. Non mais donc voilà tu peux lui offrir une bouteille de parfum accompagnée d'un bouquet de fleurs. Et puis ça... Non le mieux. Moi le mieux à ce que je te propose. Ouais. C'est d'y offrir un bouquet de fleurs. Ouais. Bah oui c'est ce que je viens de dire. Avec une petite carte. Et je mets quoi dans la carte ? Bah attends. Joyeux Noël et puis bonne fête et puis... Bah attends. Tu sais pas ce qu'on met sur une carte de bonne année toi. Broutille. Bah c'est pour ça que j'appelle. Comment ? C'est pour ça que j'appelle. Ah ouais. Non non mais attends. Tu nous demandes pour offrir un cadeau et tu nous demandes comment qu'on écrit une carte. Bah tu me dis de... Prendre un bouquet de fleurs avec une carte. Tu écris. Tu paies une carte. Tu mets Joyeux Noël et bonne année et bonne santé. Voilà. 99. Hein ? Ouais. Accompagné des fleurs et puis du parfum. Ouais d'accord. D'accord ? Je trouve pas que c'est un peu commun comme cadeau Gérard de toujours offrir des fleurs ou du parfum. Ouais c'est classique. Bah tout dépend de ce qu'elle aime. Mais ouais mais de toute manière il nous dit pas ce qu'elle aime. A part les voitures. Mais attends. Est-ce qu'il a l'argent pour acheter une voiture ? 100 balles pour acheter une bagnole. Non mais il peut peut-être déjà acheter une maquette. Non ? Ou un truc. Bah non mais attends. Une maquette. Ouais une maquette. Elle fait collection des voitures. Ouais ouais. Pourquoi pas. Ouais c'est ça. Ou alors moi ce que je te propose c'est que tu achètes une voiture pas trop chère. Tu vois. Une petite voiture miniature. T'achètes aussi une bouteille de parfum pour accompagner la voiture. Et en même temps tu lui offres des fleurs parce que c'est normal. Tu vas pas y aller. Donc voilà ce que je peux te répondre. J'espère qu'on a pu t'aider quand même un petit peu. Ouais un petit peu. Non mais moi... Ouais je pense le mieux. Le mieux c'est que tu y alles avec... Si elle aime le parfum. Le plus grand cadeau que tu peux faire à une personne comme ça. Elle a quel âge ta maman déjà ? Elle a 45 ans. 45 ans. Donc le mieux c'est que tu y achètes une bouteille de parfum. Ouais. Et tu lui offres un bouquet de fleurs. Ouais d'accord mais j'ai un autre problème aussi. C'est que tout est fermé là. Ouais mais attends. Demain c'est ouvert. Demain c'est ouvert. Demain c'est ouvert. D'accord. Y'a des grandes surfaces demain qui sont ouvertes. Le 25 t'es sûr ? Oui oui oui. Jusqu'à midi normalement. Jusqu'à midi ? Ouais. Et si elle se réveille avant ? De quoi ? Et si elle se réveille avant ? Mais alors ? Mais c'est à toi de te réveiller avant midi. Non mais d'accord. Non mais attends. Tu comprends ce qu'on te dit ou pas là ? Non mais crie pas. Non mais attends je crie pas. C'est bon c'est Noël. Pour l'instant on te demande quelque chose. Est-ce que tu seras réveillé avant midi ? Oui ou non ? Ma mère imagine elle se réveille à 8h. Moi et toi tu te réveilles à 9h. Non mais t'inquiète pas. Tu fais comme on t'a dit. T'achètes un bouquet de fleurs. T'achètes ce qu'on t'a dit quoi. Avec la voiture. Si elle aime les voitures. Ou si elle préfère le parfum. T'achètes le parfum quoi. Ça dépend. C'est toi qui vois avec l'argent que t'as. D'accord. Mais vous êtes sûr que demain c'est ouvert ? Bah oui c'est ouvert demain. Mais moi je penserais plus pour acheter du parfum que d'acheter la voiture. Parce que la voiture c'est une voiture de collection. Mais le parfum tu peux le mettre tout le temps. Dans la voiture. Tu vois l'huile de voiture. Et voilà quoi. Bah merci beaucoup. C'est tout ce que je peux te dire moi. Ok bon bah je suis pas avancé. Donc je te souhaite de bonnes fêtes. Et puis bah amuse-toi bien. Bon bah joyeux Noël quand même. D'accord merci. A toi aussi. Salut. Le second c'est quoi ? C'est qui ? Le second c'est Valérie. 35 ans de Paris. Bonjour. Bonsoir. Bonsoir. Je vous souhaite un joyeux Noël Gérard. Bah moi aussi. Je te souhaite un joyeux Noël. Hein Christine ? Oui c'est Christine. Ouais c'est ça. Alors bonne nuit. Au revoir. Au revoir Christine. Au revoir. Au revoir. Mais elle a besoin d'un conseil. Elle a besoin d'un conseil. Ah non Christine ? Oui. Comment vas-tu ? C'est l'ex de Gérard. Ah ? Ça va ? Ça va bien ? Oui. Non mais t'inquiète pas. Gérard c'est Noël. Fais le gentleman. Il pourrait être une meuf. Bon j'étais mauve avec lui quand même. Il soit poli un peu. Non mais t'inquiète pas. Ça va s'arranger. Bah oui. Faut rester cool quoi. Bah oui. Moi c'est vrai que des fois je suis un peu... Dès que je suis là je me dis oh mince. Mais bon. Faut pas crisper quoi. On n'est pas des gamins pour se disputer. Bah ouais c'est vrai. C'est vrai t'as raison. Je suis d'accord avec toi. Bah oui genre. De ça qu'on fait le gamin. On n'est pas des gosses. Faut rester zen quoi. Bah oui. Bravo Sandy. Ouais Sandy. T'as profité de ta vie un peu. Bah alors vas-y Christine. Donc à part ça qu'est-ce que t'as à dire ? Moi bah j'ai dit c'est joyeux Noël et puis c'est tout. Bah c'est gentil ça. Voilà. T'as besoin d'un conseil non ? Vous êtes heureux tous les deux que ça marche très bien pour vous deux. Bah je t'en remercie. Moi je te dis de même que la vie soit belle pour toi et puis que bah si t'as des enfants ou pas je sais pas bah que tu sois heureuse quoi. Je peux pas en avoir. Donc je sais pas t'as pas de conseil à demander ou... Non rien. Bah c'est cool Christine. Non mais c'est gentil d'avoir téléphoné et puis... Bon bah c'est gentil Christine on te souhaite un joyeux Noël. Bon réveillon l'amoureux. Ouais. D'accord merci. Je t'en remercie beaucoup. Ouais je vais faire le réveillon avec Sandy demain. C'est cool. Bon Sandy tu dois avoir une autre fiche là. Tu vas être à Yanis. Ouais attends je vais... Parce que Gérard est parti on sait pas où il est il va certainement revenir. Attends ça c'est... Ah non c'est pas fait ça. Conseil GG Sandy a un problème pour faire la cuisine. Voilà Yanis. Si si. Donc on va accueillir Yanis 18 ans de Limoges. Salut. Allo ? Allo ? Salut Yanis. Salut joyeux Noël. Oui toi aussi. Bon je vais te parler j'ai vraiment des gros problèmes pour faire la cuisine. J'arrive réellement pas. Mes parents sont pas venus ce soir pour Noël. J'en prends marée de médecine alors je travaille. J'essaie de faire la cuisine pour manger un peu. J'ai fait des pâtes et tout a brûlé. C'est tout cramé à l'intérieur. Je sais pas comment il faut faire. Mais comment t'as fait pour faire cuire les pâtes et que ce soit brûlé comme ça ? J'ai pris une casserole. J'ai pris de l'eau. J'ai mis les pâtes dessus et je sais pas j'ai laissé. Une demi-heure et puis après pouf. Une demi-heure t'as mis les pâtes ? Bah ouais faut que ce soit bien chaud. Non non attends attends. Attends attends attends. Déjà les pâtes tu les fais pas cuire une demi-heure. Tu les fais cuire maximum. 10 minutes à 15 heures. 10 minutes. Ça va être froid après. Non non non. Après tu peux les faire réchauffer. Tu vois si t'as un micro-ondes tu peux les faire réchauffer. J'ai pas de micro-ondes. J'ai juste une petite plaque. Et t'as pas un petit four où tu pourrais faire tu vois des plats cuisiniers genre surgelés les trucs comme ça ? Non non j'ai juste une plaque chauffante. J'ai une chambre d'étudiants donc j'ai juste une petite plaque. Et qu'est-ce que t'aimes exactement comme nourriture ? Tu dois avoir une préférence. Je sais pas moi. Si t'aimes je sais pas soit les surgelés soit les boîtes de conserve je sais pas. J'aime bien les raviolis. Ah t'aimes bien les raviolis. Les raviolis c'est pas dur à faire chauffer. Tu prends une casserole et puis bon c'est bon. Comment on fait des raviolis Sandy ou Gérard ? Je sais pas vous pouvez nous dire. Non mais attends. Une boîte. Tu ouvres la boîte. Ouais. Tu la mets dans une casserole. Sans te couper les doigts. Ouais. Sans te couper les doigts. Pas faire comme Sandy. Tu mets la boîte dans la casserole où tu vis. Non non mais pas faire comme Sandy pour un avocat prendre son doigt pour un avocat. On parle des raviolis Gérard. L'avocat c'est pas une boîte de conserve. Donc pour ces raviolis le mieux c'est de faire une chose. C'est couper ta boîte. Non mais attends. C'est des plaques sur pente ? Bah ouais. Ah c'est plaques électriques. Ouais. Alors sur plaques électriques tu les mets à... 10 ? Non ? Non non non pas à 10 parce que c'est trop. À 3 peut-être ? Trop. 3-4 ? 3-4 ? Ouais je pense. Ouais. Et tu fais attention que ça crame pas. Tu surveilles et tu touilles de temps en temps pour voir si ça crame pas dans la casserole. Est-ce qu'il faut mettre de l'eau avec les raviolis dans la casserole ou pas ? Non non parce qu'il y a de la sauce déjà. Il y a de la sauce. Ou du beurre pour pas que ça attache. Si si si. Il faut mettre quoi Gérard ? Attends attends attends. Attends Sandy Gérard c'est mieux que toi. Non non attends attends. Une fois que t'as retiré tes raviolis de la boîte. Ouais. Il te reste un peu de sauce dedans. De quoi ? De la sauce ? Ouais de la sauce. De quoi comme sauce ? De la sauce tomate abrutie ! Bah ouais mais j'en ai pas de sauce tomate moi. Non mais ils sont déjà dans les raviolis. Oh mais c'est pas possible ! Tu comprends ce qu'on veut dire ? Bah ouais bah ouais. Dès que t'as les raviolis on t'ouvre la boîte. Attends Gérard excuse-moi. C'est Max. Il y a des fois les gens ne comprennent pas toujours. Moi je comprends pas tout lui je te le dis. Attends comment que tu fais une omelette toi ? Bah avec des oeufs. Et tu mets quoi dans ta poêle ? Je mets ce qu'il y a dans la coquille c'est-à-dire l'oeuf et la sauce. Le blanc. Et comment que tu les fais cuire tes oeufs ? Bah je fais chauffer. Ouais avec quoi ? Bah avec du gaz. Ouais et tu mets quoi pour que ça chauffe ? Bah il peut mettre des lardons. Bah j'en sais rien du beurre ou du beurre. La crème fraîche. La crème fraîche ? Non la crème fraîche c'est quand tu veux faire des champignons à la crème fraîche. Mais moi des fois je mets un peu d'herbe de Provence avant. Pour bien que ça saisisse l'affaire. N'importe quoi toi. Donc on revient aux raviolis donc Gérard les raviolis. Bon les raviolis. Donc pour en finir avec tes raviolis là. Ouais. Donc tu mets un peu d'eau dans ta boîte. Pas beaucoup. Non dans la casserole. Dans la boîte ? Non dans la boîte pour bien retirer. Ah pour diluer. Ah ok. Pour diluer ce qui reste. Tu mets pas beaucoup. Tu prends une cuillère à boire pour tourner de temps en temps. Tu surveilles. Rigaud oui une question internet. Ouais Gérard il y a Steph sur l'IRC qui te demande si tu l'invites à bouffer demain parce qu'il aime bien tes conseils cuisine. Non. Pourquoi ? Non j'invite personne à bouffer chez moi demain. Pourquoi ? Hein ? Non le 31 ils sont tous invités. Ah ouais ouais j'ai vu l'affiche ouais. Vous êtes tous invités le 31. Le 31 ils sont tous ceux qui vont venir vont être aux flics. Donc ? Nuance. Ouais bah pour les raviolis Gérard. Ouais ouais. Non mais tu ferais une parenthèse d'ailleurs pour en parler tout à l'heure et en montrant. Ouais. Elle est où l'affiche ? L'affiche est là et en plus il faut qu'on parle du courrier parce que t'as reçu du courrier pour Noël en plus. Ah ouais si c'est des conneries ça sert à rien. Non non non. Non c'est des bons cadeaux. Donc ton histoire de raviolis. J'en mets combien ? Un demi litre ? Mais non tu t'en mets un petit peu. Un petit peu. Un verre ? Ouais tu mets un verre dans ta boîte tu secoues et tu remues le restant de la sauce tomate. Ok. Et tu le mets dans ta casserole ? Il y a des raviolis dans la casserole normalement. Oh là là. Ouais. Mais non les raviolis tu les mets dans la casserole donc si tu les mets pas ils peuvent pas y être. Bah ouais. Donc c'est logique. Ok ok ouais. Ouais. Et qu'est-ce que t'aimes d'autre à part les raviolis ? Bah les pâtes j'aime bien mais bon ça cramait tout à l'heure j'en ai plus là. Donc les pâtes bon c'est des spaghettis ? Non non c'est des petites coquillettes là. Bah les coquillettes tu les fais chauffer à je sais pas 5-10 minutes et ce que tu peux faire de l'huile avec du sel. Ah ok. Et tu remues de temps en temps pour pas que ça colle. Ah ok. Et si tu veux me faire des nouilles à la sauce tomate tu mets de la sauce tomate dedans mais après tu les égouttes. Ouais mais la sauce tomate c'est des trucs en briques ou les... Bah ce que tu veux. Oh tu peux avoir ce que tu veux des petites boîtes ou des grandes boîtes ça dépend. Ouais. Enfin voilà Yanis. Ça y est t'es renseigné au moins tu peux faire quelque chose de main de potable. Ok. Comme dirait Gérard ok ? Ok. Bah bonne soirée à toi. Merci. Ouais bonne soirée. Gérard le suivant ? Bonsoir. Allo. Allo. Allo. Y'a quelqu'un ? Ah bah elle est partie. Y'a quelqu'un dans la secoupe ? Bah c'est pas grave c'est pas grave. Bon. Elle est manouillée. Je sais pas. C'est pas grave. C'est pas grave. On va accueillir Thomas 25 ans. Ouais. 25 ans de Nice. Ouais salut à tous. Bonsoir. Bonsoir à toi. Salut Sandy. Salut. Oui salut. Bah bon joyeux Noël quand même. Merci. Ouais j'espère que vous avez passé un bon réveillon. Bah tu vois là on y est. On est en plein dedans. Ok. Bah écoute moi je t'appelle justement c'est un peu à cause de ça parce qu'en fait j'ai bien fait la teuf et j'ai un petit peu trop mangé j'ai un petit peu trop bu et j'ai peur demain d'être un petit peu malade et d'avoir un petit peu la gueule de bois donc on m'a dit que t'étais calé sur le sujet donc j'aurais voulu savoir si t'avais des petits trucs pour éviter si tu veux d'avoir la gueule de bois ou la chiasse. D'accord. Alors ce que je te conseille pour pas avoir pour pas avoir envie de... Pas manger de chocolat d'abord. Est-ce que t'as mangé du chocolat ? Ouais ouais il y avait de la bûche au chocolat en dessert. Non mais ça c'est pas ça qui va te... Attends attends Thomas. Oui oui oui. Pour l'instant le réveillon n'est pas terminé. Ah bah oui mais moi j'étais fini de manger là j'ai déjà mangé de la bûche. Mais qu'est-ce que t'as mangé exactement ? Alors en entrée il y avait des huîtres. Ouais. Après j'ai bouffé de la moule quand même un petit peu. Ouais. Après on a enchaîné foie gras saumon tu vois bien classique. Ouais. Ok. Après un bon petit rôti, fromage et puis la bûche. Bon ça va là c'est pas trop c'est pas un grand repas comme il y en a qui font. Si tu veux moi j'ai un petit estomac quoi. Tout le monde n'a pas la chance d'arriver à digérer des quantités de nourriture faramineuse peut-être comme toi Sandy mais moi... Ah non non moi je te rassure tout de suite je mange pas beaucoup. Tu manges pas beaucoup ? Par rapport à ce que tout le monde peut croire... Menteuse ! Non elle mange pas beaucoup. Menteuse ! Menteuse ! Menteuse ! Menteuse ! Attends attends Thomas. Moi je démens ce qu'elle vient de dire. Ouais c'est vrai c'est dégueulasse ce que t'as dit. Elle a dit qu'elle mange pas beaucoup mais elle arrête pas de manger du chocolat du matin au soir. Donc c'est une menteuse. Non pas en ce moment. Une menteuse ! Elle mange plus de boîte de pales d'affilée. Elle est peut-être enceinte Gérard si elle mange du chocolat non ? Bah oui. Attends ça c'est pour le jeu de la vérité d'accord ? Ah ouais merde. Ok. C'est vrai que si elle est enceinte tout de suite elle mange plus mais moi je suis pas enceinte et je te dis je mange pas beaucoup. Non mais moi de toute manière un conseil que je vais te donner pour pas avoir la gueule de bois si t'as bien bu si t'as bien arrosé le réveillon un conseil que je te donne c'est de boire un café salé. Un café salé ? Non mais ça c'est pour faire vomir ça le café salé. Ah oui mais justement. J'ai pas envie de vomir justement j'ai pas envie d'être malade c'est ça le problème. Et bah alors dans ce cas là tu fais une chose tu bois un café sans sel. Ou sinon si t'es malade. Ah merde. Tu peux faire du vélo aussi si tu veux. Un café sans sel. Non Gégé le problème le problème c'est que là quand je vais aller Un café sans sucre excuse moi. Ok quand je vais aller me coucher avec ma copine déjà premièrement je pue de la gueule et deuxièmement j'ai pas envie de lui dégobiller dessus. Bon alors dans ce cas là tu fais une chose tu bois un café sans sucre et avant de faire l'amour avec ta copine t'essayes de te laver... De te laver les dents quand même. De te laver les dents. Non pas la quéquette attends et oh. Bah si il peut hein. Je me lave pas la quéquette ? Attends si il veut faire la gueule il peut te laver la quéquette hein. Ah bah ouais. Bah attends mais attends. Non mais je suis d'accord avec toi. Mais de toute manière et oh. Ouais. Moi je vais te dire une chose. T'en dis est-ce que tu te laves la quéquette avant l'amour ? Moi d'abord je te rassure j'ai pas de quéquette. Ouais la chounette. Ouais la chounette bah ça dépend hein si j'ai pas envie je la lave pas hein. Ouais ça peut être souvent. Mais t'as vraiment envie non ? Mais ça ça dépend hein moi je prends une douche. Deux fois par jour donc y'a pas de problème. Un jour. Non non pas par mois. Non pas par mois non. J'en connais tout à l'heure qui vont se prendre des baffes. Ouais Manu. Hein Fildar et Manu ? Voilà. Attends attends attends. Juste pour dire qu'il faudra quand même penser à... On plaisante on plaisante mais ça serait bien quand même qu'on fasse un tout petit point sur... Ouais un petit point courrier mais justement on va abréger. On va finir avec Thomas. C'est fini parce que je voyais parler entre vous. Ah non non non. Bah lui il est là. Bah lui il est là. Je pense que pour toi Thomas la solution donc c'est déjà si t'as envie de faire l'amour là maintenant. Ouais. Donc... J'ai peur de vomir pendant l'amour. Surtout y'a un truc que je te conseille si tu me le permets c'est que bon dès que tu veux faire ça avec ta copine surtout tu te protèges. Oui non mais ça y'a pas de problème. Bon bah voilà ça y'est ça y'est ça y'est c'est bon. Le problème c'est le mal de mer. Je vais avoir le mal de mer c'est tout. Ouais non mais attends. Ou sinon tu prends un cachet d'aspirine si ça va pas. C'est bon c'est bon c'est bon. Terminé apparemment il a assez de conseils ou pas ? Bah pas des masses. T'es conseillé ou pas Thomas ? Bah je trouve que c'est léger quand même au niveau du conseil. C'est normal. Je vais lui vomir dessus c'est tout. C'est comme ça que ça va finir. Non mais si t'as envie de vomir tu vas dans les cabinets et puis tu vomis c'est tout. Ouais ouais. Et puis une fois que t'as fini bon bah tu retournes la voir et puis gentiment. Voilà. Sans lui vomir dessus en principe. Attends tu vomis pas sur ta copine attends arrête de dire des bêtises là. Tu lui demandes avant. J'aimerais bien éviter. Ou sinon tu peux prendre des sacs et puis tu vomis dans un sac. Et puis après tu mets ça dans le vide d'ordure. Voilà. Bah même tu prends un préservatif et tu vomis dans le préservatif et puis basta. Mais non attends. C'est cramé ça Gérard. Hop terminé. Bah merci Thomas. Terminé Thomas. Bon bah bonne chance à toi. Merci à toi. Au revoir. Bon alors Gérard. On pourrait. Ouais. On a reçu du courrier donc déjà du. On a reçu du pâté de foie. Non non. Non non non. Ça c'est pas fesse de babouin. Gourmet. Gourmet. Gourmet trois étoiles. Mousseline de soie. De sol. De sol. De sol. Faudra que tu le goûtes quand même avant de partir. Non ça me paraît bizarre ça. Donc apparemment t'es abonné à Atlas. Voilà ça. Tu peux ouvrir. Non mais ouvre. Non non mais attends. Ça c'est. C'est pas grave. L'abonnement c'est 8000 francs par trimestre. Non non mais ça c'est. C'est le mec. Parce que les mecs qui t'ont abonné ils demandent l'argent apparemment à Atlas. Donc moi j'ai dit que c'était pas fun. Ça c'est le mec. C'est le mec qui s'amusait à m'envoyer les trucs de camion et qui me demande. Bah voilà. C'est bien ce que. D'accord. Voilà. C'est quoi t'as des étiquettes de camion là ? Et t'avais une lettre non ? Ouais en fait on a reçu le colis tu vois. C'est rare. C'est Fès de Babouin qui t'a envoyé donc ce colis là. Le beau colis. Et donc en fait c'est pour Noël bien sûr. C'est pour toi. Et en fait dans ce paquet il y a un voyage. Destination au choix. Il y a des millionnaires. Des bancos. Un abonnement au journal France Soir. Un réveil. Un réveil fun radio. Unique. Des tickets à restaurant. Des écouteurs de Wackman. Un CD. Deux livres. Un stylo. Un déodorant. Un protège-dents. On va ouvrir tout ça. Un père Noël. Une carte magnétique. Ton cutter. 14 piles. Un ticket RATP SNCF. Une ampoule. Un calendrier Spirou. Un rouleau de scotch. Quelques brochures sur la Bretagne. Si tu as envie d'aller en Bretagne. Deux autocollants. Un paquet de mouchoirs. Un savon. Et une pomme de terre. Donc voilà. Donc j'espère qu'il y a le compte. Donc Gérard est en train de nous voir en direct. Donc attends. Ça fait beaucoup pour tenir dans une boîte. Non ça tient. Non c'est miniature. Calme Gérard. Alors. On récupère. Alors donc il y a les autocollants. Des autocollants. J'ai effectivement l'ampoule. Voilà. L'ampoule est belle. Ah sympa. Ah c'est sympa ça. Elle est peut-être grillée. Mais bon. Le réveil fun radio. Ah ouais. Tiens. Ah il est classe. Là. Les tickets à restaurant. Les tickets à restaurant. Il ne reste plus beaucoup. Le CD. Le CD. Ah il est beau le réveil. C'était marqué un CD. 50 heures gratuites. De CD-ROM. Super pour internet. C'est pour avoir internet ça. Tu pourras demander à Régo. Là. Le patrimoine religieux de la Bretagne. Donc pour voyager. Ouais. Ça c'est les brochures sur la Bretagne. Non mais attends. C'est pas de la religion. C'est bien. On va pouvoir lire. Voyage. Voyage. C'est des voyages. Voilà. Voyage gratuit. Je m'en fous. Il y a des millionnaires et des bancos aussi Max. T'as un calendrier. Ouais. Non mais attends. Toi. Quoi ? Toi. Attends. Attends. Un savon. Ah ouais. Il y a effectivement des Kleenex. Ouais. Qu'est-ce qu'il y a d'autre ? Regarde dans l'enveloppe. Il y a du scotch. Il y a un rouleau de scotch vide. Ça peut toujours servir. Il y a une enveloppe aussi. Ah ouais. Normalement. Ouais. Du scotch vide. Sauf s'il y en a plus. Ah merde. Là il y a des écouteurs de Wackman. Ouais. Bon. En pièces détachées. Mais ils sont là. Ouais. Non mais c'est bien parce que le réveil. Il n'y a pas les aiguilles. Il n'y a pas d'aiguilles. Et puis à mon ami. Il est naze. C'est l'attention qui compte. Ouais. Il est naze. Attends. Je crois qu'il y a une enveloppe aussi. T'as pas une enveloppe dans la... Ah bah attends. Les Wackman ils sont à moitié cassés. Ça c'est le parfum. C'est le déodorant. Écoutez bien. Écoutez bien. Attendez. Après l'Adidas. Après l'Antarctique. Gérard va se parfumer à quoi à votre avis ? Je sais pas. Au tsar. Tu veux voir ? Ah bah on est dans la merde. Oh non. Tiens je connaissais pas ce parfum. Attendez. Ah non non mais c'est bon. Tout à fait. Non mais non. Il n'y a rien dedans. La bouteille est vide. Non mais c'est pas mal. Non la bouteille est vide. Mais t'as plus qu'à la remplir. Le must du must. Un dentier. Un protège-dents. Un protège-dents. Un protège-dents. N'importe quoi. C'est pas grave. Il y avait une enveloppe. Il y a une enveloppe non ? Pour Gérard c'est pas un protège-dents. C'est un protège-dents. Ouais mais attends. Toi l'enveloppe. Je me demande si tu l'as pas piqué comme t'as l'habitude de me faire. Hein Gérard ? Mais non c'est marqué une enveloppe avec des bancos et des millionnaires. Ouais le protège-dents. Ouais bah ça. Mais ça. Hop. La fausse dent en plus. Ah bah voilà. Ah les bancos et les millionnaires. Ouais mais attends. C'est quoi ? C'est quoi Gérard ? C'est quoi ? Je vois pas. C'est cool non ? C'est quoi ? Des bancos. Des bancos ? Ils ont déjà été grattés. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0. Putain, il y en a plein en plus. T'as gagné ou pas ? Non mais regarde les touches Gérard, ça se trouve il y en a un gagnant dans le tas. Non, non, il n'y a aucun gagnant. Donc ça, ça va à la poubelle. 14 piles normalement. 1, 2, 3, 4, 5. C'est bien ça ! Ah ça c'est gentil. À mon avis elle fonctionne à mort. Ouais c'est ça. Pour écouter Wakeman c'est bien. La pomme de terre. Ah c'est une pierre hindoue. C'est une noix de coco miniature. C'est exotique, c'est beau. Ça c'est une patate. Ça retourne là-dedans. Il y a un stylo aussi normalement. Et t'as aussi une brochure France 3. Non, non, ça c'est un abonnement à France Soir. C'est ça. Non, non, mais il va se faire foutre. Tu dois avoir aussi de la monnaie. Voyage, RATP. C'est ça, c'est ça. Donc poubelle, c'est pas la peine. Regarde, t'arrives réduit. Mais non, non, non. Il y a bien marqué, vous pouvez gagner un abonnement à France Soir. C'est bien ça. Mais attends. Attends, c'est pas du bidon ce courrier. C'est pas bidon. C'est pour moi que... Il doit y avoir un stylo aussi Max, normalement. Et une carte magnétique. Il y a dit... Il y a dit Fning. C'est de la monnaie allemande. Non, mais c'est bien parce que le bouchon, il est où ? C'est pas grave. Regarde s'il écrit. Il s'est peut-être perdu dans la boîte. Il écrit le stylo Gérard. Il y a un stylo. Et il y a de la monnaie allemande. Normalement. Voilà, la carte magnétique. C'est pas du bidon. Avec ça, tu peux passer partout. C'est ça. C'est surtout que tout est retiré. Je sais pas, tu peux essayer dans les distributeurs. Il manque le magnétisme. Mais la carte magnétique est quand même là. Attends. Un petit savon. C'est quoi ça ? À la vendeur shop. Violent, là. Tiens, tiens, tiens. Un petit courrier quand même pour Gérard. Merci. Tu gardes quand même la carte ? Coubelle. Alors attention, qu'est-ce qu'il se dit ? Je suis un grand fan de tes débats. Première, la façon que tu les mènes. Je les trouve très intéressants. Surtout quand ils sont collants à l'actualité. Comme aujourd'hui avec Miss France. J'aimerais avoir ta photo de toi. De tes préférés dédicacés. C'est sympa ça. C'est quoi ? C'est très sympa. Termine. Laisse-moi. T'aimer ? Ainsi. Que toi et Sandy, en espérant une réponse... Attends, attends, attends. T'as peut-être oublié des mots. Je suis un grand fan de tes débats. Et j'admire la façon... La façon que tu les mènes. Dont tu les mènes. Je les trouve très intéressants. Surtout quand ils collent à l'actualité. Comme aujourd'hui avec Miss France. Ouais, d'accord. J'aurais aimé avoir des photos de toi. De préférence dédicacés. Ainsi que de toi avec Sandy. C'est normal. En espérant une réponse positive. Positive, ouais. Il a oublié le F. Demande ton micro. Je te souhaite de joyeuses fêtes. Demande ton micro. C'est bon ? Ouais, c'est bon. T'inquiète pas. Il a oublié le F à positive. Sans fil d'art. Ah, je suis désolée fil d'art. Ah oui, t'es là. Excuse-moi. Merci. Hermine. Donc voilà. Hermine, bah... C'était bien ce que t'avais mis, mais t'avais oublié quelques mots. C'est la nageuse, la Muriel Hermine. Ouais, Muriel Hermine. C'est ça. C'est Hermine Robin. Ah oui, oui. Tu peux mettre ça. Tu peux mettre tout ça. Même, tiens. Quoi encore ? Le parfum, il en reste. Ouais, garde-le, le parfum. On sait jamais pour demain. Pour le réveillon, là. Puis ça, bah ça, on goûtera pour voir si... Ouais, on goûtera si c'est... On essaiera de tester. On essaiera de savoir si c'est pas des trucs pour chien. Non, non, non. Attends, c'est pas pour chien, ça. Non, non, c'est pas pour chien, ça. C'est ce qu'on a mangé dans le bureau tout à l'heure. Ouais, c'est la même boîte. Attends, j'arrive pas à lire ce qu'il y a marqué. C'est du Trois Étoiles, ça. Non, mais cherche pas à comprendre. Non, mais c'est écrit trop petit. C'est rien, c'est gourmet. Ouais, cherche pas à comprendre. Attends, toi, tu as commencé par... Attends, attends, dis tout de suite qu'elle est conne. Ah non, pas du tout. Non, non, non. Non, mais attends, dis qu'elle est conne, ça vaudra mieux, d'accord ? Non, c'est pas vrai. Ah non ? Attends, il y a marqué chat adulte. Ah, chat adulte, alors poubelle. Mais attends, j'ai pas commencé encore. Attends, je suis pas un chien. Je suis pas un chat. Servir à température ambiante. Mais non, mais ça, c'est de la nourriture pour des gens qui ont des chats. C'est ça. Pourquoi tu moques ça ? Parce qu'ils croient que je suis un chat. Mais non, peut-être que t'as un chat. Peut-être que t'as des animaux. Ah, il y a du poisson quand même dedans. C'est bon pour la mémoire. Hop, poubelle. Attends, j'aurais quand même pu goûter. Bah ouais, merde, elle aurait pu goûter, Gérard. Attends, toi, tu vas me goûter ça, toi ? Qu'est-ce qu'on va accueillir ? C'est Noël ? Qu'est-ce qu'on accueille ? Bonsoir, Olivier et monsieur Prodigy de La Loco. Ouais, bonsoir. Qu'est-ce qu'on fait, Gérard ? On fait un conseil, là, ou pas ? Non, bah, on va s'écouter un petit disque si tu me donnes le titre. C'est chasse. On parlera du courrier d'affiche. Ouais. Mais en dernier... Non. Pourquoi ? On parlera pas du courrier d'affiche. Non, non, non. Non, tout bas, tout bas. C'est chasse. Chasse. C'est quoi ? Chasse. Encore une fois, tu sais, là. Encore une fois ? Ouais. Alors, vas-y. C'est parti. Et on se retrouve tout à l'heure pour la suite des conseils. Et même... Même, vous pouvez appeler maintenant. On va arrêter les conseils et on va prendre le jeu de la vérité. Donc, vous pouvez nous appeler au 0803 08 5000 et 0803 70 5000 et toujours lire. C'est W2E.fr Fun Radio. A tout de suite. Et voilà, c'était Sass dans Inertis. Donc, vous pouvez toujours nous appeler au 0803 08 5000 et 0870 5000. Manu, vous attend au standard. Il est 0h35. Bon avion à tous ceux qui sont en pleine fête. En pleine bourre, ouais. En pleine bourre. Donc, ceux qui sont sur la route comme des chauffeurs de taxi, on va quand même les saluer. Ils sont à la bourre aussi, non ? Non, non, mais on va les saluer parce que grâce à eux... Tu peux me rendre le carton pour le CD, c'est mieux. Ça le protège. Merci. Voilà. Donc, on salue tous les chauffeurs de taxi. S'il y en a qui veulent passer, nous dire un petit coucou, ils seront les bienvenus. Donc, il y a toujours Rigo qui vous attend sur l'Internet. W2E.fr Fun Radio. On est combien, Rigo, s'il te plaît ? Ça n'arrête pas de monter. On est 4347. Et tout à l'heure, j'ai écouté... Combien on était tout à l'heure ? 90 ! Mais comment c'est possible, Rigo, ça ? D'ailleurs, vous étiez 90 et là, maintenant, on est à 4300. Les fans de Gérard. Ça, c'est normal. Ça ne se calcule pas, ça. Alors... Plus de 6000. Ah ouais, mais ce soir, comme c'est Noël, et comme c'est la dernière ce soir pour des débats de l'année 98, donc je voudrais qu'on aille jusqu'à 6500 personnes sur l'Internet. Rien que pour mettre les boules au chef. Comme ça, son patron, son boss, il va lui dire Oh, mais qu'est-ce qu'il fait ? Il ne nous fait rien sur l'Internet. 90 personnes tout à l'heure. J'ai écouté, j'étais là-haut. 90 ! Bon, attends, toi, t'es naze, tu peux te taire, toi. Oui, il est naze. Mais attends, toi aussi, t'es naze. Toi, tu ne bosses pas avant 11h30. Donc, qu'est-ce qu'on fait, là, Gérard ? Le jeu de la vérité ? Alors, on va faire le jeu de la vérité, mais j'aurais bien voulu que Sandy, maille de truffion. Elle se vide. Bon, eh, eh, eh, eh, eh, eh, Fildar, vas-y, mets-moi la grosse. Allez, bouge de là. Tu veux que je la mette ? Allez, allez, allez. Je n'ai pas trop envie ce soir de la mettre. Ah si, allez, allez. Non, je n'ai pas trop envie de la mettre la grosse ce soir. Mais si, allez. On va la faire revenir plus vite qu'elle est sortie. Eh toi, la grosse, débouche, espèce de fainéante. Tu ne vois pas que les autres s'amusent là. Allez, débouche. Allez, débouche. Viens avec nous. C'est ça la fête ! C'est ça la fête ! C'est ça la fête ! C'est ça la fête ! C'est ça la fête ! C'est fini la fête. Donc Gérard, on accueille le premier auditeur. On accueille Sylvain, 23 ans, de Calais. Oui, bonsoir, bonsoir. Bonsoir. Salut, bonne Pâques à tous. J'espère que t'as trouvé beaucoup d'œufs en chocolat dans le jardin, Gégé. C'est ça. Attends, bonne Pâques. Je vais te dire une chose, qu'on n'est qu'à Noël. Alors, je serais classe, tu vois. Je dirais joyeux Noël, bonne année et joyeuses Pâques. Attends, Sylvain, t'appelles d'où aussi ? Il appelle de Calais. Tout à fait, c'est une petite ville de la Guadeloupe. Et il fête Pâques. Ah ouais, c'est ça. Calais à la Guadeloupe ? Oui, tout à fait, tout à fait. Non mais attends, tu prendrais pas les gens pour des cons, toi ? C'est pas plutôt au nord de la France, plutôt ? Non, non, non. Si, si, si. Pas du tout, c'est New Calais comme New York. Ouais, c'est ça. C'est un peu pareil. C'est ça. Alors vas-y, ta question. Alors, le jeu de la vérité, on va monter le niveau d'un cran. Ouais, vas-y. C'est une question un peu personnelle qui vous concerne tous les deux, donc c'est bien que Sandi soit revenu. Ouais, vas-y. Vous avez beaucoup parlé à la fin de l'année dernière que vous alliez vous marier. Pourquoi vous étiez pas marié ? Et j'ai demandé un petit peu autour de moi, on m'a fourni quelques réponses. Alors il y en a qui disent que c'est parce que le maire de Surin ne voulait pas. Ouais. Et il y en a d'autres qui disent que c'est parce que Sandi, elle est bohémienne et donc il faudrait que tu te convertisses à la religion des manouches. Eh ben alors, dans ces cas-là, tu sais... Ah non, non, pas du tout. Non, non, attends, attends, Sandi. Non, attends, Gérard, je vais te rappeler le principe du jeu de la vérité. Non, non, attends. C'est pas dans ces cas-là que tu dégages le standard. C'est Joker. Ah mais t'en as pas... Joker. Non, non. Déjà, tu poses la question à qui ? A moi ou à Gérard ? A vous deux. à Gégé parce que c'est quand même l'homme, donc c'est lui qui porte la jupe, donc c'est quand même à lui de répondre. Non, c'est moi qui porte la jupe. Dans ce cas-là, Joker. Joker, hop, terminé. Et bien voilà. Il n'y a pas besoin de Joker. Gérard, Sandy peut répondre. Moi, je peux répondre. Vas-y, Sandy. Donc, si on ne s'est pas marié, c'est tout simplement, ce n'est pas parce qu'on ne veut pas, c'est tout simplement parce qu'on manque d'argent. Et comme on manque d'argent, Gégé travaille, d'accord. Mais tu n'es pas bohémienne. Non, je ne suis pas bohémienne. Tu es quoi ? Je suis d'origine anglaise. Non, non, non. Si, si, si, je suis d'origine anglaise. T'es sûr que t'es pas gitane ? Non, non, je suis pas gitane. D'abord, je me sens pas une gitane. T'es manouche, toi, t'es manouche, direct. Bon, allez, terminez pour toi. Gérard, qu'est-ce que tu disais ? Au revoir, au revoir, au revoir. Au revoir pour lui, terminé. Mais attends, j'ai même pas répondu. Elle a le droit de répondre, Gérard. C'est le jeu de la vérité. Non, non, mais attends. Moi, je vais te dire une chose. Pour l'instant, mon beau-père est emmerdé. Soyez emmerdé, vu ce qu'elle vient de dire. Le jeu de la vérité, c'est le jeu de la vérité. Ça n'a rien à voir avec mon père. Pour l'instant, j'ai dit qu'on ne pouvait pas se marier. Et elle a dit qu'elle était d'origine anglaise. Et j'ai dit que j'étais pas bohémienne non plus. C'est le jeu de la vérité, elle a répondu. Ça ne sert à rien de t'énerver. C'est toi qui as pris ton joker, donc ça te fait un point en moins. Voilà, t'es tout naze. Ça te fait un point en moins, c'est tout. Horror, 21 ans de maniaque. Allô ? Oui, bonsoir. Question pour vous deux. Je voulais savoir quel est le plus beau cadeau qu'on vous ait jamais fait. Alors, le plus beau cadeau qu'on nous a jamais offert, tu veux dire ? Ouais. Tu dis la vérité, Gérard. Donc, c'est une voiture. Une voiture ? Ouais. Qui c'est qui t'a offert une voiture ? Bah non, personne. Non, moi, ce que j'aimerais plutôt que quelque chose qu'on m'a jamais offert, c'est un voyage. Non, mais attendez, vous n'avez pas compris la question. La question d'Horror, c'est quel est le cadeau qu'on vous a... Enfin, quel est le plus beau cadeau qu'on vous a jamais fait ? C'est-à-dire, quel est le plus beau cadeau qu'on vous a fait ? Tu vois ? Quel est le plus beau cadeau que vous avez eu ? Voilà. Ah, le plus beau cadeau qu'on a eu ? Voilà. Ouais. Moi, le cadeau que j'ai eu, le plus, c'est un ordinateur. Ouais ? Un ordinateur ? Ouais. Parce que c'est mon père qui me l'avait offert, parce qu'il m'avait dit, bon bah, écoute, si tu réussis ton CAP, je t'offre un ordinateur. À l'heure d'immidi, là. L'heure d'immidi, pour apprendre les couleurs. Et comme j'aime bien l'ordinateur, donc... Et pourquoi pas un vélo d'appartement, quand tu pensais à moi, avant que tu me connaisses ? Non, mais attends, un vélo d'appartement, c'est pour ceux qui vont mourir. Attends, attends, attends, attends, attends. Attends, tu permets ? Quand je t'ai vu la première fois, tu m'as dit que tu pensais à moi avec ton vélo d'appartement. Non, non, non. C'est, c'est, c'est, c'est, c'est. Vas-y, vas-y. Sandy, il y a Olio sur l'IRC qui te demande si t'es branché sur Internet, parce qu'il a trouvé un site www.vientbrouterlecute sandy. Ah, non, non, pas du tout, je connais pas. C'est pas toi ? Moi, je l'ai vu aussi. Je suis pas branchée à Internet, et là... Ouais, tu veux même, toi ? Pour ? Pour... Pour te les gratter ? Non, ça va. Donc, Gérard, le plus beau cadeau qu'on t'ait jamais fait, c'est quoi, toi ? Moi, le plus beau cadeau qu'on m'a jamais fait, ben, c'est de m'offrir une voiture. Putain, mais t'as pas compris la question. Quel est le plus beau cadeau qu'on t'a fait, alors ? Non. Qu'on t'ait jamais fait. Non, qu'on t'ait jamais fait. Pas qu'on t'a, qu'on t'ait jamais fait, c'est-à-dire être. Donc, tu l'as, le cadeau, tu l'as. Ben... Ça peut être tout ce que tu veux. Ben, de toute manière, le plus beau, le plus beau cadeau que j'attendais, c'était de faire une émission de radio. Et là, maintenant, je l'ai. Ah, ouais, c'est un beau cadeau, ça. C'est ça, ouais. Grâce à... Grâce à... Grâce à... Grâce à Manu, je sais. Max. Max, le meilleur. Max. Max, mon chef. Grâce à lui, c'est grâce à lui si je fais de la radio. Parce que sinon, j'en aurais jamais fait. Et je rêvais toujours d'en faire. C'est pas... Attends. Vas-y, gratte-toi. Tu veux que je te gratte aussi, moi ? Tu faisais de la Cibi, quand même. Ouais, ouais. C'est un peu de la radio, la Cibi. C'est pas pareil. Moi, par contre, ce que j'ai à dire, c'est que, bon, c'est vrai que je rêvais jamais de faire de la radio. Mais, enfin, en faisant de la radio, je prends plaisir à en faire. Et plus j'en fais, plus j'ai envie de continuer. Ouais, mais grâce à qui ? Grâce à Max. Le meilleur de... Il est là. Tu dis que la Cibi, c'est pas pareil que la radio. C'est quoi, vraiment, la différence ? Parce qu'on fera un débat sur les routiers. C'est quoi, la vraie différence entre la radio et la Cibi ? Ben... En fin de compte, si tu veux, la Cibi, c'est pas du tout pareil. Parce que sur la Cibi, t'as un QRZ. Comme il y en a un qui m'a piqué mon QRZ. La radio, c'est différent. Parce que t'as Manu et Fildar, qui sont au standard, qui prennent des gens. Tu discutes avec les gens. Même sur la Cibi, tu peux discuter avec eux. Mais tu peux pas être avec Fildar et Manu, au standard. Moi, je peux faire son standard Cibi, si tu veux. Non, mais c'est pas pareil, la Cibi et le standard. Et tu peux pas avoir un QRZ en radio ? Non. Pourquoi ? Non, c'est pas possible. Et pourquoi ? Non, mais c'est pas possible. C'est différent. Pourtant, les gens pensent que c'est la même chose. Non, non. C'est quoi, la grande différence entre les deux ? La grande différence, c'est qu'il faut se dire une chose dans sa tête. C'est qu'à la Cibi, t'as un mic, t'appuies dessus. Tandis que là, t'es devant un micro, tu peux l'éteindre. C'est plutôt un kintosh, ici. Tu peux l'éteindre comme tu veux, ton micro. En Cibi, t'as des mics, et en radio, t'as des kintosh. T'appuies sur le bouton, là. Hop. Voilà. Et tu laisses tout le monde. Je peux te demander un truc ? Chaque animateur radio a un QRZ ? Parce que, regarde, Max, c'est pas son vrai prénom. Donc Max, c'est son QRZ. Mais on le sait. Mais pourquoi, moi, on me dit GG ? Moi, j'aurais bien voulu trouver un autre nom pour passer à la radio. Un QRZ, c'est un prénom qui passe bien en radio. Gérard, ça passe en radio. Gérard, sur Fun Radio, ça fait pas pareil que Franck sur Fun Radio. Ouais, mais ça... C'est pas de ta faute si t'as un prénom. Dévoile pas trop ton identité, toi. Ta cutie. Dévoile pas trop ta cutie. C'est pour ça que j'éteins la lumière du studio, pour pas qu'on regarde de mon visage. Voilà. Bien vu, Max. Et donc, c'est bon, Aurore ? Ouais. Ouais, donc c'était ça, ton plus beau cadeau ? Voilà. Ouais, ok. Alors... Donc voilà, j'espère qu'on a répondu à tes questions. Et puis, on te souhaite de bonnes fêtes, de la part de moi et Gérard. Ouais, ben moi aussi. Et puis, un joyeux nouvel an, quoi. Ben, passe une bonne année. Pense pas trop sur l'alcool, quand même. Passe une bonne fête de fin d'année 98. Ouais, ben toi aussi. Ben, on va essayer. On va essayer, c'est pas évident. Ciao, Aurore. Ouais, allez. Allez, à bientôt. Allez, salut. David, 19 ans, de Nantes. Oui, bonsoir. Bonsoir. Bonjour, Sandy. Bonsoir. Alors, ma question, c'est... Je voudrais savoir, en fait, quel a été ton plus beau souvenir de routier, Gérard ? Alors, mon plus beau souvenir de routier, ben... C'est de faire de la route. C'est-à-dire ? C'est-à-dire, ben... Là, tu vois... C'est bête, parce que j'aurais préféré qu'on te garde pour ce débat. Ah, mais t'as jamais eu, je veux dire, de problème ? Jamais ? Non. T'as toujours bien vaché ? Jamais de dérapage, ni rien ? Ah, ben, si. Ça va faire 4 ans que j'ai eu ça, hein. Ah, d'accord. OK. OK. Et c'est tout ? Ben, oui. Et sinon, j'ai entendu Sandy qui parlait d'un voyage, tout à l'heure. Eh ben, moi, je suis prêt à lui offrir un voyage au fin fond de mon lit. Qu'est-ce que ça l'attend ? Attends, Gérard, Gérard. La question, ça ne reste à Sandy, pas à Gérard. Mais c'est un voyage, pour combien de temps ? Ben, ça ne reste pas dur, avant longtemps, je te le dis direct. Tiens, à mon avis, l'auditeur, il fait ça rapide. Pour une journée, ou pour deux jours, ou pour une semaine ? Ah, non, non, non. C'est un précoce, l'auditeur. 5 minutes, 5 minutes, 5 minutes. Oh, ben, 5 minutes, ça ne m'intéresse pas. Non. Rigo, on est combien sur l'Internet, s'il te plaît, avant qu'on accueille Bertrand ? On est 4367,4, ce qui n'est pas mal. Ça monte, ça monte, ça monte. Allez-y, je veux 6000 personnes avant la fin. Et même Sandy vous dit, allez-y, foncez, allez sur l'Internet. Faites comme le Téléthon, donnez vos dons, donnez vos dons. Soyez généreux. Voilà. On accueille Bertrand. On peut peut-être déjà dire au revoir, quand même, à l'auditeur qui était avec nous. David, on te souhaite de bonnes fêtes de fin d'année. A toi aussi. A la prochaine, ciao. Salut. Alors, Bertrand, 25 ans de Lyon. Oui, bonsoir, bonsoir à tous, bonsoir l'équipe. Salut Gégé, salut Sandy. Bonsoir. Salut. Avant toute chose, je voulais vous souhaiter une bonne Saint-Valentin. Merci. Non, ce n'est pas la Saint-Valentin. Non, mais à l'Avance. À l'Avance, oui, c'est bientôt. Qui vous a rappelé. À l'Avance. Moi, en échange, je te souhaite de bonnes fêtes de fin d'année. C'est gentil, je te remercie. Moi, je voulais vous poser une question qui concerne votre avenir. Je voulais savoir si vous aviez l'intention d'avoir une grande famille et donc d'avoir des enfants très prochainement dans l'avenir futur. Non, attends, je ne veux pas prendre le choker. Ah ben non. Je voulais juste savoir si vous allez avoir des miens. Qu'est-ce qu'il se passe ? Non, il y a eu un problème avec Manu. Non, non, non, ce n'est pas Manu, c'est toi. Ah, pardon. Non, non, ce n'est pas Fildar. Donc la question, Sandy. Sandy, la réponse. C'était quoi déjà ta question ? C'est pour quand les gamins ? Voilà, les miens. Une grande famille. Les tiens ? Non, les tiens. Non, les vôtres. Ah, les nôtres. Les nôtres. Oui, ben, les enfants, tu vois, ça se fait à deux. Ouais. Donc, je pense que l'enfant, il viendra quand il viendra. Pour l'instant, on essaye le tout pour le tout, mais bon. Vous essayez en ce moment d'avoir un enfant ? Ouais. Non, mais ça, ça ne te regarde pas, toi. Non, mais c'est le jeu de la vérité, Gérard. Je te pose une question. En fait, il faut dire la vérité dans le jeu de la vérité. C'est normal. Moi, je vais te dire une chose. J'essaye le tout pour le tout. Ça ne vient pas. Ça ne vient pas, c'est tout. Et vous faites comment ? Vous faites comment pour essayer ? Qu'est-ce que tu appelles le tout pour le tout ? Moi, je reste zen. Je fais, tu vois, je reste cool. Bon, ben, si ça vient, ça vient. Si ça ne vient pas, ben, tant pis. Tu as une érection, Gérard, quand même ? Ça demande ou pas ? C'est vrai que cette question s'adresse à toi. Non, mais moi, je pose Joker. Ben, tu n'en as plus. Tu l'as déjà posé. Non, il y a un Joker. Il n'y a pas trois Jokers. Non, il y en a trois Jokers. Ah, tu n'as pas d'érection en ce moment, mais c'est normal. Tu as laissé tous tes Jokers, déjà ? C'est pas de ta faute. Gérard, est-ce que Sandy ? Ben, non, moi, je pense qu'un enfant, ben, ça vient quand ça vient. C'est pas... Mais, ouais, moi, ce que je voulais savoir, si vous faites une portée, vous pouvez m'en garder un, petit chihuahua ? Ouais, c'est ça, Tony. Non, c'est pas Tony, Gérard. C'est pas la voix de Tony. Il ne faut pas confondre avec les chiens et puis les personnes humaines. Mais le vétérinaire, il en pense quoi ? Ça peut marcher, un cachalot avec un sanglier ? Ça va le faire ? Qu'est-ce que tu entends parler par cachalot et je ne sais pas quoi ? Baleine et puis, ben, ouais, sanglier, quoi, c'est clair. Non, mais là, on ne parle pas des animaux. On parle juste de nous deux. Moi et Gérard, on n'est pas des animaux. On est des personnes humaines, tu vois, comme toi et moi. Moi, je pense qu'un enfant, ça vient quand ça vient, c'est tout. Maintenant, les animaux, ils font ce qu'ils veulent. S'ils ont envie d'avoir des petits, ben, ils font ce qu'ils veulent. Moi, ce que je dis, c'est qu'il faut peut-être chercher les causes de pourquoi le gamin, il n'a pas envie de venir. Est-ce que c'est une question d'hygiène ? Cette non-envie de venir de la part du gamin ? Mais non, non, non, attends, attends, attends, Bertrand. Moi, je vais te dire une chose. Ça dépend de l'homme et la femme, d'accord ? Vous avez de quoi l'accueillir ? Ben oui, oui, oui, t'inquiète pas, t'inquiète pas. T'inquiète pas, il y a ce qu'il faut. Là-dedans, j'ai tout ce qu'il faut. Donc, si j'ai besoin de quelque chose, j'ai une roue de secours. Gérard, sur l'IRC, la plupart des gens comprennent parfaitement pourquoi l'enfant, il ne veut pas venir. Donc, s'il y en a qui... qui pouvaient préciser sur l'IRC... Leur nom ? Non, mais qui nous disent à peu près ce qu'ils en pensent, eux. Ben, il y a le gérard masqué qui dit que t'as des couilles au cul, mais je vois pas le rapport. Non, mais ça, ça n'a rien à voir. Ça aide pas pour la reproduction. Comment ? Je dis que ça aide pas pour la reproduction d'avoir des couilles au cul. Non, mais tu sais, il y a bien des singes en voie de... De disparition. De disparition, donc ça fait comme des enfants. Ouais, c'est clair. Ouais, parce qu'il y a des enfants qui sont... Ouais, ben écoute, merci du conseil. Ben, de rien. En conclusion, je voulais dire, vive l'avortement. Ben, ouais, ben... Moi, je vais te dire une chose. Là, je suis contre. Alors là, je vais te dire une chose. C'est terminé pour toi. Au revoir. Allez, salut. Non, non, attends. Pourquoi t'es contre, Gérard, l'avortement ? C'est le jeu de la vérité. Tu réponds, laisse-le parler. C'est vrai que moi aussi, je suis contre. Pourquoi vous êtes contre ? Moi, je suis pas d'accord parce que si tu veux un enfant, dans ce cas-là, c'est la personne qui le veut. On s'amuse pas à se faire avorter. Mais c'est pas qu'une personne qu'ils veulent. C'est les deux personnes. C'est les deux personnes. C'est le couple. Ils sont à deux pour le faire. Donc, si on se fait avorter dans ces cas-là, moi, je suis pas d'accord. On tue un être humain. Donc, il est hors de question qu'on tue un être humain là-dessus. Voilà, on prend ses précautions avant. Il faut se protéger. Il y a des moyens pour se protéger. Il y a le préservatif et la pilule. Donc, c'est pour ça que je vais pas m'éterniser là-dessus. Voilà. Donc, Fildar, on s'écoute. T'as sur l'IRC qui dit que si vous y arrivez pas, c'est qu'il y a incompatibilité gégétique. Ça, ça dépend parce que ça peut être très bien aussi... Ça peut provenir aussi bien de moi que de Sandy. Ah, OK. Mais moi, de toute façon, je suis bien placée sur la question parce que comme j'ai déjà eu un enfant, donc je sais ce que c'est. Et moi, je sais que je peux en avoir. Donc, voilà. Donc, on s'écoute. On s'écoute le TGV avec Va plus vite, il faut que j'arrive à l'heure. Et on se retrouve tout de suite après pour le dernier... Le dernier... Auditeur. Le dernier auditeur pour le droit de réponse. Vous pouvez nous appeler au 0800 308 5000 0800 75 000 et toujours l'IRC www.rfr.radio pour les débats qui vont porter sur les routiers. Après... À tout de suite ! Et joyeux Noël à tous ! Et voilà, vous venez d'écouter... Le TGV va plus vite parce que je risque d'arriver en retard. Voilà. Donc, vous êtes au 0800 308 5000 et 0800 75 000 et toujours Manu qui vous attend en standard. Donc, W... Et puis, Rigaud qui vous attend sur l'Internet www.fr.radio. Tout à fait. Et on est combien, Rigaud, s'il te plaît, là, maintenant ? On est à peu près comme tout à l'heure. On est 4424,8. Oh, non, mais attends ! Il est minuit. Il est 0h56. Ils sont encore à table, là. Faut les laisser le temps. Bah ouais, mais... J'ouvre une parenthèse simplement pour dire, puisque tu salues les gens de l'Internet, pour saluer les gens qui viennent nous voir. Bah oui, mais je sais... Qui viennent de partout. Il y a un routier qui est passé à l'instant. Bah oui, je l'ai vu. Et il y a encore des gens qui viennent devant la radio pour visiter les locaux. Il y a pas mal de personnes qui viennent. Et là, vous n'allez pas... Le macro qui est venu, là, spécialement, ils vont aller aux putes, mais ils sont venus de dire bonsoir. Il est de Cannes. C'est un mec, un ancien dealer. Deux auditrices. Oh, la vache, elle lui fait la bise. Oh, la vache, t'as pas peur. Sandy. La belle Sandy. Il y a le bulldog mystère, là-bas. Le top modèle. Je t'en prie, Gérard. Bah, attends... À la tienne. Salut. Je t'en prie. Oh, bah quoi ? Ah, trop fort. Et alors ? Encore, vous avez pas vu. Moi, je suis là. Oh, la vache. Mais attends, c'est ce que je veux. T'es à moi, maintenant. Ouais, mais tu me fais mal aussi. Tu tapes trop fort. Pas trop fort. Il y a une personne. Heureusement qu'elle est là. Elle est forte. Il y a une personne qui va... Bah, j'ai la pêche. Ah, la patate, hein. Voilà. Sans déconner. J'aimerais bien avoir la banane, aussi. T'as pas la banane ? C'est une patate. Non, non, j'ai pas la banane. C'est toi qui as la banane. Ah, la banane du curé. Merde. Elle est où ? Tu sais où ? Entre mes jambes ? Bah, voilà. Elle est trouvée. On y va, on y va. Allez. Il y a une personne qui va vous parler. C'est un de tes copains qui est venu ce soir ? Ouais, mais ça, tu sais très bien qui c'est. C'est qui ? C'est le seul. C'est le seul qui a voulu venir pour fêter Noël avec nous. C'est le seul. Parmi tous les auditeurs. L'invité mystère, vas-y. Bonsoir. Ah. Et là, tout le monde l'a reconnu, bien sûr, c'est... Bonsoir. Alain Le Beig. Voilà. Bienvenue, Alain. C'est le seul. C'est le seul qui est venu parmi tous les habituels. C'est le seul qui pouvait, donc. Voilà. C'est tout ce qu'on pouvait dire, quoi. Vas-y, Alain. N'aie pas peur. Arrête, arrête. Bonsoir. Donc, on va accueillir... Le dernier. C'est qui ? Alain. Alain, tu restes zen. Ouais, ouais, il reste zen, Alain. Bon, ouais. Tranquille, hein. Ouais, tranquille. Tranquille. Tranquille, hein. Enfin, ça me fait plaisir que tu sois y venu. Ça fait plaisir à Max. Et que tu sois resté, surtout. On est que les trois à être là. Bah oui, mais... Hé, hé, Gégé. Mais non, mais non, mais Max, c'est pas pareil. Lui, c'est le chef. Mais non, mais lui, c'est le chef. Parmi tous ces habituels. Gérard. On est que les trois. Gérard. Oui. Tu dis qu'on est tous les trois, d'accord, mais il y a quand même Max, il y a quand même Manu, il y a quand même tout le monde. Mais non, mais... Et il y a tous ceux qui sont derrière le poste de radio, aussi. Ouais, mais il y a tous ceux qui nous écoutent, il y a tous ceux qui viennent nous faire un petit coucou. Ça, on les remercie. Oui, on vous remercie, là. Donc... Du fond du cœur. Donc, venez. Venez encore nombreux, si vous voulez, jusqu'à 4h du matin, de toute manière. On va tenir jusqu'à 4h. Surtout sur Internet. Et l'Internet, Rigo, s'il te plaît. Oui, c'est moi. Ouais, donc, combien ? Pour bouger ? Si, si, ça n'arrête pas de monter. Là, on est à 4524 moins 2. Ça va, ça booste. Bon, bah, ça va. Donc, Rigo... Oui, c'est moi. Non, c'est Manu. Non, non, excuse-moi. Manu, c'est qui ? C'est Audrey, tu l'as devant toi. Audrey. Bonsoir. Audrey, 19 ans de New York. Bonsoir, Audrey. Bonsoir, Gérard. Bonsoir, Sandy. Bonsoir, Alain. Bonsoir. Bonsoir. Alors, moi, c'est une question. Je voulais savoir si vous étiez déjà fait cocu. C'est-à-dire si Gérard avait fait cocu Sandy et Sandy avait fait cocu Gérard. C'est une très bonne question. C'est ce que j'allais dire. Bah, écoute, moi, non. Je pense pas que, tu vois, quand tu es dans un couple, ça se fait pas... Si t'es avec quelqu'un, c'est pas normal si tu vas voir ailleurs ou alors si t'aimes pas vraiment la personne. Ouais, mais ça peut arriver des fois comme ça. Oui, c'est vrai que ça peut arriver. Tu peux flasher pour quelqu'un, mais pas forcément pour aller coucher tout de suite avec elle. Oh bah, pourquoi pas ? Sauf si la personne n'est pas visible. Non, je te demande. Moi, je vais te dire une chose, tu vois. Je suis fidèle à Sandy. Ça va faire un an qu'on est ensemble. Eh ouais, déjà. Ça va faire un an que je la supporte. Eh moi, je te supporte aussi. Gérard, est-ce que t'as déjà trompé Sandy avec elle ? Non. Jamais ? Non. Et moi, jamais non plus. J'irai pas voir ailleurs. J'irai pas voir ailleurs parce que je l'aime de trop. Même pas si t'as un super canon. Non, non, non. Gérard, il y a Anonyme sur l'IRC qui dit que tu mens. Non, c'est faux. Elle se rappelle de toi. Qui ? Je la connais pas. Anonyme. Je la connais pas. Elle veut pas dire son nom. Elle veut pas dire son nom, elle est Anonyme. Moi, je te connais pas, Anonyme, sur l'IRC. Donc, voilà. Donc, Anonyme, si tu pouvais préciser, comme ça, je pourrais avoir des renseignements, quoi. Ok. Non, parce que Gérard, moi, je me rappelle tous les deux... De quoi, de quoi, de quoi, de quoi, de quoi ? Bah, toi et moi. Ah bon ? Quand ? Quand, quand, quand, quand ? Bah, c'était le mois dernier. Ah, le mois dernier, ça m'étonnerait parce que j'étais encore avec Sandy. Ah bah, ça n'empêche, hein. Non, non, non, non, non. Là, tu dis des mensonges. Tu peux préciser le jour... Précise, précise, précise. Précise. Je précise, je précise. Précise le jour, la date et l'heure. Et où, comment ? Le jour, la date et l'heure, bah, c'était le 27. Il était... Le 27 de quel mois ? Bah, du mois dernier. Donc, on est... Le mois de novembre. Le 27 novembre, vas-y. L'heure ? Il devait être une heure ou deux du matin, je ne sais plus. Pardon, pardon, pardon, pardon. Je me suis trompé de bouton. Et Gérard, en attendant, il y a Anonyme sur l'IRC qui dit que c'était le 18 06 98 nu dans sa piscine. Non, c'est faux. Donc, je ne la connais pas. Elle a des photos. Elle m'a dit qu'elle allait les afficher dans Suren. Ah bah, c'est bien. Et puis en plus, c'était très bien. Ouais. Ouais, ouais, ouais. Non, non, moi je pense pas. Non, non, t'es une menteuse. Tu vois, moi j'ai confiance en Gérard et je pense pas qu'il me ferait une chose pareille. Là, tu mens. Et si par exemple, un jour, Gérard, tu vois, je sais pas, ça peut arriver, tu vois, il te trompe, est-ce que tu lui pardonnerais ou pas ? Non, je crois pas. Qu'est-ce que tu ferais ? Moi, je pardonne pas, moi. Tu te barres. Tu te casses, tu le laisses. Ouais, je prends mes affaires et je m'en vais, quoi. D'accord, bah fais gaffe à toi, Gérard. Moi, je suis comme ça. Non, mais t'as raison, c'est normal. Alors, elle dit, là, devant des millions d'auditeurs, mais en fin de compte... Ah non, mais je te jure, je pardonne pas. Mais non, mais attends. J'ai même pas pris mon joker, alors tu vois. Et alors, t'as pas besoin de joker, tu réponds à toutes les questions. Bah oui, donc toi, t'as pris tes trois jokers et puis moi, j'ai pas pris mes jokers, donc... J'ai répondu à toutes les questions. Bah alors, tu prends tes clics et tes claques et tu te casses. Bon, bah c'est sympa, alors. Voilà, c'est tout. Bah alors, toi, c'est pareil. Tu prends tes clics et tes claques et tu t'en vas, comme la chanson de Mélilique, c'est quoi déjà ? Bye bye. Hé, Mélilique ! Bye bye ! Ah, c'est Mélilique qui chante bye bye ? Bah oui. Non, bah si, il chante bye bye, mais si tu veux, dans la chanson, tu prends tes clics et tes claques et tu te casses. N'importe quoi, ça a jamais été Mélilique. Mais si, c'est Mélilique. C'est MC Solar. C'est MC Solar. Alors ? Mais non, c'est pas MC Solar. Mais c'est MC Solar. Non, non, non, non. Mais c'est MC Solar, on l'a encore vu ce matin à 7h à la... à la télé. Attends, arrête de dire des bêtises. Non, parce que Mélilique, je le reconnais, c'est à coiffure, donc... Ah ouais, bah bien sûr, il est coiffé comme toi. Non, non, non, pas tout à fait. Non ? Ah, avec Léopatra. Juste avec des petites tresses, quoi. Ouais, avec Léopatra. Pas comme moi. Ouais, mais c'est vrai que t'es... Eh, c'est vrai, sans déconner. Ouais, sans déconner. Sans déconner, comme Max il dit. Sans déconner, c'est vrai que t'as une tête de Cléopatra, hein. Ouais. C'est quoi pour toi une tête de Cléopatra, Gérard ? Eh, Cléopatra, c'est celle qu'on voit, là, sans arrêt. Ah, oui, d'accord. C'est vrai, hein. Comment la petite, là ? Audrey. Elle s'appelait Audrey. On a répondu à ta question, Audrey ? Bah ouais, ouais. Mais bon, Gérard, t'as pas dit la vérité, quoi. Bah moi, j'ai pas dit la vérité. Moi, je t'ai dit que je suis toujours fidèle à Sandy et j'y resterai. Bah ouais, mais... Jusqu'à la fin. Jusqu'à la fin. Jusqu'à la fin. Non, mais ça se trouve, c'était un autre Gérard. Tu t'es peut-être trompé. Non, non, mais attendez, attendez, attendez, attendez. Ouais, faut peut-être arrêter les conneries. Parce qu'il y a des gens qu'on a marre d'être... qui sont harcelés. Qui sont harcelés. Attends, Gégé... Elle veut pas le dire. C'est perso. Non, non, non, mais vas-y. Tu l'as vu. Tu as eu un rendez-vous avec elle. Enfin, avec lui, pardon. Tu l'as vu et tout ça. Ah bon ? Ah bon ? C'est bon ? Avec elle. Avec elle, avec elle, avec elle. C'est bon. Alors, vas-y. Donc, tu peux préciser plus ta pensée, là ? De quoi ? Tu veux que je donne des détails ? Ouais. Attends, je peux donner des détails ? Non, c'est perso, ça. Attends. Non, moi, je suis d'accord avec elle. Si elle veut garder ça pour elle, elle le fera dans neuf mois, au pire. Ouais, voilà. Parce que t'avais pas mis de capote, je te signale, et moi, je prends pas la pilule. Non, non, bon, allez, on va s'arrêter, là. Non, non, bah, allez, c'est bon. C'est bon, donc. Audrey ? Ouais ? Bah, on va te souhaiter de bonnes fêtes de fin d'année. Ouais, bah, OK. Ouais, bonnes fêtes. Et puis, bah, à l'année prochaine, si tout va bien. D'accord. OK ? Donc, on va se retrouver, là, maintenant, pour attaquer les débats. Ah, le débat, ouais. Donc, le débat sur les routiers. Donc, on va... Il y a Manu et... Manu, qui est au standard. Ouais. Donc, qui vous attend, les bras ouverts. Donc, 0803 08 5000. Rigaud, toujours sur l'Internet, au www.fr. Donc, si vous voulez nous appeler, n'hésitez pas. On est là. Et si vous voulez toujours passer, voir comment ça se passe dans les studios, c'est fini, là. Je pense que... Le chef, il vient de me faire... Hop ! Le chef, il m'a fait... Hop ! Il m'a fait... Hop ! Ça fait trois jours que tu me dis. Comment on va faire visiter, surtout, personne pendant tes débats ? Et maintenant, t'arrêtes pas de demander aux gens de venir pendant tes débats. Bah, alors ? Non, bah, non. C'est toi qui as demandé à ce qu'il y ait personne. Bah, alors ? Bah, dans ce cas-là, on laisse la porte ouverte. On relance pas une annonce. C'est bon. Bah, si. Bah, si. Maintenant, c'est les concerts. On va... Attends. Maintenant, c'est les débats. S'il y a des gens qui veulent venir... Débat sur les routiers. Et voilà. Donc, s'il y a des gens qui veulent venir, donc, ils peuvent venir. Mais pas trop nombreux dans les studios. C'est tout ce que je demande. Attendez la pub. C'est... Ouais, bah, attendez longtemps. Ouais, d'accord. La pub. Vous attendez la pause musicale. Je viendrai vous dire un bonjour. D'accord, ok. Bon, ça, c'est notre problème. D'accord, ok. Bon, bah, alors, les débats sur... Enfin, le débat sur les routiers. Le débat sur les routiers. Trois heures de débat. Il y a... 120 questions. Il y a 23 questions. Et que de la bombe, hein. Ouais. Et c'est de la bombe bébé. Comme dirait... Je sais pas qui, là. Ça, c'est... Ayam. Ouais. Et donc... Ayam. on va garder... Cléopatra est toujours là. Cléopatra va réagir quand même. La bombe bébé, c'est réciproque. Chicho. La bombe bébé, Chicho. Fais-moi plaisir. C'est Noël. C'est Noël. Faites la fête. On va mettre un petit remix. On le mettra tout à l'heure. Faites la fête maintenant. Faites la fête. Faites la fête. Faites la fête. Faites la fête. Tu peux arrêter deux minutes ? Je propose un truc. Tant qu'il n'y a pas les 6500 connectés sur Internet, on ne le met pas. Non. Ça les forcera à venir. Ça les forcera à venir. Non, non, non. Ce n'est pas toi qui commandes, c'est moi. D'accord. On le met alors. C'est moi. On y va. On se retrouve dans un instant, c'est ça ? On se retrouve tout de suite après aux 0803, 085000 et 0875000. Il n'y a plus qu'une personne au standard, c'est Manu. Ce n'est pas grave. Oui, mais toi, tu vas y retourner. Oui, d'accord. D'accord, mon canard. Ok. Ok. Et c'est quoi là qu'on s'écoute ? Naromix. Comment ? Comment ? Alors là, c'est une très bonne question. Ah, bon ? D'accord, je vois. Celui qui fait du bruit derrière, arrête. Parce que ça commence à m'énerver. C'est moi qui commande. Mais non ! Hey, hey. Sans déconner. Sans déconner. Non, non, non. Attends, je t'écoute. C'est moi qui t'écoute maintenant. Tu réponds à la question ou si tu réponds pas, on va te dire pas. Bonne nuit. Bonne nuit à toi. Allez, celui-là, dégage. Fais gaffe là-bas parce que j'ai l'air de faire avaler tes lunettes si tu fais le con. Mais attends, tu te fous de moi, toi ? Quoi ? Quoi ? Parle un petit peu plus fort devant ton combiné parce que j'ai un téléphone de merde. Toi, tu as l'air de faire sodomiser, toi. Sans déconner. Remix ! Remix ! Remix ! Remix ! Remix ! Remix ! Remix ! Remix ! Il y a Gilbert, il y a Patrick, il y a pas mal de gens. Il y a pas mal de gens, donc je remercie tous les gens. Et il y a d'autres personnes encore qui sont en haut à l'accueil. C'est des routiers, hein ? Ouais. Il y a des triplés routiers, en plus. Derrière, juste derrière. Bon, toi, pour l'instant, tu as de terre et c'est tout. Non, mais c'est une routière qui est venue spécialement. Elle va livrer bientôt dans la Haute-Savoie. Elle est venue te dire bonsoir. Ouais, mais de toute manière, en fin de compte... Ah, les canons, hein, si t'étais célibate, si t'étais pas maqué. Non, mais je sais bien. Moi, j'ai mon bébé. J'ai mon bébé rose. Je le garde, mon bébé rose. Non, s'il te plaît. Excuse-moi, là, je me porte en faux. C'est pas ton bébé rose, merci. Attends, toi, t'étais bien contente ? Ouais, bébé rose, c'est moi. Donc, toi, c'est bébé vert, bébé marron, bébé ce que tu veux, mais bébé rose, c'est moi. Ouais, mais t'étais bien content quand t'avais Aurélie, là, dans les studios, hier. Mais Aurélie, je lui ai rien dit, moi, Aurélie. C'est rigolo, hein ? Menteur ! Menteur, menteur. Allez, sans déconner. Allez, sans rancune. On y va. 1h17, c'est parti. On accueille sans problème 20 ans de Niort. On écoute Fun Radio sur 93.3. Bonjour, Gérard. Bonjour. Joyeux Noël à toi. Bon anniversaire. Ah bah, d'accord. Toi, t'es vachement en avance. À l'avance, à l'avance. Chute 19 ans de Laval, 102.3. Oui, tout à fait. Salut, joyeux Halloween à tous. Salut à bébé gros. Comment ? J'ai dit salut à bébé gros. Euh... Là, tu vas te calmer, toi. Allez, hop. C'est Noël, on écoute. Ouais, c'est Noël, Gégé. Allez-vous, allez-vous. Tranquille. Non, non, hé. Tu me l'attrapes et tu me le calmes déjà, lui. Ça y est, il commence déjà à faire sa somme dictature, le latin. Allez ! Hop. Couille de loup, 23 ans de Toulouse. On écoute Fun Radio sur 105.9. Bonsoir. Bonsoir. Petit téton, 18 ans. Presse, 98.9. Oui, bonsoir et joyeux Noël. Eh ben, de même à toi. Euh... Raisin sec, 25 ans d'Alès. Bonsoir, joyeux Noël. 96.5. 65. Euh... 96.6, pardon. 65, genre. 96... 96... 95.6. OK. On écoute Fun Radio sur 95.6. Oui, si tu veux. Allez, hop. Allez, hop, il dégage, celui-là. Allez. Oh ! Vous avez vu, calmez. La suite, Gégé. Eh... Poil de nez. Oui, bonsoir. 20 ans de Nantua. 99.4. Bonsoir, Paris. Bonsoir, Goumaud. Salut à toi. Parle bien dans ton téléphone, hein, Poil de nez. Ouais. Pardon ? Ouais, parle un peu mieux dans ton téléphone et... D'accord, mais je suis dans une cabine en pleine campagne, donc ça, c'est pas nouveau. Oh là là là là là ! C'est un portable, c'est un portable ! Non, non, c'est pas un portable. C'est ici, c'est un portable. C'est pas nouveau, bon. Oh, vous vous calmez, c'est pas vous qui commandez, c'est moi. OK, on y va, Gégé. OK. Donc, c'est le débat sur les routiers, hein. Tu le rappelles, voilà. Donc, la question, excuse-moi, parce que j'ai pas écouté. Bon, la question, de toute manière, t'as pas besoin de l'écouter, toi. Ah, d'accord, bon. Toi, tu fais la réalisation, tu me donnes les fiches avec les titres de chansons. D'accord. OK. Rigaud, oui ? Oui. Bonsoir. Bonsoir. Débat sur les routiers, oui, tout à fait. Donc, y avait pas une petite question avant qu'on... Spoutnik qui te demande comment il doit faire pour manger sa dinde de Noël avec des baguettes au resto chinois. Ah, là, je sais pas. Là, je sais pas du tout. Donc, la question, donc, un routier peut-il conduire 24h sur 24 sans s'arrêter ? Allez, hop ! Non, mais merci, Fildar. Mais ils sont là, les auditeurs, Gérard. Non, mais bravo, Fildar, tu commences. Bravo, Fildar. Bravo ! Bravo ! Bravo ! Bravo ! Bravo ! Je pense qu'il n'y avait aucun auditeur. Un routier peut-il conduire 24h sur 24 sans s'arrêter ? Impossible. On va demander à 100 problèmes. Pas de problème. Impossible. 24h sur 24, c'est impossible. Il y a quelqu'un qui mange. Non, mais... Non, mais ça dépend. Il dort, mais qu'il fasse autre chose. Attendez, déjà, pas tous en même temps, parce qu'on ne comprend rien, s'il vous plaît. Vous coupez la radio. Qui c'est qui a une radio pourrite, là ? Elle est pourrite, ta radio, en plus. Pas moi non plus. Pas moi non plus. Qui c'est qui a une radio ? Je remercie celui qui met le son, parce que j'ai l'image, je n'avais pas le son. Gérard, il met de Goldorak, Manu... C'est bon, c'est bon, il gère, Manu. Vas-y, Gérard. Alors, chute. Chute, à toi. C'est bon, je le calme. Bon, d'accord. C'était chute qui mettait Goldorak, c'est pour ça. C'est parce que je suis fan, je suis fan. Alors, tu peux... J'ai connu des routiers qui conduisaient beaucoup plus que 24h d'affilée, ça dépend à quoi ils tournent. Et moi, je dis, il y a des routiers qui ne respectent pas les consignes de sécurité, qui conduisent beaucoup plus que ce qu'ils devraient. Parce qu'il y a des accidents, comme d'habitude. D'accord. Oh, on se tait ! Si on est du routier qui tourne aux enfaites, je vais dire, ça sera conduit 72h, 96h de suite sans problème. Ils partent de Amsterdam, ils vont jusqu'à Tomboucou direct. D'accord. De toute manière, ce n'est pas la question. Bah si, il est routier, c'est quand même... Non, non, mais ce n'est pas la question, d'accord ? C'est international. Ce n'est pas la question ! Oh là là. C'est pas le thème du débat. Oh, le grand stratégaire ! Oh yes ! Oh là là ! Oh là là ! Eh putain, vous ne me faites pas là ! Oh, Manu, Manu, Manu. Bon, allez, stop. C'est bon. Allez, Gérard. Oh, euh... Faut... Faut peut-être que tu te calmes, Manu. Gérard, sur IRC, il y a Sardine, le vrai de Marseille, qui te dit que s'il n'y a pas de feu rouge sur l'autoroute, il peut ne pas s'arrêter pendant au moins 120h, le routier. Non, mais attends, les feux rouges, je ne vois pas le rapport avec... Un routier peut-il conduire 24h sur 24h ? Bah si. Non, mais je ne vois pas le rapport avec les feux rouges. Ah si, s'il n'y a pas de feux rouges, il ne peut pas s'arrêter de rouler. Bah ouais, mais attends. Un routier qui conduit 24h sur 24h, déjà, je n'en ai jamais vu. Bah alors, c'est quoi ta question ? Justement, c'est une question que je pose. C'est une question con. Bah ouais, si tu sais que ce n'est pas vrai, pourquoi tu poses la question ? Parce que... Parce que cette question-là, elle n'a jamais été posée lors qu'on a fait les débats sur les routiers. Donc c'était important de la poser, parce que comme ça n'avait jamais été fait... Gérard, sur IRC, on me demande si c'est que des questions à la con, comme ça, pendant tout le débat. Si ça ne leur plaît pas, c'est qui qui te demande ça ? C'est un peu tout le monde. Fais gaffe, parce que si tu leur dis à tous de se casser, on va être mal. Donc, on va demander à Chut. Ouais. Bah écoute, moi je voulais te dire que des routiers qui conduisent plus de 24h, comme je t'ai dit tout à l'heure, il n'y a aucun problème. Ouais. Si Manuel Générix fout la main, si tu prends Steve Austin, il conduit largement plus de 24h. C'est pas moi l'arrière. Si tu prends Steve Austin, il peut conduire largement plus de 24h. Lui, c'est un show aussi, quoi. Ah bah ouais, non, mais je veux dire, ça, c'est du super routier, quoi. Ah, c'est clair. Ouais, bah ouais, d'accord, t'as raison. Tu ne prends pas parti des ports, toi ? Ils ne prennent pas l'avion, Gérard. Non, non, mais tu ne prends pas parti des ports ? C'est important que tu transportes les cochons, alors, en France. Pourquoi tu veux tout de suite citer le nom de Manu ? Ah ! Tu n'as pas parlé de Manu, je t'ai demandé comment t'avais fait la fête. Manu, je l'ai vu en live, il n'est pas gros. Comment t'avais affrété ta meuf ? Dégage-moi ce abruti, là. Ok, ça y est. Ah, tu vas voir, toi. On va s'occuper de toi, hein. Je vais savoir qui c'est. Qui c'est qui s'amuse à parler de Sandy ? C'est Robert. Non, il n'y a pas de Robert. On n'a pas de Robert, là, sur la liste. Gérard, à propos de Sandy, il y a Olio qui te demande combien de temps tu roules sans t'arrêter. Je ne roule pas, je t'assure, mais bon, je ne peux pas te répondre à cette question. Tu flottes, alors, si tu ne roules pas. Donc, je prends un joker. Ce n'est pas le jeu de la vérité, c'est les débats. Alors, couille de loup. Moi, tu vois, je pense que ça dépend. En fait, s'il a pris du speed, il peut aller rouler plus de 24 heures. Je ne sais pas s'il roule plus vite aussi, ça dépend de la vitesse, en fait. Ça dépend à quelle vitesse il roule. Non, mais attends. Facilement, plusieurs heures. Moi, je vais te dire une chose. Tu as déjà vu à combien ils sont limités, les routiers ? Ah ben non, moi, je ne suis pas routière. Non, tu n'es pas routière. 20, 30 à l'heure, je crois. Oui, c'est ça. Qui c'est qui vient de dire ça ? Chaudreau, Chaudreau. Qui ? Ils sont limités à combien, Gérard ? Toi, tu peux peut-être leur dire. Alors, limitation de vitesse. Manu, tu vas me faire du bon boulot. S'il te plaît, pour la dernière. Gérard ! Il y a des routiers, ce soir. Il y a des routiers avec toi, en plus. Ils vont confirmer. Oui, je l'ai vu. Donc, il pourra le confirmer. Donc, je pense que les routiers sont limités à 80. Tu peux le confirmer ou pas ? 60, 80, voire 90, pas plus. C'est faux ! 90 sur autoroute. C'est faux ! Non, non, laisse-le réagir. Laisse-le s'exprimer. Non, non, mais c'est un vrai routier. 90 sur autoroute. Ce n'est pas vrai ! C'est une honte ! Ce n'est pas vrai ! Attends, toi. Toi, avec ton vélo, tu roules à combien ? 91. 91 km heure. Tu fais moins le malin. Mais attends, ton vélo, on te le prend entre deux camions, tu n'as plus de vélo. C'est une boîte à conserve. Oui, mais moi, je prends ton camion entre deux vélos. C'est moins le malin. Mon camion entre deux vélos, tu as raison. Prends... Ouais. Donc, petit téton. Oui, bien sûr, il peut conduire... Oh, ta gueule, toi ! Ça s'appelle des routiers somnambules. Ah, d'accord. Des routiers somnambules. Tu as vu jouer ça dans Spirou Magazine ou dans Tintin Milou ? Non, dans Mickey. Ah, dans Mickey. Moi, je crois que j'ai vu jouer ça dans L'île aux enfants avec Casimir. Ne cherche pas à être drôle, Gérard. Ça ne marche pas, Gérard. Gérard, sur IRC, il y a Sean qui te demande de répéter la question. Ah non, je ne répète plus les questions, maintenant. On accélère. Raisin sec. Alors, les routiers, ils sont limités à 230, normalement, non ? Bien sûr. Pourquoi pas 250 km heure aussi ? La dernière fois, j'étais à 140, je me suis fait doubler par un camion. Alors, je ne comprends plus, maintenant. Euh, Gégé ? Ouais ? Si son problème, ça ne te dit pas, on fait une petite pause pendant un quart d'heure et on met le son de Goldorak. Non, non, non, non, non, non. Alors, son problème, terminé pour toi. Est-ce qu'il joue de la guitare, là ? Non, personne ne joue de la guitare. Non, non, Actarus. Euh, Poil Donné. Tu n'as pas répondu à ma question. Qui ? Raisin sec. Alors, vas-y. Je t'ai demandé comment ça se faisait que j'étais à 150 sur le tour de route et qu'un camion m'a doublé. Non, mais attends. Tu étais avec quoi ? Avec ma voiture. Gérard, ça peut rouler au maximum à combien, un camion, un semi ? Un camion, de toute manière, on a confirmation, c'est limité à 90. Non, mais c'est limité. Mais si ça dépasse la limite, ça peut rouler à combien ? Non, il n'y a pas de si il dépasse la limite. Il y a son mouchard. Il y a un petit voyant rouge. Donc, le mouchard, pour préciser, pour ceux qui ne sont pas routiers, qui n'ont pas l'habitude de le faire, et là, on a deux... Ils peuvent confirmer. On a des routiers qui sont là, qui peuvent confirmer. Donc, le mouchard, c'est là où qu'on met le disque pour savoir à combien qu'on roule et tout ça. Donc, c'est un boîtier comme un... Attends, parce que tu dis que ce n'est pas un lecteur CD pour mettre le disque, c'est un radio cassette. Non, mais c'est à peu près comme ton disque. Oui, c'est ça. Tu as le disque qui tourne... C'est un lecteur cassette, CD. Même, non. On appelle ça des mouchards. Oui, les mouchards, ce sont ceux qui disent des... Non, non, non. Comme les Kleenex, des trucs comme ça ? Mais non, attends, toi... C'est exactement ce qu'on demande à un salarié. Non, non, non. Là, on a des routiers. Donc, on peut confirmer. Les mouchards, c'est un truc où tu mets ton disque. Tu mets ton nom. Ton disque CD ou vinyle ? Mais non, tu mets un disque normal. Tu prends ça. C'est faux ! Mais arrêtez vos conneries, putain ! Mais moi, c'est ce que je dis. Alors, toi, tu t'écrases, ok ? Ouais, non, mais attendez. Un disque, c'est un genre de truc comme ça. Ah, une feuille de papier. Non, mais qui est trouée là. Montre bien, parce que les gens ne voient pas bien, peut-être. Là, tu as tout ça. Tout ça, c'est un disque. Et tout de suite... Ah, tu fais une horloge, comme une radio. C'est une horloge. Mais si tu n'as pas d'horloge, tu peux mettre quoi ? Non, tu ne peux pas. Tu ne peux pas. Réveil ! Non, non, tu ne peux pas. Pas de réveil ? Non, non. Non. Ah bon. Tu ne peux pas machiner là-dessus. Ah, tu ne peux pas machiner, surtout. Alors... Je voulais dire quand même que les routiers, c'est des grosses balances, quand même. Ta gueule, là, toi. Toi, la balance, tu sais où tu vas terminer, toi ? Là. Ah ouais, ah ouais, ah ouais. Gérard ? Excuse-moi. Vas-y, Manu, vas-y. À la place de sans problème, on accueille n'importe quoi. Euh... Je vais te dire une chose. Attends, tu permets sans problème ? Euh... Il n'est plus là, il n'est plus là. Il est parti sans problème. C'est n'importe quoi. N'importe quoi. Ouais. Je vais te dire une chose, Manu. Ouais. Pas comme toutes les semaines. Ah, excuse-moi. Dis plus rien, parce que sinon, ça fera plus d'une chose. Là, tu ne peux pas dire... Tu ne peux pas dire sur les 24 lignes, parce qu'il n'y en a plus que 12, mais... Ouais, ouais, non, mais je voudrais qu'on prenne un peu, là. Sur les 12 lignes, Manu. Donc, c'est comment, son nom ? N'importe quoi. N'importe quoi. Attends, Gérard, j'ai lutté pour essayer de vous joindre. Ouais, donc, tu peux répondre à la première question ? Bah, j'ai pas entendu, j'étais au standard avec Manu. Alors, la première question, donc, je la rappelle, parce que tout le monde a à peu près fait le tour. Donc, n'importe quoi pour toi. Je répète. Un routier peut-il conduire 24 heures sur 24 sans s'arrêter ? Euh... Si c'est mon argent. Oui, je pense, oui. S'il prend de la caféine. C'est ça, t'as raison. Et celui qui dit « fais chier maman », c'est ton... C'est mon argent. Ouais, c'est ça. Et celui qui fait le porc, c'est pareil. Il n'y a personne qui peut m'enregistrer l'épisode de Goldo en DVD ? Non, non, non, non, il n'y a personne qui peut t'enregistrer Goldo en DVD. Il est monté sur moi, c'est tout. Oh... Gérard, tu parlais des mouchards. Moi, je voulais savoir quelle est ta théorie sur le Morbac. Non, il n'y en a pas. Alors, comment s'organise un routier ? Attends, Paul Donnet, il n'a pas répondu. Non, vas-y. Bon, alors, tu parlais de... C'est quoi déjà la question ? Oh, allez, tu me prends pour un con, là. Allez, va retirer tes poils de nez. Allez, hop. Hop, terminé. Va retirer tes poils de nez. Je m'en souviens. Non, non, c'est bon, c'est bon. Joyeux Noël à toi. Va retirer tes poils de nez. Hop, terminé pour toi. Alors, comment s'organise un routier quand il s'ennuie ? On va demander ça à n'importe quoi. Je pense qu'il se tape une grosse branlette. Alors, tu peux... Vas-y. Rigo, attends, attends. Justement, à ce propos, il y a un misto sur l'IRC qui dit que 99% des routiers se branlent quand ils se font chier et l'autre pour cent sont des neuneux. Alors, là, je vais te dire une chose. Qui c'est qui a dit ça sur l'IRC ? Misto. Misto. Je vais te dire une chose que là, tu as ouvert la réponse dans peu de temps parce qu'il y a des routiers qui sont là. Toi, tu ne peux pas répondre. Ils peuvent confirmer. C'est bon. Ils peuvent confirmer que c'est faux. Non, non, non, c'est faux. Il ne faut pas déconner. Attendez. Il ne faut pas. N'importe quoi. Putain, il fait la transformation. Excuse-moi. Donc, Gérard. Bon, allez, hop. Attends, il fait la transformation. Non, non, non, non, non. Non, non, ouais. Je ne sais pas d'où ça vient. Gérard. Gérard. Allez, allez, allez. Manu. Manu, bosse un peu. Putain, autrement, tu dégages. Rigo. Non, non. Tu le tais, toi. Non, il y a juste Misto qui dit que si tu ne fais pas partie des 99% qui se branlaient, c'est que tu étais un neuneu. Et alors ? Tous les routiers ne se branlent pas dans leur camion. Attends. Tous les routiers ne sont pas neuneux. 99%. Tous les routiers ne sont pas des cochons comme la question va être posée. Donc, je... Je sais qu'il n'y en a pas beaucoup qui sont sur les routes, malheureusement. Ah, pourquoi ? C'est les fêtes. Quoi, il y a du gel ? Eh non, mais... Ça gèle ? Non, mais il n'y a pas de routiers. Ouais, vas-y, toi. Je voulais juste te dire qu'à la place de Poil Donné, on accueillait Sandrine, c'est tout. Alors, Sandrine, bonsoir. Non, non, c'est bien, ça. Oui, bonsoir, Gérard. Salut, Sandrine. Salut, Sandrine. Bonsoir, c'est Sandrine de France. Ouais, c'est ça, Travelo. Bon, vous fermez un peu vos gueules. Ok, super. Merci. Ah, on va peut-être plus avoir de confirmation, mais c'est pas grave. Salut, les routiers. Salut, les routiers. Salut à vous. Bonne route, vous êtes sympas. Bonne bourre. Bonne bourre et prudence sur les routes. Ouais. Passez la deuxième, quand même, des fois. Sortez couverts, les mecs. Gérard. Oui ? C'est Sandrine. Est-ce que je peux avoir la question ? Parce que Manu m'a pris sur le standard. Ouais, ouais, ouais. En plus, il est sourd. Oh, tu te tais, toi. Ferme-toi, s'il te plaît. Moi, ça va. Alors, comment s'organise un routier quand il s'ennuie ? Oh, putain, mais vous me faites ça, mec ! Bon, moi, j'arrête à 3 heures, hein. Allez, hop ! Allez, allez, allez. Manu, c'est quoi, ce bordel ? C'est nul. Nul, nul, nul, nul. Faut me mettre à l'aréa, moi, je pense. Allez, on va s'écouter, Sacha, avec Fête la Fête et La Grosse. Et on se retrouve après pour la deuxième question. Comment s'organise un routier quand il s'ennuie ? A tout de suite. Sous-titrage Société Radio-Canada ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... Et voilà, c'était Saga avec Fête la Fête et... Saga Africa ? Non, c'est Saga avec Fête la Fête à La Grosse. Donc, c'était dédié pour... La Grosse ? Pour ma petite femme que j'aime de tout mon cœur. Avant de recommencer avec les auditeurs, j'ai un petit sondage sur l'Internet. Alors, c'est de paradoxe. Alors, attention, parce que ça défile très vite. Alors, sondage reçu par l'AFP. 15% des routiers sont des maniaco-dépressifs. 23,78% sont en proie à de gros problèmes sexuels. 36% prennent du Viagra. 3% sont sans emploi. Et 90,3% auraient préféré être CRS. Parce qu'ils ont le même QI. Euh... CRS, non, je vois pas trop le rapport. N'importe quoi, bonsoir. Bonsoir, Gérard, comment vas-tu ? Re-bonsoir. Chut, derrière, vous fermez vos gueules. Oh putain, mais... Oh, Manu ! Faut gérer un peu, là, parce que ça commence à bien faire. Chut. Il y a un mec qui fait le malin, derrière. Oh là là, Goldorak, Manu ! Ça vient pas de chez moi ! Oh, moi, j'en ai ras-le-bol, là ! Mais y a personne ! Regarde un peu, y a personne en air ! Putain, tu as bossé comme il faut, toi ! Mais y a personne, ça vient pas de moi, hein ! Si t'as pas envie de bosser, ce soir de Noël, tu retournes voir ton bébé rose ! Mais y a personne ! Tu nous fais chier, là ! Ouais, c'est vrai. D'accord, retournez voir ton bébé rose ! Ouais, d'accord. Ouais, Gérard, on y va, on y va. Euh, chut ! Ouais. Ouais, d'accord, euh... Couille de loup ! Ouais. Re-bonsoir. Bonsoir. Petit téton. Oui. Re-bonsoir. Raisin sec ! Raisin sec ! Oui ! Ouais. Oh, tu travailles ou quoi, là ? Excuse-moi, ça va ! Eh, Sandrine ! Dis le trableau ! T'es sourd ! C'est-à-dire GG. Moi, je kiffe bien sur tes pantoufles internes. Bon, alors... Celui-là... Il dégage ! Il dégage ! C'est Pedro qui a dit ça ! Bon, vous fermez ! Maintenant, vous allez vous la fermer ! Ok. Allez, hop ! Eh, Gérard ! De quoi ? Comment ? Tu voudrais être routier ? C'est qui ? Petit téton. Petit téton ? Ben, tu retournes voir Manu, il va... Il va... Gérard, elle te pose la question. Est-ce que t'aimerais redevenir routier ? Non. Pas pour l'instant. Pourquoi ? Parce que j'ai une bonne place. C'est tout. Alors, maintenant, comment s'organise... Comment s'organise un routier quand il s'ennuie ? Sandrine. Alors, Sandrine, vas-y, le trableau. Alors, la question de facilité, ce serait de dire, bon, la branlette, mais à mon avis, c'est pas ça. Donc, un routier, qu'est-ce qu'il va faire ? Il va chez Ypres. Je donne pas la marque de la station au service. Ouais. Il va acheter des cassettes de cul. Ou alors, des calendriers de cul, de la bouffe, et tout ça. C'est quoi, ça ? C'est la solvée. Et voilà. Merde en figure ! Putain, Manu, Manu, Manu ! Voilà, Gérard. J'essaie de gérer, ça y est. Non, mais si tu veux, on peut arrêter à 3h. Parce que c'est ce qu'on va faire, on va pas faire les deux débats. Parce que là... Non, mais moi, ça m'emmerde pas. C'est toi que ça emmerde. Parce que toi, pour l'instant, t'es en train de me foutre de la merde. Ça se voit que c'est le dernier débat de l'année. Parce que t'es pas avec ton bébé rose. Et moi, je suis pas... Moi, elle est là, mais on n'a pas fait de réveillon encore. Gérard, pour revenir au débat, il y a Chandler, le vrai, sur l'IRC, qui te demande qu'est-ce qu'il faut faire comme étude pour devenir routier. Justement, ça, c'est dans le deuxième débat. Donc, c'est pas maintenant. Gérard ? Oui ? C'est Sandrine, donc j'ai pas fini. Ouais, vas-y. Parle dans ton téléphone, Sandrine. Pardon ? Parle dans ton téléphone. Ouais, mais attends, attends, Sandrine. Toi, tu recommences pas ce que tu viens de faire. Parce que c'est toi qui t'amuses à... Non, c'est pas moi qui mets Goldorak. Non, non, tiens. Ah, tu vois, c'était pas moi. Tiens, tiens, tiens, tiens. C'est pas parce que je mets main là que je mets Goldorak. Parce que tu veux que je te le mette, Goldorak, tu vas avoir un autre son, regarde. Ah, ouais, ouais. Ça, c'est Goldorak. C'est mon Goldorak, c'est pas l'auditeur, là. Ouais, ouais, ouais. Tu vois ? Ouais, ouais, c'est ça, allez. Laisse-le. Toi, il y a une différence. Bon, allez. Bon, Gérard, c'est de la bombe, c'est un épisode. Gérard ! C'est Sandrine, j'ai pas fini, donc. Bon, alors, dépêche-toi. Le routier, s'il s'ennuie vraiment, à mon avis, ils peuvent même aller jouer aux flippers, style Sugar Ray, par exemple, les flippers qui marchent pas, ou la PlayStation. D'accord. Gérard, résin sec. Ouais. Alors, je voulais dire que, bon, les routiers, quand ils s'ennuient, ils peuvent appeler leur famille, hein. Ils sont pas tout seuls, ils doivent avoir des enfants, aussi, les routiers. Non ? Ben, à mon avis, s'ils sont sur la route, ils peuvent pas être chez eux, hein. Non, mais ils peuvent avoir un portable pour appeler de leur route. Petit téton ! Ben, ils écoutent la radio. Ah, d'accord, carrément, toi. Ben, écoute, c'est une réponse intelligente, hein. Ah, ouais, ben, je vois. Euh, couille de loup. Non, moi, je pense qu'il doit se taper une grosse. Gérard ! Ah, ta gueule. Oh ! Oh, vous gâlez un peu ! Ouais. Bon, allez, vas-y, cochon. Couille de loup ! Attends, la cochonne, attends, merde, toi ! C'est pas une cochonne, c'est une salope ! Oh ! Oh, tu calmes tes nerfs, toi, ou je te calme ? Ouais, c'est clair, arrêtez. Ben, heureusement que je suis pas marié avec lui ! Parlez pas comme ça aux chiennes, mec. Oh ! Gérard, on pourrait revenir un peu dans le débat avec les auditeurs, parce que c'est n'importe quoi. Ouais, mais c'est n'importe quoi, tu demanderais, t'es à l'hôte, là. Manu, on pourrait revenir dans le débat, parce que c'est n'importe quoi, là. Non ! Gérard, à propos du débat, reviens dans le débat, Gérard, s'il te plaît. Tu m'écoutes ? Oui, Rigo. Il y a Rainbow, le vrai arc-en-ciel, qui te demande si un routier a une prime pour Noël s'il travaille pour le réveillon. Ah, c'est une bonne question, ça. Voilà la question que je m'attendais. Mais ça, c'est dommage qu'il soit parti. Ah, ils peuvent plus approuver, là. Une prime, non, mais être payé double, oui. C'est faux. Attends, toi, tu fermes ta... ta gueule, hein ? Tu fermes ta gueule, et tu me fais du boulot correct, ok ? C'est tout ce qu'on te demande, Manu, merde. C'est tout ce que je te demande, avant que je te mette une claque dans... Dans le museau. Fais le con. Fais le con. Tu vas voir tout à l'heure. Tout à l'heure, tout à l'heure, tu vois ce qu'il reste de coca ? Allez, on y retourne, Gérard. On y va, on y va, on y va. Alors... Chut ! Ah, on n'est plus en antenne, c'est bon. Chut ! J'ai pas répondu, ouais. Allô, Gérard ? Oh, ta gueule, toi. Oh, putain, ferme-la, couillon. Ouais, Gégé, on va... Ta gueule, un peu. Voilà. Gégé, c'est chute ? Ouais. Moi, je voulais te dire que j'ai connu des routiers qui, quand ils s'emmerdaient, bah, tout simplement, ils classaient, ils avaient des collections de calendriers de cul. Allô, Gérard ? Ils classaient leurs calendriers de cul, bah, quand ils se faisaient chier, quoi, pour couper. Et je voulais savoir si tu confirmais. Oui. Gérard, t'as même pas écouté la question. Ouais, c'est pas poli, Gérard. Tu sais, j'ai très bien compris, et je vais te dire une chose. Vas-y, dis ta chose. Vas-y, dis une chose, Gérard. Moi, je peux vous dire une chose, que les routiers n'ont pas de calendriers de femmes à poil dans leurs camions. C'est faux ! Vous mentez tous ! Vous êtes tous des menteurs ! Vous êtes tous des menteurs ! C'est faux ! C'est faux ! C'est faux ! N'importe quoi ! C'est pas pareil ! Je suis là, je suis là, je suis là ! Qu'est-ce qu'il y a, Gégé ? Tu réponds à la question ? J'ai déjà répondu tout à l'heure, donc, voilà, quoi. Je t'ai déjà dit que, quand ils se faisaient chier, ils se tapaient des petites pignoles dans leur cabine. Non, ça dépend. S'ils sont à deux, ils s'en couillent. S'ils sont à deux, ils s'en couillent. S'ils sont à deux, ils s'en couillent. Troisième question. Allez, Gérard ! Allez ! Allez ! Attendez, Gérard est en train de dealer un truc. Mais non, il n'y a pas Tony ! Arrête tes conneries ! Il n'y a pas Tony ! Gérard, pour calmer le débat, il y a Scone sur l'IRC qui souhaite un joyeux Noël à tout le monde, quand même. C'est sympa. C'est bien, on te souhaite un joyeux Noël aussi, à toi. Moi, je t'emmerde, toi. Peut-on tricher sur les puces de paille d'un routier ? Ta gueule ! Tu peux m'écouter ? Peut-on quoi ? Peut-on tricher sur une puce de paille d'un routier ? Tout à fait. Alors, n'importe quoi. Oui, je pense. C'est possible. C'est possible, non ? Tu pirates ton salaire, et c'est bon, il n'y a pas de problème après. Tu gagnes le pognon que tu veux par mois. D'accord. Chut ! Moi, je pense qu'on ne peut pas tricher sur une puce de paille d'un routier. Tu peux préciser ? Vu les sommes qu'il y a, je crois qu'il n'y a pas de quoi tricher. De 1 franc, tu passeras à 2 francs. Oui, mais ça ne fait pas tricher. Couille de loup ! Oui, non, moi, je ne pense pas, parce qu'ils ne doivent pas avoir le QI assez élevé pour pouvoir piger comment on fait. De quoi ? Non, je dis, je ne crois pas qu'ils doivent être assez intelligents pour comprendre comment on fait pour falsifier la feuille. Non, mais attends. Peut-on tricher ? Peut-on tricher sur les puces de paille d'un routier ? Je vais te dire une chose, c'est que c'est le patron qui triche. Ce n'est pas le routier, d'accord ? C'est faux ! Toi, Manu, tu fermes ta gueule, maintenant. C'est faux ! Bon, Manu, tu dégages, tu pousses le camp à l'arrière. D'accord ! Non, non, non, non, non. Si, si, si, si, si, si. Non, mais attends. Non, mais c'est bon, attendez. Faites un débat correct, on verra après. Non, non, mais attends, pour l'instant, il est en train de me foutre de la merde. Euh, petit téton. Eh, tu viens chez moi, après, Gérard. Ta gueule ! Je peux parler ? Oui, ben, je ne sais pas du tout répondre. Non, mais, eh ! Oh ! Quoi, qu'est-ce qu'il y a, Gérard ? Oh, Max ! Eh, tu lui demandes qu'il me passe du bon boulot, là, pour la dernière de l'année, ou pas ? J'étais pas là, moi. Non, t'étais pas là. T'étais où, bâtard ? T'étais où ? J'ai arrêté ma cassette vidéo, là. Ouais, t'as arrêté ta cassette vidéo. Moi, de toute manière, on ne va pas durer jusqu'à 4h du matin. Eh, tu viens chez moi, après, Gérard. Bon. Qui c'est qui a donné tout ça aux auditeurs ? J'ai personne. J'ai personne à l'antenne. Non, non, non, non, non. C'est pas possible, là. Allez, hop. Hop, envoie-moi la musique. Attends, j'ai pas de disque, là, Gérard. Envoie ! Envoie ! Je m'en fous, je veux pas le savoir. Envoie la musique. Allez, hop. Envoie la musique. Bah, attends, je vais en trouver, alors. Je veux pas le savoir, tu te démerdes. Tu m'envoies un truc. Attends, attends, moi, j'ai des questions pour toi, pour calmer le débat, auxquelles tu peux répondre. Alors, il y a... Attends que je retrouve. Il y a Chandler, le vrai sur l'IRC, qui te demande combien représente le salaire d'un routier. Bah, justement, ça... On se calme, les gars, on se calme un peu. La question, on n'en est pas là. Non, mais réponds, réponds. La question, combien... Non, mais Gérard, à chaque fois que je te pose une question, tu dis, c'est pas la question, on viendra plus tard. Réponds tout de suite. Combien gagne un routier ? Voilà. Bon, un routier, à l'heure actuelle, si tu veux, gagne entre 10 000 et 15 000 francs. Donc, selon là où il s'en va. Oh là là ! Bon, toi, toi, tu vas me faire du bon boulot. Mais, Fildar... Attends, je cherche. Non, non, mais tu cherches, tu vas pas chercher longtemps, parce que sinon, sinon, le débat, il s'arrête et on va laisser Rousseau. Ouais, attends deux secondes, j'ai trouvé un truc super, là. Non, non, mais je m'en fous. On peut pas laisser Rousseau, il joue à la PlayStation. La disco ? Tu veux de la disco ? Bah, je m'en fous, tu mets ce que tu veux, mais moi, soit que Yannin, il fait du bon boulot. Non, mais si Manu faisait du bon boulot, il n'y aurait pas de problème. Soit qu'on fait du bon boulot, on continue. Soit que j'arrête maintenant. C'est simple. Gérard ? Et si j'arrête maintenant, on est combien ? Non, mais non, on n'arrête pas, là. On est presque 5 000, on est 4 852 moins 4. C'est très bien, j'aimerais bien qu'on booste bien. Les gars ! Et il y a quelqu'un, je me rappelle plus qui c'est, sur l'IRC, qui te demandait le salaire, ça fait combien en euros ? C'est pas la question. En euros, là, je peux pas trop lui répondre, parce que l'euro, il est à 6... Non, il est à 5,57. Non, 6,50. 6,50, oui, pardon. Il est à 6,50, ça devrait faire 6 500 euros. Oui. À quelque chose près. Il y a des milliers d'euros, de soi. Au lieu de dire que je sais pas et de bouffer ton gobelet quand Maxi parle, tu la fermes et tu me calmes les auditeurs. Avant que moi, je te calme. Bon, alors les gars, on refait de réunion. Gérard, qu'est-ce que t'as à dire ? Pour un cent... Eh oui, eh oui, filard, fais du bon boulot. Pour un cent. Oui. Rigaud, c'est bon. Mais l'autre, parce qu'il est pas avec son bébé rose, il fout de la merde. Il est en train de nous foutre de la merde. Non, c'est pas vrai, je te bosse bien. Mais si, mais si, mais si. Non, je fais du bon taf. Mais non, pour un cent, t'es en train de me faire de la merde, on est à la troisième question, et il y a 23 questions en tout. Eh ben, on a le temps jusqu'à 4 heures. Ouais, ben, tu crois que je vais durer jusqu'à 4 heures ? Ça m'étonnerait. Bah si. Je crois pas. Parce que c'était prévu qu'avec Maxi, ça se passait mal, t'es à 3 heures, et je pense que je vais arrêter à 3 heures. C'est bien, là, pourtant, parce que... Alors, on va s'écouter Moby Dick avec des prouts. Des prouts en plus, et on se retrouve aussitôt après. Pour ceux qui sont encore en plein réveillon, ben, bon réveillon de Noël. Ça m'étonnerait qu'il y en ait encore à 2 heures qui mangent la dinde. Ah bon ? T'inquiète pas, il y en a encore. On peut la manger jusqu'à quelle heure, la dinde ? Je sais pas. Il y a peut-être des mecs qui baisent. Manu ! T'éteins ton micro pour deux mots maintenant, et tu t'écrases. D'accord ! Je disais, il y a peut-être des mecs qui baisent ! La dinde ! Bon, tu t'écrases, c'est tout. D'accord ! Donc, je sais qu'il y en a... qui sont sur les routes. Ouais. Donc, prudence à eux. Ils font réveillon sur la route ? Non, peut-être pas. Non, non. Oui, Rigaud. Oui, je voulais juste dire qu'on a dépassé les 5000. Ouais. On est à 5123,4. Ouais. Donc, si tu peux les remercier. Ben, je remercie tous ceux qui sont... C'est pas assez. Tous ceux qui sont sur l'Internet. Donc, je vous souhaite un joyeux Noël. C'est pas assez, hein, 5000 fois. Et une bonne et heureuse année 99, parce que j'aurais pas l'occasion de... de vous avoir pour le réveillon. Ouais. Donc, ben... Voilà. Voilà ce que je peux vous dire. Donc, on récupère n'importe quoi. Eh, tu viens chez moi, après, Gérard ? Ah, ta gueule, à toi ! Oh là là ! Ouais, c'est moi. N'importe quoi. Ah, je vais passer à l'entrée, d'ailleurs, là, dans 5 minutes. Oh là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là Et je baisse dans une demi-heure. Et moi, je t'emmerde. Je t'emmerde. Bon, allez, on se dépêche. Bon, n'importe quoi. Eh, tu viens chez moi, après, Gérard ? Bonsoir, Gégé ! Joyeux Noël à toi ! Chut ! Ouais, salut. Bon 14 juillet à tous. Ouais, c'est ça. Joyeux Pâques. Couille de loup. Ouais, salut. Petit téton. Salut. Raisin sec. Non, excuse-moi, il est parti. On n'a que Jean-Pul, à la place. Non, mais alors, attends. Manu ! Ouais ? Un conseil que je te donne. Ouais. Tu vois, tu fais une chose, tu me prends, sur les 12 lignes qui sortent. Ce que j'ai fait, c'est un nouveau. Non, non, non, non, non, non. Bah si, je suis désolé. Tu prends sur les deux lignes. Alors, c'est comment ? Jean-Pul. Jean-Pul. Ouais, mais attends. Jean-Pul. Ouais. Non, Jean-Pul. Bon, alors, tu te démerdes, tu me fais une fiche propre. Ouais, une fiche propre, Gérard. Quand même. Alors, la question, ben, peut-on tricher sur les fiches de pays d'un routier ? Donc, je pense que vous avez réfléchi. Ouais. Donc, ben... Oui ? Oui, tu m'as oublié. Ben, je t'écoute. Rebonsoir, Gérard. Ben, rebonsoir à toi. Donc, allez-y, posez... Ouais, c'est chute. Ouais, chute. Ouais, moi, ce que je voulais dire, c'était que si les routiers, il fallait qu'ils trafiquent leurs fiches de pays, il faudrait déjà qu'ils sachent compter. Non, mais attends. Attends, attends. Attends, chute. Chute, chute, chute, chute. Chute. Chute. Écoute-moi bien. Oui, chute. Peut-on tricher sur les fiches de pays d'un routier ? Oui, ben, justement. S'il faut qu'ils trichent... Attends, celui qui rentre derrière, arrête ! Jean-Pul. Jean-Pul. Il faudrait qu'ils sachent compter. Et je pense, bon, je me permets d'émettre un léger doute, quoi, tu vois. Mais je croyais que ça se faisait par ordinateur, maintenant, les fiches de paye. Ouais, mais de toute manière, il faut se dire une chose, qu'il y a certains patrons qui trichent quand même sur certaines fiches de paye. Ouais, mais sur les leurs, pas sur celles de leurs employés, si. Jean, à peine. Ils retirent de l'argent sur leurs payes, alors ? Bon, alors. Mais comment ça se passe ? Un routier, c'est payé au kilomètre ? Comment ? Non, c'est pas payé au kilomètre, en fin de compte. Comme une personne... Oh, t'as de jolle ! D'accord, c'est... Maintenant, tu m'emmerdes, toi. Ouais. Voilà. Donc, tu disais, GG ? Non, mais, en fin de compte, c'est pas payé... Au kilomètre ? Au kilomètre, c'est payé comme toi et moi. Non, mais c'est payé comme toi et moi. D'accord. Par exemple, le mec, il va rester... De nuit, ça va être payé un peu plus cher. Et ainsi de suite. D'accord. En fait, il doit faire... Il doit faire 39 heures par semaine, comme un employé... Ah, non, non, non ! Non, c'est pas 39 heures ? Non, non, parce qu'il faut se dire une chose, que les routiers, à l'heure actuelle, passent plus de temps sur les routes que chez eux. Donc, il faut bien se dire... Il faut bien se mettre à la place d'un routier. Je y ai été. Donc, je peux savoir ce que c'est. D'accord. Et je vais te dire une chose, que... Bon, j'ai pas fait de la route. Ouais. Mais ceux qui font de la route ne sont pas tout le temps là. Ah, d'accord. Gérard ? Oui, Rigaud ? Il y a Sardine de Marseille qui te demande des routiers abandonnés par leur camion sur les aires de repos de l'autoroute. Euh... Des routiers abandonnés... Des routiers qui font du stop pour rentrer chez eux les week-ends, oui. Mais des routiers abandonnés, non. Jamais. Ouais. Gégé ? Oui ? Oui, je voulais savoir... On m'a dit qu'être routier, c'était un métier qui nécessitait de la sueur. On disait que c'était un métier dur, qu'il fallait transpirer et tout. Et je voulais savoir si c'est pour ça que, dès tout jeune, tu avais trouvé ta vocation dans ce milieu-là. C'est clair. Euh... Ouais. Laquelle ? Laquelle ? Laquelle ? Laquelle ? Oh ! Tu te tais, toi ! Ouais, vas-y, j'ai répondu. Un routier. Donc, c'est toi qui viens de poser la question. C'est comme... C'est chute, c'est chute. C'est chute. Ouais. Donc, ta question, tu peux me la reposer, s'il te plaît ? Ouais, donc, je te disais, il paraît qu'être routier, c'est un métier qui demande de la sueur et de la transpiration. Et je voulais savoir si c'est ça qui, dès ton enfance, t'avais quand même donné ta vocation pour savoir ce que t'allais faire plus tard. Alors, moi, je vais te dire une chose. Qu'un routier transpire beaucoup, ça, c'est vrai. Parce qu'il faut se dire une chose, que certains routiers sont obligés de décharger. Pas tous. C'est clair. Mais certains. Ouais. Donc, d'autres, quand ils arrivent, ils sont dans la cabine, ils dorment et... Oh là là ! Celui-là, il va se faire virer une fille, non ? Manu ! Non, mais continue, Gégé, continue. Manu, tu fais ton boulot correct ou pas ? Tu fais ton boulot correctement ou pas du tout ? Ou tu pires ? Ah, correctement, correctement. Ou tu retournes voir ton bébé rose ? Ouais. Gégé, t'en étais au problème de décharger. Donc, t'as certains routiers qui sont obligés de vider leur camion, d'autres, non. Pourquoi ? Parce que quand ils arrivent, ils se mettent hackés, ils sont dans leur cabine et ils dorment. Ouais, mais pour... Oh là là ! Pour le problème de la douche, Gégé, ils font comment, les routiers ? Parce qu'il y a un lit à l'arrière du camion, mais il n'y a pas de douche. Non, mais ça... Ça, pour les douches et tout ça, ils s'arrêtent dans... Bon ! Je réponds à Chut. Ça, pour cette histoire de se laver, ils peuvent s'arrêter dans des aires de repos. Il y a des douches, spécialement, qui sont dans les aires de repos, qui peuvent se laver et tout. Ouais, mais ils ne se lavent pas souvent, du coup. Si, si, si, si, si. Et je voulais savoir si, toi, pourquoi, depuis que t'avais arrêté le métier, t'avais quand même gardé des manières de routier, quoi ? Même si t'es plus dans le métier, je veux dire, tu transpires encore beaucoup et tu ne te laves pas souvent et tu décharges pas mal. Non, non, mais attends, je transpire beaucoup parce que là, il n'y a même plus de ventilation dans les studios, je ne sais pas pourquoi. Ils ont déménagé la ventile, hein. Ouais, mais là, ça devient inadmissible. Euh... Gérard ? Ouais. Gérard, il y a le vrai canard vissé sur l'IRC qui te demande pourquoi les routiers pissent sur le long des routes et pas sur les aires de repos. Attends, attends. Ça, c'est complètement faux. Euh... Ouais. Non, non, non, non, non, non. Chute, tu t'es, chute, tu t'es. C'est une anecdote. Non, non, mais je réponds. Je peux prévenir tout de suite, là. Je réponds à canard vissé que c'est faux qu'il n'y ait aucun routier qui s'arrête sur les bandes d'arrêt d'urgence. Non, non, non, non, non. Les bandes d'arrêt d'urgence, ça fait pourquoi ? Pour les arrêts d'urgence. Alors, vas-y, vas-y. Le mec, il n'était pas arrêté sur la bande d'arrêt d'urgence, il était garé en triple fil sur l'autoroute et donc, il y pissait. C'est ça. Tu ne prendras pas les... Tu ne prends pas les gens pour des cons, toi ? Non, mais c'est réel. Non, tu les laisses. C'est réel. Que transporte un routier en fin de journée ? Que transporte un routier en fin de journée ? Que transporte un routier en fin de journée ? Que transporte un routier en fin de journée ? Oui, oui. Gérard, tu m'excites avec tes moustaches. Ta gueule ! Tu m'excites avec tes moustaches. C'est n'importe quoi, Gégé, je vais répondre. Gérard, tu m'excites avec tes moustaches. Vas-y, jouis. Oui, oui, oui, Gérard. Gégé. Chute, chute, chute. Vas-y. Je voulais te dire qu'un routier, après avoir déchargé toute la journée, à mon avis, à la fin de la journée, il est vide, quoi. Oui, mais... Il t'enrôde un sec. Ah, attends, là. Pour toi, il est vide. Ah oui, il est vide. Il t'enrôde un sec. Moi, je pense qu'à mon avis, il repart recharger pour aller vider quelque part d'autre. Ah non, il faut qu'il s'arrête, quand même. Non, non, mais attends. Tu ne peux pas décharger si tu ne récupères pas au moins un quart d'heure ou une demi-heure entre deux décharges. Non, non, mais attends, ce n'est pas un quart d'heure ou une demi-heure. Tu t'épuies si tu ne fais pas une petite pause. Ce n'est pas un quart d'heure. Une demi-heure qui prend, c'est deux heures de repos maximum. Tu vois, donc il faut bien se reposer entre deux décharges. Maximum. OK. OK. Alors, n'importe quoi ? Oui, à part transporter des dindons et des cachalots, je ne vois pas ce qui... Bon, alors, n'importe quoi, c'est terminé. Ce n'est pas méchant. Dindons et cachalots, moi, je t'emmerde. Ce n'est pas pour toi, Gégé. Moi, je t'emmerde. Mais je te kiffe. Je t'emmerde. Hop, terminé pour lui. Bon, allez, hop, au standard. Hop. Non, non, mais c'est bon pour lui. Allez, chute. Standard. C'est pas chute, hein. Merci, c'est chute qui a dit ça. Oh, gamin. Bon, Gégé, c'est bon. Voilà. Voilà. Lui, c'est terminé. Au revoir. Au revoir. Alors, chute. Ah, ben non, je viens de te répondre, Gégé. Je viens de te répondre, mon Gégé. Ah, tu viens de répondre ? Ah, oui, oui. Coup de loup. Tu répètes la question, s'il te plaît ? Allez. Alors, c'est la dernière fois que je répète la question. Que transporte un routier en fin de journée ? Gérard ? Oui. En attendant, il y a un rainbow, le vacancier sur l'IRC, qui te demande quand tu étais routier, t'as été attaqué par le gang des chasseurs de routiers sur l'autoroute. Non. Des mecs qui volent les cargaisons. Ouais. Ça, c'est vrai, ça s'est produit en Russie, je crois. Il y a un routier qui s'est fait... qui s'est fait agresser. Ils lui ont piqué carrément son camion, plus la cargaison, carrément. Ouais, ouais, ouais. Ça coûte cher, un camion ? Un camion, je peux te dire une chose, c'est dommage qu'on n'aille pas, tous là, les routiers, mais un camion, ça vaut plus de 150 000 francs. C'est vrai ? Carrément ? 150 000 francs ? 150 000, hein. Ah bah, ça va. C'est pas trop cher, hein. Ouais, bah, attends, ça dépend, ça dépend ce que tu prends comme camion, hein. Donc, euh... Oui, Rigo ? Excuse-moi, j'avais éteint mon micro. Sinon, il y a Chantelor qui te demande comment fait un routier, puisque tu disais qu'ils s'arrêtent pas... ils s'arrêtent qu'aux aires de repos pour faire leurs besoins, mais comment ils font quand ils ont la diarrhée et qu'ils sont dans leur camion ? Ben, ils peuvent s'arrêter, mais dès qu'ils trouvent une aire de repos, hein. Ben, ça, justement, c'est des questions... Elles vont venir après, les questions, j'ai l'impression qu'internet, ils ont des questions... Non, non, non, non, non, non, non. Attends, euh... Fildar, c'est moi qui... C'est mes débats, donc c'est moi qui commande. Ok. Donc, euh... Là, pour te dire une chose, en fin de compte, on va... Oh ! Oh, t'es pas dans un salon de thé, là ? Eh ! Oh, on n'est pas dans un salon de coiffure, c'est papa-maman, là, hein ! Bon, on s'affirme quand je parle un peu. Alors ? J'ai fermé la porte, alors, ouais. Oh, ça veut dire quoi, là ? Vous jettez dehors et c'est tout ? Ok. Vous allez jeter dehors ? Ouais, tu vas voir, tout à l'heure, toi, je vais te kiffer, moi. Je vais te mettre une bombe dans... Moi, je vais te mettre une bombe, tu vas voir. Une bombe de routier, tu vas voir ce que ça donne. Bon, ouais. Alors ? Je vais te faire une petite marque, mais bon... Fais gaffe ! Alors, on était où, nous ? On parlait de quoi, là ? Euh... Des questions, si on est... Ah, ouais. Ouais, donc, les questions, là, sur Internet, donc, je vous en supplie, répondez aux premières questions, parce que le deuxième... Non, ils répondent pas, ils t'en posent. Bah, ouais, mais c'est la suite. Ça fera le deuxième. Tu vois, il y a Sardine de Marseille qui te demande si t'as déjà posé pour un calendrier de routier. Mais non, mais ça... Ça, là-dessus, non. Moi, je voudrais... Combien qu'on est, maintenant, sur Internet ? Allez. 5288. Oh, ça baissait, là ! Non, non, non. Non, non, non. Non, non, non. 5144, on est. Ah, d'accord. 5200. Ah, d'accord. Euh... Excusez-moi. Ouais ? À la place de n'importe quoi, on accueille Billy. Allô ? Allô, quoi ? Salut, Billy. Salut, Billy. Salut, Billy. Salut, Billy. Salut, Billy. Alors, euh... Bon, la question, que transporte un routier en fin de journée, Billy ? Tu peux répéter la question ? Merde ! Ah, ça va répondre. Non, non, t'es en antenne, là, connard ! Bon, laissez parler le gamin, là. Allez, le gamin, là, accouche. Ouais, moi, je pense qu'il se transporte des cadeaux pour aider le Père Noël. Hein ? Tu vois pas ? Non, mon ami, je pense pas. Non, je pense que le Père Noël, il va se transporter des cadeaux, et voilà. Non, mais ça va, le mec, avec son klaxon de mariage, tranquille ? Ça, c'est un klaxon de routier, ça, hein ? Attends, Billy, tu dégages. Ah, Gérard, Gérard, Gérard ! Au revoir, au revoir, au revoir, au revoir, au revoir ! Allez, euh... Coup de loup. Tu peux répéter la question ? Non. Mais Gérard, Gérard, c'est pas pour toi ! Gérard, attendez, parce que Billy a foutu la merde. Oh là là, oh là là, oh là là, Manu ! Gérard ? Manu ! Gérard, calme-toi, il y a Scone sur l'IRC qui te demande si les conducteurs de J9 font partie des routiers. Alors, J9, c'est des véhicules légers. T'as une tartine ? Non, mais, euh, ça y est, ça... Merci, Cathy. Tu veux une tartine, Gégé ? Tu veux une tartine ou pas ? T'as l'air, je t'en mets tout une tartine, moi ! Tu vas l'avaler ! Ouais, deux, trois tartines, ce serait bien. Tu peux répéter la question ? Oh là là, oh, putain, vous commencez à me casser les couilles, hein ? Allez, on enchaîne. Billy, il a mis la merde, alors on n'a pas entendu. Non, couille de loup ! Ouais, ben, je pense qu'il transporte... d'autres trucs. Tu peux préciser ? Ben, je sais pas, moi, il a déchargé, après, il remballe d'autres machins, et puis, bah, il continue sa tournée. Ah, ben, voilà, enfin ! Ah, ben, alors ! Voilà, enfin, une bonne question ! Bon, je pense qu'on a une bonne réponse, plutôt, ouais. Ben, ouais ! Ben, voilà ce que j'attendais ! Petit piéton ! Petit piéton ! Gérard, t'es beau ! Ta gueule ! Il peut tout transporter ! Allô ? Ben, je sais pas, moi, n'importe quoi ! Tu te reviens un petit peu ? Petit piéton, là ? Ouais. C'est quoi, ça ? C'est un gros piéton ! Allez, dégage-la, allez ! Allez, hop ! Hop, hop, hop, hop, hop ! Euh, Jean-Pulle ! C'est beau ! Jean-Pulle ! Ouais, je suis là, je suis là, je suis là ! Eh ben, je sais pas, c'est pas mal ! Oh, non ! Comme un camion ! Allô ? Oh, là, là, là, là, là, là ! Bon, allez, moi, j'attaque le deuxième, hein ! Hop, terminé ! Attends, j'ai un... Ouais, Rigo ! Il y a... Attends, j'ai un... Voilà, c'est Oxyd sur l'IA3. Qui te demande par où rentre le Père Noël dans les camions, vu qu'il n'y a pas de cheminée ? Le pot, le pot. Par, euh... Au déchagement. Par les portes. Ah, ok. Voilà. Euh, Puldar ! J'aimerais répondre. Puldar ! Il est parti chercher sa tartine. Sinon, Gérard, il y a Turcontine sur l'IA3 qui te demande pourquoi tous les routiers sont-ils vulgaires ? Euh, pourquoi que les routiers sont tous vulgaires, t'en as certains, mais pas tous. Donc, euh... Oui, mais pourquoi ? Non, non. Non, non, il y a... Tous les routiers ne sont pas vulgaires, ça, c'est faux. Ouais, mais pourquoi ils sont vulgaires ? Non, non, non, non, non, non. C'est faux ! Non, non, il y a... Non, mais tu dis pas non quand je te demande pourquoi. Pourquoi ils sont vulgaires ? Voilà. En fin de compte, euh... On n'a jamais été vulgaires vis-à-vis des gens. Non, mais est-ce que vous êtes grossier, alors ? Euh... C'est quoi ? Est-ce que vous êtes grossier ? Euh... Dans quel sens que tu veux... Non, parce qu'il y a aussi le pape, le vrai pape, sur l'IA3, qui me dit que... Un routier, quand tu le regardes, il fait une sale gueule, toujours. Au feu rouge ou sans être en route. Ouais, non, mais attends. On a toujours l'impression qu'un routier, c'est malheureux. Bah ouais. C'est vrai ou pas ? Bah, pourquoi ? Bah, bien sûr, ils sont malheureux. Pourquoi ? Parce qu'ils passent trop de temps sur les routes. Non, mais c'est leur métier. Bah oui, mais... De toute manière, tout le monde a... Comme je l'ai dit, euh... Dans... Dans un best-of, dans ton livre. Non, non, dans un best-of, chacun... Chacun fait... Bois midi à sa porte. Le routier, il a choisi de faire... Faire ça, c'est son boulot. Donc... Faux ! Oh, putain, mais t'as gueule à toi ! J'ai rien dit ? Donc, euh... Les routiers... Ouais. Ont choisi leur boulot, c'est leur... C'est leur métier. Maintenant, s'ils veulent pas faire ça, bah... Ils le font parce qu'ils peuvent rien faire d'autre. Ouais, mais attends. Un routier, s'il choisit, c'est sa vocation. S'il choisit de faire ça, c'est sa vocation. Ouais, donc... Un routier, pour moi, c'est quelqu'un de... Qui est né pour faire de la route. Qui est né pour faire de la route, dans un sens, si tu veux, oui. Mais, en fin de compte, il peut très bien changer, après. Si ça, il peut plus, il peut changer. Ah, il peut faire quoi, des chemins ? Non, mais... Il peut... Il peut changer. Il peut... Il peut se retrouver employé de bureau ou animateur radio. Ah, oui. Comme moi. Ah, oui. Voilà. T'as gueule. Donc, on s'écoute. Euh... Oh, c'est bon. Euh... Oui, alors... Il y a Nassim qui te demande pourquoi tous les routiers ont-ils une moustache ? Si oui, est-ce que cela leur sert d'airbag ? Non. Alors, tous les routiers... Il y a des routiers qui ont des moustaches, mais ça leur sert pas d'airbag pour... Quand ils ont un accident. Donc, voilà la réponse. Sinon, il y a Sardine sur l'IRC qui dit que comme tous les routiers sont des pédés, est-ce que les lesbiennes ont le droit d'être routières ? Ah... Une bonne question. Alors, tous les routiers ne sont pas des pédés. Déjà, une pour commencer. Non. Non. Ça, c'est faux. C'est faux. C'est faux, c'est faux, c'est faux. Voilà, c'est tout. Euh... On s'écoute. Ah, tu m'as posé une question avant quand même qu'il réfléchisse. Alors, que pensez-vous ? Pensez-vous que les routiers sont des vieux cochons ? Non, monsieur. Allez, on s'écoute. Non, non, non. Ah, bah, non, mais vas-y. Ben, couche. Mais ça, mais ton boulot, au lieu de bouffer, là, il devrait être fait. Il devrait être fait. Les numéros de téléphone, l'Internet... Donc, alors, vous pouvez toujours nous appeler au 0870 5000 et 0803 75 000. Non, non, non. C'est pas ça du tout. Quoi ? Dis les numéros correctement. On les dit pas. Attends, je les dis pas. Je les dis pas, abruti. Non, mais les dis pas. Tu dis n'importe quoi. C'est pas ça, le bon numéro. Dis le bon numéro. Quoi ? C'est 0870 5000 et 0803 75 000 ? Non, 0803 08 5000. Eh ben, alors ? Eh ben, t'as qu'à les annoncer, toi. Ben, tu me donnes ta paye. Et Rigo vous attend. Et Rigo, tu peux nous dire combien qu'on est, là ? Ouais, dis-le, dis-le. Ça monte, ça monte. 5 432. Ouais. Aïe, aïe, aïe. J'ai l'impression qu'avant 4 heures du matin, on va aller à 10 000. C'est faux ! Oh, arrête. 4 heures, j'ai fait une barbe, ça va être faux. Alors, on s'écoute les petits poussins avec des verres dans la raie et on se retrouve tout de suite après. Vous venez d'écouter les petits poussins avec... Des verrues. Des verrues dans la raie. Et vous êtes toujours sur pleine radio. Il est 2h19 du matin. Donc, joyeux Noël à tous. Malgré qu'on ne l'a pas assez annoncé. Ah oui, peut-être que je ne l'ai pas assez dit. J'ai dit au moins 200 fois déjà. Ah ouais, mais alors, c'est normal. Donc, ouais, tu voulais dire quoi ? Je voulais dire qu'à la place de Billy, que t'as dégagé sauvagement, on accueille Marcel et c'est un routier. Ah, enfin ! Marcel, bonsoir. D'accord. Salut, Marcel. Bonsoir, c'est bon. Salut, Marcel. Salut, bien. Le 27 ? Oui. Ok. Je t'appelle. Eh, qui c'est qui regarde les textes avoués, là ? Non, mais tu le calmes, là, ou quoi ? J'ai rien à calmer, moi. Non, mais ça va pas. Alors, la question... Ouais. Gérard. Allez, hop. Oh là là ! 5 630,2. Et je salue Ice-T. Ok. Eh ben, on salue tous les gens. Eh, bousclez un peu, là. Il en manque 500, là. On salue tous les gens ? Ok. Alors, on salue... Non, mais... On salue Seb, on salue Tony. On salue... Non, il n'est pas là, il est à Lille. C'est marrant, on le salue quand même. On salue Acta, on salue Canard WC, Chamicha, Chand, Chocapic, Lisenne, Geoffroy, Ouls, Ice-T, je viens de le citer, Le Pape, Malcolm X, Le Vrai, Ressuscité, Miss Lover, Nassim, No Live, Paradox, Sardine, Scorpion, Shun, Symbol, Thanatos, Ben non, c'est... Ça sert à rien, mais bon, c'est pas grave. Titos, Turpentine, Zirt, Keneda, Steph, Redox, Olio, Acide, Inc. Ça y est, c'est bon. C'est bon, Régo. C'est bon, ça y est. Ouais. C'est Marcel. Il y a quelque chose que je comprends pas. Ouais, vas-y. Sur mon ordinateur, je tape www.fr, mais je n'arrive pas à aller sur le Channel Fun Radio. Alors, le Channel Fun Radio, c'est www.frfunradio. D'accord ? Merci, merci. Ok. D'accord. Alors, en de bon entendeur, salut, si tu veux pas participer au débat. Mais bien sûr que si, mais c'était juste pour me renseigner. Bah, et t'es qui, toi ? Je suis Marcel. Bon, bah alors... Alors, pensez-vous que les routiers sont de vieux cochons ? On va demander, ben... Ouais, bah écoute, moi, je suis tout à fait d'accord pour dire que c'est des gros pervers. Ouais. Je crois qu'on peut pas nier quand même que ça se tignole dans les cabines. Et tout à l'heure, il y avait le pape, je crois, sur Internet qui demandait pourquoi il faisait la grimace. Bah, tout simplement parce qu'ils sont concentrés sur leur banlette, c'est tout. D'accord. Ok. Euh... Couille de loup ? Ouais, moi, je pense qu'il y en a plein, ouais. Il faut les voir, ils roulent toute la journée, alors forcément... Non, mais tu peux préciser le point de ta pensée ? Oui. La façon de ma pensée, oui, c'est qu'il y en a. Jérôme ? Euh... Oui, Rigo ? Ouais, il y a Sardine de Marseille sur l'IRC qui te demande si tu peux faire une pause parce qu'il voudrait aller aux toilettes et qu'il a pas la radio aux toilettes. Copyright, copyright. Non, non, euh... Non, non. Pause caca. Non, non, il y a pas de pause. C'est plus de pause, là. Là, la prochaine pause, c'est pas avant 3h. Euh... Non, 2h30, 3h moins le quart, à peu près. Et c'était de qui, le copyright ? Oh, mec, je sais pas, je comprends pas. Bon, ok. C'est pas grave. Euh... Ouais. Euh... Petit Tétron ? Ouais, moi, je trouve que c'est les plus délicieux et à mon avis, ils ont des photos pernos dans leur camion. Ouais. Non, moi, je te démends. Je démends ! Non, Gégé, Gégé. C'est qui ? C'est Mortel. Ouais, bah, pour l'instant, c'est pas toi que je m'adresse. Euh... J'en pulle. J'en pulle une fois, j'en pulle deux fois, j'en pulle trois fois. Au revoir ! Il est là, Gérard. Il est là, si tu croyais. Non, non, si tu croyais pas, tu l'entendrais. Eh, Gérard, crie pas, tu fais mal aux oreilles. Ouais, bah, si tu te fais mal aux oreilles, t'es avec un wetman ? Non, non, non. Non ? T'es avec la main de ma soeur dans la chouette dans ce web ? Ouais... Tu t'en t'en pulls et on cule ta soeur ? Ok, le comique. Alors, j'en pulle. Euh... Bah, je suis d'accord. D'accord. Alors, toi, t'es d'accord sur la question ? C'est tout ce que t'as à me dire ? Euh... Bah, ouais, je suis d'accord avec toi. Ah, bah, c'est bien. Ah, bah, Sardine. C'est bien, si t'es d'accord. Sardine. Sardine. Ouais, Sardine. Ouais, ça fait un moment que je gueule parce que j'étais pas à l'antenne. Ouais. Euh... Ouais, je pense que oui. Je pense que ce sont des gros dégueulasses et qu'ils mettent plein de poupées espagnoles dans leur... Je sais de quoi je parle. Euh... Tu peux préciser le point que t'as pensé ? Bah... En tant qu'agent de l'OT, quand ils prennent leur retrait chez eux, ils mettent des poupées espagnoles sur leur armoire. Et... Voilà. Alors, Marcel ? D'ailleurs, je vais faire aller CTX avec la simile. Il y a tout le monde qui te salue, hein. Non, mais... Tu réponds à la question, s'il te plaît. Bah, en fait... Ouais, bon... Faut pas dire que les routiers sont des pervers. Bon, moi, j'ai quelques magazines. Mais, euh... Ça va pas à plus de 400 pignoles par jour. Donc, voilà, quand même, hein. Au revoir. Le 28, sinon. Ouais, non, mais... Je t'écoute. Il y en a un tout à l'heure... Il y en a un tout à l'heure qui va se prendre une bouteille de coca, ça va lui faire tout drôle. Il va prendre facilement dans la gueule, ouais. Hein ? J'aime pas, Gégé. J'aime pas, Fildar. Gérard, est-ce que t'as mangé le pâté qu'un auditeur t'a offert, là ? Mais qu'est-ce que ça peut te foutre, à toi ? Non, non, parce que j'ai pas... Combien gagne un routier en euros ? N'importe quoi ! Combien gagne un routier en euros ? N'importe quoi ! Manu ! C'est la dernière fois que je te demande de faire ton boulot ! Ok. Sinon, tu sais ce que tu fais. Tu prends tes clics et tes claques, et tu vas avoir ton bébé rose. D'accord. Ok ? Ok. Et on va mettre Sandi à ta place au standard. Ok, mais je commence à ronger, alors. Ouais. Ouais, tu peux, tu peux. C'est de la place, c'est de la place. Tu peux, tu peux. Tu peux commencer à ronger, si ça va pas. C'est de la place, Manu. Non, non, mais tu peux. Attends, attends, merde, le Sandi, d'accord ? C'est de la place, Manu. Ouais, bah attends, toi, tu dégages. Le boulot mystère. Allez, hop. C'est quoi ? Faut vider le studio, là, si t'as bien le rang. Ouais, bah, tu peux commencer à ronger. Bah ouais. Ouais, bah, t'inquiète pas. Tu peux commencer, là. C'est la table. Manu, Manu, Manu. Eh, Manu. Ouais. Tu peux commencer à ronger, je crois. Je suis en train, je suis en train. Tu vas dégager vite fait, bien fait. Enlevez la table dans le couloir, vite. Tu vas vite fait dégager. Ouais, ouais. J'ai l'impression. Ouais. Vite fait, vite fait, hein. Vite, vite, vite. Vite, parce qu'on va mettre Sandi, là. Non, non. Fais de la place, alors. Combien gagne un euro ? Un euro en routier. Combien gagne un routier en euro ? Sandrine. Sandrine. Je sais pas très bien, en fait. Déjà, je connais pas très, très bien ton salaire de routier, donc en euro, je peux pas trop convertir, en fait. Ouais. Alors, je vais te dire une chose, que l'euro, il est à 6,50. Ouais. D'accord ? C'est faux. Oh là là. 6,50. C'est pas moi qui dis ça. Arrête d'halluciner un peu. Toi, tu commences à me les gonfler. Ouais. Donc, Sandrine ? 6,50, tu dis mieux. Alors, le euro, il est à 6,50, hein, Gérard. Oui, il y a Titeuf. Il y a Titeuf sur l'IRC qui te demande dans quel pays il paye en euros. Ah ouais ? Non, mais ça va, toi, si t'as envie de bailler. Non, tu te bailles pas, je fais ah oui. Non, mais attends, parce que j'ai pas trop compris la question. Rigo, tu peux me la... C'est bizarre que Gérard comprenne pas les questions. On te demande. Dans quel pays on paye en euros ? Ben, pour l'instant, l'euro, d'une part... Bon, toi, tu... Tu t'écrases ? D'accord. Ok. Hein ? Pour l'instant, l'euro, il sort qu'à partir de... Ben, nulle part. De 6 jours. Non, putain que... Toi, t'éteins ton micro, je te dis que... Je te dis que tu prends tes clics, etc., que tu passes, tu vas voir ton bébé rose. Ok. Et tu nous fais pas fier. Hein ? Hein ? Donc, l'euro sort pas avant 6 jours. En fait, au début de l'année. Il sort au début de l'année 99. Ouais. C'est-à-dire, pour le premier janvier 99, ce qui va se produire, c'est qu'on va avoir des pièces euros, mais on n'aura pas encore les billets. Parce que les billets sont... Ta gueule ! Merci. Donc, je disais, donc, ça va être en pièces. Les billets seront pas avant 2001, voire 2002. Donc, pour l'instant, ça sera uniquement qu'en pièces. D'accord. En plus, il y a Canada qui dit que c'est faux. Ah bon ? Ben... N'importe quoi ! Eh ben, dans ces cas-là, si c'est faux, qu'elle écoute bien les informations, parce qu'ils arrêtent pas d'en parler, que maintenant, c'est dans moins de 6 jours qu'on a l'euro en pièces. Les billets sont pas avant l'an 2000 ou 2002. Bon, enfin. Bref. Passons. Donc, Marcel. Ouais. Euh... J'étais en antenne. J'étais là, et Manu m'ont calmé, ou je sais pas qui c'était. Non, mais pour l'instant, tu réponds à la question. J'ai pas très bien entendu la question. Justement. Tu réponds... C'est bien que le salaire d'un routier en euros, c'est ça ? Voilà. Ok. Alors, ouais, ça doit être... Ça doit tourner aux alentours de 15, 20 euros, un truc comme ça. Voilà, Michel. Alors, c'est tout à deux. Il y en a un qui entend le calmer, c'est Manu, parce que... Pour l'instant, il est en train de... Il est en train de me foutre du boulot de merde ! Qu'est-ce qu'il fait, Manu ? Bon, Manu... Non, il disait les routes viraux rouges, les heures à éviter, tout ça, pour les bouchons. Ça, c'est du journal en plein débat, ça. Ça doit être intéressant. Non, mais... À part ça, après... Après, il va dire... Ah ouais, mais moi, j'ai fait du bon boulot ! C'est faux. Alors que c'est faux. Pour l'instant, il me fait de la merde. Non, c'est bien, moi, je trouve. Ouais, et qui c'est qui met sa musique, là ? Bah, je sais pas, j'ai pas d'auditeur à l'antenne. Ah non, t'as pas d'auditeur. Ah non, regarde. J'ai pas d'auditeur. Euh, Jean-Pul ! C'est moi, c'est moi ! Jean-Pul ! Y a personne, là. Non, c'est Manu. Regarde, là, c'est là. Regarde. C'est bien Gérard. C'est bien Manu. Il y avait encore de la musique. Non, y a pas de musique. C'est faux. Ils sont tous en attente, là. C'est faux. Tu vois ? Alors, tu me les mets tous en l'air et tu le suites. Allez, Manu ! Mais pas des auditeurs, la musique. Allez, Manu ! Je suis perdu. Jean-Pul ! Oui, c'est moi. Donc, c'est à toi. Euh... - Je vais lui donner un coup de Tokyo Rock en revanche. - 4 euros ? - Oui, mais c'est peu. - A mon avis, ça m'étonnerait. - Ah non ! - Eh, attends, je veux dire... - J'en pull. - Toujours le même rang au gueule. - J'en pull. - Oui, ça sûrement. - Je veux dire une chose, ça m'étonnerait qu'un routier gagne 4 euros, parce que pour 4 euros, il travaillera pour un mec. Bon. Allez, hop. Qu'est-ce qu'il y a, Gérard ? - Tu vas où, là ? - C'est de la faute de fil d'or, encore. - Mais non, justement, reviens. - Gérard ! - Oh là là. - Gérard, attends. Bon, Manu. - Ouais ? - C'est toi qui as foutu la merde, tu vas le chercher. - Ah, ça va pas, non ? - Attends, tu vas le chercher, toi tu combles. Ouais, parce que là, regarde, maintenant, on est... Bon, les auditeurs, vous patientez, parce que là, en fait, Gérard est sorti du studio, je sais pas pourquoi. Attendez, alors, voilà. Non. Assis. Assis, il y a Max et il y a Gérard. Allez, Gérard, assis-toi. Mais tu le calmes. J'ai rien fait, là, Gérard. Non, non, tu ne fais rien, tu ne fais même pas ton boulot. - C'est terminé, toi. - Non, mais c'est bon, je vais le calmer. Je vais le calmer deux secondes. - Non, non, non. - Manu. Tu me demandes de le calmer, tu me demandes pas de le zapper. - Non, non, mais ouais, est-ce qu'on continue pas... - Alors, donc, silence. - Ah... - Manu. Manu. - Ouais, ouais, ouais. - Tu te calmes. - OK. - Non, mais... - Merci, chef, de m'avoir calmé comme ça. Et là, il va être calmé, hein. - Mais je m'en fous, moi. - Mais je m'en fous. Je m'en fous, il fait son boulot correctement. Pas du tout. - Mais pense au gamin défavorisé qui écoute la radio. - Mais attends, il fait un boulot de merde. - T'as fait un peu la cité de la 94. - Mais attends. - T'es un peu le père Noël du 94, toi. - Mais attends, il fait du boulot de merde, là. - C'est quoi, ce bordel ? - Attends, c'est quoi, ce bordel ? Il me reprend même pas. Les auditeurs, il met une message de non. - Non, c'est pas vrai, j'ai un routier. - Non, non, non, il n'y a pas de routier. - Non, c'est tout. - C'est un routier. - Non, c'est un boulot au standard. - Ouais, allez, au standard. - Ah non. - Hop, t'envoies la musique, t'es terminé. Allez, hop, passe ça. Allez, hop, deux heures et demie, pause. Comme on est là jusqu'à quatre heures, pause. Hop, pause. - Pause quoi ? - Pause, je t'envoie un vide. Je t'ai même pas donné le disque. Tu mets, tu l'annonceras. Allez, on fait une pause, allez, hop. On l'annonce après, alors. T'envoies, et c'est tout. D'accord. Alors, donc, on récupère... Qu'est-ce qu'on a ? On a Marcel, pute, couille de loup, petit téton, j'en pue les cendrilles. Bon, vous fermez un peu vos jolles. Oh, putain, mais ta gueule, toi, mec, Gérard ! Oh, Gérard ! Tu me commences à me casser les couilles. Putain, mais, tu vas les calmer, là. Oh, merde ! Gérard ! Gérard ! Gérard ! Je t'avais dit, Fildar, avec tes pauvres sons, là, j'ai tout le monde. T'as l'air égoûté, gros. T'as l'air chiant, les auditeurs, parce que tu regardes les Gérards avec tes mauvais, quoi. T'abuses, Fildar, ils nous ont fait calmer, là. Fildar, honnêtement, arrête. Non, mais... Ah, il y a rien... Ils arrêtent pas, là, mais ils vont te calmer, ou quoi ? Bah oui. Calmez-vous, les auditeurs. Non, non, arrête, arrête. Mais donc, tu l'as arrêté, ok ? Mais quoi ? J'ai rien fait. Mais ça, ça, là ! C'est quoi, là ? Ça, là ! Mais c'est un remix ! Oui, alors ? Oui, alors, c'est toi qui t'amuses ? Mais non, c'est un remix ! C'est un remix de... C'est des remixes de la... Mais moi, ils sont très calmes, les auditeurs, là. Non, mais ça, je vais écouter, je vais surveiller. Le premier qui fait une merde, il jarte ! Ça, c'est un general ball ! Mais attends, mais ça, c'est pas quand même connecté. 5 940, j'aimerais bien qu'on arrive à... 5 60, merde ! 5 60 pour arriver à 6 000, Gérard, à 6 000. Allez ! Allez, bonsoir ! Ça, moi, je commence à me... Rêve de ta gueule ! Ça a tombé par aussi ! Rêve ! Rêve ! Rêve ! Rêve ! Rêve ! Rêve ! Rêve ! C'est bon, Gérard, t'es prêt, là ? Parce que ça fait une heure. Non, il a pété son casque ! Oh, merde ! Non, c'est bon, il le répare, Gérard. Tu peux quand même commencer à... reprendre les auditeurs avec tout ça, hein. Ouais, ouais. C'est bon ? T'es là, encore, hein. Ah, là, là, là. Non, merci, chef. Ah, ouais. Alors, là, je vais écouter le premier qui fait une merde, il dégage. Non, mais là, maintenant, il... Non, mais je vais surveiller Manu, je vais surveiller Manu. Parfait. Eh, ensuite... Oui, je suis là, oui. Petit Delou. Oui ? Petit Téton. Eh, mais merde ! Mais ils sont là, Gérard. Mais attends, il n'est pas là, Jean-Pulle ! Qu'est-ce que tu demandes ? Ah, tu ne m'as pas appelé ? Non, à peine ! Tu me prends pour un con, là ! Ça va pas, non ? Mais non ! Sandrine ! Oui, je suis là. Et Marcel ! Alors, la question... Pensez-vous que les routiers sont des vieux cochons ? Oui. Alors, qui, oui ? Banane. Banane. Attends, Banane, elle sort d'où ? Eh, je ne sais pas quoi elle a à faire ! Je ne sais pas, je ne sais que la tête à gueule ! Je ne sais pas d'où elle sort. Putain de merde ! Je ne sais pas. Tu me fais quoi, là ? Ben, je ne sais pas d'où elle sort, je vais la trouver. Putain, c'est pas vrai, hein ! Eh, merde, il y a un gourmet qui l'a mangé. C'est le pâle qui t'a mangé. Voilà ! Voilà, continue ! Laissez-le dire des conneries ! Ben, c'est toi qui... Oh, tu mets ta cop, là ! Arrête ! Hop, allez hop ! C'est écrasé ! C'est quoi, ce bordel ? C'est quoi ? C'est quoi, ce bruit ? Quel bruit ? Ouais, tu as mon cul ! Oui, je suis là. Salut à tout le 94 et spéciale dédicace à la prison de freine. Allez, hop, dégage pour toi ! Hop, au revoir ! Hop, au revoir ! Ok, Michel ! Hop, écoute Delou ! Ouais ? Tu réponds ? Eh ben, ouais. J'ai déjà répondu tout à l'heure. Non, tu n'as pas répondu à la question. Si ! Alors, ouais, ce sont tous des cochons, ouais. D'accord. Et pourquoi c'est des cochons ? C'est ça qu'il faut savoir. Est-ce qu'il y a un cochon ? Oui, c'est un cochon. Mais pourquoi il est cochon ? Ben, parce qu'ils n'ont rien d'autre à foutre dans leur camion toute la journée. Ouais. Ils pensent à ça. Ouais, mais attends. Tu crois que le routier, il n'en a pas marre de passer... Je ne crois pas en penser au cul, mais je ne crois pas, non. Non, mais tu crois qu'il n'en a pas marre d'être sur la route constamment 24 heures sur 24 en pensant... {{AutoCat}} sghxgu5tzm95ge71gvi97w7w1zby60p Fonctionnement d'un ordinateur/Les processeurs 8 bits et moins 0 82384 765682 762877 2026-05-01T14:20:37Z Mewtow 31375 /* Les processeurs 8/16 bits à architecture Harvard */ 765682 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Un exemple de système 8 bits est celui des '''microcontrôleurs PIC'''. La gamme des microcontrôleurs PIC est très vaste, et regroupe des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits. Ils incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Ce sont des architectures à accumulateur, avec une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu flou quand on utilise une architecture à accumulateur. [[File:DocPIC16F84 all.png|centre|vignette|upright=2|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 3fs29b320ncpxij9xl5epmtvmd6kcuj 765683 765682 2026-05-01T14:23:12Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765683 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Un exemple de système 8 bits est celui des '''microcontrôleurs PIC'''. La gamme des microcontrôleurs PIC est très vaste, et regroupe des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits. Ils incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Ils intègrent une pile d'appel d'environ 8 adresses de retour. Ce sont des architectures à accumulateur, avec une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu flou quand on utilise une architecture à accumulateur. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> p5miy2pr498ei2opr9zb0kgzp6re5ji 765684 765683 2026-05-01T14:38:53Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765684 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Un exemple de système 8 bits est celui des '''microcontrôleurs PIC'''. La gamme des microcontrôleurs PIC est très vaste, et regroupe des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits. Ils incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu flou quand on utilise une architecture à accumulateur. Ce sont des architectures à accumulateur, avec une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Un détail assez original est que tous les registres précédents, sauf l'accumulateur, sont mappés en mémoire ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Ils gèrent l'adressage absolu et indirect. L'adressage absolu est celui où l'adresse est intégrée dans l'instruction, et il est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour le reste, les instructions se limitent à des additions/soustractions, des opérations bit à bit, des instructions MOV, ainsi que des opérations pour tester/masquer un bit dans une opérande. On peut cependant noter la présence d'une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur, ainsi que d'instructions d'incrémentation et de décrémentation. Ces dernières sont au nombre de trois : une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 1llgnyu5md76qdtw4u60hkbq3tw2lnx 765685 765684 2026-05-01T14:44:04Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765685 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Un exemple de système 8 bits est celui des '''microcontrôleurs PIC'''. La gamme des microcontrôleurs PIC est très vaste, et regroupe des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits. Ils incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu flou quand on utilise une architecture à accumulateur. Ce sont des architectures à accumulateur, avec une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Un détail assez original est que tous les registres précédents, sauf l'accumulateur, sont mappés en mémoire ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières sont au nombre de trois : une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 02tacny4uzqh4oohqtoks2hr5zz7adn 765686 765685 2026-05-01T15:00:09Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765686 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Un exemple de système 8 bits est celui des '''microcontrôleurs PIC'''. La gamme des microcontrôleurs PIC est très vaste, et regroupe des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu flou quand on utilise une architecture à accumulateur. Ce sont des architectures à accumulateur, avec une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] : Les PIC 18 peuvent adresser plus de 156 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 5f4xkewaf1njlsdqht2ai8j8m9hvgp9 765687 765686 2026-05-01T15:08:32Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765687 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Un exemple de système 8 bits est celui des '''microcontrôleurs PIC'''. La gamme des microcontrôleurs PIC est très vaste, et regroupe des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu floue. Cependant, je préfère parler de SRAM que de banc de registre, pour une raison simple : la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser l'absence de ports de lecture/écriture sur la SRAM, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Les concepteurs du processeur auraient pu rajouter un second port de lecture sur la SRAM, ce qui en aurait fait un banc de registre classique, mais ils ont préféré économiser des transistors. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] : Les PIC 18 peuvent adresser plus de 156 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> nurzue5m8a9udo0kbbfyzpv0nzvn7jk 765688 765687 2026-05-01T15:11:59Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765688 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Un exemple de système 8 bits est celui des '''microcontrôleurs PIC'''. La gamme des microcontrôleurs PIC est très vaste, et regroupe des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu floue. Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] : Les PIC 18 peuvent adresser plus de 156 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> ncensdynerjtdl2vyoc2eb0y2xe8c9w 765689 765688 2026-05-01T15:15:34Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765689 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu floue. Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] : Les PIC 18 peuvent adresser plus de 156 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> q5vfytiindy4tt0fgomfsozi6iz312q 765690 765689 2026-05-01T15:44:37Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765690 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu floue. Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. Pour l'adressage indirect, les PIC intègrent un registre d'adresse dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est copiée dans un registre INDR, qui sert de registre d’interfaçage mémoire avec le bus de données. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Ces modèles plus avancés ajoutent aussi des instructions LOAD/STORE avec les modes d'adressage à post- ou pré-incrément/décrément. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> dob16fjaqoef0wle95igib44tzzyh5x 765691 765690 2026-05-01T15:51:07Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765691 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu floue. Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. Pour l'adressage indirect, les PIC intègrent un registre d'adresse dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est copiée dans un registre INDR, qui sert de registre d’interfaçage mémoire avec le bus de données. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE avec les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage". Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 4icja6b3jgvcr91sp6qq1fztax8v2yz 765692 765691 2026-05-01T16:46:55Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765692 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu floue. Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. [[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. Pour l'adressage indirect, les PIC intègrent un registre d'adresse dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est copiée dans un registre INDR, qui sert de registre d’interfaçage mémoire avec le bus de données. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE avec les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage". Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> rh4byppzg7x3glj3j5sfbgnsze9bejl 765693 765692 2026-05-01T16:47:34Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765693 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu floue. Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. [[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. Pour l'adressage indirect, les PIC intègrent un registre d'adresse dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est copiée dans un registre INDR, qui sert de registre d’interfaçage mémoire avec le bus de données. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE avec les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage". Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> g5yaoiw5fa78n0cvdrohvqgfon6mkb5 765694 765693 2026-05-01T16:50:38Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765694 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu floue. Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. Pour l'adressage indirect, les PIC intègrent un registre d'adresse dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est copiée dans un registre INDR, qui sert de registre d’interfaçage mémoire avec le bus de données. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE avec les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage". Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> cnds9da0wrwig8qty56yey44czjk4r9 765695 765694 2026-05-01T16:54:38Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765695 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire RAM des microcontrôleurs PIC est très petite, elle dépasse rarement la centaine d'adresse. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu floue. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. Pour l'adressage indirect, les PIC intègrent un registre d'adresse dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est copiée dans un registre INDR, qui sert de registre d’interfaçage mémoire avec le bus de données. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE avec les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage". Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 8u4r2079ci1ow48o34rn0ii7ex8kv4d 765696 765695 2026-05-01T16:55:59Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765696 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu floue. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Ce dernier est très important, vu qu'il est nécessaire pour les additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. Pour l'adressage indirect, les PIC intègrent un registre d'adresse dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est copiée dans un registre INDR, qui sert de registre d’interfaçage mémoire avec le bus de données. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE avec les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage". Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 7yazsz3tr55dd2jt6i4cywc1q8msqna 765697 765696 2026-05-01T16:58:37Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765697 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu floue. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. Pour l'adressage indirect, les PIC intègrent un registre d'adresse dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est copiée dans un registre INDR, qui sert de registre d’interfaçage mémoire avec le bus de données. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE avec les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage". Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> mpjvvjuxx4uaczos8grpjqt35kx6s1f 765698 765697 2026-05-01T16:59:27Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765698 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu floue. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Les PIC incorporent une pile d'appel allant de 2 à 8 niveaux, suivant les modèles. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les PIC gèrent l'adressage absolu et indirect. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Pour l'adressage indirect, les PIC intègrent un registre d'adresse dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est copiée dans un registre INDR, qui sert de registre d’interfaçage mémoire avec le bus de données. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE avec les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage". Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> fwkkclsyzn2aj5jdepxqlvozlb9bm8p 765699 765698 2026-05-01T17:03:56Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765699 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais il s'agit bien d'une mémoire SRAM séparée. Simplement, la documentation des PIC qualifie cette mémoire SRAM de "registres", et il faut admettre que la différence entre banc de registre et SRAM séparée est un peu floue. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Les PIC incorporent une pile d'appel allant de 2 à 8 niveaux, suivant les modèles. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Le registre d'état contient un registre séparé pour la retenue de l'addition/soustraction. Un détail assez original est que les registres précédents sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 93metw8hgtk8fcx4tvk9s8ioxtjnrhq 765700 765699 2026-05-01T17:14:41Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765700 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Les PIC incorporent une pile d'appel allant de 2 à 8 niveaux, suivant les modèles. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. La plupart des modèles n'a pas d'instruction MOV pour faire une copie entre deux registres, elle n'a été intégrée que sur les modèles haute performance. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> b3b70chx7plq5yqtt8qm4wfjqeb7z37 765701 765700 2026-05-01T17:15:42Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765701 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Les PIC incorporent une pile d'appel allant de 2 à 8 niveaux, suivant les modèles. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. La plupart des modèles n'a pas d'instruction MOV pour faire une copie entre deux registres, elle n'a été intégrée que sur les modèles haute performance. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> r3tal8bxy2tqsj3y84juczm36too0vf 765702 765701 2026-05-01T17:25:52Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765702 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Les PIC incorporent une pile d'appel allant de 2 à 8 niveaux, suivant les modèles. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. La plupart des modèles n'a pas d'instruction MOV pour faire une copie entre deux registres, elle n'a été intégrée que sur les modèles haute performance. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="2" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="2" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="2" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="2" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="2" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> f8u3jute1llvcmtn2th49xkaaeq3u06 765703 765702 2026-05-01T17:39:01Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765703 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Les PIC incorporent une pile d'appel allant de 2 à 8 niveaux, suivant les modèles. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. La plupart des modèles n'a pas d'instruction MOV pour faire une copie entre deux registres, elle n'a été intégrée que sur les modèles haute performance. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | 100 || colspan="2" | Adresse mémoire || CALL || Appel de fonction |- | 100 || colspan="2" | Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM ! colspan="5" | le bit d indique la destination : accumulateur ou adresse mémoire |- | 0000001 || colspan="2" | Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | 000001d || rowspan="2" colspan="2" | Adresse mémoire || rowspan="2" | MOVWF || rowspan="2" | Met à zéro la destination (adresse ou registre) |- | 000001d || colspan="2" | Adresse mémoire || SUBWF || Soustraction |- | 000010d|| colspan="2" | Adresse mémoire || DECF || Décrémentation |- | 000100d|| colspan="2" | Adresse mémoire || IORWF || OU bit à bit |- | 000101d|| colspan="2" | Adresse mémoire || ANDWF || ET bit à bit |- | 000110d || colspan="2" | Adresse mémoire || XORWF || XOR bit à bit |- | 000111d || colspan="2" | Adresse mémoire || ADDWF VWF || Addition |- | 001000d || colspan="2" | Adresse mémoire || MOVF || LOAD |- | 001001d || colspan="2" | Adresse mémoire || COMF || NOT bit à bit |- | 001010d || colspan="2" | Adresse mémoire || INCF || Incrémentation |- | 001011d || colspan="2" | Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | 001100d || colspan="2" | Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | 001101d || colspan="2" | Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | 001110d || colspan="2" | Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | 001111d || colspan="2" | Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> jhbq48nt76mjhohb32olaalel0dfdau 765704 765703 2026-05-01T17:42:11Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765704 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Les PIC incorporent une pile d'appel allant de 2 à 8 niveaux, suivant les modèles. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. La plupart des modèles n'a pas d'instruction MOV pour faire une copie entre deux registres, elle n'a été intégrée que sur les modèles haute performance. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | 100 || colspan="2" | Adresse mémoire || CALL || Appel de fonction |- | 100 || colspan="2" | Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- ! colspan="5" | le bit d indique la destination : accumulateur ou adresse mémoire |- | 0000001 || colspan="2" | Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | 000001d || rowspan="2" colspan="2" | Adresse mémoire || rowspan="2" | MOVWF || rowspan="2" | Met à zéro la destination (adresse ou registre) |- | 000001d || colspan="2" | Adresse mémoire || SUBWF || Soustraction |- | 000010d|| colspan="2" | Adresse mémoire || DECF || Décrémentation |- | 000100d|| colspan="2" | Adresse mémoire || IORWF || OU bit à bit |- | 000101d|| colspan="2" | Adresse mémoire || ANDWF || ET bit à bit |- | 000110d || colspan="2" | Adresse mémoire || XORWF || XOR bit à bit |- | 000111d || colspan="2" | Adresse mémoire || ADDWF VWF || Addition |- | 001000d || colspan="2" | Adresse mémoire || MOVF || LOAD |- | 001001d || colspan="2" | Adresse mémoire || COMF || NOT bit à bit |- | 001010d || colspan="2" | Adresse mémoire || INCF || Incrémentation |- | 001011d || colspan="2" | Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | 001100d || colspan="2" | Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | 001101d || colspan="2" | Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | 001110d || colspan="2" | Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | 001111d || colspan="2" | Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | 1100xx || colspan="2" | Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | 1101xx || colspan="2" | Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | 111000 || colspan="2" | Constante immédiate (8bits) || IORLW || OU |- | 111001 || colspan="2" | Constante immédiate (8bits) || ANDLW || ET |- | 111010 || colspan="2" | Constante immédiate (8bits) || XORLW || XOR |- | 11110x || colspan="2" | Constante immédiate (8bits) || SUBLW || Soustraction |- | 11111x || colspan="2" | Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> tsoh3wp8zzlv15f9iw5j0yyrbx84fr4 765705 765704 2026-05-01T17:42:33Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765705 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Les PIC incorporent une pile d'appel allant de 2 à 8 niveaux, suivant les modèles. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. La plupart des modèles n'a pas d'instruction MOV pour faire une copie entre deux registres, elle n'a été intégrée que sur les modèles haute performance. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | 100 || colspan="2" | Adresse mémoire || CALL || Appel de fonction |- | 100 || colspan="2" | Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- ! colspan="5" | le bit d indique la destination : accumulateur ou adresse mémoire |- | 0000001 || colspan="2" | Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | 000001d || colspan="2" | Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | 000001d || colspan="2" | Adresse mémoire || SUBWF || Soustraction |- | 000010d|| colspan="2" | Adresse mémoire || DECF || Décrémentation |- | 000100d|| colspan="2" | Adresse mémoire || IORWF || OU bit à bit |- | 000101d|| colspan="2" | Adresse mémoire || ANDWF || ET bit à bit |- | 000110d || colspan="2" | Adresse mémoire || XORWF || XOR bit à bit |- | 000111d || colspan="2" | Adresse mémoire || ADDWF VWF || Addition |- | 001000d || colspan="2" | Adresse mémoire || MOVF || LOAD |- | 001001d || colspan="2" | Adresse mémoire || COMF || NOT bit à bit |- | 001010d || colspan="2" | Adresse mémoire || INCF || Incrémentation |- | 001011d || colspan="2" | Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | 001100d || colspan="2" | Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | 001101d || colspan="2" | Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | 001110d || colspan="2" | Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | 001111d || colspan="2" | Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | 1100xx || colspan="2" | Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | 1101xx || colspan="2" | Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | 111000 || colspan="2" | Constante immédiate (8bits) || IORLW || OU |- | 111001 || colspan="2" | Constante immédiate (8bits) || ANDLW || ET |- | 111010 || colspan="2" | Constante immédiate (8bits) || XORLW || XOR |- | 11110x || colspan="2" | Constante immédiate (8bits) || SUBLW || Soustraction |- | 11111x || colspan="2" | Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 4t8r909b6wd09df8vk3ewu8tlxixl8a 765706 765705 2026-05-01T17:43:25Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765706 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Les PIC incorporent une pile d'appel allant de 2 à 8 niveaux, suivant les modèles. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. La plupart des modèles n'a pas d'instruction MOV pour faire une copie entre deux registres, elle n'a été intégrée que sur les modèles haute performance. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | 100 || colspan="2" | Adresse mémoire || CALL || Appel de fonction |- | 100 || colspan="2" | Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit d indique la destination : accumulateur ou adresse mémoire''. |- | 0000001 || colspan="2" | Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | 000001d || colspan="2" | Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | 000001d || colspan="2" | Adresse mémoire || SUBWF || Soustraction |- | 000010d|| colspan="2" | Adresse mémoire || DECF || Décrémentation |- | 000100d|| colspan="2" | Adresse mémoire || IORWF || OU bit à bit |- | 000101d|| colspan="2" | Adresse mémoire || ANDWF || ET bit à bit |- | 000110d || colspan="2" | Adresse mémoire || XORWF || XOR bit à bit |- | 000111d || colspan="2" | Adresse mémoire || ADDWF VWF || Addition |- | 001000d || colspan="2" | Adresse mémoire || MOVF || LOAD |- | 001001d || colspan="2" | Adresse mémoire || COMF || NOT bit à bit |- | 001010d || colspan="2" | Adresse mémoire || INCF || Incrémentation |- | 001011d || colspan="2" | Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | 001100d || colspan="2" | Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | 001101d || colspan="2" | Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | 001110d || colspan="2" | Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | 001111d || colspan="2" | Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | 1100xx || colspan="2" | Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | 1101xx || colspan="2" | Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | 111000 || colspan="2" | Constante immédiate (8bits) || IORLW || OU |- | 111001 || colspan="2" | Constante immédiate (8bits) || ANDLW || ET |- | 111010 || colspan="2" | Constante immédiate (8bits) || XORLW || XOR |- | 11110x || colspan="2" | Constante immédiate (8bits) || SUBLW || Soustraction |- | 11111x || colspan="2" | Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> lgevf3szixce629ygflom34s47o4x1j 765707 765706 2026-05-01T17:43:47Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765707 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Les PIC incorporent une pile d'appel allant de 2 à 8 niveaux, suivant les modèles. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. La plupart des modèles n'a pas d'instruction MOV pour faire une copie entre deux registres, elle n'a été intégrée que sur les modèles haute performance. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | 100 || colspan="2" | Adresse mémoire || CALL || Appel de fonction |- | 100 || colspan="2" | Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | 0000001 || colspan="2" | Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | 000001d || colspan="2" | Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | 000001d || colspan="2" | Adresse mémoire || SUBWF || Soustraction |- | 000010d|| colspan="2" | Adresse mémoire || DECF || Décrémentation |- | 000100d|| colspan="2" | Adresse mémoire || IORWF || OU bit à bit |- | 000101d|| colspan="2" | Adresse mémoire || ANDWF || ET bit à bit |- | 000110d || colspan="2" | Adresse mémoire || XORWF || XOR bit à bit |- | 000111d || colspan="2" | Adresse mémoire || ADDWF VWF || Addition |- | 001000d || colspan="2" | Adresse mémoire || MOVF || LOAD |- | 001001d || colspan="2" | Adresse mémoire || COMF || NOT bit à bit |- | 001010d || colspan="2" | Adresse mémoire || INCF || Incrémentation |- | 001011d || colspan="2" | Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | 001100d || colspan="2" | Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | 001101d || colspan="2" | Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | 001110d || colspan="2" | Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | 001111d || colspan="2" | Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | 1100xx || colspan="2" | Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | 1101xx || colspan="2" | Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | 111000 || colspan="2" | Constante immédiate (8bits) || IORLW || OU |- | 111001 || colspan="2" | Constante immédiate (8bits) || ANDLW || ET |- | 111010 || colspan="2" | Constante immédiate (8bits) || XORLW || XOR |- | 11110x || colspan="2" | Constante immédiate (8bits) || SUBLW || Soustraction |- | 11111x || colspan="2" | Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> ksy3ij30ix1z5g1ka5yw73ufrkv3nhv 765708 765707 2026-05-01T17:45:33Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765708 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bit aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits incorporent une mémoire RAM très petite, ainsi qu'une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Les PIC incorporent une pile d'appel allant de 2 à 8 niveaux, suivant les modèles. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Le processeur de ces microcontrôleurs a un jeu d'instruction propriétaire, le jeu d'instruction PIC. Les instructions PIC sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. La plupart des modèles n'a pas d'instruction MOV pour faire une copie entre deux registres, elle n'a été intégrée que sur les modèles haute performance. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> e3s9caanpn8ix10q6a3u9brbf2cqdp6 765709 765708 2026-05-01T18:00:00Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765709 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Les PIC incorporent une pile d'appel allant de 2 à 8 niveaux, suivant les modèles. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction. Par exemple, il faut faire en sorte d'utiliser des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. le fait d'utiliser une architecture à accumulateur, ainsi qu'une RAM très petite aide grandement à avoir des instructions très ourtes. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. La plupart des modèles n'a pas d'instruction MOV pour faire une copie entre deux registres, elle n'a été intégrée que sur les modèles haute performance. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 80w9m8a55pgcud9yh9nebvcuu2maicm 765710 765709 2026-05-01T18:08:37Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765710 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Les PIC incorporent une pile d'appel allant de 2 à 8 niveaux, suivant les modèles. Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, la pile d'appel, et les registres d'entrée-sortie. Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Les instructions se limitent à des additions/soustractions, des opérations bit à bit,des branchements, des instructions LOAD/STORE, ainsi que des opérations de manipulation de bit. Il y a une instruction pour mettre une adresse à zéro, qui peut aussi mettre à zéro l’accumulateur. La plupart des modèles n'a pas d'instruction MOV pour faire une copie entre deux registres, elle n'a été intégrée que sur les modèles haute performance. Pour ce qui est des branchements, les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Par contre, ils ont des branchements pour les appels et retour de fonction. Mieux que ça, ils intègrent une pile d'appel d'environ 8 adresses de retour. Pour donner une idée, l'adresse de retour est encodée sur 10 bits sur les PIC16F84. Pour les instructions de manipulation de bit, il y a des instructions pour tester/masquer un bit dans une opérande, 4 en tout ( mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0). Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les PIC ont aussi des instructions d'incrémentation et de décrémentation, un peu spéciales. Ces dernières regroupent : une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> e3ywmzdjies88n93sly81hjfc7numr0 765711 765710 2026-05-01T18:26:35Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765711 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===L'usage d'une architecture Harvard modifiée : les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> h9yr2der15hxeelk3odth2pxthdca0p 765712 765711 2026-05-01T19:01:13Z Mewtow 31375 /* L'usage d'une architecture Harvard modifiée : les consoles 8 bits */ 765712 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs de l'époque intégraient parfois les 256 octets de RAM directement dans le processeur. Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela éliminait le bus d'adresse des données et ne laissait que le bus d'adresse pour la ROM. On économisait ainsi beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Mais cela sera plus clair avec un exemple. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Les consoles 8 bits=== Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Les consoles de jeu utilisaient beaucoup de stratagème. L'exemple type est celui des consoles 8 bits avec des graphismes en 2D. La cartouche de jeu contenait une ROM, qui mémorisait le code du jeu, les niveaux, les sprites et autres données graphiques. Leur carte graphique lisait directement les ''sprites'' depuis la mémoire ROM, sans avoir à les charger en mémoire vidéo. La mémoire vidéo se contentait de mémoriser le reste des informations graphiques, ainsi que des pointeurs vers les ''sprites'' en ROM. En conséquence, les consoles 8 bits n'avaient pas besoin de beaucoup de RAM, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. A l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 0nxny231kzyf6o5wzdwx0smfoi2f2rc 765713 765712 2026-05-01T19:07:01Z Mewtow 31375 /* Les processeurs 8/16 bits à architecture Harvard */ 765713 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> ml86tlufwdwlscm3jtniuwpca4ujrnu 765714 765713 2026-05-01T19:08:57Z Mewtow 31375 /* Les processeurs 8/16 bits à architecture Harvard */ 765714 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 6s502nv7iof3n8bg7tyb83n9z0glxzs 765715 765714 2026-05-01T19:18:41Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765715 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, de la mémoire ROM, une RAM de 128 octets, des ''timers'', et de nombreuses entrée-sorties. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Microcontroller 8051.gif|centre|vignette|upright=2|Microcontrôleur 8051]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> gbxx5yatxt2znim7qmtot296ov40ena 765716 765715 2026-05-01T19:27:33Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765716 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, de la mémoire ROM, une RAM de 128 à 256 octets, des ''timers'', et de nombreuses entrées-sorties. Il est relié à 4 ports sur lesquels il peut lire ou écrire 8 bits par port. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Il supporte des interruptions. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Microcontroller 8051.gif|centre|vignette|upright=2.5|Microcontrôleur 8051]] [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect, et j'en passe. Mais il y a quelques différences. La première est que le processeur supporte les opérations de multiplications et de divisions. Une autre particularité est que le processeur incorpore une unité de calcul de 1 bit. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM, dans 144 adresses prédéterminées. [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> lkeujvtha5wux596u4wfk96gept96cm 765717 765716 2026-05-01T19:33:35Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765717 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, de la mémoire ROM, une RAM de 128 à 256 octets, des ''timers'', et de nombreuses entrées-sorties. Il est relié à 4 ports sur lesquels il peut lire ou écrire 8 bits par port. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Il supporte des interruptions. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Microcontroller 8051.gif|centre|vignette|upright=2.5|Microcontrôleur 8051]] [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect, et j'en passe. Pour les registres du processeur, 32 registres sont mappés en mémoire RAM, à savoir qu'on y accéde en lisant les 32 premières adresses. Mais il y a quelques différences. La première est que le processeur supporte les opérations de multiplications et de divisions. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, qui sont tous bit-adressables. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Il en est de même avec 18 adresses de la mémoire SRAM, ce qui permet d'adresser 144 bits (18 adresses * 8 bits par octet adressé). [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] Avec ce qu'on vient de dire, on peut donner la ''memory map'' de ce microcontroleur, pour la SRAM. Les 32 premières adresses sont réservés aux registres du processeur, à l'exception de quelques registres. Les 18 adresses suivantes sont adressables bit par bit, ou octet par octet. L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Le reste est de la mémoire RAM adressable non-affectée. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> ir70ja37rcwa42jvym586i6vc2tmk1l 765721 765717 2026-05-01T20:09:47Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765721 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, de la mémoire ROM, une RAM de 128 octets, des ''timers'', et de nombreuses entrées-sorties. Il est relié à 4 ports sur lesquels il peut lire ou écrire 8 bits par port. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Il supporte des interruptions. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Microcontroller 8051.gif|centre|vignette|upright=2.5|Microcontrôleur 8051]] [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect, un espace d'adressage séparé pour les entrées-sorties et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De plus, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, qui sont tous bit-adressables. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Il en est de même avec 18 adresses de la mémoire SRAM, ce qui permet d'adresser 144 bits (18 adresses * 8 bits par octet adressé). [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] Les registres du processeur sont mappés en mémoire RAM, y compris l'accumulateur, le registre d'état, le ''program counter'', et bien d'autres. Par contre, ils sont placés de manière à ne pas remplacer de la mémoire RAM. Pour comprendre comment, faisons une remarque : le processeur gère nativement des adresses de 8 bits, mais a 128 octets de SRAM. L'idée est de placer les registres dans les 128 octets de poids fort, au sommet de l'espace d'adressage. D'ailleurs, les entrées-sorties sont mappées dans cette portion de l'espace d'adressage. Avec ce qu'on vient de dire, on peut donner la ''memory map'' de ce microcontroleur, pour la SRAM. Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont adressables bit par bit, ou octet par octet. L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 064ykdb8ti4go77f9vqm7jchj87mhax 765722 765721 2026-05-01T20:12:16Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765722 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, de la mémoire ROM, une RAM de 128 octets, des ''timers'', et de nombreuses entrées-sorties. Il est relié à 4 ports sur lesquels il peut lire ou écrire 8 bits par port. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Il supporte des interruptions. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Microcontroller 8051.gif|centre|vignette|upright=2.5|Microcontrôleur 8051]] [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect, un espace d'adressage séparé pour les entrées-sorties et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De plus, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, qui sont tous bit-adressables. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Il en est de même avec 18 adresses de la mémoire SRAM, ce qui permet d'adresser 144 bits (18 adresses * 8 bits par octet adressé). [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] Les registres du processeur sont mappés en mémoire RAM, y compris l'accumulateur, le registre d'état, le ''program counter'', et bien d'autres. Par contre, ils sont placés de manière à ne pas remplacer de la mémoire RAM. Pour comprendre comment, faisons une remarque : le processeur gère nativement des adresses de 8 bits, mais a 128 octets de SRAM. L'idée est de placer les registres dans les 128 octets de poids fort, au sommet de l'espace d'adressage. D'ailleurs, les entrées-sorties sont mappées dans cette portion de l'espace d'adressage. Avec ce qu'on vient de dire, on peut donner la ''memory map'' de ce microcontroleur, pour la SRAM. Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont adressables bit par bit, ou octet par octet. L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que l'accumulateur est mappé dedans, de même que le registre d'état PSW et le ''program counter'' IP. Les ports d'entrée-sortie sont aussi mappés dedans. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> ttlis9ngaw9awwydls1odtduxsre20s 765723 765722 2026-05-01T20:13:30Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765723 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, de la mémoire ROM, une RAM de 128 octets, des ''timers'', et de nombreuses entrées-sorties. Il est relié à 4 ports sur lesquels il peut lire ou écrire 8 bits par port. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Il supporte des interruptions. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Microcontroller 8051.gif|centre|vignette|upright=2.5|Microcontrôleur 8051]] [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect, un espace d'adressage séparé pour les entrées-sorties et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De plus, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, qui sont tous bit-adressables. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Il en est de même avec 18 adresses de la mémoire SRAM, ce qui permet d'adresser 144 bits (18 adresses * 8 bits par octet adressé). [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] Les registres du processeur sont mappés en mémoire RAM, y compris l'accumulateur, le registre d'état, le ''program counter'', et bien d'autres. Par contre, ils sont placés de manière à ne pas remplacer de la mémoire RAM. Pour comprendre comment, faisons une remarque : le processeur gère nativement des adresses de 8 bits, mais a 128 octets de SRAM. L'idée est de placer les registres dans les 128 octets de poids fort, au sommet de l'espace d'adressage. D'ailleurs, les entrées-sorties sont mappées dans cette portion de l'espace d'adressage. Avec ce qu'on vient de dire, on peut donner la ''memory map'' de ce microcontroleur, pour la SRAM. Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont adressables bit par bit, ou octet par octet. L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que l'accumulateur est mappé dedans, de même que le registre d'état PSW et le ''program counter'' IP. Les ports d'entrée-sortie sont aussi mappés dedans. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 8ybo9i63m86at7gnnsknhg7wy2g0823 765724 765723 2026-05-01T20:17:50Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765724 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, de la mémoire ROM, une RAM de 128 octets, des ''timers'', et de nombreuses entrées-sorties. Il est relié à 4 ports sur lesquels il peut lire ou écrire 8 bits par port. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Il supporte des interruptions. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Microcontroller 8051.gif|centre|vignette|upright=2.5|Microcontrôleur 8051]] [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De plus, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris l'accumulateur, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Pour comprendre comment, faisons une remarque : le processeur gère nativement des adresses de 8 bits, mais a 128 octets de SRAM. L'idée est de placer les registres dans les 128 octets de poids fort, au sommet de l'espace d'adressage. D'ailleurs, les entrées-sorties sont mappées dans cette portion de l'espace d'adressage. Avec ce qu'on vient de dire, on peut donner la ''memory map'' de ce microcontroleur, pour la SRAM. Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont adressables bit par bit, ou octet par octet. L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que l'accumulateur est mappé dedans, de même que le registre d'état PSW et le ''program counter'' IP. Les ports d'entrée-sortie sont aussi mappés dedans. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, qui sont tous bit-adressables. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Il en est de même avec 18 adresses de la mémoire SRAM, ce qui permet d'adresser 144 bits (18 adresses * 8 bits par octet adressé). [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 9xmj3fher69agslvv6mm4hbfcleazrq 765725 765724 2026-05-01T20:18:48Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765725 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, de la mémoire ROM, une RAM de 128 octets, des ''timers'', et de nombreuses entrées-sorties. Il est relié à 4 ports sur lesquels il peut lire ou écrire 8 bits par port. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Il supporte des interruptions. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Microcontroller 8051.gif|centre|vignette|upright=2.5|Microcontrôleur 8051]] [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris l'accumulateur, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Pour comprendre comment, faisons une remarque : le processeur gère nativement des adresses de 8 bits, mais a 128 octets de SRAM. L'idée est de placer les registres dans les 128 octets de poids fort, au sommet de l'espace d'adressage. D'ailleurs, les entrées-sorties sont mappées dans cette portion de l'espace d'adressage. Avec ce qu'on vient de dire, on peut donner la ''memory map'' de ce microcontroleur, pour la SRAM. Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont adressables bit par bit, ou octet par octet. L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que l'accumulateur est mappé dedans, de même que le registre d'état PSW et le ''program counter'' IP. Les ports d'entrée-sortie sont aussi mappés dedans. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, qui sont tous bit-adressables. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Il en est de même avec 18 adresses de la mémoire SRAM, ce qui permet d'adresser 144 bits (18 adresses * 8 bits par octet adressé). [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> sxduz4vrz6eaayy5wl2brqtqa0kdwcu 765726 765725 2026-05-01T20:19:38Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765726 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, de la mémoire ROM, une RAM de 128 octets, des ''timers'', et de nombreuses entrées-sorties. Il est relié à 4 ports sur lesquels il peut lire ou écrire 8 bits par port. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Il supporte des interruptions. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris l'accumulateur, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Pour comprendre comment, faisons une remarque : le processeur gère nativement des adresses de 8 bits, mais a 128 octets de SRAM. L'idée est de placer les registres dans les 128 octets de poids fort, au sommet de l'espace d'adressage. D'ailleurs, les entrées-sorties sont mappées dans cette portion de l'espace d'adressage. Avec ce qu'on vient de dire, on peut donner la ''memory map'' de ce microcontroleur, pour la SRAM. Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont adressables bit par bit, ou octet par octet. L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que l'accumulateur est mappé dedans, de même que le registre d'état PSW et le ''program counter'' IP. Les ports d'entrée-sortie sont aussi mappés dedans. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, qui sont tous bit-adressables. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Il en est de même avec 18 adresses de la mémoire SRAM, ce qui permet d'adresser 144 bits (18 adresses * 8 bits par octet adressé). [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> jqo4prqxjoqw0t10cylq48cb17bdql2 765727 765726 2026-05-01T20:20:50Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765727 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, de la mémoire ROM, une RAM de 128 octets, des ''timers'', et de nombreuses entrées-sorties. Il est relié à 4 ports sur lesquels il peut lire ou écrire 8 bits par port. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Il supporte des interruptions. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris l'accumulateur, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Avec ce qu'on vient de dire, on peut donner la ''memory map'' de ce microcontroleur, pour la SRAM. Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont adressables bit par bit, ou octet par octet. L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que l'accumulateur est mappé dedans, de même que le registre d'état PSW et le ''program counter'' IP. Les ports d'entrée-sortie sont aussi mappés dedans. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, qui sont tous bit-adressables. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Il en est de même avec 18 adresses de la mémoire SRAM, ce qui permet d'adresser 144 bits (18 adresses * 8 bits par octet adressé). [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> dnicrkhch99d3lh3utdbuodcr4t5mmg 765728 765727 2026-05-01T20:21:35Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765728 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets, des ''timers'', et 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Il supporte des interruptions. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris l'accumulateur, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Avec ce qu'on vient de dire, on peut donner la ''memory map'' de ce microcontroleur, pour la SRAM. Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont adressables bit par bit, ou octet par octet. L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que l'accumulateur est mappé dedans, de même que le registre d'état PSW et le ''program counter'' IP. Les ports d'entrée-sortie sont aussi mappés dedans. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, qui sont tous bit-adressables. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Il en est de même avec 18 adresses de la mémoire SRAM, ce qui permet d'adresser 144 bits (18 adresses * 8 bits par octet adressé). [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> cpio6c1f4q8106xm8qf0nsym2t5qt5y 765729 765728 2026-05-01T20:22:32Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765729 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris l'accumulateur, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Avec ce qu'on vient de dire, on peut donner la ''memory map'' de ce microcontroleur, pour la SRAM. Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont adressables bit par bit, ou octet par octet. L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que l'accumulateur est mappé dedans, de même que le registre d'état PSW et le ''program counter'' IP. Les ports d'entrée-sortie sont aussi mappés dedans. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, qui sont tous bit-adressables. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Il en est de même avec 18 adresses de la mémoire SRAM, ce qui permet d'adresser 144 bits (18 adresses * 8 bits par octet adressé). [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 5eci33z3189vk4zd9sjg7vhoxpt8q4t 765730 765729 2026-05-01T20:24:52Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765730 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris l'accumulateur, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Avec ce qu'on vient de dire, on peut donner la ''memory map'' de ce microcontroleur, pour la SRAM. Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont adressables bit par bit, à savoir que chaque bit a sa propre adresse, ce qui permet d'adresser 144 bits (18 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que l'accumulateur est mappé dedans, de même que le registre d'état PSW et le ''program counter'' IP. Les ports d'entrée-sortie sont aussi mappés dedans. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> p6mjoq1234okmc7oy7s0pcbe5e8xb3m 765731 765730 2026-05-01T20:26:40Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765731 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris l'accumulateur, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que l'accumulateur est mappé dedans, de même que le registre d'état PSW et le ''program counter'' IP. Les ports d'entrée-sortie sont aussi mappés dedans. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> t1holp37lh0skx0rsdg9r38m75ni0ah 765732 765731 2026-05-01T20:31:18Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765732 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le ''program counter'' IP, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports d'entrée-sortie sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajoutés dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. [[File:Intel 8051 arch.svg|centre|vignette|upright=2|Microarchitecture de l'Intel 8051.]] ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> slnoff3q0vqbhfnjoe0bwt2u0i3uag9 765733 765732 2026-05-01T20:41:13Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765733 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports d'entrée-sortie sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajoutés dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> fvodcbcv4lhcx8c5rmacm0v9wht9qr9 765734 765733 2026-05-01T20:42:35Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765734 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports d'entrée-sortie sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajoutés dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. Le processeur supporte aussi l'adressage indirect dans la SRAM, grâce à deux registres d'adresse de 8 bits chacun. Ils portent les noms R0 et R1. C'est là une ressemblance avec les microcontrôleurs PIC. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> jfiz1ylqnlbfww0ldz2cz43mq6s12j1 765735 765734 2026-05-01T20:45:46Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765735 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports d'entrée-sortie sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajoutés dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. Le processeur supporte aussi l'adressage indirect dans la SRAM, mais celui-ci fonctionne différemment comparé aux microcontrôleurs PIC. Il n'y a pas deux registres d'adresse dédiés, séparés des autres. A la place, l'adressage indiorect est implémenté normalement, en utilisant les registres généraux. Par contre, il y a une contrainte : seuls les deux premiers registres R0 et R1 sont utilisables. En clair, seuls ces deux registres peuvent contenir une adresse, un pointeur. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> hztszxfpq6wvn03yu3jc9nboug2mcht 765736 765735 2026-05-01T20:46:06Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765736 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Il y a aussi des registres pour les entrées et sorties. Les registres d'entrée-sortie permettent de lire ou écrire sur un port d'entrée-sortie ou de lire un ''timer''. En clair, les PIC ont un espace d'adressage séparé pour les entrées-sorties. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, mais nous expliquerons pourquoi dans quelques paragraphes. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Un détail est que la SRAM n'a qu'un seul port qui sert à la fois pour les lectures et écritures. Pour compenser, les PIC sont des architectures à accumulateur, où une opérande est lue depuis la SRAM, l'autre depuis l'accumulateur. Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} Outre l'accumulateur, les PIC disposent de registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que les registres sont mappés en mémoire, à quelques exceptions près ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Les seules registres qui ne sont pas mappés en mémoire sont l'accumulateur, les registres d'entrée-sortie, et la pile d'adresses de retour intégrée au processeur (voir plus bas). Par exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les modèles PIC 17 ont rendu l'accumulateur mappé en mémoire RAM ! [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappé dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports d'entrée-sortie sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajoutés dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. Le processeur supporte aussi l'adressage indirect dans la SRAM, mais celui-ci fonctionne différemment comparé aux microcontrôleurs PIC. Il n'y a pas deux registres d'adresse dédiés, séparés des autres. A la place, l'adressage indiorect est implémenté normalement, en utilisant les registres généraux. Par contre, il y a une contrainte : seuls les deux premiers registres R0 et R1 sont utilisables. En clair, seuls ces deux registres peuvent contenir une adresse, un pointeur. C'est là une différence liée au fait que le 8051 a un banc de registre séparé. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 9av1ee5bmtzui27zkwk16m9mtfo1z16 765737 765736 2026-05-01T20:54:54Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765737 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Le processeur incorpore de nombreuses optimisations pour éviter de trop gaspiller d'adresses mémoire. Mais ces optimisations sont partiellement compensées par d'autres choix de conception que nous détaillerons plus bas. Déjà, les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Ensuite, le processeur utilise un espace d'adressage séparé pour les entrés-sorties. Les ports d'entrée-sortie et les ''timers'' ne sont donc pas mappés en mémoire RAM, ce qui économise quelques adresses. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, comme on va tenter de l'expliquer dans les paragraphes suivants. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Les PIC disposent de nombreux registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que ces registres sont placés dans la mémoire SRAM ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. [[File:DocPIC16F84.png|centre|vignette|upright=2|DocPIC16F84]] Les PIC sont une architecture à accumulateur basique, ce qui permet d'utiliser un banc de registre à un seul port. Ce choix simplifie grandement la conception du processeur. Il faut préciser que l'accumulateur n'est pas mappé en mémoire. Sauf sur les modèles PIC 17, qui mappé l'accumulateur en mémoire RAM ! Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappée dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports d'entrée-sortie sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajoutés dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. Le processeur supporte aussi l'adressage indirect dans la SRAM, mais celui-ci fonctionne différemment comparé aux microcontrôleurs PIC. Il n'y a pas deux registres d'adresse dédiés, séparés des autres. A la place, l'adressage indiorect est implémenté normalement, en utilisant les registres généraux. Par contre, il y a une contrainte : seuls les deux premiers registres R0 et R1 sont utilisables. En clair, seuls ces deux registres peuvent contenir une adresse, un pointeur. C'est là une différence liée au fait que le 8051 a un banc de registre séparé. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> pq96ugzsurdcesaphbhtnwjouyd4wvz 765738 765737 2026-05-01T20:56:11Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765738 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Le processeur incorpore de nombreuses optimisations pour éviter de trop gaspiller d'adresses mémoire. Mais ces optimisations sont partiellement compensées par d'autres choix de conception que nous détaillerons plus bas. Déjà, les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Ensuite, le processeur utilise un espace d'adressage séparé pour les entrés-sorties. Les ports d'entrée-sortie et les ''timers'' ne sont donc pas mappés en mémoire RAM, ce qui économise quelques adresses. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, comme on va tenter de l'expliquer dans les paragraphes suivants. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Les PIC disposent de nombreux registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que ces registres sont placés dans la mémoire SRAM ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. Les PIC sont une architecture à accumulateur basique, ce qui permet d'utiliser un banc de registre à un seul port. Ce choix simplifie grandement la conception du processeur. Il faut préciser que l'accumulateur n'est pas mappé en mémoire. Sauf sur les modèles PIC 17, qui mappé l'accumulateur en mémoire RAM ! Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappée dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports d'entrée-sortie sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajoutés dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. Le processeur supporte aussi l'adressage indirect dans la SRAM, mais celui-ci fonctionne différemment comparé aux microcontrôleurs PIC. Il n'y a pas deux registres d'adresse dédiés, séparés des autres. A la place, l'adressage indiorect est implémenté normalement, en utilisant les registres généraux. Par contre, il y a une contrainte : seuls les deux premiers registres R0 et R1 sont utilisables. En clair, seuls ces deux registres peuvent contenir une adresse, un pointeur. C'est là une différence liée au fait que le 8051 a un banc de registre séparé. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un autre exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> bg08qowfdojt3asmsy5w5znnrzwova6 765739 765738 2026-05-01T20:58:32Z Mewtow 31375 /* Les processeurs 8/16 bits à architecture Harvard */ 765739 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un premier exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c'est à dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faible, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendu à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vu en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Le processeur incorpore de nombreuses optimisations pour éviter de trop gaspiller d'adresses mémoire. Mais ces optimisations sont partiellement compensées par d'autres choix de conception que nous détaillerons plus bas. Déjà, les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Ensuite, le processeur utilise un espace d'adressage séparé pour les entrés-sorties. Les ports d'entrée-sortie et les ''timers'' ne sont donc pas mappés en mémoire RAM, ce qui économise quelques adresses. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, comme on va tenter de l'expliquer dans les paragraphes suivants. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Les PIC disposent de nombreux registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que ces registres sont placés dans la mémoire SRAM ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. Les PIC sont une architecture à accumulateur basique, ce qui permet d'utiliser un banc de registre à un seul port. Ce choix simplifie grandement la conception du processeur. Il faut préciser que l'accumulateur n'est pas mappé en mémoire. Sauf sur les modèles PIC 17, qui mappé l'accumulateur en mémoire RAM ! Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappée dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. A la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions ssont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontroleur. Les modèles intiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intégrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservés à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrit dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports d'entrée-sortie sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajoutés dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bits. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. Le processeur supporte aussi l'adressage indirect dans la SRAM, mais celui-ci fonctionne différemment comparé aux microcontrôleurs PIC. Il n'y a pas deux registres d'adresse dédiés, séparés des autres. A la place, l'adressage indiorect est implémenté normalement, en utilisant les registres généraux. Par contre, il y a une contrainte : seuls les deux premiers registres R0 et R1 sont utilisables. En clair, seuls ces deux registres peuvent contenir une adresse, un pointeur. C'est là une différence liée au fait que le 8051 a un banc de registre séparé. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur haute performance, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> a8ikqblyx1c9pl1w3sx9z8skzj61war 765740 765739 2026-05-01T21:09:41Z Mewtow 31375 /* Les processeurs 8/16 bits à architecture Harvard */ 765740 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Pour encore améliorer la situation, il est possible d'utiliser une architecture Harvard modifiée, qui permet de lire des données depuis la mémoire ROM. Cela réduit encore plus les besoins en mémoire RAM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur, dans le banc de registres ! Beaucoup en implémentaient moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus pour les données, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et pour les applications demandant plus de RAM, on pouvait ajouter un circuit séparé qui permettait d'adresser une RAM plus grande. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. : Les processeurs de ce type implémentent des optimisations pour adresser plus de 256 octets de RAM. La plus connue est la commutation de banques. Mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un premier exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c’est-à-dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faibles, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendus à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vus en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Le processeur incorpore de nombreuses optimisations pour éviter de trop gaspiller d'adresses mémoire. Mais ces optimisations sont partiellement compensées par d'autres choix de conception que nous détaillerons plus bas. Déjà, les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Ensuite, le processeur utilise un espace d'adressage séparé pour les entrés-sorties. Les ports d'entrée-sortie et les ''timers'' ne sont donc pas mappés en mémoire RAM, ce qui économise quelques adresses. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, comme on va tenter de l'expliquer dans les paragraphes suivants. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Les PIC disposent de nombreux registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que ces registres sont placés dans la mémoire SRAM ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. Les PIC sont une architecture à accumulateur basique, ce qui permet d'utiliser un banc de registre à un seul port. Ce choix simplifie grandement la conception du processeur. Il faut préciser que l'accumulateur n'est pas mappé en mémoire. Sauf sur les modèles PIC 17, qui mappé l'accumulateur en mémoire RAM ! Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappée dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. À la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions sont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontrôleur. Les modèles initiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intègrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservées à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrits dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports d'entrée-sortie sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajouté dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bit. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. Le processeur supporte aussi l'adressage indirect dans la SRAM, mais celui-ci fonctionne différemment comparé aux microcontrôleurs PIC. Il n'y a pas deux registres d'adresse dédiés, séparés des autres. À la place, l'adressage indirect est implémenté normalement, en utilisant les registres généraux. Par contre, il y a une contrainte : seuls les deux premiers registres R0 et R1 sont utilisables. En clair, seuls ces deux registres peuvent contenir une adresse, un pointeur. C'est là une différence liée au fait que le 8051 a un banc de registre séparé. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur hautes performances, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 8nhnys8h65ps0pjm0jrsx71ihooq8zh 765751 765740 2026-05-02T01:17:53Z Mewtow 31375 /* Les processeurs 8/16 bits à architecture Harvard */ 765751 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur. Vous noterez que 256 octets de RAM est très peu, comparable à ce qu'on trouve dans un banc de registres. Aussi, fusionner banc de registre et 256 octets de SRAM est une optimisation possible. Concrètement, cela veut dire que le processeur n'intégre pas une RAM séparée, mais a un banc de 256 registres de 8 bits. Beaucoup de processeurs en implémentent moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus mémoire de la RAM, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. Et pour les applications demandant plus de RAM, des optimisations permettent d'adresser plus de 256 octets de RAM. La plus connue est la commutation de banques, mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. Cependant, se limiter à 256 octets de RAM demande des compromis assez forts, pour économiser un maximum d'adresses mémoire. L'usage d'une architecture Harvard est une solution très intéressante, mais on peut aller plus loin en utilisant une architecture Harvard modifiée. Pour rappel, elles permettent de lire des constantes depuis la mémoire ROM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Une autre optimisation est d'utiliser un espace d'adressage séparé pour les entrées-sorties, à la place d'entrées-sorties mappées en mémoire qui détournent des adresses. Cependant, de nombreux processeurs 8 bits utilisent les entrées-sorties mappées en mémoire, comme on va le voir plus bas. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Dans ce qui suit, nous allons voir quelques processeurs 8 bits de ce type. Deux exemples seront des microcontrôleurs très utilisés de nos jours. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un premier exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c’est-à-dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faibles, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendus à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vus en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. Le processeur incorpore de nombreuses optimisations pour éviter de trop gaspiller d'adresses mémoire. Mais ces optimisations sont partiellement compensées par d'autres choix de conception que nous détaillerons plus bas. Déjà, les microcontrôleurs PIC 8 bits sont une architecture Harvard, comme dit plus haut. Ensuite, le processeur utilise un espace d'adressage séparé pour les entrés-sorties. Les ports d'entrée-sortie et les ''timers'' ne sont donc pas mappés en mémoire RAM, ce qui économise quelques adresses. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire tiquer, mais c'est bien le terme utilisé dans la documentation des PIC. Et il faut admettre que la différence entre banc de registre et SRAM intégrée est floue, comme on va tenter de l'expliquer dans les paragraphes suivants. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Les PIC disposent de nombreux registres de contrôle, d'un ''program counter'', d'un registre d'état, et d'un pointeur de pile. Un détail très important est que ces registres sont placés dans la mémoire SRAM ! En clair, on peut y accéder en lisant/écrivant à une adresse mémoire bien précise. Sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seules 96 octets sont adressables comme de la RAM. Mais les 128 octets sont un seul et unique SRAM dans le processeur. Ce qui explique qu'il est difficile de séparer banc de registre et RAM principale sur ce processeur : les deux sont fusionnées ! Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. Les PIC sont une architecture à accumulateur basique, ce qui permet d'utiliser un banc de registre à un seul port. Ce choix simplifie grandement la conception du processeur. Il faut préciser que l'accumulateur n'est pas mappé en mémoire. Sauf sur les modèles PIC 17, qui mappé l'accumulateur en mémoire RAM ! Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappée dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. À la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions sont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontrôleur. Les modèles initiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intègrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservées à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrits dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports d'entrée-sortie sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajouté dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bit. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. Le processeur supporte aussi l'adressage indirect dans la SRAM, mais celui-ci fonctionne différemment comparé aux microcontrôleurs PIC. Il n'y a pas deux registres d'adresse dédiés, séparés des autres. À la place, l'adressage indirect est implémenté normalement, en utilisant les registres généraux. Par contre, il y a une contrainte : seuls les deux premiers registres R0 et R1 sont utilisables. En clair, seuls ces deux registres peuvent contenir une adresse, un pointeur. C'est là une différence liée au fait que le 8051 a un banc de registre séparé. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur hautes performances, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> bpbjck6i9ut5c2eg2q3l1rrphki0848 765752 765751 2026-05-02T01:26:53Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765752 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur. Vous noterez que 256 octets de RAM est très peu, comparable à ce qu'on trouve dans un banc de registres. Aussi, fusionner banc de registre et 256 octets de SRAM est une optimisation possible. Concrètement, cela veut dire que le processeur n'intégre pas une RAM séparée, mais a un banc de 256 registres de 8 bits. Beaucoup de processeurs en implémentent moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus mémoire de la RAM, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. Et pour les applications demandant plus de RAM, des optimisations permettent d'adresser plus de 256 octets de RAM. La plus connue est la commutation de banques, mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. Cependant, se limiter à 256 octets de RAM demande des compromis assez forts, pour économiser un maximum d'adresses mémoire. L'usage d'une architecture Harvard est une solution très intéressante, mais on peut aller plus loin en utilisant une architecture Harvard modifiée. Pour rappel, elles permettent de lire des constantes depuis la mémoire ROM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Une autre optimisation est d'utiliser un espace d'adressage séparé pour les entrées-sorties, à la place d'entrées-sorties mappées en mémoire qui détournent des adresses. Cependant, de nombreux processeurs 8 bits utilisent les entrées-sorties mappées en mémoire, comme on va le voir plus bas. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Dans ce qui suit, nous allons voir quelques processeurs 8 bits de ce type. Deux exemples seront des microcontrôleurs très utilisés de nos jours. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un premier exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c’est-à-dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faibles, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendus à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vus en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire comprendre que les 256 octets de RAM sont en réalité un banc de registre de 256 registres d'un octet chacun. Vu que la RAM et le banc de registre sont fusionnés, il n'y a pas de différences entre nom/numéro de registre et adresse mémoire. Les registres sont donc adressables, on y accède en lisant/écrivant à une adresse mémoire bien précise. Ce banc de registre contient des registres généraux, mais aussi des registres pour communiquer avec les ports d'entrée-sortie, des registres de contrôle, le ''program counter'', le registre d'état, et le pointeur de pile. Pour donner un exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seuls 96 octets sont adressables comme de la RAM. Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec un banc de registre unique. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Les PIC sont une architecture à accumulateur basique, ce qui permet d'utiliser un banc de registre à un seul port. Ce choix simplifie grandement la conception du processeur. Il faut préciser que l'accumulateur n'est pas mappé en mémoire. Sauf sur les modèles PIC 17, qui mappé l'accumulateur en mémoire RAM ! Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} La petite taille de la ROM d'un PIC n'est pas une surprise. Les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Aussi, utiliser une petite ROM est nécessaire. Mais il faut aussi adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. La conséquence est que le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappée dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. À la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent aussi d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande, 4 en tout. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit prennent leur opérande dans l'accumulateur. Elles font le test du bit et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Par contre, il n'y a pas d'instructions de décalages, qui peuvent être émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions sont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontrôleur. Les modèles initiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intègrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservées à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrits dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports d'entrée-sortie sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajouté dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bit. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. Le processeur supporte aussi l'adressage indirect dans la SRAM, mais celui-ci fonctionne différemment comparé aux microcontrôleurs PIC. Il n'y a pas deux registres d'adresse dédiés, séparés des autres. À la place, l'adressage indirect est implémenté normalement, en utilisant les registres généraux. Par contre, il y a une contrainte : seuls les deux premiers registres R0 et R1 sont utilisables. En clair, seuls ces deux registres peuvent contenir une adresse, un pointeur. C'est là une différence liée au fait que le 8051 a un banc de registre séparé. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur hautes performances, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> bsq4onbjnsbgpqfa35r9tt5c938lhgt 765753 765752 2026-05-02T01:31:10Z Mewtow 31375 /* Les microcontrôleurs PIC */ 765753 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur. Vous noterez que 256 octets de RAM est très peu, comparable à ce qu'on trouve dans un banc de registres. Aussi, fusionner banc de registre et 256 octets de SRAM est une optimisation possible. Concrètement, cela veut dire que le processeur n'intégre pas une RAM séparée, mais a un banc de 256 registres de 8 bits. Beaucoup de processeurs en implémentent moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus mémoire de la RAM, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. Et pour les applications demandant plus de RAM, des optimisations permettent d'adresser plus de 256 octets de RAM. La plus connue est la commutation de banques, mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. Cependant, se limiter à 256 octets de RAM demande des compromis assez forts, pour économiser un maximum d'adresses mémoire. L'usage d'une architecture Harvard est une solution très intéressante, mais on peut aller plus loin en utilisant une architecture Harvard modifiée. Pour rappel, elles permettent de lire des constantes depuis la mémoire ROM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Une autre optimisation est d'utiliser un espace d'adressage séparé pour les entrées-sorties, à la place d'entrées-sorties mappées en mémoire qui détournent des adresses. Cependant, de nombreux processeurs 8 bits utilisent les entrées-sorties mappées en mémoire, comme on va le voir plus bas. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Dans ce qui suit, nous allons voir quelques processeurs 8 bits de ce type. Deux exemples seront des microcontrôleurs très utilisés de nos jours. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un premier exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c’est-à-dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faibles, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendus à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vus en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire comprendre que les 256 octets de RAM sont en réalité un banc de registre de 256 registres d'un octet chacun. Vu que la RAM et le banc de registre sont fusionnés, il n'y a pas de différences entre nom/numéro de registre et adresse mémoire. Les registres sont donc adressables, on y accède en lisant/écrivant à une adresse mémoire bien précise. Ce banc de registre contient des registres généraux, mais aussi des registres pour communiquer avec les ports d'entrée-sortie, des registres de contrôle, le ''program counter'', le registre d'état, et le pointeur de pile. Pour donner un exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seuls 96 octets sont adressables comme de la RAM. Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec une petite économie de registres et donc de transistors. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Les PIC sont une architecture à accumulateur, ce qui permet d'utiliser un banc de registre à un seul port et simplifie grandement la conception du processeur. Il faut préciser que l'accumulateur n'est pas mappé en mémoire, sauf sur les modèles PIC 17, qui mappé l'accumulateur en mémoire RAM ! Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} La petite taille de la ROM d'un PIC n'est pas une surprise, car les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Mais il faut adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. Et le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappée dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. À la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit font le test et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Les instructions de décalages sont émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. De telles instructions sont très utiles pour manipuler les ports I/O. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions sont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontrôleur. Les modèles initiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intègrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservées à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrits dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports d'entrée-sortie sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports d'entrées-sorties. Pour le dire autrement, chaque bit d'un port d'entrée-sortie a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajouté dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bit. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. Le processeur supporte aussi l'adressage indirect dans la SRAM, mais celui-ci fonctionne différemment comparé aux microcontrôleurs PIC. Il n'y a pas deux registres d'adresse dédiés, séparés des autres. À la place, l'adressage indirect est implémenté normalement, en utilisant les registres généraux. Par contre, il y a une contrainte : seuls les deux premiers registres R0 et R1 sont utilisables. En clair, seuls ces deux registres peuvent contenir une adresse, un pointeur. C'est là une différence liée au fait que le 8051 a un banc de registre séparé. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur hautes performances, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> eoa1lkyqausixrc3c2np9nhihnvbqe0 765754 765753 2026-05-02T01:31:33Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765754 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur. Vous noterez que 256 octets de RAM est très peu, comparable à ce qu'on trouve dans un banc de registres. Aussi, fusionner banc de registre et 256 octets de SRAM est une optimisation possible. Concrètement, cela veut dire que le processeur n'intégre pas une RAM séparée, mais a un banc de 256 registres de 8 bits. Beaucoup de processeurs en implémentent moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus mémoire de la RAM, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. Et pour les applications demandant plus de RAM, des optimisations permettent d'adresser plus de 256 octets de RAM. La plus connue est la commutation de banques, mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. Cependant, se limiter à 256 octets de RAM demande des compromis assez forts, pour économiser un maximum d'adresses mémoire. L'usage d'une architecture Harvard est une solution très intéressante, mais on peut aller plus loin en utilisant une architecture Harvard modifiée. Pour rappel, elles permettent de lire des constantes depuis la mémoire ROM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Une autre optimisation est d'utiliser un espace d'adressage séparé pour les entrées-sorties, à la place d'entrées-sorties mappées en mémoire qui détournent des adresses. Cependant, de nombreux processeurs 8 bits utilisent les entrées-sorties mappées en mémoire, comme on va le voir plus bas. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Dans ce qui suit, nous allons voir quelques processeurs 8 bits de ce type. Deux exemples seront des microcontrôleurs très utilisés de nos jours. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un premier exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c’est-à-dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faibles, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendus à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vus en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire comprendre que les 256 octets de RAM sont en réalité un banc de registre de 256 registres d'un octet chacun. Vu que la RAM et le banc de registre sont fusionnés, il n'y a pas de différences entre nom/numéro de registre et adresse mémoire. Les registres sont donc adressables, on y accède en lisant/écrivant à une adresse mémoire bien précise. Ce banc de registre contient des registres généraux, mais aussi des registres pour communiquer avec les ports d'entrée-sortie, des registres de contrôle, le ''program counter'', le registre d'état, et le pointeur de pile. Pour donner un exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seuls 96 octets sont adressables comme de la RAM. Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec une petite économie de registres et donc de transistors. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Les PIC sont une architecture à accumulateur, ce qui permet d'utiliser un banc de registre à un seul port et simplifie grandement la conception du processeur. Il faut préciser que l'accumulateur n'est pas mappé en mémoire, sauf sur les modèles PIC 17, qui mappé l'accumulateur en mémoire RAM ! Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} La petite taille de la ROM d'un PIC n'est pas une surprise, car les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Mais il faut adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. Et le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappée dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. À la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit font le test et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Les instructions de décalages sont émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. De telles instructions sont très utiles pour manipuler les ports I/O. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions sont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontrôleur. Les modèles initiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intègrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservées à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrits dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports d'entrée-sortie sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports I/O. Pour le dire autrement, chaque bit d'un port I/O a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajouté dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bit. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports d'entrée-sortie, pour les portions qui sont bit-adressables. Le processeur supporte aussi l'adressage indirect dans la SRAM, mais celui-ci fonctionne différemment comparé aux microcontrôleurs PIC. Il n'y a pas deux registres d'adresse dédiés, séparés des autres. À la place, l'adressage indirect est implémenté normalement, en utilisant les registres généraux. Par contre, il y a une contrainte : seuls les deux premiers registres R0 et R1 sont utilisables. En clair, seuls ces deux registres peuvent contenir une adresse, un pointeur. C'est là une différence liée au fait que le 8051 a un banc de registre séparé. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur hautes performances, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> 0v8wy0vo1hf8odot3n4kh7hd4aclwax 765755 765754 2026-05-02T01:32:18Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765755 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur. Vous noterez que 256 octets de RAM est très peu, comparable à ce qu'on trouve dans un banc de registres. Aussi, fusionner banc de registre et 256 octets de SRAM est une optimisation possible. Concrètement, cela veut dire que le processeur n'intégre pas une RAM séparée, mais a un banc de 256 registres de 8 bits. Beaucoup de processeurs en implémentent moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus mémoire de la RAM, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. Et pour les applications demandant plus de RAM, des optimisations permettent d'adresser plus de 256 octets de RAM. La plus connue est la commutation de banques, mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. Cependant, se limiter à 256 octets de RAM demande des compromis assez forts, pour économiser un maximum d'adresses mémoire. L'usage d'une architecture Harvard est une solution très intéressante, mais on peut aller plus loin en utilisant une architecture Harvard modifiée. Pour rappel, elles permettent de lire des constantes depuis la mémoire ROM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Une autre optimisation est d'utiliser un espace d'adressage séparé pour les entrées-sorties, à la place d'entrées-sorties mappées en mémoire qui détournent des adresses. Cependant, de nombreux processeurs 8 bits utilisent les entrées-sorties mappées en mémoire, comme on va le voir plus bas. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Dans ce qui suit, nous allons voir quelques processeurs 8 bits de ce type. Deux exemples seront des microcontrôleurs très utilisés de nos jours. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un premier exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c’est-à-dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faibles, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendus à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vus en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire comprendre que les 256 octets de RAM sont en réalité un banc de registre de 256 registres d'un octet chacun. Vu que la RAM et le banc de registre sont fusionnés, il n'y a pas de différences entre nom/numéro de registre et adresse mémoire. Les registres sont donc adressables, on y accède en lisant/écrivant à une adresse mémoire bien précise. Ce banc de registre contient des registres généraux, mais aussi des registres pour communiquer avec les ports d'entrée-sortie, des registres de contrôle, le ''program counter'', le registre d'état, et le pointeur de pile. Pour donner un exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seuls 96 octets sont adressables comme de la RAM. Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec une petite économie de registres et donc de transistors. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Les PIC sont une architecture à accumulateur, ce qui permet d'utiliser un banc de registre à un seul port et simplifie grandement la conception du processeur. Il faut préciser que l'accumulateur n'est pas mappé en mémoire, sauf sur les modèles PIC 17, qui mappé l'accumulateur en mémoire RAM ! Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} La petite taille de la ROM d'un PIC n'est pas une surprise, car les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Mais il faut adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. Et le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappée dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. À la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit font le test et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Les instructions de décalages sont émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. De telles instructions sont très utiles pour manipuler les ports I/O. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions sont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontrôleur. Les modèles initiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intègrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Elle contient un processeur 8/16 bits, 4 kibioctets de mémoire ROM, une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC. Le processeur du 8051 est une architecture à accumulateur de 8 bits, ses registres sont mappés en mémoire RAM, il a un registre d'adresse dédié à l'adressage indirect et j'en passe. Mais il y a aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Voyons maintenant la ''memory map'' de ce microcontroleur, pour la SRAM. Un point assez original est que 16 octets de la SRAM sont adressables bit par bit, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservées à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrée-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrits dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports I/O sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports I/O. Pour le dire autrement, chaque bit d'un port I/O a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajouté dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Pour ce qui est des instructions, le 8051 supporte les opérations de multiplications et de divisions, contrairement aux microcontrôleurs PIC qui se limitaient à l'addition et la soustraction. Une autre particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bit. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports I/O, pour les portions qui sont bit-adressables. Le processeur supporte aussi l'adressage indirect dans la SRAM, mais celui-ci fonctionne différemment comparé aux microcontrôleurs PIC. Il n'y a pas deux registres d'adresse dédiés, séparés des autres. À la place, l'adressage indirect est implémenté normalement, en utilisant les registres généraux. Par contre, il y a une contrainte : seuls les deux premiers registres R0 et R1 sont utilisables. En clair, seuls ces deux registres peuvent contenir une adresse, un pointeur. C'est là une différence liée au fait que le 8051 a un banc de registre séparé. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur hautes performances, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> p7vkpom3m1k6imx47kvc1z0ydxpqia4 765756 765755 2026-05-02T01:39:59Z Mewtow 31375 /* Les microcontrôleurs Intel 8051/8031 */ 765756 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur. Vous noterez que 256 octets de RAM est très peu, comparable à ce qu'on trouve dans un banc de registres. Aussi, fusionner banc de registre et 256 octets de SRAM est une optimisation possible. Concrètement, cela veut dire que le processeur n'intégre pas une RAM séparée, mais a un banc de 256 registres de 8 bits. Beaucoup de processeurs en implémentent moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus mémoire de la RAM, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. Et pour les applications demandant plus de RAM, des optimisations permettent d'adresser plus de 256 octets de RAM. La plus connue est la commutation de banques, mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. Cependant, se limiter à 256 octets de RAM demande des compromis assez forts, pour économiser un maximum d'adresses mémoire. L'usage d'une architecture Harvard est une solution très intéressante, mais on peut aller plus loin en utilisant une architecture Harvard modifiée. Pour rappel, elles permettent de lire des constantes depuis la mémoire ROM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Une autre optimisation est d'utiliser un espace d'adressage séparé pour les entrées-sorties, à la place d'entrées-sorties mappées en mémoire qui détournent des adresses. Cependant, de nombreux processeurs 8 bits utilisent les entrées-sorties mappées en mémoire, comme on va le voir plus bas. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Dans ce qui suit, nous allons voir quelques processeurs 8 bits de ce type. Deux exemples seront des microcontrôleurs très utilisés de nos jours. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un premier exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c’est-à-dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faibles, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendus à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vus en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire comprendre que les 256 octets de RAM sont en réalité un banc de registre de 256 registres d'un octet chacun. Vu que la RAM et le banc de registre sont fusionnés, il n'y a pas de différences entre nom/numéro de registre et adresse mémoire. Les registres sont donc adressables, on y accède en lisant/écrivant à une adresse mémoire bien précise. Ce banc de registre contient des registres généraux, mais aussi des registres pour communiquer avec les ports d'entrée-sortie, des registres de contrôle, le ''program counter'', le registre d'état, et le pointeur de pile. Pour donner un exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seuls 96 octets sont adressables comme de la RAM. Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec une petite économie de registres et donc de transistors. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Les PIC sont une architecture à accumulateur, ce qui permet d'utiliser un banc de registre à un seul port et simplifie grandement la conception du processeur. Il faut préciser que l'accumulateur n'est pas mappé en mémoire, sauf sur les modèles PIC 17, qui mappé l'accumulateur en mémoire RAM ! Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} La petite taille de la ROM d'un PIC n'est pas une surprise, car les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Mais il faut adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. Et le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappée dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. À la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit font le test et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Les instructions de décalages sont émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. De telles instructions sont très utiles pour manipuler les ports I/O. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions sont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontrôleur. Les modèles initiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intègrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Ils contiennent un processeur 8/16 bits, 4 kibioctets de mémoire ROM et une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC, mais aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B, le second étant surtout utilisé pour les multiplications. Car oui, le 8051 supporte les multiplications et divisions, ce qui est une autre différence avec les processeurs PIC. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Un détail original est que 16 octets de la SRAM sont bit-adressables, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservées à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct/indirect si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrées-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrits dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports I/O sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports I/O. Pour le dire autrement, chaque bit d'un port I/O a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajouté dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Une particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bit. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports I/O, pour les portions qui sont bit-adressables. Le processeur supporte aussi l'adressage indirect dans la SRAM, mais celui-ci fonctionne différemment comparé aux microcontrôleurs PIC. Il n'y a pas deux registres d'adresse dédiés, séparés des autres. À la place, l'adressage indirect est implémenté normalement, en utilisant les registres généraux. Par contre, il y a une contrainte : seuls les deux premiers registres R0 et R1 sont utilisables. En clair, seuls ces deux registres peuvent contenir une adresse, un pointeur. C'est là une différence liée au fait que le 8051 a un banc de registre séparé. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur hautes performances, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> sytkv7aiwcgjl8bqfmv6e18chbcr00j Fonctionnement d'un ordinateur/Les architectures à accumulateur 0 82386 765681 763756 2026-05-01T14:00:45Z Mewtow 31375 765681 wikitext text/x-wiki Les architectures que nous avons vu précédemment dans ce cours disposent de registres pour les données, en plus du pointeur de pile, d'un ''program counter'', et de quelques autres. Elles sont appelées des '''architectures à registres''', terme qui trahit bien le fait qu'elles ont des registres généraux ou spécialisés pour stocker temporairement des données. Et si on leur a donné un nom, c'est parce qu'il existe des architectures qui ne sont pas dans cette catégorie. Il en existe plusieurs types, mais ce chapitre va se concentrer sur les '''architectures à accumulateur'''. [[File:Isaccumulator.png|vignette|Architecture à accumulateur.]] Les architectures à accumulateur sont centrées autour d'un registre architectural appelé l''''accumulateur'''. Il est utilisé pour toutes les opérations arithmétiques dyadiques, où il sert à la fois de source et de destination. Toutes les instructions dyadiques sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, le second opérande est lu depuis la mémoire RAM, le résultat de l'instruction est automatiquement mémorisé dans l'accumulateur. Les instructions monadiques peuvent utiliser un opérande dans l'accumulateur, ou dans la mémoire RAM, les deux sont théoriquement possibles. La conséquence est que le nombre d'accès mémoire est drastiquement diminué : de 3 par instructions sur une architecture mémoire-mémoire, on passe à seulement un avec un accumulateur. Les opérations dyadiques ont besoin d'un seul accès mémoire pour lire la seconde opérande, les opérations monadique en font aussi un seul pour lire leur unique opérande. {|class="wikitable" |- ! Classe d'architecture ! Nombre d'accès mémoire par opération dyadique |- |- ! Architecture à accumulateur | Un accès mémoire par instruction, pour lire la seconde opérande |- ! Architecture à registres | Zéro si les opérandes sont dans les registres, un pour les opérations ''load-op'', LOAD et STORE. |} Les architectures à accumulateur ont été les premières à apparaitre, bien avant les architectures à registre. Les tout premiers ''mainframes'', au tout début de l'informatique, étaient des architectures à accumulateur. Elles ont perduré avant que des ''mainframes'' utilisant des registres généraux les remplacent progressivement. Pour ce qui est de l'informatique grand public, les premiers microprocesseurs n'étaient pas exactement des architectures à accumulateur, les choses étaient assez variées. Les architectures à accumulateur sont aujourd'hui peu utilisées, sauf dans l'informatique embarquée/industrielle, et pour les processeurs de traitement de signal. Dans l'embarqué, les microcontrôleurs de faible puissance sont souvent dans ce cas, l'exemple type étant celui des microcontrôleurs PIC. ==Le jeu d'instruction des architectures à accumulateur sans registres d'indice== L'accumulateur est adressé grâce au mode d'adressage implicite, de même que le résultat de l'opération. Par contre, les autres opérandes sont localisés avec d'autres modes d'adressage, et lues en mémoire RAM. Le résultat ainsi qu'un des opérandes sont adressés de façon implicite car dans l'accumulateur, seule la seconde opérande étant adressée directement. Grâce à l'accumulateur, une instruction ne fait qu'un seul accès mémoire maximum, ce qui rend le processeur très facile à implémenter. ===Les registres des anciennes architectures à accumulateur=== [[File:IBM 701console.jpg|vignette|IBM 701, console extérieure.]] Les architectures à accumulateur étaient communes dans les années 50-60. A l'époque, les ordinateurs étaient des ''mainframes'', à savoir des ordinateurs gigantesques, qui occupaient une pièce de bâtiment complète dans le pire des cas, une armoire entière dans le meilleur. Les ordinateurs de l'époque étaient surtout utilisés pour du calcul scientifique ou des tâches d’ingénierie demandant beaucoup de calcul, rarement pour de la comptabilité ou des tâches administratives. En conséquence, ils devaient gérer des nombres entiers, mais ne supportaient pas de texte, ni de nombres encodés en BCD. De tels processeurs utilisaient l'adressage par mot, et non par byte, vu que ce dernier est surtout utile pour adresser des caractères de texte. Les nombres flottants n'étaient pas encore apparus. A la place, les ordinateurs de l'époque géraient des nombres entiers de grande taille, de 30 bits ou plus. En conséquence, l'accumulateur faisait facilement 30 à 60 bits. Par exemple, les ordinateurs de la Série scientifique IBM 700/7000 géraient des entiers de 36 bits, l’accumulateur faisait 38 bits : 36 bits plus deux bits pour les débordements. Historiquement, les premières architectures à accumulateur ne contenaient aucun autre registre que l'accumulateur. Ce n'est que dans les années 60 que de nombreuses architectures à accumulateur ont ajouté un second '''registre pour les multiplication/divisions'''. Un exemple est celui de l'IBM 701, qui incorporait un registre accumulateur de 38 bits et un registre multiplieur de 36 bits. Le registre mémorise le multiplieur lors d'une opération de multiplication. Il mémorise donc un opérande, pas le résultat. Il peut aussi décaler le multiplieur vers la droite/gauche, ce qui est utile pour exécuter la multiplication. C'est ce qui est fait sur l'IBM 7094. Une autre possibilité est que ce registre mémorise une partie du résultat de l'opération. Pour rappel, le résultat d'une multiplication/division est codé sur deux fois de bits que ses opérandes. Par exemple, multipliez deux opérandes de 30 bits, vous obtiendrez un résultat de 60 bits. Les 30 bits de poids faible du résultat vont dans l'accumulateur, les 30 bits de poids fort vont dans ce second registre. Les architectures à accumulateur parfois un '''registre pour le pointeur de pile''', utilisé pour gérer les fonctions/procédures. Les architectures à accumulateurs supportaient une pile d'adresse de retour, souvent une pile d'appel. Mais pour cela, il fallait mémoriser le pointeur de pile dans le processeur, ce qui demandait un registre dédié. ===L'adressage indirect avec l'accumulateur=== Les instructions LOAD et STORE existent bel et bien sur les architectures à accumulateur, mais n'ont pas les mêmes modes d'adressages. L'instruction LOAD copie une donnée de la RAM vers l'accumulateur, l'instruction STORE copie l'accumulateur dans une adresse. Les deux instructions n'ont pas besoin d'adresser l'accumulateur, qui est adressé de manière implicite, juste de préciser l'adresse à lire/écrire. Les architectures à accumulateur supportaient souvent le mode d'adressage indirect mémoire. Un exemple est celui des ordinateurs Data General Nova, qui sont des architectures à accumulateur et qui supportaient ce mode d'adressage. Les deux instructions LOAD et STORE existaient en deux versions, distinguées par un bit d'indirection. Si ce bit est à 0 dans l'opcode, alors l'instruction utilise le mode d'adressage absolu normal : l'adresse intégrée dans l'instruction est celle de la donnée. Mais s'il est à 1, alors l'adresse intégrée dans l'instruction est celle du pointeur. Cependant, la présence de l'accumulateur permettait d'utiliser l'adressage indirect à registre, pour gérer les pointeurs. Pour rappel, avec le mode d'adressage indirect à registre, l'adresse à lire/écrire est dans un registre. Ici, l'adresse à lire/écrire est prise dans l'accumulateur, seul registre disponible pour. L'adressage indirect est plus simple à implémenter pour l'instruction LOAD, car elle prend un seul opérande : l'adresse à lire. L'adresse à lire est placée dans l'accumulateur, la donnée lue est elle aussi chargée dans l'accumulateur. Pour l'instruction STORE, il faut fournir deux opérandes, l'adresse et la donnée à écrire, ce qui peut poser problème. Mais au pire, il est toujours possible d'utiliser l'adressage absolu ou indirect mémoire : l'adresse est dans l'instruction, la donnée à écrire dans l'accumulateur. ===L'encodage des instructions=== Sur une architecture à accumulateur l'encodage d'une instruction dyadique est assez simple, vu que l'accumulateur est adressé implicitement. La seconde opérande est localisée soit par une adresse mémoire (adressage absolu), soit est une constante (adressage immédiat). L'adresse mémoire est généralement assez longue, plus que l'opcode. {|class="wikitable" |+ Encodage d'une instruction dyadique |- ! rowspan="2" | Opcode | Adresse mémoire (adressage absolu) |- | Constante (adressage immédiat) |} L'encodage d'une instruction monadique est similaire. Si l'opérande est lue depuis la mémoire RAM, alors l'instruction est encodée comme une instruction dyadique. Il en est de même pour les instructions qui copient une constante dans l'accumulateur. Par contre, si l'opérande est dans l'accumulateur, alors il y a juste besoin d'encoder l'opcode. La majorité des instructions a besoin de préciser une adresse, rares sont celles qui s'en passent. Au vu de cet encodage, les architectures à accumulateur sont qualifiées d''''architectures à une adresse''' par abus de langage. Il est intéressant de contraster leur encodage avec les architectures à registres. Les architectures à registre doivent encoder deux opérandes en plus de l'opcode, avec éventuellement où enregistrer le résultat sur les architectures 3-adresses. Par contre, les opérandes sont généralement des noms de registre, ce qui prend moins de place qu'une adresse mémoire. A la rigueur, les instructions avec une constante immédiate prennent un peu plus de place, car elles doivent encoder un nom de registre en plus de la constante et de l'opcode. Les instructions ''load-op'' des processeurs CISC sont un peu dans le même cas, sauf qu'il faut remplacer la constante par une adresse, qui a généralement la même taille. Les instructions sont donc en moyenne plus courte sur les processeurs à registre, du fait de la présence de registres. ==La micro-architecture des architectures à accumulateur sans registres d'indice== L'organisation interne d'une architecture à accumulateur est très différente de celle des processeurs à registre. Elle est plus ou moins la même pour tous ces processeurs, le point important étant que le chemin de données se résume à une ALU, un registre accumulateur et le bus de données. L'ALU est reliée au registre accumulateur, ainsi qu'au bus de données pour lire la seconde opérande, comme illustré ci-dessous. [[File:Accumulator.png|centre|vignette|upright=2|Accumulateur.]] ===L'unité de calcul et l'accumulateur=== Pour simplifier l'implémentation, le résultat est mémorisé dans un registre en sortie de l'unité de calcul. La raison est qu'on ne veut pas altérer l'accumulateur tant que le résultat final n'est pas totalement calculé. Rappelons que l'ALU ne fournit pas un résultat d'un seul bloc, mais que certains bits arrivent avant les autres, typiquement les bits de poids faible. Si le résultat était écrit dans l'accumulateur directement, il écraserait des bits de l’opérande en cours d'utilisation, ce qui fausserait le résultat. [[File:Accumulateur avec registre de sortie.png|centre|vignette|upright=2|Accumulateur avec registre de sortie]] Une autre solution utilisait un registre entre l'accumulateur et l'unité de calcul, appelé l’'''''accumulator latch'''''. Il remplace le registre en sortie de l'ALU, dans le sens où il permet d'écrire dans l'accumulateur sans effacer l'opérande, pendant que l’opération est en cours dans l'ALU. L'accumulateur est copié dans l’''accumulator latch'', avant que l'ALU démarre ses calculs. L'opérande est donc maintenue même si on commence à écrire le résultat dans l'accumulateur. Sur le 8085 d'Intel, l’''accumulator latch'' peut être initialisé avec une constante prédéfinie, ce qui permet d'implémenter certaines instructions très facilement. Par exemple, il peut être initialisé à 0, ce qui permet d'implémenter les instructions MOV et INC (incrémentation). Un MOV est équivalent à faire un OU entre le registre lu et 0. Une instruction INC initialise l'entrée de retenue de l'unité de calcul à 1, puis ajoute 0. La décrémentation est implémentée de la même manière, sauf que l’''accumulator latch'' est initialisé à -2 pour compenser l'entrée de retenue à 1. De plus, pour supporter les conversion de décimal à BCD, l’''accumulator latch'' peut être initialisé avec les constantes 0x00, 0x06, 0x60, or 0x66. L'''accumulator latch'' est relié à divers fils de commande provenant de l'unité de contrôle, qui décide quelle valeur d'initialisation utiliser en fonction de l'instruction décodée. [[File:Accumulator latch.png|centre|vignette|upright=2|Accumulator latch]] [[File:Chemin de données à un seul bus.png|vignette|Chemin de données à un seul bus]] De même, la seconde opérande, celle lue sur le bus de données, est mémorisée dans un registre en amont de l'ALU. C'était notamment très utile si le processeur utilisait une ALU plus courte que les opérandes, avec par exemple une ALU 4 bits pour un CPU 8 bits. Les anciens processeurs à accumulateur de type ''mainframe'' utilisaient des opérandes de grande taille, du genre 36 ou 48 bits, ce qui avait des conséquences sur l'unité de calcul utilisée, ainsi que sur la communication avec la mémoire. Il arrivait que de tels processeurs utilisaient des ALU sérielles, ou du moins octet-sérielles, plutôt qu'une véritable ALU 36 bits. Nous verrons aussi que c'est très utile sur les processeurs à accumulateur avec un bus interne unique, dans la suite du chapitre. ===La micro-architecture des architectures à accumulateur avec instructions LOAD/STORE=== Nous venons de voir comment est implémenté l'unité de calcul et l'accumulateur, et comment le tout est relié au bus de données. Mais cela ne permet que d'avoir un processeur à accumulateur rudimentaire, qui ne gére que des instructions arithmétiques et logiques. Il faut aussi gérer le cas des opérations LOAD/STORE et des modes d'adressages associés, mais c'est le séquenceur qui s'en occupe. Avec l'adressage absolu, les instructions LOAD et STORE ne font que connecter l'accumulateur au bus de données. L'instruction STORE nécessite de connecter l'accumulateur au bus de données, de manière à ce que le transfert des données se fasse de l'accumulateur vers le bus de données. L'instruction LOAD s'implémente de la même manière, sauf que le sens de transfert est inversé. Cependant, il existe une optimisation qui permet d'implémenter l'instruction LOAD sans ajouter de circuits. Pour cela, il suffit que l'unité de calcul gére les opérations ''pass through'', à savoir des opérations qui se contentent de recopier un opérande sur la sortie. Ici, l'idée est de recopier l'opérande provenant du bus de données. [[File:Architecture à accumulateur, microarchitecture.png|centre|vignette|upright=2|Architecture à accumulateur, microarchitecture]] Pour gérer nativement l'adressage indirect à registre, il suffit de connecter l'accumulateur au bus d'adresse. Le plus simple est d'ajouter un multiplexeur, comme illustré ci-dessous. La donnée lue est copiée dans l'accumulateur, ce qui fait qu'il vaut mieux utiliser un registre d’interfaçage, l'accumulateur n'étant pas utilisable à la fois pour le bus d'adresse et de données. [[File:Adressage indirect sur une architecture à accumulateur.png|centre|vignette|upright=2|Adressage indirect sur une architecture à accumulateur]] Pour finir, voyons comment le pointeur de pile et le ''program counter'' sont implémentés. Les architectures à accumulateur ont souvent des adresses de taille différente des données, ce qui fait qu'il vaut mieux utiliser un circuit incrémenteur dédié pour incrémenter le ''program counter'', plutôt que de l'incrémenter via l'unité de calcul. Les architectures à accumulateur ont parfois un pointeur de pile, qui gère une pile d'adresse de retour, pas une vraie pile d'appel. Aussi, le pointeur de pile est censé être incrémenté et décrémenté, pas plus. Pas d'addition ou de soustraction pour gérer des cadres de pile. Là encore, c'est la solution de l'incrémenteur séparé qui est retenue. Pour économiser des transistors, il n'y a qu'un seul incrémenteur partagé pour les deux. ==Les architectures à accumulateur à registres d'indice== Les architectures à accumulateur décrites dans la section précédente sont capables de faire de l'adressage indirect, mais n'incluent pas les modes d'adressage base + indice et absolus indicés, qui prennent une adresse et y ajoute un indice. Il s'agit des toutes premières architectures à accumulateur, comme les premiers ordinateurs IBM ou le fameux PDP-8. Mais par la suite, les processeurs à accumulateurs ont inclus un support des modes d'adressages indicés, grâce à des '''registres d'indice'''. ===Les registres d'indice=== Les registres d'indice stockent des indices de tableaux. Ils permettaient de supporter deux modes d'adressage : * Le '''mode d'adressage absolu indicé''' où une adresse fixe est additionnée à un indice variable. L'adresse fixe est intégrée dans l'instruction (adressage absolu), l'indice est dans un registre d'indice. * Le '''mode d'adressage base + indice''', où l'adresse est dans l'accumulateur et l'indice dans le registre d'indice. Les processeurs à accumulateur supportaient souvent des variantes des modes d'adressage précédents, où le registre d'indice était automatiquement incrémenté ou décrémenté à chaque utilisation. Au départ, ces processeurs n'utilisaient qu'un seul registre d'indice qui se comportait comme un second accumulateur spécialisé dans les calculs d'adresses mémoire. Le processeur supportait de nouvelles instructions qui utilisaient ce registre d'indice de façon implicite. Mais avec le temps, les processeurs finirent par incorporer plusieurs de ces registres. Les instructions de lecture ou d'écriture devaient alors préciser quel registre d'indice utiliser, en précisant un nom de registre d'indice, un numéro de registre d'indice. Il faut préciser que les registres d'indice ont une taille bien plus petite que l'accumulateur. Ils mémorisent des indices codés sur 16 bits ou moins, alors que l'accumulateur faisait typiquement 36 à 48 bits, parfois plus. La taille classique sur les anciens ''mainframes'' était de 15 bits, parfois moins. Il n'était pas rare de tomber sur des registres d'indice de 8 ou 9 bits. Leur petite taille rendait leur implémentation matérielle peu couteuse. Et c'est ce qui explique qu'ils étaient préférés à l'usage d'un second accumulateur. Un exemple est le cas du processeur Motorola 6809, un processeur à accumulateur qui contient deux registres d'indices nommés X et Y. L'accumulateur est noté D et fait 16 bits, il peut être parfois géré comme deux accumulateurs séparés A et B de 8 bits chacun. Il contenait aussi deux pointeurs de pile, l'un pour les programmes, l'autre pour le système d'exploitation, ainsi qu'un ''program counter''. Le registre de page était utilisé pour l'adressage absolu, comme vu dans le chapitre sur les modes d'adressage. [[File:6809 Internal Registers.svg|centre|vignette|upright=2|6809 Internal Registers]] Les processeurs IBM avaient autrefois plusieurs registres d'indice. Par exemple, l'IBM 704 avait trois registres d'indice de 15 bits. Leur contenu était soustrait de l'adresse absolue. Une instruction pouvait utiliser plusieurs registres d'indice pour adresser son opérande. Toute instruction utilisait trois bits pour sélectionner les registres d'indice utilisés. Fait assez original, lorsque plusieurs registres d'indice sont sélectionnés, le processeur n'additionne pas les trois registres à l'adresse de base. À la place, il fait un OU bit à bit entre les registres d'indice sélectionnés, et additionne le résultat à l'adresse. Les processeurs IBM à accumulateur ont fait ça sur toute la gamme IBM 700/7000, pour des raisons de compatibilité. Les processeurs suivants avaient 7 registres d'indices, mais conservaient les trois bits pour adresser les registres d'indices. Ils pouvaient fonctionner dans deux modes. Le premier mode est plus intuitif : les trois bits précisent un registre d'indice parmi les 7, qui est additionné avec l'adresse absolue. La valeur zéro indique qu'aucun registre d'indice n'est utilisé, ce qui explique qu'il y a 7 registres d'indice et non 8. Un second mode, compatible avec l'IBM 704, fait un OU logique entre les registres d'indice sélectionnés. Seuls les trois premiers registres d'indices peuvent être sélectionnés dans ce mode. Il y a deux instructions pour changer de mode : une pour passer en mode compatible, l'autre pour le quitter pour l'autre mode. Quelques rares processeurs à registres généraux ont utilisés des registres d'indice, en plus des registres généraux. Ce qui fait l'association que nous avons faite entre registres d'indice et architectures à accumulateur est imparfait, bien que solide sur le principe. Un exemple d'architecture de ce type sont les architectures de la série UNIVAC 1100/2200. Ils disposaient de 128 registres, qui étaient mappés en mémoire à partir de l'adresse mémoire 0, la majorité étant inaccessibles par le programmeur. Ils regroupaient 12 registres accumulateurs, 11 registres d'indice et 4 registres hybrides qui pouvaient servir soit de registre d'indice, soit de registres accumulateurs. ===La micro-architecture des architectures à accumulateur avec registres d'indice=== La présence de registres d'indice modifie grandement l'implémentation du processeur. En effet, il faut rajouter un banc de registre pour les registres d'indice. Le banc de registre est monoport, car on a besoin de lire ou d'écrire un indice à la fois. Et il faut aussi potentiellement rajouter de quoi faire les calculs d'adresse. Deux solutions sont possibles : une ALU dédiée aux calculs d'adresse, une seule ALU pour toutes les opérations. Dans le premier cas, il y a une ALU séparée associée aux registres d'indice. L'ALU et les registres d'indice sont placés en sortie du séquenceur, en-dehors du chemin de données, la sortie de l'ALU est directement connectée au bus d'adresse. L'unité de calcul d'adresse peut être utilisée pour incrémenter le ''program counter''. Un défaut de cette approche est qu'elle ne gère pas l'adresse indirect à registre. [[File:Chemin de données sans support des pointeurs, avec adressage absolu indicé.png|centre|vignette|upright=2|Chemin de données sans support des pointeurs, avec adressage absolu indicé]] Une autre option utilise un bus interne, qui interconnecte tout le chemin de données. Dans sa version la plus simple, il est relié à l'accumulateur, l'unité de calcul, le banc de registre d'indice et le bus de données. Avec cette solution, l'ALU est utilisé à la fois pour calculer les adresses et pour les instructions de calcul. En reliant le bus interne au bus d'adresse à travers un multiplexeur, on gère naturellement les adressages indirects. [[File:Architecture à accumulateur avec registres associés.png|centre|vignette|upright=2.5|Architecture à accumulateur avec registres associés]] Il faut noter que sur les architectures Von Neumann, le séquenceur est relié à ce bus interne. En effet, charger une instruction demande de passer par le bus mémoire, donc par l’intermédiaire de ce bus internet. Le ''program counter'' est envoyé sur ce bus pour lire l'instruction, puis l'instruction lue est recopiée dans le registre d'instruction. Le chargement d'une instruction est donc géré comme une lecture des plus classiques. De plus, cela permet d'incrémenter le ''program counter'' au niveau de l'unité de calcul entière. Le ''program counter'' est envoyé sur le bus interne, incrémenté par l'ALU, puis le résultat est recopié dans le ''program counter'' via le bus interne. [[File:Architecture à accumulateur avec bus unique de type Von Neumann.png|centre|vignette|upright=2|Architecture à accumulateur avec bus unique de type Von Neumann]] ==Les processeurs bi-accumulateurs : le Motorola 6800== Le Motorola 6800 était un processeur 8 bits qui gérait des adresses de 16 bits. Il contenait deux accumulateurs nommés A et B, de 8 bits chacun. Il disposait aussi d'un registre d'indice, d'un pointeur de pile et d'un ''program counter'', tous les trois de 16 bits. Le registre d'état regroupait 6 bits, qu'on ne détaillera pas ici. [[File:MC6800 Processor Diagram.png|centre|vignette|upright=2|Interface et registres du MC6800.]] La présence des deux accumulateurs impactait surtout les instructions dyadiques. Les instructions monadiques avaient juste à préciser où se trouvait l'opérande : soit en RAM, soit dans le premier accumulateur, soit dans le second. Pour les opérations dyadiques, la gestion était totalement différente. En théorie, le premier opérande est dans un accumulateur, soit A, soit B. La seconde opérande vient soit de l'autre accumulateur, soit de la mémoire RAM. Et selon les instructions, tout variait. Pour l'addition, il y avait trois instructions. Les deux premières additionnaient un opérande provenant de la mémoire avec un accumulateur. L'instruction ADDA sélectionnait le premier accumulateur, l'instruction ADDB sélectionnait le second accumulateur. Mais une troisième instruction, l’instruction ABA, permettait d'additionner le contenu des deux accumulateurs. Pour les autres opérations, il n'était pas possible d'utiliser les deux accumulateurs en même temps. La seule possibilité était de faire une opération entre un accumulateur et un opérande venant de la mémoire. Toutes les instructions étaient en double, avec une copie par accumulateur. Par exemple, l'instruction ANDA faisait un ET entre l’accumulateur A et l'opérande mémoire, l'instruction ANDB faisait pareil avec l'accumulateur B. ==Les architectures hybrides registres-accumulateur== Il a existé quelques architectures qui étaient des hybrides entre architectures à accumulateur et architecture à registre. Elles avaient un accumulateur unique, couplé à un banc de registres généraux. D'autres registres étaient souvent présents, comme un registre d'état, des registres pour la pile, etc. Elles sont apparues assez tôt, dès les années 50. Et c'était à une époque où les ordinateurs étaient intégralement construits avec des tubes à vides et autres mémoires spécialisées. Par exemple, le Bull Gamma 3 était un ordinateur de type ''mainframe'' qui disposait de deux accumulateurs, de 5 registres généraux, de deux registres pour la pile, d'un registre à décalage utilisé pour les opérations arithmétiques et BCD, et d'un registre d'état rudimentaire de deux bits (un bit de signe, un bit pour les résultats de comparaison). Mais ces architectures sont restées assez confidentielles pendant les années 50 à 80. Par la suite, elles ont eu un regain de popularité durant les années 80-90. Elles ont alors servit de transition entre architectures à accumulateur proprement dites, et architectures à registres. Par exemple, les processeurs Intel 8 bits disposaient de 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : * l'accumulateur A ; * six registres nommés B, C, D, E, H et L ; * le registre d'état F ; * le pointeur de pile SP. Sur ces processeurs, les instructions dyadiques devaient mettre leur premier opérande dans l'accumulateur, la seconde provenait soit des registres, soit de la RAM, soit d'une constante immédiate. Les opérations monadiques pouvaient lire leur opérande depuis l'accumulateur, les autres registres ou la RAM, tout était permis. Les registres d'indices disparaissaient sur ces architectures, en théorie. Les registres généraux pouvaient être utilisés comme registre d'indice ou pour stocker des opérandes, ils étaient assez versatiles pour servir de registres d'indices. La présence de registres a de nombreux avantages, comparé aux architectures à accumulateur pures. Les instructions arithmétiques sont plus rapide, lire un registre étant plus rapide qu'un accès RAM. Les performances sont donc augmentées. De plus, les instructions arithmétiques utilisant ces registres sont plus courtes : pas besoin d'encoder une adresse mémoire, un nom de registre suffit. Vu que les processeurs de l’époque avaient des instructions de taille variable, cela améliorait la densité de code. ===La micro-architecture des processeurs hybrides registres-accumulateur=== La micro-architecture de ces processeurs est très similaire à celle d'un processeur avec des registres d'indices. La seule différence est que le banc de registre contient des registres généraux et non des registres d'indices. Le banc de registre est systématiquement monoport, car il n'avait aucune raison d'être multiport. Pour les instructions dyadiques, seules à lire deux opérandes, il ne servait que pour la seconde opérande, la première était lue depuis l'accumulateur. Les processeurs hybrides registre-accumulateur se classent en deux types principaux : ceux qui ont un seul bus interne, et ceux qui en ont deux. Le premier cas est identique à celui vu précédemment pour les architectures à accumulateur avec registres d'indice, à la seule différence est que le banc de registre contient des registres généraux et non des registres d'indices. Afin de gérer l'adressage indirect à registre, le bus interne est connecté aux deux registres d’interfaçage mémoire. [[File:Architecture à accumulateur avec bus unique de type Von Neumann.png|centre|vignette|upright=2|Architecture à accumulateur avec bus unique de type Von Neumann]] Notons que cela permet aussi d'implémenter facilement les branchements indirects, car le bus interne permet d'échanger des adresses entre ''program counter'' et banc de registre. De même, il est possible d'utiliser l'ALU pour gérer les branchements indirects., en plus de l'utiliser pour incrémenter le ''program counter''. [[File:Single bus organization.jpg|centre|vignette|upright=2|Single bus organization]] Une autre solution utilisait deux bus internes : un connecté au bus de données, un autre relié au bus d'adresse. Le bus de commande mémoire était lui commandé par le séquenceur, l'unité de contrôle. L'intermédiaire entre ces deux bus était le banc de registre, ainsi que les autres registres. Le banc de registre était connecté aux deux bus interne, avec un port de lecture relié au bus d'adresse, un port de lecture-écriture relié au bus de données. Le port de lecture était utilisé pour l'adressage indirect, l'autre l'était pour le reste. [[File:Proz1-e.png|centre|vignette|upright=2|Intérieur d'un processeur.]] L'organisation à deux bus simplifiait la gestion du ''program counter'' et le chargement des instructions. Le ''program counter'' était soit séparé du banc de registre, soit placé dans le banc de registre. Les deux solutions étaient utilisés, tout dépend du processeur. Il faut noter que si le ''program counter'' est intégré au banc de registres, alors la microarchitecture du processeur est bien plus simple. L'envoi du ''program counter'' sur le bus d'adresse utilise le port de lecture relié au bus d'adresse, qui sert aussi pour l'adressage indirect. L'économie de circuits, sans compter la simplicité d'implémentation que cela implique, explique sans doute que la technique a été utilisée sur quelques processeurs anciens. Le ''program counter'' était généralement incrémenté par l'ALU, ce qui explique qu'il soit connecté au bus interne pour les données. La connexion est aussi utile pour gérer les branchements indirects, qui copient un registre dans le ''program counter'', ainsi que les branchements relatifs (addition dans l'ALU), voire les branchements directs (l'adresse vers laquelle brancher est envoyée en entrée de l'ALU et propagée en sortie avec une opération ''pass through''). [[File:Connexion du program counter sur les bus avec PC dans le banc de registres.png|centre|vignette|upright=2|Connexion du program counter sur les bus avec PC dans le banc de registres]] ===Les registres d'interruption avec un processeur hybride-accumulateur : l'exemple du Z80=== Un exemple de processeur registre-accumulateur à deux bus interne est le Z80, un processeur fortement inspiré des CPU Intel 8 bits. Il a un jeu d'instruction similaire, mais a diverses améliorations par rapport au design original. Notamment, le processeur a des registres séparés pour les interruptions. Sur le Z80, les registres généraux sont dupliqués avec 6 registres pour les interruptions et 6 registres pour les programmes autres. Leur copie pour les interruptions sont nommées B', C', D', E', H', L'. Les 12 registres sont placés dans le banc de registre, ce qui implique que le fenêtrage de registres est utilisé pour gérer la séparation entre registre d'interruption et normaux. Il faut noter que l'accumulateur et le registre d'état sont aussi dupliqués, leurs copies étant nommées A' et F'. Mais leur duplication se fait autrement que par fenêtrage de registre. En plus des registres précédents, le Z80 incorporait deux registres d'indice nommés X et Y, ainsi qu'un pointeur de pile SP et un ''program counter'' PC. Ils n'étaient pas dupliqués pour les interruptions. Les registres d'indice étaient reliés à une unité de calcul d'adresse. L'unité de calcul d'adresse prenait deux opérandes : un indice, et une adresse mémoire provenant soit du banc de registre, soit de l'accumulateur. En clair, l'unité de calcul d'adresse faisait le lien entre les deux bus internet : le bus de données interne en entrée, le bus d'adresse en sortie. À l'intérieur du processeur, tous les registres étaient regroupés dans un banc de registre unique, sauf les accumulateurs, les registres d'état et le ''program counter''. Bien que ce ne soit pas indiqué sur le schéma ci-dessous, le ''program counter'' est séparé du banc de registre, alors que le pointeur de pile est dedans. Le compteur IR est lui associé au ''program counter'', il est sorti du banc de registre. Le Z80 utilise lui aussi un incrémenteur séparé de l'ALU, qui est utilisé pour mettre à jour le ''program counter'', le pointeur de pile et un compteur de rafraichissement mémoire nommé IR sur le Z80 (pour rappel, le rafraichissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). De plus, il est utilisé pour les instructions INC et DEC qui incrémentent une opérande de 16 bits obtenue en combinant deux registres de 8 bits. En clair, l'incrémenteur du ''program counter'' a été réutilisé de beaucoup de manières originales. [[File:Z80 arch.svg|centre|vignette|upright=3|Microarchitecture du Z80.]] Le Z80 incorporait des instructions pour échanger le contenu des deux ensembles de registres, accumulateur inclus. Elles permettaient d'utiliser les registres d'interruption pour les programmes et réciproquement. En clair, cela doublait le nombre de registres si les interruptions n'étaient pas utilisées. * L'instruction EXX échangeait les deux fenêtres de registres généraux : les registres B, C, D, E, H et L devenaient les registres B', C', D', E', H' et L' et inversement. * L'instruction EX échangeait l'accumulateur et le registre d'état : les registres A,F devenait A',F' et inversement. Le fenêtrage de registre était modifié par l'instruction EXX, qui échangeait les deux fenêtres de registres. Pour l'implémenter, une bascule était ajouté au processeur, appelons-la la bascule INT. Elle était relié au bus d'adresse du banc de registre, dont elle mémorisait le bit de poids fort. L'instruction EXX inversait la valeur de la bascule INT. Il est aussi possible d'échanger le contenu des registres D,E et H,L avec une instruction dédiée, ce qui est là encore fait par deux bascules : une pour les registres D,E et une autre pour les registres H,L. Pour l'accumulateur et le registre d'état, le choix entre registre normal et registre d'interruption se faisait là encore par une seconde bascule appelée la bascule A. La bascule est reliée à un multiplexeur et un démultiplexeur, qui permet de choisir quel accumulateur relier à l'unité de calcul. L'instruction EX inverse le contenu de la bascule A. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=L'implémentation matérielle des branchements | prevText=L'implémentation matérielle des branchements | next=Les architectures à pile et mémoire-mémoire | nextText=Les architectures à pile et mémoire-mémoire }} </noinclude> d2buyc09u0viq3tqss8uxp67tkgrhgw Manuel de terminale de philosophie/Devoir 0 83076 765758 753462 2026-05-02T06:58:15Z PandaMystique 119061 765758 wikitext text/x-wiki {{ManuelPhilo}} ==Introduction : qu'est-ce que le devoir ?== Le concept de devoir occupe une place centrale dans la réflexion morale. Dans la vie quotidienne, nous utilisons fréquemment le verbe ''devoir'' : le médecin dit à son patient qu'il doit avoir une alimentation équilibrée, un mari promet à son épouse de lui être fidèle, un citoyen se doit de respecter les lois<ref>Maxime Kristanek, « Devoir (GP) », ''L'Encyclopédie philosophique'', [https://encyclo-philo.fr/item/1749], consulté en 2025.</ref>. Mais que signifie exactement ce terme lorsqu'il s'applique à la morale ? Le devoir désigne une obligation morale, c'est-à-dire ce que nous devons faire indépendamment de nos désirs personnels et de nos intérêts immédiats. Il s'agit d'une exigence qui s'impose à notre volonté et qui se distingue de la simple contrainte physique ou de la nécessité naturelle. Contrairement à ce qui ''est'' (le domaine des faits), le devoir exprime ce qui ''doit être'' (le domaine des normes)<ref>Henry Sidgwick, ''The Methods of Ethics'', seventh edition, London, Macmillan and co., 1907, p. 46.</ref>. Le concept de devoir peut être analysé en termes de raison d'agir : dire « je dois faire telle action » signifie « j'ai une raison de faire cette action »<ref>Charles Larmore, « La connaissance morale », dans R. Ogien (dir.), ''Le réalisme moral'', PUF, Paris, 1999, p. 392.</ref>. Parmi les raisons d'agir, on distingue les raisons prudentielles (fondées sur nos désirs et intérêts personnels) et les raisons morales (qui s'imposent à nous indépendamment de nos désirs). Par exemple, si un patient mange des légumes parce qu'il désire être en bonne santé, il agit selon une raison prudentielle. En revanche, si un homme reste fidèle à sa promesse même lorsque cela ne lui procure aucun avantage, il agit selon une raison morale, par devoir. Une question directrice traverse l'ensemble de la réflexion philosophique sur le devoir : faut-il y voir une loi rationnelle universelle qui s'impose à toute volonté, une exigence sociale liée aux institutions concrètes, une forme d'accomplissement de notre nature, une convention utile à la vie commune, ou encore une construction historique dont la prétention à l'objectivité est contestable ? Ces réponses ne s'excluent pas toujours, mais elles dessinent des conceptions différentes du sens de l'obligation morale, du rapport entre devoir et bonheur, entre devoir et liberté, entre règle universelle et situation singulière. C'est cette pluralité de réponses que les pages qui suivent cherchent à exposer. ''Note préliminaire'' : les trois caractéristiques du devoir moral détaillées ci-dessous correspondent principalement à la conception kantienne du devoir et ne font pas consensus dans toutes les philosophies morales. Aristote, par exemple, ne pense pas l'action morale à partir d'une loi universelle comparable à l'impératif catégorique, puisque la vertu suppose une appréciation des circonstances particulières. ===Les caractéristiques du devoir moral (selon Kant)=== Le devoir moral possède, dans la perspective kantienne, trois caractéristiques essentielles : # La catégoricité : le devoir s'applique indépendamment de nos désirs. Contrairement aux impératifs hypothétiques (« si tu veux réussir cet examen, tu dois travailler »), le devoir moral constitue un impératif catégorique qui commande sans condition : « tu ne dois pas mentir », même si mentir pourrait te procurer un avantage<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', trad. fr. V. Delbos, Paris, Librairie Delagrave, 1907 (1785), p. 125.</ref>. # L'universalité : les devoirs moraux, chez Kant, ne varient pas en fonction de circonstances particulières arbitraires. L'universalité porte d'abord sur la forme rationnelle de la maxime, c'est-à-dire sur la possibilité que la règle de l'action soit voulue par tout être raisonnable, et non sur une liste mécaniquement identique d'actions à accomplir. # La prépondérance : les raisons morales fournies par nos devoirs doivent l'emporter sur nos raisons prudentielles et sur les conventions sociales. Si nous avons le devoir de sauver un enfant de la noyade, cette obligation doit primer sur notre désir de protéger nos vêtements coûteux<ref>R. M. Hare, ''Penser en morale, entre intuition et critique'', trad. M. Bozzo-Rey, J.-P. Cléro et C. Wrobel, Paris, Hermann, 2020 (1981).</ref>. ==Les principales conceptions philosophiques du devoir== ===L'éthique kantienne du devoir=== Emmanuel Kant (1724-1804) propose la conception la plus influente de la morale du devoir dans la philosophie moderne. Pour lui, seules les actions accomplies par devoir ont une véritable valeur morale. Cette conception se sépare nettement des morales antiques qui plaçaient le bonheur au centre de la réflexion éthique. ====L'impératif catégorique==== Kant formule le principe suprême de la moralité sous la forme de l'impératif catégorique, qui se décline en trois formulations principales. ''Première formulation (universalisation)'' : « Agis uniquement d'après la maxime qui fait que tu puisses vouloir en même temps qu'elle devienne une loi universelle »<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', trad. V. Delbos, Paris, Librairie Delagrave, 1907 (1785), p. 94.</ref>. Cette formule nous invite à nous demander si la règle qui guide notre action pourrait être suivie par tous sans contradiction. Par exemple, si chacun mentait systématiquement, la confiance disparaîtrait et il deviendrait impossible de communiquer : le mensonge ne peut donc être une loi universelle<ref>Onora O'Neill, ''Constructions of Reason: Explorations of Kant's Practical Philosophy'', Cambridge, Cambridge University Press, 1989, chap. 5.</ref>. ''Deuxième formulation (humanité comme fin)'' : « Agis de telle sorte que tu traites l'humanité aussi bien dans ta personne que dans la personne de tout autre toujours en même temps comme une fin, et jamais simplement comme un moyen »<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', trad. V. Delbos, Paris, Librairie Delagrave, 1907 (1785), p. 71 (section II).</ref>. Cette formule exprime le respect dû à la dignité humaine. Chaque personne possède une valeur intrinsèque et ne peut être réduite à un simple instrument au service des fins d'autrui. ''Troisième formulation (autonomie)'' : « Agis de telle sorte que ta volonté puisse se considérer elle-même en même temps comme légiférant universellement grâce à sa maxime »<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', trad. V. Delbos, Paris, Librairie Delagrave, 1907 (1785), p. 79 (section II).</ref>. Cette formulation insiste sur l'autonomie : en obéissant à la loi morale, l'être humain obéit à une loi qu'il se donne à lui-même par sa raison<ref>Allen W. Wood, ''Kantian Ethics'', Cambridge, Cambridge University Press, 2008, chap. 4 ; Christine M. Korsgaard, ''Creating the Kingdom of Ends'', Cambridge, Cambridge University Press, 1996.</ref>. ====Agir par devoir, non par inclination==== Pour Kant, il est essentiel de distinguer les actions conformes au devoir et les actions accomplies par devoir. Un marchand peut vendre honnêtement ses produits, mais s'il le fait uniquement par intérêt (pour conserver sa clientèle), son action est conforme au devoir sans avoir de valeur morale authentique. En revanche, si une personne désespérée conserve sa vie non par peur ou par désir de bonheur, mais par devoir, alors son action possède une véritable valeur morale<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', première section, trad. V. Delbos, Paris, Delagrave, 1907 (1785), p. 13-15.</ref>. Cette conception exigeante souligne que la valeur morale de l'action ne dépend pas de ses conséquences ni de l'inclination qui la motive, mais de l'intention pure d'accomplir son devoir. Il faut toutefois préciser que Kant accorde une place propre au sentiment moral : le ''respect'' pour la loi morale est, chez lui, le seul sentiment qui ne précède pas la loi mais en résulte. La loi morale produit dans le sujet un sentiment qui n'est pas la cause mais l'effet de l'obligation. Kant écrit : « Une action accomplie par devoir tire sa valeur morale non pas du but qui doit être atteint par elle, mais de la maxime d'après laquelle elle est décidée »<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', première section, trad. V. Delbos, Paris, Delagrave, 1907 (1785), p. 18.</ref>. ====Le devoir et la liberté==== Le devoir ne s'oppose pas à la liberté mais la réalise. Pour Kant, être libre ne signifie pas faire ce que l'on veut (cela serait l'esclavage des passions), mais agir selon la raison. En obéissant à la loi morale, l'être humain n'obéit qu'à lui-même, à sa raison, et conquiert ainsi son autonomie. Au contraire, celui qui agit selon ses penchants immédiats demeure hétéronome, soumis à des forces extérieures à sa raison<ref>Voir Allen W. Wood, ''Kantian Ethics'', Cambridge, Cambridge University Press, 2008, chap. 6.</ref>. ====Devoir et bonheur selon Kant==== Chez Kant, le devoir peut entrer en conflit avec notre bonheur empirique. La moralité exige parfois de sacrifier nos intérêts personnels. Cependant, Kant pense que la raison pratique nous oriente vers ce qu'il appelle le ''souverain bien'', c'est-à-dire l'union de la vertu et du bonheur, la vertu en étant la condition. Pour rendre pensable la possibilité d'une telle harmonie, Kant introduit deux postulats de la raison pratique : l'immortalité de l'âme et l'existence de Dieu<ref>Emmanuel Kant, ''Critique de la raison pratique'', Dialectique, livre II, chap. II, trad. F. Picavet, Paris, PUF, 1965 (1788).</ref>. Il importe de souligner que ces postulats ne fondent pas la validité de la loi morale, qui s'impose par la raison pure. Ils accompagnent l'espérance liée au souverain bien : la loi morale serait obligatoire même si l'âme n'était pas immortelle et même si Dieu n'existait pas. ===L'éthique aristotélicienne de la vertu=== Aristote (384-322 av. J.-C.), dans son ''Éthique à Nicomaque'', propose une conception très différente de la morale, centrée non sur le devoir au sens moderne, mais sur la vertu (''arétè'') et le bonheur (''eudaimonia''). Aristote ne construit d'ailleurs pas une morale du devoir au sens kantien : il pense d'abord la formation du caractère, la vertu, la prudence et la vie bonne. Parler de « devoir » à son sujet est donc en partie anachronique. ====La vertu comme disposition acquise==== Pour Aristote, les vertus morales ne sont pas innées : elles s'acquièrent par l'habitude et l'exercice. C'est en pratiquant les actions justes que nous devenons justes, en accomplissant des actions modérées que nous devenons modérés, en accomplissant des actions courageuses que nous devenons courageux<ref>Aristote, ''Éthique à Nicomaque'', II, 1, 1103a-b.</ref>. La vertu est une disposition stable (''hexis'') qui rend possible l'action bonne. L'homme vertueux trouve un plaisir propre dans l'action conforme à la vertu, mais ce plaisir n'efface pas l'effort requis : la vertu reste une disposition rationnelle, acquise par l'exercice et orientée par la prudence<ref>Pierre Aubenque, ''La prudence chez Aristote'', Paris, PUF, 1963.</ref>. ====Le juste milieu==== La vertu se définit comme un juste milieu entre deux excès. Par exemple, le courage est le juste milieu entre la lâcheté (excès de crainte) et la témérité (absence de crainte). La tempérance est le juste milieu entre l'insensibilité et l'intempérance. Ce juste milieu n'est pas une moyenne arithmétique, mais une disposition appropriée aux circonstances et à la personne. Il s'agit d'une médiété ''relative à nous'', c'est-à-dire déterminée en tenant compte de la situation concrète et de l'individu, selon l'appréciation de l'homme prudent<ref>Aristote, ''Éthique à Nicomaque'', II, 6, 1106b36-1107a2.</ref>. ====La prudence (phronesis)==== La vertu morale s'accompagne nécessairement d'une vertu intellectuelle appelée prudence ou sagesse pratique (''phronesis''). Cette faculté permet de délibérer correctement pour déterminer, dans chaque situation particulière, quelle est l'action appropriée. Aristote la définit comme une disposition rationnelle relative à l'action, capable de discerner ce qui est bon ou mauvais pour un être humain<ref>Aristote, ''Éthique à Nicomaque'', VI, 5, 1140b4-6.</ref>. ====Le bonheur comme fin dernière==== Contrairement à Kant, Aristote ne sépare pas vertu et bonheur. Pour lui, la vie vertueuse n'est pas un sacrifice pénible mais l'accomplissement de notre nature rationnelle et sociale. La vertu n'est donc pas seulement un moyen d'atteindre le bonheur : elle en est une part constitutive. Le bien pour l'homme consiste dans une activité de l'âme en accord avec la vertu<ref>Aristote, ''Éthique à Nicomaque'', I, 7, 1098a16-18.</ref>. Toutefois, Aristote reconnaît que le bonheur véritable suppose aussi un certain nombre de biens extérieurs (santé, ressources, amitiés, conditions politiques favorables). Sans ces biens, l'exercice de la vertu reste possible mais difficile. Aristote distingue par ailleurs plusieurs formes de vie bonne : la vie pratique vertueuse, ordonnée à l'action politique et morale, et la vie contemplative (''theoria''), à laquelle il réserve la forme la plus haute d'accomplissement humain<ref>Aristote, ''Éthique à Nicomaque'', X, 7-8 ; Rosalind Hursthouse, ''On Virtue Ethics'', Oxford, Oxford University Press, 1999 ; Alasdair MacIntyre, ''After Virtue'', Notre Dame, University of Notre Dame Press, 1981.</ref>. ===Hegel : du devoir abstrait à l'éthicité concrète=== Georg Wilhelm Friedrich Hegel (1770-1831) critique la conception kantienne du devoir qu'il juge trop abstraite et formelle. Dans ses ''Principes de la philosophie du droit'' (1820), il distingue trois sphères. ''Le droit abstrait'' : la sphère de la propriété et du contrat, où l'individu est reconnu comme personne juridique. ''La moralité'' (''Moralität'') : la sphère de la conscience morale subjective, du devoir intérieur, telle que Kant l'a conçue. Pour Hegel, cette sphère reste insuffisante car elle demeure abstraite et individuelle. ''L'éthicité'' (''Sittlichkeit'') : la sphère des institutions concrètes (famille, société civile, État) où le devoir trouve son contenu effectif. Dans l'éthicité, l'individu n'accomplit pas ses devoirs par contrainte intérieure abstraite. Il les reconnaît comme siens en s'identifiant aux institutions historiques et rationnelles auxquelles il appartient. L'éthicité n'est donc pas une simple naturalité sociale ; elle est une médiation rationnelle où la liberté subjective et l'ordre institutionnel se rejoignent<ref>Jean-François Kervégan et Gilles Marmasse (dir.), ''Hegel penseur du droit'', Paris, CNRS Éditions, 2004 ; Jean-François Kervégan, ''L'effectif et le rationnel. Hegel et l'esprit objectif'', Paris, Vrin, 2007.</ref>. Hegel ne propose pas une simple réconciliation entre devoir et inclination. Il opère ce qu'il nomme une ''Aufhebung'', c'est-à-dire un dépassement qui conserve certains éléments d'une position antérieure tout en les transformant et en les replaçant dans un ensemble plus riche. La morale kantienne est ainsi reprise et intégrée à l'universel concret des institutions. Cela ne signifie pas que l'État résoudrait par lui-même tous les conflits possibles entre l'individu et la société : Hegel reconnaît la possibilité de tensions, et les analyses du chapitre sur la société civile montrent qu'elle produit ses propres déséquilibres. Pour Hegel, le devoir bien compris ne s'oppose pas aux inclinations : la disposition éthique consiste à reconnaître dans l'accomplissement de ses devoirs la réalisation de son intérêt propre. Dans l'État rationnel, le citoyen accomplit ses devoirs non comme un sacrifice imposé du dehors mais en réalisant sa propre liberté<ref>Hegel, ''Principes de la philosophie du droit'', § 147 et § 150.</ref>. ===Rousseau : le citoyen et la volonté générale=== Jean-Jacques Rousseau (1712-1778), dans ''Du Contrat social'' (1762), pense le devoir politique à partir de la notion de volonté générale. ====Le contrat social==== Par le contrat social, chaque individu s'associe avec tous les autres en mettant « en commun sa personne et toute sa puissance sous la suprême direction de la volonté générale »<ref>Jean-Jacques Rousseau, ''Du Contrat social'', livre I, chapitre 6.</ref>. Cette aliénation totale de chacun crée un corps politique dont chaque membre est à la fois citoyen (participant au pouvoir souverain) et sujet (soumis aux lois). ====La volonté générale==== La volonté générale ne se confond pas avec la simple addition des intérêts particuliers ; elle exprime ce qui peut valoir comme intérêt commun, une fois écartées les considérations purement privées qui s'opposent les unes aux autres<ref>Jean-Jacques Rousseau, ''Du Contrat social'', livre II, chapitre 3.</ref>. Elle vise toujours le bien commun et reste « toujours droite » lorsqu'elle est correctement formée. Rousseau distingue cependant la rectitude de la volonté générale et la justesse du jugement du peuple : le peuple veut toujours son bien, mais il peut se tromper sur ce bien. La volonté générale n'est donc pas l'opinion majoritaire immédiate ; elle suppose des conditions de délibération, d'information et d'égalité qui ne sont pas toujours réunies. Le devoir du citoyen consiste à obéir aux lois qui expriment la volonté générale. Cette obéissance constitue l'exercice même de sa liberté, puisqu'il obéit à des lois qu'il a lui-même contribué à établir : « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du Contrat social'', livre I, chapitre 8.</ref>. Quiconque refuse d'obéir à la volonté générale peut y être contraint par le corps politique, « ce qui ne signifie autre chose sinon qu'on le forcera d'être libre »<ref>Jean-Jacques Rousseau, ''Du Contrat social'', livre I, chapitre 7.</ref>. ===Le stoïcisme : action appropriée et accord avec la nature=== Les philosophes stoïciens (Zénon, Épictète, Marc Aurèle) proposent une conception de l'agir fondée sur l'idée d'un ordre rationnel universel. Le précepte fondamental consiste à « vivre en accord avec la nature », c'est-à-dire avec la raison qui gouverne le cosmos. Comme la nature humaine est essentiellement rationnelle, vivre selon la nature revient à vivre selon la raison<ref>Voir Maxime Kristanek, « Stoïcisme (A) », ''L'Encyclopédie philosophique'', [https://encyclo-philo.fr/item/1681], consulté en 2025 ; Pierre Hadot, ''Qu'est-ce que la philosophie antique ?'', Paris, Gallimard, 1995.</ref>. Le terme grec qui correspond le mieux à ce que nous appelons « devoir » est, chez les stoïciens, ''kathêkon'', souvent traduit par « action appropriée » ou « devoir convenable ». Le ''kathêkon'' désigne l'action raisonnable que la situation requiert, compte tenu des rôles que chacun occupe. Le stoïcisme ne se réduit donc pas à l'acceptation du destin : il implique aussi des responsabilités sociales, familiales et politiques. Les stoïciens précisent toutefois que les actions appropriées peuvent être accomplies par des hommes ordinaires qui s'efforcent de suivre la raison, alors que l'action parfaitement droite, accomplie en toute connaissance et avec une disposition stable, n'est le propre que du sage. ====Ce qui dépend de nous==== Épictète distingue ce qui dépend de nous (nos jugements, nos désirs, nos volontés) et ce qui ne dépend pas de nous (notre corps, notre réputation, notre place sociale, notre destinée). L'action appropriée consiste à concentrer nos efforts sur ce qui dépend de nous et à accepter avec sérénité ce qui ne dépend pas de nous<ref>Épictète, ''Manuel'', § 1.</ref>. ====Les devoirs sociaux==== Marc Aurèle, empereur et philosophe stoïcien, insiste sur les devoirs sociaux qui découlent de notre nature rationnelle et sociale. Chacun doit remplir le rôle qui lui échoit dans l'ordre cosmique, qu'il soit empereur ou esclave. L'exercice des vertus de justice, de courage, de tempérance et de prudence constitue, selon lui, la voie vers la sagesse<ref>Marc Aurèle, ''Pensées pour moi-même'', livres II et VIII. On consultera la traduction d'Émile Bréhier dans ''Les Stoïciens'', Paris, Gallimard, « Bibliothèque de la Pléiade », 1962.</ref>. ===Spinoza : le conatus et l'éthique=== Baruch Spinoza (1632-1677) propose dans son ''Éthique'' une conception qui s'éloigne de la morale traditionnelle de l'obligation. Spinoza ne dissout pas pour autant toute distinction entre bien et mal : il en transforme le sens, en les rapportant à la puissance d'agir des êtres et non à un ordre transcendant. ====Le conatus==== Pour Spinoza, « chaque chose, autant qu'il est en elle, s'efforce de persévérer dans son être »<ref>Baruch Spinoza, ''Éthique'', III, proposition 6.</ref>. Ce principe, appelé ''conatus'', constitue l'essence même de chaque être. L'homme n'agit pas par devoir imposé de l'extérieur mais par l'effort naturel de persévérer dans son être et d'augmenter sa puissance d'agir. Cet effort n'est pas un acte volontaire ou conscient ajouté à la nature de l'individu ; il exprime cette nature elle-même. ====Bien et mal, liberté et nécessité==== Pour Spinoza, les notions traditionnelles de bien et de mal n'ont pas de fondement transcendant. Mais elles conservent une signification rationnelle relative : est dit ''bon'' ce qui augmente la puissance d'agir d'un individu, ''mauvais'' ce qui la diminue. Le bien est « ce que nous savons avec certitude être un moyen de nous rapprocher de plus en plus du modèle de la nature humaine que nous nous proposons »<ref>Baruch Spinoza, ''Éthique'', IV, préface.</ref>. La morale spinoziste n'est donc pas une absence de norme, mais une réorientation des normes : elles cessent d'être des commandements extérieurs pour devenir l'expression rationnelle de notre puissance. On parle alors d'une morale ''immanente'', c'est-à-dire qui ne procède pas d'une instance extérieure ou supérieure, mais des effets concrets que les actions produisent sur notre puissance d'agir. La liberté ne consiste pas à obéir à un devoir moral transcendant, mais à comprendre la nécessité qui nous détermine et à agir selon la raison plutôt que selon les passions. Le sage spinoziste, guidé par la connaissance adéquate, reconnaît que les autres hommes raisonnables augmentent sa propre puissance d'agir : la coopération rationnelle et la joie partagée sont des conditions de l'augmentation du ''conatus''. Spinoza ne prône donc nullement un égoïsme ignorant autrui, mais une éthique rationnelle où l'intérêt bien compris coïncide avec la vie sociale<ref>Pierre-François Moreau, ''Spinoza et le spinozisme'', Paris, PUF, 2003.</ref>. ===Hume et le sentiment moral=== David Hume (1711-1776) conteste l'idée d'un fondement purement rationnel du devoir moral. Selon lui, la raison seule ne peut motiver l'action : ce sont nos sentiments moraux et nos passions qui nous poussent à agir. Hume soutient que nos jugements moraux reposent sur l'approbation et la désapprobation que produisent en nous certains traits de caractère ou certaines actions, par l'intermédiaire de la sympathie<ref>David Hume, ''Enquête sur les principes de la morale'' (1751), trad. P. Saltel, Paris, GF-Flammarion, 1991.</ref>. La raison éclaire les faits, calcule les moyens et analyse les circonstances ; mais l'approbation morale elle-même relève du sentiment. Hume analyse en outre la justice comme une vertu artificielle, c'est-à-dire comme une convention sociale née de la rareté des biens et du besoin de coopération. Cette analyse rapproche Hume des théories conventionnalistes, mais sans qu'il fasse pour autant de l'utilité le critère unique de la moralité. ===L'utilitarisme : Bentham et Mill=== L'utilitarisme propose une éthique conséquentialiste où l'action juste est celle qui produit le plus grand bien-être pour le plus grand nombre. Jeremy Bentham (1748-1832) en formule la version la plus directe : il s'agit de calculer la somme algébrique des plaisirs et des peines que les actions produisent, et d'agir de manière à maximiser le solde de plaisir<ref>Jeremy Bentham, ''An Introduction to the Principles of Morals and Legislation'', London, T. Payne, 1789, chap. I.</ref>. Bentham cherche à évaluer les plaisirs et les peines selon plusieurs critères, comme leur intensité, leur durée, leur certitude, leur proximité, leur fécondité, leur pureté et leur étendue. Sa conception du plaisir est essentiellement quantitative : c'est par la combinaison de ces critères mesurables que l'on apprécie la valeur d'une action. John Stuart Mill (1806-1873) reprend le principe d'utilité, mais introduit une distinction qualitative entre les plaisirs. Pour lui, certains plaisirs (intellectuels, esthétiques, moraux) sont supérieurs en qualité à d'autres (sensoriels), même si leur intensité est moindre<ref>John Stuart Mill, ''L'Utilitarisme'' (1861), trad. G. Tanesse, Paris, GF-Flammarion, 1988, chap. II.</ref>. Mill soutient en particulier que ceux qui ont fait l'expérience des deux genres de plaisirs préfèrent les plaisirs supérieurs : ''it is better to be a human being dissatisfied than a pig satisfied'', écrit-il, ce que l'on peut rendre par : il vaut mieux être un être humain insatisfait qu'un porc satisfait. Mill défend par ailleurs des distinctions importantes entre la justice et l'utilité, et reconnaît la valeur de règles stables que l'on ne saurait réviser à chaque situation. Le devoir, dans cette perspective, ne consiste pas à suivre une règle abstraite, mais à viser, par nos actions et nos institutions, le bien-être collectif. ==Les enjeux philosophiques du devoir== ===Le devoir s'oppose-t-il au bonheur ?=== Cette question traverse toute l'histoire de la philosophie morale et oppose principalement Kant à Aristote. ''La position kantienne'' : pour Kant, le devoir peut entrer en conflit avec notre bonheur. La moralité exige parfois de sacrifier nos intérêts personnels. Kant pense néanmoins que la raison pratique nous permet d'espérer une harmonie entre vertu et bonheur, qu'il appelle souverain bien<ref>Emmanuel Kant, ''Critique de la raison pratique'', Dialectique, livre II, chap. II, trad. F. Picavet, Paris, PUF, 1965 (1788).</ref>. ''La position aristotélicienne'' : pour Aristote, il n'y a pas d'opposition véritable entre vertu et bonheur. La vie vertueuse est elle-même la réalisation du bonheur humain. L'homme véritablement vertueux trouve du plaisir à accomplir des actions vertueuses. La vertu n'est pas un sacrifice mais un accomplissement. Cette opposition renvoie à des conceptions différentes du bonheur. Si l'on définit le bonheur comme la satisfaction de tous nos désirs immédiats, alors il peut entrer en conflit avec le devoir. Si l'on conçoit le bonheur comme l'accomplissement de notre nature rationnelle, alors devoir et bonheur convergent. ===Le devoir s'oppose-t-il à la liberté ?=== Cette question constitue un paradoxe apparent : comment peut-on être libre en obéissant à un devoir qui s'impose à nous ? ''L'autonomie kantienne'' : pour Kant, le devoir ne s'oppose pas à la liberté mais la réalise. Obéir au devoir, c'est obéir à la loi que notre propre raison nous prescrit. Cette autonomie (du grec ''autos'', soi-même, et ''nomos'', loi) constitue la véritable liberté, par opposition à l'hétéronomie qui consiste à être déterminé par des causes extérieures (désirs, pressions sociales, etc.)<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', section III, trad. V. Delbos, Paris, Librairie Delagrave, 1907 (1785).</ref>. ''La liberté positive'' : on peut distinguer la liberté négative (absence de contraintes externes) et la liberté positive (capacité de se déterminer soi-même selon la raison). Le devoir moral relève de cette liberté positive. Cette idée rejoint Rousseau, pour qui « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du Contrat social'', livre I, chapitre 8.</ref>, tandis que Kant parle plutôt d'autonomie de la volonté. La parenté est réelle mais la perspective diffère : chez Rousseau, il s'agit d'une liberté politique dans l'ordre de la loi commune ; chez Kant, d'une liberté morale par laquelle la volonté rationnelle se donne à elle-même la loi. ''Le risque de l'aliénation'' : certains philosophes critiquent cette conception et y voient une forme d'aliénation. Obéir au devoir, ce serait renoncer à sa singularité au profit d'une loi universelle abstraite qui nie la diversité des individus et des situations. Nietzsche, par exemple, voit dans la morale du devoir une intériorisation de la contrainte, qu'il analyse par sa généalogie des valeurs. ===Peut-on fonder le devoir ?=== Cette question oppose des familles de positions plus diverses qu'une simple alternative entre réalisme et nihilisme. Les distinctions présentées ci-dessous ne sont pas toutes exigibles au baccalauréat, mais elles permettent de comprendre que la question du fondement du devoir admet plusieurs réponses et qu'il existe différentes manières de défendre, ou de contester, l'objectivité des jugements moraux. ''Le réalisme moral'' soutient que les devoirs moraux existent objectivement, indépendamment de nos croyances et de nos conventions, et que nous pouvons les connaître. Plusieurs fondements peuvent être proposés : * la nature humaine : nos devoirs découlent de notre nature rationnelle et sociale (Aristote) ; * la raison pure : les devoirs sont fondés sur des procédures rationnelles comme l'universalisation (Kant) ; * les commandements divins : les devoirs sont fondés sur la volonté de Dieu (théologie morale) ; * l'intuition : nous connaissons certains devoirs de manière directe et évidente (intuitionnisme)<ref>William David Ross, ''The Right and the Good'', Oxford, Oxford University Press, 1930.</ref>. ''Le constructivisme moral'' considère que les normes morales ne sont pas découvertes mais construites par des procédures rationnelles ou délibératives. La justice, pour John Rawls, résulte ainsi d'un accord hypothétique conclu sous le voile d'ignorance<ref>John Rawls, ''Théorie de la justice'', trad. C. Audard, Paris, Seuil, 1987 (1971).</ref>. Christine Korsgaard défend, dans la lignée de Kant, un constructivisme qui ancre l'obligation morale dans les exigences réflexives de l'agent rationnel. ''Le subjectivisme'' et le ''relativisme moral'' font dépendre les jugements moraux respectivement des préférences individuelles ou des cultures particulières. Aucun jugement ne pourrait alors prétendre à une vérité absolue : la moralité varierait selon les sujets ou selon les sociétés. ''L'expressivisme'' soutient que les énoncés moraux n'ont pas pour fonction de décrire des faits objectifs, mais d'exprimer des attitudes (approbation, désapprobation) ou de prescrire des conduites. Cette tradition trouve une expression contemporaine chez Allan Gibbard ou Simon Blackburn<ref>Simon Blackburn, ''Ruling Passions'', Oxford, Clarendon Press, 1998 ; Allan Gibbard, ''Wise Choices, Apt Feelings'', Cambridge (Mass.), Harvard University Press, 1990.</ref>. ''La théorie de l'erreur'', défendue par John Mackie, occupe une position singulière : les énoncés moraux ordinaires prétendent bien décrire des faits objectifs, mais cette prétention est, selon Mackie, systématiquement fausse, car aucun fait moral ne correspond à ces énoncés. Mackie développe en particulier un ''argument de l'étrangeté'' : les propriétés morales objectives, telles que les conçoivent les réalistes, seraient des entités métaphysiques étranges, sans analogue dans le reste du réel<ref>John L. Mackie, ''Ethics: Inventing Right and Wrong'', Harmondsworth, Penguin, 1977, chap. 1.</ref>. Quant à Nietzsche, il est plus exact de le présenter comme un généalogiste critique des valeurs morales que comme un simple « nihiliste ». Son projet, dans ''La Généalogie de la morale'', consiste à reconstituer l'histoire des valeurs morales, en particulier de la morale de la culpabilité et du ressentiment, pour mettre au jour leurs conditions d'émergence et leurs effets sur les formes de vie<ref>Friedrich Nietzsche, ''La Généalogie de la morale'' (1887), trad. P. Wotling, Paris, Le Livre de Poche, 2000.</ref>. ===Que devons-nous faire concrètement ?=== Cette question pratique oppose différentes théories normatives. ''Le déontologisme'' : certains devoirs sont absolus et ne dépendent pas des conséquences. Par exemple, il ne faut pas mentir, même si les conséquences de la franchise sont graves. Kant défend cette position dans son texte ''Sur un prétendu droit de mentir par humanité'' (1797), où il refuse l'idée d'un droit de mentir, même à un meurtrier qui demanderait où se cache sa victime<ref>Emmanuel Kant, « Sur un prétendu droit de mentir par humanité » (1797), trad. L. Guillermit, dans ''Théorie et pratique. D'un prétendu droit de mentir par humanité. La Fin de toutes choses'', Paris, Vrin, 2000.</ref>. ''Le conséquentialisme'' : nous devons accomplir les actions qui produisent les meilleures conséquences en termes de bien-être général. L'utilitarisme de Bentham et Mill en est l'exemple le plus connu. Selon cette théorie, le devoir consiste à maximiser le bonheur du plus grand nombre<ref>John Stuart Mill, ''L'Utilitarisme'' (1861), trad. G. Tanesse, Paris, GF-Flammarion, 1988.</ref>. ''L'éthique des vertus'' : au lieu de se concentrer sur les règles à suivre, il faut développer des vertus de caractère (courage, générosité, honnêteté) et s'inspirer de personnes vertueuses. Cette approche, inspirée d'Aristote, connaît un renouveau dans la philosophie morale contemporaine, en particulier à la suite de l'article d'Elizabeth Anscombe sur la philosophie morale moderne et des travaux de Philippa Foot, Alasdair MacIntyre et Rosalind Hursthouse<ref>Elizabeth Anscombe, « Modern Moral Philosophy », ''Philosophy'', vol. 33, n° 124, 1958 ; Philippa Foot, ''Virtues and Vices'', Oxford, Blackwell, 1978 ; Rosalind Hursthouse, ''On Virtue Ethics'', Oxford, Oxford University Press, 1999.</ref>. ====Un exemple : le mensonge destiné à protéger quelqu'un==== Pour rendre ces théories plus concrètes, on peut imaginer une situation classique : un proche menacé se cache chez nous, et un tiers hostile demande où il est. Faut-il mentir pour le protéger ? Kant, dans son texte ''Sur un prétendu droit de mentir par humanité'', refuse l'idée d'un droit de mentir, même dans ce cas. Le mensonge détruit la valeur universelle de la véracité, qui est la condition de toute communication entre êtres rationnels, et il rend celui qui ment responsable des conséquences imprévisibles de son acte. Aristote ne formulerait pas la question en termes de loi universelle. Il chercherait l'action que choisirait l'homme prudent, en tenant compte des circonstances, des personnes, des conséquences possibles. La franchise est une vertu, mais la prudence peut l'orienter de manière à éviter un mal plus grand. Hume rappellerait que la sympathie nous incline naturellement à protéger un proche en danger, et que cette inclination est moralement approuvée. La justice exige le respect de règles générales, mais le sentiment moral peut, dans certaines situations particulières, justifier qu'on s'écarte de la franchise. Bentham et Mill, du point de vue utilitariste, comparent les conséquences. Si le mensonge sauve une vie sans causer de dommage durable, il maximise probablement le bien-être collectif. Mill ajouterait toutefois que les règles morales générales (comme l'interdiction du mensonge) ont une valeur d'utilité globale et qu'il faut peser sérieusement les exceptions. Cet exemple montre comment des théories différentes peuvent diverger sur des cas précis, sans qu'aucune ne se réduise à une simple application mécanique d'une règle. ===Les dilemmes moraux=== Les dilemmes moraux sont des situations où plusieurs devoirs entrent en conflit, rendant impossible leur accomplissement simultané. Dans le roman de William Styron ''Le Choix de Sophie'', une mère doit choisir lequel de ses deux enfants sera épargné par un officier nazi, l'autre étant condamné à mort<ref>Voir Maxime Kristanek, « Paradoxe (A) », ''L'Encyclopédie philosophique'', [https://encyclo-philo.fr/paradoxe-a], consulté en 2025, section 4.</ref>. Face aux dilemmes moraux, plusieurs positions sont possibles : * nier leur existence réelle : un des devoirs apparents n'est pas un véritable devoir ; * admettre leur existence mais établir une hiérarchie entre les devoirs ; * reconnaître l'existence de situations tragiques où tout choix implique une faute morale. ==Exemples de sujets de dissertation== ===Sujets sur le devoir et la liberté=== # Faire son devoir, est-ce renoncer à sa liberté ? # Suis-je libre quand je fais mon devoir ? # Le devoir s'oppose-t-il à la liberté ? # L'obéissance au devoir peut-elle être un acte libre ? # Reconnaître ses devoirs, est-ce renoncer à sa liberté ? # Peut-on être libre en obéissant à un devoir ? ===Sujets sur le devoir et le bonheur=== # Est-ce un devoir d'être heureux ? # Avons-nous le devoir de faire le bonheur des autres ? # Le bonheur et le devoir sont-ils compatibles ? # Faire son devoir sans être heureux, est-ce possible ? # La recherche du bonheur est-elle un obstacle à l'accomplissement du devoir ? # Peut-on concilier bonheur et devoir ? ===Sujets sur la nature du devoir=== # D'où vient que nous avons des devoirs ? # Qu'est-ce qui fonde nos devoirs moraux ? # Tous les hommes ont-ils les mêmes devoirs ? # Suffit-il de faire son devoir ? # La morale se résume-t-elle à faire son devoir ? # Peut-on parler d'un devoir envers soi-même ? ===Sujets sur le devoir et autrui=== # Avons-nous des devoirs envers les animaux ? # Ai-je le devoir d'aimer autrui ? # Le devoir de secourir autrui a-t-il des limites ? # Peut-on désobéir par devoir ? # Y a-t-il un devoir de mémoire ? # La désobéissance à la loi peut-elle être un devoir ? ===Sujets sur le devoir et la morale=== # Agir moralement, est-ce agir par devoir ? # La notion d'obligation est-elle indispensable à la morale ? # Suffit-il d'avoir bonne conscience pour être sûr d'agir moralement ? # Faut-il toujours suivre sa conscience ? # Les passions nous empêchent-elles de faire notre devoir ? # Peut-on faire son devoir par habitude ? ==Extraits de textes philosophiques à étudier== ===Texte 1 : Kant, ''Fondements de la métaphysique des mœurs'' (1785)=== <blockquote> « Il est sans doute conforme au devoir qu'un marchand ne vende pas plus cher sa marchandise à l'acheteur inexpérimenté, et, là où le commerce est important, le marchand avisé s'en garde bien en effet ; il établit au contraire un prix fixe, le même pour tout le monde, si bien qu'un enfant achète chez lui à aussi bon compte que tout autre. On est donc loyalement servi ; mais ce n'est pas à beaucoup près assez pour qu'on en croie le marchand agissant ainsi par devoir et d'après des principes de probité ; son intérêt l'exigeait ainsi. Au contraire, conserver sa vie est un devoir, et c'est en outre une chose pour laquelle chacun a encore une inclination immédiate. Or c'est pour cela que la sollicitude souvent inquiète que la plupart des hommes y apportent n'en est pas moins dépourvue de toute valeur intrinsèque et que leur maxime n'a aucun prix moral. Ils protègent leur vie conformément au devoir, sans doute, mais non par devoir. En revanche, que des contrariétés et un chagrin sans espoir aient enlevé à un homme tout goût de vivre, si ce malheureux, à l'âme forte, est plus indigné de son sort qu'il n'est découragé ou abattu, s'il désire la mort et cependant conserve sa vie sans l'aimer, non par inclination ni par crainte, mais par devoir, alors sa maxime a une valeur morale. » </blockquote> Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), première section, trad. V. Delbos, Paris, Delagrave, 1907, p. 13-14<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', trad. V. Delbos, Paris, Librairie Delagrave, 1907, p. 13-14.</ref>. ''Analyse'' : ce texte distingue trois types d'actions : celles accomplies par intérêt, celles accomplies par inclination (par désir naturel), et celles accomplies par pur devoir. Seules ces dernières ont une valeur morale authentique. Le marchand honnête agit conformément au devoir, mais son honnêteté s'explique par son intérêt (conserver sa clientèle). De même, celui qui conserve sa vie par plaisir de vivre agit conformément au devoir mais par inclination. Seul celui qui conserve sa vie malgré le dégoût qu'elle lui inspire, parce qu'il reconnaît que c'est son devoir, agit véritablement par devoir et possède une volonté moralement bonne. ===Texte 2 : Kant, ''Fondements de la métaphysique des mœurs'' (1785) — l'impératif catégorique=== <blockquote> « Agis uniquement d'après la maxime qui fait que tu puisses vouloir en même temps qu'elle devienne une loi universelle. […] Agis comme si la maxime de ton action devait être érigée par ta volonté en loi universelle de la nature. […] Agis de telle sorte que tu traites l'humanité aussi bien dans ta personne que dans la personne de tout autre toujours en même temps comme une fin, et jamais simplement comme un moyen. […] Agis de telle sorte que ta volonté puisse se considérer elle-même en même temps comme légiférant universellement grâce à sa maxime. » </blockquote> Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), deuxième section, trad. V. Delbos, Paris, Delagrave, 1907, p. 63, 71, 79<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', trad. V. Delbos, Paris, Librairie Delagrave, 1907, p. 63, 71, 79.</ref>. ''Analyse'' : ces trois formulations de l'impératif catégorique expriment le même principe fondamental sous différents angles. La première formule (universalisation) nous invite à tester nos maximes en imaginant qu'elles deviennent des lois universelles. La deuxième formule (humanité comme fin) exprime le respect dû à chaque personne humaine en raison de sa dignité. La troisième formule (autonomie) souligne que la loi morale émane de notre propre raison : en lui obéissant, nous ne nous soumettons qu'à nous-mêmes. ===Texte 3 : Aristote, ''Éthique à Nicomaque'' (IVe siècle av. J.-C.)=== <blockquote> « La vertu est donc une disposition à agir d'une façon délibérée, consistant en une médiété relative à nous, laquelle est rationnellement déterminée et comme la déterminerait l'homme prudent. » </blockquote> Aristote, ''Éthique à Nicomaque'', livre II, chap. 6, 1106b36-1107a2<ref>Aristote, ''Éthique à Nicomaque'', livre II, chap. 6, 1106b36-1107a2. On consultera notamment l'édition R. Bodéüs, Paris, GF-Flammarion, 2004.</ref>. ''Analyse'' : Aristote définit la vertu morale comme une disposition stable (''hexis'') à choisir délibérément le juste milieu entre deux extrêmes vicieux. Cette disposition n'est pas innée : elle s'acquiert par l'habitude et l'exercice. La vertu requiert également la prudence (''phronesis''), cette sagesse pratique qui permet de déterminer, dans chaque situation particulière, où se situe le juste milieu. Contrairement à Kant, pour qui le devoir prend la forme d'une loi universelle, Aristote insiste sur le caractère relatif et contextuel de l'action vertueuse : le juste milieu est « relatif à nous », c'est-à-dire qu'il doit être adapté aux circonstances et à la personne, selon le jugement de l'homme prudent. ===Texte 4 : Rousseau, ''Du Contrat social'' (1762)=== <blockquote> « Chacun de nous met en commun sa personne et toute sa puissance sous la suprême direction de la volonté générale ; et nous recevons en corps chaque membre comme partie indivisible du tout. À l'instant, au lieu de la personne particulière de chaque contractant, cet acte d'association produit un corps moral et collectif composé d'autant de membres que l'assemblée a de voix, lequel reçoit de ce même acte son unité, son moi commun, sa vie et sa volonté. » </blockquote> Jean-Jacques Rousseau, ''Du Contrat social'' (1762), livre I, chap. 6<ref>Jean-Jacques Rousseau, ''Du Contrat social'', livre I, chapitre 6, édition GF-Flammarion, Paris, 1966, p. 51-52.</ref>. ''Analyse'' : par le contrat social, les individus s'unissent en un corps politique régi par la volonté générale. Chaque citoyen devient à la fois membre du souverain (en tant qu'il participe à la formation de la volonté générale) et sujet (en tant qu'il obéit aux lois qui expriment cette volonté). Le devoir du citoyen consiste à obéir aux lois, mais cette obéissance n'est pas une contrainte extérieure : en obéissant aux lois qu'il a lui-même contribué à établir, le citoyen obéit à sa propre volonté et demeure libre. Rousseau réconcilie ainsi devoir et liberté, à condition que la volonté générale soit correctement formée. ===Texte 5 : Épictète, ''Manuel'' (Ier-IIe siècle ap. J.-C.)=== <blockquote> « Il y a des choses qui dépendent de nous et d'autres qui ne dépendent pas de nous. Dépendent de nous l'opinion, la tendance, le désir, l'aversion, bref, toutes nos œuvres propres ; ne dépendent pas de nous le corps, la richesse, les témoignages de considération, les hautes charges, bref, toutes les choses qui ne sont pas nos œuvres propres. » </blockquote> Épictète, ''Manuel'', § 1<ref>Épictète, ''Manuel'', § 1. On consultera la traduction d'Émile Bréhier dans ''Les Stoïciens'', Paris, Gallimard, « Bibliothèque de la Pléiade », 1962.</ref>. ''Analyse'' : ce texte fondamental du stoïcisme distingue ce qui dépend de notre volonté (nos jugements, nos désirs, nos choix) et ce qui n'en dépend pas (notre corps, notre richesse, notre réputation, notre destinée). L'action appropriée (''kathêkon'') consiste à concentrer nos efforts sur ce qui dépend de nous et à accepter avec sérénité ce qui ne dépend pas de nous. Cette attitude rend possible la liberté intérieure. Le sage stoïcien accomplit ce que sa situation requiert non par contrainte mais en comprenant la nécessité rationnelle qui gouverne l'univers. ===Texte 6 : Hegel, ''Principes de la philosophie du droit'' (1820)=== Le paragraphe 147 expose ce que Hegel appelle la « disposition éthique ». L'idée centrale peut être formulée ainsi, en paraphrasant le texte original : la disposition éthique consiste, pour l'individu, à reconnaître que son but particulier ne prend sens que comme moment de l'universel, et à se comporter, dans sa volonté comme dans son sentiment, en accord avec cet universel. Là réside, selon Hegel, ce qu'il nomme la confiance éthique : la conviction que mon intérêt propre est conservé et porté par les institutions qui me dépassent<ref>G. W. F. Hegel, ''Principes de la philosophie du droit'' (1820), § 147. Pour le texte allemand, voir l'édition E. Moldenhauer et K. M. Michel, Suhrkamp, ''Werke'', t. 7. Pour une traduction française de référence, voir l'édition critique établie par Jean-François Kervégan, Paris, PUF, « Quadrige », 2013.</ref>. ''Analyse'' : Hegel critique la conception kantienne du devoir comme contrainte abstraite. Dans l'éthicité, l'individu ne perçoit plus le devoir comme une obligation extérieure qui s'opposerait à ses intérêts. Il reconnaît que son bien particulier se réalise dans et par les institutions éthiques (famille, société civile, État). La disposition éthique est donc une identification réfléchie aux institutions, où devoir et inclination peuvent se rejoindre, sans que les conflits soient pour autant exclus. ==Conclusion== La notion de devoir constitue l'un des concepts centraux de la philosophie morale. Loin d'être univoque, elle a reçu des interprétations diverses selon les époques et les auteurs. La conception kantienne du devoir comme impératif catégorique, fondé sur la raison pure et exigeant l'universalisation de nos maximes, a profondément marqué la pensée moderne. Elle s'oppose à l'éthique aristotélicienne des vertus, qui intègre l'action morale dans une réflexion plus large sur l'accomplissement humain et le bonheur. À ces deux pôles s'ajoutent les conceptions politiques de Rousseau et de Hegel, l'éthique sentimentaliste de Hume, le conséquentialisme utilitariste de Bentham et de Mill, l'analyse spinoziste du ''conatus'', ou encore la généalogie nietzschéenne des valeurs. Les questions ouvertes par ces traditions ne se referment pas. Le devoir s'oppose-t-il nécessairement au bonheur et à la liberté, ou peut-il se concilier avec eux ? Peut-on fonder rationnellement nos devoirs moraux, ou ne sont-ils que le produit de processus historiques, sociaux et psychologiques ? Comment résoudre les dilemmes moraux où plusieurs devoirs entrent en conflit ? Ces interrogations engagent notre existence concrète. Elles trouvent un écho dans des questions que les sociétés contemporaines ne peuvent plus contourner : la légitimité de la désobéissance civile, l'étendue du devoir de vérité dans la vie publique et privée, le devoir de secours envers ceux qui en ont besoin, les obligations envers les générations futures qui hériteront du monde que nous laissons, les devoirs envers les animaux et la nature non humaine. Sur chacun de ces points, les conceptions du devoir présentées dans cet article fournissent des ressources distinctes et parfois divergentes. La réflexion philosophique sur le devoir invite à prendre au sérieux l'exigence morale, à exercer notre raison pratique et à assumer notre responsabilité. Comme l'écrit Kant, « deux choses remplissent le cœur d'une admiration et d'une vénération toujours nouvelles et toujours croissantes : le ciel étoilé au-dessus de moi et la loi morale en moi »<ref>Emmanuel Kant, ''Critique de la raison pratique'', Conclusion, trad. F. Picavet, Paris, PUF, 1965 (1788), p. 173.</ref>. Cette formule n'épuise pas toutes les conceptions du devoir, mais elle exprime avec force l'idée que l'obligation morale n'est pas seulement une règle extérieure : elle engage le sujet dans ce qu'il reconnaît comme valable. ==Pour aller plus loin== ===Œuvres philosophiques=== * Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), trad. V. Delbos, Paris, Vrin. * Emmanuel Kant, ''Critique de la raison pratique'' (1788), trad. F. Picavet, Paris, PUF. * Aristote, ''Éthique à Nicomaque'', trad. R. Bodéüs, Paris, GF-Flammarion, 2004. * Jean-Jacques Rousseau, ''Du Contrat social'' (1762), édition GF-Flammarion. * G. W. F. Hegel, ''Principes de la philosophie du droit'' (1820), trad. J.-F. Kervégan, Paris, PUF. * Épictète, ''Manuel'', dans ''Les Stoïciens'', trad. É. Bréhier, Paris, Gallimard, « Bibliothèque de la Pléiade », 1962. * Marc Aurèle, ''Pensées pour moi-même'', dans ''Les Stoïciens'', trad. É. Bréhier, Paris, Gallimard, « Bibliothèque de la Pléiade », 1962. * Baruch Spinoza, ''Éthique'' (1677), trad. B. Pautrat, Paris, Seuil. * David Hume, ''Enquête sur les principes de la morale'' (1751), trad. P. Saltel, Paris, GF-Flammarion. * Jeremy Bentham, ''Introduction aux principes de la morale et de la législation'' (1789). * John Stuart Mill, ''L'Utilitarisme'' (1861), trad. G. Tanesse, Paris, GF-Flammarion. * Friedrich Nietzsche, ''La Généalogie de la morale'' (1887), trad. P. Wotling, Paris, Le Livre de Poche, 2000. ===Études contemporaines=== * Pierre Aubenque, ''La prudence chez Aristote'', Paris, PUF, 1963. * Elizabeth Anscombe, « Modern Moral Philosophy », ''Philosophy'', vol. 33, n° 124, 1958. * William David Ross, ''The Right and the Good'', Oxford, Oxford University Press, 1930. * John Rawls, ''Théorie de la justice'' (1971), trad. C. Audard, Paris, Seuil, 1987. * John L. Mackie, ''Ethics: Inventing Right and Wrong'', Harmondsworth, Penguin, 1977. * Onora O'Neill, ''Constructions of Reason: Explorations of Kant's Practical Philosophy'', Cambridge, Cambridge University Press, 1989. * Christine M. Korsgaard, ''Creating the Kingdom of Ends'', Cambridge, Cambridge University Press, 1996. * Allen W. Wood, ''Kantian Ethics'', Cambridge, Cambridge University Press, 2008. * Philippa Foot, ''Virtues and Vices'', Oxford, Blackwell, 1978. * Alasdair MacIntyre, ''After Virtue'', Notre Dame, University of Notre Dame Press, 1981. * Rosalind Hursthouse, ''On Virtue Ethics'', Oxford, Oxford University Press, 1999. * Pierre Hadot, ''Qu'est-ce que la philosophie antique ?'', Paris, Gallimard, 1995. * Pierre-François Moreau, ''Spinoza et le spinozisme'', Paris, PUF, 2003. * Jean-François Kervégan, ''L'effectif et le rationnel. Hegel et l'esprit objectif'', Paris, Vrin, 2007. * Derek Parfit, ''On What Matters'', Oxford, Oxford University Press, 2011. ==Références== {{references|colonnes=2}} {{AutoCat}} cof142za5goq7hc642933sk7i5d5w2n 765759 765758 2026-05-02T07:12:15Z PandaMystique 119061 /* Exemples de sujets de dissertation */ 765759 wikitext text/x-wiki {{ManuelPhilo}} ==Introduction : qu'est-ce que le devoir ?== Le concept de devoir occupe une place centrale dans la réflexion morale. Dans la vie quotidienne, nous utilisons fréquemment le verbe ''devoir'' : le médecin dit à son patient qu'il doit avoir une alimentation équilibrée, un mari promet à son épouse de lui être fidèle, un citoyen se doit de respecter les lois<ref>Maxime Kristanek, « Devoir (GP) », ''L'Encyclopédie philosophique'', [https://encyclo-philo.fr/item/1749], consulté en 2025.</ref>. Mais que signifie exactement ce terme lorsqu'il s'applique à la morale ? Le devoir désigne une obligation morale, c'est-à-dire ce que nous devons faire indépendamment de nos désirs personnels et de nos intérêts immédiats. Il s'agit d'une exigence qui s'impose à notre volonté et qui se distingue de la simple contrainte physique ou de la nécessité naturelle. Contrairement à ce qui ''est'' (le domaine des faits), le devoir exprime ce qui ''doit être'' (le domaine des normes)<ref>Henry Sidgwick, ''The Methods of Ethics'', seventh edition, London, Macmillan and co., 1907, p. 46.</ref>. Le concept de devoir peut être analysé en termes de raison d'agir : dire « je dois faire telle action » signifie « j'ai une raison de faire cette action »<ref>Charles Larmore, « La connaissance morale », dans R. Ogien (dir.), ''Le réalisme moral'', PUF, Paris, 1999, p. 392.</ref>. Parmi les raisons d'agir, on distingue les raisons prudentielles (fondées sur nos désirs et intérêts personnels) et les raisons morales (qui s'imposent à nous indépendamment de nos désirs). Par exemple, si un patient mange des légumes parce qu'il désire être en bonne santé, il agit selon une raison prudentielle. En revanche, si un homme reste fidèle à sa promesse même lorsque cela ne lui procure aucun avantage, il agit selon une raison morale, par devoir. Une question directrice traverse l'ensemble de la réflexion philosophique sur le devoir : faut-il y voir une loi rationnelle universelle qui s'impose à toute volonté, une exigence sociale liée aux institutions concrètes, une forme d'accomplissement de notre nature, une convention utile à la vie commune, ou encore une construction historique dont la prétention à l'objectivité est contestable ? Ces réponses ne s'excluent pas toujours, mais elles dessinent des conceptions différentes du sens de l'obligation morale, du rapport entre devoir et bonheur, entre devoir et liberté, entre règle universelle et situation singulière. C'est cette pluralité de réponses que les pages qui suivent cherchent à exposer. ''Note préliminaire'' : les trois caractéristiques du devoir moral détaillées ci-dessous correspondent principalement à la conception kantienne du devoir et ne font pas consensus dans toutes les philosophies morales. Aristote, par exemple, ne pense pas l'action morale à partir d'une loi universelle comparable à l'impératif catégorique, puisque la vertu suppose une appréciation des circonstances particulières. ===Les caractéristiques du devoir moral (selon Kant)=== Le devoir moral possède, dans la perspective kantienne, trois caractéristiques essentielles : # La catégoricité : le devoir s'applique indépendamment de nos désirs. Contrairement aux impératifs hypothétiques (« si tu veux réussir cet examen, tu dois travailler »), le devoir moral constitue un impératif catégorique qui commande sans condition : « tu ne dois pas mentir », même si mentir pourrait te procurer un avantage<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', trad. fr. V. Delbos, Paris, Librairie Delagrave, 1907 (1785), p. 125.</ref>. # L'universalité : les devoirs moraux, chez Kant, ne varient pas en fonction de circonstances particulières arbitraires. L'universalité porte d'abord sur la forme rationnelle de la maxime, c'est-à-dire sur la possibilité que la règle de l'action soit voulue par tout être raisonnable, et non sur une liste mécaniquement identique d'actions à accomplir. # La prépondérance : les raisons morales fournies par nos devoirs doivent l'emporter sur nos raisons prudentielles et sur les conventions sociales. Si nous avons le devoir de sauver un enfant de la noyade, cette obligation doit primer sur notre désir de protéger nos vêtements coûteux<ref>R. M. Hare, ''Penser en morale, entre intuition et critique'', trad. M. Bozzo-Rey, J.-P. Cléro et C. Wrobel, Paris, Hermann, 2020 (1981).</ref>. ==Les principales conceptions philosophiques du devoir== ===L'éthique kantienne du devoir=== Emmanuel Kant (1724-1804) propose la conception la plus influente de la morale du devoir dans la philosophie moderne. Pour lui, seules les actions accomplies par devoir ont une véritable valeur morale. Cette conception se sépare nettement des morales antiques qui plaçaient le bonheur au centre de la réflexion éthique. ====L'impératif catégorique==== Kant formule le principe suprême de la moralité sous la forme de l'impératif catégorique, qui se décline en trois formulations principales. ''Première formulation (universalisation)'' : « Agis uniquement d'après la maxime qui fait que tu puisses vouloir en même temps qu'elle devienne une loi universelle »<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', trad. V. Delbos, Paris, Librairie Delagrave, 1907 (1785), p. 94.</ref>. Cette formule nous invite à nous demander si la règle qui guide notre action pourrait être suivie par tous sans contradiction. Par exemple, si chacun mentait systématiquement, la confiance disparaîtrait et il deviendrait impossible de communiquer : le mensonge ne peut donc être une loi universelle<ref>Onora O'Neill, ''Constructions of Reason: Explorations of Kant's Practical Philosophy'', Cambridge, Cambridge University Press, 1989, chap. 5.</ref>. ''Deuxième formulation (humanité comme fin)'' : « Agis de telle sorte que tu traites l'humanité aussi bien dans ta personne que dans la personne de tout autre toujours en même temps comme une fin, et jamais simplement comme un moyen »<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', trad. V. Delbos, Paris, Librairie Delagrave, 1907 (1785), p. 71 (section II).</ref>. Cette formule exprime le respect dû à la dignité humaine. Chaque personne possède une valeur intrinsèque et ne peut être réduite à un simple instrument au service des fins d'autrui. ''Troisième formulation (autonomie)'' : « Agis de telle sorte que ta volonté puisse se considérer elle-même en même temps comme légiférant universellement grâce à sa maxime »<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', trad. V. Delbos, Paris, Librairie Delagrave, 1907 (1785), p. 79 (section II).</ref>. Cette formulation insiste sur l'autonomie : en obéissant à la loi morale, l'être humain obéit à une loi qu'il se donne à lui-même par sa raison<ref>Allen W. Wood, ''Kantian Ethics'', Cambridge, Cambridge University Press, 2008, chap. 4 ; Christine M. Korsgaard, ''Creating the Kingdom of Ends'', Cambridge, Cambridge University Press, 1996.</ref>. ====Agir par devoir, non par inclination==== Pour Kant, il est essentiel de distinguer les actions conformes au devoir et les actions accomplies par devoir. Un marchand peut vendre honnêtement ses produits, mais s'il le fait uniquement par intérêt (pour conserver sa clientèle), son action est conforme au devoir sans avoir de valeur morale authentique. En revanche, si une personne désespérée conserve sa vie non par peur ou par désir de bonheur, mais par devoir, alors son action possède une véritable valeur morale<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', première section, trad. V. Delbos, Paris, Delagrave, 1907 (1785), p. 13-15.</ref>. Cette conception exigeante souligne que la valeur morale de l'action ne dépend pas de ses conséquences ni de l'inclination qui la motive, mais de l'intention pure d'accomplir son devoir. Il faut toutefois préciser que Kant accorde une place propre au sentiment moral : le ''respect'' pour la loi morale est, chez lui, le seul sentiment qui ne précède pas la loi mais en résulte. La loi morale produit dans le sujet un sentiment qui n'est pas la cause mais l'effet de l'obligation. Kant écrit : « Une action accomplie par devoir tire sa valeur morale non pas du but qui doit être atteint par elle, mais de la maxime d'après laquelle elle est décidée »<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', première section, trad. V. Delbos, Paris, Delagrave, 1907 (1785), p. 18.</ref>. ====Le devoir et la liberté==== Le devoir ne s'oppose pas à la liberté mais la réalise. Pour Kant, être libre ne signifie pas faire ce que l'on veut (cela serait l'esclavage des passions), mais agir selon la raison. En obéissant à la loi morale, l'être humain n'obéit qu'à lui-même, à sa raison, et conquiert ainsi son autonomie. Au contraire, celui qui agit selon ses penchants immédiats demeure hétéronome, soumis à des forces extérieures à sa raison<ref>Voir Allen W. Wood, ''Kantian Ethics'', Cambridge, Cambridge University Press, 2008, chap. 6.</ref>. ====Devoir et bonheur selon Kant==== Chez Kant, le devoir peut entrer en conflit avec notre bonheur empirique. La moralité exige parfois de sacrifier nos intérêts personnels. Cependant, Kant pense que la raison pratique nous oriente vers ce qu'il appelle le ''souverain bien'', c'est-à-dire l'union de la vertu et du bonheur, la vertu en étant la condition. Pour rendre pensable la possibilité d'une telle harmonie, Kant introduit deux postulats de la raison pratique : l'immortalité de l'âme et l'existence de Dieu<ref>Emmanuel Kant, ''Critique de la raison pratique'', Dialectique, livre II, chap. II, trad. F. Picavet, Paris, PUF, 1965 (1788).</ref>. Il importe de souligner que ces postulats ne fondent pas la validité de la loi morale, qui s'impose par la raison pure. Ils accompagnent l'espérance liée au souverain bien : la loi morale serait obligatoire même si l'âme n'était pas immortelle et même si Dieu n'existait pas. ===L'éthique aristotélicienne de la vertu=== Aristote (384-322 av. J.-C.), dans son ''Éthique à Nicomaque'', propose une conception très différente de la morale, centrée non sur le devoir au sens moderne, mais sur la vertu (''arétè'') et le bonheur (''eudaimonia''). Aristote ne construit d'ailleurs pas une morale du devoir au sens kantien : il pense d'abord la formation du caractère, la vertu, la prudence et la vie bonne. Parler de « devoir » à son sujet est donc en partie anachronique. ====La vertu comme disposition acquise==== Pour Aristote, les vertus morales ne sont pas innées : elles s'acquièrent par l'habitude et l'exercice. C'est en pratiquant les actions justes que nous devenons justes, en accomplissant des actions modérées que nous devenons modérés, en accomplissant des actions courageuses que nous devenons courageux<ref>Aristote, ''Éthique à Nicomaque'', II, 1, 1103a-b.</ref>. La vertu est une disposition stable (''hexis'') qui rend possible l'action bonne. L'homme vertueux trouve un plaisir propre dans l'action conforme à la vertu, mais ce plaisir n'efface pas l'effort requis : la vertu reste une disposition rationnelle, acquise par l'exercice et orientée par la prudence<ref>Pierre Aubenque, ''La prudence chez Aristote'', Paris, PUF, 1963.</ref>. ====Le juste milieu==== La vertu se définit comme un juste milieu entre deux excès. Par exemple, le courage est le juste milieu entre la lâcheté (excès de crainte) et la témérité (absence de crainte). La tempérance est le juste milieu entre l'insensibilité et l'intempérance. Ce juste milieu n'est pas une moyenne arithmétique, mais une disposition appropriée aux circonstances et à la personne. Il s'agit d'une médiété ''relative à nous'', c'est-à-dire déterminée en tenant compte de la situation concrète et de l'individu, selon l'appréciation de l'homme prudent<ref>Aristote, ''Éthique à Nicomaque'', II, 6, 1106b36-1107a2.</ref>. ====La prudence (phronesis)==== La vertu morale s'accompagne nécessairement d'une vertu intellectuelle appelée prudence ou sagesse pratique (''phronesis''). Cette faculté permet de délibérer correctement pour déterminer, dans chaque situation particulière, quelle est l'action appropriée. Aristote la définit comme une disposition rationnelle relative à l'action, capable de discerner ce qui est bon ou mauvais pour un être humain<ref>Aristote, ''Éthique à Nicomaque'', VI, 5, 1140b4-6.</ref>. ====Le bonheur comme fin dernière==== Contrairement à Kant, Aristote ne sépare pas vertu et bonheur. Pour lui, la vie vertueuse n'est pas un sacrifice pénible mais l'accomplissement de notre nature rationnelle et sociale. La vertu n'est donc pas seulement un moyen d'atteindre le bonheur : elle en est une part constitutive. Le bien pour l'homme consiste dans une activité de l'âme en accord avec la vertu<ref>Aristote, ''Éthique à Nicomaque'', I, 7, 1098a16-18.</ref>. Toutefois, Aristote reconnaît que le bonheur véritable suppose aussi un certain nombre de biens extérieurs (santé, ressources, amitiés, conditions politiques favorables). Sans ces biens, l'exercice de la vertu reste possible mais difficile. Aristote distingue par ailleurs plusieurs formes de vie bonne : la vie pratique vertueuse, ordonnée à l'action politique et morale, et la vie contemplative (''theoria''), à laquelle il réserve la forme la plus haute d'accomplissement humain<ref>Aristote, ''Éthique à Nicomaque'', X, 7-8 ; Rosalind Hursthouse, ''On Virtue Ethics'', Oxford, Oxford University Press, 1999 ; Alasdair MacIntyre, ''After Virtue'', Notre Dame, University of Notre Dame Press, 1981.</ref>. ===Hegel : du devoir abstrait à l'éthicité concrète=== Georg Wilhelm Friedrich Hegel (1770-1831) critique la conception kantienne du devoir qu'il juge trop abstraite et formelle. Dans ses ''Principes de la philosophie du droit'' (1820), il distingue trois sphères. ''Le droit abstrait'' : la sphère de la propriété et du contrat, où l'individu est reconnu comme personne juridique. ''La moralité'' (''Moralität'') : la sphère de la conscience morale subjective, du devoir intérieur, telle que Kant l'a conçue. Pour Hegel, cette sphère reste insuffisante car elle demeure abstraite et individuelle. ''L'éthicité'' (''Sittlichkeit'') : la sphère des institutions concrètes (famille, société civile, État) où le devoir trouve son contenu effectif. Dans l'éthicité, l'individu n'accomplit pas ses devoirs par contrainte intérieure abstraite. Il les reconnaît comme siens en s'identifiant aux institutions historiques et rationnelles auxquelles il appartient. L'éthicité n'est donc pas une simple naturalité sociale ; elle est une médiation rationnelle où la liberté subjective et l'ordre institutionnel se rejoignent<ref>Jean-François Kervégan et Gilles Marmasse (dir.), ''Hegel penseur du droit'', Paris, CNRS Éditions, 2004 ; Jean-François Kervégan, ''L'effectif et le rationnel. Hegel et l'esprit objectif'', Paris, Vrin, 2007.</ref>. Hegel ne propose pas une simple réconciliation entre devoir et inclination. Il opère ce qu'il nomme une ''Aufhebung'', c'est-à-dire un dépassement qui conserve certains éléments d'une position antérieure tout en les transformant et en les replaçant dans un ensemble plus riche. La morale kantienne est ainsi reprise et intégrée à l'universel concret des institutions. Cela ne signifie pas que l'État résoudrait par lui-même tous les conflits possibles entre l'individu et la société : Hegel reconnaît la possibilité de tensions, et les analyses du chapitre sur la société civile montrent qu'elle produit ses propres déséquilibres. Pour Hegel, le devoir bien compris ne s'oppose pas aux inclinations : la disposition éthique consiste à reconnaître dans l'accomplissement de ses devoirs la réalisation de son intérêt propre. Dans l'État rationnel, le citoyen accomplit ses devoirs non comme un sacrifice imposé du dehors mais en réalisant sa propre liberté<ref>Hegel, ''Principes de la philosophie du droit'', § 147 et § 150.</ref>. ===Rousseau : le citoyen et la volonté générale=== Jean-Jacques Rousseau (1712-1778), dans ''Du Contrat social'' (1762), pense le devoir politique à partir de la notion de volonté générale. ====Le contrat social==== Par le contrat social, chaque individu s'associe avec tous les autres en mettant « en commun sa personne et toute sa puissance sous la suprême direction de la volonté générale »<ref>Jean-Jacques Rousseau, ''Du Contrat social'', livre I, chapitre 6.</ref>. Cette aliénation totale de chacun crée un corps politique dont chaque membre est à la fois citoyen (participant au pouvoir souverain) et sujet (soumis aux lois). ====La volonté générale==== La volonté générale ne se confond pas avec la simple addition des intérêts particuliers ; elle exprime ce qui peut valoir comme intérêt commun, une fois écartées les considérations purement privées qui s'opposent les unes aux autres<ref>Jean-Jacques Rousseau, ''Du Contrat social'', livre II, chapitre 3.</ref>. Elle vise toujours le bien commun et reste « toujours droite » lorsqu'elle est correctement formée. Rousseau distingue cependant la rectitude de la volonté générale et la justesse du jugement du peuple : le peuple veut toujours son bien, mais il peut se tromper sur ce bien. La volonté générale n'est donc pas l'opinion majoritaire immédiate ; elle suppose des conditions de délibération, d'information et d'égalité qui ne sont pas toujours réunies. Le devoir du citoyen consiste à obéir aux lois qui expriment la volonté générale. Cette obéissance constitue l'exercice même de sa liberté, puisqu'il obéit à des lois qu'il a lui-même contribué à établir : « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du Contrat social'', livre I, chapitre 8.</ref>. Quiconque refuse d'obéir à la volonté générale peut y être contraint par le corps politique, « ce qui ne signifie autre chose sinon qu'on le forcera d'être libre »<ref>Jean-Jacques Rousseau, ''Du Contrat social'', livre I, chapitre 7.</ref>. ===Le stoïcisme : action appropriée et accord avec la nature=== Les philosophes stoïciens (Zénon, Épictète, Marc Aurèle) proposent une conception de l'agir fondée sur l'idée d'un ordre rationnel universel. Le précepte fondamental consiste à « vivre en accord avec la nature », c'est-à-dire avec la raison qui gouverne le cosmos. Comme la nature humaine est essentiellement rationnelle, vivre selon la nature revient à vivre selon la raison<ref>Voir Maxime Kristanek, « Stoïcisme (A) », ''L'Encyclopédie philosophique'', [https://encyclo-philo.fr/item/1681], consulté en 2025 ; Pierre Hadot, ''Qu'est-ce que la philosophie antique ?'', Paris, Gallimard, 1995.</ref>. Le terme grec qui correspond le mieux à ce que nous appelons « devoir » est, chez les stoïciens, ''kathêkon'', souvent traduit par « action appropriée » ou « devoir convenable ». Le ''kathêkon'' désigne l'action raisonnable que la situation requiert, compte tenu des rôles que chacun occupe. Le stoïcisme ne se réduit donc pas à l'acceptation du destin : il implique aussi des responsabilités sociales, familiales et politiques. Les stoïciens précisent toutefois que les actions appropriées peuvent être accomplies par des hommes ordinaires qui s'efforcent de suivre la raison, alors que l'action parfaitement droite, accomplie en toute connaissance et avec une disposition stable, n'est le propre que du sage. ====Ce qui dépend de nous==== Épictète distingue ce qui dépend de nous (nos jugements, nos désirs, nos volontés) et ce qui ne dépend pas de nous (notre corps, notre réputation, notre place sociale, notre destinée). L'action appropriée consiste à concentrer nos efforts sur ce qui dépend de nous et à accepter avec sérénité ce qui ne dépend pas de nous<ref>Épictète, ''Manuel'', § 1.</ref>. ====Les devoirs sociaux==== Marc Aurèle, empereur et philosophe stoïcien, insiste sur les devoirs sociaux qui découlent de notre nature rationnelle et sociale. Chacun doit remplir le rôle qui lui échoit dans l'ordre cosmique, qu'il soit empereur ou esclave. L'exercice des vertus de justice, de courage, de tempérance et de prudence constitue, selon lui, la voie vers la sagesse<ref>Marc Aurèle, ''Pensées pour moi-même'', livres II et VIII. On consultera la traduction d'Émile Bréhier dans ''Les Stoïciens'', Paris, Gallimard, « Bibliothèque de la Pléiade », 1962.</ref>. ===Spinoza : le conatus et l'éthique=== Baruch Spinoza (1632-1677) propose dans son ''Éthique'' une conception qui s'éloigne de la morale traditionnelle de l'obligation. Spinoza ne dissout pas pour autant toute distinction entre bien et mal : il en transforme le sens, en les rapportant à la puissance d'agir des êtres et non à un ordre transcendant. ====Le conatus==== Pour Spinoza, « chaque chose, autant qu'il est en elle, s'efforce de persévérer dans son être »<ref>Baruch Spinoza, ''Éthique'', III, proposition 6.</ref>. Ce principe, appelé ''conatus'', constitue l'essence même de chaque être. L'homme n'agit pas par devoir imposé de l'extérieur mais par l'effort naturel de persévérer dans son être et d'augmenter sa puissance d'agir. Cet effort n'est pas un acte volontaire ou conscient ajouté à la nature de l'individu ; il exprime cette nature elle-même. ====Bien et mal, liberté et nécessité==== Pour Spinoza, les notions traditionnelles de bien et de mal n'ont pas de fondement transcendant. Mais elles conservent une signification rationnelle relative : est dit ''bon'' ce qui augmente la puissance d'agir d'un individu, ''mauvais'' ce qui la diminue. Le bien est « ce que nous savons avec certitude être un moyen de nous rapprocher de plus en plus du modèle de la nature humaine que nous nous proposons »<ref>Baruch Spinoza, ''Éthique'', IV, préface.</ref>. La morale spinoziste n'est donc pas une absence de norme, mais une réorientation des normes : elles cessent d'être des commandements extérieurs pour devenir l'expression rationnelle de notre puissance. On parle alors d'une morale ''immanente'', c'est-à-dire qui ne procède pas d'une instance extérieure ou supérieure, mais des effets concrets que les actions produisent sur notre puissance d'agir. La liberté ne consiste pas à obéir à un devoir moral transcendant, mais à comprendre la nécessité qui nous détermine et à agir selon la raison plutôt que selon les passions. Le sage spinoziste, guidé par la connaissance adéquate, reconnaît que les autres hommes raisonnables augmentent sa propre puissance d'agir : la coopération rationnelle et la joie partagée sont des conditions de l'augmentation du ''conatus''. Spinoza ne prône donc nullement un égoïsme ignorant autrui, mais une éthique rationnelle où l'intérêt bien compris coïncide avec la vie sociale<ref>Pierre-François Moreau, ''Spinoza et le spinozisme'', Paris, PUF, 2003.</ref>. ===Hume et le sentiment moral=== David Hume (1711-1776) conteste l'idée d'un fondement purement rationnel du devoir moral. Selon lui, la raison seule ne peut motiver l'action : ce sont nos sentiments moraux et nos passions qui nous poussent à agir. Hume soutient que nos jugements moraux reposent sur l'approbation et la désapprobation que produisent en nous certains traits de caractère ou certaines actions, par l'intermédiaire de la sympathie<ref>David Hume, ''Enquête sur les principes de la morale'' (1751), trad. P. Saltel, Paris, GF-Flammarion, 1991.</ref>. La raison éclaire les faits, calcule les moyens et analyse les circonstances ; mais l'approbation morale elle-même relève du sentiment. Hume analyse en outre la justice comme une vertu artificielle, c'est-à-dire comme une convention sociale née de la rareté des biens et du besoin de coopération. Cette analyse rapproche Hume des théories conventionnalistes, mais sans qu'il fasse pour autant de l'utilité le critère unique de la moralité. ===L'utilitarisme : Bentham et Mill=== L'utilitarisme propose une éthique conséquentialiste où l'action juste est celle qui produit le plus grand bien-être pour le plus grand nombre. Jeremy Bentham (1748-1832) en formule la version la plus directe : il s'agit de calculer la somme algébrique des plaisirs et des peines que les actions produisent, et d'agir de manière à maximiser le solde de plaisir<ref>Jeremy Bentham, ''An Introduction to the Principles of Morals and Legislation'', London, T. Payne, 1789, chap. I.</ref>. Bentham cherche à évaluer les plaisirs et les peines selon plusieurs critères, comme leur intensité, leur durée, leur certitude, leur proximité, leur fécondité, leur pureté et leur étendue. Sa conception du plaisir est essentiellement quantitative : c'est par la combinaison de ces critères mesurables que l'on apprécie la valeur d'une action. John Stuart Mill (1806-1873) reprend le principe d'utilité, mais introduit une distinction qualitative entre les plaisirs. Pour lui, certains plaisirs (intellectuels, esthétiques, moraux) sont supérieurs en qualité à d'autres (sensoriels), même si leur intensité est moindre<ref>John Stuart Mill, ''L'Utilitarisme'' (1861), trad. G. Tanesse, Paris, GF-Flammarion, 1988, chap. II.</ref>. Mill soutient en particulier que ceux qui ont fait l'expérience des deux genres de plaisirs préfèrent les plaisirs supérieurs : ''it is better to be a human being dissatisfied than a pig satisfied'', écrit-il, ce que l'on peut rendre par : il vaut mieux être un être humain insatisfait qu'un porc satisfait. Mill défend par ailleurs des distinctions importantes entre la justice et l'utilité, et reconnaît la valeur de règles stables que l'on ne saurait réviser à chaque situation. Le devoir, dans cette perspective, ne consiste pas à suivre une règle abstraite, mais à viser, par nos actions et nos institutions, le bien-être collectif. ==Les enjeux philosophiques du devoir== ===Le devoir s'oppose-t-il au bonheur ?=== Cette question traverse toute l'histoire de la philosophie morale et oppose principalement Kant à Aristote. ''La position kantienne'' : pour Kant, le devoir peut entrer en conflit avec notre bonheur. La moralité exige parfois de sacrifier nos intérêts personnels. Kant pense néanmoins que la raison pratique nous permet d'espérer une harmonie entre vertu et bonheur, qu'il appelle souverain bien<ref>Emmanuel Kant, ''Critique de la raison pratique'', Dialectique, livre II, chap. II, trad. F. Picavet, Paris, PUF, 1965 (1788).</ref>. ''La position aristotélicienne'' : pour Aristote, il n'y a pas d'opposition véritable entre vertu et bonheur. La vie vertueuse est elle-même la réalisation du bonheur humain. L'homme véritablement vertueux trouve du plaisir à accomplir des actions vertueuses. La vertu n'est pas un sacrifice mais un accomplissement. Cette opposition renvoie à des conceptions différentes du bonheur. Si l'on définit le bonheur comme la satisfaction de tous nos désirs immédiats, alors il peut entrer en conflit avec le devoir. Si l'on conçoit le bonheur comme l'accomplissement de notre nature rationnelle, alors devoir et bonheur convergent. ===Le devoir s'oppose-t-il à la liberté ?=== Cette question constitue un paradoxe apparent : comment peut-on être libre en obéissant à un devoir qui s'impose à nous ? ''L'autonomie kantienne'' : pour Kant, le devoir ne s'oppose pas à la liberté mais la réalise. Obéir au devoir, c'est obéir à la loi que notre propre raison nous prescrit. Cette autonomie (du grec ''autos'', soi-même, et ''nomos'', loi) constitue la véritable liberté, par opposition à l'hétéronomie qui consiste à être déterminé par des causes extérieures (désirs, pressions sociales, etc.)<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', section III, trad. V. Delbos, Paris, Librairie Delagrave, 1907 (1785).</ref>. ''La liberté positive'' : on peut distinguer la liberté négative (absence de contraintes externes) et la liberté positive (capacité de se déterminer soi-même selon la raison). Le devoir moral relève de cette liberté positive. Cette idée rejoint Rousseau, pour qui « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du Contrat social'', livre I, chapitre 8.</ref>, tandis que Kant parle plutôt d'autonomie de la volonté. La parenté est réelle mais la perspective diffère : chez Rousseau, il s'agit d'une liberté politique dans l'ordre de la loi commune ; chez Kant, d'une liberté morale par laquelle la volonté rationnelle se donne à elle-même la loi. ''Le risque de l'aliénation'' : certains philosophes critiquent cette conception et y voient une forme d'aliénation. Obéir au devoir, ce serait renoncer à sa singularité au profit d'une loi universelle abstraite qui nie la diversité des individus et des situations. Nietzsche, par exemple, voit dans la morale du devoir une intériorisation de la contrainte, qu'il analyse par sa généalogie des valeurs. ===Peut-on fonder le devoir ?=== Cette question oppose des familles de positions plus diverses qu'une simple alternative entre réalisme et nihilisme. Les distinctions présentées ci-dessous ne sont pas toutes exigibles au baccalauréat, mais elles permettent de comprendre que la question du fondement du devoir admet plusieurs réponses et qu'il existe différentes manières de défendre, ou de contester, l'objectivité des jugements moraux. ''Le réalisme moral'' soutient que les devoirs moraux existent objectivement, indépendamment de nos croyances et de nos conventions, et que nous pouvons les connaître. Plusieurs fondements peuvent être proposés : * la nature humaine : nos devoirs découlent de notre nature rationnelle et sociale (Aristote) ; * la raison pure : les devoirs sont fondés sur des procédures rationnelles comme l'universalisation (Kant) ; * les commandements divins : les devoirs sont fondés sur la volonté de Dieu (théologie morale) ; * l'intuition : nous connaissons certains devoirs de manière directe et évidente (intuitionnisme)<ref>William David Ross, ''The Right and the Good'', Oxford, Oxford University Press, 1930.</ref>. ''Le constructivisme moral'' considère que les normes morales ne sont pas découvertes mais construites par des procédures rationnelles ou délibératives. La justice, pour John Rawls, résulte ainsi d'un accord hypothétique conclu sous le voile d'ignorance<ref>John Rawls, ''Théorie de la justice'', trad. C. Audard, Paris, Seuil, 1987 (1971).</ref>. Christine Korsgaard défend, dans la lignée de Kant, un constructivisme qui ancre l'obligation morale dans les exigences réflexives de l'agent rationnel. ''Le subjectivisme'' et le ''relativisme moral'' font dépendre les jugements moraux respectivement des préférences individuelles ou des cultures particulières. Aucun jugement ne pourrait alors prétendre à une vérité absolue : la moralité varierait selon les sujets ou selon les sociétés. ''L'expressivisme'' soutient que les énoncés moraux n'ont pas pour fonction de décrire des faits objectifs, mais d'exprimer des attitudes (approbation, désapprobation) ou de prescrire des conduites. Cette tradition trouve une expression contemporaine chez Allan Gibbard ou Simon Blackburn<ref>Simon Blackburn, ''Ruling Passions'', Oxford, Clarendon Press, 1998 ; Allan Gibbard, ''Wise Choices, Apt Feelings'', Cambridge (Mass.), Harvard University Press, 1990.</ref>. ''La théorie de l'erreur'', défendue par John Mackie, occupe une position singulière : les énoncés moraux ordinaires prétendent bien décrire des faits objectifs, mais cette prétention est, selon Mackie, systématiquement fausse, car aucun fait moral ne correspond à ces énoncés. Mackie développe en particulier un ''argument de l'étrangeté'' : les propriétés morales objectives, telles que les conçoivent les réalistes, seraient des entités métaphysiques étranges, sans analogue dans le reste du réel<ref>John L. Mackie, ''Ethics: Inventing Right and Wrong'', Harmondsworth, Penguin, 1977, chap. 1.</ref>. Quant à Nietzsche, il est plus exact de le présenter comme un généalogiste critique des valeurs morales que comme un simple « nihiliste ». Son projet, dans ''La Généalogie de la morale'', consiste à reconstituer l'histoire des valeurs morales, en particulier de la morale de la culpabilité et du ressentiment, pour mettre au jour leurs conditions d'émergence et leurs effets sur les formes de vie<ref>Friedrich Nietzsche, ''La Généalogie de la morale'' (1887), trad. P. Wotling, Paris, Le Livre de Poche, 2000.</ref>. ===Que devons-nous faire concrètement ?=== Cette question pratique oppose différentes théories normatives. ''Le déontologisme'' : certains devoirs sont absolus et ne dépendent pas des conséquences. Par exemple, il ne faut pas mentir, même si les conséquences de la franchise sont graves. Kant défend cette position dans son texte ''Sur un prétendu droit de mentir par humanité'' (1797), où il refuse l'idée d'un droit de mentir, même à un meurtrier qui demanderait où se cache sa victime<ref>Emmanuel Kant, « Sur un prétendu droit de mentir par humanité » (1797), trad. L. Guillermit, dans ''Théorie et pratique. D'un prétendu droit de mentir par humanité. La Fin de toutes choses'', Paris, Vrin, 2000.</ref>. ''Le conséquentialisme'' : nous devons accomplir les actions qui produisent les meilleures conséquences en termes de bien-être général. L'utilitarisme de Bentham et Mill en est l'exemple le plus connu. Selon cette théorie, le devoir consiste à maximiser le bonheur du plus grand nombre<ref>John Stuart Mill, ''L'Utilitarisme'' (1861), trad. G. Tanesse, Paris, GF-Flammarion, 1988.</ref>. ''L'éthique des vertus'' : au lieu de se concentrer sur les règles à suivre, il faut développer des vertus de caractère (courage, générosité, honnêteté) et s'inspirer de personnes vertueuses. Cette approche, inspirée d'Aristote, connaît un renouveau dans la philosophie morale contemporaine, en particulier à la suite de l'article d'Elizabeth Anscombe sur la philosophie morale moderne et des travaux de Philippa Foot, Alasdair MacIntyre et Rosalind Hursthouse<ref>Elizabeth Anscombe, « Modern Moral Philosophy », ''Philosophy'', vol. 33, n° 124, 1958 ; Philippa Foot, ''Virtues and Vices'', Oxford, Blackwell, 1978 ; Rosalind Hursthouse, ''On Virtue Ethics'', Oxford, Oxford University Press, 1999.</ref>. ====Un exemple : le mensonge destiné à protéger quelqu'un==== Pour rendre ces théories plus concrètes, on peut imaginer une situation classique : un proche menacé se cache chez nous, et un tiers hostile demande où il est. Faut-il mentir pour le protéger ? Kant, dans son texte ''Sur un prétendu droit de mentir par humanité'', refuse l'idée d'un droit de mentir, même dans ce cas. Le mensonge détruit la valeur universelle de la véracité, qui est la condition de toute communication entre êtres rationnels, et il rend celui qui ment responsable des conséquences imprévisibles de son acte. Aristote ne formulerait pas la question en termes de loi universelle. Il chercherait l'action que choisirait l'homme prudent, en tenant compte des circonstances, des personnes, des conséquences possibles. La franchise est une vertu, mais la prudence peut l'orienter de manière à éviter un mal plus grand. Hume rappellerait que la sympathie nous incline naturellement à protéger un proche en danger, et que cette inclination est moralement approuvée. La justice exige le respect de règles générales, mais le sentiment moral peut, dans certaines situations particulières, justifier qu'on s'écarte de la franchise. Bentham et Mill, du point de vue utilitariste, comparent les conséquences. Si le mensonge sauve une vie sans causer de dommage durable, il maximise probablement le bien-être collectif. Mill ajouterait toutefois que les règles morales générales (comme l'interdiction du mensonge) ont une valeur d'utilité globale et qu'il faut peser sérieusement les exceptions. Cet exemple montre comment des théories différentes peuvent diverger sur des cas précis, sans qu'aucune ne se réduise à une simple application mécanique d'une règle. ===Les dilemmes moraux=== Les dilemmes moraux sont des situations où plusieurs devoirs entrent en conflit, rendant impossible leur accomplissement simultané. Dans le roman de William Styron ''Le Choix de Sophie'', une mère doit choisir lequel de ses deux enfants sera épargné par un officier nazi, l'autre étant condamné à mort<ref>Voir Maxime Kristanek, « Paradoxe (A) », ''L'Encyclopédie philosophique'', [https://encyclo-philo.fr/paradoxe-a], consulté en 2025, section 4.</ref>. Face aux dilemmes moraux, plusieurs positions sont possibles : * nier leur existence réelle : un des devoirs apparents n'est pas un véritable devoir ; * admettre leur existence mais établir une hiérarchie entre les devoirs ; * reconnaître l'existence de situations tragiques où tout choix implique une faute morale. ==Sujets de dissertation== Avant de proposer des sujets répartis par grands thèmes, voici quelques conseils généraux pour aborder une dissertation sur la notion de devoir. ''Analyser les termes du sujet.'' La plupart des sujets articulent le devoir avec une autre notion : la liberté, le bonheur, autrui, la conscience, la loi. Il faut d'abord se demander quel sens chaque terme reçoit dans la question posée. Le mot « devoir », par exemple, peut renvoyer à l'impératif catégorique kantien, à un rôle social, à un sentiment d'obligation, à une règle juridique ou à une exigence intérieure. Repérer ces ambiguïtés permet de construire une vraie problématique, au lieu de répondre à un sujet supposé. ''Identifier la tension à laquelle invite le sujet.'' Une bonne dissertation ne se contente pas de juxtaposer des thèses. Elle part d'une difficulté : pourquoi la question se pose-t-elle ? Quel paradoxe ou quel conflit oblige à réfléchir ? « Suis-je libre quand je fais mon devoir ? » suppose, par exemple, qu'à première vue le devoir contraint la liberté. Le travail consistera alors à examiner si cette première impression est juste, à la nuancer, et à proposer une compréhension plus précise de ce qu'on appelle « liberté ». ''Mobiliser plusieurs doctrines et les confronter.'' Les théories morales présentées dans cet article ne sont pas interchangeables. Kant, Aristote, Hume, Mill, Hegel ou Nietzsche ne donneraient pas la même réponse à une même question. Une bonne copie ne se borne pas à exposer chaque position : elle les fait dialoguer, en montrant pourquoi l'une ne suffit pas et en quoi une autre la complète ou la corrige. ''S'appuyer sur des exemples précis.'' Les exemples ne sont pas un ornement, mais un instrument d'analyse. Le mensonge destiné à protéger un proche, la désobéissance civile face à une loi injuste, le devoir de secours envers un inconnu, le respect d'une promesse contraignante : ces situations concrètes permettent de tester la portée des théories et d'éviter les généralités abstraites. ''Éviter quelques pièges fréquents.'' Confondre le devoir moral avec une simple obéissance aux lois ; réduire la morale du devoir à Kant en oubliant les autres conceptions ; opposer mécaniquement devoir et bonheur sans interroger les termes ; transformer la dissertation en plaidoyer personnel au lieu d'une analyse argumentée. La rigueur consiste à examiner chaque thèse avec la même attention, y compris celles qu'on ne partage pas spontanément. ===Sujets sur le devoir et la liberté=== # Faire son devoir, est-ce renoncer à sa liberté ? # Suis-je libre quand je fais mon devoir ? # Le devoir s'oppose-t-il à la liberté ? # L'obéissance au devoir peut-elle être un acte libre ? # Reconnaître ses devoirs, est-ce renoncer à sa liberté ? # Peut-on être libre en obéissant à un devoir ? ''Conseil.'' Sur ces sujets, l'enjeu est de distinguer plusieurs sens du mot liberté : absence de contrainte extérieure, capacité de céder à ses désirs immédiats, ou capacité de se déterminer par sa raison. Le rapprochement entre Rousseau (l'obéissance à la loi qu'on s'est prescrite) et Kant (l'autonomie de la volonté) permet de montrer que le devoir peut, dans certaines conceptions, réaliser la liberté plutôt que la contredire. Les critiques nietzschéennes de l'obéissance morale offrent un contrepoint utile pour éviter une réponse trop unilatérale. ===Sujets sur le devoir et le bonheur=== # Est-ce un devoir d'être heureux ? # Avons-nous le devoir de faire le bonheur des autres ? # Le bonheur et le devoir sont-ils compatibles ? # Faire son devoir sans être heureux, est-ce possible ? # La recherche du bonheur est-elle un obstacle à l'accomplissement du devoir ? # Peut-on concilier bonheur et devoir ? ''Conseil.'' La réponse dépend largement de la conception du bonheur que l'on adopte. Si le bonheur se réduit à la satisfaction des désirs immédiats, le devoir peut s'y opposer. Si le bonheur est conçu comme accomplissement de soi (Aristote, Spinoza), il converge avec l'exercice de la vertu. La position kantienne, plus exigeante, distingue le bonheur empirique du souverain bien et soutient que le devoir doit primer, sans renoncer à l'espérance d'une harmonie ultime. La perspective utilitariste, enfin, fait du bien-être collectif le critère même du devoir. ===Sujets sur la nature du devoir=== # D'où vient que nous avons des devoirs ? # Qu'est-ce qui fonde nos devoirs moraux ? # Tous les hommes ont-ils les mêmes devoirs ? # Suffit-il de faire son devoir ? # La morale se résume-t-elle à faire son devoir ? # Peut-on parler d'un devoir envers soi-même ? ''Conseil.'' Sur la question du fondement, mobiliser les principales familles présentées dans l'article : la nature humaine (Aristote), la raison pure (Kant), le sentiment moral (Hume), les conséquences (utilitarisme), les conventions sociales, la critique généalogique (Nietzsche). La question « tous les hommes ont-ils les mêmes devoirs ? » invite à distinguer universalisme moral et relativisme culturel : il faut analyser ce qui peut être universalisable (le respect de la dignité d'autrui, par exemple) et ce qui dépend des contextes historiques et institutionnels. ===Sujets sur le devoir et autrui=== # Avons-nous des devoirs envers les animaux ? # Ai-je le devoir d'aimer autrui ? # Le devoir de secourir autrui a-t-il des limites ? # Peut-on désobéir par devoir ? # Y a-t-il un devoir de mémoire ? # La désobéissance à la loi peut-elle être un devoir ? ''Conseil.'' Ces sujets engagent des débats contemporains. La question des devoirs envers les animaux peut s'appuyer sur l'utilitarisme (Bentham, Peter Singer) et sur une discussion du concept kantien d'humanité comme fin en soi. La désobéissance par devoir peut s'éclairer par les analyses de la désobéissance civile (Thoreau, Hannah Arendt, Habermas) et par la distinction rousseauiste entre la volonté générale et la volonté de tous : on peut désobéir à une loi qui contredit la justice sans renoncer à l'idée même de loi. Distinguer le devoir d'aimer (qui peut sembler contradictoire, l'amour n'étant pas commandable) et le devoir de respecter ou de secourir, qui ne dépendent pas de l'inclination affective. ===Sujets sur le devoir et la morale=== # Agir moralement, est-ce agir par devoir ? # La notion d'obligation est-elle indispensable à la morale ? # Suffit-il d'avoir bonne conscience pour être sûr d'agir moralement ? # Faut-il toujours suivre sa conscience ? # Les passions nous empêchent-elles de faire notre devoir ? # Peut-on faire son devoir par habitude ? ''Conseil.'' La question « agir moralement, est-ce agir par devoir ? » oppose typiquement Kant à l'éthique des vertus : pour Kant, seule l'action accomplie par devoir a une valeur morale ; pour Aristote et l'éthique des vertus, l'action vertueuse procède d'une disposition stable acquise par l'habitude, qui n'a pas besoin d'être motivée par la conscience explicite d'une obligation. Sur la question de la conscience morale, attention à ne pas la confondre avec la simple opinion : la bonne conscience peut tromper, et il existe une conscience dévoyée ou mal éclairée. La conscience suppose donc un travail de réflexion et d'auto-examen, qu'aucune théorie morale ne dispense d'accomplir. ==Extraits de textes philosophiques à étudier== ===Texte 1 : Kant, ''Fondements de la métaphysique des mœurs'' (1785)=== <blockquote> « Il est sans doute conforme au devoir qu'un marchand ne vende pas plus cher sa marchandise à l'acheteur inexpérimenté, et, là où le commerce est important, le marchand avisé s'en garde bien en effet ; il établit au contraire un prix fixe, le même pour tout le monde, si bien qu'un enfant achète chez lui à aussi bon compte que tout autre. On est donc loyalement servi ; mais ce n'est pas à beaucoup près assez pour qu'on en croie le marchand agissant ainsi par devoir et d'après des principes de probité ; son intérêt l'exigeait ainsi. Au contraire, conserver sa vie est un devoir, et c'est en outre une chose pour laquelle chacun a encore une inclination immédiate. Or c'est pour cela que la sollicitude souvent inquiète que la plupart des hommes y apportent n'en est pas moins dépourvue de toute valeur intrinsèque et que leur maxime n'a aucun prix moral. Ils protègent leur vie conformément au devoir, sans doute, mais non par devoir. En revanche, que des contrariétés et un chagrin sans espoir aient enlevé à un homme tout goût de vivre, si ce malheureux, à l'âme forte, est plus indigné de son sort qu'il n'est découragé ou abattu, s'il désire la mort et cependant conserve sa vie sans l'aimer, non par inclination ni par crainte, mais par devoir, alors sa maxime a une valeur morale. » </blockquote> Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), première section, trad. V. Delbos, Paris, Delagrave, 1907, p. 13-14<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', trad. V. Delbos, Paris, Librairie Delagrave, 1907, p. 13-14.</ref>. ''Analyse'' : ce texte distingue trois types d'actions : celles accomplies par intérêt, celles accomplies par inclination (par désir naturel), et celles accomplies par pur devoir. Seules ces dernières ont une valeur morale authentique. Le marchand honnête agit conformément au devoir, mais son honnêteté s'explique par son intérêt (conserver sa clientèle). De même, celui qui conserve sa vie par plaisir de vivre agit conformément au devoir mais par inclination. Seul celui qui conserve sa vie malgré le dégoût qu'elle lui inspire, parce qu'il reconnaît que c'est son devoir, agit véritablement par devoir et possède une volonté moralement bonne. ===Texte 2 : Kant, ''Fondements de la métaphysique des mœurs'' (1785) — l'impératif catégorique=== <blockquote> « Agis uniquement d'après la maxime qui fait que tu puisses vouloir en même temps qu'elle devienne une loi universelle. […] Agis comme si la maxime de ton action devait être érigée par ta volonté en loi universelle de la nature. […] Agis de telle sorte que tu traites l'humanité aussi bien dans ta personne que dans la personne de tout autre toujours en même temps comme une fin, et jamais simplement comme un moyen. […] Agis de telle sorte que ta volonté puisse se considérer elle-même en même temps comme légiférant universellement grâce à sa maxime. » </blockquote> Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), deuxième section, trad. V. Delbos, Paris, Delagrave, 1907, p. 63, 71, 79<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'', trad. V. Delbos, Paris, Librairie Delagrave, 1907, p. 63, 71, 79.</ref>. ''Analyse'' : ces trois formulations de l'impératif catégorique expriment le même principe fondamental sous différents angles. La première formule (universalisation) nous invite à tester nos maximes en imaginant qu'elles deviennent des lois universelles. La deuxième formule (humanité comme fin) exprime le respect dû à chaque personne humaine en raison de sa dignité. La troisième formule (autonomie) souligne que la loi morale émane de notre propre raison : en lui obéissant, nous ne nous soumettons qu'à nous-mêmes. ===Texte 3 : Aristote, ''Éthique à Nicomaque'' (IVe siècle av. J.-C.)=== <blockquote> « La vertu est donc une disposition à agir d'une façon délibérée, consistant en une médiété relative à nous, laquelle est rationnellement déterminée et comme la déterminerait l'homme prudent. » </blockquote> Aristote, ''Éthique à Nicomaque'', livre II, chap. 6, 1106b36-1107a2<ref>Aristote, ''Éthique à Nicomaque'', livre II, chap. 6, 1106b36-1107a2. On consultera notamment l'édition R. Bodéüs, Paris, GF-Flammarion, 2004.</ref>. ''Analyse'' : Aristote définit la vertu morale comme une disposition stable (''hexis'') à choisir délibérément le juste milieu entre deux extrêmes vicieux. Cette disposition n'est pas innée : elle s'acquiert par l'habitude et l'exercice. La vertu requiert également la prudence (''phronesis''), cette sagesse pratique qui permet de déterminer, dans chaque situation particulière, où se situe le juste milieu. Contrairement à Kant, pour qui le devoir prend la forme d'une loi universelle, Aristote insiste sur le caractère relatif et contextuel de l'action vertueuse : le juste milieu est « relatif à nous », c'est-à-dire qu'il doit être adapté aux circonstances et à la personne, selon le jugement de l'homme prudent. ===Texte 4 : Rousseau, ''Du Contrat social'' (1762)=== <blockquote> « Chacun de nous met en commun sa personne et toute sa puissance sous la suprême direction de la volonté générale ; et nous recevons en corps chaque membre comme partie indivisible du tout. À l'instant, au lieu de la personne particulière de chaque contractant, cet acte d'association produit un corps moral et collectif composé d'autant de membres que l'assemblée a de voix, lequel reçoit de ce même acte son unité, son moi commun, sa vie et sa volonté. » </blockquote> Jean-Jacques Rousseau, ''Du Contrat social'' (1762), livre I, chap. 6<ref>Jean-Jacques Rousseau, ''Du Contrat social'', livre I, chapitre 6, édition GF-Flammarion, Paris, 1966, p. 51-52.</ref>. ''Analyse'' : par le contrat social, les individus s'unissent en un corps politique régi par la volonté générale. Chaque citoyen devient à la fois membre du souverain (en tant qu'il participe à la formation de la volonté générale) et sujet (en tant qu'il obéit aux lois qui expriment cette volonté). Le devoir du citoyen consiste à obéir aux lois, mais cette obéissance n'est pas une contrainte extérieure : en obéissant aux lois qu'il a lui-même contribué à établir, le citoyen obéit à sa propre volonté et demeure libre. Rousseau réconcilie ainsi devoir et liberté, à condition que la volonté générale soit correctement formée. ===Texte 5 : Épictète, ''Manuel'' (Ier-IIe siècle ap. J.-C.)=== <blockquote> « Il y a des choses qui dépendent de nous et d'autres qui ne dépendent pas de nous. Dépendent de nous l'opinion, la tendance, le désir, l'aversion, bref, toutes nos œuvres propres ; ne dépendent pas de nous le corps, la richesse, les témoignages de considération, les hautes charges, bref, toutes les choses qui ne sont pas nos œuvres propres. » </blockquote> Épictète, ''Manuel'', § 1<ref>Épictète, ''Manuel'', § 1. On consultera la traduction d'Émile Bréhier dans ''Les Stoïciens'', Paris, Gallimard, « Bibliothèque de la Pléiade », 1962.</ref>. ''Analyse'' : ce texte fondamental du stoïcisme distingue ce qui dépend de notre volonté (nos jugements, nos désirs, nos choix) et ce qui n'en dépend pas (notre corps, notre richesse, notre réputation, notre destinée). L'action appropriée (''kathêkon'') consiste à concentrer nos efforts sur ce qui dépend de nous et à accepter avec sérénité ce qui ne dépend pas de nous. Cette attitude rend possible la liberté intérieure. Le sage stoïcien accomplit ce que sa situation requiert non par contrainte mais en comprenant la nécessité rationnelle qui gouverne l'univers. ===Texte 6 : Hegel, ''Principes de la philosophie du droit'' (1820)=== Le paragraphe 147 expose ce que Hegel appelle la « disposition éthique ». L'idée centrale peut être formulée ainsi, en paraphrasant le texte original : la disposition éthique consiste, pour l'individu, à reconnaître que son but particulier ne prend sens que comme moment de l'universel, et à se comporter, dans sa volonté comme dans son sentiment, en accord avec cet universel. Là réside, selon Hegel, ce qu'il nomme la confiance éthique : la conviction que mon intérêt propre est conservé et porté par les institutions qui me dépassent<ref>G. W. F. Hegel, ''Principes de la philosophie du droit'' (1820), § 147. Pour le texte allemand, voir l'édition E. Moldenhauer et K. M. Michel, Suhrkamp, ''Werke'', t. 7. Pour une traduction française de référence, voir l'édition critique établie par Jean-François Kervégan, Paris, PUF, « Quadrige », 2013.</ref>. ''Analyse'' : Hegel critique la conception kantienne du devoir comme contrainte abstraite. Dans l'éthicité, l'individu ne perçoit plus le devoir comme une obligation extérieure qui s'opposerait à ses intérêts. Il reconnaît que son bien particulier se réalise dans et par les institutions éthiques (famille, société civile, État). La disposition éthique est donc une identification réfléchie aux institutions, où devoir et inclination peuvent se rejoindre, sans que les conflits soient pour autant exclus. ==Conclusion== La notion de devoir constitue l'un des concepts centraux de la philosophie morale. Loin d'être univoque, elle a reçu des interprétations diverses selon les époques et les auteurs. La conception kantienne du devoir comme impératif catégorique, fondé sur la raison pure et exigeant l'universalisation de nos maximes, a profondément marqué la pensée moderne. Elle s'oppose à l'éthique aristotélicienne des vertus, qui intègre l'action morale dans une réflexion plus large sur l'accomplissement humain et le bonheur. À ces deux pôles s'ajoutent les conceptions politiques de Rousseau et de Hegel, l'éthique sentimentaliste de Hume, le conséquentialisme utilitariste de Bentham et de Mill, l'analyse spinoziste du ''conatus'', ou encore la généalogie nietzschéenne des valeurs. Les questions ouvertes par ces traditions ne se referment pas. Le devoir s'oppose-t-il nécessairement au bonheur et à la liberté, ou peut-il se concilier avec eux ? Peut-on fonder rationnellement nos devoirs moraux, ou ne sont-ils que le produit de processus historiques, sociaux et psychologiques ? Comment résoudre les dilemmes moraux où plusieurs devoirs entrent en conflit ? Ces interrogations engagent notre existence concrète. Elles trouvent un écho dans des questions que les sociétés contemporaines ne peuvent plus contourner : la légitimité de la désobéissance civile, l'étendue du devoir de vérité dans la vie publique et privée, le devoir de secours envers ceux qui en ont besoin, les obligations envers les générations futures qui hériteront du monde que nous laissons, les devoirs envers les animaux et la nature non humaine. Sur chacun de ces points, les conceptions du devoir présentées dans cet article fournissent des ressources distinctes et parfois divergentes. La réflexion philosophique sur le devoir invite à prendre au sérieux l'exigence morale, à exercer notre raison pratique et à assumer notre responsabilité. Comme l'écrit Kant, « deux choses remplissent le cœur d'une admiration et d'une vénération toujours nouvelles et toujours croissantes : le ciel étoilé au-dessus de moi et la loi morale en moi »<ref>Emmanuel Kant, ''Critique de la raison pratique'', Conclusion, trad. F. Picavet, Paris, PUF, 1965 (1788), p. 173.</ref>. Cette formule n'épuise pas toutes les conceptions du devoir, mais elle exprime avec force l'idée que l'obligation morale n'est pas seulement une règle extérieure : elle engage le sujet dans ce qu'il reconnaît comme valable. ==Pour aller plus loin== ===Œuvres philosophiques=== * Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), trad. V. Delbos, Paris, Vrin. * Emmanuel Kant, ''Critique de la raison pratique'' (1788), trad. F. Picavet, Paris, PUF. * Aristote, ''Éthique à Nicomaque'', trad. R. Bodéüs, Paris, GF-Flammarion, 2004. * Jean-Jacques Rousseau, ''Du Contrat social'' (1762), édition GF-Flammarion. * G. W. F. Hegel, ''Principes de la philosophie du droit'' (1820), trad. J.-F. Kervégan, Paris, PUF. * Épictète, ''Manuel'', dans ''Les Stoïciens'', trad. É. Bréhier, Paris, Gallimard, « Bibliothèque de la Pléiade », 1962. * Marc Aurèle, ''Pensées pour moi-même'', dans ''Les Stoïciens'', trad. É. Bréhier, Paris, Gallimard, « Bibliothèque de la Pléiade », 1962. * Baruch Spinoza, ''Éthique'' (1677), trad. B. Pautrat, Paris, Seuil. * David Hume, ''Enquête sur les principes de la morale'' (1751), trad. P. Saltel, Paris, GF-Flammarion. * Jeremy Bentham, ''Introduction aux principes de la morale et de la législation'' (1789). * John Stuart Mill, ''L'Utilitarisme'' (1861), trad. G. Tanesse, Paris, GF-Flammarion. * Friedrich Nietzsche, ''La Généalogie de la morale'' (1887), trad. P. Wotling, Paris, Le Livre de Poche, 2000. ===Études contemporaines=== * Pierre Aubenque, ''La prudence chez Aristote'', Paris, PUF, 1963. * Elizabeth Anscombe, « Modern Moral Philosophy », ''Philosophy'', vol. 33, n° 124, 1958. * William David Ross, ''The Right and the Good'', Oxford, Oxford University Press, 1930. * John Rawls, ''Théorie de la justice'' (1971), trad. C. Audard, Paris, Seuil, 1987. * John L. Mackie, ''Ethics: Inventing Right and Wrong'', Harmondsworth, Penguin, 1977. * Onora O'Neill, ''Constructions of Reason: Explorations of Kant's Practical Philosophy'', Cambridge, Cambridge University Press, 1989. * Christine M. Korsgaard, ''Creating the Kingdom of Ends'', Cambridge, Cambridge University Press, 1996. * Allen W. Wood, ''Kantian Ethics'', Cambridge, Cambridge University Press, 2008. * Philippa Foot, ''Virtues and Vices'', Oxford, Blackwell, 1978. * Alasdair MacIntyre, ''After Virtue'', Notre Dame, University of Notre Dame Press, 1981. * Rosalind Hursthouse, ''On Virtue Ethics'', Oxford, Oxford University Press, 1999. * Pierre Hadot, ''Qu'est-ce que la philosophie antique ?'', Paris, Gallimard, 1995. * Pierre-François Moreau, ''Spinoza et le spinozisme'', Paris, PUF, 2003. * Jean-François Kervégan, ''L'effectif et le rationnel. Hegel et l'esprit objectif'', Paris, Vrin, 2007. * Derek Parfit, ''On What Matters'', Oxford, Oxford University Press, 2011. ==Références== {{references|colonnes=2}} {{AutoCat}} biz067pa9wuebdlx4u7dznbho454dzg Manuel de terminale de philosophie/Bonheur 0 83097 765718 757715 2026-05-01T19:52:06Z PandaMystique 119061 765718 wikitext text/x-wiki {{ManuelPhilo}} Tout être humain semble désirer le bonheur. Mais dès qu'on cherche à dire ce qu'il est, ou par quels moyens l'atteindre, les réponses divergent. Le bonheur est-il un sentiment intérieur ou une vie réussie ? Dépend-il de nous ou des circonstances extérieures ? Faut-il satisfaire ses désirs, les limiter ou les transformer ? Peut-on être heureux dans l'injustice, la pauvreté ou l'illusion ? Ces questions, qui traversent toute l'histoire de la philosophie, montrent que le bonheur n'est pas une donnée immédiate de l'existence : ses contours varient selon la doctrine qui l'interprète, et chaque tradition en éclaire une face différente. === Qu'est-ce que le bonheur ? === Le mot « bonheur » vient du latin ''bonum augurium'', qui signifie « bon augure » ou « bonne chance ». À l'origine, le bonheur était donc lié à la chance, au hasard. Une partie de la tradition philosophique a précisément cherché à savoir si le bonheur pouvait dépendre de nous plutôt que d'une fortune favorable. On confond souvent le bonheur avec des états proches qu'il faut pourtant distinguer. Le plaisir est une sensation agréable, souvent corporelle et passagère, comme manger quelque chose de délicieux ou écouter une belle musique. Dans l'usage courant, la joie désigne souvent une émotion vive mais ponctuelle ; certains philosophes, comme Spinoza, lui donnent toutefois un sens plus profond, comme on le verra plus loin. La satisfaction désigne le contentement qui suit la réalisation d'un désir précis. Le bien-être renvoie à un état général d'aisance physique et psychique. Le bonheur, lui, concerne la vie dans son ensemble : il dépasse l'instant et engage notre rapport à l'existence<ref>Aristote, ''Éthique à Nicomaque'', I, 7, 1098a, trad. J. Tricot, Paris, Vrin, 1990, p. 60-62.</ref>. Les philosophes anciens utilisent encore d'autres termes : la ''béatitude'' désigne un bonheur parfait, presque divin ; la ''félicité'' un bonheur stable et durable. Cette première distinction conduit à une question : le bonheur est-il un état intérieur que l'on ressent, un jugement que l'on porte sur sa vie, ou un accomplissement objectif qu'on peut constater de l'extérieur ? Selon la réponse choisie, les conceptions philosophiques s'orientent dans des directions différentes. === Les grandes conceptions du bonheur === ==== Le bonheur comme plaisir : l'épicurisme ==== Pour Épicure (341-270 avant J.-C.), philosophe grec de l'Antiquité, le bonheur se trouve dans le plaisir. Mais il ne s'agit pas de chercher tous les plaisirs n'importe comment. Épicure distingue trois types de désirs. Il y a d'abord les désirs naturels et nécessaires, comme boire quand on a soif ou manger quand on a faim. Ces désirs doivent être satisfaits. Ensuite, les désirs naturels mais non nécessaires, comme manger des plats raffinés. Enfin, les désirs ni naturels ni nécessaires, comme vouloir devenir riche ou célèbre. Ces derniers désirs sont à éviter parce qu'ils sont sans limites et nous causent du tourment<ref>Épicure, ''Lettre à Ménécée'', § 127-128, dans ''Lettres et maximes'', trad. M. Conche, Paris, PUF, 1987, p. 219-221.</ref>. Le bonheur selon Épicure, c'est l'''ataraxie'' : l'absence de trouble dans l'âme. C'est un état de tranquillité et de paix intérieure. Pour y parvenir, il faut limiter ses désirs et apprendre à ne plus craindre la mort ni les dieux. Le plaisir qu'Épicure recherche n'est donc pas l'excitation ou l'agitation, mais la sérénité qui accompagne l'absence de souffrance physique et l'absence de trouble moral<ref>Épicure, ''Maximes capitales'', I-IV, dans ''Lettres et maximes'', trad. M. Conche, Paris, PUF, 1987, p. 231-233.</ref>. À cette conception modérée du plaisir s'oppose la position défendue par Calliclès dans le ''Gorgias'' de Platon. Pour Calliclès, le bonheur consiste à laisser ses désirs grandir le plus possible et à trouver les moyens de les satisfaire. La frugalité épicurienne lui apparaîtrait comme une vie d'esclave. Socrate lui répond que cette vie est celle d'un tonneau percé qu'il faut sans cesse remplir : elle ne connaît jamais le repos<ref>Platon, ''Gorgias'', 491e-494a, trad. M. Canto-Sperber, Paris, GF-Flammarion, 1987, p. 226-230.</ref>. Cette discussion ancienne montre que la question « faut-il satisfaire ou limiter ses désirs ? » se pose dès l'origine de la philosophie. ==== Le bonheur comme activité vertueuse : Aristote ==== Aristote (384-322 avant J.-C.) propose une autre conception du bonheur. Pour lui, le bonheur (qu'il appelle ''eudaimonia'' en grec) est le but suprême de la vie humaine, ce vers quoi tout le monde tend. Mais qu'est-ce que le bonheur selon Aristote ? Ce n'est pas d'abord un état intérieur agréable. C'est une manière de vivre. Plus précisément, le bonheur consiste à réaliser la fonction propre de l'être humain, c'est-à-dire à exercer son intelligence et sa raison de manière excellente. Le bonheur consiste donc à vivre selon la vertu<ref>Aristote, ''Éthique à Nicomaque'', I, 7, 1098a, trad. J. Tricot, Paris, Vrin, 1990, p. 60.</ref>. La vertu, chez Aristote, est une disposition acquise à bien agir, un juste milieu entre deux excès. Le courage, par exemple, est le juste milieu entre la lâcheté et la témérité. Une vie heureuse est donc une vie où l'on cultive ces vertus et où l'on agit avec raison. Aristote insiste sur un point important : le bonheur n'arrive pas en un instant. C'est une activité qui se déploie sur toute une vie. On ne peut pas dire qu'une personne est heureuse après une seule journée agréable ; il faut considérer sa vie dans son ensemble<ref>Aristote, ''Éthique à Nicomaque'', I, 10, 1100a-1101a, trad. J. Tricot, Paris, Vrin, 1990, p. 73-77.</ref>. Aristote ne réduit pourtant pas le bonheur à la seule vertu morale. Il reconnaît que la vie heureuse a aussi besoin de certains biens extérieurs : la santé, une situation matérielle suffisante, des amis, et même une certaine beauté physique. Surtout, l'homme étant un « animal politique », son bonheur ne se développe pleinement que dans une cité juste. Enfin, dans le livre X de l'''Éthique à Nicomaque'', Aristote présente la vie contemplative, consacrée à la connaissance, comme la forme la plus haute du bonheur<ref>Aristote, ''Éthique à Nicomaque'', X, 7-8, 1177a-1178a, trad. J. Tricot, Paris, Vrin, 1990, p. 506-512.</ref>. Il existe ainsi une tension à l'intérieur du texte aristotélicien : le livre I semble faire du bonheur la totalité d'une vie moralement accomplie en société, tandis que le livre X confère la priorité à la contemplation. Cette hésitation n'est pas une contradiction, mais l'indice d'une question philosophique difficile : la vie heureuse est-elle d'abord une vie d'action vertueuse, ou une vie de connaissance ? ==== Le bonheur comme sérénité : le stoïcisme ==== Les philosophes stoïciens, comme Épictète (50-125 après J.-C.) ou Marc Aurèle (121-180 après J.-C.), proposent une autre voie. Selon eux, le bonheur ne dépend pas des choses extérieures (richesse, santé, réputation) mais de notre rapport à elles. Le stoïcisme repose sur une distinction : il y a les choses qui dépendent de nous (nos jugements, nos opinions, nos désirs) et celles qui ne dépendent pas de nous (la maladie, la mort, l'opinion d'autrui, les événements). Ce qui dépend de nous, Épictète l'appelle la ''prohairesis'' : la faculté de juger, de vouloir et de consentir. Pour atteindre la tranquillité, il faut accepter avec sérénité ce qui ne dépend pas de nous et concentrer notre effort sur l'usage droit de cette faculté de jugement<ref>Épictète, ''Manuel'', § 1, trad. P. Hadot, Paris, Le Livre de Poche, 2000, p. 33-35.</ref>. Mais le stoïcisme ne se réduit pas à un changement d'attitude intérieure. Pour les stoïciens, le seul bien véritable est la vertu, et le seul mal véritable est le vice. Tout le reste, comme la santé, la richesse, la maladie ou la mort, n'est ni un bien ni un mal au sens propre : ce sont des « indifférents ». Ce qui rend une vie heureuse, c'est l'accord entre nos jugements, nos désirs et la raison qui ordonne le monde. Les passions, qui troublent l'âme, viennent de jugements erronés ; les corriger permet d'atteindre l'''apatheia''. Cette ''apatheia'' n'est pas l'absence de toute émotion : les stoïciens admettent au contraire des affects raisonnables, comme la joie du sage face au bien accompli. Ce qui disparaît, ce sont seulement les passions irrationnelles, qui naissent d'une mauvaise estimation de la valeur des choses<ref>Marc Aurèle, ''Pensées pour moi-même'', IV, 3 et VIII, 7, trad. M. Meunier, Paris, Garnier-Flammarion, 1964, p. 60-62 et p. 116-117.</ref>. === Les enjeux philosophiques du bonheur === ==== Peut-on savoir ce qui nous rend heureux ? ==== Emmanuel Kant (1724-1804), philosophe allemand, soulève un problème : le bonheur est un concept indéterminé. Personne ne peut dire avec précision ce qui le rendrait parfaitement heureux. Nos désirs changent, et ce qui nous semble bon aujourd'hui peut ne plus nous satisfaire demain. Pour Kant, le bonheur est « un idéal de l'imagination, non de la raison »<ref>Kant, ''Fondements de la métaphysique des mœurs'', deuxième section, AK IV, 418, trad. V. Delbos, Paris, Vrin, 1980, p. 124.</ref>. Cela ne veut pas dire que Kant méprise le bonheur. Il refuse seulement d'en faire le fondement de la morale. La loi morale ne peut pas être tirée de la recherche du bonheur, parce que le bonheur dépend d'inclinations sensibles et variables : on ne peut donc pas en faire une règle universelle. La morale doit reposer sur le devoir, c'est-à-dire sur le respect de la loi rationnelle. Mais Kant n'oublie pas le bonheur. Il introduit l'idée du « souverain bien », qui désigne l'union de la vertu et du bonheur. Il ne s'agit pas d'une simple récompense morale, mais d'une exigence de la raison pratique elle-même : il appartient à la raison de penser comme possible un ordre dans lequel celui qui agit moralement bien recevrait aussi sa part de bonheur. Le bonheur n'est donc pas le principe de la morale, mais il en accompagne idéalement l'achèvement<ref>Kant, ''Critique de la raison pratique'', livre II, chap. II, AK V, 110-114, trad. F. Picavet, Paris, PUF, 1989, p. 119-124.</ref>. ==== Le bonheur dépend-il de nous ou de la chance ? ==== C'est une question ancienne. Si le bonheur dépend de circonstances extérieures (santé, richesse, hasard), nous ne sommes pas maîtres de notre bonheur ; nous sommes à la merci de la fortune. Aristote reconnaît que certains biens extérieurs sont nécessaires au bonheur. On ne peut pas être pleinement heureux dans la misère ou la maladie. Mais la vertu reste l'élément principal du bonheur, parce qu'elle dépend de nous<ref>Aristote, ''Éthique à Nicomaque'', I, 9-10, 1099b-1100a, trad. J. Tricot, Paris, Vrin, 1990, p. 70-74.</ref>. Les stoïciens, eux, soutiennent que le bonheur dépend de l'usage droit du jugement, parce que ce jugement est seul à nous appartenir vraiment. Spinoza (1632-1677) ouvre une autre voie. Pour lui, la joie n'est pas une simple émotion agréable : elle est définie comme le passage à une plus grande perfection, c'est-à-dire l'augmentation de la puissance d'agir. Le bonheur consiste à comprendre par la raison les causes des choses, à transformer les passions tristes (qui diminuent notre puissance) en passions joyeuses, puis en affects actifs. La connaissance adéquate de soi, du monde et de Dieu conduit à la « béatitude », qui est l'amour intellectuel envers la Nature et coïncide avec la liberté véritable<ref>Spinoza, ''Éthique'', V, prop. 32-42, trad. B. Pautrat, Paris, Seuil, 1988, p. 535-547.</ref>. À l'opposé de cette intériorisation par la connaissance, certains penseurs insistent sur les conditions sociales et matérielles du bonheur. Karl Marx (1818-1883) montre que le travail salarié, lorsqu'il devient aliéné, prive l'ouvrier de la jouissance de ce qu'il produit, le sépare de son activité, des autres travailleurs et de lui-même. Dans une société d'inégalités, de travail contraint et de consommation, la simple bonne volonté individuelle ne suffit pas à rendre heureux : transformer la vie suppose aussi de transformer les conditions sociales du travail et de la richesse<ref>Marx, ''Manuscrits de 1844'', « Le travail aliéné », trad. J.-P. Gougeon, Paris, GF-Flammarion, 1996, p. 115-126.</ref>. ==== Le bonheur du plus grand nombre : l'utilitarisme ==== Au {{XIXe}} siècle, des philosophes anglais comme Jeremy Bentham (1748-1832) et John Stuart Mill (1806-1873) développent une théorie morale appelée ''utilitarisme''. Selon eux, une action est bonne si elle augmente le bonheur du plus grand nombre. Bentham pense qu'on peut calculer le bonheur en mesurant les plaisirs et les peines selon plusieurs critères : intensité, durée, certitude, proximité, fécondité (probabilité d'engendrer d'autres plaisirs), pureté (faible probabilité de produire des peines) et nombre de personnes concernées. Pour lui, les plaisirs ne diffèrent pas par leur nature mais par ces dimensions quantitatives ; à intensité et durée égales, le plaisir d'un jeu simple peut donc équivaloir à celui d'une lecture savante<ref>Bentham, ''Introduction aux principes de morale et de législation'', chap. IV, trad. Centre Bentham, Paris, Vrin, 2011, p. 51-54.</ref>. Mill n'est pas d'accord avec ce calcul purement quantitatif. Il introduit une différence qualitative entre les plaisirs : il existe selon lui des plaisirs supérieurs (intellectuels, moraux, esthétiques) et des plaisirs inférieurs (corporels, immédiats). « Il vaut mieux être un Socrate insatisfait qu'un imbécile satisfait », écrit-il : la qualité du plaisir compte autant que sa quantité<ref>Mill, ''L'Utilitarisme'', chap. II, trad. C. Audard, Paris, PUF, 2008, p. 51-54.</ref>. L'utilitarisme soulève des questions difficiles. Peut-on vraiment comparer des plaisirs aussi différents qu'un repas, une amitié ou une lecture ? Peut-on additionner les bonheurs individuels pour obtenir un bonheur collectif ? Et surtout : est-il juste de sacrifier le bonheur d'une minorité au bonheur de la majorité, si le calcul l'exige ? Ces difficultés font que l'utilitarisme est à la fois une théorie politique forte et une doctrine très discutée. ==== Le bonheur est-il vraiment possible ? Le pessimisme ==== Certains philosophes ont une vision plus sombre. Arthur Schopenhauer (1788-1860) pense que le bonheur durable est une illusion. Selon lui, la vie humaine oscille entre la souffrance et l'ennui : quand nos désirs ne sont pas satisfaits, nous souffrons ; quand ils le sont, nous nous ennuyons et cherchons de nouveaux désirs<ref>Schopenhauer, ''Le Monde comme volonté et comme représentation'', livre IV, § 57, trad. A. Burdeau, Paris, PUF, 1966, p. 391-396.</ref>. Pour Schopenhauer, le bonheur n'est jamais qu'un soulagement provisoire. La sagesse consiste à diminuer la souffrance en renonçant à ses désirs et en se tournant vers l'art ou la compassion. Une critique d'un autre type vient de Sigmund Freud (1856-1939). Dans ''Le Malaise dans la culture'', il rappelle que la civilisation impose des renoncements aux pulsions individuelles, ce qui crée une tension permanente entre le désir d'être heureux et les exigences de la vie en société. Freud formule de manière ironique l'idée que le bonheur humain ne semble pas avoir été prévu par quelque ordre providentiel du monde : la formule est anti-providentialiste, et non l'aveu d'une croyance en un « plan de la création »<ref>Freud, ''Le Malaise dans la culture'', chap. II, trad. P. Cotet, R. Lainé et J. Stute-Cadiot, Paris, PUF, 2010, p. 19-22.</ref>. ==== Le bonheur face à l'absurde : Albert Camus ==== Albert Camus (1913-1960), écrivain et essayiste français, aborde le bonheur d'une manière originale. Dans ''Le Mythe de Sisyphe'', il évoque ce héros condamné par les dieux à rouler éternellement un rocher jusqu'au sommet d'une montagne, d'où il retombe aussitôt. Cette situation paraît désespérée et absurde. Pourtant, Camus écrit : « Il faut imaginer Sisyphe heureux ». Comment cela ? Parce que Sisyphe prend conscience de sa condition et l'assume sans illusion. Il ne cherche plus dans le ciel ou dans une promesse de salut le sens qui lui manque. Il refuse l'espoir religieux ou métaphysique et choisit d'habiter pleinement sa tâche<ref>Camus, ''Le Mythe de Sisyphe'', Paris, Gallimard, 1942, p. 165-168.</ref>. Pour Camus, le bonheur est possible même dans un monde absurde, c'est-à-dire un monde qui n'a pas de sens préétabli. Ce bonheur naît d'une lucidité, d'un refus du désespoir et d'une révolte qui maintient la vie intense, malgré l'absence de justification ultime. === Conclusion === Les conceptions du bonheur examinées dans ce chapitre ne se laissent pas réduire à une réponse unique. Elles dessinent toutefois trois grandes questions directrices. D'abord : le bonheur est-il un état subjectif ressenti, ou une vie objectivement réussie ? Aristote et Camus, à des époques différentes, refusent de le réduire à un sentiment intérieur. Schopenhauer, à l'inverse, évalue négativement la structure affective du désir humain, tandis que l'utilitarisme cherche à mesurer les plaisirs et les peines pour fonder une politique du bien commun. Ensuite : le bonheur dépend-il de nous ou des conditions extérieures ? Les stoïciens en font dépendre le bonheur de l'usage droit du jugement ; Spinoza, de la connaissance et de la puissance d'agir ; Aristote rappelle que la vie heureuse exige aussi des biens extérieurs, des amis et une cité juste ; Marx ou les penseurs de la justice sociale soulignent que la transformation du bonheur passe par celle des conditions matérielles et politiques. Enfin : faut-il rechercher le bonheur directement, ou résulte-t-il d'autre chose ? Bentham et Mill en font le but explicite de l'action ; Kant pense au contraire qu'il faut viser le devoir, le bonheur n'étant qu'une espérance. Camus suggère qu'il vient par surcroît, à celui qui assume sa condition. Réfléchir au bonheur ne consiste donc pas seulement à comparer des doctrines. C'est apprendre à articuler ces tensions, en lien avec les autres notions du programme : le désir, la liberté, la justice, le travail, l'État, la conscience. == Sujets de dissertation == Cette collection propose seize sujets de dissertation philosophique portant sur la notion de bonheur, organisés selon différentes perspectives : métaphysique, éthique, politique et existentielle. Chaque question ouvre un ensemble de problématiques que tout penseur doit affronter pour comprendre en quoi consiste une vie bonne et comment l'atteindre. === 1. Faut-il philosopher pour bien vivre ? === Cette question d'ouverture pose un problème que les philosophes eux-mêmes se sont longtemps posé. Y a-t-il une nécessité intrinsèque à philosopher pour accéder au bonheur, ou la réflexion théorique constitue-t-elle simplement un chemin parmi d'autres ? Les anciens Grecs, notamment Aristote, tenaient que la vie heureuse consiste en l'exercice vertueux de l'âme, ce qui exige une certaine connaissance de ce qu'est la vertu. Cependant, nombre de gens vivent heureux sans jamais avoir lu un traité d'éthique. La question demande d'examiner si la philosophie est une condition du bonheur ou seulement un moyen parmi d'autres, et si le bien vivre suppose une compréhension explicite de ce qui rend la vie bonne. === 2. Le bonheur est-il un idéal inaccessible ? === Le bonheur parfait, total et perpétuel semble appartenir à l'ordre de l'utopie. Tout état heureux s'accompagne de limitations : la finitude humaine, la souffrance, l'expérience du deuil. Peut-on concevoir le bonheur autrement que comme un horizon jamais complètement atteint ? Certains courants philosophiques, notamment l'épicurisme, proposent une version plus modérée du bonheur comme absence de douleur plutôt que comme joie constante. D'autres, comme le stoïcisme, le conçoivent comme indépendant des circonstances extérieures. La question invite à réfléchir sur ce qui rend un idéal inaccessible et si cette inaccessibilité est un problème philosophique réel ou simplement le résultat d'une définition trop exigeante. === 3. Existe-t-il des critères du bonheur ? === Le bonheur est-il une notion univoque et bien déterminée, ou reste-t-elle relative à chaque individu ? Peut-on établir des critères objectifs permettant de juger qu'une personne ou qu'une vie est heureuse ? Aristote proposait que le bonheur réside dans l'exercice vertueux de nos capacités proprement humaines. Kant, lui, refusait de placer le bonheur au cœur de l'éthique, mais reconnaissait l'importance du « souverain bien » qui combine vertu et bonheur. La question demande s'il existe des critères universels du bonheur ou si chacun doit trouver ses propres repères. Elle touche aussi à la possibilité d'une mesure du bonheur et à ce que signifierait une telle mesure. === 4. Le bonheur consiste-t-il à faire tout ce qui nous fait plaisir ? === L'identification du bonheur au plaisir constitue une tentative de réponse immédiate et intuitive. Mais elle pose des problèmes : certains plaisirs semblent nuisibles à long terme, certains plaisirs entrent en conflit les uns avec les autres, et poursuivre tous ses désirs conduit souvent à l'épuisement ou à la culpabilité. Épicure lui-même, malgré sa réputation, recommandait une certaine frugalité dans la recherche du plaisir, privilégiant les plaisirs naturels et nécessaires. La question pousse à distinguer entre différents types de plaisirs et à interroger s'il existe une hiérarchie entre eux. === 5. Le bonheur est-il une somme de plaisirs ? === Cette formulation suggère une approche quantitative : le bonheur résulterait de l'accumulation ou de la maximisation des plaisirs. C'est essentiellement la position de l'utilitarisme classique, notamment chez Jeremy Bentham. Mais peut-on vraiment additionner des plaisirs hétérogènes ? Un plaisir intense et bref vaut-il mieux qu'une satisfaction durable mais moins intense ? John Stuart Mill introduisit la distinction entre plaisirs inférieurs et supérieurs, reconnaissant que certains plaisirs intellectuels ou moraux possèdent une qualité que d'autres ne possèdent pas. La question demande si l'approche mathématique peut saisir la nature du bonheur ou si celui-ci ne relève pas d'une autre logique. === 6. Y a-t-il une différence de degré ou de nature entre le bonheur et le plaisir ? === Le plaisir semble instantané, localisé, souvent corporel. Le bonheur paraît plus durable, plus global, plus profond. Mais s'agit-il d'une simple question d'intensité ou de durée (différence de degré), ou le bonheur appartient-il à un ordre différent (différence de nature) ? Peut-on accéder à un véritable bonheur en vivant une suite de plaisirs minimaux ? Inversement, peut-on être heureux en renonçant complètement au plaisir ? Cette distinction entre bonheur et plaisir constitue un carrefour où se rencontrent plusieurs traditions philosophiques, du platonisme au confucianisme. === 7. Le bonheur est-il un simple hasard ? === Cette question interroge la part de contingence et de maîtrise dans le bonheur. Sommes-nous maîtres de notre bonheur, ou celui-ci dépend-il de circonstances externes échappant à notre contrôle : notre tempérament naturel, notre milieu social, les événements imprévisibles ? Les Anciens parlaient de ''tyché'' (chance, fortune) comme d'une puissance qui échappe à la raison. Montaigne, relevant l'instabilité du destin humain, reconnaissait le poids de la contingence. Cependant, soutenir que le bonheur est purement aléatoire semblerait ôter toute responsabilité et tout sens à nos efforts. La question demande comment articuler la reconnaissance de notre dépendance aux circonstances avec une certaine forme de maîtrise ou d'autonomie. === 8. Le bonheur peut-il être le résultat d'une pratique ou d'un art de vivre ? === Contrairement à l'idée qu'il serait un simple hasard, cette perspective envisage le bonheur comme acquis par la discipline, la pratique et l'apprentissage. L'éthique aristotélicienne insiste sur la formation des vertus par la répétition des bonnes actions. Le stoïcisme propose un art de vivre fondé sur la distinction entre ce qui dépend de nous et ce qui ne dépend pas de nous. De nombreuses traditions non occidentales, du bouddhisme au taoïsme, offrent des pratiques censées conduire au bien-être ou à l'illumination. La question soulève la possibilité d'une « technique » du bonheur et ses limites : peut-on vraiment l'enseigner et l'apprendre comme on apprend un métier ? === 9. Le bonheur est-il une affaire de politique ? === Si le bonheur dépend largement des conditions sociales, économiques et politiques, alors sa réalisation ne peut pas être individuelle mais doit relever de la responsabilité collective. Platon, dans la ''République'', envisage un ordre politico-social destiné à produire l'harmonie et le bien-être. Aristote affirme que l'homme est un animal politique et que la vie heureuse s'épanouit dans la cité. Les penseurs utilitaristes du {{XIXe}} siècle proposaient que la politique vise à maximiser le bonheur du plus grand nombre. Cependant, la question de savoir si la politique doit poursuivre explicitement le bonheur reste contestée : ne risque-t-on pas de sacrifier les libertés individuelles à une conception collective du bien ? L'État ne risque-t-il pas, en poursuivant le bonheur, d'imposer à tous une conception unique de la vie bonne ? === 10. Le bonheur peut-il dépendre de nous ? === Cette question interroge le degré d'autonomie que nous possédons sur notre propre bonheur. S'il dépendait entièrement de nous, nous pourrions le produire à volonté, ce qui ne semble pas vrai. Mais s'il ne dépendait pas du tout de nous, l'effort et la responsabilité seraient illusoires. Le stoïcisme, notamment avec Épictète, distingue nettement entre ce qui dépend de nous (nos jugements, nos intentions) et ce qui ne dépend pas de nous (notre corps, les événements externes), et préconise de concentrer nos efforts sur ce qui nous appartient. Cette distinction peut-elle vraiment résoudre le problème ? Notre bonheur ne résulte-t-il pas toujours d'une combinaison complexe d'efforts personnels et de circonstances externes ? === 11. Y a-t-il un devoir d'être heureux ? === À première vue, le bonheur semble être ce que nous cherchons naturellement, pas une obligation morale. Cependant, plusieurs penseurs ont soulevé l'idée que nous avons des devoirs envers nous-mêmes de cultiver nos capacités et de mener une vie digne. Kant, tout en refusant de placer le bonheur au cœur de la morale, reconnaît que le « souverain bien » combine vertu et bonheur. On pourrait aussi avancer que nous avons un devoir envers les autres de ne pas nous laisser sombrer dans la misère, qui affecte ceux qui nous entourent. La question demande si le bonheur relève d'un droit, d'un devoir, ou simplement d'une aspiration naturelle sans caractère moral. === 12. Le bonheur est-il utopique ? === L'utopie désigne un lieu qui n'existe pas, un idéal irréalisable. Qualifier le bonheur d'utopique signifierait que nous ne pouvons que nous en rapprocher sans jamais l'atteindre vraiment. Mais certaines sociétés ou certaines périodes historiques semblent avoir produit des formes de bien-être général, même si aucune n'a réalisé une félicité absolue. La question demande si l'utopie du bonheur joue un rôle moteur utile dans l'organisation de nos sociétés, ou si elle nous détourne des réalisations possibles en nous promettant l'impossible. Elle s'interroge aussi sur ce qui distingue une utopie d'une aspiration légitime mais exigeante. === 13. La culture est-elle un gage de bonheur ? === La culture, au sens de raffinement intellectuel, de connaissance des arts, des sciences et des humanités, semble enrichir la vie. Cependant, elle peut aussi générer de nouvelles formes de malheur : culpabilité, conscience du malheur d'autrui, sentiment d'inadéquation face aux grands idéaux. Une personne peu instruite peut-elle être plus heureuse qu'un intellectuel perpétuellement inquiet ? La question rejoint le débat entre les plaisirs « inférieurs » et les plaisirs « supérieurs ». Elle demande aussi si le bonheur consiste davantage dans l'ignorance confortable ou dans l'autonomie de pensée qu'offre la culture, même au prix du trouble et du questionnement. === 14. Le bonheur des hommes dépend-il de l'augmentation des richesses ? === Cette question moderne s'impose avec force dans nos sociétés de consommation. Certaines études contemporaines suggèrent qu'au-delà d'un seuil où les besoins matériels sont satisfaits, l'augmentation des richesses n'améliore que marginalement le bien-être subjectif. Pourtant, la pauvreté constitue clairement un obstacle au bonheur. La question demande s'il existe un point d'équilibre : à quel niveau de richesse maîtrisée le bonheur atteint-il son optimum ? Elle interroge aussi la nature du désir de richesse : repose-t-il sur un besoin véritable ou sur une illusion entretenue par le désir de comparaison sociale ? === 15. Le bonheur n'est-il pas un état d'esprit ? === Cette affirmation suggère que le bonheur dépend avant tout de notre attitude face aux circonstances, plutôt que des circonstances elles-mêmes. Deux personnes en situation identique peuvent connaître des niveaux de bien-être très différents selon leur disposition d'esprit. Cette perspective rapproche le bonheur de la sérénité stoïcienne ou de l'équanimité bouddhiste. Cependant, dire que le bonheur relève d'un simple état d'esprit pourrait sembler réducteur ou même cruel : cela pourrait suggérer que celui qui souffre a seulement besoin de « changer d'attitude » plutôt que d'améliorer ses conditions matérielles. La question demande comment équilibrer la reconnaissance de l'importance de la perspective mentale avec celle des réalités concrètes. === 16. La recherche du bonheur nous pousse-t-elle à changer notre façon d'être ? === Poursuivre activement le bonheur nous oblige-t-il à transformer nos habitudes, nos valeurs, nos relations ? Si le bonheur ne s'obtient qu'au prix d'une profonde conversion intérieure ou d'un apprentissage exigeant, alors la question de savoir comment nous vivons devient centrale. De nombreuses traditions voient dans cette transformation de soi la condition du bien-être durable. Mais on peut aussi se demander si une telle exigence de changement perpétuel ne nous éloigne pas du bonheur plutôt que de nous en rapprocher. La question touche à l'authenticité : faut-il accepter qui nous sommes ou nous transformer ? Le bonheur suppose-t-il une acceptation de soi ou une acceptation créatrice de nos possibilités ? === Perspectives transversales === Ces seize questions forment un ensemble où plusieurs thèmes surgissent régulièrement : * La relation entre plaisir et bonheur revient dans les questions 4, 5 et 6. Elle demande de distinguer l'immédiat du durable, le local du global. * Le degré d'autonomie personnel apparaît dans les questions 7, 8 et 10. Il concerne notre responsabilité et notre pouvoir d'agir. * Le contexte social et politique se manifeste dans les questions 9 et 14. Il soulève la question de savoir si le bonheur est individuel ou collectif. * La nature du bonheur, qu'il s'agisse d'une sensation, d'un jugement ou d'un état, traverse en arrière-plan toutes ces questions. * L'accès au bonheur, par la chance, la pratique, la réflexion ou la transformation, structure plusieurs de ces interrogations. Ces dissertations invitent à explorer le bonheur non comme une notion simple, mais comme un carrefour où se rencontrent l'éthique, la métaphysique, la politique et l'existence quotidienne. Aucune réponse définitive ne peut clore ces questions ; chaque époque, chaque individu, doit les reposer en fonction de ses circonstances et de sa compréhension du monde. == Textes d'étude == ==== Épicure : le plaisir comme absence de trouble ==== ; Question travaillée : Le bonheur consiste-t-il à satisfaire tous nos plaisirs ? ; Thèse : Le plaisir est le bien suprême, mais ce plaisir doit être compris comme absence de souffrance physique et absence de trouble moral, et non comme jouissance débridée. ; Notions : plaisir, désir, ataraxie, bien. ''Questions d'analyse'' : * Pourquoi Épicure refuse-t-il certains plaisirs et accepte-t-il certaines souffrances ? * Comment comprendre que « ne dépendre que de soi-même » est un grand bien ? * En quoi cette conception du plaisir s'oppose-t-elle à l'image du débauché ? {{Citation bloc|Le plaisir est le commencement et la fin d'une vie bienheureuse. Le plaisir est, en effet, considéré par nous comme le premier des biens naturels, c'est lui qui nous fait accepter ou fuir les choses, c'est à lui que nous aboutissons, en prenant la sensibilité comme critère du bien. Or, puisque le plaisir est le premier des biens naturels, il s'ensuit que nous n'acceptons pas le premier plaisir venu, mais qu'en certains cas, nous méprisons de nombreux plaisirs, quand ils ont pour conséquence une peine plus grande. D'un autre côté, il y a de nombreuses souffrances que nous estimons préférables aux plaisirs, quand elles entraînent pour nous un plus grand plaisir. Tout plaisir, dans la mesure où il s'accorde avec notre nature, est donc un bien, mais tout plaisir n'est pas cependant nécessairement souhaitable. De même, toute douleur est un mal, mais pourtant toute douleur n'est pas nécessairement à fuir. Il reste que c'est par une sage considération de l'avantage et du désagrément qu'il procure, que chaque plaisir doit être apprécié. En effet, en certains cas, nous traitons le bien comme un mal, et en d'autres, le mal comme un bien. Ne dépendre que de soi-même est, à notre avis, un grand bien, mais il ne s'ensuit pas qu'il faille toujours se contenter de peu. Simplement, quand l'abondance nous fait défaut, nous devons pouvoir nous contenter de peu, étant bien persuadés que ceux-là jouissent le mieux de la richesse qui en ont le moins besoin, et que tout ce qui est naturel s'obtient aisément, tandis que ce qui ne l'est pas s'obtient malaisément. Les mets les plus simples apportent autant de plaisir que la table la plus richement servie, quand est absente la souffrance que cause le besoin, et du pain et de l'eau procurent le plaisir le plus vif, quand on les mange après une longue privation. L'habitude d'une vie simple et modeste est donc une bonne façon de soigner sa santé, et rend l'homme par surcroît courageux pour supporter les tâches qu'il doit nécessairement remplir dans la vie. Elle lui permet encore de mieux goûter une vie opulente, à l'occasion, et l'affermit contre les revers de la fortune. Par conséquent, lorsque nous disons que le plaisir est le souverain bien, nous ne parlons pas des plaisirs des débauchés, ni des jouissances sensuelles, comme le prétendent quelques ignorants qui nous combattent et défigurent notre pensée. Nous parlons de l'absence de souffrance physique et de l'absence de trouble moral. Car ce ne sont ni les beuveries et les banquets continuels, ni la jouissance que l'on tire de la fréquentation des mignons et des femmes, ni la joie que donnent les poissons et les viandes dont on charge les tables somptueuses, qui procurent une vie heureuse, mais des habitudes raisonnables et sobres, une raison cherchant sans cesse des causes légitimes de choix ou d'aversion, et rejetant les opinions susceptibles d'apporter à l'âme le plus grand trouble.|Épicure, ''[[Commentaire philosophique/Lettre à Ménécée|Lettre à Ménécée]]''}} ==== Sénèque : vivre selon la nature ==== ; Question travaillée : Le bonheur peut-il dépendre des biens extérieurs ? ; Thèse : Vivre heureux, c'est vivre selon la nature et la raison, en faisant des biens extérieurs des « auxiliaires » et non des maîtres ; le souverain bien est l'harmonie de l'âme. ; Notions : nature, raison, vertu, souverain bien. ''Questions d'analyse'' : * Pourquoi Sénèque distingue-t-il les biens extérieurs et l'âme ? * Que signifie « être l'artisan de sa vie » ? * Comment comprendre l'analogie entre l'esprit et le « monde » qui se concentre en soi ? {{Citation bloc|La nature, en effet, est le guide qu'il faut suivre ; c'est elle que la raison observe et consulte. C'est donc une même chose que vivre heureux et vivre selon la nature. Ce que c'est, je vais le développer : cela consiste à conserver, avec soin et sans effroi, les avantages du corps et ce qui convient à notre nature, comme choses données pour un jour et prêtes à fuir ; à ne pas nous y soumettre en esclaves, et à ne pas nous laisser posséder par les objets étrangers ; à reléguer tout ce qui plaît au corps, tout ce qui lui survient accidentellement, comme dans les camps on place à l'écart les auxiliaires et les troupes légères. Que ces objets soient des esclaves, et non des maîtres ; c'est uniquement ainsi qu'ils sont utiles à l'esprit. Que l'homme de cœur soit incorruptible en présence des choses du dehors, qu'il soit inexpugnable, et qu'il n'attache de prix qu'à se posséder lui-même ; que d'une âme confiante, que préparé à l'une et à l'autre fortune, il soit l'artisan de sa vie. Que chez lui la confiance n'existe pas sans le savoir, ni le savoir sans la fermeté ; que ses résolutions tiennent, une fois qu'elles sont prises, et que dans ses décrets il n'y ait pas de rature. On comprend, quand même je ne l'ajouterais pas, qu'un tel homme sera posé, qu'il sera rangé, qu'en cela aussi, agissant avec aménité, il sera grand. Chez lui, la véritable raison sera greffée sur les sens ; elle y puisera ses éléments ; et en effet, elle n'a pas d'autre point d'appui d'où elle s'élance, d'où elle prenne son essor vers la vérité, afin de revenir en elle-même. Le monde aussi, qui embrasse tout, ce dieu qui régit l'univers, tend à se répandre au dehors, et néanmoins, de toutes parts il se ramène en soi pour s'y concentrer. Que notre esprit fasse de même, lorsqu'en suivant les sens qui lui sont propres, il se sera étendu par leur moyen vers les objets extérieurs ; qu'il soit maître de ces objets et de lui ; qu'alors, pour ainsi dire, il enchaîne le souverain bien. De là résultera une force, une puissance unique, d'accord avec elle-même ; ainsi naîtra cette raison certaine, qui n'admet ni contrariété, ni hésitation, dans ses jugements et dans ses conceptions, non plus que dans sa persuasion. Cette raison, lorsqu'elle s'est ajustée, accordée avec ses parties et, pour ainsi dire, mise à l'unisson, a touché au souverain bien. En effet, il ne reste rien de tortueux, rien de glissant rien sur quoi elle puisse broncher ou chanceler. Elle fera tout de sa propre autorité : pour elle, point d'accident inopiné ; au contraire, toutes ses actions viendront à bien, avec aisance et promptitude, sans que l'agent tergiverse ; car les retardements et l'hésitation dénotent le trouble et l'inconstance. Ainsi, vous pouvez hardiment déclarer que le souverain bien est l'harmonie de l'âme. En effet, les vertus seront nécessairement là où sera l'accord, où sera l'unité ; la discordance est pour les vices.|Sénèque, ''De la vie heureuse'' (vers 58 après J.-C.), chap. VIII}} ==== Descartes : vaut-il mieux être heureux dans l'illusion ou moins joyeux dans la vérité ? ==== ; Question travaillée : Le bonheur peut-il reposer sur l'illusion ? ; Thèse : Le souverain bien réside dans l'exercice de la vertu, c'est-à-dire dans la possession des biens qui dépendent de notre libre arbitre ; la satisfaction d'esprit qui en découle vaut mieux qu'une gaieté fondée sur de fausses imaginations. ; Notions : vérité, illusion, libre arbitre, vertu, joie. ''Questions d'analyse'' : * Pourquoi Descartes refuse-t-il d'identifier le souverain bien à la joie ? * Que signifie distinguer le souverain bien et la satisfaction d'esprit ? * Pourquoi une joie fausse laisse-t-elle, selon Descartes, une « amertume intérieure » ? {{Citation bloc|Je me suis quelquefois proposé un doute : savoir s'il est mieux d'être gai et content, en imaginant les biens qu'on possède être plus grands et plus estimables qu'ils ne sont, et ignorant ou ne s'arrêtant pas à considérer ceux qui manquent, que d'avoir plus de considération et de savoir, pour connaître la juste valeur des uns et des autres, et qu'on devienne plus triste. Si je pensais que le souverain bien fût la joie, je ne douterais point qu'on ne dût tâcher de se rendre joyeux, à quelque prix que ce pût être, et j'approuverais la brutalité de ceux qui noient leurs déplaisirs dans le vin, ou les étourdissent avec du pétun. Mais je distingue entre le souverain bien, qui consiste en l'exercice de la vertu, ou, ce qui est le même, en la possession de tous les biens dont l'acquisition dépend de notre libre arbitre, et la satisfaction d'esprit qui suit de cette acquisition. C'est pourquoi, voyant que c'est une plus grande perfection de connaître la vérité, encore même qu'elle soit à notre désavantage, que l'ignorer, j'avoue qu'il vaut mieux être moins gai et avoir plus de connaissance. Aussi n'est-ce pas toujours lorsqu'on a le plus de gaieté qu'on a l'esprit plus satisfait ; au contraire, les grandes joies sont ordinairement mornes et sérieuses, et il n'y a que les médiocres et passagères, qui soient accompagnées du ris. Ainsi je n'approuve point qu'on tâche à se tromper, en se repaissant de fausses imaginations ; car tout le plaisir qui en revient ne peut toucher que la superficie de l'âme, laquelle sent cependant une amertume intérieure, en s'apercevant qu'ils sont faux. Et encore qu'il pourrait arriver qu'elle fût si continuellement divertie ailleurs que jamais elle ne s'en aperçût, on ne jouirait pas pour cela de la béatitude dont il est question, pour ce qu'elle doit dépendre de notre conduite, et cela ne viendrait que de la fortune.|Descartes, ''Lettre à Élisabeth'' (6 octobre 1645)}} ==== Pascal : le divertissement, fuite hors de notre condition ==== ; Question travaillée : Le divertissement nous rend-il heureux ou nous empêche-t-il de penser à notre malheur ? ; Thèse : Tout le malheur des hommes vient de leur incapacité à demeurer en repos avec eux-mêmes ; le divertissement n'apporte pas le bonheur, il détourne l'esprit de la condition humaine, faible et mortelle. ; Notions : divertissement, repos, condition humaine, bonheur, illusion. ''Questions d'analyse'' : * Pourquoi le roi sans divertissement est-il, selon Pascal, plus malheureux que ses sujets ? * Pourquoi recherche-t-on le « tracas » et non pas le bien lui-même ? * En quoi cette analyse remet-elle en cause l'idée d'un bonheur fondé sur l'activité ? {{Citation bloc|Divertissement. Quand je m'y suis mis quelquefois à considérer les diverses agitations des hommes et les périls et les peines où ils s'exposent, dans la cour, dans la guerre, d'où naissent tant de querelles, de passions, d'entreprises hardies et souvent mauvaises, etc., j'ai découvert que tout le malheur des hommes vient d'une seule chose, qui est de ne savoir pas demeurer en repos, dans une chambre. Un homme qui a assez de bien pour vivre, s'il savait demeurer chez soi avec plaisir, n'en sortirait pas pour aller sur la mer ou au siège d'une place. On n'achètera une charge à l'armée si cher, que parce qu'on trouverait insupportable de ne bouger de la ville ; et on ne recherche les conversations et les divertissements des jeux que parce qu'on ne peut demeurer chez soi avec plaisir. Mais quand j'ai pensé de plus près, et qu'après avoir trouvé la cause de tous nos malheurs, j'ai voulu en découvrir la raison, j'ai trouvé qu'il y en a une bien effective, qui consiste dans le malheur naturel de notre condition faible et mortelle, et si misérable, que rien ne peut nous consoler, lorsque nous y pensons de près. Quelque condition qu'on se figure, si l'on assemble tous les biens qui peuvent nous appartenir, la royauté est le plus beau poste du monde ; et cependant, qu'on s'en imagine [un roi] accompagné de toutes les satisfactions qui peuvent le toucher, s'il est sans divertissement, et qu'on le laisse considérer et faire réflexion sur ce qu'il est, cette félicité languissante ne le soutiendra point, il tombera par nécessité dans les vues qui le menacent, des révoltes qui peuvent arriver, et enfin de la mort et des maladies qui sont inévitables ; de sorte que, s'il est sans ce qu'on appelle divertissement, le voilà malheureux, et plus malheureux que le moindre de ses sujets, qui joue et qui se divertit. De là vient que le jeu et la conversation des femmes, la guerre, les grands emplois sont si recherchés. Ce n'est pas qu'il y ait en effet du bonheur, ni qu'on s'imagine que la vraie béatitude soit d'avoir l'argent qu'on peut gagner au jeu, ou dans le lièvre qu'on court : on n'en voudrait pas s'il était offert. Ce n'est pas cet usage mol et paisible, et qui nous laisse penser à notre malheureuse condition, qu'on recherche, ni les dangers de la guerre, ni la peine des emplois, mais c'est le tracas qui nous détourne d'y penser et nous divertit.|Pascal, ''Pensées'' (1670), fragment 139}} ==== Nietzsche : l'oubli, condition du bonheur ==== ; Question travaillée : L'oubli est-il une condition du bonheur et de l'action ? ; Thèse : Le bonheur exige une part de non-historique : la capacité d'oublier le passé pour se tenir dans le moment présent ; l'excès de mémoire empêche d'agir et de vivre. ; Notions : mémoire, oubli, action, devenir, vie. ''Questions d'analyse'' : * Pourquoi Nietzsche associe-t-il bonheur et capacité d'oublier ? * Que signifie « sentir d'une façon non historique » ? * En quoi un excès de mémoire serait-il nuisible à la vie ? {{Citation bloc|Pour le plus petit comme pour le plus grand bonheur, il y a toujours une chose qui le crée : le pouvoir d'oublier, ou, pour m'exprimer en savant, la faculté de sentir, pendant que dure le bonheur, d'une façon non-historique. Celui qui ne sait pas se reposer sur le seuil du moment pour oublier tout le passé, celui qui ne se dresse point, comme un génie de victoire, sans vertige et sans crainte, ne saura jamais ce que c'est que le bonheur, et, ce qui est pire encore, il ne fera jamais rien qui puisse rendre heureux les autres. Imaginez l'exemple extrême : un homme qui ne posséderait pas du tout la faculté d'oublier, qui serait condamné à voir en toutes choses le devenir. Un tel homme ne croirait plus à sa propre essence, ne croirait plus en lui-même ; tout s'écoulerait pour lui en points mouvants pour se perdre dans cette mer du devenir ; en véritable élève d'Héraclite il finirait par ne plus oser lever un doigt. Toute action exige l'oubli, comme tout organisme a besoin, non seulement de lumière, mais encore d'obscurité. Un homme qui voudrait sentir d'une façon tout à fait historique ressemblerait à celui qui serait forcé de se priver de sommeil, ou bien à l'animal qui devrait continuer à vivre en ne faisant que ruminer, et ruminer toujours à nouveau. Donc il est impossible de vivre sans se souvenir, de vivre même heureux, à l'exemple de la bête, mais il est absolument impossible de vivre sans oublier. Ou bien, pour m'expliquer sur ce sujet d'une façon plus simple encore, il y a un degré d'insomnie, de rumination, de sens historique qui nuit à l'être vivant et finit par l'anéantir, qu'il s'agisse d'un homme, d'un peuple ou d'une civilisation.|Nietzsche, ''Considérations inactuelles'', II (1874), § 1}} == Notes et Références == {{references|colonnes=2}} [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} 64tvam7mh0jsznd4a8r0ogjc0u0k5th 765719 765718 2026-05-01T19:56:51Z PandaMystique 119061 /* Le bonheur du plus grand nombre : l'utilitarisme */ 765719 wikitext text/x-wiki {{ManuelPhilo}} Tout être humain semble désirer le bonheur. Mais dès qu'on cherche à dire ce qu'il est, ou par quels moyens l'atteindre, les réponses divergent. Le bonheur est-il un sentiment intérieur ou une vie réussie ? Dépend-il de nous ou des circonstances extérieures ? Faut-il satisfaire ses désirs, les limiter ou les transformer ? Peut-on être heureux dans l'injustice, la pauvreté ou l'illusion ? Ces questions, qui traversent toute l'histoire de la philosophie, montrent que le bonheur n'est pas une donnée immédiate de l'existence : ses contours varient selon la doctrine qui l'interprète, et chaque tradition en éclaire une face différente. === Qu'est-ce que le bonheur ? === Le mot « bonheur » vient du latin ''bonum augurium'', qui signifie « bon augure » ou « bonne chance ». À l'origine, le bonheur était donc lié à la chance, au hasard. Une partie de la tradition philosophique a précisément cherché à savoir si le bonheur pouvait dépendre de nous plutôt que d'une fortune favorable. On confond souvent le bonheur avec des états proches qu'il faut pourtant distinguer. Le plaisir est une sensation agréable, souvent corporelle et passagère, comme manger quelque chose de délicieux ou écouter une belle musique. Dans l'usage courant, la joie désigne souvent une émotion vive mais ponctuelle ; certains philosophes, comme Spinoza, lui donnent toutefois un sens plus profond, comme on le verra plus loin. La satisfaction désigne le contentement qui suit la réalisation d'un désir précis. Le bien-être renvoie à un état général d'aisance physique et psychique. Le bonheur, lui, concerne la vie dans son ensemble : il dépasse l'instant et engage notre rapport à l'existence<ref>Aristote, ''Éthique à Nicomaque'', I, 7, 1098a, trad. J. Tricot, Paris, Vrin, 1990, p. 60-62.</ref>. Les philosophes anciens utilisent encore d'autres termes : la ''béatitude'' désigne un bonheur parfait, presque divin ; la ''félicité'' un bonheur stable et durable. Cette première distinction conduit à une question : le bonheur est-il un état intérieur que l'on ressent, un jugement que l'on porte sur sa vie, ou un accomplissement objectif qu'on peut constater de l'extérieur ? Selon la réponse choisie, les conceptions philosophiques s'orientent dans des directions différentes. === Les grandes conceptions du bonheur === ==== Le bonheur comme plaisir : l'épicurisme ==== Pour Épicure (341-270 avant J.-C.), philosophe grec de l'Antiquité, le bonheur se trouve dans le plaisir. Mais il ne s'agit pas de chercher tous les plaisirs n'importe comment. Épicure distingue trois types de désirs. Il y a d'abord les désirs naturels et nécessaires, comme boire quand on a soif ou manger quand on a faim. Ces désirs doivent être satisfaits. Ensuite, les désirs naturels mais non nécessaires, comme manger des plats raffinés. Enfin, les désirs ni naturels ni nécessaires, comme vouloir devenir riche ou célèbre. Ces derniers désirs sont à éviter parce qu'ils sont sans limites et nous causent du tourment<ref>Épicure, ''Lettre à Ménécée'', § 127-128, dans ''Lettres et maximes'', trad. M. Conche, Paris, PUF, 1987, p. 219-221.</ref>. Le bonheur selon Épicure, c'est l'''ataraxie'' : l'absence de trouble dans l'âme. C'est un état de tranquillité et de paix intérieure. Pour y parvenir, il faut limiter ses désirs et apprendre à ne plus craindre la mort ni les dieux. Le plaisir qu'Épicure recherche n'est donc pas l'excitation ou l'agitation, mais la sérénité qui accompagne l'absence de souffrance physique et l'absence de trouble moral<ref>Épicure, ''Maximes capitales'', I-IV, dans ''Lettres et maximes'', trad. M. Conche, Paris, PUF, 1987, p. 231-233.</ref>. À cette conception modérée du plaisir s'oppose la position défendue par Calliclès dans le ''Gorgias'' de Platon. Pour Calliclès, le bonheur consiste à laisser ses désirs grandir le plus possible et à trouver les moyens de les satisfaire. La frugalité épicurienne lui apparaîtrait comme une vie d'esclave. Socrate lui répond que cette vie est celle d'un tonneau percé qu'il faut sans cesse remplir : elle ne connaît jamais le repos<ref>Platon, ''Gorgias'', 491e-494a, trad. M. Canto-Sperber, Paris, GF-Flammarion, 1987, p. 226-230.</ref>. Cette discussion ancienne montre que la question « faut-il satisfaire ou limiter ses désirs ? » se pose dès l'origine de la philosophie. ==== Le bonheur comme activité vertueuse : Aristote ==== Aristote (384-322 avant J.-C.) propose une autre conception du bonheur. Pour lui, le bonheur (qu'il appelle ''eudaimonia'' en grec) est le but suprême de la vie humaine, ce vers quoi tout le monde tend. Mais qu'est-ce que le bonheur selon Aristote ? Ce n'est pas d'abord un état intérieur agréable. C'est une manière de vivre. Plus précisément, le bonheur consiste à réaliser la fonction propre de l'être humain, c'est-à-dire à exercer son intelligence et sa raison de manière excellente. Le bonheur consiste donc à vivre selon la vertu<ref>Aristote, ''Éthique à Nicomaque'', I, 7, 1098a, trad. J. Tricot, Paris, Vrin, 1990, p. 60.</ref>. La vertu, chez Aristote, est une disposition acquise à bien agir, un juste milieu entre deux excès. Le courage, par exemple, est le juste milieu entre la lâcheté et la témérité. Une vie heureuse est donc une vie où l'on cultive ces vertus et où l'on agit avec raison. Aristote insiste sur un point important : le bonheur n'arrive pas en un instant. C'est une activité qui se déploie sur toute une vie. On ne peut pas dire qu'une personne est heureuse après une seule journée agréable ; il faut considérer sa vie dans son ensemble<ref>Aristote, ''Éthique à Nicomaque'', I, 10, 1100a-1101a, trad. J. Tricot, Paris, Vrin, 1990, p. 73-77.</ref>. Aristote ne réduit pourtant pas le bonheur à la seule vertu morale. Il reconnaît que la vie heureuse a aussi besoin de certains biens extérieurs : la santé, une situation matérielle suffisante, des amis, et même une certaine beauté physique. Surtout, l'homme étant un « animal politique », son bonheur ne se développe pleinement que dans une cité juste. Enfin, dans le livre X de l'''Éthique à Nicomaque'', Aristote présente la vie contemplative, consacrée à la connaissance, comme la forme la plus haute du bonheur<ref>Aristote, ''Éthique à Nicomaque'', X, 7-8, 1177a-1178a, trad. J. Tricot, Paris, Vrin, 1990, p. 506-512.</ref>. Il existe ainsi une tension à l'intérieur du texte aristotélicien : le livre I semble faire du bonheur la totalité d'une vie moralement accomplie en société, tandis que le livre X confère la priorité à la contemplation. Cette hésitation n'est pas une contradiction, mais l'indice d'une question philosophique difficile : la vie heureuse est-elle d'abord une vie d'action vertueuse, ou une vie de connaissance ? ==== Le bonheur comme sérénité : le stoïcisme ==== Les philosophes stoïciens, comme Épictète (50-125 après J.-C.) ou Marc Aurèle (121-180 après J.-C.), proposent une autre voie. Selon eux, le bonheur ne dépend pas des choses extérieures (richesse, santé, réputation) mais de notre rapport à elles. Le stoïcisme repose sur une distinction : il y a les choses qui dépendent de nous (nos jugements, nos opinions, nos désirs) et celles qui ne dépendent pas de nous (la maladie, la mort, l'opinion d'autrui, les événements). Ce qui dépend de nous, Épictète l'appelle la ''prohairesis'' : la faculté de juger, de vouloir et de consentir. Pour atteindre la tranquillité, il faut accepter avec sérénité ce qui ne dépend pas de nous et concentrer notre effort sur l'usage droit de cette faculté de jugement<ref>Épictète, ''Manuel'', § 1, trad. P. Hadot, Paris, Le Livre de Poche, 2000, p. 33-35.</ref>. Mais le stoïcisme ne se réduit pas à un changement d'attitude intérieure. Pour les stoïciens, le seul bien véritable est la vertu, et le seul mal véritable est le vice. Tout le reste, comme la santé, la richesse, la maladie ou la mort, n'est ni un bien ni un mal au sens propre : ce sont des « indifférents ». Ce qui rend une vie heureuse, c'est l'accord entre nos jugements, nos désirs et la raison qui ordonne le monde. Les passions, qui troublent l'âme, viennent de jugements erronés ; les corriger permet d'atteindre l'''apatheia''. Cette ''apatheia'' n'est pas l'absence de toute émotion : les stoïciens admettent au contraire des affects raisonnables, comme la joie du sage face au bien accompli. Ce qui disparaît, ce sont seulement les passions irrationnelles, qui naissent d'une mauvaise estimation de la valeur des choses<ref>Marc Aurèle, ''Pensées pour moi-même'', IV, 3 et VIII, 7, trad. M. Meunier, Paris, Garnier-Flammarion, 1964, p. 60-62 et p. 116-117.</ref>. === Les enjeux philosophiques du bonheur === ==== Peut-on savoir ce qui nous rend heureux ? ==== Emmanuel Kant (1724-1804), philosophe allemand, soulève un problème : le bonheur est un concept indéterminé. Personne ne peut dire avec précision ce qui le rendrait parfaitement heureux. Nos désirs changent, et ce qui nous semble bon aujourd'hui peut ne plus nous satisfaire demain. Pour Kant, le bonheur est « un idéal de l'imagination, non de la raison »<ref>Kant, ''Fondements de la métaphysique des mœurs'', deuxième section, AK IV, 418, trad. V. Delbos, Paris, Vrin, 1980, p. 124.</ref>. Cela ne veut pas dire que Kant méprise le bonheur. Il refuse seulement d'en faire le fondement de la morale. La loi morale ne peut pas être tirée de la recherche du bonheur, parce que le bonheur dépend d'inclinations sensibles et variables : on ne peut donc pas en faire une règle universelle. La morale doit reposer sur le devoir, c'est-à-dire sur le respect de la loi rationnelle. Mais Kant n'oublie pas le bonheur. Il introduit l'idée du « souverain bien », qui désigne l'union de la vertu et du bonheur. Il ne s'agit pas d'une simple récompense morale, mais d'une exigence de la raison pratique elle-même : il appartient à la raison de penser comme possible un ordre dans lequel celui qui agit moralement bien recevrait aussi sa part de bonheur. Le bonheur n'est donc pas le principe de la morale, mais il en accompagne idéalement l'achèvement<ref>Kant, ''Critique de la raison pratique'', livre II, chap. II, AK V, 110-114, trad. F. Picavet, Paris, PUF, 1989, p. 119-124.</ref>. ==== Le bonheur dépend-il de nous ou de la chance ? ==== C'est une question ancienne. Si le bonheur dépend de circonstances extérieures (santé, richesse, hasard), nous ne sommes pas maîtres de notre bonheur ; nous sommes à la merci de la fortune. Aristote reconnaît que certains biens extérieurs sont nécessaires au bonheur. On ne peut pas être pleinement heureux dans la misère ou la maladie. Mais la vertu reste l'élément principal du bonheur, parce qu'elle dépend de nous<ref>Aristote, ''Éthique à Nicomaque'', I, 9-10, 1099b-1100a, trad. J. Tricot, Paris, Vrin, 1990, p. 70-74.</ref>. Les stoïciens, eux, soutiennent que le bonheur dépend de l'usage droit du jugement, parce que ce jugement est seul à nous appartenir vraiment. Spinoza (1632-1677) ouvre une autre voie. Pour lui, la joie n'est pas une simple émotion agréable : elle est définie comme le passage à une plus grande perfection, c'est-à-dire l'augmentation de la puissance d'agir. Le bonheur consiste à comprendre par la raison les causes des choses, à transformer les passions tristes (qui diminuent notre puissance) en passions joyeuses, puis en affects actifs. La connaissance adéquate de soi, du monde et de Dieu conduit à la « béatitude », qui est l'amour intellectuel envers la Nature et coïncide avec la liberté véritable<ref>Spinoza, ''Éthique'', V, prop. 32-42, trad. B. Pautrat, Paris, Seuil, 1988, p. 535-547.</ref>. À l'opposé de cette intériorisation par la connaissance, certains penseurs insistent sur les conditions sociales et matérielles du bonheur. Karl Marx (1818-1883) montre que le travail salarié, lorsqu'il devient aliéné, prive l'ouvrier de la jouissance de ce qu'il produit, le sépare de son activité, des autres travailleurs et de lui-même. Dans une société d'inégalités, de travail contraint et de consommation, la simple bonne volonté individuelle ne suffit pas à rendre heureux : transformer la vie suppose aussi de transformer les conditions sociales du travail et de la richesse<ref>Marx, ''Manuscrits de 1844'', « Le travail aliéné », trad. J.-P. Gougeon, Paris, GF-Flammarion, 1996, p. 115-126.</ref>. ==== Le bonheur du plus grand nombre : l'utilitarisme ==== Au {{s|XIX}}, des philosophes anglais comme Jeremy Bentham (1748-1832) et John Stuart Mill (1806-1873) développent une théorie morale appelée ''utilitarisme''. Selon eux, une action est bonne si elle augmente le bonheur du plus grand nombre. Bentham pense qu'on peut calculer le bonheur en mesurant les plaisirs et les peines selon plusieurs critères : intensité, durée, certitude, proximité, fécondité (probabilité d'engendrer d'autres plaisirs), pureté (faible probabilité de produire des peines) et nombre de personnes concernées. Pour lui, les plaisirs ne diffèrent pas par leur nature mais par ces dimensions quantitatives ; à intensité et durée égales, le plaisir d'un jeu simple peut donc équivaloir à celui d'une lecture savante<ref>Bentham, ''Introduction aux principes de morale et de législation'', chap. IV, trad. Centre Bentham, Paris, Vrin, 2011, p. 51-54.</ref>. Mill n'est pas d'accord avec ce calcul purement quantitatif. Il introduit une différence qualitative entre les plaisirs : il existe selon lui des plaisirs supérieurs (intellectuels, moraux, esthétiques) et des plaisirs inférieurs (corporels, immédiats). « Il vaut mieux être un Socrate insatisfait qu'un imbécile satisfait », écrit-il : la qualité du plaisir compte autant que sa quantité<ref>Mill, ''L'Utilitarisme'', chap. II, trad. C. Audard, Paris, PUF, 2008, p. 51-54.</ref>. L'utilitarisme soulève des questions difficiles. Peut-on vraiment comparer des plaisirs aussi différents qu'un repas, une amitié ou une lecture ? Peut-on additionner les bonheurs individuels pour obtenir un bonheur collectif ? Et surtout : est-il juste de sacrifier le bonheur d'une minorité au bonheur de la majorité, si le calcul l'exige ? Ces difficultés font que l'utilitarisme est à la fois une théorie politique forte et une doctrine très discutée. ==== Le bonheur est-il vraiment possible ? Le pessimisme ==== Certains philosophes ont une vision plus sombre. Arthur Schopenhauer (1788-1860) pense que le bonheur durable est une illusion. Selon lui, la vie humaine oscille entre la souffrance et l'ennui : quand nos désirs ne sont pas satisfaits, nous souffrons ; quand ils le sont, nous nous ennuyons et cherchons de nouveaux désirs<ref>Schopenhauer, ''Le Monde comme volonté et comme représentation'', livre IV, § 57, trad. A. Burdeau, Paris, PUF, 1966, p. 391-396.</ref>. Pour Schopenhauer, le bonheur n'est jamais qu'un soulagement provisoire. La sagesse consiste à diminuer la souffrance en renonçant à ses désirs et en se tournant vers l'art ou la compassion. Une critique d'un autre type vient de Sigmund Freud (1856-1939). Dans ''Le Malaise dans la culture'', il rappelle que la civilisation impose des renoncements aux pulsions individuelles, ce qui crée une tension permanente entre le désir d'être heureux et les exigences de la vie en société. Freud formule de manière ironique l'idée que le bonheur humain ne semble pas avoir été prévu par quelque ordre providentiel du monde : la formule est anti-providentialiste, et non l'aveu d'une croyance en un « plan de la création »<ref>Freud, ''Le Malaise dans la culture'', chap. II, trad. P. Cotet, R. Lainé et J. Stute-Cadiot, Paris, PUF, 2010, p. 19-22.</ref>. ==== Le bonheur face à l'absurde : Albert Camus ==== Albert Camus (1913-1960), écrivain et essayiste français, aborde le bonheur d'une manière originale. Dans ''Le Mythe de Sisyphe'', il évoque ce héros condamné par les dieux à rouler éternellement un rocher jusqu'au sommet d'une montagne, d'où il retombe aussitôt. Cette situation paraît désespérée et absurde. Pourtant, Camus écrit : « Il faut imaginer Sisyphe heureux ». Comment cela ? Parce que Sisyphe prend conscience de sa condition et l'assume sans illusion. Il ne cherche plus dans le ciel ou dans une promesse de salut le sens qui lui manque. Il refuse l'espoir religieux ou métaphysique et choisit d'habiter pleinement sa tâche<ref>Camus, ''Le Mythe de Sisyphe'', Paris, Gallimard, 1942, p. 165-168.</ref>. Pour Camus, le bonheur est possible même dans un monde absurde, c'est-à-dire un monde qui n'a pas de sens préétabli. Ce bonheur naît d'une lucidité, d'un refus du désespoir et d'une révolte qui maintient la vie intense, malgré l'absence de justification ultime. === Conclusion === Les conceptions du bonheur examinées dans ce chapitre ne se laissent pas réduire à une réponse unique. Elles dessinent toutefois trois grandes questions directrices. D'abord : le bonheur est-il un état subjectif ressenti, ou une vie objectivement réussie ? Aristote et Camus, à des époques différentes, refusent de le réduire à un sentiment intérieur. Schopenhauer, à l'inverse, évalue négativement la structure affective du désir humain, tandis que l'utilitarisme cherche à mesurer les plaisirs et les peines pour fonder une politique du bien commun. Ensuite : le bonheur dépend-il de nous ou des conditions extérieures ? Les stoïciens en font dépendre le bonheur de l'usage droit du jugement ; Spinoza, de la connaissance et de la puissance d'agir ; Aristote rappelle que la vie heureuse exige aussi des biens extérieurs, des amis et une cité juste ; Marx ou les penseurs de la justice sociale soulignent que la transformation du bonheur passe par celle des conditions matérielles et politiques. Enfin : faut-il rechercher le bonheur directement, ou résulte-t-il d'autre chose ? Bentham et Mill en font le but explicite de l'action ; Kant pense au contraire qu'il faut viser le devoir, le bonheur n'étant qu'une espérance. Camus suggère qu'il vient par surcroît, à celui qui assume sa condition. Réfléchir au bonheur ne consiste donc pas seulement à comparer des doctrines. C'est apprendre à articuler ces tensions, en lien avec les autres notions du programme : le désir, la liberté, la justice, le travail, l'État, la conscience. == Sujets de dissertation == Cette collection propose seize sujets de dissertation philosophique portant sur la notion de bonheur, organisés selon différentes perspectives : métaphysique, éthique, politique et existentielle. Chaque question ouvre un ensemble de problématiques que tout penseur doit affronter pour comprendre en quoi consiste une vie bonne et comment l'atteindre. === 1. Faut-il philosopher pour bien vivre ? === Cette question d'ouverture pose un problème que les philosophes eux-mêmes se sont longtemps posé. Y a-t-il une nécessité intrinsèque à philosopher pour accéder au bonheur, ou la réflexion théorique constitue-t-elle simplement un chemin parmi d'autres ? Les anciens Grecs, notamment Aristote, tenaient que la vie heureuse consiste en l'exercice vertueux de l'âme, ce qui exige une certaine connaissance de ce qu'est la vertu. Cependant, nombre de gens vivent heureux sans jamais avoir lu un traité d'éthique. La question demande d'examiner si la philosophie est une condition du bonheur ou seulement un moyen parmi d'autres, et si le bien vivre suppose une compréhension explicite de ce qui rend la vie bonne. === 2. Le bonheur est-il un idéal inaccessible ? === Le bonheur parfait, total et perpétuel semble appartenir à l'ordre de l'utopie. Tout état heureux s'accompagne de limitations : la finitude humaine, la souffrance, l'expérience du deuil. Peut-on concevoir le bonheur autrement que comme un horizon jamais complètement atteint ? Certains courants philosophiques, notamment l'épicurisme, proposent une version plus modérée du bonheur comme absence de douleur plutôt que comme joie constante. D'autres, comme le stoïcisme, le conçoivent comme indépendant des circonstances extérieures. La question invite à réfléchir sur ce qui rend un idéal inaccessible et si cette inaccessibilité est un problème philosophique réel ou simplement le résultat d'une définition trop exigeante. === 3. Existe-t-il des critères du bonheur ? === Le bonheur est-il une notion univoque et bien déterminée, ou reste-t-elle relative à chaque individu ? Peut-on établir des critères objectifs permettant de juger qu'une personne ou qu'une vie est heureuse ? Aristote proposait que le bonheur réside dans l'exercice vertueux de nos capacités proprement humaines. Kant, lui, refusait de placer le bonheur au cœur de l'éthique, mais reconnaissait l'importance du « souverain bien » qui combine vertu et bonheur. La question demande s'il existe des critères universels du bonheur ou si chacun doit trouver ses propres repères. Elle touche aussi à la possibilité d'une mesure du bonheur et à ce que signifierait une telle mesure. === 4. Le bonheur consiste-t-il à faire tout ce qui nous fait plaisir ? === L'identification du bonheur au plaisir constitue une tentative de réponse immédiate et intuitive. Mais elle pose des problèmes : certains plaisirs semblent nuisibles à long terme, certains plaisirs entrent en conflit les uns avec les autres, et poursuivre tous ses désirs conduit souvent à l'épuisement ou à la culpabilité. Épicure lui-même, malgré sa réputation, recommandait une certaine frugalité dans la recherche du plaisir, privilégiant les plaisirs naturels et nécessaires. La question pousse à distinguer entre différents types de plaisirs et à interroger s'il existe une hiérarchie entre eux. === 5. Le bonheur est-il une somme de plaisirs ? === Cette formulation suggère une approche quantitative : le bonheur résulterait de l'accumulation ou de la maximisation des plaisirs. C'est essentiellement la position de l'utilitarisme classique, notamment chez Jeremy Bentham. Mais peut-on vraiment additionner des plaisirs hétérogènes ? Un plaisir intense et bref vaut-il mieux qu'une satisfaction durable mais moins intense ? John Stuart Mill introduisit la distinction entre plaisirs inférieurs et supérieurs, reconnaissant que certains plaisirs intellectuels ou moraux possèdent une qualité que d'autres ne possèdent pas. La question demande si l'approche mathématique peut saisir la nature du bonheur ou si celui-ci ne relève pas d'une autre logique. === 6. Y a-t-il une différence de degré ou de nature entre le bonheur et le plaisir ? === Le plaisir semble instantané, localisé, souvent corporel. Le bonheur paraît plus durable, plus global, plus profond. Mais s'agit-il d'une simple question d'intensité ou de durée (différence de degré), ou le bonheur appartient-il à un ordre différent (différence de nature) ? Peut-on accéder à un véritable bonheur en vivant une suite de plaisirs minimaux ? Inversement, peut-on être heureux en renonçant complètement au plaisir ? Cette distinction entre bonheur et plaisir constitue un carrefour où se rencontrent plusieurs traditions philosophiques, du platonisme au confucianisme. === 7. Le bonheur est-il un simple hasard ? === Cette question interroge la part de contingence et de maîtrise dans le bonheur. Sommes-nous maîtres de notre bonheur, ou celui-ci dépend-il de circonstances externes échappant à notre contrôle : notre tempérament naturel, notre milieu social, les événements imprévisibles ? Les Anciens parlaient de ''tyché'' (chance, fortune) comme d'une puissance qui échappe à la raison. Montaigne, relevant l'instabilité du destin humain, reconnaissait le poids de la contingence. Cependant, soutenir que le bonheur est purement aléatoire semblerait ôter toute responsabilité et tout sens à nos efforts. La question demande comment articuler la reconnaissance de notre dépendance aux circonstances avec une certaine forme de maîtrise ou d'autonomie. === 8. Le bonheur peut-il être le résultat d'une pratique ou d'un art de vivre ? === Contrairement à l'idée qu'il serait un simple hasard, cette perspective envisage le bonheur comme acquis par la discipline, la pratique et l'apprentissage. L'éthique aristotélicienne insiste sur la formation des vertus par la répétition des bonnes actions. Le stoïcisme propose un art de vivre fondé sur la distinction entre ce qui dépend de nous et ce qui ne dépend pas de nous. De nombreuses traditions non occidentales, du bouddhisme au taoïsme, offrent des pratiques censées conduire au bien-être ou à l'illumination. La question soulève la possibilité d'une « technique » du bonheur et ses limites : peut-on vraiment l'enseigner et l'apprendre comme on apprend un métier ? === 9. Le bonheur est-il une affaire de politique ? === Si le bonheur dépend largement des conditions sociales, économiques et politiques, alors sa réalisation ne peut pas être individuelle mais doit relever de la responsabilité collective. Platon, dans la ''République'', envisage un ordre politico-social destiné à produire l'harmonie et le bien-être. Aristote affirme que l'homme est un animal politique et que la vie heureuse s'épanouit dans la cité. Les penseurs utilitaristes du {{XIXe}} siècle proposaient que la politique vise à maximiser le bonheur du plus grand nombre. Cependant, la question de savoir si la politique doit poursuivre explicitement le bonheur reste contestée : ne risque-t-on pas de sacrifier les libertés individuelles à une conception collective du bien ? L'État ne risque-t-il pas, en poursuivant le bonheur, d'imposer à tous une conception unique de la vie bonne ? === 10. Le bonheur peut-il dépendre de nous ? === Cette question interroge le degré d'autonomie que nous possédons sur notre propre bonheur. S'il dépendait entièrement de nous, nous pourrions le produire à volonté, ce qui ne semble pas vrai. Mais s'il ne dépendait pas du tout de nous, l'effort et la responsabilité seraient illusoires. Le stoïcisme, notamment avec Épictète, distingue nettement entre ce qui dépend de nous (nos jugements, nos intentions) et ce qui ne dépend pas de nous (notre corps, les événements externes), et préconise de concentrer nos efforts sur ce qui nous appartient. Cette distinction peut-elle vraiment résoudre le problème ? Notre bonheur ne résulte-t-il pas toujours d'une combinaison complexe d'efforts personnels et de circonstances externes ? === 11. Y a-t-il un devoir d'être heureux ? === À première vue, le bonheur semble être ce que nous cherchons naturellement, pas une obligation morale. Cependant, plusieurs penseurs ont soulevé l'idée que nous avons des devoirs envers nous-mêmes de cultiver nos capacités et de mener une vie digne. Kant, tout en refusant de placer le bonheur au cœur de la morale, reconnaît que le « souverain bien » combine vertu et bonheur. On pourrait aussi avancer que nous avons un devoir envers les autres de ne pas nous laisser sombrer dans la misère, qui affecte ceux qui nous entourent. La question demande si le bonheur relève d'un droit, d'un devoir, ou simplement d'une aspiration naturelle sans caractère moral. === 12. Le bonheur est-il utopique ? === L'utopie désigne un lieu qui n'existe pas, un idéal irréalisable. Qualifier le bonheur d'utopique signifierait que nous ne pouvons que nous en rapprocher sans jamais l'atteindre vraiment. Mais certaines sociétés ou certaines périodes historiques semblent avoir produit des formes de bien-être général, même si aucune n'a réalisé une félicité absolue. La question demande si l'utopie du bonheur joue un rôle moteur utile dans l'organisation de nos sociétés, ou si elle nous détourne des réalisations possibles en nous promettant l'impossible. Elle s'interroge aussi sur ce qui distingue une utopie d'une aspiration légitime mais exigeante. === 13. La culture est-elle un gage de bonheur ? === La culture, au sens de raffinement intellectuel, de connaissance des arts, des sciences et des humanités, semble enrichir la vie. Cependant, elle peut aussi générer de nouvelles formes de malheur : culpabilité, conscience du malheur d'autrui, sentiment d'inadéquation face aux grands idéaux. Une personne peu instruite peut-elle être plus heureuse qu'un intellectuel perpétuellement inquiet ? La question rejoint le débat entre les plaisirs « inférieurs » et les plaisirs « supérieurs ». Elle demande aussi si le bonheur consiste davantage dans l'ignorance confortable ou dans l'autonomie de pensée qu'offre la culture, même au prix du trouble et du questionnement. === 14. Le bonheur des hommes dépend-il de l'augmentation des richesses ? === Cette question moderne s'impose avec force dans nos sociétés de consommation. Certaines études contemporaines suggèrent qu'au-delà d'un seuil où les besoins matériels sont satisfaits, l'augmentation des richesses n'améliore que marginalement le bien-être subjectif. Pourtant, la pauvreté constitue clairement un obstacle au bonheur. La question demande s'il existe un point d'équilibre : à quel niveau de richesse maîtrisée le bonheur atteint-il son optimum ? Elle interroge aussi la nature du désir de richesse : repose-t-il sur un besoin véritable ou sur une illusion entretenue par le désir de comparaison sociale ? === 15. Le bonheur n'est-il pas un état d'esprit ? === Cette affirmation suggère que le bonheur dépend avant tout de notre attitude face aux circonstances, plutôt que des circonstances elles-mêmes. Deux personnes en situation identique peuvent connaître des niveaux de bien-être très différents selon leur disposition d'esprit. Cette perspective rapproche le bonheur de la sérénité stoïcienne ou de l'équanimité bouddhiste. Cependant, dire que le bonheur relève d'un simple état d'esprit pourrait sembler réducteur ou même cruel : cela pourrait suggérer que celui qui souffre a seulement besoin de « changer d'attitude » plutôt que d'améliorer ses conditions matérielles. La question demande comment équilibrer la reconnaissance de l'importance de la perspective mentale avec celle des réalités concrètes. === 16. La recherche du bonheur nous pousse-t-elle à changer notre façon d'être ? === Poursuivre activement le bonheur nous oblige-t-il à transformer nos habitudes, nos valeurs, nos relations ? Si le bonheur ne s'obtient qu'au prix d'une profonde conversion intérieure ou d'un apprentissage exigeant, alors la question de savoir comment nous vivons devient centrale. De nombreuses traditions voient dans cette transformation de soi la condition du bien-être durable. Mais on peut aussi se demander si une telle exigence de changement perpétuel ne nous éloigne pas du bonheur plutôt que de nous en rapprocher. La question touche à l'authenticité : faut-il accepter qui nous sommes ou nous transformer ? Le bonheur suppose-t-il une acceptation de soi ou une acceptation créatrice de nos possibilités ? === Perspectives transversales === Ces seize questions forment un ensemble où plusieurs thèmes surgissent régulièrement : * La relation entre plaisir et bonheur revient dans les questions 4, 5 et 6. Elle demande de distinguer l'immédiat du durable, le local du global. * Le degré d'autonomie personnel apparaît dans les questions 7, 8 et 10. Il concerne notre responsabilité et notre pouvoir d'agir. * Le contexte social et politique se manifeste dans les questions 9 et 14. Il soulève la question de savoir si le bonheur est individuel ou collectif. * La nature du bonheur, qu'il s'agisse d'une sensation, d'un jugement ou d'un état, traverse en arrière-plan toutes ces questions. * L'accès au bonheur, par la chance, la pratique, la réflexion ou la transformation, structure plusieurs de ces interrogations. Ces dissertations invitent à explorer le bonheur non comme une notion simple, mais comme un carrefour où se rencontrent l'éthique, la métaphysique, la politique et l'existence quotidienne. Aucune réponse définitive ne peut clore ces questions ; chaque époque, chaque individu, doit les reposer en fonction de ses circonstances et de sa compréhension du monde. == Textes d'étude == ==== Épicure : le plaisir comme absence de trouble ==== ; Question travaillée : Le bonheur consiste-t-il à satisfaire tous nos plaisirs ? ; Thèse : Le plaisir est le bien suprême, mais ce plaisir doit être compris comme absence de souffrance physique et absence de trouble moral, et non comme jouissance débridée. ; Notions : plaisir, désir, ataraxie, bien. ''Questions d'analyse'' : * Pourquoi Épicure refuse-t-il certains plaisirs et accepte-t-il certaines souffrances ? * Comment comprendre que « ne dépendre que de soi-même » est un grand bien ? * En quoi cette conception du plaisir s'oppose-t-elle à l'image du débauché ? {{Citation bloc|Le plaisir est le commencement et la fin d'une vie bienheureuse. Le plaisir est, en effet, considéré par nous comme le premier des biens naturels, c'est lui qui nous fait accepter ou fuir les choses, c'est à lui que nous aboutissons, en prenant la sensibilité comme critère du bien. Or, puisque le plaisir est le premier des biens naturels, il s'ensuit que nous n'acceptons pas le premier plaisir venu, mais qu'en certains cas, nous méprisons de nombreux plaisirs, quand ils ont pour conséquence une peine plus grande. D'un autre côté, il y a de nombreuses souffrances que nous estimons préférables aux plaisirs, quand elles entraînent pour nous un plus grand plaisir. Tout plaisir, dans la mesure où il s'accorde avec notre nature, est donc un bien, mais tout plaisir n'est pas cependant nécessairement souhaitable. De même, toute douleur est un mal, mais pourtant toute douleur n'est pas nécessairement à fuir. Il reste que c'est par une sage considération de l'avantage et du désagrément qu'il procure, que chaque plaisir doit être apprécié. En effet, en certains cas, nous traitons le bien comme un mal, et en d'autres, le mal comme un bien. Ne dépendre que de soi-même est, à notre avis, un grand bien, mais il ne s'ensuit pas qu'il faille toujours se contenter de peu. Simplement, quand l'abondance nous fait défaut, nous devons pouvoir nous contenter de peu, étant bien persuadés que ceux-là jouissent le mieux de la richesse qui en ont le moins besoin, et que tout ce qui est naturel s'obtient aisément, tandis que ce qui ne l'est pas s'obtient malaisément. Les mets les plus simples apportent autant de plaisir que la table la plus richement servie, quand est absente la souffrance que cause le besoin, et du pain et de l'eau procurent le plaisir le plus vif, quand on les mange après une longue privation. L'habitude d'une vie simple et modeste est donc une bonne façon de soigner sa santé, et rend l'homme par surcroît courageux pour supporter les tâches qu'il doit nécessairement remplir dans la vie. Elle lui permet encore de mieux goûter une vie opulente, à l'occasion, et l'affermit contre les revers de la fortune. Par conséquent, lorsque nous disons que le plaisir est le souverain bien, nous ne parlons pas des plaisirs des débauchés, ni des jouissances sensuelles, comme le prétendent quelques ignorants qui nous combattent et défigurent notre pensée. Nous parlons de l'absence de souffrance physique et de l'absence de trouble moral. Car ce ne sont ni les beuveries et les banquets continuels, ni la jouissance que l'on tire de la fréquentation des mignons et des femmes, ni la joie que donnent les poissons et les viandes dont on charge les tables somptueuses, qui procurent une vie heureuse, mais des habitudes raisonnables et sobres, une raison cherchant sans cesse des causes légitimes de choix ou d'aversion, et rejetant les opinions susceptibles d'apporter à l'âme le plus grand trouble.|Épicure, ''[[Commentaire philosophique/Lettre à Ménécée|Lettre à Ménécée]]''}} ==== Sénèque : vivre selon la nature ==== ; Question travaillée : Le bonheur peut-il dépendre des biens extérieurs ? ; Thèse : Vivre heureux, c'est vivre selon la nature et la raison, en faisant des biens extérieurs des « auxiliaires » et non des maîtres ; le souverain bien est l'harmonie de l'âme. ; Notions : nature, raison, vertu, souverain bien. ''Questions d'analyse'' : * Pourquoi Sénèque distingue-t-il les biens extérieurs et l'âme ? * Que signifie « être l'artisan de sa vie » ? * Comment comprendre l'analogie entre l'esprit et le « monde » qui se concentre en soi ? {{Citation bloc|La nature, en effet, est le guide qu'il faut suivre ; c'est elle que la raison observe et consulte. C'est donc une même chose que vivre heureux et vivre selon la nature. Ce que c'est, je vais le développer : cela consiste à conserver, avec soin et sans effroi, les avantages du corps et ce qui convient à notre nature, comme choses données pour un jour et prêtes à fuir ; à ne pas nous y soumettre en esclaves, et à ne pas nous laisser posséder par les objets étrangers ; à reléguer tout ce qui plaît au corps, tout ce qui lui survient accidentellement, comme dans les camps on place à l'écart les auxiliaires et les troupes légères. Que ces objets soient des esclaves, et non des maîtres ; c'est uniquement ainsi qu'ils sont utiles à l'esprit. Que l'homme de cœur soit incorruptible en présence des choses du dehors, qu'il soit inexpugnable, et qu'il n'attache de prix qu'à se posséder lui-même ; que d'une âme confiante, que préparé à l'une et à l'autre fortune, il soit l'artisan de sa vie. Que chez lui la confiance n'existe pas sans le savoir, ni le savoir sans la fermeté ; que ses résolutions tiennent, une fois qu'elles sont prises, et que dans ses décrets il n'y ait pas de rature. On comprend, quand même je ne l'ajouterais pas, qu'un tel homme sera posé, qu'il sera rangé, qu'en cela aussi, agissant avec aménité, il sera grand. Chez lui, la véritable raison sera greffée sur les sens ; elle y puisera ses éléments ; et en effet, elle n'a pas d'autre point d'appui d'où elle s'élance, d'où elle prenne son essor vers la vérité, afin de revenir en elle-même. Le monde aussi, qui embrasse tout, ce dieu qui régit l'univers, tend à se répandre au dehors, et néanmoins, de toutes parts il se ramène en soi pour s'y concentrer. Que notre esprit fasse de même, lorsqu'en suivant les sens qui lui sont propres, il se sera étendu par leur moyen vers les objets extérieurs ; qu'il soit maître de ces objets et de lui ; qu'alors, pour ainsi dire, il enchaîne le souverain bien. De là résultera une force, une puissance unique, d'accord avec elle-même ; ainsi naîtra cette raison certaine, qui n'admet ni contrariété, ni hésitation, dans ses jugements et dans ses conceptions, non plus que dans sa persuasion. Cette raison, lorsqu'elle s'est ajustée, accordée avec ses parties et, pour ainsi dire, mise à l'unisson, a touché au souverain bien. En effet, il ne reste rien de tortueux, rien de glissant rien sur quoi elle puisse broncher ou chanceler. Elle fera tout de sa propre autorité : pour elle, point d'accident inopiné ; au contraire, toutes ses actions viendront à bien, avec aisance et promptitude, sans que l'agent tergiverse ; car les retardements et l'hésitation dénotent le trouble et l'inconstance. Ainsi, vous pouvez hardiment déclarer que le souverain bien est l'harmonie de l'âme. En effet, les vertus seront nécessairement là où sera l'accord, où sera l'unité ; la discordance est pour les vices.|Sénèque, ''De la vie heureuse'' (vers 58 après J.-C.), chap. VIII}} ==== Descartes : vaut-il mieux être heureux dans l'illusion ou moins joyeux dans la vérité ? ==== ; Question travaillée : Le bonheur peut-il reposer sur l'illusion ? ; Thèse : Le souverain bien réside dans l'exercice de la vertu, c'est-à-dire dans la possession des biens qui dépendent de notre libre arbitre ; la satisfaction d'esprit qui en découle vaut mieux qu'une gaieté fondée sur de fausses imaginations. ; Notions : vérité, illusion, libre arbitre, vertu, joie. ''Questions d'analyse'' : * Pourquoi Descartes refuse-t-il d'identifier le souverain bien à la joie ? * Que signifie distinguer le souverain bien et la satisfaction d'esprit ? * Pourquoi une joie fausse laisse-t-elle, selon Descartes, une « amertume intérieure » ? {{Citation bloc|Je me suis quelquefois proposé un doute : savoir s'il est mieux d'être gai et content, en imaginant les biens qu'on possède être plus grands et plus estimables qu'ils ne sont, et ignorant ou ne s'arrêtant pas à considérer ceux qui manquent, que d'avoir plus de considération et de savoir, pour connaître la juste valeur des uns et des autres, et qu'on devienne plus triste. Si je pensais que le souverain bien fût la joie, je ne douterais point qu'on ne dût tâcher de se rendre joyeux, à quelque prix que ce pût être, et j'approuverais la brutalité de ceux qui noient leurs déplaisirs dans le vin, ou les étourdissent avec du pétun. Mais je distingue entre le souverain bien, qui consiste en l'exercice de la vertu, ou, ce qui est le même, en la possession de tous les biens dont l'acquisition dépend de notre libre arbitre, et la satisfaction d'esprit qui suit de cette acquisition. C'est pourquoi, voyant que c'est une plus grande perfection de connaître la vérité, encore même qu'elle soit à notre désavantage, que l'ignorer, j'avoue qu'il vaut mieux être moins gai et avoir plus de connaissance. Aussi n'est-ce pas toujours lorsqu'on a le plus de gaieté qu'on a l'esprit plus satisfait ; au contraire, les grandes joies sont ordinairement mornes et sérieuses, et il n'y a que les médiocres et passagères, qui soient accompagnées du ris. Ainsi je n'approuve point qu'on tâche à se tromper, en se repaissant de fausses imaginations ; car tout le plaisir qui en revient ne peut toucher que la superficie de l'âme, laquelle sent cependant une amertume intérieure, en s'apercevant qu'ils sont faux. Et encore qu'il pourrait arriver qu'elle fût si continuellement divertie ailleurs que jamais elle ne s'en aperçût, on ne jouirait pas pour cela de la béatitude dont il est question, pour ce qu'elle doit dépendre de notre conduite, et cela ne viendrait que de la fortune.|Descartes, ''Lettre à Élisabeth'' (6 octobre 1645)}} ==== Pascal : le divertissement, fuite hors de notre condition ==== ; Question travaillée : Le divertissement nous rend-il heureux ou nous empêche-t-il de penser à notre malheur ? ; Thèse : Tout le malheur des hommes vient de leur incapacité à demeurer en repos avec eux-mêmes ; le divertissement n'apporte pas le bonheur, il détourne l'esprit de la condition humaine, faible et mortelle. ; Notions : divertissement, repos, condition humaine, bonheur, illusion. ''Questions d'analyse'' : * Pourquoi le roi sans divertissement est-il, selon Pascal, plus malheureux que ses sujets ? * Pourquoi recherche-t-on le « tracas » et non pas le bien lui-même ? * En quoi cette analyse remet-elle en cause l'idée d'un bonheur fondé sur l'activité ? {{Citation bloc|Divertissement. Quand je m'y suis mis quelquefois à considérer les diverses agitations des hommes et les périls et les peines où ils s'exposent, dans la cour, dans la guerre, d'où naissent tant de querelles, de passions, d'entreprises hardies et souvent mauvaises, etc., j'ai découvert que tout le malheur des hommes vient d'une seule chose, qui est de ne savoir pas demeurer en repos, dans une chambre. Un homme qui a assez de bien pour vivre, s'il savait demeurer chez soi avec plaisir, n'en sortirait pas pour aller sur la mer ou au siège d'une place. On n'achètera une charge à l'armée si cher, que parce qu'on trouverait insupportable de ne bouger de la ville ; et on ne recherche les conversations et les divertissements des jeux que parce qu'on ne peut demeurer chez soi avec plaisir. Mais quand j'ai pensé de plus près, et qu'après avoir trouvé la cause de tous nos malheurs, j'ai voulu en découvrir la raison, j'ai trouvé qu'il y en a une bien effective, qui consiste dans le malheur naturel de notre condition faible et mortelle, et si misérable, que rien ne peut nous consoler, lorsque nous y pensons de près. Quelque condition qu'on se figure, si l'on assemble tous les biens qui peuvent nous appartenir, la royauté est le plus beau poste du monde ; et cependant, qu'on s'en imagine [un roi] accompagné de toutes les satisfactions qui peuvent le toucher, s'il est sans divertissement, et qu'on le laisse considérer et faire réflexion sur ce qu'il est, cette félicité languissante ne le soutiendra point, il tombera par nécessité dans les vues qui le menacent, des révoltes qui peuvent arriver, et enfin de la mort et des maladies qui sont inévitables ; de sorte que, s'il est sans ce qu'on appelle divertissement, le voilà malheureux, et plus malheureux que le moindre de ses sujets, qui joue et qui se divertit. De là vient que le jeu et la conversation des femmes, la guerre, les grands emplois sont si recherchés. Ce n'est pas qu'il y ait en effet du bonheur, ni qu'on s'imagine que la vraie béatitude soit d'avoir l'argent qu'on peut gagner au jeu, ou dans le lièvre qu'on court : on n'en voudrait pas s'il était offert. Ce n'est pas cet usage mol et paisible, et qui nous laisse penser à notre malheureuse condition, qu'on recherche, ni les dangers de la guerre, ni la peine des emplois, mais c'est le tracas qui nous détourne d'y penser et nous divertit.|Pascal, ''Pensées'' (1670), fragment 139}} ==== Nietzsche : l'oubli, condition du bonheur ==== ; Question travaillée : L'oubli est-il une condition du bonheur et de l'action ? ; Thèse : Le bonheur exige une part de non-historique : la capacité d'oublier le passé pour se tenir dans le moment présent ; l'excès de mémoire empêche d'agir et de vivre. ; Notions : mémoire, oubli, action, devenir, vie. ''Questions d'analyse'' : * Pourquoi Nietzsche associe-t-il bonheur et capacité d'oublier ? * Que signifie « sentir d'une façon non historique » ? * En quoi un excès de mémoire serait-il nuisible à la vie ? {{Citation bloc|Pour le plus petit comme pour le plus grand bonheur, il y a toujours une chose qui le crée : le pouvoir d'oublier, ou, pour m'exprimer en savant, la faculté de sentir, pendant que dure le bonheur, d'une façon non-historique. Celui qui ne sait pas se reposer sur le seuil du moment pour oublier tout le passé, celui qui ne se dresse point, comme un génie de victoire, sans vertige et sans crainte, ne saura jamais ce que c'est que le bonheur, et, ce qui est pire encore, il ne fera jamais rien qui puisse rendre heureux les autres. Imaginez l'exemple extrême : un homme qui ne posséderait pas du tout la faculté d'oublier, qui serait condamné à voir en toutes choses le devenir. Un tel homme ne croirait plus à sa propre essence, ne croirait plus en lui-même ; tout s'écoulerait pour lui en points mouvants pour se perdre dans cette mer du devenir ; en véritable élève d'Héraclite il finirait par ne plus oser lever un doigt. Toute action exige l'oubli, comme tout organisme a besoin, non seulement de lumière, mais encore d'obscurité. Un homme qui voudrait sentir d'une façon tout à fait historique ressemblerait à celui qui serait forcé de se priver de sommeil, ou bien à l'animal qui devrait continuer à vivre en ne faisant que ruminer, et ruminer toujours à nouveau. Donc il est impossible de vivre sans se souvenir, de vivre même heureux, à l'exemple de la bête, mais il est absolument impossible de vivre sans oublier. Ou bien, pour m'expliquer sur ce sujet d'une façon plus simple encore, il y a un degré d'insomnie, de rumination, de sens historique qui nuit à l'être vivant et finit par l'anéantir, qu'il s'agisse d'un homme, d'un peuple ou d'une civilisation.|Nietzsche, ''Considérations inactuelles'', II (1874), § 1}} == Notes et Références == {{references|colonnes=2}} [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} ojga22ip20kh8kr3vbma68ggqqzbef2 765720 765719 2026-05-01T19:58:18Z PandaMystique 119061 /* 9. Le bonheur est-il une affaire de politique ? */ 765720 wikitext text/x-wiki {{ManuelPhilo}} Tout être humain semble désirer le bonheur. Mais dès qu'on cherche à dire ce qu'il est, ou par quels moyens l'atteindre, les réponses divergent. Le bonheur est-il un sentiment intérieur ou une vie réussie ? Dépend-il de nous ou des circonstances extérieures ? Faut-il satisfaire ses désirs, les limiter ou les transformer ? Peut-on être heureux dans l'injustice, la pauvreté ou l'illusion ? Ces questions, qui traversent toute l'histoire de la philosophie, montrent que le bonheur n'est pas une donnée immédiate de l'existence : ses contours varient selon la doctrine qui l'interprète, et chaque tradition en éclaire une face différente. === Qu'est-ce que le bonheur ? === Le mot « bonheur » vient du latin ''bonum augurium'', qui signifie « bon augure » ou « bonne chance ». À l'origine, le bonheur était donc lié à la chance, au hasard. Une partie de la tradition philosophique a précisément cherché à savoir si le bonheur pouvait dépendre de nous plutôt que d'une fortune favorable. On confond souvent le bonheur avec des états proches qu'il faut pourtant distinguer. Le plaisir est une sensation agréable, souvent corporelle et passagère, comme manger quelque chose de délicieux ou écouter une belle musique. Dans l'usage courant, la joie désigne souvent une émotion vive mais ponctuelle ; certains philosophes, comme Spinoza, lui donnent toutefois un sens plus profond, comme on le verra plus loin. La satisfaction désigne le contentement qui suit la réalisation d'un désir précis. Le bien-être renvoie à un état général d'aisance physique et psychique. Le bonheur, lui, concerne la vie dans son ensemble : il dépasse l'instant et engage notre rapport à l'existence<ref>Aristote, ''Éthique à Nicomaque'', I, 7, 1098a, trad. J. Tricot, Paris, Vrin, 1990, p. 60-62.</ref>. Les philosophes anciens utilisent encore d'autres termes : la ''béatitude'' désigne un bonheur parfait, presque divin ; la ''félicité'' un bonheur stable et durable. Cette première distinction conduit à une question : le bonheur est-il un état intérieur que l'on ressent, un jugement que l'on porte sur sa vie, ou un accomplissement objectif qu'on peut constater de l'extérieur ? Selon la réponse choisie, les conceptions philosophiques s'orientent dans des directions différentes. === Les grandes conceptions du bonheur === ==== Le bonheur comme plaisir : l'épicurisme ==== Pour Épicure (341-270 avant J.-C.), philosophe grec de l'Antiquité, le bonheur se trouve dans le plaisir. Mais il ne s'agit pas de chercher tous les plaisirs n'importe comment. Épicure distingue trois types de désirs. Il y a d'abord les désirs naturels et nécessaires, comme boire quand on a soif ou manger quand on a faim. Ces désirs doivent être satisfaits. Ensuite, les désirs naturels mais non nécessaires, comme manger des plats raffinés. Enfin, les désirs ni naturels ni nécessaires, comme vouloir devenir riche ou célèbre. Ces derniers désirs sont à éviter parce qu'ils sont sans limites et nous causent du tourment<ref>Épicure, ''Lettre à Ménécée'', § 127-128, dans ''Lettres et maximes'', trad. M. Conche, Paris, PUF, 1987, p. 219-221.</ref>. Le bonheur selon Épicure, c'est l'''ataraxie'' : l'absence de trouble dans l'âme. C'est un état de tranquillité et de paix intérieure. Pour y parvenir, il faut limiter ses désirs et apprendre à ne plus craindre la mort ni les dieux. Le plaisir qu'Épicure recherche n'est donc pas l'excitation ou l'agitation, mais la sérénité qui accompagne l'absence de souffrance physique et l'absence de trouble moral<ref>Épicure, ''Maximes capitales'', I-IV, dans ''Lettres et maximes'', trad. M. Conche, Paris, PUF, 1987, p. 231-233.</ref>. À cette conception modérée du plaisir s'oppose la position défendue par Calliclès dans le ''Gorgias'' de Platon. Pour Calliclès, le bonheur consiste à laisser ses désirs grandir le plus possible et à trouver les moyens de les satisfaire. La frugalité épicurienne lui apparaîtrait comme une vie d'esclave. Socrate lui répond que cette vie est celle d'un tonneau percé qu'il faut sans cesse remplir : elle ne connaît jamais le repos<ref>Platon, ''Gorgias'', 491e-494a, trad. M. Canto-Sperber, Paris, GF-Flammarion, 1987, p. 226-230.</ref>. Cette discussion ancienne montre que la question « faut-il satisfaire ou limiter ses désirs ? » se pose dès l'origine de la philosophie. ==== Le bonheur comme activité vertueuse : Aristote ==== Aristote (384-322 avant J.-C.) propose une autre conception du bonheur. Pour lui, le bonheur (qu'il appelle ''eudaimonia'' en grec) est le but suprême de la vie humaine, ce vers quoi tout le monde tend. Mais qu'est-ce que le bonheur selon Aristote ? Ce n'est pas d'abord un état intérieur agréable. C'est une manière de vivre. Plus précisément, le bonheur consiste à réaliser la fonction propre de l'être humain, c'est-à-dire à exercer son intelligence et sa raison de manière excellente. Le bonheur consiste donc à vivre selon la vertu<ref>Aristote, ''Éthique à Nicomaque'', I, 7, 1098a, trad. J. Tricot, Paris, Vrin, 1990, p. 60.</ref>. La vertu, chez Aristote, est une disposition acquise à bien agir, un juste milieu entre deux excès. Le courage, par exemple, est le juste milieu entre la lâcheté et la témérité. Une vie heureuse est donc une vie où l'on cultive ces vertus et où l'on agit avec raison. Aristote insiste sur un point important : le bonheur n'arrive pas en un instant. C'est une activité qui se déploie sur toute une vie. On ne peut pas dire qu'une personne est heureuse après une seule journée agréable ; il faut considérer sa vie dans son ensemble<ref>Aristote, ''Éthique à Nicomaque'', I, 10, 1100a-1101a, trad. J. Tricot, Paris, Vrin, 1990, p. 73-77.</ref>. Aristote ne réduit pourtant pas le bonheur à la seule vertu morale. Il reconnaît que la vie heureuse a aussi besoin de certains biens extérieurs : la santé, une situation matérielle suffisante, des amis, et même une certaine beauté physique. Surtout, l'homme étant un « animal politique », son bonheur ne se développe pleinement que dans une cité juste. Enfin, dans le livre X de l'''Éthique à Nicomaque'', Aristote présente la vie contemplative, consacrée à la connaissance, comme la forme la plus haute du bonheur<ref>Aristote, ''Éthique à Nicomaque'', X, 7-8, 1177a-1178a, trad. J. Tricot, Paris, Vrin, 1990, p. 506-512.</ref>. Il existe ainsi une tension à l'intérieur du texte aristotélicien : le livre I semble faire du bonheur la totalité d'une vie moralement accomplie en société, tandis que le livre X confère la priorité à la contemplation. Cette hésitation n'est pas une contradiction, mais l'indice d'une question philosophique difficile : la vie heureuse est-elle d'abord une vie d'action vertueuse, ou une vie de connaissance ? ==== Le bonheur comme sérénité : le stoïcisme ==== Les philosophes stoïciens, comme Épictète (50-125 après J.-C.) ou Marc Aurèle (121-180 après J.-C.), proposent une autre voie. Selon eux, le bonheur ne dépend pas des choses extérieures (richesse, santé, réputation) mais de notre rapport à elles. Le stoïcisme repose sur une distinction : il y a les choses qui dépendent de nous (nos jugements, nos opinions, nos désirs) et celles qui ne dépendent pas de nous (la maladie, la mort, l'opinion d'autrui, les événements). Ce qui dépend de nous, Épictète l'appelle la ''prohairesis'' : la faculté de juger, de vouloir et de consentir. Pour atteindre la tranquillité, il faut accepter avec sérénité ce qui ne dépend pas de nous et concentrer notre effort sur l'usage droit de cette faculté de jugement<ref>Épictète, ''Manuel'', § 1, trad. P. Hadot, Paris, Le Livre de Poche, 2000, p. 33-35.</ref>. Mais le stoïcisme ne se réduit pas à un changement d'attitude intérieure. Pour les stoïciens, le seul bien véritable est la vertu, et le seul mal véritable est le vice. Tout le reste, comme la santé, la richesse, la maladie ou la mort, n'est ni un bien ni un mal au sens propre : ce sont des « indifférents ». Ce qui rend une vie heureuse, c'est l'accord entre nos jugements, nos désirs et la raison qui ordonne le monde. Les passions, qui troublent l'âme, viennent de jugements erronés ; les corriger permet d'atteindre l'''apatheia''. Cette ''apatheia'' n'est pas l'absence de toute émotion : les stoïciens admettent au contraire des affects raisonnables, comme la joie du sage face au bien accompli. Ce qui disparaît, ce sont seulement les passions irrationnelles, qui naissent d'une mauvaise estimation de la valeur des choses<ref>Marc Aurèle, ''Pensées pour moi-même'', IV, 3 et VIII, 7, trad. M. Meunier, Paris, Garnier-Flammarion, 1964, p. 60-62 et p. 116-117.</ref>. === Les enjeux philosophiques du bonheur === ==== Peut-on savoir ce qui nous rend heureux ? ==== Emmanuel Kant (1724-1804), philosophe allemand, soulève un problème : le bonheur est un concept indéterminé. Personne ne peut dire avec précision ce qui le rendrait parfaitement heureux. Nos désirs changent, et ce qui nous semble bon aujourd'hui peut ne plus nous satisfaire demain. Pour Kant, le bonheur est « un idéal de l'imagination, non de la raison »<ref>Kant, ''Fondements de la métaphysique des mœurs'', deuxième section, AK IV, 418, trad. V. Delbos, Paris, Vrin, 1980, p. 124.</ref>. Cela ne veut pas dire que Kant méprise le bonheur. Il refuse seulement d'en faire le fondement de la morale. La loi morale ne peut pas être tirée de la recherche du bonheur, parce que le bonheur dépend d'inclinations sensibles et variables : on ne peut donc pas en faire une règle universelle. La morale doit reposer sur le devoir, c'est-à-dire sur le respect de la loi rationnelle. Mais Kant n'oublie pas le bonheur. Il introduit l'idée du « souverain bien », qui désigne l'union de la vertu et du bonheur. Il ne s'agit pas d'une simple récompense morale, mais d'une exigence de la raison pratique elle-même : il appartient à la raison de penser comme possible un ordre dans lequel celui qui agit moralement bien recevrait aussi sa part de bonheur. Le bonheur n'est donc pas le principe de la morale, mais il en accompagne idéalement l'achèvement<ref>Kant, ''Critique de la raison pratique'', livre II, chap. II, AK V, 110-114, trad. F. Picavet, Paris, PUF, 1989, p. 119-124.</ref>. ==== Le bonheur dépend-il de nous ou de la chance ? ==== C'est une question ancienne. Si le bonheur dépend de circonstances extérieures (santé, richesse, hasard), nous ne sommes pas maîtres de notre bonheur ; nous sommes à la merci de la fortune. Aristote reconnaît que certains biens extérieurs sont nécessaires au bonheur. On ne peut pas être pleinement heureux dans la misère ou la maladie. Mais la vertu reste l'élément principal du bonheur, parce qu'elle dépend de nous<ref>Aristote, ''Éthique à Nicomaque'', I, 9-10, 1099b-1100a, trad. J. Tricot, Paris, Vrin, 1990, p. 70-74.</ref>. Les stoïciens, eux, soutiennent que le bonheur dépend de l'usage droit du jugement, parce que ce jugement est seul à nous appartenir vraiment. Spinoza (1632-1677) ouvre une autre voie. Pour lui, la joie n'est pas une simple émotion agréable : elle est définie comme le passage à une plus grande perfection, c'est-à-dire l'augmentation de la puissance d'agir. Le bonheur consiste à comprendre par la raison les causes des choses, à transformer les passions tristes (qui diminuent notre puissance) en passions joyeuses, puis en affects actifs. La connaissance adéquate de soi, du monde et de Dieu conduit à la « béatitude », qui est l'amour intellectuel envers la Nature et coïncide avec la liberté véritable<ref>Spinoza, ''Éthique'', V, prop. 32-42, trad. B. Pautrat, Paris, Seuil, 1988, p. 535-547.</ref>. À l'opposé de cette intériorisation par la connaissance, certains penseurs insistent sur les conditions sociales et matérielles du bonheur. Karl Marx (1818-1883) montre que le travail salarié, lorsqu'il devient aliéné, prive l'ouvrier de la jouissance de ce qu'il produit, le sépare de son activité, des autres travailleurs et de lui-même. Dans une société d'inégalités, de travail contraint et de consommation, la simple bonne volonté individuelle ne suffit pas à rendre heureux : transformer la vie suppose aussi de transformer les conditions sociales du travail et de la richesse<ref>Marx, ''Manuscrits de 1844'', « Le travail aliéné », trad. J.-P. Gougeon, Paris, GF-Flammarion, 1996, p. 115-126.</ref>. ==== Le bonheur du plus grand nombre : l'utilitarisme ==== Au {{s|XIX}}, des philosophes anglais comme Jeremy Bentham (1748-1832) et John Stuart Mill (1806-1873) développent une théorie morale appelée ''utilitarisme''. Selon eux, une action est bonne si elle augmente le bonheur du plus grand nombre. Bentham pense qu'on peut calculer le bonheur en mesurant les plaisirs et les peines selon plusieurs critères : intensité, durée, certitude, proximité, fécondité (probabilité d'engendrer d'autres plaisirs), pureté (faible probabilité de produire des peines) et nombre de personnes concernées. Pour lui, les plaisirs ne diffèrent pas par leur nature mais par ces dimensions quantitatives ; à intensité et durée égales, le plaisir d'un jeu simple peut donc équivaloir à celui d'une lecture savante<ref>Bentham, ''Introduction aux principes de morale et de législation'', chap. IV, trad. Centre Bentham, Paris, Vrin, 2011, p. 51-54.</ref>. Mill n'est pas d'accord avec ce calcul purement quantitatif. Il introduit une différence qualitative entre les plaisirs : il existe selon lui des plaisirs supérieurs (intellectuels, moraux, esthétiques) et des plaisirs inférieurs (corporels, immédiats). « Il vaut mieux être un Socrate insatisfait qu'un imbécile satisfait », écrit-il : la qualité du plaisir compte autant que sa quantité<ref>Mill, ''L'Utilitarisme'', chap. II, trad. C. Audard, Paris, PUF, 2008, p. 51-54.</ref>. L'utilitarisme soulève des questions difficiles. Peut-on vraiment comparer des plaisirs aussi différents qu'un repas, une amitié ou une lecture ? Peut-on additionner les bonheurs individuels pour obtenir un bonheur collectif ? Et surtout : est-il juste de sacrifier le bonheur d'une minorité au bonheur de la majorité, si le calcul l'exige ? Ces difficultés font que l'utilitarisme est à la fois une théorie politique forte et une doctrine très discutée. ==== Le bonheur est-il vraiment possible ? Le pessimisme ==== Certains philosophes ont une vision plus sombre. Arthur Schopenhauer (1788-1860) pense que le bonheur durable est une illusion. Selon lui, la vie humaine oscille entre la souffrance et l'ennui : quand nos désirs ne sont pas satisfaits, nous souffrons ; quand ils le sont, nous nous ennuyons et cherchons de nouveaux désirs<ref>Schopenhauer, ''Le Monde comme volonté et comme représentation'', livre IV, § 57, trad. A. Burdeau, Paris, PUF, 1966, p. 391-396.</ref>. Pour Schopenhauer, le bonheur n'est jamais qu'un soulagement provisoire. La sagesse consiste à diminuer la souffrance en renonçant à ses désirs et en se tournant vers l'art ou la compassion. Une critique d'un autre type vient de Sigmund Freud (1856-1939). Dans ''Le Malaise dans la culture'', il rappelle que la civilisation impose des renoncements aux pulsions individuelles, ce qui crée une tension permanente entre le désir d'être heureux et les exigences de la vie en société. Freud formule de manière ironique l'idée que le bonheur humain ne semble pas avoir été prévu par quelque ordre providentiel du monde : la formule est anti-providentialiste, et non l'aveu d'une croyance en un « plan de la création »<ref>Freud, ''Le Malaise dans la culture'', chap. II, trad. P. Cotet, R. Lainé et J. Stute-Cadiot, Paris, PUF, 2010, p. 19-22.</ref>. ==== Le bonheur face à l'absurde : Albert Camus ==== Albert Camus (1913-1960), écrivain et essayiste français, aborde le bonheur d'une manière originale. Dans ''Le Mythe de Sisyphe'', il évoque ce héros condamné par les dieux à rouler éternellement un rocher jusqu'au sommet d'une montagne, d'où il retombe aussitôt. Cette situation paraît désespérée et absurde. Pourtant, Camus écrit : « Il faut imaginer Sisyphe heureux ». Comment cela ? Parce que Sisyphe prend conscience de sa condition et l'assume sans illusion. Il ne cherche plus dans le ciel ou dans une promesse de salut le sens qui lui manque. Il refuse l'espoir religieux ou métaphysique et choisit d'habiter pleinement sa tâche<ref>Camus, ''Le Mythe de Sisyphe'', Paris, Gallimard, 1942, p. 165-168.</ref>. Pour Camus, le bonheur est possible même dans un monde absurde, c'est-à-dire un monde qui n'a pas de sens préétabli. Ce bonheur naît d'une lucidité, d'un refus du désespoir et d'une révolte qui maintient la vie intense, malgré l'absence de justification ultime. === Conclusion === Les conceptions du bonheur examinées dans ce chapitre ne se laissent pas réduire à une réponse unique. Elles dessinent toutefois trois grandes questions directrices. D'abord : le bonheur est-il un état subjectif ressenti, ou une vie objectivement réussie ? Aristote et Camus, à des époques différentes, refusent de le réduire à un sentiment intérieur. Schopenhauer, à l'inverse, évalue négativement la structure affective du désir humain, tandis que l'utilitarisme cherche à mesurer les plaisirs et les peines pour fonder une politique du bien commun. Ensuite : le bonheur dépend-il de nous ou des conditions extérieures ? Les stoïciens en font dépendre le bonheur de l'usage droit du jugement ; Spinoza, de la connaissance et de la puissance d'agir ; Aristote rappelle que la vie heureuse exige aussi des biens extérieurs, des amis et une cité juste ; Marx ou les penseurs de la justice sociale soulignent que la transformation du bonheur passe par celle des conditions matérielles et politiques. Enfin : faut-il rechercher le bonheur directement, ou résulte-t-il d'autre chose ? Bentham et Mill en font le but explicite de l'action ; Kant pense au contraire qu'il faut viser le devoir, le bonheur n'étant qu'une espérance. Camus suggère qu'il vient par surcroît, à celui qui assume sa condition. Réfléchir au bonheur ne consiste donc pas seulement à comparer des doctrines. C'est apprendre à articuler ces tensions, en lien avec les autres notions du programme : le désir, la liberté, la justice, le travail, l'État, la conscience. == Sujets de dissertation == Cette collection propose seize sujets de dissertation philosophique portant sur la notion de bonheur, organisés selon différentes perspectives : métaphysique, éthique, politique et existentielle. Chaque question ouvre un ensemble de problématiques que tout penseur doit affronter pour comprendre en quoi consiste une vie bonne et comment l'atteindre. === 1. Faut-il philosopher pour bien vivre ? === Cette question d'ouverture pose un problème que les philosophes eux-mêmes se sont longtemps posé. Y a-t-il une nécessité intrinsèque à philosopher pour accéder au bonheur, ou la réflexion théorique constitue-t-elle simplement un chemin parmi d'autres ? Les anciens Grecs, notamment Aristote, tenaient que la vie heureuse consiste en l'exercice vertueux de l'âme, ce qui exige une certaine connaissance de ce qu'est la vertu. Cependant, nombre de gens vivent heureux sans jamais avoir lu un traité d'éthique. La question demande d'examiner si la philosophie est une condition du bonheur ou seulement un moyen parmi d'autres, et si le bien vivre suppose une compréhension explicite de ce qui rend la vie bonne. === 2. Le bonheur est-il un idéal inaccessible ? === Le bonheur parfait, total et perpétuel semble appartenir à l'ordre de l'utopie. Tout état heureux s'accompagne de limitations : la finitude humaine, la souffrance, l'expérience du deuil. Peut-on concevoir le bonheur autrement que comme un horizon jamais complètement atteint ? Certains courants philosophiques, notamment l'épicurisme, proposent une version plus modérée du bonheur comme absence de douleur plutôt que comme joie constante. D'autres, comme le stoïcisme, le conçoivent comme indépendant des circonstances extérieures. La question invite à réfléchir sur ce qui rend un idéal inaccessible et si cette inaccessibilité est un problème philosophique réel ou simplement le résultat d'une définition trop exigeante. === 3. Existe-t-il des critères du bonheur ? === Le bonheur est-il une notion univoque et bien déterminée, ou reste-t-elle relative à chaque individu ? Peut-on établir des critères objectifs permettant de juger qu'une personne ou qu'une vie est heureuse ? Aristote proposait que le bonheur réside dans l'exercice vertueux de nos capacités proprement humaines. Kant, lui, refusait de placer le bonheur au cœur de l'éthique, mais reconnaissait l'importance du « souverain bien » qui combine vertu et bonheur. La question demande s'il existe des critères universels du bonheur ou si chacun doit trouver ses propres repères. Elle touche aussi à la possibilité d'une mesure du bonheur et à ce que signifierait une telle mesure. === 4. Le bonheur consiste-t-il à faire tout ce qui nous fait plaisir ? === L'identification du bonheur au plaisir constitue une tentative de réponse immédiate et intuitive. Mais elle pose des problèmes : certains plaisirs semblent nuisibles à long terme, certains plaisirs entrent en conflit les uns avec les autres, et poursuivre tous ses désirs conduit souvent à l'épuisement ou à la culpabilité. Épicure lui-même, malgré sa réputation, recommandait une certaine frugalité dans la recherche du plaisir, privilégiant les plaisirs naturels et nécessaires. La question pousse à distinguer entre différents types de plaisirs et à interroger s'il existe une hiérarchie entre eux. === 5. Le bonheur est-il une somme de plaisirs ? === Cette formulation suggère une approche quantitative : le bonheur résulterait de l'accumulation ou de la maximisation des plaisirs. C'est essentiellement la position de l'utilitarisme classique, notamment chez Jeremy Bentham. Mais peut-on vraiment additionner des plaisirs hétérogènes ? Un plaisir intense et bref vaut-il mieux qu'une satisfaction durable mais moins intense ? John Stuart Mill introduisit la distinction entre plaisirs inférieurs et supérieurs, reconnaissant que certains plaisirs intellectuels ou moraux possèdent une qualité que d'autres ne possèdent pas. La question demande si l'approche mathématique peut saisir la nature du bonheur ou si celui-ci ne relève pas d'une autre logique. === 6. Y a-t-il une différence de degré ou de nature entre le bonheur et le plaisir ? === Le plaisir semble instantané, localisé, souvent corporel. Le bonheur paraît plus durable, plus global, plus profond. Mais s'agit-il d'une simple question d'intensité ou de durée (différence de degré), ou le bonheur appartient-il à un ordre différent (différence de nature) ? Peut-on accéder à un véritable bonheur en vivant une suite de plaisirs minimaux ? Inversement, peut-on être heureux en renonçant complètement au plaisir ? Cette distinction entre bonheur et plaisir constitue un carrefour où se rencontrent plusieurs traditions philosophiques, du platonisme au confucianisme. === 7. Le bonheur est-il un simple hasard ? === Cette question interroge la part de contingence et de maîtrise dans le bonheur. Sommes-nous maîtres de notre bonheur, ou celui-ci dépend-il de circonstances externes échappant à notre contrôle : notre tempérament naturel, notre milieu social, les événements imprévisibles ? Les Anciens parlaient de ''tyché'' (chance, fortune) comme d'une puissance qui échappe à la raison. Montaigne, relevant l'instabilité du destin humain, reconnaissait le poids de la contingence. Cependant, soutenir que le bonheur est purement aléatoire semblerait ôter toute responsabilité et tout sens à nos efforts. La question demande comment articuler la reconnaissance de notre dépendance aux circonstances avec une certaine forme de maîtrise ou d'autonomie. === 8. Le bonheur peut-il être le résultat d'une pratique ou d'un art de vivre ? === Contrairement à l'idée qu'il serait un simple hasard, cette perspective envisage le bonheur comme acquis par la discipline, la pratique et l'apprentissage. L'éthique aristotélicienne insiste sur la formation des vertus par la répétition des bonnes actions. Le stoïcisme propose un art de vivre fondé sur la distinction entre ce qui dépend de nous et ce qui ne dépend pas de nous. De nombreuses traditions non occidentales, du bouddhisme au taoïsme, offrent des pratiques censées conduire au bien-être ou à l'illumination. La question soulève la possibilité d'une « technique » du bonheur et ses limites : peut-on vraiment l'enseigner et l'apprendre comme on apprend un métier ? === 9. Le bonheur est-il une affaire de politique ? === Si le bonheur dépend largement des conditions sociales, économiques et politiques, alors sa réalisation ne peut pas être individuelle mais doit relever de la responsabilité collective. Platon, dans la ''République'', envisage un ordre politico-social destiné à produire l'harmonie et le bien-être. Aristote affirme que l'homme est un animal politique et que la vie heureuse s'épanouit dans la cité. Les penseurs utilitaristes du {{s|XIX}} proposaient que la politique vise à maximiser le bonheur du plus grand nombre. Cependant, la question de savoir si la politique doit poursuivre explicitement le bonheur reste contestée : ne risque-t-on pas de sacrifier les libertés individuelles à une conception collective du bien ? L'État ne risque-t-il pas, en poursuivant le bonheur, d'imposer à tous une conception unique de la vie bonne ? === 10. Le bonheur peut-il dépendre de nous ? === Cette question interroge le degré d'autonomie que nous possédons sur notre propre bonheur. S'il dépendait entièrement de nous, nous pourrions le produire à volonté, ce qui ne semble pas vrai. Mais s'il ne dépendait pas du tout de nous, l'effort et la responsabilité seraient illusoires. Le stoïcisme, notamment avec Épictète, distingue nettement entre ce qui dépend de nous (nos jugements, nos intentions) et ce qui ne dépend pas de nous (notre corps, les événements externes), et préconise de concentrer nos efforts sur ce qui nous appartient. Cette distinction peut-elle vraiment résoudre le problème ? Notre bonheur ne résulte-t-il pas toujours d'une combinaison complexe d'efforts personnels et de circonstances externes ? === 11. Y a-t-il un devoir d'être heureux ? === À première vue, le bonheur semble être ce que nous cherchons naturellement, pas une obligation morale. Cependant, plusieurs penseurs ont soulevé l'idée que nous avons des devoirs envers nous-mêmes de cultiver nos capacités et de mener une vie digne. Kant, tout en refusant de placer le bonheur au cœur de la morale, reconnaît que le « souverain bien » combine vertu et bonheur. On pourrait aussi avancer que nous avons un devoir envers les autres de ne pas nous laisser sombrer dans la misère, qui affecte ceux qui nous entourent. La question demande si le bonheur relève d'un droit, d'un devoir, ou simplement d'une aspiration naturelle sans caractère moral. === 12. Le bonheur est-il utopique ? === L'utopie désigne un lieu qui n'existe pas, un idéal irréalisable. Qualifier le bonheur d'utopique signifierait que nous ne pouvons que nous en rapprocher sans jamais l'atteindre vraiment. Mais certaines sociétés ou certaines périodes historiques semblent avoir produit des formes de bien-être général, même si aucune n'a réalisé une félicité absolue. La question demande si l'utopie du bonheur joue un rôle moteur utile dans l'organisation de nos sociétés, ou si elle nous détourne des réalisations possibles en nous promettant l'impossible. Elle s'interroge aussi sur ce qui distingue une utopie d'une aspiration légitime mais exigeante. === 13. La culture est-elle un gage de bonheur ? === La culture, au sens de raffinement intellectuel, de connaissance des arts, des sciences et des humanités, semble enrichir la vie. Cependant, elle peut aussi générer de nouvelles formes de malheur : culpabilité, conscience du malheur d'autrui, sentiment d'inadéquation face aux grands idéaux. Une personne peu instruite peut-elle être plus heureuse qu'un intellectuel perpétuellement inquiet ? La question rejoint le débat entre les plaisirs « inférieurs » et les plaisirs « supérieurs ». Elle demande aussi si le bonheur consiste davantage dans l'ignorance confortable ou dans l'autonomie de pensée qu'offre la culture, même au prix du trouble et du questionnement. === 14. Le bonheur des hommes dépend-il de l'augmentation des richesses ? === Cette question moderne s'impose avec force dans nos sociétés de consommation. Certaines études contemporaines suggèrent qu'au-delà d'un seuil où les besoins matériels sont satisfaits, l'augmentation des richesses n'améliore que marginalement le bien-être subjectif. Pourtant, la pauvreté constitue clairement un obstacle au bonheur. La question demande s'il existe un point d'équilibre : à quel niveau de richesse maîtrisée le bonheur atteint-il son optimum ? Elle interroge aussi la nature du désir de richesse : repose-t-il sur un besoin véritable ou sur une illusion entretenue par le désir de comparaison sociale ? === 15. Le bonheur n'est-il pas un état d'esprit ? === Cette affirmation suggère que le bonheur dépend avant tout de notre attitude face aux circonstances, plutôt que des circonstances elles-mêmes. Deux personnes en situation identique peuvent connaître des niveaux de bien-être très différents selon leur disposition d'esprit. Cette perspective rapproche le bonheur de la sérénité stoïcienne ou de l'équanimité bouddhiste. Cependant, dire que le bonheur relève d'un simple état d'esprit pourrait sembler réducteur ou même cruel : cela pourrait suggérer que celui qui souffre a seulement besoin de « changer d'attitude » plutôt que d'améliorer ses conditions matérielles. La question demande comment équilibrer la reconnaissance de l'importance de la perspective mentale avec celle des réalités concrètes. === 16. La recherche du bonheur nous pousse-t-elle à changer notre façon d'être ? === Poursuivre activement le bonheur nous oblige-t-il à transformer nos habitudes, nos valeurs, nos relations ? Si le bonheur ne s'obtient qu'au prix d'une profonde conversion intérieure ou d'un apprentissage exigeant, alors la question de savoir comment nous vivons devient centrale. De nombreuses traditions voient dans cette transformation de soi la condition du bien-être durable. Mais on peut aussi se demander si une telle exigence de changement perpétuel ne nous éloigne pas du bonheur plutôt que de nous en rapprocher. La question touche à l'authenticité : faut-il accepter qui nous sommes ou nous transformer ? Le bonheur suppose-t-il une acceptation de soi ou une acceptation créatrice de nos possibilités ? === Perspectives transversales === Ces seize questions forment un ensemble où plusieurs thèmes surgissent régulièrement : * La relation entre plaisir et bonheur revient dans les questions 4, 5 et 6. Elle demande de distinguer l'immédiat du durable, le local du global. * Le degré d'autonomie personnel apparaît dans les questions 7, 8 et 10. Il concerne notre responsabilité et notre pouvoir d'agir. * Le contexte social et politique se manifeste dans les questions 9 et 14. Il soulève la question de savoir si le bonheur est individuel ou collectif. * La nature du bonheur, qu'il s'agisse d'une sensation, d'un jugement ou d'un état, traverse en arrière-plan toutes ces questions. * L'accès au bonheur, par la chance, la pratique, la réflexion ou la transformation, structure plusieurs de ces interrogations. Ces dissertations invitent à explorer le bonheur non comme une notion simple, mais comme un carrefour où se rencontrent l'éthique, la métaphysique, la politique et l'existence quotidienne. Aucune réponse définitive ne peut clore ces questions ; chaque époque, chaque individu, doit les reposer en fonction de ses circonstances et de sa compréhension du monde. == Textes d'étude == ==== Épicure : le plaisir comme absence de trouble ==== ; Question travaillée : Le bonheur consiste-t-il à satisfaire tous nos plaisirs ? ; Thèse : Le plaisir est le bien suprême, mais ce plaisir doit être compris comme absence de souffrance physique et absence de trouble moral, et non comme jouissance débridée. ; Notions : plaisir, désir, ataraxie, bien. ''Questions d'analyse'' : * Pourquoi Épicure refuse-t-il certains plaisirs et accepte-t-il certaines souffrances ? * Comment comprendre que « ne dépendre que de soi-même » est un grand bien ? * En quoi cette conception du plaisir s'oppose-t-elle à l'image du débauché ? {{Citation bloc|Le plaisir est le commencement et la fin d'une vie bienheureuse. Le plaisir est, en effet, considéré par nous comme le premier des biens naturels, c'est lui qui nous fait accepter ou fuir les choses, c'est à lui que nous aboutissons, en prenant la sensibilité comme critère du bien. Or, puisque le plaisir est le premier des biens naturels, il s'ensuit que nous n'acceptons pas le premier plaisir venu, mais qu'en certains cas, nous méprisons de nombreux plaisirs, quand ils ont pour conséquence une peine plus grande. D'un autre côté, il y a de nombreuses souffrances que nous estimons préférables aux plaisirs, quand elles entraînent pour nous un plus grand plaisir. Tout plaisir, dans la mesure où il s'accorde avec notre nature, est donc un bien, mais tout plaisir n'est pas cependant nécessairement souhaitable. De même, toute douleur est un mal, mais pourtant toute douleur n'est pas nécessairement à fuir. Il reste que c'est par une sage considération de l'avantage et du désagrément qu'il procure, que chaque plaisir doit être apprécié. En effet, en certains cas, nous traitons le bien comme un mal, et en d'autres, le mal comme un bien. Ne dépendre que de soi-même est, à notre avis, un grand bien, mais il ne s'ensuit pas qu'il faille toujours se contenter de peu. Simplement, quand l'abondance nous fait défaut, nous devons pouvoir nous contenter de peu, étant bien persuadés que ceux-là jouissent le mieux de la richesse qui en ont le moins besoin, et que tout ce qui est naturel s'obtient aisément, tandis que ce qui ne l'est pas s'obtient malaisément. Les mets les plus simples apportent autant de plaisir que la table la plus richement servie, quand est absente la souffrance que cause le besoin, et du pain et de l'eau procurent le plaisir le plus vif, quand on les mange après une longue privation. L'habitude d'une vie simple et modeste est donc une bonne façon de soigner sa santé, et rend l'homme par surcroît courageux pour supporter les tâches qu'il doit nécessairement remplir dans la vie. Elle lui permet encore de mieux goûter une vie opulente, à l'occasion, et l'affermit contre les revers de la fortune. Par conséquent, lorsque nous disons que le plaisir est le souverain bien, nous ne parlons pas des plaisirs des débauchés, ni des jouissances sensuelles, comme le prétendent quelques ignorants qui nous combattent et défigurent notre pensée. Nous parlons de l'absence de souffrance physique et de l'absence de trouble moral. Car ce ne sont ni les beuveries et les banquets continuels, ni la jouissance que l'on tire de la fréquentation des mignons et des femmes, ni la joie que donnent les poissons et les viandes dont on charge les tables somptueuses, qui procurent une vie heureuse, mais des habitudes raisonnables et sobres, une raison cherchant sans cesse des causes légitimes de choix ou d'aversion, et rejetant les opinions susceptibles d'apporter à l'âme le plus grand trouble.|Épicure, ''[[Commentaire philosophique/Lettre à Ménécée|Lettre à Ménécée]]''}} ==== Sénèque : vivre selon la nature ==== ; Question travaillée : Le bonheur peut-il dépendre des biens extérieurs ? ; Thèse : Vivre heureux, c'est vivre selon la nature et la raison, en faisant des biens extérieurs des « auxiliaires » et non des maîtres ; le souverain bien est l'harmonie de l'âme. ; Notions : nature, raison, vertu, souverain bien. ''Questions d'analyse'' : * Pourquoi Sénèque distingue-t-il les biens extérieurs et l'âme ? * Que signifie « être l'artisan de sa vie » ? * Comment comprendre l'analogie entre l'esprit et le « monde » qui se concentre en soi ? {{Citation bloc|La nature, en effet, est le guide qu'il faut suivre ; c'est elle que la raison observe et consulte. C'est donc une même chose que vivre heureux et vivre selon la nature. Ce que c'est, je vais le développer : cela consiste à conserver, avec soin et sans effroi, les avantages du corps et ce qui convient à notre nature, comme choses données pour un jour et prêtes à fuir ; à ne pas nous y soumettre en esclaves, et à ne pas nous laisser posséder par les objets étrangers ; à reléguer tout ce qui plaît au corps, tout ce qui lui survient accidentellement, comme dans les camps on place à l'écart les auxiliaires et les troupes légères. Que ces objets soient des esclaves, et non des maîtres ; c'est uniquement ainsi qu'ils sont utiles à l'esprit. Que l'homme de cœur soit incorruptible en présence des choses du dehors, qu'il soit inexpugnable, et qu'il n'attache de prix qu'à se posséder lui-même ; que d'une âme confiante, que préparé à l'une et à l'autre fortune, il soit l'artisan de sa vie. Que chez lui la confiance n'existe pas sans le savoir, ni le savoir sans la fermeté ; que ses résolutions tiennent, une fois qu'elles sont prises, et que dans ses décrets il n'y ait pas de rature. On comprend, quand même je ne l'ajouterais pas, qu'un tel homme sera posé, qu'il sera rangé, qu'en cela aussi, agissant avec aménité, il sera grand. Chez lui, la véritable raison sera greffée sur les sens ; elle y puisera ses éléments ; et en effet, elle n'a pas d'autre point d'appui d'où elle s'élance, d'où elle prenne son essor vers la vérité, afin de revenir en elle-même. Le monde aussi, qui embrasse tout, ce dieu qui régit l'univers, tend à se répandre au dehors, et néanmoins, de toutes parts il se ramène en soi pour s'y concentrer. Que notre esprit fasse de même, lorsqu'en suivant les sens qui lui sont propres, il se sera étendu par leur moyen vers les objets extérieurs ; qu'il soit maître de ces objets et de lui ; qu'alors, pour ainsi dire, il enchaîne le souverain bien. De là résultera une force, une puissance unique, d'accord avec elle-même ; ainsi naîtra cette raison certaine, qui n'admet ni contrariété, ni hésitation, dans ses jugements et dans ses conceptions, non plus que dans sa persuasion. Cette raison, lorsqu'elle s'est ajustée, accordée avec ses parties et, pour ainsi dire, mise à l'unisson, a touché au souverain bien. En effet, il ne reste rien de tortueux, rien de glissant rien sur quoi elle puisse broncher ou chanceler. Elle fera tout de sa propre autorité : pour elle, point d'accident inopiné ; au contraire, toutes ses actions viendront à bien, avec aisance et promptitude, sans que l'agent tergiverse ; car les retardements et l'hésitation dénotent le trouble et l'inconstance. Ainsi, vous pouvez hardiment déclarer que le souverain bien est l'harmonie de l'âme. En effet, les vertus seront nécessairement là où sera l'accord, où sera l'unité ; la discordance est pour les vices.|Sénèque, ''De la vie heureuse'' (vers 58 après J.-C.), chap. VIII}} ==== Descartes : vaut-il mieux être heureux dans l'illusion ou moins joyeux dans la vérité ? ==== ; Question travaillée : Le bonheur peut-il reposer sur l'illusion ? ; Thèse : Le souverain bien réside dans l'exercice de la vertu, c'est-à-dire dans la possession des biens qui dépendent de notre libre arbitre ; la satisfaction d'esprit qui en découle vaut mieux qu'une gaieté fondée sur de fausses imaginations. ; Notions : vérité, illusion, libre arbitre, vertu, joie. ''Questions d'analyse'' : * Pourquoi Descartes refuse-t-il d'identifier le souverain bien à la joie ? * Que signifie distinguer le souverain bien et la satisfaction d'esprit ? * Pourquoi une joie fausse laisse-t-elle, selon Descartes, une « amertume intérieure » ? {{Citation bloc|Je me suis quelquefois proposé un doute : savoir s'il est mieux d'être gai et content, en imaginant les biens qu'on possède être plus grands et plus estimables qu'ils ne sont, et ignorant ou ne s'arrêtant pas à considérer ceux qui manquent, que d'avoir plus de considération et de savoir, pour connaître la juste valeur des uns et des autres, et qu'on devienne plus triste. Si je pensais que le souverain bien fût la joie, je ne douterais point qu'on ne dût tâcher de se rendre joyeux, à quelque prix que ce pût être, et j'approuverais la brutalité de ceux qui noient leurs déplaisirs dans le vin, ou les étourdissent avec du pétun. Mais je distingue entre le souverain bien, qui consiste en l'exercice de la vertu, ou, ce qui est le même, en la possession de tous les biens dont l'acquisition dépend de notre libre arbitre, et la satisfaction d'esprit qui suit de cette acquisition. C'est pourquoi, voyant que c'est une plus grande perfection de connaître la vérité, encore même qu'elle soit à notre désavantage, que l'ignorer, j'avoue qu'il vaut mieux être moins gai et avoir plus de connaissance. Aussi n'est-ce pas toujours lorsqu'on a le plus de gaieté qu'on a l'esprit plus satisfait ; au contraire, les grandes joies sont ordinairement mornes et sérieuses, et il n'y a que les médiocres et passagères, qui soient accompagnées du ris. Ainsi je n'approuve point qu'on tâche à se tromper, en se repaissant de fausses imaginations ; car tout le plaisir qui en revient ne peut toucher que la superficie de l'âme, laquelle sent cependant une amertume intérieure, en s'apercevant qu'ils sont faux. Et encore qu'il pourrait arriver qu'elle fût si continuellement divertie ailleurs que jamais elle ne s'en aperçût, on ne jouirait pas pour cela de la béatitude dont il est question, pour ce qu'elle doit dépendre de notre conduite, et cela ne viendrait que de la fortune.|Descartes, ''Lettre à Élisabeth'' (6 octobre 1645)}} ==== Pascal : le divertissement, fuite hors de notre condition ==== ; Question travaillée : Le divertissement nous rend-il heureux ou nous empêche-t-il de penser à notre malheur ? ; Thèse : Tout le malheur des hommes vient de leur incapacité à demeurer en repos avec eux-mêmes ; le divertissement n'apporte pas le bonheur, il détourne l'esprit de la condition humaine, faible et mortelle. ; Notions : divertissement, repos, condition humaine, bonheur, illusion. ''Questions d'analyse'' : * Pourquoi le roi sans divertissement est-il, selon Pascal, plus malheureux que ses sujets ? * Pourquoi recherche-t-on le « tracas » et non pas le bien lui-même ? * En quoi cette analyse remet-elle en cause l'idée d'un bonheur fondé sur l'activité ? {{Citation bloc|Divertissement. Quand je m'y suis mis quelquefois à considérer les diverses agitations des hommes et les périls et les peines où ils s'exposent, dans la cour, dans la guerre, d'où naissent tant de querelles, de passions, d'entreprises hardies et souvent mauvaises, etc., j'ai découvert que tout le malheur des hommes vient d'une seule chose, qui est de ne savoir pas demeurer en repos, dans une chambre. Un homme qui a assez de bien pour vivre, s'il savait demeurer chez soi avec plaisir, n'en sortirait pas pour aller sur la mer ou au siège d'une place. On n'achètera une charge à l'armée si cher, que parce qu'on trouverait insupportable de ne bouger de la ville ; et on ne recherche les conversations et les divertissements des jeux que parce qu'on ne peut demeurer chez soi avec plaisir. Mais quand j'ai pensé de plus près, et qu'après avoir trouvé la cause de tous nos malheurs, j'ai voulu en découvrir la raison, j'ai trouvé qu'il y en a une bien effective, qui consiste dans le malheur naturel de notre condition faible et mortelle, et si misérable, que rien ne peut nous consoler, lorsque nous y pensons de près. Quelque condition qu'on se figure, si l'on assemble tous les biens qui peuvent nous appartenir, la royauté est le plus beau poste du monde ; et cependant, qu'on s'en imagine [un roi] accompagné de toutes les satisfactions qui peuvent le toucher, s'il est sans divertissement, et qu'on le laisse considérer et faire réflexion sur ce qu'il est, cette félicité languissante ne le soutiendra point, il tombera par nécessité dans les vues qui le menacent, des révoltes qui peuvent arriver, et enfin de la mort et des maladies qui sont inévitables ; de sorte que, s'il est sans ce qu'on appelle divertissement, le voilà malheureux, et plus malheureux que le moindre de ses sujets, qui joue et qui se divertit. De là vient que le jeu et la conversation des femmes, la guerre, les grands emplois sont si recherchés. Ce n'est pas qu'il y ait en effet du bonheur, ni qu'on s'imagine que la vraie béatitude soit d'avoir l'argent qu'on peut gagner au jeu, ou dans le lièvre qu'on court : on n'en voudrait pas s'il était offert. Ce n'est pas cet usage mol et paisible, et qui nous laisse penser à notre malheureuse condition, qu'on recherche, ni les dangers de la guerre, ni la peine des emplois, mais c'est le tracas qui nous détourne d'y penser et nous divertit.|Pascal, ''Pensées'' (1670), fragment 139}} ==== Nietzsche : l'oubli, condition du bonheur ==== ; Question travaillée : L'oubli est-il une condition du bonheur et de l'action ? ; Thèse : Le bonheur exige une part de non-historique : la capacité d'oublier le passé pour se tenir dans le moment présent ; l'excès de mémoire empêche d'agir et de vivre. ; Notions : mémoire, oubli, action, devenir, vie. ''Questions d'analyse'' : * Pourquoi Nietzsche associe-t-il bonheur et capacité d'oublier ? * Que signifie « sentir d'une façon non historique » ? * En quoi un excès de mémoire serait-il nuisible à la vie ? {{Citation bloc|Pour le plus petit comme pour le plus grand bonheur, il y a toujours une chose qui le crée : le pouvoir d'oublier, ou, pour m'exprimer en savant, la faculté de sentir, pendant que dure le bonheur, d'une façon non-historique. Celui qui ne sait pas se reposer sur le seuil du moment pour oublier tout le passé, celui qui ne se dresse point, comme un génie de victoire, sans vertige et sans crainte, ne saura jamais ce que c'est que le bonheur, et, ce qui est pire encore, il ne fera jamais rien qui puisse rendre heureux les autres. Imaginez l'exemple extrême : un homme qui ne posséderait pas du tout la faculté d'oublier, qui serait condamné à voir en toutes choses le devenir. Un tel homme ne croirait plus à sa propre essence, ne croirait plus en lui-même ; tout s'écoulerait pour lui en points mouvants pour se perdre dans cette mer du devenir ; en véritable élève d'Héraclite il finirait par ne plus oser lever un doigt. Toute action exige l'oubli, comme tout organisme a besoin, non seulement de lumière, mais encore d'obscurité. Un homme qui voudrait sentir d'une façon tout à fait historique ressemblerait à celui qui serait forcé de se priver de sommeil, ou bien à l'animal qui devrait continuer à vivre en ne faisant que ruminer, et ruminer toujours à nouveau. Donc il est impossible de vivre sans se souvenir, de vivre même heureux, à l'exemple de la bête, mais il est absolument impossible de vivre sans oublier. Ou bien, pour m'expliquer sur ce sujet d'une façon plus simple encore, il y a un degré d'insomnie, de rumination, de sens historique qui nuit à l'être vivant et finit par l'anéantir, qu'il s'agisse d'un homme, d'un peuple ou d'une civilisation.|Nietzsche, ''Considérations inactuelles'', II (1874), § 1}} == Notes et Références == {{references|colonnes=2}} [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} dh309gybl29p3r66lbhgqmwczfqlcjr Essai pour un modèle de psychisme objectif 0 83689 765750 764929 2026-05-02T00:15:36Z ~2026-26674-53 123650 /* La résolution des souffrances, attribut des objets subconscients. */ Correction de pallier. On pallier quelque chose, on ne pallie pas "à" quelque chose (c'est comme dire "je mange à une pomme" au lieu de "je mange une pomme") 765750 wikitext text/x-wiki {{Page de garde|titre=Le miroir brisé|description= ''Essai pour un modèle de psychisme objectif'' Docteur Denis-Serge Clopeau |cdu= * {{CDU item|6|61}} |versions= {{Moteur}} {{Version imprimable}} {{version PDF|Miroirbrisé.pdf}} }} [https://upload.wikimedia.org/wikipedia/commons/6/65/Miroirbris%C3%A9.pdf cf version pdf avec sa page de remerciements] Le titre de l’essai sera ressenti peut être comme intrigue pour ce qui est du miroir brisé et c’est vrai que son explication ne surgira que dans les dernières lignes de cet essai. En ce qui concerne le sous titre «essai pour un psychisme objectif» il sautera aux yeux comme une prétentieuse ambition. Comment un domaine aussi vaste, mystérieux pourrait s’imposer à l’esprit sans recours à discussion ou interprétation. Je partage cette critique et chacun conclura cette petite provocation sur son propre jugement. Le vrai contenu de l’essai tend à décrire les rouages du psychisme comme un mécanisme de construction d’objets psychiques, mais aussi d’identification de leurs attributs, de leur relation dans le domaine conscient et subconscient autant dans l’état mental qualifié de sain que dans celui de pathologique. A toute fin utile vous remarquez que les pages de gauches (dans la version PDF) laissent tout la place pour disposer du moyen immédiat de toute critique et annotation. Personnellement j’ai toujours regretté de ne pas disposer de ce simple moyen d’appropriation de la chose lue. Remercions les inventeur du Wiki d'offrir le moyen de discussion individuelle ou collective, une vrai révolution dans le partage des connaissance ou des imaginaires. == Sommaire == {{/Sommaire}} == Confidence == D’où je parle, d’où je pars …. ce qui manque souvent au lecteur et qui pourtant est indispensable pour éclairer sa critique. Voici mes réflexions dans un domaine que j’explore attentivement, depuis un instant précis par ses circonstances, mais dont la date n’est pas définie à un an près. Le point de repère est l’instant extraordinaire du début de cette expérience, où la révélation, s’est produite alors que je passais juste sous la frondaison d’une glycine en fleur et à l’odeur merveilleusement envoûtante, débordant des grilles d’un jardin, dans une petite rue d’un des 3 parcours me ramenant du lycée vers 17 h, au sortir du cours du musique. Au 3{{ème}} étage de mon lycée Lakanal où dans une salle légèrement mansardée exposée plutôt à l’ouest et aux carreaux du 19e siècle à faces non parallèles déversant en arcs en ciel le soleil déclinant, nous avions achevé le cours par l’écoute sur le tourne disque portable modèle éducation nationale , d’une musique qui m’avait emporté déjà assez loin. J’avais 13 ou 14 ans et j’étais souvent seul, aussi la contemplation musicale était mon rituel le plus fréquent. À l’heure où j’écris, dans ma 67{{ème}} année, l’envie de livrer mon expérience me poursuit depuis la soixantaine. Ma vie professionnelle m’a contraint de bon gré à approfondir mes réflexions de jeunesse, et à les organiser pour venir en aide à mes patients dont je recevais régulièrement les plaintes, les souffrances, les confidences. J’ai aussi bien sûr profité des acquis de mes études initiales qui ont été longues et qui ont connu de nombreux échecs avant le couronnement final dont le thème était très orienté vers la haute technologie, autre de mes sujets d’intérêt. Pour en revenir au sujet de l’essai il est notoire que si je n’ai réussi la majorité de mes certificats qu’à la deuxième présentation, parmi mes succès immédiats il y a eu le {{g|bloc}}. Dans ces années 1975, ce bloc, avait mauvaise réputation dans toutes les promotions : énorme, touffu, inutile, incompréhensible, baratin etc etc. Je l’ai donc abordé avec appréhension bien que déjà prévenu contre les préjugés. J’ai lu l’énorme polycopié de plus de 1000 pages, dont beaucoup de photocopies de livres en réduction, qui parlait de psychiatrie avec sa symptomatologie, sa nosologie, ses thérapies dont quelques stratégies de soutien psychologique vouées à intégrer l’exercice médical général, de quelques éléments de droits … OUF. Effectivement j’ai du m’y reprendre à plusieurs fois pour comprendre et pour m’inscrire en faux contre les préjugés dévalorisants, courants dans les rangs des collègues. Je me rappelle avoir rempli quelques blancs et versos libres, avec mes remarques personnelles. Le jour de l‘ épreuve, j’ai choisi parmi les thèmes libres celui qui consistait à expliquer une situation de souffrance psychologique décrite de façon assez littéraire. J’y ai introduit mes concepts d’ontogénie, d’{{g|angoisse primitive résolue par l’angoisse conceptuelle mais dont l’invasion menace devant toute situation inconnue}}, en fait une part de ce je développe dans la suite. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/modèle épistémologique|un modèle mais à comprendre au sens épistémologique]]</blockquote> Ma note, et avec une grande surprise, m’a placé en tête du palmarès ce qui m’est arrivé dans deux matières seulement. Fort de cette onction universitaire je me considérais assez compétent pour assurer une aide efficace aux patients. Oui bien sûr, il faut excuser sa niaiserie à la bonne volonté ! Dans les cas les plus académiques je remerciais mes maîtres de m’avoir donné les idées claires sur la distinction entre psychose et névrose et leurs typologies, pour savoir décider d’adresser les patients vers les confrères psychiatres, de façon documentée, ou prescrire le soutien psychologique. Mais j’ai vite constaté les limites des compétences à ma disposition et aussi celles des autres soignants en matière de soutien psychologique. Aussi je suis reconnaissant à deux stages spécifiquement dédiés à la communication et à deux autres à la Programmation Neurolinguistique qui m’ont ouvert de nouveaux horizons. De ces sources variées j’ai produit après 1 an et demi d’appropriation en 1994 (ma véritable installation comme généraliste commence en 1990) mon propre protocole empruntant à la PNL en complétant d’apports neurophysiologiques mais excluant toute implication physique ou intimiste dans les processus «d’ancrage», laquelle je réfute sous le qualificatif de «posture du gourou». Ce dernier point est crucial de mon point de vue critique, face à toute démarche psychothérapeutique qui donne un rôle interventionniste au thérapeute. Dans certaines écoles visant un public de « manager », de vendeurs, de cadres militaires etc, vous trouverez sur internet des permis d’intrusions, d’assujettissements, de dominations, de manipulation, aussi odieux dans leur forme que dans leurs objectifs et maléfiques pour l'autonomie mentale des personnes ciblées. Je recommande donc la plus grande circonspection en la matière. Mon protocole par contre, suit un schéma essentiellement pédagogique, sécurisé par une hiérarchie des objectifs clairement exposés aux patients. « Nous allons commencer par une leçon de chose puis des exercices visant à vous permettre d’évoquer vos moments préférés, sereins et néanmoins banals sans valeur intime particulière ». « Si le besoin d’aborder avec moi des souffrances persiste, ce sera après un entraînement et une maîtrise que vous aurez acquise avec mon aide d’abord sur des situations banales….. je n’aime pas l’odeur de l’eau de javel, où le bruit des tondeuses à gazon ». Cette prévention contre un abord thérapeutique direct d’une souffrance souvent exprimée clairement par le patient comme : « enfant j’ai été battu par mes parents, ou j’ai perdu un enfant, j'ai été violé , mon conjoint me trompe, ou mon supérieur hiérarchique me harcèle&#x22; etc sera expliqué dans l’essai. Donc la première motivation est de fournir un modèle clair, et donc j’espère facilement critiquable des fonctions psychiques, autant pour une appropriation personnelle par le lecteur en donnant des pistes pour l’ introspection, que pour aider à la compréhension d’autrui. Le souffrant pourra donc aussi y trouver un confort dans le «connais toi même». Enfin mes consœurs et confrères qui reconnaîtront la problématique soulevée y trouveront au besoin une formulation soumise à leur propre appropriation et critique. Abordons les concepts, car il s’agit d’un modèle qui sort du cadre académique en tout cas à mon niveau de connaissance . Je tente de suivre un plan progressif qui vise à expliquer parallèlement les mécanismes conscients et subconscients, ce qui amène à quelques redites, qui je l’espère profiteront à une pédagogie de la répétition dont j’ai moi même bien profité. Je m’appuie sur des connaissances dont les validations n’ont pas toutes le même niveau. Je suis bien conscient que mon écrit pêche par un manque notoire de bibliographie, il ne s’agit que d’un essai et les lecteurs sont invités à laisser leur esprit critique en éveil. Pour pallier ce défaut, je compte beaucoup sur la curiosité du lecteur pour le butinage également critique d’internet que l’époque moderne nous offre. Comme je ne pratique pas la fausse modestie, je dis aussi que ce modèle contient des outils qui ont profité à beaucoup de patients qui m’ont consultés dans les circonstances variées de ce merveilleux métier de médecin généraliste. Je me rappelle bien sûr de quelques échecs non-surmontés sans doute car la présentation didactique déstabilise ceux pour qui, le psychisme doit nécessairement être abordé comme un domaine obscur et mystérieux, sur un divan dans la peine et l’ombre. C’est hélas une conviction que deux consultations ne suffisent pas toujours à ébranler d’autant qu’elle est fortement diffusée dans le corpus des certitudes socialement admises. Voilà, à ceux qui poursuivent encore la lecture, je conseille la plus grande décontraction. Il me semblerait étonnant que j’arrive à me faire comprendre à première lecture. D’autant que malgré un effort sincère, je n’ai pas pu éviter quelques va et vient et autres digressions qui j’espère prendront leur juste place dans l’esprit de ceux qui reliront les passages {{g|du coq à l’âne}}. == L’angoisse primitive, l’ontogénie, le JE , l’angoisse conceptuelle et subconsciente, le premier monde construit. == Commençons par l’explication de ces termes dans l’acception que je me suis forgée au fil de mes introspections et de la modélisation que j’ai construite pour aborder les phénomènes psychologiques. J’ai eu très jeune, cette intuition «que ce qui est, n’est qu’un cas particulier de ce qui peut être», et j’en fais même une devise de mes réflexions philosophiques. Toutefois ce qui «est» n’est pourtant pas fortuit et répond sans doute à un objectif justifié. Cette intuition est devenue une révélation assez mystérieuse, en quelques pas sous la frondaison de la glycine. Une question, un oukase presque s’est imposé à ma jeune conscience. «acceptes tu l’inconnu, l’incertitude, sans garantie de profit quelconque, ou bien décides tu de t’y soustraire et d’en perdre la curiosité»?. Ce jour là, j’ai choisi la voie angoissante qui m’a accompagné pendant 150 mètres jusqu’à un sursaut lorsque mon chemin à croisé le train de la ligne de Sceaux dans son prolongement jusqu’à Robinson, à cet instant où je me trouvais sous le pont métallique en poutre H. Voilà c’était fait, je connaissais le chemin qui s’ouvre aux curieux, entre le fait et le possible, entre le certain et le tout. Cette occasion rare de reconnaître l’angoisse primitive, pré-conceptuelle, que je pose comme instigatrice de notre construction, notre ontogénie psychique m’a été donnée dans ces quelques minutes. Cette expérience m’a fait connaître un cheminement généralement profondément occulté dans notre subconscient. C’est un objet inclassable par essence, puisque l’inconnu qui entoure le nourrisson, ne trouve en lui aucune classe préétablie. Cette dimension m’accompagne depuis, je la respire. Je la fréquente chaque jour ou presque, elle m’est familière. Voilà en tout cas la première expérience qui m’a valu d’entrevoir cette forme d’angoisse très particulière, sans doute insupportable dans une situation commune mais qui ce jour là, dans la méditation qui m’accompagnait souvent, m’a semblé «naturelle» bienveillante. Depuis cette familiarité l’a rendue confortable, voire essentielle à mon bien être, en prenant la forme d'une curiosité fondamentale. Les années passent, cette découverte ontogénique, ne s’est jamais éloignée, m’a aidé en cas de difficulté où les échecs, déconvenues, souffrances ont croisé ma route. Et je me suis mis à introspecter continûment mon fondement psychologique. Puisque que la personne que je pense être, n’est qu’un cas particulier de ce qu’elle pourrait être, comment s’est t’elle formée tout de même ? Sans me rappeler précisément comment ma réflexion s’est condensée en la matière, la forme qu’elle a fini par prendre m’a paru tellement limpide que j’en fait un fondement solide. Et j’en viens au modèle décrit dans la suite. La première heure de vie est passionnante à observer. Hélas peu de personnes ont cette occasion avec une certaine distance. Ma première fonction étant l’oxyologie, nous disons aujourd’hui urgentiste, médecin de Samu, vous le devinez ce loisir de la distance n’a pas été mon lot quotidien. Au contraire dans mes interventions comme intervenant dans l’urgence néonatologique au lit de la parturiente et de la couveuse du prématuré, réparties dans les petites maternités des Côtes d’Armor et principalement la nuit. Aussitôt arrivé, obtenir le dossier, les dernières info depuis l’appel, la préparation du plateau technique, les rappels des protocoles à l’équipe, tout ça dans le meilleurs des cas. Souvent c’était beaucoup plus direct, sur la sonde d’aspiration, l’épicrânienne, le capteur de PO2 trans-cutané, l'intubation, l'ambu, le ventilateur, les lampes à infrarouge, le scope etc. . Mais dans les meilleurs des cas, c’était un moment d’émerveillement, tout était fait par l’équipe, la nature avait bien fait les choses. Quelques compliments rassurant aux heureux parents et je pouvais prendre un peu de distance. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/néonatologie et angoisse primitive|la néonatologie comme indice de l'angoisse primitive]]</blockquote> Fréquemment dans ces cas le bébé, se met assez rapidement à crier, il s’agite, il fronce, même sur la chaleur du sein de sa mère. Bon allez le ''dextro'' est un peu bas et selon les circonstances il va recevoir la solution à son malaise. Au mieux le sien de la mère où déjà suinte le précieux colostrum ou en cas d’empêchement technique quelques ml de glucosé à 10% dans un biberon à bonne température. Mais le voilà qui crie de plus belle, le contact du téton ne le calme absolument pas, les premiers jets de lait déclenchés par la libération hypophysaire de l’ocytocine déclenchée par les cris, ne le calment pas non plus. Le réflexe de déglutition fonctionne, mais même après les premières déglutitions l’enfant n’est toujours pas satisfait! Que ce passe t’il? Ce nourrisson serait t’il démuni du moindre raisonnement? Ben oui bien sûr, nous savons depuis longtemps que l’être humain fait partie des mammifères les moins équipés à la naissance. Cette souffrance du nourrisson dans sa première heure de vie est démonstrative de «l’angoisse primitive». Sait il ce qu’il est entrain de vivre ? ...non. En rien, ni la cause, ni le moyen, ni même le résultat ne lui sont connus. Voilà ce qu’est {{g|l’angoisse primitive}} absolument universelle pour les êtres humains en construction. Cette angoisse va être le climat de toute cette construction jusqu’à ce que dans chaque situation, l’enfant, puis l’adolescent et le jeune adulte ait pu transformer la situation inconnue en objet conscient ou et subconscient capable de répondre à l’urgente question du devenir et de l’invariant des réponses. Le deuxième jour le nourrisson est déjà beaucoup plus «raisonnable», la mémoire des séquences de ses premières heures le dispense de cris inutiles, et fatigants. Dès qu’il sent le lait dans sa bouche, son parti est pris, il tête avec ardeur. Puis le troisième jour, les cris cessent dès que l’odeur du sein se rapproche. L’olfaction, un des canaux les plus précoces et puissant est à l’œuvre avec une connexion mono axonale directe au rhinencéphale du cerveau primitif lequel est connecté à de multiples régulateurs physiologiques. Il est même possible de constater qu’un linge imprégné de l’odeur de la mère aura un effet calmant pour l’impatience du nourrisson…. Transitoire car bientôt la supercherie est démasquée par l’enfant et pas question de le tromper sur ce coup là. Plus tard avec le bruit d’un biberon agité, la voix des parents, et avec la première détection des images floues, l’apaisement sera de plus en plus anticipé, il sera même possible d’observer les traits, le chant, de la réjouissance avant la satisfaction réelle du besoin. Quelque chose de nouveau, une acquisition s’est donc opérée. Un observateur attentif voire musicien notera que les cris et pleurs d’un bébé, d’un enfant changent très rapidement lors de ses premières «frustrations» , apprentissage. Je suppose une connexion neurochimique complexe entre l’«aire du cri» et celle des objets psychiques forgés hors de la gangue primitive, de l'angoisse primitive, par les coups des épreuves successives. La rapidité fascinante de ces acquisitions doit nous interpeller. Si ce petit cerveau encore immature fournit un tel effort c’est que «l’angoisse primitive» est sans doute insupportable. Il lui faut un palliatif immédiat. La construction d’objets capables de la circonscrire, de la prévenir, de la sublimer. Alors «l’angoisse primitive» s’effacera devant une angoisse beaucoup plus acceptable, qui sera «l’angoisse objective et même conceptuelle», celle qui tient dans les mots parfois les plus effrayants certes mais des mots connus, des objets psychiques reproductibles, prévisibles, invariants. Cette construction urgente, indispensable de tels objets finissent par former un monde, que je qualifie de «premier monde construit». Passez le film d’une existence et vous trouvez que ce monde touche à tout. D’abord s’identifier comme autonome de l’environnement. Le haut, le bas, la bouche, le ventre, les bords du berceau, les images «utiles», le déplacement, éviter de se cogner, donc pouvoir distinguer le JE physique du NON-JE physique. Bien sûr toute situation totalement inconnue tombe sous le joug de «l’angoisse primitive» et devra être «résolue» dans l’urgence. Ce premier monde construit prend donc une valeur immense, le seul îlot viable dans un océan d’inconnus, pas question de le lâcher ou même de le mettre en doute, sinon c’est revenir à la case départ, la terrible «angoisse primitive». L’ontogénie humaine est donc assemblée par une forge infernale et universelle. Bien entendu les objets construits dans l’urgence sont rapidement influencés par l’environnement général et social en particulier. La place de la personne, du «JE» lui même dans ce «premier monde» construit connaît donc des formes différentes et en partie déterminées par la manière dont les situations inconnues se présentent. C’est déjà l’éducation. Ce qui importe ici, c’est de se rappeler que si l’on admet un déterminisme par l’éducation, il n’est toutefois pas possible de réduire ce «JE» et ce «premier monde construit» à l’action éducative. La caractéristique essentielle de ces objets est leur justification vitale. C’est la contrainte de l’ontogénie humaine. Il faut aboutir à tout prix à un premier monde efficace pour faire disparaître l’angoisse primitive au profit d’angoisses conceptuelles: peur de se cogner, de manquer, de mourir etc. Ainsi l'être humain trouve sa sérénité. Ce premier monde construit sera donc ce qui «est» et toute remise en cause de son monopole sera anéantie par l’interdiction de se RE-trouver devant l’angoisse primitive. C’est la raison pour laquelle, poser que ce qui «est» n’est qu’un cas particulier des possibles est plutôt rejeté dans les conversations habituelles. C’est là notre handicap ontogénique, la limite intrinsèque de l’imagination. S'il est intellectuellement possible de poser cette proposition, elle sera écartée par notre filtre psychologique préconscient, pour maintenir les invariants du premier monde construit. &#x22;Je ne saurais mettre de distance avec ces objets construits «vitaux» qu’à la condition d’une sécurisation exceptionnellement réalisée et d’une curiosité téméraire&#x22;. Dans les autres cas une discussion philosophique effleurera la question existentielle, mais ne modifiera pas les croyances du JE. On dit souvent la nature revient au galop. Il faut entendre que le premier monde construit imposera son monopole car il est lié dans le subconscient à la pérennité du JE et de ses invariants, de son intégrité. Une fois le JE constitué dans le premier monde construit, l’angoisse primitive est résolue. Puis l’être social s’agite dans les relations avec d’autres personnes et un environnement moins immédiatement vital, où ce sont des angoisses conceptuelles qui sont motrices de la construction d’objet. Les angoisses conceptuelles peuvent découler d’une construction personnelle, peur des araignées mais elles sont surtout socialement transmises par le langage social. En exemple la peur de maladie transmissible est particulièrement élaborée, conceptuelle, mais implique le JE et le SOI ce qui fait la difficulté d’une bonne appropriation. [[Fichier:Ontogénie.png|vignette|schéma illustrant le processus ontogénique dans "le modèle de psychisme objectif"]] Jusqu’à présent nous avons parlé d’un JE élaboré sous la contrainte d’une «angoisse primitive dont l’ampleur dépend de l’environnement. Par exemple les études psychosociologiques rapportent que les enfants qui ont grandi dans un climat de violence familiale, ou une guerre ont une personnalité fortement perturbée. Lorsque «l’angoisse primitive» est exacerbée par la violence, la constitution du JE s’arrête se bloque. Il se produit un hiatus constitutionnel. Par exemple l'enfant victime de maltraitances sexuelles ne pourra pas construire ses objets psychiques relatifs à son ontogénie sexuelle. Ainsi nous comprenons que l’exposition de la personne à un évènement sexuel la confrontera d’emblée à «l’angoisse primitive». Ces situations douloureuses entraînent une forme d’évitement, ou autre réaction insolite. Son JE n’aura pas pu se construire sur cette inconnue qui lui a été infligée violemment. Alors c’est le hiatus qui encoche la courbe de croissance du JE. Nous verrons les conséquences de ces hiatus de façon quasiment graphique lors des processus de régressions pour fusion qui sont sans doute les phénomènes les plus complexes jalonnant la vie normale d’un être humain. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/JE et NonJE|JE et NonJE ligne de front contre l'angoisse primitive]]</blockquote> == les outils et les objets == L’homme est souvent décrit par ses capacités, ses acquis. L’appropriation, la fabrication d’outils, qui sont aussi des objets mais avec la capacité de transformer d’autres objets font partie de toutes les fresques paléontologiques . Ces outils ne sont pas toujours matériels. En arithmétique l’addition par exemple comme opérateur est un objet symbolique, agissant sur des objets opérandes. C’est un objet-outil symbolique conscient. Ajoutons que nous verrons aussi des objets outils subconscients produisant des «opérations subconscientes». Chacun pratique cette interdépendance avec l’outil qui étend l’être jusqu’à ressentir que sans les outils il n’est plus rien, qu’il perd son image humaine. C’est même plus fort que ça, puisque sans une palette d’outils ce sentiment de dépersonnalisation devient angoissant. La feuille blanche sans crayon, sans gomme, sans «inspiration» est un exemple simple. Cette situation par rapport aux outils est donc générale, des premiers âges, jusqu’au handicap de la vieillesse, des plus anciens métiers aux plus récents avec une relation à l’objet de plus en plus indirecte, complexe, abstraite. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/viol d'enfant viol d'adulte|différence des séquelles dans le cas d'un viol d'enfant et d'adulte]]</blockquote> L’interaction objet / outil est essentielle dans l’appréhension de l’un comme de l’autre. L’objet est associé aux outils qui l’extrait, le façonne, le transporte, et réciproquement, que serait un outil sans destination vers un ou des objets. Et oui Il en va de même par rapport à la construction de notre psyché ! Le nouveau né, dispose déjà de quelques outils. Alors on peut considérer que la sensibilité tactile encore frustre, par expérience successive, l’amène à distinguer son propre corps de l’environnement, puis à hiérarchiser, mémoriser, reconnaître et l’un et l’autre et leur relation, avec une acuité, une anticipation croissante. De l’inconnu émerge le prévisible, puis le sentiment de sécurité, voire de puissance comme sur la simple pâte à modeler. Je renvois ici à mon concept «d’angoisse primitive». Ce mécanisme d’appropriation, de perfectionnement dans l’usage des outils est indissociable de l’ontogénie (constitution du JE) et de la construction du Soi (relationnel, social). Les outils disponibles conditionnent la construction du JE et du Soi. L’homme sort de cette analyse comme un être par essence social. Au delà des premières expériences sensorielles des premières minutes de vie, l’intervention des outils conditionne, rend possible, configure sa personne, son identité, ses acquisitions conscientes et subconscientes par les expériences de l’éducation, ou fortuites, personnelles, inopinées. C’est bien en effet la vie sociale, avec les parents, voisins, école, etc qui fournit les objets outils et donne l’exemple de leur usage, ou de leur mésusage, ou de leur interdiction, et produit les objets en résultant. Il faut entendre que cette définition très large du mot «objet» contient une connexion entre le vécu personnel, intime, et les relations sociales plus ou moins structurées, découlant de l’usage d’outils dans un sens très général. Ce fait explique pourquoi si beaucoup d’expériences humaines sont identiques, elles forment des objets non identiques, divergents, voire incompréhensibles de l’un à l’autre. Selon l’ordre d’appropriation des outils, les objets qui constituent, le JE et le Soi, des uns et des autres seront différents. Il y a donc une grande dispersion des personnes sur un fond universel des mécanismes, donc l'utilité d'une modèle. Voilà sans doute le premier défi de la communication. Par exemple l’empathie qui est très répandue s’appuie sur l’expérience commune et universelle de certaines joies ou souffrances relativement à des expériences très répandues, voire intégrées à l’éducation, comme le doudou, au point que le ressenti est «synchronisé» d’emblée entre l’enfant et les parents premiers initiateurs sociaux. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/outils objets lien symbolique| ouils objets psychiques et liens symboliques]]</blockquote> ''A contrario'' l’incompréhension est reconnue par la société, qui dans le meilleur des cas propose la tolérance et le dialogue pour la dissoudre. Dans ce cas si l’on veut généraliser, c’est l’expérience partagée de la tolérance et du dialogue (des outils) qui débouche sur une empathie, non pas à propos d’un objet commun cette fois, mais secondaire à cette démarche réciproque de la mise en œuvre d’outils. C’est alors cette œuvre commune qui devient l’objet de l’empathie, un objet symbolique, un lien symbolique subconscient. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/cytologie et communication humaine|un comment la cytologie et la physique des échanges membranaires ouvre une réflexion sur la communication humaine]]</blockquote> Les outils sont donc indispensables à la construction des objets dans la définition étendue qui précède, allant du capteur sensoriel cutané, l’outil empathie et le vélo comme exemple d’objet devient à son tour outil. Si nous considérons que la personne est le résultat de la mémorisation d’expériences découlant de son interaction avec l’environnement et de l’usage d’outil, et si ce résultat aboutit à ce Je et ce Soi , comme collection d’objets , alors vient la question de qu’est ce que la liberté? En effet la description ci dessus est mécanique, systématique et pourrait faire douter que la personne humaine dispose de créativité, d’imagination et d’autres facultés auto-génératrices non liées directement à la socialisation. Et pourtant ces facultés ne font aucun doute, c’est donc que d’autres mécanismes existent et dépassent ce cadre. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/sémiologie du hiatus ontogénique|une sémiologie du hiatus ontogénique]]</blockquote> L’empathie met déjà la puce à l’oreille, car les «objets» impliqués dans cette expérience sont les personnes elles mêmes. «l’outil» de cette empathie est en fait une relation symbolique de similitude, d’équivalence, entre des expériences partagées lors de l’ontogénie ou édification du JE. Il y a donc là un outil d’un nouveau genre (ici je référerai volontiers au concept de neurones miroirs, j'interpelle le lecteur pour qu'il partage un lien efficace). Il ne s’agit pas d’une interaction entre une personne et un environnement plus ou moins concret mais cette fois entre deux personnes qui mobilisent leurs acquis ( JE, SOI et leurs objets) par une relation symbolique qui est comme l’outil. C’est donc une interaction purement psychologique. Comme cette interaction est très universelle, elle peut être considérée comme constitutionnelle. Je qualifierai ces objets constitutifs du Je et du Soi de «psychologiques». L’empathie apparaît comme l’ outil psychologique, dont la fonction est d’obtenir, un lien symbolique entre objets subconscients acquis par plusieurs personnes. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/enseignement de l'empathie aux soignants|l'enseignement de l'empathie aux soignants]]</blockquote> Dans le droit fil, la créativité, l’imagination, l’intuition trouvent leur place comme outil agissant à partir de , ou sur des objets psychiques pour en produire d’autres. Et la merveille c’est que l’artiste, le poète ou l’amoureux ou le chercheur traduisent ces relations symboliques en objets «classiques» par des outils usuels pour les exposer aux autres. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/psychisme auto-controlable|l'être humain et son apprentissage de l'auto-contrôle]]</blockquote> == La mémoire, les objets. == Tous les objets psychiques forment t’ils un ensemble homogène comme des bibelots sur une étagère dont l’extrême variété fait abandonner tout espoir de classification? Pour faire simple une distinction entre objets conscients et objets subconscients est assez facile à éprouver. Je propose d’argumenter à propos des différences de types, et de contenu des objets conscients d’une part et subconscients d’autre part. Il va de soi que pour qu’un objet existe il faut qu’il persiste en mémoire. Je propose d’argumenter des points communs et des différences entre les processus mémoriel des objets conscients et subconscients. En même temps on peut reconnaître que le purement conscient et le purement subconscient n’est pas toujours évident. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/premier monde construit et incommunicabilité| retour sur le premier monde construit et les circonstances de l'incommunicabilité]]</blockquote> J’argumenterai que les évocations des objets conscients et les invasions des objets subconscients expliquent l’instabilité mémorielle des uns et des autres. J’illustrerai, l’influence des invasions des objets subconscient dans le préconscient, sur le devenir des objets conscients et des objets subconscients eux mêmes. Avançons dans la définition de ces qualificatifs. Comme exemple simple, les tables de multiplication sont des objets conscients, comme un vélo, une casserole etc. Une caractéristique commune de ces objets, c’est qu’on s’en rappelle, qu’on peut les évoquer facilement, et même les communiquer à autrui. Une certaine familiarité avec soi même, ou des descriptions littéraires permettent de prendre conscience (oui c’est un paradoxe qui va s’éclaircir) que ces objets comportent aussi des attributs subconscients. Juste comme exemple, le vélo est pour bon nombre un rappel profond, de liberté , d’émancipation, de gestion du risque, d’optimisme qui ne revient à l’esprit que dans un état mental particulier, éventuellement recherché. Si les attributs conscients du vélo découlent d’un apprentissage plus ou moins savant, ses attributs subconscients comme l’émancipation assez générale pour déboucher sur une empathie, sont parfois contrariés. Des chutes, non compensées par les soins ou la compassion donnent lieu pour certaines personnes à une association, un lien symbolique: vélo entraîne douleur et échec. Ces attributs subconscients majoritairement partagés comme ici l’émancipation manqueront à l’objet du «malchanceux». C’est un cas fréquent où une empathie éprouvée de façon fréquente, peut se trouver en échec et conduire à un sentiment d’incommunicabilité de la personne «malchanceuse» par rapport à un groupe social majoritairement «chanceux». C’est un domaine où la topographie cérébrale prend un sens fonctionnel, avec son cortège de modulation des neuromédiateurs et des hormones. Les connaissances sur la topographie fonctionnelle cérébrale remontent à des travaux cliniques depuis le 19{{ème}} siècle et sont éclairés par des imageries fonctionnelles alimentant la neuroscience moderne. Ainsi telle aire a été identifiée comme celle du langage, telle autre de la motricité ou de la sensibilité avec une telle précision qu’une sorte de projection dystrophique mais reconnaissable, du corps sur la «coupole» corticale, est décrite comme l{{’}}''homoculus''. Je ne suis pas du tout à jour des recherches en neuroscience, j’en préviens le lecteur qui voudrait trouver ici une quelconque référence en ces domaines. Je recommande la lecture d’articles à jour sur ces questions, à ma connaissance les données des études cliniques anciennes sont plutôt consolidées par la neuroscience actuelle avec une finesse accrue et un champ de recherche de plus en plus vaste comme toujours en science. A noter que les imageries modernes vont jusqu’à contribuer à l’étude des troubles dépressifs, des schizophrénies et bien sûr des démences entre autres. Ces découvertes invitent à une conceptualisation structurée des objets. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/notion de classe d'objets|la notion de classe d'objets et d'outils psychiques]]</blockquote> Puis les études de cas déficitaires ont permis de décrire des syndromes psychiques liés à des altérations topographiquement définies entraînant des tableaux reproductibles, le syndrome frontal, pariétal etc. Mais c’est surtout la grande révolution de la biochimie et de son observation dynamique qui permet un bond considérable dans la compréhension de l’activité cérébrale et y compris des phénomènes psychologiques normaux ou pathologiques. Nous revoilà dans le substratum de l’objet psychique. Le conscient est installé quelque part dans le cerveau et le subconscient ailleurs. Il y a des relations, d’association, des liens fonctionnels, symboliques entre les deux mondes de même qu’entre objets d’un même monde. La lecture d’articles de Wikipédia (pour les plus accessibles) permettra de critiquer ces définitions succinctes. Mais pourquoi réinventer le fil à couper le beurre quand le voisin en dispose d’un tout neuf? Ainsi donc nous disposons de connaissances certaines sur l’influence de molécules naturelles: hormones, endorphines, neuromédiateurs, molécules «simples» comme le glucose, les acides aminés et même certains acides gras sur l’état mental ressenti, observé, déclenché etc. Bien sûr là aussi il y a des cas rudimentaires comme les conséquences de l’alcoolémie, celles de l’œstrus, ou de l’intoxication au monoxyde de carbone pour donner des exemples extrêmement disparates pouvant servir comme porte de recherche car il faut absolument voir large. D’autres cas sont encore plus raffinés avec une compétition entre facilitation_inhibition entre plusieurs groupes chimiques, dont l’effet est exprimé par la personne, qui par entraînement ou contrainte ou interdit, va enclencher des réactions, des conduites, des anticipations de rétrocontrôle, ou d’enchaînement quasi préprogrammés impliquant ces molécules. Pour approfondir et détailler nous trouverons de nombreux exemples: lutte contre l’endormissement, contre le froid, influence de la nervosité, la colère, des pulsions sexuelles ou alimentaires, des addictions, de l’ennui, les céphalées etc etc . Dans ce modèle je pose que si les mécanismes sont universels, leurs aboutissement va différer entre les personnes selon leurs antécédents cumulés dans le Je et le Soi. En particulier la conclusion satisfaisante ou non de ces mécanismes va pondérer l’objet par un facteur de «récompense» (dopaminergique,sérotoninergique) ou l’absence de ce {{g|climat biochimique}}, et influer lourdement sur le désir de reproduire ou d’éviter ces situations. Ici il faut explorer le vaste champ des addictions comme le tabagisme ou de phobie comme peur de l’eau. Ces exemples banals pour montrer ce qui peut advenir en matière alimentaire ou sexuelle ou d’apprentissage dans des pathologies lourdes. Un objet conscient ou subconscient contient donc au moins un attribut, une couleur, sa qualification comme favorable ou à rejeter. Nous verrons donc que toutes évocation entraînera une invasion du préconscient avec ce filtre. c'est la voie principale de modification des acquis suivants. == Et la mémoire dans tout ça? == Et bien là aussi la topographie et la biochimie expliquent la différence entre la mémoire immédiate, la mémoire à long terme, la facilitation ou l’inhibition d’évocation des connaissances, des évènements conscients d’une part et subconscients par ailleurs et des deux à la fois. La mémoire est donc une fonction de base du cerveau psychique, c’est le minimum syndical d’une certaine manière, c’est le statut figé (en première approximation) de l’objet. Elle représente le procès verbal d’un apprentissage, d’un évènement, et de leur «climat biochimique» sérotinino-dopaminergique en particulier. Mais il faut aussi prendre en compte sa remise en conscience par une évocation plus ou moins facile ou spontanée et plus ou moins transformée la encore par le contexte biochimique. Comme exemple si je cherche 2 fois 2, ça viendra immédiatement. Si je cherche à me rappeler ma première chute de vélo, forte chance que plein d’autres évocations surgissent et m’égarent dans le calendrier de mon existence et dans le ressenti douloureux de la chute. Ai je été ramassé avec empathie, avec des soins, avec des reproches, des encouragements, une histoire drôle, la menace d’hospitalisation, un vélo brisé ou indemne et j’en passe. Récemment il a été démontré que l’objet mémorisé n’était pas inaltérable et que les évocations répétées pouvaient le transformer en fonction du «climat biochimique» et des liens symboliques induit à l’instant de l’évocation qui peuvent se constituer après l’évènement. Il faut donc admettre que la mémoire remanie régulièrement les objets, leur climat neurochimique, et donc les liens symboliques avec d'autre objets ou outils. Ces remaniements seront conscients lors d’un apprentissage intellectuel, avec comme exemple simple l’acquisition d’un sens enrichi pour un mot déjà connu. Toujours dans le domaine conscient, le trou de mémoire sera particulièrement intéressant à étudier tant il dépend du contexte neurochimique, et des processus d’invasion à l’œuvre dans le préconscient, c’est le cas du «trac» qui sera éventuellement résolu en mettant à profit des invasions bienfaisantes. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/remaniement mémoriel et manipulation d'opinion|les remaniements mémoriels et la manipulation de l'opinion]]</blockquote> De là il est facile d’entrevoir que le remaniement mémoriel des objets subconscients sera mis à jour, lorsque l’introspection permettra de repasser le film du vécu. Toujours comme exemple, le contenu subconscient du vélo avant et après la chute. Ce qui est facile dans un cas simple, empathique, apparaîtra plus complexe face à des traumatismes plus graves et intimes, conduisant à une situation d’incommunicabilité. C’est le moment de glisser une référence connue à des manipulations traumatisantes comme les «sérum de vérité», les techniques de propagande et de conditionnements, de suggestion, qui hélas se pratiquent jusque dans les boutiques de charlatan où les cellules de torture. Une référence positive par contre ira au chimiothérapie documentée de certains syndromes post-traumatiques ou en encore à la galvano-thérapie moderne de certaines psychoses. Voilà qui illustre que le remaniement mémoriel est en fait courant et pourquoi sa connaissance par un patient lui même, et l’effet d’un exercice mental dont il a la maîtrise peut conduire à un effet salutaire pourvu que les effets contraires soient prévenus par un protocole éprouvé. C’est le moment de prendre conscience que les objets conscients et subconscients se distinguent aussi par leurs structures mémorielles en plus de leurs outils d’acquisition. Il me paraît intéressant de concevoir la notion d’objet d’une manière moderne. La théorie des ensembles objets définit les objets comme éléments de classe d’équivalence. Voilà un terme savant, d’accord, mais un exemple épargne la complexité apparente. Un objet qui a 2 roues, sur lequel on peut s’installer, et avancer en pédalant est un vélo puisqu’il possède tous les attributs de la classe vélo. Cette analogie rudimentaire entre objets et mathématique est connectée à la psychologie. A ma connaissance Piaget décrit que l’un des processus d’apprentissage fondamental de l’enfant est «l’analyse généralisatrice». L'analyse crée une classe et y place en même temps les objets pour généraliser. Bien sûr l’esprit humain généralise ce mécanisme qui semble incontournable, comme «inscrit en dur» dans notre cortex. Il construit des classes mères ou filles, les secondes héritant des premières en y ajoutant de nouveaux attributs. Ce mécanisme fondamental permet une arborescence très performante, économique pour les processus d’évocation mémorielle des objets conceptuels et d’ailleurs il est systématiquement utilisé par les pédagogues. En science chaque spécialité crée une arborescence à sa convenance où plus justement selon les outils qu’elle mobilise. L’arborescence issue de «l'analyse généralisatrice&#x22; des objets conscients, et de leur mémorisation, et de leur évocation semble être un modèle efficace. A ma connaissance il n’y pas à ce jour un substratum neuronal et biochimique de ce modèle. Notons toutefois que tous ces processus conscients sont fortement influencés par le contexte social, par la pollution des stimuli comme les bruits parasites, par l’état psychologique général, par son climat biochimique, qui contribuent au filtre préconscient comme je le décrit dans mon «protocole». En exemple une personne, convaincue par le mépris qu’elle n’est pas capable de comprendre ou d’apprendre, exposée à l’objet subconscient «mésestime de soi», n’apprendra effectivement rien. L’inhibition est aussi redoutable que la stimulation est efficace, d’où le concept révolutionnaire de {{g|pédagogie du succès}}. Si le climat d’acquisition d’un objet conscient est assez facilement organisable celui d’un objet subconscient l’est beaucoup moins. La pédagogie veillera dans le premier cas , mais point de mise en situation vraiment organisée pour le premier baiser, pour rester simple. C’est une allusion sur l’implication du filtre préconscient dans la constitution des objets conscients mais plus particulièrement pour les objets subconscients. == Et alors quelles différences avec les objets subconscients ? == Il faut préciser un point crucial du modèle, ce filtre qui s’intercale entre les évènements et l’activité psychique, c’est le concept du préconscient. Ce modèle s’appuie d’abord sur un constat facile à admettre y compris dans l’activité consciente. La quantité d’information, de stimuli qui se présente à nos organes sensoriels (nous parlerons d’un organe non-sensoriel, «intérieur» plus tard) est tellement importante, qu’un traitement exhaustif de ces informations épuiserait immédiatement notre machine neurochimique. En effet cette machine n’a pas de capacité infinie, à l’instar de ses réactions enzymatiques, elle est saturable et c’est donc un filtre de réjection qui protège la machine de la surchauffe. Un exemple extrême, qui montre les conséquences d'un déficit de se filtre est donné par l'hyperalgie du syndrome thalamique, et ses douleurs insoutenables. Dans le cadre physiologique le capteur visuel est une belle démonstration. La réactivité (et son corollaire la période réfractaire) des photorécepteurs garantit, que par la saturation biochimique, la captation de stimuli si leur fréquence dépasse une certaine valeur sera ignorée, rejetée. Ainsi les données physiques seront disponibles un temps suffisant et sans parasite pour que le cortex occipital en particulier, ait le temps de les analyser. De plus en fonction des circonstances, intérêt, urgence, procédure de survie, la fréquence de réjection varie. En cas de chute de vélo, le film est enregistré à plusieurs fois les 25 images secondes, et il est possible de la ré-évoquer au ralenti. Ce phénomène est aussi connu en cas d’agression lorsque son évocation n’est pas bloquée par les mécanismes que nous aborderons. C’est le syndrome post-traumatique. === Le filtre préconscient est donc adaptatif mais surtout perturbable et modulable. === Pour souffler un peu, un cliché qui rappelle que toute activité neurochimique est saturable : {{g|plus et ça bloque}}. De plus une fois franchi le filtre de réjection, les stimuli considérablement moins nombreux vont faire l’objet d’un nouveau filtrage. C’est en fait l’amorce du classement qui pour l’objet conscient relève de l’analyse généralisatrice et qui pour l’ objets subconscient sera surtout marqué par son agrégation avec son contexte neurochimique et humoral. Alors se présentent plusieurs cas : * Soit l’évènement interpelle l’activité consciente, c’est un discours, une image signifiante. Il est alors présenté à la machine intégrative, arborescente, décrite ci-dessus puisqu’il est d’emblée classable. Ex... je vois un vélo. * Soit l’évènement est anticipé, connu, banal ou considéré comme tel et il sera exclu de l’analyse consciente car il ne l’interpelle pas. Par exemple le bruit du vent dans les arbres. Le subconscient pourra donner ou non lieu à un classement dans les catégories subconscientes où les classes ont une forme différente par rapport aux classes {{g|conceptuelles}} identifiables dans l’activité consciente. Nous décrirons ces classes subconscientes plus loin. * Soit l’évènement est brutal, et/ou non-anticipé, imprévu, et/ou inimaginable, ou terrorisant, toutes circonstances qui déclenchent un blocage du processus préconscient, il ne pourra pas être classé. Les exemples les plus courants sont les agressions, les accidents, les viols, et la maltraitance subie dans l’enfance. Au fil des travaux, cette situation a été qualifiée de traumatisme, d’autant qu’elle inaugure une situation bien étudiée aujourd’hui désignée par syndrome post-traumatique. Ce blocage est topographiquement défini par l’implication de l’hippocampe, des modifications hormonales à action générale de «qui-vive» (ex adrénaline,) de stress (hypercorticisme), de dysrégulation hypophysaire, jusqu’à des modifications des structures cérébrales observables dans les recherches par imagerie médicale. Ce drame psychique se prolonge par une altération des fonctions neurochimiques habituelles. Le filtre préconscient est sidéré bloqué. Sorti de cette phase de sidération il est perturbé, conduisant à un épuisement neurochimique pouvant perturber donc toutes les fonctions et acquisitions: apprentissage, sommeil, sensation de bonheur, libido, élan vital etc. <gallery> Fichier:STRESS ET DEPRESSION 1.webp Fichier:STRESS ET DEPRESSION 2.webp Fichier:STRESS ET DEPRESSION 3.webp Fichier:STRESS ET DEPRESSION 4.webp </gallery> La situation peut se chroniciser au-delà des 3 mois et le fonctionnement psychique s’en trouve déformé indéfiniment. C’est le handicap post-traumatique. D’où l’importance reconnue aujourd’hui des conséquences d’une absence ou d’une mauvaise prise en charge initiale du syndrome traumatique. Le classement : Il faut souligner que la forme arborescente que prend le classement des objets conscients est un modèle solide, éprouvé en psychologie de l’apprentissage, avec l’analogie des ensembles, des classes d’équivalence et des héritages. Encore l’exemple du vélo est facile et tout le monde comprend alors ce qu’est un vélo-moteur, un vélo qui {{g|hérite}} d’un moteur. Le classement des objets subconscients n’est pas superposable à ce modèle. L’évènement bienfaisant du berceau douillet s’enrichira naturellement de celui du lit douillet et sans doute de la «doudoune» pour donner un exemple de portée populaire. La contemplation de l’arbre en face de la chambre avec son feuillage changeant, les bruits qu’il émet à la fois dépendant de l’état du feuillage et du vent, et de la myriade des pénombres projetées, remplira le vaste coffre au trésor des émotions bucoliques et du sentiment d’harmonie. Ce qui est remarquable dans cette mémorisation outre sa structure «agrégative» c’est son énorme capacité de stockage sensoriel. Le flux de donnée stockée est incomparablement supérieur à celui des objets conscients et donc la puissance de leurs invasions sera d’autant plus grande. Cette hyper-définition sensorielle de l’objet subconscient est d’ordre physiologique. Comme si ce classement assez simple, sans les raffinements nécessaires aux concepts, laissait notre énergie psychique disponible pour une acquisition massive multi-piste à grande vitesse d’acquisition. Il en résulte que l’objet subconscient est massif, global. Les pistes de l’enregistrement sont chacune connectée directement à un organe sensoriel. Ce caractère massif rend bien compte de l’effet de son évocation, à l’image de la madeleine de Proust, où une effluve discrète déclenche une remise en situation encore plus prégnante que le vécu lui même. Je désignerai cette situation par le mot {{g|invasion}}. Le stimulus déclenchant étant comme une {{g|gâchette}}. Il faut rappeler une fois de plus que l’objet comporte dans ses attributs, sa pondération propre entre le «plateau» récompense, satisfaction, gratification, jouissance et celui punition, frustration, culpabilisation, souffrance et leurs attributs biochimiques. Ici il faut souligner que «l’invasion» entraînera la restitution de ce contexte amplifiée par sa répétition à l'image des démonstration de Pavlov. Cette remarque doit attirer l’attention sur la dangerosité des déclenchements d’invasions, circonstancielles ou par sollicitations volontaires. Une incitation à l’évocation d’un objet subconscient qui contiendrait un attribut «souffrance» va renforcer l’attribut souffrance donc l’aggraver. Nous verrons qu’il est possible de fournir les outils ayant l’effet inverse. Retenons qu’avant toute manipulation par soi même ou avec l’aide d’un tiers, d’un objet subconscient, il faut absolument que le sujet enfile une {{g|combinaison de protection}}. Cette combinaison et la manière de l’enfiler, réclame une compétence à la portée de chacun, pourvu qu’en plus d’une conception claire de la nature des objets en causes, comme je l’espère l’exposé actuel y contribue, deux techniques bien réglées d’évocation soient réalisées. Ce sont les techniques d’évocation associative et dissociative selon le {{g|protocole}} en pièce jointe à cet essai (ce protocole empreinte à la Programmation Neurolinguistique en se distinguant radicalement de certains de ses enseignements que je qualifie de dangereux, en particulier les ancrages avec intervention physique du praticien). De même que nous avons vu le rapport constitutionnel et réciproque entre objet et outil que ce soit dans l’activité consciente comme subconsciente, nous venons de voir que l’objet possède une structure mémorielle qui varie en fonction de la nature de l’objet et du contexte de sa survenue. Nous avons vu les différences des processus mémoriels d’un point de vue structurel, l’arborescence du conscient versus l’agrégation, fusion du subconscient, mais aussi la différence fondamentale entre les contenus de la mémorisation des objets conscients prédestinés à la communication, à la prévision, au calcul , et les contenus des objets subconscients dont la destination nous échappent par définition mais qui constituent la plus grande part de la psyché. Cette dernière affirmation a été historiquement souvent combattue, voire réprimée par de nombreuses sociétés sans doute pour couper l’individu d’une source de motivation non contrôlable par la norme, comme l’empathie, l’inspiration, dans l’espoir aussi de mobiliser la totalité de l’énergie psychique au profit du collectif ou du pouvoir, en niant la personne et son histoire particulière. Cette amputation qui continue dans l’époque médiatique, conduit une immense proportion des personnes à lutter contre des mécanismes neurophysiologiques et donc à se tourner le dos à elles mêmes. D’un point de vue pratique il est facile d’envisager qu’il est illusoire d’obtenir d’une petite part de notre psychisme conscient, qu’il maîtrise sa part majoritaire subconsciente, non conceptuelle, et son cortège biochimique induit. == La manipulation des objets et les opérations entre les objets. == Partant du modèle du classement par équivalence des objets. Nous pouvons observer que des opérations entre ces objets deviennent possibles et même assez systématiques. Pour ce qui est des objets conscients, un grand nombre d’entre eux se retrouvent qualifiés de concept. Pour exemple des objets chiffres vont se prêter à des opérations, et des relations de comparaison. C’est le fameux 2 plus 2. Mais les simples mots d’un vocabulaire se trouvent combinés dans la langue, dans un discours non prédéfini à l’avance, sauf pour les perroquets, mais en suivant une syntaxe. Voici donc des objets conscients, en mémoire, classés, combinables, pondérables etc. Donc la manipulation des objets conscients et les opérations sont indissociables de l’activité humaine perçue par tout un chacun. Cette activité cérébrale fait autant l’objet d’étude biologique que psychologique avec une convergence chaque jour plus affirmée. La (les) fameuse dyslexie est typique de ce point de vue. Longtemps classée comme débilité ou trouble caractériel, puis handicap, puis génétique elle est présentée avec des mécanismes de plus en plus raffinés, y compris ses imageries fonctionnelles cérébrales comme une particularité non rédhibitoire à l’apprentissage et peut être parfois avantageuse. Pour ce qui est des objets subconscients il faut faire appel à des considérations bien moins communes. Admettre la présence d’objets subconscients est un fait récent, sauf à considérer que la méditation, les transes, les prières, les superstitions, les possessions, référaient au monde de l’invisible y compris au sein même des personnes. Ce subconscient est donc une mise au jour d’un fonctionnement cérébral inhérent au moins à la nature humaine. Nous avons vu que ces objets, issus de l'agrégation des stimuli foisonnants, malgré le filtre de réjection, mobilisent la plus grande part de l’activité cérébrale Nous avons vu que les interactions entre ces objets sont nombreuses et qu’elles émergent parfois sous des formes imprévisibles. Pour exemple, La simple sensation de s’être «lever du bon pied» ou à l’inverse de «voir les choses en noir» qui se succèdent sans explications évidentes. Entre une sensation de bien être total et la tension insurmontable d’un syndrome post-traumatique, point de doute il se passe des choses et il faut essayer de comprendre. Depuis la classique description de la madeleine de Proust et des flash post-traumatiques les indices se multiplient. Ces objets subconscients envahissent l’activité cérébrale à partir d’un stimulus qui peut être banal, évènement «gâchette». L’odeur déclenche l’invasion de la madeleine avec tout son contexte, lieu, personnes présentes, lumière de la salle, couleur de la nappe, crépitement du foyer, voix entendues etc . A un instant, une perception sensorielle par un seul canal sensoriel, déclenche l'invasion d’un événement complexe impliquant tous les canaux sensoriels y compris un canal non supporté par un organe sensoriel qui transmet une sensation de bonheur, le climat {{g|dopaminergique}}. Cet exemple est démonstratif. L’objet subconscient est «global», c’est un duplicata qui toutefois connaître des remaniements complexes au fil de ses ré-évocations. Il est d’une extrême définition, il envahit totalement la personne sans intervention de calcul, de volonté. C’est «l’invasion». C’est comme un réflexe pavlovien de notre activité la plus évoluée. L’artiste nous fait découvrir cette invasion reproductible et heureuse par un discours littéraire. Comme ce récit est facilement compris et qu’il renvoie à des situations semblables pour le lecteur, il faut y voir une invitation empathique. À noter que l’objet subconscient contient tellement d’informations, qu’avec l’entraînement qui convient, son évocation reproduit une situation approfondissant son évaluation consciente. Et voilà qu’un élément de la situation enregistrée mais non prise en compte à son origine revient au premier plan. Cette redécouverte est tellement puissante qu’elle renforce la pondération satisfaction d’une situation bénéfique. Pour exemple chaque fois que je ré-évoque selon mon protocole la situation où je me laisse traîner par mon bateau à voile en pleine mer, portant harnais et sous la vigilance de ma femme, cette invasion renforce sa valeur de bien être. Voilà donc les caractéristiques des objets subconscients qui se dessinent: résultats d’un enregistrement multi-sensoriel à haute définition, classés en fonction de charges satisfaction_répulsion, liées à un &#x22;climat&#x22; neurochimique complexe mais certain, capables de produire non pas un souvenir mais une «invasion» qui peut produire au fil de ses répétitions un renforcement de sa charge satisfaction_répulsion. <blockquote>TRES IMPORTANT ....... [[Essai pour un modèle de psychisme objectif/préconscient et objet gâchette|Illustration de "l' organe psychique", PRE-CONSCIENT et OBJET GÂCHETTE]]</blockquote> Ces invasions sont donc capables de produire un «climat neurochimique» qui va fondamentalement influencer les futures acquisitions psychiques (conscientes ou subconscientes). Dans les circonstances communes ces invasions expliquent bien les sensations générales d’optimisme, ou d’irritabilité que chacun éprouve et reconnaît dans son existence et dont la banalité traduit la bénignité sauf à considérer qu'elles se pérennisent dans un mode obsessionnel. Mais dans les cas de souffrances psychologiques, les potentialités des invasions dans le préconscient, expliquent les fortes perturbations des objets acquis sous l’emprise des invasions toxiques. Le filtre des réjections est perturbé, le filtre du préconscient soumis à une invasion «douloureuse» perturbera le classement et la mémorisation de l’évènement. D'une part le filtre de réjection devient perméable, moins efficace, il laisse passer plus de stimuli comme pour mieux prévoir et parer à la situation traumatisante. C’est l’état de qui-vive, de phobie, des démarches d’évitement. Ce filtre se met à laisser passer des bruits en fait sans intérêt, rejette certain contact anodin, déclenche des fuites devant certaines images pourtant banales etc. Comme nous l’avons vu, la détérioration du filtre expose à l’épuisement neurochimique par surcharge en stimuli. L’épuisement conduit à l’état morbide en particulier la dépression {{g|bio-chimique}}. D'autre part le filtre préconscient du classement est perturbé. Le climat de souffrance s’installe dans le préconscient fréquemment et durablement. Les évènements devant donner lieu à l’acquisition d’objets subconscients satisfaisants, gratifiants sont recouverts par le vert de gris, la morosité, et ceux qui hélas sont pénibles et frustrant cheminent sans entrave vers leur agrégat mémoriel délétère. C’est alors que la manipulation, la combinaison entre objets s’opère, cette fois sous le règne de l'invasion toxique, c'est le &#x22;parasitage&#x22;. Concernant les objets conscients, nous avons exposé qu’un objet conscient, présente une nature conceptuelle, prend sa place dans une arborescence mémorielle construite sur le modèle de l’analyse généralisatrice, possède des attributs opératoires. Nous avons même suggéré que l’intuition du poète, du chercheur relevait d’une capacité à créer des liens nouveaux entre ces objets créant du même coup un nouvelle arborescence et du même coup de nouveaux liens opératoires entre les objets. Ces facultés sont sans doute liées à certaine phase du sommeil. Cet apport encore neurophysiologique contredit l’idée que seul l’effort soit gage de succès et de performance. Au contraire tout concorde dans la physiologie. C’est la qualité de la décontraction du muscle qui annonce la performance de la contraction, pour des raisons biochimiques démontrées. C’est sans doute la performance des sommeils de l’être humain qui lui permet ses performances conceptuelles et subconscientes. Et alors concernant les objets subconscients?.... À ce jour, mise à part les perturbations du sommeil consécutives à tout objet subconscient déclencheur d’épuisement neurochimique, je ne connais pas de démonstration sur l’importance du repos pour l’établissement des liens symboliques entre objets subconscients. Toutefois rappelons nous que le lien symbolique d’homologie bien suggéré dans les empathies nous met sur la voie. Aussi admettre que des liens symboliques s’établissent entre objets subconscients est envisageable. Et je tente d’en confirmer la vraisemblance. Le langage étant d’abord un jeu de symbole, l’idée de solliciter les liens symboliques avec les objets subconscients par un usage particulier du langage est l’objectif central que je retiens de la Programmation Neuro Linguistique. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/concernant une dyslexie| une dyslexie et sa solution]]</blockquote> Un constat intéressant dans cette voie est d’observer que si parfois une invasion comporte une indication temporelle, le plus souvent cette dimension est estompée, voire absente. Pour reprendre l’expérience du vélo, tout s’agrège en mémoire comme si ces expériences n’avaient plus de date. Ce fait extraordinaire pour une capacité comme la mémoire qui contient dans sa définition, la résistance au temps qui passe, témoigne d’une caractéristique particulière à la mémoire du subconscient. Elle n’est pas attachée au temps, au contraire elle semble s’en affranchir. Ceci explique le coté massif des invasions. Les sensations de chaque évènement fusionnent avec celles d’évènements distants. Ce mécanisme fait que le vélo ou le faire- du-vélo, «subconscient» va s’enrichir d’éléments fortement pondérés «positivement» dans l’échelle des satisfactions pour les jours de beau temps et de vacances, alors qu’il peut être dévalorisé par trop d’expériences sous la pluie ou la tempête. Ces cumuls ne sont pas le produit d’une addition des séquences mais d’une fusion des séquences. Ce travail de fusion s’opère pendant le sommeil c’est le plus probable. Nous savons qu’un sommeil non physiologique, pathologique, va entraîner l’amnésie des faits récents, la caricature la plus désastreuse en étant le «lendemain de cuite». Nous devons donc admettre que les liens symboliques entre objets subconscients s’opèrent pendant le sommeil. Il nous reste à concevoir que ces liens ne sont pas prédéterminés par une stratégie consciente comme celle bien codifiée de la répétition de la récitation avant d’aller au lit. (Ici je suggère pour mémoire, d'explorer l'intérêt de faire enfiler sa combinaison de survie à un traumatisé avant qu'il ne s'endorme, un exemple de ce qui peut être conçu comme une urgence thérapeutique). Ces liens symboliques sont hors du champ de la conscience, par contre les invasions qui en découlent s’imposeront, avec toute leur puissance massive, à l’être humain sans égard pour la confiance qu’il porte à son monde conceptuel conscient. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/détail d'un recouvrement|la technique du recouvrement une technique thérapeutique]]</blockquote> La stratégie s’étaye petit à petit. L’invasion par un objet subconscient est d’une puissance telle que l’activité consciente est littéralement écrasée. Les liens symboliques entre objets subconscients s’opèrent pendant le sommeil et donc le climat de ce sommeil est déterminant sur la création de ces liens et donc leurs propres «climats» . Les outils de ces liens ne sont pas univoques au sens ou le lien d’homologie bien identifié dans l’empathie ne donne pas toujours le même résultat pour chacun. La contradiction entre objets, la dévalorisation d’un objet, ou sa mise en valeur, est éprouvée lors des invasions. Hélas ces phénomènes quotidiens sont exclus du champ de l’activité consciente autant par les mécanismes sollicités que par la négligence ou le rejet social à leur encontre. C’est ainsi que la norme sociale, expose la majorité des êtres humains à l’ignorance d’eux mêmes, une incompréhension qui conduit à un sentiment d’impuissance, d’angoisse, faute de reconnaître à la fois les objets et les outils mobilisés dans ces invasions. La méconnaissance des outils et des objets reproduit le stade de l’angoisse primitive donc par quasi réflexe, entraîne le rejet du Je et du Soi du champ de la conscience. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/humanisme et modèle de psychisme objectif|Comment le modèle de psychisme objectif peut contribuer à l'émancipation des êtres humains]]</blockquote> Au contraire une bonne leçon de chose, et la pratique de l’introspection sous protection de la combinaison de protection dont la personne est maîtresse, en autonomie et surtout dans son intimité, permet de maîtriser ces invasions dans toutes leurs ampleurs, leurs connexions et leur puissance, pour y puiser sérénité, force, explication, et finalement résolution des souffrances. L’introspection d’une souffrance, ne doit être envisagée que sous cette protection, au risque certain de la voir ravivée par son évocation. L’exploration d’une plaie se fait en urgence, mais dès lors qu’une cicatrice commence, son exploration est un geste qu’il ne faut entreprendre que sous condition de connaître la présence, la nature, la position d’un corps étranger, son trajet et d’opérer alors sous anesthésie et asepsie parfaite. Dans les autres cas, le patient demande une récupération fonctionnelle plus qu’une restauration formelle. C’est donc la personne elle même qui construira son adaptation, pourvu qu’elle dispose des outils de cette réforme. == La résolution des souffrances, attribut des objets subconscients. == Quelques cas cliniques de ma pratique. Cas 1 :<span id="étrange"></span> Ce cas est fait pour troubler le lecteur qui aurait perçu dans cet essai une tentative d’exposé ramenant tout à la psychologie. Un adolescent de 14 ans m’est adressé par sa mère pour trouble du comportement. Il évoque qu’il veut se venger, se défendre d’agressions qu’il aurait subi. Nous commençons donc par proposer au patient de considérer que de se plaindre à 14 ans c’est normal, que l’âge le plus heureux de la vie n’est sans doute pas pour tout le monde la jeunesse etc. Il en vient à la confidence qu’il est agressé régulièrement par des gens qu’il ne saurait reconnaître et que c’est généralement lorsqu’il range sa mobylette. Alors je m’attache à lui faire décrire ce qui précède et ce qui suit l’agression ….. et là c’est la confusion. Je le rassure sur l’étrangeté qui lui saute aux yeux, et sur le fait qu’il y a une explication à ces «flash». La brutalité de la vision, la régularité des circonstances, son absence de témoin, son étrangeté inachevée, sa période de récupération, m’ont interpellé. Merci mes maîtres, mon premier diagnostic qui sera confirmé est une épilepsie temporale partielle. Pour un généraliste c’est une rencontre exceptionnelle et même pour un neurologue hospitalier ce n’est pas une observation quotidienne dans cette forme. Je l’adresse en neurologie avec l’anamnèse et l’hypothèse soulevée d’épilepsie temporale avec hallucination conduisant à une névrose de persécution. Après deux électroencéphalogrammes le diagnostic est confirmé, le traitement adapté fait disparaître les «crises» et mon accompagnement convainc le jeune patient qu’il a eu une réaction normale, intelligente à une génération d’images de sensations anarchiques auxquelles il a donné un sens. Les sensations étaient sans fondement objectif, liées à l’activité neuronale paroxystique et anarchique de son lobe temporal, mais son effort à leur donner un sens découlait d’une intelligence normale. Il a été guéri de son épilepsie très particulière et en même temps les doutes qu’elle avait fait naître sur sa santé mentale sont effacés. Voilà l’exemple glorieux, issu de ma pratique pour illustrer que la souffrance psychologique n’est pas toujours consécutive à une histoire psychologique. Il convient d'être circonspecte avant de se "lancer" dans des consultation spécialisé sans l'avis du médecin généraliste. Il en va de même pour d'autre spécialité quand un ORL est sollicité pour un bouchon de cérumen historique tout à fait du ressort de l'otoscopie du généraliste qui pratiquera son extraction attentive. Cas 2 : C’est même un cas courant dans les addictions de tous ordres où c’est le trouble fonctionnel neurochimique qui crée la souffrance psychologique en détruisant le circuit de traitement des objets conscients et subconscients. Comme anecdote instructive et pour le moins originale, c’est une intoxication chronique au monoxyde de carbone qui a finalement expliqué l’humeur dépressive d’une famille appelant désespérée le régulateur du SAMU que j’étais, pour des symptômes dépressifs, touchant plusieurs membres de la famille, dans ce début d’hiver, sans évènement particulier, hors des céphalées bizarres. J’ai demandé l’intervention à domicile des sapeurs pompiers qui ont démontré le dysfonctionnement de la chaudière gaz mal entretenue du fait des difficultés financières de la famille. Un enchaînement sociologique en quelque sorte avec intoxication au monoxyde de carbone. Il faudra bien entendu poursuivre le bilan socio-économique qui à lui seul est dépressiogène. Une anecdote, pour toujours élargir une vision parfois trop systématiquement psychopathologique. Cas 3 : Ce sont toutes les démences dégénératives variées, vasculaires, «séniles» qui toutes entraînent des souffrances par dysfonction des fonctions psychologiques et psychiques, troubles de mémoire, qui au bout du compte ré-expose la personne à l’»angoisse primitive» mais cette fois sans l’énergie psychique du nourrisson, de l’enfant à l’adulte jeune l’ayant résolu. C’est la destruction neuronale. C’est la destruction des liens symboliques, et l’invasion anarchique d’autres. La personne rentre en lutte comme elle peut. Le tout contribuant à un épuisement final et après des accès de révolte et d’agressivité parfois suicidaire à une apathie, puis une vigilance vacillante et l’extinction. Toutes ces souffrances sont directement liées à une altération des processus biochimiques et une altération anatomique au point qu’elles sont aujourd’hui prédictibles biologiquement et en imagerie médicale. Cas 4 : un syndrome post-traumatique simple est celui d’un jeune chauffeur de poids lourd, victime d’un accident de renversement de son véhicule sur un rond point. L’accident est spectaculaire, c’est un gros porteur. L’enquête de gendarmerie rapporte une surcharge et un défaut de répartition de charge cause de l’accident et les enregistreurs de bord disculpent le patient. Il est en incapacité totale psychique, deux côtes fracturées, dorsalgie, sommeil très perturbé, invasions visuelles et auditives jour et nuit. Syndrome dépressif, perte d’estime de soi, perte d’appétit, de libido. Il était heureux jusqu’à cet instant, avec une petite fille adorable, une femme aimante et des passions artistiques remarquables. La {{g|combinaison de protection}} anxiolytique est mise en place en usant de l’évocation méthodique d’une situation banale de sa vie de sculpteur dont le climat biochimique est sûrement bénéfique. Par répétition, cette invasion positive se renforce au point qu’en 2 semaines le sommeil et le reste se normalisent. Le patient prend confiance dans la démarche. Il faut maintenant désamorcer les invasions qui persistent sur les gâchettes de certains bruits ou angles lumineux. Ce sont ces fameuses séquences enregistrées à 200 images/secondes avec un son et une acuité incroyable qui passe en boucle dans l’hippocampe. Le patient apprend à bien enfiler tranquillement sa combinaison de protection, il s’entraîne en consultation à différentes techniques de recouvrement à propos d’objets subconscients de très faible valeur négative. Il prolongera avec cette expertise les exercices chez lui et reviendra guéri en 1 mois capable de reprendre le volant sans trouble invasif. C’est un résumé d’un travail méthodique évoqué ci dessus et détaillé dans le document «protocole », mais au bout du compte le patient est autonome et capable de régler d’autres problèmes par lui même. Il est {{g|équipé}}. Cas 5 : Une femme de 47 ans est en deuil depuis 7 ans de sa fille de 19 ans décédée dans un accident. Sa vie n’est plus qu’une plaie. Elle a pourtant un entourage familial très affectueux, et des médecins et des psychologues dévoués. Rien n’y a fait, tout est gris, sans avenir, morne. Ici c’est une souffrance sans réelle solution qu’il faut soulager, c’est la vie qui continue qu’il faut libérer de l’entrave de la tristesse. La première consultation est consacré à la «leçon de chose» adaptée. Elle repart de la première consultation avec «devoir maison» pour la semaine suivante: faire une liste de 2 ou 3 situations banales mais paisibles pour elle. Je lui propose de travailler sur l’évocation en mode associatif d’une visite dans la grande librairie du centre ville qui se trouve dans sa liste. Tous les canaux sensoriels sont sollicités méthodiquement, en suivant la méthode presque scolaire, en respectant les silences (20 secondes minimum) si essentiels à l’invasion du préconscient par le subconscient. Plusieurs éléments dominent l’évocation: le contact avec l’épaisse moquette, l’image des livres en rayon et brutalement un long silence puis {{g|j’ai l’odeur du livre, de l’encre}}. Elle ressort dans une sérénité qu’elle n’avait pas connu depuis 7 ans. Bien sûr quelques séances de plus pour qu’elle devienne experte en «invasion positive» et qu’elle complète le tableau …. d’ailleurs cette odeur d’encre est liée au premier prix de récitation qu’elle a reçu de sa maîtresse, après un succès applaudi par ses camarades, elle qui était si timide! En cherchant elle avait 8 ans sans doute …. d’ailleurs il lui semble entendre très distinctement la voix de cette maîtresse dont subitement elle se surprend à dire le nom. Impossible de tout détailler, mais il faut comprendre que cette personne était désormais capable en toute circonstance en disposant de, ou même en évoquant l’odeur de l’encre de déclencher une invasion plus puissante que la tension de son chagrin, et qui lui transfusait la sérénité, et la confiance. Sa famille l’a retrouvé {{g|comme avant}} et la vie continue. Cas 6 : Plus complexe un homme de 48 ans, consulte très excité, se plaint de sa femme. Au bout de quelques consultations aux motifs variés, d’une hypertension récente à quelques sinusites allergiques, il lâche qu’il a une «double vie», que sa femme l’a appris et que ça se passe mal. Son expression libre témoigne qu’il veut être libre, refaire sa vie, repartir. Alors je lui demande depuis quand il se trouve dans cette situation. En fait il a perdu un de ces collègues du même age il y 1 an. Par ailleurs il décrit son attachement à sa vie de famille, les fêtes de familles. Il se sent surtout mal, déchiré entre des objectifs contradictoires. Alors par systématisme je lui propose de remplacer le recours aux anxiolytiques par une thérapie dont il aurait lui même le contrôle. Ça tombe bien il constate que ses performances sexuelles «ne sont plus comme avant». En revenant de sa quête d’objets disons positifs, je trouve dans sa liste un évènement ancien et personnel. Une virée en mob avec un copain dans ses 16 ans? J’hésite à l’orienter vers cette exploration plutôt inhabituelle, mais finalement je considère cette évocation comme assez pertinente pour la circonstance. Commençons pas le canal tactile, les vibrations de l’engin, les trépidations des petites routes, jusque dans le guidon etc puis la pression du vent, le flottement de la chemise etc puis le canal auditif le bruit du &#x22;moulin&#x22; et «Victor attends moi à droite» .<br /> Voilà je suis rassuré, toujours après le silence sans préjugé du pêcheur à la ligne , il vient de s’entendre appeler son camarade perdu de vue et dont le prénom ne lui revenait pas. Et oui je suis content il a bien trouvé l’enregistrement multi-piste de son subconscient et tout y passe, les odeurs, les images , les couleurs, tout, tout et ce sentiment de liberté, d’émancipation obtenue à l’arrache auprès de parents plutôt réticents, sentiment de maîtrise de l’avenir, de facilité dans ce canal encore à peine évoqué du «monde intérieur» etc. En effet sur l’enregistrement multi-piste, il y a la piste du climat biochimique particulier, des hormones et des neuromédiateurs «qui font du bien». Mon protocole n’y échappe jamais. Voilà le patient habituellement plutôt convaincu de consumérisme, de réussite financière et sociale qui trouve sa sérénité dans l’évocation de l’avenir ressenti à 16 ans et fidèlement restitué par son subconscient. Les séances s’enchaînent renforçant son ressourcement, il se sent plus normal, ne fait plus de référence négative à sa femme. Je lui suggère qu’il n’a sans doute plus besoin de venir me voir pour ce motif. Pour ma part, j’ai fait une hypothèse sur ce cas que je lui ait soumise par les circonvolutions qui conviennent à sa personne particulière. Pour faire court, un tableau assez classique. Une personne qui à 50 ans rencontre l’évidence de sa finitude à l’occasion par exemple du décès d’un proche comparable, ici un collègue ami. Alors s’opère un lien symbolique entre deux objets subconscients. D’une part le JE établi pour juguler l’insupportable «angoisse primitive» et assurer la pérennité du sentiment d’exister, et d’autre part le lien empathique avec une personne qui par sa disparition fait surgir la faiblesse, passée sous silence, du JE, sa finitude. Face à ce profond conflit, non anticipé par une connaissance du subconscient, les velléités du JE pour se distancier de cette évidence de finitude se multiplient ……«Je veux changer de vie, la refaire, changer de maison, de voiture , de femme ». Cette crise est reprise en compte socialement, crise de la 40 aine ou de la 50 aine et son cortège de décisions radicales, irrépressibles au nom d’une définition de la liberté dont on perçoit mal les contours. La démarche entreprise a contribué dans un bon nombre de cas à désamorcer ce conflit en fait majeur dès lors qu’il implique les couches fondamentales du JE. Les motifs de chamboulement s’estompent, c’est l’occasion de reformuler le JE, d’y faire admettre l’objet finitude. Alors le SOI n’est plus miné, il pourra continuer ses fonctions intégratrices habituelles. Il n’était pas question dans cette histoire d’un désamour découlant de conflits larvés antérieurs plus ou moins conscients, mais d’un mécanisme subconscient, entre objets eux mêmes subconscients. Ce type de conflit a été estompé, mis à jour, et finalement résolu par une introspection dans la combinaison de protection de l’adolescent en mobylette. Pour faire court, la finitude de la petite vadrouille a intégré au JE la finitude de la vie et ainsi s’est éteinte la pulsion de vouloir passer outre, par l’illusion de la renaissance. Je parle ici d’un tableau courant que tous les praticiens reconnaîtront même si l’ignorance de son mécanisme l’a fait classer dans les accidents banals de la vie. Cas 7 : L’ amour maternel entravé. Comment pallier un hiatus ontogénique pour rétablir la voie de la régression - fusion? Une femme de 32 ans, d’une profession médicale dont je suis les enfants et qui me consulte pour elle même pour une banale allergie saisonnière, se présente un jour, plus réservée et surtout je lui trouve un air triste. Ainsi lors de la consultation, je l’interroge sur sa fatigue. Le dialogue s’installe et elle me confie sa déception à ne pas ressentir d’amour maternel comme elle l’envisageait. Cette souffrance dure donc depuis 6 ou 7 ans âge de son premier enfant. Elle en a 2 qui vont bien et sont bien sympathiques, son couple est heureux. Elle n’a parlé à personne de ce qui la tenaille douloureusement. J’entreprends alors un exposé assez rapide et adapté à sa formation avec schéma à l’appui pour lui faire entrevoir dans le modèle, comment l’amour maternel s’installe. La fusion avec l’enfant s’opère au niveau du JE et non pas seulement du SOI. Il s’en suit une forme de parcours dans le sens anti-temporel sur le plateau du SOI, puis sur la courbe en S du JE seul substrat sur lequel peut s’opérer la réelle fusion. Et la question vient naturellement, y a t’il eu un ou des évènements ayant produit un hiatus dans la construction du JE? Elle a connu une enfance sans maltraitance évidente mais le fait que ses parents se soient séparés de façon conflictuelle l’a confiée autour de sa 10ème année à sa grand-mère maternelle très aimante et protectrice. Elle s’étonne de la forme graphique que prend l’exposé, je la sens dubitative. Aussi je lui prescris la première étape du protocole: retrouver 2 ou 3 situations que lui font du bien. L’objectif? Toujours le même que le patient dispose assez vite d’un exercice favorable à la sérénité. Là dessus elle est d’accord pour essayer et lors de deux séances suivantes car elle a de vraies aptitudes à l’exercice elle se trouve confortée par l’évocation du tricot. Alors je reprends mes schémas et elle comprend ses sensations éprouvées, d’une angoisse terrible dans les jours qui ont suivi la naissance de son premier enfant. Elle décrit bien cette paralysie qui l’a saisie alors qu’elle se sent émue, transformée par la naissance et la proximité avec son bébé. Ce blocage très intériorisé est conçu comme un échec qu’elle n’a pas surmonté et elle a continué sa vie dans l’attention et l’affection sans failles à ses enfants mais toujours dans une frustration qu’elle ne s’explique pas. En ayant tracé sous ses yeux une courbe du JE avec la profonde encoche correspondant à son déracinement affectif, elle comprend que sa régression n’a pas pu se poursuivre car elle l’entraînait vers le hiatus mis à jour. Alors s’était un retour brutal à la confrontation avec l’angoisse primitive et l’insurrection de son JE qui lui interdisait d’aller plus loin pour établir la fusion avec l’enfant. Tout s’éclaire mais que faire ? page suivante, vous trouverez le graphique de la {{g|régression}} offrant la possibilité ou non d’une fusion dans le JE en fonction de la continuité du JE ontogénique ou de la «réparation» de cette continuité au dessus du hiatus grâce à la construction d’un «pont tibétain» Prenez le temps de le mémoriser dans le détail. C’est une tentative de modélisation psychologique qui vise d’une part à faire toucher du doigt une réalité complexe et bien sûr subconsciente, mais aussi à proposer une ouverture sur une réparation ontogénique. [[Fichier:Régression.jpg|vignette|voici le schéma qu'il faut mémoriser en détail ]] Donc plusieurs relectures sont indispensables à une bonne critique et une appropriation des concepts. Bien entendu si le modèle fonctionne, ce ne peut être au stade de mes connaissances, une preuve qu’il soit seul à pouvoir aider de tel patient. je n’expose ce que j’ai pratiqué avec la prudence systématique de mon modèle. Le pont tibétain. Rappelons nous, ce dont est capable notre subconscient. Il stocke des objets massifs en quantité de données et est capable de les agréger par de là leurs caractéristiques temporelles. Ainsi dans un autre cas je vous avais livré l’histoire de cette patiente surmontant le deuil de sa fille (de dimension fusionnelle avec son JE) par une invasion autour de l’odeur de l’encre de librairie qui reliait des évènements aussi distants que la remise de son prix de récitation dans son enfance et de ses visites régulières dans la grande librairie. <blockquote>LE PONT TIBÉTAIN ....... [[Essai pour un modèle de psychisme objectif/pont tibétain| la réparation du continuum ontogénique pour combler le hiatus ontogénique]]</blockquote> Cet exemple fait comprendre comment l’analogie avec le pont tibétain m’ait apparu. Au dessus du hiatus d’un JE accidenté, le patient peut construire un pont au mieux multifilaire pourvu qu’il trouve une agrégation d’objets subconscients enjambant temporellement ce hiatus. Finalement c’était simple, partant de son ''hobby'' pour les lainages tricotés, elle retrouve méthodiquement l’évocation des pompons qu’elle confectionnait elle même suivant les conseils affectueux de sa grand-mère et depuis le plus jeune age. Ces pompons à eux seuls formaient souvent des doudous. De plus ils étaient devenus sa madeleine de Proust incarnant l’amour paisible de sa grand-mère. Un peu de travail et la patiente disposait d’un pont tibétain envahissant et bienfaiteur au dessus du hiatus de son JE. Le parcours manquant dans son ontogénie où l’angoisse primitive restait non résolue, était maintenant confortablement franchi par le pont continu d’une guirlande de pompons à toute épreuve. Dès lors la régression pourra s’opérer sans blocage. La patiente m’a averti qu’elle était libérée de sa frustration et que sa relation avec son mari s’était aussi enrichie. Remarquons encore que nous n’avons pas fait d’analyse psychologique des souffrances, des disputes de ses parents, ni même de ces 7 dernières années de frustration. Au contraire nous avons enjambé au plus vite le hiatus du JE, succinctement défini, sans nous intéresser ni à sa profondeur, ni à sa largueur. Nous nous sommes concentrés sur les moyens de jeter par dessus, notre pont tibétain qui comme chacun sait, se moque de la profondeur du précipice enjambé. Encore une fois ce n’est pas la souffrance qu’il faut principalement évoquer en consultation, mais tout ce qui peut barrer la route à son invasion. Vous reconnaissez une fois encore l’attention portée à un protocole bien réglé. D’abord confectionner avec le patient sa combinaison de protection sur mesure. Lui apprendre comment l’enfiler en tout lieu et en un instant. L’aboutissement de cette démarche permet d’aller jusqu’à combler un hiatus ontogénique par une évocation répétée et consolidée d’un objet subconscient alimenté par des expériences survenues avant et se prolongeant après le traumatisme. Le patient prend conscience de cette réparation de ces objets crées consciemment, et par invasions répétées trouve leur réplique dans le subconscient. il en dispose en autonomie complète et étendra l’usage de ses nouvelles compétences comme il en décidera et selon ses besoins. La prudence s’impose puisque cette sorte de prothèse va trouver sa place dans le subconscient du patient. Il faudra qu'il en garde la mémoire dans son dossier. Cas 8 : agression sexuelle contre un enfant, traumatisme d’enfant souffrance d’adulte. Ces traumatismes cumulent dramatiquement à la fois un hiatus ontogénique touchant en particulier l'image de soi et l'altération des outils d'acquisition de l'ontogénie par un parasitage des circuits neuro-humoraux dit de la "récompense". De plus, c’est un fait régulier que l’enfant agressé est victime d’auto-culpabilisation de sa petite personne. Le délabrement fonctionnel se complique de conflit entre objet subconscient dans la phase de construction du premier monde construit. Il va s'établir une infirmité croissante. La libération de la parole de l’enfant est difficile et le silence couvre les années suivantes. Le parasitage du préconscient par l’invasion du sentiment de culpabilité conduit à la souffrance croissante avec ses conséquences fonctionnelles. Comment comprendre et faire reculer les conséquences des effets de plusieurs décennies d'invasions toxiques aboutissant à une ontogénie pathologique et un soi parasité ? Ici il s’agit d’une petite fille agressée sexuellement entre 7 et 11 ans lors de rituel survenant chaque été lors de promiscuité de deux semaines avec deux garçons plus âgés de 3 ans. C’est 25 ans plus tard qu’elle peut révéler ces traumatismes tenus sous silence. Elle qui était décrite si heureuse et rayonnante, décrite par ses enseignants comme à l’aise à tout propos, toujours entourée d’ami(e)s de copains et copines, d’activité associatives, et de succès scolaires etc. Depuis la fin de l'adolescence elle a connu des échecs sentimentaux et pris conscience de souffrances, perturbantes, avec symptomatiquement des troubles du sommeil majeur. Elle a tenté plusieurs prises en charge thérapeutique. Nous comprenons qu’elle est en souffrance depuis très longtemps. Nous comprenons que comme enfant, elle ne pouvait disposer d’aucun outil pour résorber un tel traumatisme. Nous comprenons que dans ce contexte l’énoncé des souffrances ne peut survenir spontanément. Elle est arrivée à bout de force dans son effort pour surmonter silencieusement les conflits développés dans son subconscient depuis le traumatisme de l’enfance. Les séquelles se sont profondément implantées depuis 25 ans . Sa vie est comme entravée. Il est urgent de mettre fin à l’extension du malheur. D’abord l’explication des mécaniques psychiques déclenchées par ces agressions, et du silence maintenu et de ses conséquences va amener à une forme de cicatrisation fonctionnelle de cette plaie ouverte. Pourvu que le silence et l’ombre cessent, la mécanique du malheur peut être stoppé, l'objet d'auto-culpabilisation est ici le moteur infernal qu'il faut disloquer d'urgence. L’{{g|explication}} pour la victime amène à exposer ce qui est connu des stimulations «vitales» (alimentation, sexe) et du circuit de la «récompense». Le mot « récompense » évoque bien que le système nerveux répond à certains évènements par une action biochimique visant à inscrire l’évènement comme bénéfique et donc en favoriser son renouvellement. Cette action est puissante car elle vise à perpétuer les fonctions vitales autant pour l’individu que pour l’espèce. C’est le cas en particulier pour l’alimentation et l’activité sexuelle. <blockquote>CONTESTATION DES MOTS ....... [[Essai pour un modèle de psychisme objectif/des mots à recadrer|retour sur l'usage des mots à propos des viols et des viols d'enfants ! quand il faut comprendre circuit de la soumission au lieu de circuit de la "récompense"]]</blockquote> Ce mot de {{g|récompense}} devient totalement incongru, face aux effets délétères sur l'ontogénie découlant de la perversion de ce système. Cette perversion est flagrante dans le cas des maltraitances sexuelles. L’explication de l’effet délabrant des agressions sexuelles sur enfant tient dans cette perversion «neurochimique». L’agression sexuelle, le viol, est un traumatisme catastrophique car elle détourne les outils neurophysiologique permettant la constitution ontogénique et va induire la production d'objets subconscients toxiques: image de soi, JE sexuel, auto-culpabilisation. Son mécanisme est particulièrement pervers, car il utilise le mécanisme neurochimique de «récompense» pour soumettre la victime à l’agresseur. Nous parlons ici d’un agresseur qui présente à sa victime une succession d’expériences qui va de la plus banale caresse au viol physique. Les premiers attouchements sont présentés sous le jour du jeu, de la découverte, voire de l’émancipation et conduisent à activer une excitation sexuelle graduelle qui enclenche physiologiquement le circuit de la «récompense». Ainsi se développe chez la victime de «l’initié» une tolérance et une attente neurochimique qui submerge sa vigilance armée par des avertissements et des interdits plus ou moins transmis par l’éducation. L’action progressive et maline de l'agresseur met en scène une forme de consentement de la victime. C’est cette «tolérance» qui est avancée par l’agresseur de l’enfant pour se disculper du résultat, en arguant du soit disant consentement de la victime. En effet l’ignorance de la victime sur les mécanismes mis en jeu pour la soumettre, l'expose d'autant à la puissance du mécanisme enclenché. Il est alors facile de comprendre combien l’agression sexuelle contre enfant est facilitée, d’autant qu’elle peut se développer dans un milieu considéré non dangereux comme le milieu familial, associatif, religieux où la première méfiance est levée et où l’enfant est «pris par surprise». Bien entendu l’enfant est ignorant de ce que son circuit dopaminergique permet d’inscrire dans sa mémoire subconsciente, mais il vivra dans un conflit impossible entre son circuit de la «récompense» et la construction de sa personne. Car bien sûr, cette sexualité non délibérée, pervertie, va entraver, perturber, celle qu’il voudra établir dans le reste de sa vie. C’est alors que la gravité de cette agression s’impose avec encore plus de conséquence qu’un viol contre une personne disposant, déjà dans ce domaine, d’un référentiel pour son système de récompense. C’est un cas manifeste de ce que j’appelle par ailleurs un hiatus ontogénique. Ce hiatus comporte une lacune de la construction du JE à propos de la réponse à l’angoisse primitive dans le champ sexuel. Ce hiatus est d’autant plus sévère qu’il touche non seulement à la construction des objets subconscients venants habituellement constituer la base de l’image du corps sexuel dès l’enfance mais aussi à la déformation du circuit de la «récompense» qui est impliquée tout au long de la vie dans le SOI. Dans le modèle plusieurs objets subconscients sont produits avec en premier lieu un «sentiment de culpabilité» très invasif sur le préconscient. Ces invasions parasiteront le vécu postérieur. <blockquote>digression ....... [[Essai pour un modèle de psychisme objectif/hasard et aléa|Hasard et Aléa, réflexion philosophie personnelle]]</blockquote> <blockquote>LE PREMIER REFLEXE !..... [[Essai pour un modèle de psychisme objectif/la combinaison de protection|LE SOUFFRANT ET SA COMBINAISON DE PROTECTION]]</blockquote> Et pourquoi le silence ? C’est un fait général, l’enfant maltraité en particulier sexuellement, garde le silence. Chercher les raisons de ce silence semble ardu. Encore une fois son explication doit prendre en compte la nature des objets subconscients créés lors de ces agressions et liés au circuit de la «récompense ». <blockquote>LE PARADOXE AFFECTIF..... [[Essai pour un modèle de psychisme objectif/paradoxe affectif|l'enfant maltraitant qui refuse l'affection]]</blockquote> Quatre facteurs se conjuguent pour permettre la compréhension : # La perception des agressions est rendue confuse dans le subconscient de l’enfant du fait du climat neurochimique. Leur résurgence renvoie vers le puissant système de {{g|récompense}}. Sous l'influence de ce système les faits perdront leur objectivité, la sidération complète l'incapacité mnésique objective et donc la dénonciation. # Les interdits transmis par l’éducation, et la société en général, où la personne est décrite comme responsable d’elle même, renvoient vers un sentiment de culpabilité, injustement endossé par la victime. C’est la honte de ne pas avoir la bonne image, la maîtrise de soi # La crainte d’être incompris, de la perte d’estime, du rejet et de perdre son SOI d'aillerus encore non atteint dans l'enfance où c'est le JE qui est construction.. #:<blockquote>CONTRIBUER A LA PÉDAGOGIE SEXUELLE ....... [[Essai pour un modèle de psychisme objectif/socio psychologie préventive| quelques éléments psychosociaux à prendre en compte]]</blockquote> # La pulsion sexuelle va s’exprimer à l’adolescence avec force et donner l’élan à une appropriation, individuelle qui peut en cas de fusion bénéfique combler le hiatus ontogénique. Mais ces circonstances palliatives seront entravées le plus souvent puisque la régression-fusion au dessus d’un hiatus ontogénique, comme nous l’avons vu, est empêchée sans réparation préalable, comme celle du {{g|pont tibétain}}. À défaut le silence va occulter les échecs dont la responsabilité est une nouvelle fois endossée par la victime. Voilà donc une explication des destructions et dissimulations cumulatives, consécutives à une maltraitance sexuelle sur l’enfant. La réparation s’opérera en pleine connaissance de ces mécanismes et de façon méthodique. J’insiste sur la faille constitutionnelle neurophysiologique du système de récompense. Elle explique la grande reproductibilité de ce type de maltraitance contre les enfants par des agresseurs dont l’histoire révèle qu’ils reproduisent un schéma acquis par eux lors des maltraitances qu’il ont eux mêmes subies ou dont ils ont été témoins. Cette contagion est d’autant plus forte qu’elle se produit en milieu fermé dont le cercle familial est l’archétype comme les sectes, les groupes et associations etc . Que l’agresseur soit lui même enfant ne change pas le mécanisme morbide. La «tolérance» a conduit à l’aggravation de l’agression d’année en année sur 4 ans de 7 à 11 ans. Toujours dans le silence, elle a su seule dire «NON» à l’agresseur alors que le mal extrême s’accomplissait. Ce long rappel des mécanismes impliqués chez la victime, démontre bien combien le sentiment de culpabilité qui en découle est injuste. Hélas ils annoncent la double peine d’être victime puis de s’en martyriser, comme chez tous les enfants maltraités. En effet après le traumatisme de l’agression, le silence perdure. Alors aucun secours n’est entrepris, aucun soutien salutaire, ni suivi compétent n’est organisé. Le silence s’explique par le conflit entre les invasions subconscientes et les préventions éducatives à propos de la propriété exclusive de son sexe et par conséquent à mesure que cette éducation se complète l’auto-culpabilisation se renforce. Au fil du temps une aggravation du sentiment de culpabilité s’opère face à des parents aimés et aimants, ignorant les souffrances de la victime. Le sentiment de culpabilité pour cause de silence s’accentue donc, et un objet subconscient va lier le regard aimant par exemple des parents, à ce sentiment de culpabilité. Le lien symbolique entre affection et invasion du sentiment de culpabilité s'enracine. L’affection déclenche paradoxalement une invasion toxique. Cet objet subconscient d’auto-culpabilisation, par nature invasive, étend son territoire, et sa présence dans le préconscient devient récurrent et perenne. Dès lors les processus de communication et de fusion seront {{g|parasités}} : Les manifestations d’affections sont ressenties gênantes, évitées, voire repoussées, car elles galvanisent la dissimulation et donc l’auto-culpabilisation, comme un cercle vicieux. L’Incommunicabilité s’établit comme une défense subconsciente dès lors que l’objectif est le silence. La personne s’approchant involontairement de cette défense est vécue comme un agresseur contre l’effort de dissimulation devenu constitutif du préconscient. Alors que le malaise de l’adolescent et du jeune adulte s’aggrave, la distanciation vis à vis en particulier des aimants est une barrière qu’il est conduit à consolider. Ce phénomène parasitera pré-consciemment le ressenti des rapprochements affectifs. Voilà décrit le mécanisme subconscient qui impose la distanciation de l’aimant pour éviter l’invasion culpabilisante. Il découle de cette souffrance chronique une censure affective croissante. L’affection d’autrui devient comme un miroir renvoyant l’image de l’enfant culpabilisé, cette image parasitée devient intolérable pour la victime elle même qui se résignera au renoncement affectif pour y échapper. La rupture des liens affectifs revient à briser ce miroir pour mettre fin à son reflet. Les explications qui précèdent, permettent de comprendre par quel mécanisme s’établit la souffrance. Comme nous savons, cette analyse, cette explication, de type conceptuelle est incapable de dissoudre la souffrance, elle même constituée d’un amoncellement subconscient par 25 ans d’invasion et de parasitage du préconscient. L’organisation de la souffrance. I) Mécanisme de la mise sous silence. Il s’agit d’un enfant ayant subi une agression sexuelle. Dans le texte précédent «l‘explication» nous avons mis au jour: a) que l’agression est souvent «tolérée» sur une longue période par le fait qu’elle utilise une activation pervertie du système neurochimique dit de «récompense» b) qu’elle génère en même temps un sentiment de culpabilité, lié au conflit entre les objets subconscient des agressions subies sous influence du système neurochimique de récompense et les objets subconscients constituants du Je sexuel et finalement du Soi sexuel, influencé par l’éducation et plus généralement la socialisation. (L’implication de l’éducation sera abordée plus loin) c) que dans un tel contexte, le silence est maintenu par un enfant (et même souvent un adulte) qui ne dispose d’aucun outil, d’aucune distance introspective pour échapper à cette mécanique morbide. II) Conséquences du silence Rappelons nous que dans le modèle, les objets subconscients sont dotés de caractéristiques agrégatives, et d’une capacité d’invasion du préconscient. Les invasions sont déclenchées par des situations «gâchette». Certaines vont toucher toutes les victimes et en l’occurrence toute situation mobilisant le Je et le Soi sexuel meurtris, portant des cicatrices invalidantes. D’autres «gâchettes» sont liées aux modalités spécifiques de l’agression, ce sont les «flash» liés aux lieux, aux bruits, aux odeurs, aux contacts etc et au «monde intérieur» comme l’estime de soi, et le contexte biographique. Donc la souffrance ne s’arrête pas avec l’agression, elle se prolonge et même s’accentue au fil des invasions récurrentes qui sont inévitables en l’absence de soins compétents. Le silence induit donc la «double peine» pour la victime car il entraîne l’absence de soin et en conséquence l’extension du traumatisme initial. Le silence va alors compliquer les objets subconscients:A Parasitage du Je et du SoiComme dit plus haut, la période sans soin produira des invasions récurrentes qui parasiteront l’agrégation des nouveaux évènements relatifs au Je et au Soi sexuel de l’adolescent. Ainsi le préconscient, parasité par l’invasion toxique de culpabilisation, avec une force croissante, empêchera la constitution normale de tout objet subconscient de cette sphère. Nous pouvons prendre l’image d'un bruit parasite qui nous empêche de profiter d’une musique pourtant à notre goût et en définitive ne nous apporte pas de bien être. L’image du Soi sera donc altérée. Le vécu sexuel est «automatiquement «parasité» par l’invasion du le sentiment de culpabilité et le circuit de récompense entravé. Dans le cas d’une agression contre un enfant, selon le modèle c’est le JE qui sera marqué d’un hiatus, ce qui empêchera les régressions-fusions et donc entraînera la frustration affective. A Perturbation secondaires, indirectes: 1 D’ordre temporelle a) dans le futur, la suite, de l’évènement traumatique Le modèle montre comment un objet subconscient donc de type agrégatif va grossir au fil du temps. C’est aussi le cas du sentiment de culpabilité, installé par l’agression, et qui va s’agréger à d’autres situations où le Je et le Soi se trouveront en échec ou meurtris. L’enfant puis l’adulte connaîtra une invasion du préconscient par l’objet subconscient de culpabilité dans chacune de ses situations sexuelles et affectives en particulier. La victime endosse une culpabilité suite à toute difficulté, échec, frustration dans lesquels elle n’a même pas de responsabilité. La plaie va donc aussi s’élargir, avec des liens symboliques de culpabilité entre objets subconscients. Les invasions de culpabilité vont donc devenir pérennes. C’est la «double peine» pour l’innocente victime. b) dans le passé de l’évènement traumatique La caractéristique de non-temporalité dans la mémorisation des objets subconscients (cf essai psychisme) conduit à un nouveau risque. Ce flou temporel explique la puissance des invasions. Nous nous rappelons que l’odeur de l’encre si bénéfique dans le cas présenté dans « l’essai psychisme objectif» est un cumul d’expériences vécues tout au long de sa vie mais qui ne révèle sa stratification temporelle que lors d’un exercice mental précis. Le grand risque est que l’ évocation d’un moment T-x survenant en présence du préconscient envahi par le sentiment de culpabilité constitué au temps T, soit à son tour parasité par la dimension culpabilité_frustration. Cette explication schématique explique comment le parasitage dû à l’évènement T peut parasiter des objets antérieurs à l’agression. La plaie peut donc s’étendre dans les deux sens de l’axe du temps. L’agression altère donc non seulement l’avenir de la victime, mais aussi son histoire psychique antérieure à l’agression. 2 D’ordre spatial Par la caractéristique agrégative des objets subconscients, le sentiment de culpabilité si injustement subconsciemment inscrit chez la victime va sortir de la sphère sexuelle et s’étendre à d’autres sphères. En effet le silence lui même va devenir objet de culpabilité en particulier vis à vis des intimes, des aimants d’une manière général. C’est un fait connu que le silence consiste pour la victime à tenter de mettre une barrière en elle-même, à ne pouvoir exprimer sa souffrance pour elle-même. C’est aussi un fait général que le silence maintenu en face d’un intime ou d’un aimant est source d’un nouveau sentiment de culpabilité. Les situations affectives, sollicitant les régressions-fusions à l’instar l’exemple à propos de l’amour maternel, vont déclencher une invasion du préconscient par l’objet subconscient «culpabilité de dissimuler, de tenir le silence etc». Ainsi va s’établir une «gâchette» , ici la relation affective, où l’invasion négative du préconscient par le sentiment de culpabilité va devenir de plus en plus puissant et récurrent. Le parasitage de la vie affective va donc se généraliser et rendre cette sphère comme un objet de souffrance en lui même. Le conduite d’évitement vis à vis de la souffrance conduit à l’évitement affectif, voire la distanciation affective. Nous pouvons parler d’enkystement de la victime dans sa souffrance. En conclusion nous voyons que le traumatisme initial, directement responsable d’une meurtrissure dramatique va se compliquer faute de soins d’une invalidité fonctionnelle beaucoup plus étendue. Ainsi après deux décennie d’ignorance, jusqu’à la révélation faite par l’adulte issu de l’enfant meurtri, tout explique la distanciation affective ressentie par les aimants. L’enfant n’a pas pu se libérer de l’objet «sentiment de culpabilité» et donc l’adulte de l’objet subconscient «perte d’estime de soi» ce qui impose une «conviction préconsciente» d’être «non-aimable». Les aimants voulant s’inscrire en faut en face de cette état subconscient rencontrent les barrières de défense, l’incompréhension et la souffrance s’étend. La souffrance s’aggrave. La vraie cicatrisation vient par la neutralisation et la dissolution des agrégats parasités et accumulés durant ce long silence et més-jugement de soi même. III Soin après rupture du silence. <br />Nous voyons que même une fois le silence rompu, les soins doivent prendre en compte ce qui s’est construit dans le subconscient au fil des années. Les parasitages peuvent se retrouver dans des sphères variées mais la sphère affective est impactée dans tous les cas. La priorité exposée c’est d’abord de faire obstacle aux invasions du sentiment de culpabilité en y opposant à force égale une invasion d’estime de soi, de mérite d’être aimé. Ici le protocole proposé sera sollicité à son maximum. En effet l’objectif est d’abord de maîtriser toute invasion par le sentiment de culpabilité , puis par les techniques de recouvrement de «déparasiter» les objets subconscients. Comme tout au long du modèle, on observe que dès que le patient s’approprie le modèle et le schéma du protocole, il trouve un soulagement. Je souligne qu’une vertu recherchée par ce modèle, est de démontrer au patient qu’il sera acteur de ses soins. Cette prise de conscience est essentielle. En effet à la la suite de l’entraînement pédagogique pendant les consultations, pour apprendre les techniques de recouvrement, les nombreux objets parasités pour la plupart intimes seront manipulés par le patient lui même. Le pédagogue thérapeute ne sera impliqué que si le patient souhaite un soutien en cas de difficulté. Ainsi les anciens enfants maltraités éprouvent une difficulté particulière à retrouver les évènements heureux de leur existence. Voilà pourquoi la protection du préconscient est inaugurale dans la démarche de soin. J’ai tenté une mise en perspective du cheminement psychique. Les explications sont là pour éclairer le conscient et aider à faire entrevoir pourquoi le seul discours ne peut dissoudre la souffrance. Une conclusion essentielle est que la résolution des souffrances psychiques ne peut découler de l’activité du seul conscient. Une démarche éprouvée s’exprime dans le « protocole» mais d’autres voies sont connues et pertinentes à la condition préalable qu’elles commencent par une étape de protection contre les invasions pathogènes. Cette condition est incontournable, l’ignorer est délétère, je pense l’avoir démontré. IV la prévention: C’est sur cette influence que l’éducation doit progresser. Dans le texte «explication» à propos de maltraitance et viol d’enfant la conclusion engage à ne pas se satisfaire du message que le sexe est une affaire strictement personnel y compris relativement au parent. La conduite éducative résumée par «seul(e) toi peut toucher ton sexe, c’est toi seul(e) qui en fait la toilette» ne suffit pas à prémunir l’enfant des manipulations perverses et agressives. Cette conduite participe à la constitution du conflit entre tolérance induite par perversion du «système de récompense et référence éducative. C’est ce conflit psychique insoluble dans le silence qui l’impose pourtant à l’enfant envahi par l’objet «sentiment de culpabilité». Cette conduite éducative est donc une barrière factice, et elle contribue au &#x22;sentiment de culpabilité&#x22; lorsqu'elle est détournée. Ce message très partiel entoure cette zone du corps d’un voile énigmatique sans identifier clairement aux yeux de l’enfant innocent les dangers contre lesquels on tente de le mettre en garde. S’il fait fasse à une intrusion, il comprendra l’aspect transgressif de la situation mais il n’aura pas appris à désobéir aux dominants. Il faut insister auprès des enfants sur les mots de l’indignation et de la dénonciation comme sur ceux des consignes préventives. Conclusion Voici donc décrits quelques cas cliniques qui veulent mettre à l'épreuve et en même illustrer le modèle de psychisme objectif. J'ai choisi un progression dans la complexité des cas afin de laisser au modèle plusieurs occasions de se défendre. Je reste naturellement conscient qu'il faudra que je l'abandonne un jour pour un autre sans hâte quand il aura montré précisément ses limites face des acquis de la neuroscience encore inconnus pour moi. Ce modèle sert aussi de référence pour établir une action thérapeutique dont le trait essentiel est qu'il doit absolument respecter la dignité, l'autonomie et l'intimité du patient. Et pour conclusion je veux insister sur un acquis essentiel de cette modélisation du conscient et du subconscient pour un abord thérapeutique dont le véritable acteur est le patient lui même. L’introspection du subconscient est une activité salutaire, pourvu qu’elle s’appuie sur une connaissance pratique de sa structure et de ses attributs et pourvu qu’elle suive toujours une stratégie de protection en amont, contre les invasions toxiques. Aussi une psychothérapie, centrée sur la souffrance elle même, est de mon point de vue, formellement contre-indiquée. Réclamer au fil des consultations une répétition et un approfondissement des souffrances sans avoir fait enfiler au patient «sa combinaison de protection» est assimilable à l’exploration d’une cicatrice d’ampleur inconnue, à l’aveuglette, sans planche anatomique, ni anesthésie ou asepsie. Se placer d’emblée dans le domaine intime de la personne entraîne le patient vers une nudité qui contrevient à sa dignité, et va entraîner le praticien vers la «posture de gourou». D’abord ne pas nuire dit la déontologie du soignant. D’abord s’équiper d’une bonne anatomie, d’une physiologie démontrée, d’une bonne hémostase, d’une bonne anesthésie, de bons outils et d’une préparation aseptique du patient. L’éthique médicale et sa jurisprudence condamne désormais tout acte médical qui ne serait pas discuté avec un patient dûment informé des causes, des conséquences, des thérapies envisageables et de leur suite. Cette norme fait partie de l'obligation de moyen du au patient. Cette évolution est fondamentale, salutaire, elle conduit à reconnaître la personne du patient comme acteur de lui même jusqu’aux circonstances de son décès. Cette contrainte contribue à guider le soignant vers une posture autocritique qui lui donne la rampe du savoir authentique,celui qui se discute. J'espère que cet essai contribue à une prise en charge du psychisme respectueuse de ces principes. Le protocole en addendum expose des techniques générales largement abordées dans ce qui précède. En tout cas j'espère que les pages de gauche de cet essai et du protocole sont marquée par la libre expression critique et complémentaire, des lecteurs et lectrices, gage d'un véritable acquis, prouvant par là, que ce qui est n'est qu'un cas particulier de ce qui peut être, et qu’un miroir brisé reste un miroir utile. == Protocole de soin découlant du modèle de psychisme objectif == ===Ici commence la leçon de chose...=== -  Le conscient est représenté par une part franchement minoritaire de l'activité neuronale. Il contient des objets nettement figurés, les concepts. Cette représentation veut introduire le fait qu'un recours exclusif au conscient pour la pas compréhension envisageable. [[Fichier:PNL1 8.jpg|vignette]] -  Le subconscient est figuré comme disposant de la plus grande part de la masse et de l'activité neuronale. Il contient des objets mal circonscrits, "poreux" à des degrés divers. Ce schéma n'a pas de démonstration neurophysiologique. Il tente de schématiser les définitions plus complètes données dans l'essai du "miroir brisé". Ce schéma introduit une nouvelle notion. Il s'agit des objets subconscients en particulier dont la propension à l'invasion est marquée par une limite poreuse, pointillée. Il faudra identifier ceux qui sont marqués par "-" comme responsable d'invasion "toxique". Ceci pour rappeler que, comme nous le verrons dans ce protocole, de tels objets peuvent se retrouver circonscrits de façon hermétique par une succession de recouvrements bien conduits, ce qui leur fait perdre leur pouvoir toxique. Ici se retrouve figurée la position fonctionnelle du préconscient, propre au modèle présenté. Le préconscient n'est pas un stade flou du conscient mais une unité fonctionnelle, un filtre actif, paramétré par le contexte neurophysiologique d'une part, par une réjection physiologique d'autre part, et par une réjection psychique de bas niveau comme dans le cas de la sidération traumatique. C'est donc dans ce préconscient que se joue le destin des objets, qu'ils viennent de l'environnement actuel ou qu'ils viennent de processus d'invasion d'objets déjà en mémoire. [[Fichier:PNL1 7.jpg|vignette]] Ces deux derniers alinéas sont cruciaux pour la compréhension du modèle. Il convient de bien comprendre ce que l'on y admet comme postulat. La démonstration dépendra de la confirmation par les neurosciences qu'il existe une ou des aires associatives impliquées dans la création des objets psychiques. Ce postulat n'est donc déjà pas une fantaisie exotique, mais colle avec l'image que l'on nous propose actuellement du fonctionnement sensoriel par exemple.   La notion d'invasion du préconscient est donc une façon simple d'expliquer les perceptions différentes d'un individu à l'autre en fonction des contextes et antécédents. Ces invasions expliquent également très bien comment une évocation se produisant dans un préconscient déjà occupé par une autre, par exemple toxique, va remanier l'objet avant qu'il ne retourne en mémoire. Ce rôle dévolu au préconscient explique simplement le constat clinique de fluctuation mémorielle, d'occultation secondaire, ou d’exacerbation morbide. Comme expliqué dans l'essai, les réarrangements des objets ne sont pas généralisables. Nous en venons à entrevoir la probable extrême personnalisation des objets en particulier subconscients. C'est l'occasion de répéter pourquoi les apprentissages qui suivent s'attacheront à ne proposer que des travaux pratiques avec les objets les plus banals et "universels" possibles. Vouloir dérouler l’écheveau intime est un geste interdit par ce modèle, seul le patient lui-même pourra en être initiateur dès lors qu'il se sera approprié les étapes qui suivent. <blockquote>précision ....... [[Essai pour un modèle de psychisme objectif/invasion involontaire ou organisée|Remarque à propos d'invasion]]</blockquote> Voilà bien le premier objectif du protocole. La réalisation de cet objectif résout la plupart des plaintes exposées par les patients, en terme de troubles adaptatifs, bien entendu dès lors que la cause iatrogène a été écartée. Ainsi les conséquences d'un surmenage ne peuvent être sérieusement résolues sans recours à l'arrêt de travail, la redéfinition de la fiche de poste, et une reconsidération ergonomique, transport, alimentation, éclairage, condition du sommeil et autres charges mentales. Il est médicalement hors de question de se servir des techniques du protocole comme d'un cache-misère pour tenter de repousser la symptomatologie de l'épuisement. L'objectif de la prise en charge doit donc être bien élucidé avec le patient, dans une prise de conscience globale socio-physiologique. [[Fichier:PNL1x6.jpg|vignette]] L'image du cauter sur la jambe de bois est bien utile à garder dans la mémoire du soignant comme une bêtise sans excuse pour un professionnel. -  Le pédagogue qui initie le protocole est idéalement médecin puisque, comme nous l'avons vu, ce qui semble de nature psychique peut parfaitement découler directement d'un dysfonctionnement organique, et donc l'art du diagnostic médical est inaugural de toute prise en charge. Une fois les causes médicales écartées, le pédagogue pourra être un soignant pédagogue entraîné, initié par exemple par cette lecture. Nous sommes donc dans la deuxième consultation, après la leçon de chose et le devoir maison consistant à identifier les objets psychiques pré-sentis par le patient comme bienfaisants et, nous insistons, banals. [[Fichier:PNL1 5.jpg|vignette]] C'est le soignant qui travaille devant le patient en pratiquant l'exercice pour de bon, puisqu'il s'agit d'une situation banale que lui-même connaît. Par exemple le petit-déjeuner et sa tartine grillée. Il démontre la méthode rigoureuse: - Avec le lever de rideau: J'ai la chaleur du lit sur mon corps...... 20 secondes de silence au moins en expliquant qu'un débutant devra laisser encore plus de temps pour que "l' invasion sensorielle tactile" se produise. j'ai le contact du carrelage sous mes pieds .......... silence, et ainsi de suite pour tous les canaux. - Y succède la situation bienfaisante identifiée par le souffrant comme ici le banal petit-déjeuner.   j'ai le bruit de la bouilloire ....... j'ai l'odeur du café ......   j'ai le reflet du café ....... j'ai le contact de la cuillère....... j'ai la résistance du miel dans le pot ....... avec toujours ce long silence indispensable pour "laisser le subconscient s'exprimer". [[Fichier:PNL1 6.jpg|vignette]]   Il faut bien considérer que cet énoncé semblera à tout lecteur comme à l'attente d'une découverte extraordinaire comme d'une rusticité décevante. Et pourtant cette rusticité, faite de phrases "anti-littéraires" est la condition de cette découverte. En effet si la connexion entre objets conscients et langage est consubstantielle, elle est la découverte étonnante de la PNL pour ce qui concerne les objets subconscients. Deux choses sont donc essentielles à enseigner et s'approprier. Passez à côté et vous n'atteindrez jamais l'objectif. La première est que la sollicitation d'un objet subconscient par un des canaux sensoriels ou du "climat neurophysiologique" ne doit rien comporter qui puisse motiver l'activation de l'intelligence conceptuelle. Voilà l'explication de la forme parfaitement élémentaire des phrases. "j'ai l'odeur du café" serait volontiers rectifié par "je sent le café". Eh bien c'est ce qu'il ne faut pas faire, car la moindre référence à un verbe spécifique activera probablement la machine de décryptage linguistique, propre de l'intellect humain et de son activité consciente. Il faudra donc respecter scrupuleusement le dépouillement linguistique prescrit. La deuxième chose essentielle, c'est la pause, le blanc, le vide qui doit suivre chaque invitation à un canal quelconque à renvoyer ce qu'il a enregistré. Au moins 20 secondes peut paraître long, mais c'est un minimum surtout pour un apprenti qui doit penser plutôt à une minute. D'ailleurs lors des premiers exercices, beaucoup d'ouvertures de canal resteront muettes, plus pour certains patients que d'autres. C'est pourquoi j'ai choisi que la première séance soit une démonstration commentée mais effective du soignant, du pédagogue devant le patient. Vous comprendrez pourquoi il est essentiel que la situation bienfaisante choisie soit d'un ordre des plus banals. Il s'agit de travaux pratiques d'acquisition d'une technique. L'objectif est de démontrer et d’entraîner le patient à la découverte du phénomène invasif, puisque au bout de 2 ou 3 séances il se sentira effectivement envahi par la "vraie" odeur du café et de la tartine grillée par exemple. L'acuité ressentie est la confirmation qu'il s'agit bien d'une invasion par un objet subconsient. Bien-sûr les situations banales choisies peuvent être très variées, dans une palette banale déjà large: marcher en forêt ou ailleurs, se coucher sur une serviette de plage dans le sable, une promenade à vélo, caresser un chien etc....Le choix de ce matériel de travaux pratiques sera bien-sûr fait dans la liste que le patient présente après son premier travail maison. La situation exploitée tiendra compte peut-être du flaire du soignant. Par exemple s'il s'agit d'aider un étudiant en difficulté pour une prise de parole à l'oral, une situation de sérénité où le canal auditif est prégnant sera tout indiqué et donc l'évocation de l'écoute d'une musique pourra être d'emblée pertinente. En tout cas c'est l'apprentissage de la technique qui a la priorité. Moi-même qui faisais partie des sceptiques, bien campé dans la rationalité, j'ai dû me plier à cette quasi-discipline sportive, comme de respecter les consignes du prof d'éducation physique qui impose un placement strict des appuis pour faire une simple roulade. Bien-sûr ma devise,"ce qui est n'est qu'un cas particulier des possibles", m'a poussé à cette exploration. Chacun va trouver,  dans la décontraction de cette lecture, l'occasion d'un lâcher prise indispensable. <blockquote>précision ....... [[Essai pour un modèle de psychisme objectif/il faut commencer en amont|Remarque à propos d'invasion]]</blockquote> La démonstration par le soignant pédagogue inaugurera la suite des exercices à domicile par le patient comme devoir maison. Il faut insister sur l'absence de préjugés quand aux premiers résultats, c'est le processus habituel de tout apprentissage. Lors de la séance suivante le pédagogue observera l'exercice réalisé par le patient devant lui. Bien évidemment de nombreuses rectifications s'imposeront. les encouragements présideront - ne dîtes pas "je sens le poids de mon dos dans le sable" mais "j'ai le contact de mon dos sur le sable" puisqu'il faut faire la chasse à tout ce qui motiverait l'activité de l'intellect. - laissez la pause s'écouler, s'écouler  ......... et ainsi de suite, pour voir consolidée la technique de base, encouragée par la découverte de la réponse du subconscient. Si par exemple le canal "j'ai le bruit du café versé (dans le bol)" a été ouvert, vous pourrez encourager le patient à essayer de décrire le "peuplement" du canal auditif lors de cet évocation en mode associatif. Le patient, après avoir surmonté en quelque sorte sa surprise, pourra exprimer que ce "bruit" est en fait comme une musique d'un raffinement que la vie quotidienne gomme par l'urgence. Oui l'analyse quasi spectrale d'un son est possible lors de l'évocation car le subconscient enregistre bien plus de données que le cerveau conscient (sauf à considérer l'expertise d'un ingénieur du son ou d'un musicien concentré à priori sur les harmonies) Au fil des exercices et de leur contrôle en séance, le patient, spontanément ou avec l'aide des calibrations rapportées par le soignant, découvre le caractère particulièrement invasif de tel objet ou tel canal. Cet élément "gâchette" évoqué dans l'essai fonde par la répétition ce qu'on nomme un ancrage. Le rôle de l'ancrage bien rôdé est de mettre à la disposition du patient qui l'a mis à jour un raccourci vers une invasion bienfaitrice, protectrice. La combinaison de ces invasions parfois initiées par un rappel d'ancrage constitue la combinaison de protection qui est mise en avant dans le modèle pour un psychisme objectif. L'exemple le plus universel de l'ancrage est celui que l'enfant et son entourage construit autour du doudou. Il est flagrant de constater l'effet immédiat de réassurance, voir d'invulnérabilité que l'enfant puise dans le contact avec son doudou qui d'ailleurs est largement exploité en urgence par les parents emphatiquement entraînés dans une angoisse alors vite résolue. Bien-sûr, les combinaisons de protection dont nous avons l'ambition ici seront beaucoup plus spécifiques, personnalisées, et adaptées aux souffrances du patient. Il sera fondamentalement acteur de cette combinaison, en étant propriétaire exclusif de cette combinaison dont finalement le soignant sera simple témoin, même s'il a pu suggérer ouvertement telle ou telle opportunité signalée par la calibration. Alors disposant de cette combinaison de protection, le souffrant aura souvent résolu le processus d'épuisement psychique qui l'a fait consulter. En effet dans de nombreux cas de la "vie de fou" qui caractérise l'époque moderne, où le cerveau est sursollicité par 3 téléphones, une radio, une télévision, la conduite d'engin stressant, les nuits sans repos, les vacances suractives, les conflits de toutes sortes, le seul fait de comprendre notre fonctionnement et les moyens de le modérer est la solution attendue. Heureusement les causes de souffrances psychiques tiennent souvent du dépassement du domaine de fonctionnement pour lequel notre cerveau est construit depuis quelques dizaines de milliers d'années. Parfois encore le seul fait d'avoir acquis cette protection permet au patient d'alléger sa charge morale et ainsi de prendre la maîtrise sans aide spécifique. Dans d'autres cas, ce sont des phénomènes invasifs toxiques qu'il faudra apprendre à circonscrire, à refroidir comme l'image d'un cœur nucléaire, puis à reclasser sur l'étagère des mauvais souvenirs dûment étiquetés et ayant perdu leurs capacités incontrôlables d'invasion toxique. Dans cet objectif toujours dans la conduite de travaux pratiques, un nouvel apprentissage débute avec à chaque séance une séquence rigoureuse. Avant tout, enfiler la combinaison de protection. Puis seulement et à propos toujours de situations invasives dont le caractère mineur et banal aura été établi, commencera l' évocation en mode dissociatif. Cette fois les phrases rudimentaires ouvrant les canaux de l'objet désagréable banal comme le bruit du camion poubelle à 5 heures du matin seront introduites cette fois par "c'est moi qui ai le corps tendu....." suivi de ce fameux silence laissant la parole au subconscient, "c'est moi qui ai le bruit du choc des poubelles", "c'est moi qui ne retrouve plus le sommeil" et ainsi de suite pour chaque canal. À l'issue de ces exercices, le patient va expérimenter une mise à distance, un filtrage de l'objet agressif par le préconscient ancré dans la protection. Il va prendre de l'assurance vis à vis de cet effet protecteur. Puis qu’ici c'est le bruit des poubelles qui est la cause du réveil brutal, l'ancrage protecteur, la combinaison de protection devra comporter une sensation sonore dont l'évocation en mode canal sonore est particulièrement apaisante. Ainsi l' évocation en mode dissociatif du bruit des poubelles sera amorti, absorbé par le canal de la combinaison puissamment envahi par le bruit blanc d'un champ de blé mûr sous la brise thermique par exemple. Voilà ce qu'est le recouvrement d'un objet agressif par la combinaison de protection et son ancrage sonore. Dans l'essai pour un psychisme objectif, nous reconnaissons le rôle dévolu au préconscient. L'invasion protectrice qui inaugure toute autre évocation en mode dissociatif va protéger les canaux sensoriels mais aussi imposer son climat neurochimique. L'évocation en mode dissociatif est donc soumise à cette couverture de protection. Comme nous le savons, tout rappel mémoriel va donner lieu, surtout dans le domaine des objets issus du subconscient, à une nouvelle mémorisation, mais cette fois influencée par les canaux et le climat neurochimique de la combinaison de protection. Ce remaniement mémoriel circonstancié va conduire à circonscrire l'objet toxique et lui faire perdre ses liaisons gâchettes, au point que le bruit des poubelles sera d'emblée mixé en quelque sorte, filtré, amorti par celui de la brise sur le champ de blé. Cette fois c'est bien d'une thérapie mémorielle dont il s'agit, et une fois cet exercice maîtrisé sur la situation banale, il pourra être entrepris pour d'autres objets spécifiques aux souffrances du patient. Bien entendu, dès lors qu'il s'agit de choses plus personnelles, le pédagogue ne pourra pas jouer la démo devant le patient. Voilà pourquoi le souffrant doit s'être approprié parfaitement les techniques sur les objets de travaux pratiques, pour se retrouver en autonomie dans la maîtrise dissociative des invasions toxiques qu'il voudra circonscrire dans son intimité. Remarquons que le soignant pourra au mieux anticiper les besoins du patient, en l'aidant à lister les caractéristiques pertinentes de sa combinaison de protection et de ses ancrages protecteurs en fonction des invasions toxiques que le patient pressent. L'exemple du bruit de poubelles conduira le soignant à guider le patient vers une protection particulièrement puissante pour le canal auditif. Donc la composition de la combinaison de protection, dès lors que l'on engage une thérapie aussi complexe que dans les cas 7 et 8 de cet 'essai pour un psychisme objectif, va nécessiter une concertation fine avec un soignant expérimenté et restant imprégné par la prudence de ses propositions relativement à un patient qui par définition ne peut disposer à ce stade d'une clarification complète de ses souffrances. L'expérience apporte un constat trivial. Il faut que le patient dispose d'une combinaison très solide et pluri-compétente, ainsi que d'une procédure d'interruption de toute évocation qui serait responsable de mal-être. Comme abordé dans l'essai, les objets ne sont pas strictement isolés les uns des autres, les liens symboliques établis sans doute physiologiquement pendant le sommeil mêlent les climats neurochimiques d'objets dont l'association n'est pas reproductible entre individu. La encore l'expérience ne dispense pas de la circonspection et du respect du dernier mot laissé à la réflexion et l'intuition du patient. Dans l'exemple 7, nous avons vu comment une évocation d'objets distants sur l'axe temporel permet d'établir au sein du préconscient envahi bénéfique-ment par le climat neurochimique de l'affection de la grand-mère un objet symbolique très puissant agrégeant la manipulation des lainages avec le comblement d'un hiatus ontogénique. Le retentissement bénéfique de ce comblement ontogénique permet d'ouvrir la voie au processus complexe de la régression-fusion entravé depuis plusieurs années. C'est bien le hiatus, de part la mise à nue de l'angoisse primitive, qui entravait la régression-fusion indispensable à l' établissement de l'amour maternel que cette mère s'attendait à éprouver. Ce résultat est donc l'aboutissement du choix judicieux de l'ancrage lainage, en s'appliquant particulièrement sur son lien symbolique avec le canal du monde intérieur "sérénité, amour". Le préconscient a renvoyé dans la suite des objets ontogéniques celui qui constitue le pont tibétain. Le modèle proposé tient donc ses promesses pour guider et clarifier l'ensemble de cette réparation. Dans le cas 8, un écueil supplémentaire s'est constitué du fait de l' objet agressif la gravité de initial avec en particulier un canal neurochimique perverti. Ce canal de la récompense perverti a été dupliqué et agrégé aux évènements affectifs et sexuels d'une ontogénie interrompue, puis d'un SOI en souffrance. Puis par la constante de la double peine, le sentiment de culpabilité constant chez l'enfant maltraité a rendu par association symbolique les objets d'affection et d'amour comme gâchette d'invasion toxique insupportable. Ces invasions toxiques récurrentes puisque déclenchées par les contacts affectifs se sont mêlées aux évocations d'objets divers dont le remaniement mémoriel a conduit au parasitage de leur climat neurochimique. Par exemple tel objet vécu initialement comme heureux a subi ce remaniement mémoriel pour devenir toxique à son tour. Nous avons vu donc que l'on va constater une contagion pour des évènements non directement liés à l'affect. Le parasitage peut toucher aussi bien des évènements antérieurs à l'agression que des évènements plus logiquement postérieurs. Ce parasitage par les aléas des invasions concomitantes dans le préconscient touchera également des objets indépendants des symboles affectifs. Le patient va souffrir d'une amputation de ses objets bienfaisants par leur mutation en objets toxiques. L'image du miroir brisé rend compte de cette mémoire douloureusement perturbée, disloquée. L'application du modèle dans une telle situation est productive d'une vision claire des objectifs attendus de l'application du protocole. Cette application est précédée cette fois par les explications libératoires du sentiment de culpabilité, dont la résolution par un discours superficiel risquerait d'être le fameux cauter sur jambe de bois. Il reste à organiser les objectifs du protocole dans ce contexte complexe. L'urgence est de trouver des objets non parasités pour constituer une combinaison de protection spécifique dans le domaine affectif, estime de soi, sérénité et de ses ancrages confortables. Bien évidemment, comme le protocole le prescrit, aucune étape, en particulier les travaux pratiques sur des objets banals bienfaisants de la vie courante, n'est escamotée. La situation impose plus qu'ailleurs que le patient s'approprie le modèle puisque cette fois c'est sa propre circonspection dans l'évaluation de l'état parasité ou non des objets qui va assurer la puissance de sa combinaison de protection face aux évocations dissociatives thérapeutiques variées qui apportent la réparation fonctionnelle. Avant une réparation de type ontogénique la priorité va au déparasitage des objets ayant subi un remaniement mémoriel toxique. Viendra ensuite la réparation ontogénique par un pont tibétain. + Le modèle et le protocole conduisent à un enchaînement cohérent et éprouvé dans les cas les plus complexes, enkystés. C'est le caractère pédagogique de la démarche qu'il faut retenir. À l'instar de la pertinence du modèle qui trouve sa confirmation à mesure que le patient peut se l'approprier, le protocole dépend dans chaque cas de la place prééminente que prend le patient dans son application. [[Fichier:PNL1 10.jpg|vignette]] La double flèche grise entre l'objet négatif et le préconscient figure l'intervention d'une évocation en mode dissociatif. Cette forme graphique désigne le remaniement qui s'opère dans un préconscient préalablement envahi par la combinaison de protection. Dans la proposition "c'est moi qui ai l'odeur, le contact, le son etc", il y a la protection d'une vision indirecte à travers le filtre de la combinaison de protection. Le patient en quelque sorte se repasse un film dont il est réalisateur, se mettant en scène lui-même. Cette posture est rendue possible face à une situation toxique grâce à la protection filtrante de ses ancrages protecteurs déjà parfaitement rodés. Ce metteur en scène est en quelque sorte derrière une caméra filtrante et lui-même dans sa combinaison de protection. [[Fichier:PNL1 9.jpg|vignette]] Ce travail ayant abouti, l'objet toxique est figuré avec une limite continue, imperméable. Cette représentation tente de figurer la perte du potentiel invasif spontané de l'objet en question. Nous avons vu qu'il s'agit donc d'un remaniement mémoriel d'un objet subconscient par recouvrement des différents canaux, et en particulier par une modification du contexte neurochimique associé. L'évocation en mode dissociatif, sous protection de la combinaison adéquate, permet donc de modifier les données stockées, leur charge émotionnelle, et donc en fait le contexte neurochimique enregistré dans l'objet. L'objet traité ne disparait pas de la mémoire, il est remanié, circonscrit, son contexte neurochimique est modifié et, si sa résurgence survient, il aura perdu en toxicité, en contagiosité. Je résume en disant que le patient rangera l'objet sur l'étagère des mauvais souvenirs. conclusion Le modèle de psychisme objectif, prolongé par son protocole de prise en charge en médecine générale, s'adresse donc à la fois aux praticiens qui cherchent des pistes pour la prise en charge des nombreuses souffrances qui leur seront confiées et aux patients qui cherchent à comprendre une démarche de soin argumentée. J'espère que cet essai sera utile, et en particulier par les reformulations, les critiques, références bibliographiques que la lectrice, le lecteur aura inscrites dans les espaces libres des pages de gauche (de la version pdf). Pour des raisons de responsabilité et d'éthique, je renouvelle des consignes que j'ai faîtes miennes. - Ne pas suivre une posture de gourou hélas répandue et délétère pour le souffrant. - Commencer toute prise en charge par la constitution d'une combinaison protection, ce qui sera suffisant dans la majorité des cas. Toute démarche qui propose une prise en charge directe de la souffrance est selon moi dangereuse.   - Dès que des objets intimes devront être manipulés, c'est le patient qui doit passer maître de ses choix. Le soignant doit apporter des conseils de bon sens. Il faut commencer par combinaison de la protection adaptée, puis choisir l'épine la moins douloureuse, et finir par le pire. Un soignant expérimenté pourra donner des conseils plus détaillés en fonction des données de la calibration et de l'anamnèse. - Il faut accepter de revenir en arrière dans le protocole car, si une invasion douloureuse, c'est que la combinaison de protection n'est pas justement composée ou que simplement la fatigue impose la récupération, car, ne l'oublions jamais, le cerveau est le support du psychisme. C'est un organe  biochimique fatigable. Nul ne saurait aller contre un état d'épuisement en n'instaurant pas d'abord une  récupération biochimique qui viendra avec la mise à l'abri du surmenage, des agressions et des pollutions médiatiques. Bien entendu, un modèle comme celui présenté ne prétend pas détenir la vérité. Comme tout modèle il présente des concepts argumentés et des opérations décrites qui se justifient par l'étendue des situations qu'il permet d'appréhender. La pédagogie en matière de psychisme devrait être aussi centrale dans l'éducation à l'hygiène de vie que le lavage des mains dans l'hygiène des repas. Tout être humain devrait pouvoir se représenter son fonctionnement psychique afin de se comprendre lui-même et de pouvoir mieux comprendre les autres. Par le modèle de psychisme objectif chacun peut disposer d'un miroir de sa psyché et de certains moyens de prévenir sa dislocation et d'obtenir sa réparation. Les limites du modèle sont claires. La genèse des objets décrits, ainsi que leurs relations et les processus de remaniement mémoriels forment un système rationnel. Par le jeu de leurs combinaisons les objets forment des tableaux qui peuvent devenir complexe voire incompréhensible sans recours au modèle. Les psychoses sont en principe hors du champ de cet essai, de mon point de vue, car elles relèvent de la psychiatrie et de ses spécialistes. Ce que j'appelle l'hygiène psychique par contre est son champ d'application jusqu'à la névrose où ce modèle peut contribuer à une juste compréhension psychopathologique et donc à l'organisation des soins. Bonne santé et bonheur à chacun et à tous. == LE PROTOCOLE REGLE POUR LA MEDECINE GENERALE DANS LE MODELE DE PSYCHISME OBJECTIF == <blockquote>LE PREMIER OBJECTIF..... [[Essai pour un modèle de psychisme objectif/protocole1]]</blockquote> <blockquote>LE DEUXIÈME OBJECTIF..... [[Essai pour un modèle de psychisme objectif/protocole2]]</blockquote> <blockquote>LE TROISIÈME OBJECTIF..... [[Essai pour un modèle de psychisme objectif/protocole3]]</blockquote> <blockquote>LE QUATRIÈME OBJECTIF..... [[Essai pour un modèle de psychisme objectif/protocole4]]</blockquote> <blockquote>LE CINQUIÈME OBJECTIF..... [[Essai pour un modèle de psychisme objectif/protocole5]]</blockquote> <blockquote>LE SIXIÈME OBJECTIF..... [[Essai pour un modèle de psychisme objectif/protocole6]]</blockquote> <blockquote>LE SEPTIÈME OBJECTIF..... [[Essai pour un modèle de psychisme objectif/protocole7]]</blockquote> Et voici UN LIEN DU FICHIER POUR EXPOSER LA DEMARHE AU PATIENT ( la dernière diapo est animée par la barre d'espace) [https://drive.google.com/file/d/1aXmGoN8RORB9F2Cybxb3yTiNjvZP6jOY/view?usp=sharing] attention pour voir le contenu avec les images il faut le télécharger pour l'ouvrir avec Libre Impress... ce lien est externe car wiki common refuse les fichiers .ODP .... ce fichier est libre d'accès Postface La déclaration des droits de l'homme de 1948 contient beaucoup de traits révolutionnaires à mes yeux et nous  devons nous réjouir qu'elle soit citée en préambule de certaines constitutions. De même le préambule à la fondation de l'Organisation Mondiale de la santé pose une définition de la santé très novatrice, et qui me sert de référence dans ce domaine depuis le début de mes études de médecine La première inclut ce que l'on désigne par les droits créances. Ainsi elle reconnaît à toute personne humaine une créance dès sa naissance auprès du reste de l'humanité pour répondre à un certain nombre de besoins fondamentaux comme le logement, la nourriture, l'éducation, la sûreté, la santé. Hélas les états ont réussi à convaincre que ces exigences écrites et signées étaient des utopies trop coûteuses pour les finances des plus riches, et en définitive aucun à ma connaissance n'a ratifié ces textes. Nous observons actuellement la déroute intellectuelle de ces pragmatiques de comptoir face aux pandémies et au dérèglement climatique où leur culpabilité est notoire. La fondation de l'OMS repose sur une conception de la santé universelle où tout est abordé, avec de mon point de vue un génie non dépassé à ce jour. La santé mentale et affective y est décrite comme un droit universel. Cet essai souhaite contribuer à un droit trop superficiellement abordé, celui de disposer des moyens de se comprendre et de comprendre les autres. Bien entendu l'outil linguistique est un préalable dans l'exercice de ce droit et rejoint le droit à l'éducation. J'en profite pour situer la place  qui devrait revenir à une langue spécifiquement faite pour la communication comme la langue espéranto, reconnue par l'UNESCO, dont chacun peut disposer avec efficacité et gratuitement. La contribution de cet essai est de donner matière à réflexion sur la manière de permettre à chaque être humain de s'approprier son fonctionnement psychique. Comme pour d'autres domaines une pédagogie efficace est cruciale. En s'appuyant sur certains acquis, l'essai propose de lever le voile, d'objectiver un domaine trop souvent laissé en friche, où l'être humain perd sa liberté dans le silence de l'inconscience collective. Aux soignants je confie l'usage de cette pédagogie en espérant les aider dans ce domaine difficile, et les autres je les invite à une exploration de la psyché. [[Catégorie:Psychologie]] 6haj7w46eg4xz18wdslchhw3g9dwyp0