Technologie MOS 6502 - MOS Technology 6502

Technologie MOS 6502
MOS 6502AD 4585 haut.jpg
Un processeur MOS Technology 6502 dans un boîtier en plastique DIP-40 . Le code de date à quatre chiffres indique qu'il a été fabriqué au cours de la 45e semaine (novembre) de 1985.
informations générales
Lancé 1975 ; il y a 46 ans ( 1975 )
Fabricant(s) commun(s)
Performance
Max. Fréquence d'horloge du processeur 1 MHz à 3 MHz
Largeur des données 8
Largeur de l'adresse 16
Architecture et classement
Jeu d'instructions MOS 6502
Instructions 56
Spécifications physiques
Transistors
Paquets)
Histoire
Prédécesseur
Successeur

Le MOS Technology 6502 (généralement prononcé "sixty-five-oh-two" ou "six-five-oh-two") est un microprocesseur 8 bits qui a été conçu par une petite équipe dirigée par Chuck Peddle pour MOS Technology . L'équipe de conception avait auparavant travaillé chez Motorola sur le projet Motorola 6800 ; le 6502 est essentiellement une version simplifiée, moins chère et plus rapide de cette conception.

Lors de son introduction en 1975, le 6502 était de loin le microprocesseur le moins cher du marché. Il s'est initialement vendu pour moins d'un sixième du coût des conceptions concurrentes de grandes entreprises, telles que le 6800 ou Intel 8080 . Son introduction a entraîné une baisse rapide des prix sur l'ensemble du marché des processeurs. Avec le Zilog Z80 , il a déclenché une série de projets qui ont abouti à la révolution de l' ordinateur domestique au début des années 1980.

Les consoles de jeux vidéo et les ordinateurs populaires , tels que l' Atari 2600 , la famille Atari 8 bits , l' Apple II , le Nintendo Entertainment System , le Commodore 64 , l' Atari Lynx , la BBC Micro et d'autres, utilisent le 6502 ou des variantes de la conception de base. Peu de temps après l'introduction du 6502, la technologie MOS a été achetée par Commodore International , qui a continué à vendre le microprocesseur et les licences à d'autres fabricants. Au début du 6502, il était sous-traité par Rockwell et Synertek , et plus tard sous licence à d'autres sociétés.

Sous sa forme CMOS (le 65C02 , qui a été développé par le Western Design Center ), la famille 6502 continue d'être largement utilisée dans les systèmes embarqués , avec des volumes de production estimés à des centaines de millions.

Histoire et utilisation

Origines chez Motorola

Carte de démonstration Motorola 6800 construite par Chuck Peddle et John Buchanan en 1974

Le 6502 a été conçu par bon nombre des mêmes ingénieurs qui avaient conçu la famille de microprocesseurs Motorola 6800 . Motorola a lancé le projet de microprocesseur 6800 en 1971 avec Tom Bennett comme architecte principal. La configuration de la puce a commencé à la fin de 1972, les premières puces 6800 ont été fabriquées en février 1974 et la famille complète a été officiellement lancée en novembre 1974. John Buchanan était le concepteur de la puce 6800 et Rod Orgill, qui a ensuite conçu la 6501, a aidé Buchanan avec analyses de circuits et implantation de puces. Bill Mensch a rejoint Motorola en juin 1971 après avoir obtenu son diplôme de l'Université de l'Arizona (à 26 ans). Sa première mission a été d'aider à définir les circuits intégrés périphériques de la famille 6800 et plus tard, il a été le principal concepteur de l' adaptateur d'interface périphérique (PIA) 6820 . Les ingénieurs de Motorola pourraient exécuter des simulations analogiques et numériques sur un ordinateur central IBM 370-165 . Bennett a embauché Chuck Peddle en 1973 pour effectuer des travaux de soutien architectural sur les produits de la famille 6800 déjà en cours. Il a contribué dans de nombreux domaines, dont la conception du 6850 ACIA (interface série).

Les clients cibles de Motorola étaient des sociétés d'électronique établies telles que Hewlett-Packard , Tektronix , TRW et Chrysler . En mai 1972, les ingénieurs de Motorola ont commencé à rendre visite à des clients sélectionnés et à partager les détails de leur système de microprocesseur 8 bits proposé avec des interfaces ROM, RAM, parallèle et série. Au début de 1974, ils ont fourni des échantillons techniques des puces afin que les clients puissent prototyper leurs conceptions. La stratégie de « famille de produits totale » de Motorola ne s'est pas concentrée sur le prix du microprocesseur, mais sur la réduction du coût total de conception du client. Ils ont offert un logiciel de développement sur un ordinateur à temps partagé, le système de débogage "EXORciser", une formation sur site et une assistance technique sur le terrain. Intel et Motorola avaient initialement annoncé un prix de 360 ​​$ pour un seul microprocesseur. Le prix réel des quantités produites était bien inférieur. Motorola a proposé un kit de conception contenant le 6800 avec six puces de support pour 300 $.

Peddle, qui accompagnait les vendeurs lors des visites chez les clients, a constaté que les clients étaient rebutés par le coût élevé des puces de microprocesseur. Dans le même temps, ces visites ont invariablement conduit les ingénieurs qu'il a présentés à produire des listes d'instructions requises qui étaient beaucoup plus petites que « toutes ces instructions fantaisistes » qui avaient été incluses dans le 6800. Peddle et d'autres membres de l'équipe ont commencé à décrire la conception d'un fonctionnalité améliorée, microprocesseur de taille réduite. À cette époque, la nouvelle usine de fabrication de semi-conducteurs de Motorola à Austin, au Texas, avait des difficultés à produire des puces MOS, et la mi-1974 marquait le début d'une année de récession dans l'industrie des semi-conducteurs. De plus, de nombreux employés de Mesa, en Arizona , étaient mécontents du déménagement à venir à Austin, au Texas .

La direction de la division Produits semi-conducteurs de Motorola était submergée par les problèmes et n'a montré aucun intérêt pour la proposition de microprocesseur à faible coût de Peddle. Finalement, Peddle a reçu une lettre officielle lui disant d'arrêter de travailler sur le système. Peddle a répondu à la commande en informant Motorola que la lettre représentait une déclaration officielle « d'abandon du projet », et en tant que telle, la propriété intellectuelle qu'il avait développée jusqu'alors était désormais la sienne. Dans une interview de novembre 1975, le président de Motorola, Robert Galvin, a finalement convenu que le concept de Peddle était bon et que la division a raté une opportunité : « Nous n'avons pas choisi les bons leaders dans la division Produits semi-conducteurs. La division a été réorganisée et la direction remplacée. Le nouveau vice-président du groupe, John Welty, a déclaré : « L'organisation des ventes de semi-conducteurs a perdu sa sensibilité aux besoins des clients et n'a pas pu prendre de décisions rapides.

Passer à la technologie MOS

Une publicité de 1973 MOS Technology mettant en évidence leurs capacités de circuits intégrés personnalisés
MOS Technology MCS6501, dans un boîtier en céramique blanche, fabriqué fin août 1975

Peddle a commencé à chercher en dehors de Motorola une source de financement pour ce nouveau projet. Il a d'abord approché le PDG de Mostek , LJ Sevin , mais il a refusé. Sevin a admis plus tard que c'était parce qu'il craignait que Motorola ne les poursuive.

Alors que Peddle rendait visite à Ford Motor Company lors de l'un de ses voyages de vente, Bob Johnson, plus tard chef de la division d'automatisation des moteurs de Ford, a mentionné que leur ancien collègue John Paivinen avait déménagé chez General Instrument et s'était enseigné la conception de semi-conducteurs. Il avait depuis évolué et effectuait des travaux très intéressants sur les chipsets de calculatrices dans une nouvelle société qu'il avait créée à Valley Forge, en Pennsylvanie .

