Introduction
Le microprocesseur 6502 de l'entreprise MOS Technology est un microprocesseur 8 bits connu pour avoir été vendu au 1/6 du prix des microprocesseurs Intel et Motorola durant les années 1970. Il a été conçu par une équipe menée par l'ingénieur Chuck Peddle (la même personne ayant développé le Motorola 6800. Il fut utilisé dans de nombreux micro-ordinateurs durant les 1970, comme l'Apple I par exemple. De plus, les premiers micro-ordinateurs de la famille Apple II et les micro-ordinateurs Atari 8 bits (Atari 400, Atari 800,...) et les micro-ordinateurs de la famille Commodore PET et le Commodore VIC-20 utilisaient également se microprocesseur.
Fiche technique
Voici les caractéristiques de la puce «6502» de «MOS Technology»:
Spécification | Description |
---|---|
Concepteur | MOS Technology |
Fabricant | Rockwell et Synertek |
Modèle | 6502 |
Date de conception | 1975 |
Bus de données | 8 bits |
Bus d'adressage | 16 bits |
Cadencé à | 1 Mhz à 1,55 Mhz |
Schéma des broches
Voici le schéma des broches de la puce 6502 de l'entreprise MOS Technology :
Architecture
Le microprocesseur 6502 effectue des transferts en 8 bits de données ou est exploités au cours de chaque cycle d'instruction ou cycle d'opération. Tous les périphériques de la famille MCS650X fonctionnent en données de 8 bits à la fois, bien que certaines opérations ressemblent à des opérations série ou 16 bits. L'industrie informatique traite les combinaisons de données à 8 bits sous un terme connu sous le nom d'«octet» (en français) ou «byte» (en anglais). Dans de nombreux gros ordinateurs fonctionnant simultanément sur plusieurs octets de données, le nombre d'octets transférés et exploités par la machine en parallèle est appelé un mot (en français) ou word (en anglais). Étant donné que ces microprocesseurs sont des microprocesseurs à 8 bits, les mots et les octets sont de longueur égale. Un mot de 16 bits est composé de deux octets de 8 bits.
Modes d'adressage
Le 6502 dispose de 15 modes d'adressage (deux de plus que la famille équivalente NMOS). Dans la discussion suivante de ces modes d'adressage, une expression entre crochets suit le titre du mode. Cette expression est le terme utilisé dans la table Set Op Code Matrix de l'instruction pour faciliter l'identification du mode d'adressage réel utilisé par l'instruction.
Le bus de données, l'accumulateur et l'unité arithmétique
Le bus de données
Les données doivent être transférées entre l'accumulateur et des sources extérieures en passant par le microprocesseur vers 8 lignes appelées bus de données. Les sources externes comprennent le programme contrôlant le microprocesseur, la mémoire étant utilisée comme entreposage intermédiaire pour les registres internes lorsqu'ils doivent être utilisés dans une opération en cours, et les communications réelles avec le monde via les ports d'entrée/sortie. La seule opération du bus de données est de transférer des données entre la mémoire et les registres internes du microprocesseur tels que l'accumulateur. La figure suivante montre la communication de base entre l'accumulateur, A, et la mémoire, M, via l'utilisation de 8 lignes de données bidirectionnelles appelées bus de données :
L'accumulateur
L'accumulateur est un registre dans lequel sont conservées des données sur lesquelles sont effectuées des opérations. Toutes les opérations entre les emplacements de mémoire doivent être communiquées via l'accumulateur ou l'un des registres d'index auxiliaires. L'accumulateur est utilisé comme entreposage temporaire pour déplacer des données d'un emplacement de mémoire à un autre. Par conséquent, la première utilisation de l'accumulateur (A) consiste simplement à transférer des données de la mémoire à l'accumulateur ou de l'accumulateur à la mémoire. On peut introduire des données dans l'accumulateur, effectuer des opérations telles que ET/OU dessus, tester les résultats de ces opérations, y placer de nouveaux bits ou les transférer vers le monde extérieur. Il sert d'entreposage intermédiaire pour une série d'opérations telles que l'addition de 2 valeurs ; où l'un d'eux est chargé dans l'accumulateur, le second y est ajouté, et les résultats entreposés dans l'accumulateur. L'accumulateur remplit en réalité deux fonctions : 1) C'est l'un des principaux points d'entreposage de la machine ; 2) C'est le point auquel les résultats intermédiaires sont normalement entreposés.
- LDA : Accumulateur de charge avec mémoire : Lorsque l'instruction LDA est exécutée par le microprocesseur, les données sont transférées de la mémoire vers l'accumulateur et entreposées dans l'accumulateur. Plutôt que de continuer à donner une image verbale de l'opération, on introduit la représentation symbolique M → A, où la flèche signifie « transfert vers ». Par conséquent, la représentation symbolique de l'instruction LDA est lue, "mémoire transférée à l'accumulateur". L'instruction LDA affecte le contenu de l'accumulateur, n'affecte pas les drapeaux de retenue ou de débordement ; définit le drapeau zéro si l'accumulateur est à zéro en raison du LDA, sinon réinitialise le drapeau zéro ; positionne le drapeau négatif si le bit 7 de l'accumulateur est à 1, sinon réinitialise le drapeau négatif. Bien qu'il reste encore à développer le concept de modes d'adressage, à des fins de référence, LDA est une instruction du «Groupe 1» et dispose de tous les principaux modes d'adressage de la machine. Ces modes d'adressage incluent Immédiat ; Absolu; Zéro page ; Absolu,X; Absolu,Y; Page zéro,X; Indirect indexé ; et indexé indirect.
- STA Entreposer l'accumulateur en mémoire : Cette instruction transfère le contenu de l'accumulateur en mémoire. La représentation symbolique de cette instruction est A → M. Cette instruction n'affecte aucun des drapeaux du registre d'état du microprocesseur et n'affecte pas l'accumulateur. Il s'agit d'une instruction « Groupe 1 » et dispose des modes d'adressage suivants : Absolu ; Zéro page ; Absolu,X; Absolu,Y; Page zéro,X; Indirect indexé ; et indexé indirect.
L'unité arithmétique
L'une des fonctions attendues de tout micro-ordinateur est la capacité de calculer ou d'effectuer des opérations arithmétiques. Même dans un problème de commande simple, on trouve souvent utile d'ajouter 2 nombres pour déterminer qu'une valeur a été atteinte, ou de soustraire 2 nombres pour calculer une nouvelle valeur qui doit être obtenue. De plus, de nombreux problèmes impliquent une forme rudimentaire d'arithmétique décimale ou binaire ; il est certain que de nombreuses applications du microprocesseur impliqueront les deux. Le MCS6502 possède une unité arithmétique de 8 bits s'interfaçant avec l'accumulateur, comme illustré ci dessous :
L'unité arithmétique est composée de plusieurs parties principales. Le plus important d'entre eux est le circuit nécessaire pour effectuer une addition de complément à deux de valeurs parallèles de 8 bits et générer un résultat binaire de 8 bits parallèles plus une retenue. Cependant, un examen rapide du concept de « porter » s'impose. La plus grande intervalle pouvant être représentée dans un nombre de 8 bits est 256 avec des valeurs comprises entre 0 et 255. Si nous ajoutons 2 nombres donnant une somme supérieure à 255, nous représentons le résultat avec un neuvième bit plus le 8 bits de l'excédent sur 255. Le neuvième bit est appelé retenue.
ADC : Ajouter de la mémoire à l'accumulateur avec retenue
Cette instruction ajoute la valeur de mémoire et la retenue de l'opération précédente à la valeur de l'accumulateur et entrepose le résultat : dans l'accumulateur. La représentation symbolique de cette instruction est A + M + C → A. Cette instruction affecte l'accumulateur ; définit le drapeau de retenue lorsque la somme d'une addition binaire dépasse 255 ou lorsque la somme d'une addition décimale dépasse 99, sinon la retenue est réinitialisée. L'indicateur de débordement est activé lorsque le signe ou le bit 7 est modifié en raison du résultat supérieur à +127 ou -128, sinon le débordement est réinitialisé. Le drapeau négatif est positionné si le résultat de l'accumulateur contient le bit 7 activé, sinon le drapeau négatif est réinitialisé. Le drapeau zéro est défini si le résultat de l'accumulateur est 0, sinon l'indicateur zéro est réinitialisé. Il s'agit d'une instruction "Groupe 1" et possède les modes d'adressage suivants : Immédiat ; Absolu; Zéro page ; Absolu,X; Absolu,Y; Page zéro,X; Indirect indexé ; et indexé indirect. Le neuvième bit du résultat est entreposé dans le drapeau de retenue et les 8 bits restants résident dans l'accumulateur. Le drapeau de retenue peut être considéré comme un bit de drapeau étant éloigné de l'accumulateur lui-même mais étant directement affecté par les opérations de l'accumulateur comme s'il s'agissait d'un neuvième bit dans l'accumulateur. La principale raison pour ne pas considérer le bit de retenue comme simplement un neuvième bit dans l'accumulateur est que l'on a le contrôle du programme sur son état en pouvant régler (à "1") ou effacer (à "0") le bit et, de bien entendu, il ne fait pas partie de l'accumulateur 8 bits dans les opérations de transfert de données.
Ajout de précision multiple
Pour effectuer l'addition de 2 nombres, on envoie au microprocesseur une instruction ADC additionnant la mémoire et l'accumulateur et entrepose les résultats dans l'accumulateur avec le bit de retenue mis à 1 si les résultats dépassent 255. Pour ajouter des nombres ayant une valeur nettement supérieure à 255, il serait nécessaire de représenter ces nombres par une série de nombres en série de 8 bits. Avec les 16 bits en 2 numéros série 8 bits, il est possible de représenter des nombres binaires de valeur supérieure à 65 000. Afin d'ajouter deux nombres de 16 bits ensemble et d'accomplir ainsi une addition en double précision, on charge d'abord l'octet le plus bas d'un nombre dans l'accumulateur, efface le drapeau de retenue, puis ajoute le deuxième nombre au premier nombre dans l'accumulateur en utilisant la commande ADC. On entreposerait alors ce résultat dans un autre emplacement mémoire en utilisant la commande STA. Le drapeau de retenue représenterait maintenant la retenue de l'octet le plus bas à l'octet le plus élevé. On pourrait alors charger l'octet de poids fort du premier nombre, rajouter avec retenue à la valeur haute du deuxième nombre, et entreposer le résultat dans l'octet de poids fort du résultat. Ainsi, on peut voir que la retenue nous permet d'effectuer autant d'arithmétique de précision que nécessaire.
Programmation
Langage | Description |
---|---|
Assembleur 6502 | Langage Assembleur pour le microprocesseur 6502 |
Voir également
Langage de programmation - Turbo Pascal - Émulateur - Émulateur de microprocesseur 6502