# MOS Technology 6502

Le MOS Technology 6502 est un microprocesseur 8 bits conçu par MOS Technology en 1975. Quand il fut présenté, il était de loin le processeur le plus économique sur le marché, à environ 1/6 du prix, concurrençant de plus grandes compagnies telles que Motorola ou Intel. Il était néanmoins plus rapide que la plupart d'entre eux, et avec le Zilog Z80, brilla dans une série de projets d'ordinateurs qui furent par la suite la source de la révolution des ordinateurs personnels dans les années 1980. La production du 6502 était à l'origine concédée par MOS Technology à Rockwell et Synertek puis plus tard à d'autres compagnies ; il est encore fabriqué en 2024 pour équiper des systèmes embarqués.

## Histoire et utilisation

Le 6502 a été conçu par une équipe menée par l'ingénieur Chuck Peddle, issue de celle qui avait développé le Motorola 6800. Après avoir quitté Motorola en bloc, ses ingénieurs ont rapidement sorti le 6501, d'une conception complètement nouvelle mais dont le brochage restait néanmoins compatible avec le 6800. Motorola entama des poursuites judiciaires immédiatement, et bien qu'aujourd'hui l'affaire aurait été déboutée, les dommages que MOS encourut furent suffisants pour que la société accepte de cesser de produire le 6501.
Le résultat fut le 6502, un modèle « juridiquement inattaquable ». Il différait du précédent par une simple réorganisation du brochage, ce qui le rendait inutilisable sur une carte mère 6800. Motorola abandonna alors ses poursuites. Cependant, ce changement handicapa MOS à obtenir de nouveaux développeurs, jusqu'à ce que Chuck Peddle conçoive le KIM-1, un ordinateur monocarte. À la grande surprise de ses concepteurs, le KIM-1 fut énormément vendu à des amateurs et des bricoleurs aussi bien que sur le marché initialement prévu des ingénieurs.
Le 6502 sortit sur le marché en septembre 1975 à 25 $, alors que les 6800 et Intel 8008 se vendaient pour 179 $. Tout d'abord, de nombreuses personnes pensèrent qu'il s'agissait d'une blague, mais Motorola et Intel baissèrent subitement leurs prix à 79 $. Au lieu de l'effet escompté, cela légitima le 6502 dont les ventes décollèrent.
Le 6502 possédait une particularité qui le rendait particulièrement adapté à l'utilisation dans un ordinateur personnel : l'architecture interne garantissait que le processeur n'accéderait pas au bus pendant une période de son cycle d'exécution. Le système vidéo mettait à profit cette latence pour accéder à la mémoire écran, sans devoir recourir à un contrôleur mémoire. L'efficacité des systèmes était ainsi accrue jusqu'à 25 %. En revanche, le 6502 ne disposait pas du compteur 8 bits de rafraîchissement DRAM comme son concurrent le Z80.
Une des premières utilisations « publiques » fut la console de jeux vidéo Atari 2600. Les 2600 utilisaient un dérivé du 6502 appelé 6507, qui avait moins de broches et ne pouvait adresser que 8 ko de mémoire. Des millions d'exemplaires furent vendus sous cette forme. Les 6502 furent utilisés ensuite dans la famille des Apple II, puis dans les divers ordinateurs personnels de Commodore (séries PET et CBM), ACORN (modèle ATOM), Atari, le BBC Micro, la gamme Oric, et un nombre important d'autres plateformes. Un descendant du 6502, le 6510, a équipé les Commodore 64.
À l'origine, le CPC d'Amstrad devait être conçu autour du processeur 6502, mais lorsque Amstrad s'approcha de Locomotive Software pour développer un interpréteur Basic avec un délai très serré, Locomotive PLC, qui avait déjà un Basic fonctionnel sur Z80 a convaincu Amstrad de passer au Z80 pour respecter ses délais.
Dans la NES, les 6502 utilisés avaient été modifiés. Cette série, qui fut produite seulement pour Nintendo, prit le nom de « 2A03/2A07 ». Les 2A03/2A07 n'avaient pas le mode BCD des 6502 mais 23 registres supplémentaires memory-mapped pour la génération du son, l'affichage des sprites et la gestion des manettes.
La console PC Engine fait appel à une variante du MOS 6502, le 65SC02 (en) très exactement, modifiée par Hudson, le Hu6280.
De même à propos de la console portable Lynx d'Atari qui utilise un 65SC02 (en) conçu par Western Design Center.
La conception optimisée des 6502 inspira également les principaux concepteurs du processeur ARM RISC, et on peut ainsi dire qu'ils sont les successeurs de cette (famille) de processeurs puisque son esprit vit encore dans la conception de l'ARM, utilisée dans plusieurs ordinateurs de bureau aussi bien que dans une quantité de systèmes portatifs et systèmes embarqués, et vendu comme une boîte noire pour des systèmes totalement intégrés.

## Description