Paivinen avait formé MOS Technology en 1969 avec deux autres dirigeants de General Instrument, Mort Jaffe et Don McLaughlin. Allen-Bradley , un fournisseur de composants électroniques et de commandes industrielles, a acquis une participation majoritaire en 1970. La société a conçu et fabriqué des circuits intégrés personnalisés pour ses clients et a développé une gamme de puces de calcul.

Après l'échec des efforts de Mostek, Peddle s'est approché de Paivinen, qui "l'a immédiatement compris". Le 19 août 1974, Chuck Peddle, Bill Mensch, Rod Orgill, Harry Bawcom, Ray Hirt, Terry Holdt et Wil Mathys quittent Motorola pour rejoindre MOS. Mike Janes a rejoint plus tard. Sur les dix-sept concepteurs de puces et personnes chargées de la mise en page de l'équipe 6800, huit sont partis. L'objectif de l'équipe était de concevoir et de produire un microprocesseur à faible coût pour les applications embarquées et de cibler une clientèle la plus large possible. Cela ne serait possible que si le microprocesseur était peu coûteux et que l'équipe fixait l'objectif de prix à 5 $ en volume. Mensch a déclaré plus tard que l'objectif n'était pas le prix du processeur lui-même, mais de créer un ensemble de puces qui pourraient se vendre à 20 $ pour concurrencer l' Intel 4040 récemment introduit qui se vendait 29 $ dans un chipset complet similaire.

Les puces sont produites en imprimant plusieurs copies de la conception de la puce sur la surface d'une « plaquette » , un disque mince de silicium très pur. Des puces plus petites peuvent être imprimées en plus grand nombre sur la même plaquette, ce qui diminue leur prix relatif. De plus, les plaquettes comprennent toujours un certain nombre de minuscules défauts physiques qui sont dispersés sur la surface. Toute puce imprimée à cet endroit échouera et doit être jetée. Des puces plus petites signifient qu'une seule copie est moins susceptible d'être imprimée sur un défaut. Pour ces deux raisons, le coût du produit final dépend fortement de la taille de la conception de la puce.

Les puces d'origine 6800 devaient être 180 × 180 mils (4,6 × 4,6 mm) , mais la mise en page a été achevée à 212 × 212 mils (5,4 × 5,4 mm) , soit une surface de 29,0 mm 2 . Pour la nouvelle conception, l'objectif de coût exigeait un objectif de taille de 153 × 168 mils (3,9 × 4,3 mm) , ou une surface de 16,6 mm 2 . Plusieurs nouvelles techniques seraient nécessaires pour atteindre cet objectif.

Passer à NMOS

Deux avancées significatives sont arrivées sur le marché juste au moment où le 6502 était en cours de conception, ce qui a permis de réduire considérablement les coûts. Le premier était le passage au NMOS à charge d' épuisement . Le 6800 utilisait un premier processus NMOS qui nécessitait trois tensions d'alimentation, mais l'une des caractéristiques de la puce était un doubleur de tension intégré qui permettait d'utiliser une seule alimentation +5V pour +5, -5 et +12 en interne, par opposition aux autres puces de l'époque comme l' Intel 8080 qui nécessitait trois broches d'alimentation distinctes. Bien que cette fonctionnalité réduise la complexité de l'alimentation et de la disposition des broches, elle nécessitait toujours des rails d'alimentation séparés pour les différentes portes de la puce, ce qui augmentait la complexité et la taille. En passant à la nouvelle conception de charge d'épuisement, une seule alimentation +5 était tout ce qui était nécessaire, éliminant toute cette complexité.

Un autre avantage pratique était que le signal d'horloge des processeurs antérieurs devait être suffisamment fort pour survivre à toute la dissipation lors de son passage dans les circuits, ce qui nécessitait presque toujours une puce externe séparée pouvant fournir un signal suffisamment fort. Avec les besoins en énergie réduits du NMOS, l'horloge pourrait être déplacée sur la puce, simplifiant ainsi la conception globale de l'ordinateur. Ces changements ont considérablement réduit la complexité et le coût de mise en œuvre d'un système complet.

Un autre changement en cours était l'introduction du masquage de projection. Auparavant, les puces étaient modelées sur la surface de la plaquette en plaçant un masque sur la surface de la plaquette, puis en y projetant une lumière vive. Les masques ramassaient souvent de minuscules particules de saleté ou de résine photosensible lorsqu'ils étaient retirés de la puce, provoquant des défauts à ces endroits lors de tout masquage ultérieur. Avec des conceptions complexes comme les processeurs, 5 ou 6 étapes de masquage de ce type seraient utilisées, et la probabilité qu'au moins une de ces étapes introduirait un défaut était très élevée. Dans la plupart des cas, 90 % de ces conceptions étaient imparfaites, ce qui a donné un rendement de 10 %. Le prix des exemples de travail devait couvrir le coût de production des 90 % qui ont été jetés.

En 1973, Perkin-Elmer a introduit le système Micralign , qui projetait une image du masque sur la plaquette au lieu d'exiger un contact direct. Les masques ne ramassaient plus la saleté des plaquettes et duraient de l'ordre de 100 000 utilisations au lieu de 10. Cela éliminait les défaillances étape par étape et les taux de défaut élevés observés auparavant sur les conceptions complexes. Les rendements des processeurs sont immédiatement passés de 10 % à 60 ou 70 %. Cela signifiait que le prix du processeur avait baissé à peu près du même montant et que le microprocesseur était soudainement devenu un appareil de base.

Les lignes de fabrication existantes de MOS Technology étaient basées sur l'ancienne technologie PMOS, elles n'avaient pas encore commencé à travailler avec NMOS lorsque l'équipe est arrivée. Paivinen a promis d'avoir une ligne NMOS opérationnelle à temps pour commencer la production du nouveau CPU. Il a tenu sa promesse, la nouvelle ligne était prête en juin 1975.

Notes de conception

Chuck Peddle, Rod Orgill et Wil Mathys ont conçu l'architecture initiale des nouveaux processeurs. Un article de septembre 1975 dans le magazine EDN donne ce résumé de la conception :

La famille MOS Technology 650X représente une tentative délibérée de huit anciens employés de Motorola qui ont travaillé sur le développement du système 6800 pour sortir une pièce qui remplacerait et surpasserait le 6800, tout en le vendant moins bien. Avec le recul acquis sur le projet 6800, l'équipe MOS Technology dirigée par Chuck Peddle, a apporté les modifications architecturales suivantes au processeur Motorola…

Le principal changement en termes de taille de puce a été l'élimination des pilotes à trois états des sorties du bus d'adresse. Cela avait été inclus dans le 6800 pour lui permettre de fonctionner avec d'autres puces dans des rôles d'accès direct à la mémoire (DMA) et de co-traitement, au prix d'un espace de puce important. En pratique, l'utilisation d'un tel système nécessitait que les autres dispositifs soient de la même complexité, et les concepteurs avaient plutôt tendance à utiliser des systèmes hors puce pour coordonner un tel accès. Le 6502 a simplement supprimé cette fonctionnalité, conformément à sa conception en tant que contrôleur peu coûteux utilisé pour des tâches spécifiques et communiquant avec des appareils simples. Peddle a suggéré que toute personne ayant réellement besoin de ce style d'accès puisse l'implémenter avec un seul 74158 .

