Aller au contenu
Eliott65wiki
Sommaire

La machine : la Neo6502kbd

Une vraie 6502, mais aucune puce de mémoire autour : tout ce que la 6502 voit, c’est le RP2040 qui le lui montre. Ce que nous savons de la carte, appris dans les schémas puis vérifié au banc.

Dans cette page

Les composants

La Neo6502kbd (révision A) est la version « clavier intégré » de la Neo6502 d’Olimex. Ses pièces principales, d’après la nomenclature et le schéma KiCad publiés par Olimex :

ComposantRôle
W65C02S (TQFP44)le processeur 6502, version CMOS moderne de WDC
RP2040le microcontrôleur à deux cœurs ARM Cortex-M0+ qui fait tout le reste
P25Q16 (2 Mo)la mémoire flash du RP2040, où réside le firmware
3 × 74LVC245des tampons de bus : les aiguillages entre la 6502 et le RP2040
FE1.1sun hub USB à 4 ports
CH217Kl’interrupteur d’alimentation des ports USB, avec limitation de courant
Prise HDMIla sortie vidéo, pilotée directement par le RP2040
Haut-parleur (transducteur), connecteur UEXTle son, et des extensions I2C, SPI et série

Le clavier du boîtier est un clavier USB ordinaire, branché sur un des ports du hub. La carte n’a aucun contrôleur de clavier dédié.

Une 6502 sans mémoire

Sur la plupart des ordinateurs à 6502, le processeur est entouré de ROM et de RAM. Ici, rien de tel. La 6502 est reliée à trois 74LVC245, et ces trois tampons sont reliés aux mêmes huit broches du RP2040 (GPIO 0 à 7). Le RP2040 ouvre un tampon à la fois :

  1. le premier laisse passer l’adresse basse (A0 à A7) ;
  2. le deuxième, l’adresse haute (A8 à A15) ;
  3. le troisième, la donnée (D0 à D7), dans un sens ou dans l’autre.

Les deux premiers ne fonctionnent que dans un sens (de la 6502 vers le RP2040). Pour le troisième, c’est la 6502 qui choisit le sens, par sa broche R/W# : le RP2040 ne doit donc envoyer une donnée que quand la 6502 lit.

Le RP2040 produit aussi l’horloge de la 6502 (PHI2, sur GPIO 21) et tient ses broches de RESET, d’IRQ et de NMI. Il contrôle donc entièrement le processeur : il peut le démarrer, l’interrompre, et même le geler en ne répondant pas à un cycle.

Ce qui n’est pas relié

Quatre broches de la 6502 (SYNC, RDY, BE, SOB) ne vont pas au RP2040. La plus regrettable est SYNC, qui signale la lecture d’une instruction : sans elle, le RP2040 ne peut pas distinguer une instruction d’une donnée lue en mémoire.

Les broches IRQ, RESET et NMI sont partagées avec le SPI du connecteur UEXT, par des résistances de 0 Ω sur la Neo6502kbd. Les 30 broches du RP2040 sont toutes occupées : bus, sélection des tampons, R/W#, HDMI, son, horloge, UEXT.

La 6502 en 3,3 volts

La 6502 de la carte est une W65C02S6TQG-14. Le « 14 » désigne 14 MHz garantis sous 5 V. Or la carte n’a qu’un seul rail logique, en 3,3 V, et à cette tension WDC ne garantit que 8 MHz. La fiche précise que le cœur est statique : il n’a pas de fréquence minimale et supporte qu’on arrête son horloge aussi longtemps qu’on veut. Eliott65 s’en sert sans cesse.

Notre banc de mesure a montré que cette puce tient au moins 10,5 MHz en 3,3 V, au-delà de la garantie. Ce chiffre vaut pour notre exemplaire ; voir Le bus.

L’USB : un hub, et une prise qui change tout

L’unique port USB du RP2040 va au hub FE1.1s, qui le répartit sur les quatre prises USB-A. Le RP2040 est alors l’hôte : c’est lui qui interroge le clavier et la clé.

La même liaison va aussi à la prise PGM. Quand un câble y est branché, la tension du PC met le hub en pause (reset), et le RP2040 devient un périphérique du PC. Conséquence pratique : avec un câble sur PGM, plus de clavier.

Le hub est relié en Full Speed ; le clavier est un appareil Low Speed. Pour lui parler à travers le hub, chaque échange doit être précédé d’un paquet spécial, le PRE. Le pilote d’Eliott65 le gère.

La sortie HDMI

Il n’y a pas de puce vidéo : les quatre paires différentielles de la prise HDMI (trois couleurs et l’horloge) sont reliées directement aux broches 12 à 19 du RP2040, à travers des résistances de 270 Ω. C’est au logiciel de fabriquer le signal, bit par bit. Voir La vidéo.

Les autres broches de la prise (DDC, CEC, HPD) ne vont qu’à des pastilles de test : le RP2040 ne peut pas lire l’EDID de l’écran, la liste des modes qu’il accepte.

Le haut-parleur

Un petit transducteur magnétique (QMB-09B-03), commandé par GPIO20 à travers un transistor. Il faut lui fournir un signal carré ; il sonne le plus fort vers 2,7 kHz. Voir Le son.

La flash et la sonde

La flash est une Puya P25Q16 de 2 Mo. Détail qui a compté : l’OpenOCD 0.12.0 des distributions ne la reconnaît pas, seule la version de développement sait la programmer. Le connecteur SWD1 donne accès au port de débogage du RP2040 ; c’est par lui que passent le flashage et presque tous nos outils. Voir Les outils du banc.

Le firmware présent sur la carte avant Eliott65 a été sauvegardé en entier (2 Mo, avec son empreinte SHA-256) avant tout essai : il peut être restauré par la sonde.

Sources dans le dépôt : docs/journal/00-synthese.md, docs/journal/01-materiel.md, docs/journal/08-video.md, docs/journal/09-usb.md, docs/etude/ETUDE-Eliott65-Neo6502kbd.md.