Le 6502 est un processeur 8 bits avec un bus d'adressage à 16 bits. La logique interne fonctionne à la même vitesse que la fréquence externe. Cette fréquence d'horloge apparemment lente, typiquement 1 MHz, donnait cependant des performances comparables à celles d'autres processeurs à l'horloge quatre fois plus véloce. Le 6502 est équipé d'une logique interne câblée et pipelinée, alors que les autres CPU de cette époque étaient microprogrammés et avaient des vitesses internes finalement comparables aux 6502 (l'horloge interne du Z80 par exemple, se trouvait divisée par quatre). Bien que ceci puisse ressembler à une « astuce », les périphériques pouvaient tourner moins vite, ce qui abaissait le coût global du système, un facteur crucial sur le marché très concurrentiel des consoles de jeux et des ordinateurs personnels.
À la différence de l'Intel 8080 et des microprocesseurs semblables, le 6502 possède très peu de registres internes. À cette époque, la mémoire était plus rapide que les processeurs : il était plus sensé de vouloir optimiser l'accès mémoire plutôt que d'augmenter le nombre de registres. L'ALU dispose d'un accumulateur de 8 bits (A), deux registres d'index de 8 bits (X et Y), un registre statut de 8 bits (SR), un pointeur de pile de 8 bits (SP) et un compteur de programme de 16 bits (PC). L'accès logiciel à la pile se fait par l'intermédiaire de quatre instructions en mode d'adressage implicite type push ou pop de l'accumulateur ou du registre de statut du processeur.
La puce utilise le registre d'index et de pile efficacement dans plusieurs modes d'adressage, y compris un mode raccourci ou en page zéro qui accède aux adresses allant de 0 à 255 avec un seul octet d'extension (pas besoin d'en charger un deuxième comme pour une adresse longue) - le code spécifique 6502 recourt beaucoup à l'adressage en page zéro pour remplacer les registres inexistants. Pour des raisons évidentes, dans la plupart des micro-ordinateurs organisés autour du 6502 avec un système d'exploitation, l'OS lui-même faisait massivement appel à la page zéro, laissant au mieux une poignée d'octets inutilisés.
Les modes d'adressage incluent également un mode implicite (instructions de 1 octet), absolu (3 octets), relatif (2 octets), accumulateur (1), indirect X et Y (2) et immédiat (2) :
* le mode absolu constitue un mode d'utilisation général ;
* le mode relatif sert aux instructions de branchement conditionnels qui peuvent déplacer le PC jusqu'à 128 octets vers l'avant ou vers l'arrière ;
* le mode accumulateur utilise l'accumulateur comme adresse réelle, et n'a besoin d'aucun opérande ;
* le mode immédiat exploite un opérande littéral d'un octet ;
* les modes indirects facilitent le traitement matriciel et les boucles. Avec le mode indirect Y, le registre de 8 bits Y s'ajoute à une base de 16 bits située dans la mémoire en page zéro (dont un octet de l'instruction donne l'adresse). Les registres X et Y de 8 bits fonctionnent comme pointeurs plutôt qu'en tant d'index normaux. L'incrémentation de X ou de Y, nécessaire à parcourir séquentiellement le tableau prend deux cycles, le tableau pouvant être situé n'importe où dans l'espace d'adressage de 16 bits. C'est l'un des points où le 6502 innove le plus par rapport au Motorola 6800. Un regard trop rapide sur les spécifications du 6502, laissant croire qu'il n'y a que deux registres d'index de 8 bits, ne reflète pas toute la puissance du processeur.

## Des caractéristiques floues

Les 6502 sont connus pour receler une quantité d'instructions non documentées qui changent d'une version à une autre du processeur. Le décodeur d'instructions du 6502 est réalisé dans une logique câblée dont le fonctionnement n'est garanti que pour les opcodes valides. Les 32 opcodes non documentés déclenchent plusieurs instructions simultanément, conduisant à des résultats inattendus.
L'instruction de branchement indirect du 6502, JMP (- - - -), est boguée. Si l'adresse, en hexadécimal, est - -FF, le processeur saute non pas à l'adresse stockée à (- -FF) et (- -FF+1), mais plutôt à (- -FF) et (- -00). Ni les 6510 ni les versions NMOS postérieures du 6502 telles que le 8502 et le 2A03 n'ont corrigé ce bogue. Bill Mensch, du Western Design Center, fut le premier à le rectifier dans le dérivé CMOS 65C02 ; le 65C816, un successeur 16 bits du 65C02, en est également exempt.

## Remarques sur le 6502

* En 1984 dans le film de science-fiction Terminator avec Arnold Schwarzenegger, le public à un moment voit une scène à travers l'œil-caméra du robot T-800 Model-101, où un fragment de programme en code assembleur du 6502 défile en bas de l'écran. Le code réel montré est la sortie écran d'un programme de checksum pour Apple II publié dans le magazine Nibble (en).
* Dans la série animée de télévision Futurama, Il est dit dans l'épisode intitulé Fry & the Slurm Factory que Bender, le « robot industriel » androïde de fiction construit en 2998, a des 6502 en tant que « cerveau ». Il y est également fait allusion lorsque Le professeur scanne Bender aux «rayons F», la mention 6502 est inscrite sur le circuit placé dans sa tête.
* Junior Computer était un système mono carte basé sur cette technologie.