La différence majeure suivante était de simplifier les registres. Pour commencer, l'un des deux accumulateurs a été retiré. Les registres à usage général tels que les accumulateurs doivent être accessibles par de nombreuses parties du décodeur d'instructions et nécessitent donc des quantités importantes de câblage pour déplacer les données vers et depuis leur stockage. Deux accumulateurs facilitent de nombreuses tâches de codage, mais coûtent à la conception de la puce elle-même une complexité considérable. Des économies supplémentaires ont été réalisées en réduisant le registre de pile de 16 à 8 bits, ce qui signifie que la pile ne pouvait faire que 256 octets, ce qui était suffisant pour son rôle de microcontrôleur.

Le registre d'index IX 16 bits a été divisé en deux, devenant X et Y. Plus important encore, le style d'accès a changé ; dans le 6800, IX détenait une adresse de 16 bits, qui était compensée par un nombre fourni avec l'instruction, les deux ont été ajoutés pour produire l'adresse finale. Dans le 6502 (et la plupart des autres conceptions), l'adresse de base était stockée dans l'instruction et le X ou Y y était ajouté.

Enfin, le jeu d'instructions a été simplifié, libérant de la place dans le décodeur et la logique de commande. Sur les 72 instructions originales du 6800, 56 ont été laissées. Parmi celles qui ont été supprimées figuraient toute instruction déplaçant des données entre les deux accumulateurs du 6800, ainsi qu'un certain nombre d'instructions de branchement inspirées du PDP-11, comme la possibilité de comparer directement deux valeurs numériques. Le 6502 utilisait un système plus simple qui gérait les comparaisons en effectuant des calculs sur l'accumulateur, puis en examinant les indicateurs de résultat.

La conception de haut niveau de la puce a dû être transformée en dessins de transistors et d'interconnexions. Chez MOS Technology, la « mise en page » était un processus très manuel réalisé avec des crayons de couleur et du papier vélin. La mise en page se composait de milliers de formes polygonales sur six dessins différents; un pour chaque couche du processus de fabrication. Compte tenu des limites de taille, l'ensemble de la conception de la puce devait être constamment pris en compte. Mensch et Paivinen ont travaillé sur le décodeur d'instructions tandis que Mensch, Peddle et Orgill ont travaillé sur l'ALU et les registres. Une autre avancée, développée lors d'une fête, était un moyen de partager une partie du câblage interne pour permettre de réduire la taille de l'ALU.

Malgré tous leurs efforts, la conception finale a fini par être trop large de 5 mils. Les premiers 6502 puces mesuraient 168 × 183 mils (4,3 × 4,7 mm) , soit une superficie de 19,8 mm 2 . L'instruction de rotation à droite (ROR) ne fonctionnait pas dans le premier silicium, l'instruction a donc été temporairement omise des documents publiés, mais l'itération suivante de la conception a réduit la puce et corrigé l'instruction de rotation à droite, qui a ensuite été incluse dans la documentation révisée .

Présentation des 6501 et 6502

Publicité d'introduction pour les microprocesseurs MOS Technology MCS6501 et MCS6502

MOS introduirait deux microprocesseurs basés sur la même conception sous-jacente : le 6501 se brancherait sur la même prise que le Motorola 6800, tandis que le 6502 réarrangerait le brochage pour prendre en charge un oscillateur d'horloge sur puce. Les deux fonctionneraient avec d'autres puces de support conçues pour le 6800. Ils n'exécuteraient pas le logiciel 6800 car ils avaient un jeu d'instructions différent, des registres différents et pour la plupart des modes d'adressage différents. Rod Orgill était responsable de la conception 6501; il avait aidé John Buchanan chez Motorola sur le 6800. Bill Mensch a fait le 6502 ; il était le concepteur de l'adaptateur d'interface périphérique (PIA) 6820 chez Motorola. Harry Bawcom, Mike Janes et Sydney-Anne Holt ont aidé à la mise en page.

L'introduction du microprocesseur de MOS Technology était différente du lancement de produit traditionnel de plusieurs mois. La première exécution d'un nouveau circuit intégré est normalement utilisée pour les tests internes et partagée avec des clients sélectionnés en tant qu'« échantillons d'ingénierie ». Ces puces présentent souvent un ou deux défauts de conception mineurs qui seront corrigés avant le début de la production. L'objectif de Chuck Peddle était de vendre les premières puces 6501 et 6502 aux participants du salon Wescon à San Francisco à partir du 16 septembre 1975. Peddle était un porte-parole très efficace et les microprocesseurs de la technologie MOS ont été largement couverts par la presse spécialisée. L'un des premiers était un article d'une page entière sur les microprocesseurs MCS6501 et MCS6502 dans le numéro du 24 juillet 1975 du magazine Electronics . Des articles ont également été publiés dans EE Times (24 août 1975), EDN (20 septembre 1975), Electronic News (3 novembre 1975), Byte (novembre 1975) et Microcomputer Digest (novembre 1975). Des publicités pour le 6501 sont apparues dans plusieurs publications la première semaine d'août 1975. Le 6501 serait en vente chez Wescon pour 20 $ pièce. En septembre 1975, les publicités incluaient à la fois les microprocesseurs 6501 et 6502. Le 6502 ne coûterait que 25 $ (équivalent à 120 $ en 2020).

Lorsque MOS Technology est arrivé à Wescon, ils ont constaté que les exposants n'étaient pas autorisés à vendre quoi que ce soit sur le salon. Ils ont loué la suite MacArthur à l' hôtel St. Francis et ont demandé aux clients d'acheter les processeurs. Dans la suite, les processeurs étaient stockés dans de grands bocaux pour impliquer que les puces étaient en production et facilement disponibles. Les clients ne savaient pas que la moitié inférieure de chaque pot contenait des puces non fonctionnelles. Les puces coûtaient 20 $ et 25 $ tandis que le paquet de documentation coûtait 10 $ supplémentaires. Les utilisateurs ont été encouragés à faire des photocopies des documents, un moyen peu coûteux pour MOS Technology de diffuser des informations sur les produits. Les fiches techniques préliminaires ne répertoriaient que 55 instructions, à l'exception de l'instruction Rotation à droite (ROR) qui ne fonctionnait pas correctement sur ces premières puces. Les revues dans Byte et EDN ont noté l'absence de l'instruction ROR. La prochaine révision de la mise en page a résolu ce problème et la fiche technique de mai 1976 énumérait 56 instructions. Peddle voulait que chaque ingénieur et amateur intéressé ait accès aux puces et à la documentation ; d'autres sociétés de semi-conducteurs ne voulaient traiter qu'avec des clients "sérieux". Par exemple, Signetics introduisait le microprocesseur 2650 et ses publicités demandaient aux lecteurs d'écrire pour obtenir des informations sur le papier à en-tête de leur entreprise.

MOS Technology MCS6502, dans un boîtier en céramique blanche, fabriqué fin 1975
Différences de brochage
Épingler 6800 6501 6502
2 Arrêt Prêt Prêt
3 1 (pouces) 1 (pouces) ∅1 (sortie)
5 Adresse mémoire valide Adresse mémoire valide NC
7 Bus disponible Bus disponible SYNCHRONISATION
36 Activation du bus de données Activation du bus de données NC
37 ∅2 (pouces) ∅2 (pouces) 0 (dans)
38 NC NC Définir l'indicateur de débordement
39 Contrôle à trois états NC ∅2 (sortie)

Procès contre Motorola

La fiche technique de mai 1976 a omis le microprocesseur 6501 qui était dans la version d' août 1975 .

