Hello à tous,
Il y a quelques temps je suis tombé sur
ce site qui parlait du 6502, proc que je ne connaissais pas vu que gamin j'avais eu un Amstrad équipé d'un Z80. C'est pourtant le proc qui a équipé un des premiers Apple, la console Atari 2600 et le Commodore 64. Un truc amusant avec ces vieux proc est qu'ils ont été faits par des humains pour des humains. Dans le cas du 6502 il a été fait à la main, la matrice a été découpée à la mimine puis réduite à la taille de gravure. Les registres et le jeu d'instructions sont très simples et sont conçus pour que ce soient des humains qui développent dessus et ça les rend intéressant car c'est probablement la dernière génération de CPU où c'est le cas ce qui veut dire qu'il restent accessibles si on veut apprendre comment programmer ou fonctionne un processeur. On assiste depuis quelques années à une réappropriation de ce savoir faire à des fins d'apprentissage. Des fous furieux ont reverse-engineeré le proc au microscope pour en établir
le plan, des plus furieux ont même construit une
version discrète du 6502. Suite à ça, Ben Heater a réalisé
une série de vidéos sur comment construire un ordinateur qui affiche Hello World à base du 6502 et propose même un Kit. Les vidéos de Ben Heater sont tout simplement des références de vidéos didactiques, il a créé une autre série de vidéos où il fabrique un processeur, il y a même quelques gamins qui suite à ça ont construit et programmé leur
propre ordinateur avec juste des portes logiques ( oui oui avec une sortie VGA et une entrée clavier PS/2 oui Monsieur ).
Bonne bidouille

Amicalement,
Grégoire
EditJe vais profiter de la première page de ce post pour consigner l'état de ma connaissance sur le 6502 au fur et à mesure que je creuse le sujet.
Pourquoi le 6502 en 2019 ?Le 65C02 est un processeur 8 bits dont la conception date de 75 et en 2019 ça fait longtemps qu'on fait mieux alors pourquoi c'est intéressant ? Comme je le disais plus haut le premier point est que ces architectures sont facilement accessibles aux néophytes. Il y a même des pro qui disent utiliser ce processeur là où des microcontrôleurs sont insuffisants ou trop contraignants. Aujourd'hui on pourrait tout faire avec des Arduino par exemple sauf que même si l'ATMEGA est bien plus puissant que le pauvre 65C02 et bien plus accessible, on n'a pas la main directement sur le matériel. Or, fabriquer un ordinateur c'est chez moi un rêve de gamin, comprendre l'adressage, les interruptions fabriquer son propre matériel et pourquoi pas, coder son propre OS.
Ceci étant dit, pourquoi le 6502 ? Il y a toujours le très connu Z80, le 8080 ou d'autres proc moins connus comme le 6800 alors pourquoi celui là ? Je vais reprendre
Nick Morgan :
Nick Morgan a écrit:
Then why 6502? Why not a useful assembly language, like x86? Well, I don’t think learning x86 is useful. I don’t think you’ll ever have to write assembly language in your day job - this is purely an academic exercise, something to expand your mind and your thinking. 6502 was originally written in a different age, a time when the majority of developers were writing assembly directly, rather than in these new-fangled high-level programming languages. So, it was designed to be written by humans. More modern assembly languages are meant to written by compilers, so let’s leave it to them. Plus, 6502 is fun. Nobody ever called x86 fun.
Quelle est la différence entre le 6502 et le 65C02 ?Le 6502 était fait avec des portes NMOS ce qui est assez énergivore et complètement obsolète. Le 65C02 utilise la technologie CMOS et apporte quelques corrections et ajouts au jeu d'instructions du 6502 ainsi que des modes d'adressage supplémentaires. Le processeur original pouvait être cadencé jusqu'à 4MHz, le WDC65C02 peut monter jusqu'à 17MHz. Parmi les instructions ajoutées, il y en a la possibilité d'interagir entre les registres X et Y avec la stack ce qui simplifie quand même pas mal la vie et aussi une instruction “Wait Interrupt” qui met le processeur en veille en attendant une interruption. Ce mode est d'autant plus intéressant que le processeur est tout de suite prêt à agir lorsque l'interruption arrive là où il doit souvent faire des opérations avant de pouvoir traiter une interruption « normale ».
En quoi l'architecture du 6502 est intéressante ?Ce processeur ne propose que 3 registres 8 bits en écriture : un accumulateur et 2 registres d'index, plus un registre de stack et un registre d'état tous les deux en lecture. C'est très peu comparé au Z80 qui propose 3 paires de registres et des opérations sur 16 bits. Cette simplicité est un compromis avec la performance. Croyez le ou pas, le 6502 ne propose pas d'opération pour l'addition ( ou la soustraction ) mais une sous instruction : Add with Carry. Cette simplicité permet au processeur de rester simple et de faire ses opérations en 1 à 3 cycles d'horloge là où toute opération sur le Z80 par exemple prend 4 cycles. Le manque de registre est pallié par un mode d'adressage particulier : le Zero Page Indexing. Il est possible de faire appel à la mémoire en ne passant qu'un octet en paramètre. Le processeur ajoute de lui même le double 0 devant et cela permet d'adresser les 256 premiers octets de la mémoire. Cette opération est relativement rapide et permet de voir ces 256 octets comme autant de registres 8 bits disponibles.
Code:
LDA #$12 ; Charge la valeur hexa 0x12 dans l'accumulateur - 2 cycles
CLC ; CLear Carry bit, indispensable pour l'addition si on ne veut pas tenir compte d'une retenue précédente - 1 cycle
ADC $32 ; ajoute à l'accumulateur le contenu de l'adresse 0x0032 - 3 cycles + 2 cycles pour lire la mémoire
STA $32 ; sauve l'accumulateur à l'adresse 0x0032 - 3 cycles
Un autre astuce est que les accès mémoire peuvent se faire de manière indexées, c'est à dire par exemple :
Code:
LDX #$A
STA $30,X ; stocke le registre A à l'adresse $30 + $A = $3A
De cette façon, avec l'opération ADC qui garde la retenue, il est relativement simple de faire des opérations sur plusieurs octets, par exemple pour additionner 2 nombres de 16 bits judicieusement stockés en mémoire :
Code:
LDX #$2 ; on met dans X le nombre d'octets à parcourir
CLC ; on efface la retenue
add:
LDA $30,X ; on charge l'accumulateur avec l'octet X du premier nombre
ADC $40,X ; on l'additionne à l'octet X du deuxième nombre avec la retenue précédente
STA $50,X ; on stocke le résultat dans un troisième nombre à l'octet X
DEX ; on décrémente X
BNE add ; si X <> 0 alors on boucle sur “add”
BRK