L'introduction du 6501/6502 sur papier et à Wescon a été un énorme succès. L'inconvénient était que la vaste couverture médiatique a attiré l'attention de Motorola. En octobre 1975, Motorola a réduit le prix d'un seul microprocesseur 6800 de 175 $ à 69 $. Le kit de conception de système de 300 $ a été réduit à 150 $ et il est maintenant livré avec une carte de circuit imprimé. Le 3 novembre 1975, Motorola a demandé une injonction à la Cour fédérale pour empêcher MOS Technology de fabriquer et de vendre des produits à microprocesseur. Ils ont également déposé une plainte pour contrefaçon de brevet et détournement de secrets commerciaux. Motorola a affirmé que sept anciens employés avaient rejoint MOS Technology pour créer les produits de microprocesseur de cette société.

Motorola était une entreprise d'un milliard de dollars avec un cas plausible et des avocats. Le 30 octobre 1974, Motorola a déposé de nombreuses demandes de brevet sur la famille des microprocesseurs et a obtenu vingt-cinq brevets. Le premier était en juin 1976 et le second était à Bill Mensch le 6 juillet 1976, pour la configuration de la puce 6820 PIA. Ces brevets couvraient le bus 6800 et la façon dont les puces périphériques s'interfacent avec le microprocesseur. Motorola a commencé à fabriquer des transistors en 1950 et possédait un portefeuille de brevets sur les semi-conducteurs. Allen-Bradley a décidé de ne pas se battre contre cette affaire et a revendu son intérêt dans la technologie MOS aux fondateurs. Quatre des anciens ingénieurs de Motorola ont été nommés dans la poursuite : Chuck Peddle, Will Mathys, Bill Mensch et Rod Orgill. Tous ont été nommés inventeurs dans les 6800 demandes de brevet. Au cours du processus de découverte, Motorola a découvert qu'un ingénieur, Mike Janes, avait ignoré les instructions de Peddle et a apporté ses 6800 documents de conception à MOS Technology. En mars 1976, la désormais indépendante MOS Technology était à court d'argent et a dû régler l'affaire. Ils ont accepté d'abandonner le processeur 6501, de payer 200 000 $ à Motorola et de retourner les documents que Motorola prétendait confidentiels. Les deux sociétés ont convenu d' accorder des licences croisées sur les brevets des microprocesseurs. En mai, Motorola a baissé le prix d'un seul microprocesseur 6800 à 35 $. En novembre, Commodore avait acquis MOS Technology.

Ordinateurs et jeux

Avec des problèmes juridiques derrière eux, MOS avait toujours le problème d'amener les développeurs à essayer leur processeur, ce qui a incité Chuck Peddle à concevoir l' ordinateur monocarte MDT-650 (« terminal de développement de micro-ordinateurs ») . Un autre groupe au sein de l'entreprise a conçu le KIM-1 , qui a été vendu semi-complet et pourrait être transformé en un système utilisable avec l'ajout d'un terminal informatique tiers et d' un lecteur de cassette compact . À leur grand étonnement, le KIM-1 s'est bien vendu aux amateurs et aux bricoleurs, ainsi qu'aux ingénieurs auxquels il était destiné. Le système de contrôle/formation/développement Rockwell AIM 65 connexe a également bien fonctionné. Le logiciel de l'AIM 65 était basé sur celui du MDT. Un autre produit à peu près similaire était le Synertek SYM-1 .

L'une des premières utilisations "publiques" de la conception a été le micro - ordinateur Apple I , introduit en 1976. Le 6502 a ensuite été utilisé dans le Commodore PET et l' Apple II , tous deux sortis en 1977. Il a ensuite été utilisé dans l' Atari 8 bits. les ordinateurs familiaux et Acorn Atom , le BBC Micro , le Commodore VIC-20 et d'autres modèles à la fois pour les ordinateurs personnels et les entreprises, tels que l' Ohio Scientific et l' Oric . Le 6510 , successeur direct du 6502 avec un port d'E/S numérique et un bus d'adresses à trois états , était le processeur utilisé dans l' ordinateur domestique Commodore 64 le plus vendu . 6520 et / ou processeurs 6502 variant ont été utilisés dans toutes les Commodore disquettes des lecteurs pour tous leurs ordinateurs 8 bits, de la ligne PET (dont certains avaient deux processeurs à base 6502-) à travers le Commodore 128D, y compris le Commodore 64 , et dans tous les lecteurs de disque d'Atari pour l'ensemble de leur gamme d'ordinateurs 8 bits, du 400/800 au XEGS.

Une autre utilisation importante de la famille 6500 était dans les jeux vidéo. Le premier à utiliser la conception du processeur était l'Atari VCS, rebaptisé plus tard l' Atari 2600 . Le VCS utilisait une variante du 6502 appelée 6507 , qui avait moins de broches et, par conséquent, ne pouvait adresser que 8  Ko de mémoire. Des millions de consoles Atari seraient vendues, chacune avec un processeur MOS. Une autre utilisation importante était par le système de divertissement Nintendo et Famicom . Le 6502 utilisé dans la NES était une deuxième version source de Ricoh , un système sur puce partiel , qui ne disposait pas du mode décimal codé binaire mais ajoutait 22 registres mappés en mémoire et du matériel sur matrice pour la génération de son, la lecture du joypad , et la liste de sprites DMA . Appelé 2A03 dans les consoles NTSC et 2A07 dans les consoles PAL (la différence étant le rapport de division de mémoire et une table de recherche pour les taux d'échantillonnage audio), ce processeur a été produit exclusivement pour Nintendo . L' Atari Lynx utilisait une version 4 MHz de la puce, la 65SC02 .

Dans les années 1980, un magazine d'électronique populaire Elektor/Elektuur a utilisé le processeur dans sa carte de développement de microprocesseurs Junior Computer .

Description technique

Matrice de processeur 6502. La section régulière en haut est la ROM de décodage des instructions, la section apparemment aléatoire au centre est la logique de contrôle et en bas se trouvent les registres (à droite) et l'ALU (à gauche). Les connexions du bus de données se trouvent en bas à droite et le bus d'adresses en bas et en bas à gauche.
6502 Configuration des broches ( DIP 40 broches )
Registres MOS 6502
1 5 1 4 1 3 1 2 1 1 1 0 9 8 7 6 5 4 3 2 1 0 (position du bit)
Registres principaux
  UNE Un accumulateur
Registres d'indexation
  X indice X
  Oui indice Y
0 0 0 0 0 0 0 1 S S amure pointeur
Compteur de programme
ordinateur P rogramme C ontre
Registre d'état
  N V - B je Z C P rocessor F décalages

Le 6502 est un processeur 8 bits petit-boutiste avec un bus d'adresse 16 bits . Les versions originales ont été fabriquées à l'aide d'une puce de technologie de processus de 8 µm avec une taille de matrice de 3,9 mm × 4,3 mm (annoncée en tant que 153 mils × 168 mils ), pour une surface totale de 16,6 mm 2 .

La logique interne fonctionne à la même vitesse que la fréquence d'horloge externe, mais malgré les faibles vitesses d'horloge (généralement aux alentours de 1 à 2  MHz ), les performances du 6502 étaient compétitives par rapport aux autres processeurs contemporains utilisant des horloges nettement plus rapides. Ceci est en partie dû à une machine à états simple mise en œuvre par une logique combinatoire (sans horloge) dans une plus grande mesure que dans de nombreuses autres conceptions ; l'horloge biphasée (fournissant deux synchronisations par cycle) pourrait ainsi contrôler directement le cycle de la machine. Les instructions typiques peuvent nécessiter deux fois moins de cycles sur le 6502 que sur les modèles contemporains. Comme la plupart des processeurs simples de l'époque, la puce dynamique NMOS 6502 n'est pas séquencée par une ROM de microcode mais utilise un PLA (qui occupait environ 15% de la surface de la puce) pour le décodage et le séquençage des instructions. Comme dans la plupart des microprocesseurs 8 bits, la puce effectue un chevauchement limité de l'extraction et de l'exécution.

La faible fréquence d'horloge a modéré les exigences de vitesse de la mémoire et des périphériques connectés au processeur, car seulement environ 50% du cycle d'horloge était disponible pour l'accès à la mémoire (en raison de la conception asynchrone, cette fraction variait fortement entre les versions de puce). Cela était essentiel à une époque où la mémoire abordable avait des temps d'accès compris entre 250 et 450 ns .

Étant donné que la puce n'accédait à la mémoire que pendant certaines parties du cycle d'horloge, et que ces cycles étaient indiqués par la broche de sortie d'horloge PHI2, d'autres puces d'un système pouvaient accéder à la mémoire pendant les moments où le 6502 était hors du bus. Cela était parfois appelé "accès caché". Cette technique était largement utilisée par les systèmes informatiques; ils utiliseraient une mémoire capable d'accéder à 2 MHz, puis exécuteraient le processeur à 1 MHz. Cela garantissait que le processeur et le matériel vidéo pouvaient entrelacer leurs accès, avec une performance totale correspondant à celle du dispositif de mémoire. Lorsque des mémoires plus rapides sont devenues disponibles dans les années 1980, les nouvelles machines pouvaient fonctionner à des fréquences d'horloge plus élevées, comme le processeur 2 MHz du BBC Micro , tout en utilisant les techniques de partage de bus.

Registres

Comme son précurseur, le 6800, le 6502 possède très peu de registres . Les registres du 6502 comprennent un registre accumulateur 8 bits (A), deux registres d'index 8 bits (X et Y), 7 bits d' indicateur d'état du processeur 1 bit (P) - spécifiquement du bit 7 au bit 0 dans P, ce sont les négatif (N), débordement (V), réservé , pause (B), décimal (D), interruption de désactivation (I), zéro (Z) et report (C) drapeau -, un pointeur de pile 8 bits (S), et un compteur de programme 16 bits (PC). Cela se compare à une conception typique de la même époque, le Z80 , qui possède huit registres 8 bits à usage général, qui peuvent être combinés en quatre registres 16 bits. Le Z80 avait également un ensemble complet de registres alternatifs qui faisaient un total de seize registres à usage général.

Afin de compenser quelque peu le manque de registres, le 6502 a inclus un mode d'adressage de page zéro qui utilise un octet d'adresse dans l'instruction au lieu des deux nécessaires pour adresser les 64 Ko complets de mémoire. Cela permet un accès rapide aux 256 premiers octets de RAM en utilisant des instructions plus courtes. Chuck Peddle a déclaré dans des interviews que l'intention spécifique était de permettre à ces 256 premiers octets de RAM d'être utilisés comme des registres.

L'espace d'adressage de la pile est câblé à la page mémoire $01 , c'est-à-dire la plage d'adresses $0100$01FF ( 256511 ). L'accès logiciel à la pile se fait via quatre instructions de mode d'adressage implicite, dont les fonctions sont de pousser ou de faire sauter (tirer) l'accumulateur ou le registre d'état du processeur. La même pile est également utilisée pour les appels de sous-programme via les instructions JSR (jump to subroutine) et RTS (return from subroutine) et pour la gestion des interruptions .

Adressage

La puce utilise efficacement les registres d'index et de pile avec plusieurs modes d'adressage , y compris un mode rapide "page directe" ou "page zéro", similaire à celui trouvé sur le PDP-8 , qui accède aux emplacements mémoire des adresses 0 à 255 avec un seul Adresse 8 bits (en économisant le cycle normalement requis pour récupérer l'octet de poids fort de l'adresse) - le code du 6502 utilise la page zéro autant que le code des autres processeurs utiliserait des registres. Sur certains micro-ordinateurs à base de 6502 avec un système d'exploitation, le système d'exploitation utilise la plupart des pages zéro, ne laissant qu'une poignée d'emplacements pour l'utilisateur.

Les modes d'adressage incluent également des instructions implicites (à 1 octet) ; absolu (3 octets) ; indexé absolu (3 octets) ; page zéro indexée (2 octets) ; relatif (2 octets) ; accumulateur (1) ; indirect,x et indirect,y (2) ; et immédiat (2). Le mode absolu est un mode à usage général. Les instructions de branchement utilisent un décalage signé de 8 bits par rapport à l'instruction après le branchement ; la plage numérique -128..127 se traduit donc par 128 octets vers l'arrière et 127 octets vers l'avant à partir de l'instruction suivant le branchement (qui est de 126 octets vers l'arrière et 129 octets vers l'avant depuis le début de l'instruction de branchement). Le mode accumulateur utilise l'accumulateur comme adresse effective et ne nécessite aucune donnée d' opérande . Le mode immédiat utilise un opérande littéral de 8 bits .

Adressage indirect

Les modes indirects sont utiles pour le traitement des tableaux et autres boucles. Avec le mode "(indirect),y" de cycle 5/6, le registre Y de 8 bits est ajouté à une adresse de base de 16 bits lue à partir de la page zéro, qui est localisée par un seul octet suivant l'opcode. Le registre Y est donc un registre d' index dans le sens où il est utilisé pour contenir un index réel (par opposition au registre X du 6800, où une adresse de base était directement stockée et auquel un décalage immédiat pouvait être ajouté). L'incrémentation du registre d'index pour parcourir le tableau par octet ne prend que deux cycles supplémentaires. Avec le mode "(indirect,x)" moins fréquemment utilisé, l'adresse effective pour l'opération se trouve à l'adresse de page zéro formée en ajoutant le deuxième octet de l'instruction au contenu du registre X. En utilisant les modes indexés, la page zéro agit effectivement comme un ensemble de jusqu'à 128 registres d'adresses supplémentaires (bien que très lents).

Le 6502 est capable d'effectuer des additions et des soustractions en décimales binaires ou codées binaires . Placer la CPU en mode BCD avec l' SEDinstruction (définir le drapeau D) entraîne l'arithmétique décimale, ce $99 + $01qui entraînerait la définition de $00 et le drapeau de report (C). En mode binaire ( CLD, effacer l'indicateur D), la même opération entraînerait l' annulation de $9A et l'effacement de l'indicateur de retenue. À part Atari BASIC , le mode BCD était rarement utilisé dans les applications d'ordinateur domestique.

Voir le Bonjour tout le monde ! article pour un exemple simple mais caractéristique du langage assembleur 6502 .

Instructions et opcodes

6502 codes d'opération d' instruction ( opcodes ) sont longs de huit bits et ont la forme générale AAABBBCC, où AAA et CC définissent le opcode et BBB définit le mode d'adressage.

Par exemple, considérons l' ORAinstruction, qui effectue un OU au niveau du bit sur les bits de l'accumulateur avec une autre valeur. L'opcode d'instruction est de la forme 000bbb01, où bbb peut être 010 pour une valeur de mode immédiat (constante), 001 pour une adresse fixe de page zéro, 011 pour une adresse absolue, et ainsi de suite.

Ce modèle n'est pas absolu et il existe un certain nombre d'exceptions. Cependant, lorsqu'il s'applique, il permet de déconstruire facilement les valeurs des opcodes en mnémoniques d'assemblage pour la majorité des instructions, en gérant les cas extrêmes avec un code à usage spécial.

Sur les 256 opcodes possibles disponibles en utilisant un modèle à 8 bits, le 6502 d'origine en utilise 151, organisés en 56 instructions avec (éventuellement) plusieurs modes d'adressage . Selon l'instruction et le mode d'adressage, l'opcode peut nécessiter zéro, un ou deux octets supplémentaires pour les opérandes. Ainsi 6502 instructions machine varient en longueur d'un à trois octets. L'opérande est stocké dans le format habituel little-endian du 6502 .

Le 65C816 , le descendant CMOS 16 bits du 6502, prend également en charge l'adressage 24 bits, ce qui entraîne l'assemblage d'instructions avec des opérandes à trois octets, également disposés au format little-endian.

Les 105 opcodes restants ne sont pas définis. Dans la conception originale, les instructions où les 4 bits de poids faible ( nibble ) étaient 3, 7, B ou F n'étaient pas utilisées, ce qui permettait une expansion future. De même, la colonne $2x n'avait qu'une seule entrée, . Les 25 emplacements vides restants ont été distribués. Certains des emplacements vides ont été utilisés dans le 65C02 pour fournir à la fois de nouvelles instructions ainsi que des variantes de celles existantes avec de nouveaux modes d'adressage. Les instructions $Fx étaient initialement laissées libres pour permettre aux fournisseurs tiers d'ajouter leurs propres instructions, mais les versions ultérieures du 65C02 ont standardisé un ensemble d' instructions de manipulation de bits développées par Rockwell Semiconductor . LDX #constant

Langage d'assemblage

Une instruction en assembleur 6502 se compose d'un mnémonique d' instruction à trois caractères , suivi de tout opérande . Les instructions qui ne prennent pas un opérande séparé mais ciblent un seul registre en fonction du mode d'adressage combinent le registre cible dans le mnémonique de l'instruction, de sorte que l'assembleur utilise INXplutôt que INC Xpour incrémenter le registre X.

Tableau d'instructions

Comportement détaillé

Matrice du processeur 6502 avec des transistors NMOS dessinés et des étiquettes faisant allusion à la fonctionnalité des composants du 6502.

L' entrée d' interruption non masquable (NMI) du processeur est sensible au front , ce qui signifie que l'interruption est déclenchée par le front descendant du signal plutôt que par son niveau. L'implication de cette caractéristique est qu'un circuit d'interruption câblé OU n'est pas facilement pris en charge. Cependant, cela empêche également les interruptions NMI imbriquées de se produire jusqu'à ce que le matériel rende à nouveau l'entrée NMI inactive, souvent sous le contrôle du gestionnaire d'interruptions NMI .

L'assertion simultanée des lignes d'interruption matérielle NMI et IRQ (masquables) entraîne l'ignorance de l'IRQ. Cependant, si la ligne IRQ reste activée après la maintenance de la NMI, le processeur répondra immédiatement à l'IRQ, car l'IRQ est sensible au niveau . Ainsi, une sorte de priorité d'interruption intégrée a été établie dans la conception 6502.

L'indicateur B est défini par le 6502 échantillonnant périodiquement la sortie de son détecteur de front NMI et son entrée IRQ. Le signal IRQ bas n'est reconnu que si les IRQ sont autorisées par le drapeau I. Si de cette manière une requête NMI ou une IRQ (masquable) est détectée, le drapeau B est mis à zéro et amène le processeur à exécuter l'instruction BRK ensuite au lieu d'exécuter l'instruction suivante basée sur le compteur de programme.

L'instruction BRK pousse ensuite l'état du processeur sur la pile, avec le bit d'indicateur B mis à zéro. A la fin de son exécution, l'instruction BRK remet à un la valeur du drapeau B. C'est la seule façon de modifier le drapeau B. Si une instruction autre que l'instruction BRK pousse le drapeau B sur la pile dans le cadre de l'état du processeur, le drapeau B a toujours la valeur un.

Un front bas à haut sur la broche d'entrée SO définira le bit d'état de débordement du processeur. Cela peut être utilisé pour une réponse rapide au matériel externe. Par exemple, un pilote de périphérique d' interrogation à grande vitesse peut interroger le matériel une fois en trois cycles seulement à l'aide d'une BVCinstruction Branch-on-oVerflow-Clear ( ) qui se branche sur elle-même jusqu'à ce que le débordement soit défini par un front montant SO. Le Commodore 1541 et d'autres lecteurs de disquettes Commodore utilisent cette technique pour détecter quand le sérialiseur est prêt à transférer un autre octet de données de disque. La conception matérielle et logicielle du système doit garantir qu'un OS ne se produira pas pendant le traitement arithmétique et ne perturbera pas les calculs.

Variantes et dérivés

Il y avait de nombreuses variantes du NMOS 6502 original.

Légende
Société Modèle La description
6502A Une puce de 1,5 MHz présente dans Asteroids Deluxe .
6502B Version du 6502 capable de fonctionner à une vitesse maximale de 2 MHz au lieu de 1. Le B était utilisé dans les ordinateurs Apple III , BBC Micro et, cadencé à 1,79 MHz, les premiers ordinateurs Atari 8 bits .
6502C Le 6502C « officiel » était une version du 6502 original capable de fonctionner jusqu'à 4 MHz.

A ne pas confondre avec SALLY, un 6502 personnalisé conçu pour Atari (et parfois appelé par eux comme "6502C") ni avec le 65C02 du même nom .

SALLY / C014806 / "6502C" Variante personnalisée 6502 conçue pour Atari, utilisée dans les derniers ordinateurs Atari 8 bits ainsi que les consoles Atari 5200 et Atari 7800 .

Comporte un signal HALT sur la broche 35 et le signal R/W sur la broche 36 (ces broches ne sont pas connectées (N/C) sur un 6502 standard). Tirer HALT bas verrouille l'horloge, mettant le processeur en pause. Cela a été utilisé pour permettre l'accès direct à la mémoire (DMA) du circuit vidéo.

Bien que parfois appelé "6502C" dans la documentation Atari, ce n'est pas la même chose que le 6502C "officiel" et la puce elle-même n'est jamais marquée comme telle.

Technologie MOS 6503 Capacité d'adressage mémoire réduite (4 Ko) et pas d'entrée RDY, dans un boîtier DIP à 28 broches (avec la phase 1 (OUT), SYNC, les broches Vss redondantes et SO du 6502 également omises).
Technologie MOS 6504 Capacité d'adressage mémoire réduite (8 Ko), pas de NMI et pas d'entrée RDY, dans un boîtier DIP à 28 broches (avec la phase 1 (OUT), SYNC, les broches Vss redondantes et SO du 6502 également omises).
Technologie MOS 6505 Capacité d'adressage mémoire réduite (4 Ko) et pas de NMI, dans un boîtier DIP à 28 broches (avec la phase 1 (OUT), SYNC, les broches Vss redondantes et SO du 6502 également omises).
Technologie MOS 6506 Capacité d'adressage mémoire réduite (4 Ko), pas de NMI et pas d'entrée RDY, mais les 3 broches d'horloge du 6502 (c'est-à-dire une horloge de sortie à 2 phases), dans un boîtier DIP à 28 broches (avec le SYNC, Vss redondant, et les broches SO du 6502 ont également été omises).
Technologie MOS 6507 Capacité d'adressage mémoire réduite (8 Ko) et aucune interruption, dans un boîtier DIP à 28 broches (avec la phase 1 (OUT), SYNC, les broches Vss redondantes et SO du 6502 également omises). Cette puce a été utilisée dans le système de jeu vidéo Atari 2600 .
Technologie MOS 6508 Possède un port d'entrée/sortie 8 bits intégré et 256 octets de RAM statique interne.
Technologie MOS 6509 Peut adresser jusqu'à 1 Mo de RAM sous forme de 16 banques de 64 Ko et a été utilisé dans la série Commodore CBM-II .
Technologie MOS 6510 Dispose d'un port d'entrée/sortie programmable 6 bits intégré et a été utilisé dans le Commodore 64 . Le 8500 est effectivement une version HMOS du 6510 et l'a remplacé dans les versions ultérieures du C64.
Technologie MOS 6512
6513
6514
6515
Les technologies MOS 6512, 6513, 6514 et 6515 reposent chacune sur une horloge externe, au lieu d'utiliser un générateur d'horloge interne comme le 650x (par exemple 6502). Cela a été utilisé à bon escient dans certaines conceptions où les horloges pouvaient être exécutées de manière asymétrique, augmentant ainsi les performances globales du processeur.

Le 6512 est un 6502 avec une entrée d'horloge à 2 phases pour un oscillateur d'horloge externe, au lieu d'un oscillateur d'horloge embarqué. Les 6513, 6514 et 6515 sont équivalents (respectivement) aux 6503, 6504 et 6505 avec la même entrée d'horloge à 2 phases.

Le 6512 a été utilisé dans le BBC Micro B+64 .

Ricoh 2A03 Variante 6502 comprenant une unité de traitement audio et dépourvue du mode BCD, utilisée dans la Nintendo Entertainment System .
Technologie MOS 6591
6592
Système sur puce qui utilise un Atari 2600 complet dans un boîtier DIP à 48 broches.
WDC 65C02 Version CMOS du NMOS 6502 conçue par Bill Mensch du Western Design Center (WDC), avec une consommation d'énergie réduite, la prise en charge de vitesses d'horloge beaucoup plus élevées, de nouvelles instructions, de nouveaux modes d'adressage pour certaines instructions existantes et la correction des errata NMOS, comme le JMP ($xxFF)bogue.
WDC 65SC02 Variante du WDC 65C02 sans opérations individuelles de manipulation de bits (RMB, SMB, BBR et BBS). Ce cœur, fonctionnant à 4 MHz, a été utilisé dans le circuit intégré principal du système Atari Lynx .
CSG (Technologie MOS) 65CE02 Dérivé CMOS développé par le Commodore Semiconductor Group (CSG), anciennement MOS Technology.
Rockwell R6511Q

R6500/11, R6500/12, R6500/15 " Micro-ordinateurs à puce unique "
Versions améliorées du processeur basé sur le 6502, comprenant également des opérations de manipulation de bits individuels (RMB, SMB, BBR et BBS), une RAM sur puce de 192 octets à page zéro, UART , etc.
Rockwell R65F11
R65F12
Le Rockwell R65F11 (introduit en 1983) et le dernier R65F12 sont des versions améliorées du processeur basé sur le 6502, comprenant également des opérations de manipulation de bits individuels (RMB, SMB, BBR et BBS), une mémoire RAM sur puce zéro page, une puce Forth ROM du noyau, un UART, etc.
GTE G65SC102 Logiciel compatible avec le 65C02, mais avec un brochage et un circuit d'oscillateur légèrement différents. Le BBC Master Turbo incluait la version 4 MHz de ce CPU sur une carte coprocesseur, qui pouvait également être achetée séparément et ajoutée au Master 128.
Rockwell R65C00
R65C21
R65C29
Les R65C00, R65C21 et R65C29 comportaient deux CMOS 6502 améliorés dans une seule puce, et les R65C00 et R65C21 contenaient en plus 2 Ko de ROM programmable par masque.
CM630 Un clone 1 MHz Eastern Bloc du 6502 et a été utilisé dans les Pravetz 8A et 8C, clones bulgares de la série Apple // .
Technologie MOS 7501
8501
Des variantes du 6510 (lui-même un 6502 amélioré), introduits en 1984. Ils ont étendu le nombre de broches du port d'E/S de 6 à 7, mais ont omis les broches pour les interruptions non masquables et la sortie d'horloge. Utilisé dans les ordinateurs C-16 , C-116 et Plus/4 de Commodore . La principale différence entre les processeurs 7501 et 8501 est que le 7501 a été fabriqué avec le processus HMOS-1 et le 8501 avec le HMOS-2.
Technologie MOS 8500 Introduit en 1985 en tant que version HMOS du 6510 (qui est à son tour basé sur le 6502). Outre la modification du processus, le 8500 est pratiquement identique à la version NMOS du 6510. Il a remplacé le 6510 dans les versions ultérieures du Commodore 64 .
Technologie MOS 8502 Conçu par MOS Technology et utilisé dans le Commodore 128 . Basé sur le MOS 6510 utilisé dans le Commodore 64, le 8502 pouvait fonctionner à une fréquence d'horloge double du 6510. La famille 8502 comprend également les MOS 7501, 8500 et 8501.
Hudson Doux HuC6280 La version améliorée du WDC 65C02 par la société japonaise de jeux vidéo Hudson Soft . Fabriqué pour eux par Seiko Epson et NEC pour le SuperGrafx . Le produit le plus remarquable utilisant le HuC6280 est la console de jeu vidéo TurboGrafx-16 de NEC.

Dérivés 16 bits

Le Western Design Center a conçu et produit actuellement le processeur W65C816S , un successeur 16 bits à cœur statique du 65C02 , avec des fonctionnalités considérablement améliorées. Le W65C816S est une variante plus récente du 65C816, qui est le cœur de l' ordinateur Apple II GS et la base du processeur Ricoh 5A22 qui alimente le Super Nintendo Entertainment System . Le W65C816S intègre des améliorations mineures par rapport au 65C816 qui font que la nouvelle puce n'est pas un remplacement exact et compatible avec le matériel de la précédente. Parmi ces améliorations figurait la conversion en un noyau statique, qui permet d'arrêter l'horloge dans l'une ou l'autre phase sans que les registres ne perdent de données. Disponible auprès des distributeurs de produits électroniques depuis mars 2020, le W65C816S est officiellement évalué pour un fonctionnement à 14 MHz.

Le Western Design Center a également conçu et produit le 65C802 , qui était un noyau 65C816 avec un espace d'adressage de 64 kilo-octets dans un boîtier compatible 65(C)02. Le 65C802 pourrait être installé ultérieurement sur une carte 6502 et fonctionnerait comme un 65C02 à la mise sous tension, fonctionnant en "mode émulation". Comme avec le 65C816, une séquence de deux instructions ferait passer le 65C802 en mode "natif", exposant son accumulateur 16 bits et ses registres d'index , ainsi que d'autres fonctionnalités améliorées du 65C816. Le 65C802 n'a pas été largement utilisé; de nouvelles conceptions ont presque toujours été construites autour du 65C816, ce qui a entraîné l'arrêt de la production du 65C802.

Exemple de code

Le code source du langage assembleur 6502 suivant est destiné à un sous-programme nommé TOLOWER, qui copie une chaîne de caractères à zéro terminal d'un emplacement à un autre, en convertissant les lettres majuscules en lettres minuscules. La chaîne copiée est la "source", et la chaîne dans laquelle la source convertie est stockée est la "destination".

 
 
 
 
 
 
 
 
 
 
 
0080
 
0080  00 04
0082  00 05
 
0600
 
0600  A0 00
 
0602  B1 80
0604  F0 11
 
0606  C9 41
0608  90 06
 
060A  C9 5B
060C  B0 02
 
060E  09 20
 
0610  91 82
0612  C8   
0613  D0 ED
 
 
 
 
0615  38   
0616  60
 
0617  91 82
0619  18   
061A  60
 
061B
; TOLOWER:
;
;   Convert a null-terminated character string to all lower case.
;   Maximum string length is 255 characters, plus the null term-
;   inator.
;
; Parameters:
;
;   SRC - Source string address
;   DST - Destination string address
;
        ORG $0080
;
SRC     .WORD $0400     ;source string pointer
DST     .WORD $0500     ;destination string pointer
;
        ORG $0600       ;execution start address
;
TOLOWER LDY #$00        ;starting index
;
LOOP    LDA (SRC),Y     ;get from source string
        BEQ DONE        ;end of string
;
        CMP #'A'        ;if lower than UC alphabet...
        BCC SKIP        ;copy unchanged
;
        CMP #'Z'+1      ;if greater than UC alphabet...
        BCS SKIP        ;copy unchanged
;
        ORA #%00100000  ;convert to lower case
;
SKIP    STA (DST),Y     ;store to destination string
        INY             ;bump index
        BNE LOOP        ;next character
;
; NOTE: If Y wraps the destination string will be left in an undefined
;  state.  We set carry to indicate this to the calling function.
;
        SEC             ;report string too long error &...
        RTS             ;return to caller
;
DONE    STA (DST),Y     ;terminate destination string
        CLC             ;report conversion completed &...
        RTS             ;return to caller
;
        .END

Bugs et bizarreries

Le 6502 avait plusieurs bugs et bizarreries, qui devaient être pris en compte lors de sa programmation :

  • Les premières révisions du 6502, telles que celles livrées avec certains ordinateurs KIM-1 , présentaient un grave bogue dans l' instruction ROR (rotation de la mémoire à droite ou de l'accumulateur). L'opération de ROR dans ces puces est en fait une instruction ASL (décalage arithmétique à gauche) qui n'affecte pas le bit de retenue dans le registre d'état. MOS a laissé l'instruction en dehors de la documentation de la puce entièrement à cause du défaut, promettant que ROR apparaîtrait sur les puces 6502 à partir de 1976. La grande majorité des puces 6502 existantes aujourd'hui ne présentent pas ce bogue.
  • La famille NMOS 6502 a une variété d' instructions non documentées , qui varient d'un fabricant de puces à un autre. Le décodage d'instruction 6502 est mise en œuvre dans un câblé réseau logique (similaire à un réseau logique programmable ) qui est défini que pour 151 des 256 disponibles opcodes . Les 105 autres déclenchent des actions étranges et parfois difficiles à prévoir, telles que planter le processeur, exécuter deux instructions valides consécutivement, effectuer des mélanges étranges de deux instructions ou simplement ne rien faire du tout. Eastern House Software a développé le "Trap65", un dispositif qui se branche entre le processeur et son socket pour convertir (trap) les opcodes non implémentés en instructions BRK (interruption logicielle). Certains programmeurs ont utilisé cette fonctionnalité pour étendre le jeu d'instructions 6502 en fournissant des fonctionnalités pour les opcodes non implémentés avec un logiciel spécialement écrit intercepté au vecteur 0xFFFE de l'instruction BRK. Tous les opcodes non définis ont été remplacés par des instructions NOP dans le 65C02 , une version CMOS améliorée du 6502, bien qu'avec des tailles d'octets et des temps d'exécution variables. Dans le 65C802/65C816 , les 256 opcodes effectuent des opérations définies.
  • L' instruction de saut indirect de mémoire du 6502 , JMP (<address>), est en partie cassée. Si <adresse> est hex xxFF (c'est-à-dire tout mot se terminant par FF ), le processeur ne sautera pas à l'adresse stockée dans xxFF et xxFF+1comme prévu, mais plutôt à celle définie par xxFF et xx00 (par exemple, JMP ($10FF)sautera à l'adresse stocké dans 10FF et 1000, au lieu de celui stocké dans 10FF et 1100). Ce défaut s'est poursuivi sur toute la ligne NMOS, mais a été corrigé dans les dérivés CMOS.
  • L'adressage indexé NMOS 6502 à travers les limites de page effectuera une lecture supplémentaire d'une adresse invalide. Cette caractéristique peut provoquer des problèmes aléatoires en accédant au matériel qui agit sur une lecture, comme l'effacement des indicateurs de minuterie ou d'IRQ, l'envoi d'une poignée de main E/S, etc. Ce défaut s'est poursuivi sur toute la ligne NMOS, mais a été corrigé dans les dérivés CMOS, en lequel le processeur effectue une lecture supplémentaire du dernier octet d'instruction.
  • Les instructions de lecture-modification-écriture 6502 effectuent un cycle de lecture et deux cycles d'écriture. Tout d'abord, les données non modifiées qui ont été lues sont réécrites, puis les données modifiées sont écrites. Cette caractéristique peut causer des problèmes en accédant deux fois au matériel qui agit sur une écriture. Cette anomalie s'est poursuivie sur toute la ligne NMOS, mais a été corrigée dans les dérivés CMOS, dans lesquels le processeur effectuera deux lectures et un cycle d'écriture. Une pratique de programmation défensive évitera généralement ce problème en n'exécutant pas d'instructions de lecture/modification/écriture sur les registres matériels.
  • Les drapeaux d'état N (résultat négatif), V (débordement de bit de signe) et Z (résultat zéro) n'ont généralement pas de sens lors de l'exécution d'opérations arithmétiques alors que le processeur est en mode BCD , car ces drapeaux reflètent le résultat binaire, et non BCD. Cette limitation a été supprimée dans les dérivés CMOS. Par conséquent, cette caractéristique peut être utilisée pour distinguer un processeur CMOS d'une version NMOS.
  • Si le 6502 se trouve en mode BCD lorsqu'une interruption matérielle se produit, il ne reviendra pas en mode binaire. Cette caractéristique pourrait entraîner des bogues obscurs dans la routine de service d'interruption si elle ne parvient pas à effacer le mode BCD avant d'effectuer des opérations arithmétiques. Par exemple, le Commodore 64 de » Kernel ne gère pas correctement cette caractéristique du processeur, exigeant que IRQs soit invalide ou vectorisés au cours des opérations mathématiques BCD. Cette question a également été abordée dans les dérivés CMOS.
  • Le jeu d'instructions 6502 comprend BRK (opcode $00), qui est techniquement une interruption logicielle (semblable dans l'esprit au mnémonique SWI des processeurs Motorola 6800 et ARM ). BRK est le plus souvent utilisé pour interrompre l'exécution du programme et démarrer un moniteur de langage machine pour les tests et le débogage pendant le développement du logiciel. BRK pourrait également être utilisé pour acheminer l'exécution du programme à l'aide d'une simple table de saut (analogue à la manière dont Intel 8086 et ses dérivés gèrent les interruptions logicielles par numéro). Cependant, si une interruption matérielle se produit lorsque le processeur récupère une instruction BRK, la version NMOS du processeur échouera à exécuter BRK et procédera à la place comme si seule une interruption matérielle s'était produite. Ce défaut a été corrigé dans l'implémentation CMOS du processeur.
  • Lors de l'exécution des instructions JSR (jump to subroutine) et RTS (return from subroutine), l'adresse de retour poussée vers la pile par JSR est celle du dernier octet de l'opérande JSR (c'est-à-dire l'octet de poids fort de l'adresse du sous-programme), plutôt que l'adresse de l'instruction suivante. En effet, la copie proprement dite (du compteur de programme vers la pile puis inversement) a lieu avant l'incrémentation automatique du compteur de programme qui se produit à la fin de chaque instruction. Cette caractéristique passerait inaperçue à moins que le code n'examine l'adresse de retour afin de récupérer des paramètres dans le flux de code (un idiome de programmation 6502 documenté dans le manuel de référence technique ProDOS 8 ). Il reste une caractéristique de 6502 dérivés à ce jour.

Voir également

Remarques

Les références

Citations

Bibliographie

Lectures complémentaires

Fiches techniques et manuels
Livres
Cartes de référence
  • 6502 Carte de référence instantanée à microprocesseur ; James Lewis ; Micro logique ; 2 pages ; 1980. (archives)

Liens externes

Simulateurs / Émulateurs
Planches
FPGA