Table des matières:

Ordinateur minimal 6502 & 6522 (avec Arduino MEGA) Partie 2: 4 étapes
Ordinateur minimal 6502 & 6522 (avec Arduino MEGA) Partie 2: 4 étapes

Vidéo: Ordinateur minimal 6502 & 6522 (avec Arduino MEGA) Partie 2: 4 étapes

Vidéo: Ordinateur minimal 6502 & 6522 (avec Arduino MEGA) Partie 2: 4 étapes
Vidéo: Я превратил Raspberry Pi в дисковод Commodore 1541... 2024, Novembre
Anonim
6502 & 6522 Ordinateur minimal (avec Arduino MEGA) Partie 2
6502 & 6522 Ordinateur minimal (avec Arduino MEGA) Partie 2

À la suite de mon précédent Instructable, j'ai maintenant mis le 6502 sur une carte à bande et ajouté un 6522 Versatile Interface Adapter (VIA). Encore une fois, j'utilise une version WDC du 6522, car elle correspond parfaitement à leur 6502. Non seulement ces nouvelles puces utilisent beaucoup moins d'énergie que les versions MOS d'origine, mais elles peuvent être exécutées à des vitesses plus lentes ou même pas à pas. un programme sans aucun problème.

Le programme Arduino a été écrit à l'origine par Ben Eater (qui a de nombreuses vidéos sur YouTube) et a été modifié par moi pour obtenir ce résultat.

Fournitures

1 x processeur WDC W65C02

1 x adaptateur d'interface polyvalent WDC W65C22

1 x 74HC00N IC (Quad 2 entrées NAND gate) ou similaire

1 x 10 cm de large (35 lignes) Strip board

2 prises DIL 40 broches

1 prise DIL 14 broches

Broches d'en-tête PCB 2.54mm

Embase PCB 2.54mm

Commutateur à bouton-poussoir tactile momentané 1 x 12 mm monté sur carte SPST ou similaire

1 résistance 1K

1 résistance 3K3

2 condensateurs céramiques 0,1 uF

1 x chapiteau de lumière d'eau à 8 voies LED rouge 5mm

Divers fils de couleur pour les connexions

8 fils de liaison mâle - mâle

Étape 1: le circuit imprimé

Le circuit imprimé
Le circuit imprimé
Le circuit imprimé
Le circuit imprimé

Le circuit imprimé est assez compact et le dessous se branche directement sur l'Arduino MEGA. Pour ce faire, les broches sont enfoncées le plus loin possible dans les supports en plastique avant d'être soudées à la face inférieure de la carte. Des broches plus longues auraient pu être utilisées pour cela, mais les broches standard signifient que la carte repose fermement sur le MEGA.

J'ai aligné les circuits intégrés 6502 et 6522 afin qu'ils utilisent les pistes de la carte à bande pour se connecter au MEGA. Il y a aussi quelques connexions pour le 6502 cachées sous l'IC. Lors de la fabrication de la carte, la première chose à faire était de couper les 16 bandes qui se connecteront à la double rangée de prises de l'Arduino. Les 2 extérieurs n'ont pas besoin d'être coupés car les 5v et Gnd sont des deux côtés. Soudez ensuite les 2 rangées de 18 broches sur la face inférieure, et les 2 rangées de 18 douilles sur la face supérieure.

Après cela, les prises DIL ont été soudées en place et les pistes coupées entre elles. J'aurais pu sauver une connexion en plaçant la broche 14 du 74HC00 sur la même piste que 5v. Je n'ai coupé les pistes que lorsque j'étais sûr qu'elles devaient l'être pendant que je soudais les fils de connexion. Cependant, les choses ne se passent pas toujours comme prévu, j'ai initialement conçu la planche à bandes de la planche à pain précédente en utilisant les broches 2, 3 et 7 de l'Arduino, mais celles-ci ne s'alignent pas avec les trous de la planche à bandes, donc j'ai dû utiliser broches 18, 31 et 37. D'où les liens sur ma carte sur 31 et 37. Vous pourriez vous demander pourquoi je n'ai pas utilisé l'une des broches inutilisées (23, 24 etc.) pour l'horloge, c'est parce qu'elles ne supportent pas interruptions, donc dû utiliser les broches 18, 19, 20 ou 21 qui le font. Heureusement, ces 4 broches s'alignent avec les trous de la carte à bande et gardent le tout compact. La broche 18 est également la plus éloignée de tous les autres fils.

Vous pouvez également remarquer que mon tableau complété n'est pas exactement le même que mon diagramme. C'est parce que je suivais le schéma de quelqu'un d'autre. D'où les connexions au 74HC00. J'ai également ajouté une LED d'alimentation et 2 rangées de prises supplémentaires pour Gnd et 5v ainsi que quelques condensateurs supplémentaires.

J'aurais pu connecter les 2 prises de données, mais cela signifierait beaucoup plus de fils traversant la carte. J'ai opté pour 8 fils de liaison pour le faire à titre temporaire.

Les ports 6522 A et B ont des prises soudées à leurs pistes afin que les marques de LED puissent être facilement insérées.

Il y a beaucoup moins de fils maintenant qu'il n'y en avait sur la version planche à pain.

Étape 2: Théorie de la programmation

Théorie de la programmation
Théorie de la programmation

Le 6522 possède deux ports d'E/S ainsi que de nombreuses autres fonctionnalités, mais les ports A et B sont facilement accessibles. Pour sortir des données sur le port, le registre de direction des données (DDR) doit être défini en conséquence et les données envoyées au port lui-même.

Avec la configuration ci-dessus, le 6522 est situé à 000 $E.

Pour sortir des données sur le port B, le DDR à $E002 est réglé sur $FF (255 - toutes les sorties) et les données sont envoyées à $E000.

Pour sortir des données sur le port A, le DDR à $E003 est réglé sur $FF (255 - toutes les sorties) et les données sont envoyées à $E001.

Le code ci-dessous charge $FF dans le registre 6502 A et l'écrit dans la DDR B à $E002. Il charge ensuite 55 $ et l'écrit dans ORB. Le code est tourné (donnant $AA) et écrit dans ORB. Le programme remonte à 1005 $ et se répète indéfiniment. REMARQUE: la DDR n'a besoin d'être initialisée qu'une seule fois.

Désassembler Hexdump d'adresse

1000 $ a9 ff LDA #$ff 1002 $ 8d 02 e0 STA $e002 1005 $ a9 55 LDA #55 $ 1007 $ 8d 00 e0 STA $e000 100 $a 6a ROR A 100b 8d 00 e0 STA $e000 100 $e 4c 05 10 JMP 1005 $

55 $ en binaire est 010101010 et $AA est 10101010, ce qui fait alterner les LED 4 allumées, 4 éteintes.

Solution rapide et sale:

Remplacez le 74HC00 (Quad 2 entrées NAND Gate) par un 74HC08 (Quad 2 entrées AND Gate) et le 6522 se situe désormais à 6000$ au lieu de E000$. Cela le déplace des 32K supérieurs aux 32K inférieurs de la mémoire adressable du 6502.

Étape 3: Le programme et la sortie Arduino

Le programme et la sortie Arduino
Le programme et la sortie Arduino

Comme le 6502 n'a pas de RAM pour lire, l'Arduino fournit le programme à lire. Lorsqu'une impulsion d'horloge est détectée sur la broche 18, l'Arduino met les données du programme sur le bus de données (broches Arduino 39, 41, 43, 45, 47, 49, 51 et 53). Le 6502 génère ses propres adresses qui ne sont surveillées par l'Arduino que sur les broches paires 22 à 52. L'Arduino fournit également l'impulsion d'horloge sur la broche 37. La ligne R/W du 6502 est surveillée sur la broche 31.

Comme l'Arduino fournit les données, jusqu'à présent, il n'a pas été possible de faire en sorte que le 6502 entre les données du VIA (à moins que vous ne le sachiez mieux).

Le programme Arduino est ci-dessous et un exemple de sortie du moniteur série est ci-dessus.

Étape 4: Conclusion

Encore une fois, j'ai essayé de montrer comment configurer un "ordinateur 6502" minimal.

À ce stade, le 6502 compte toujours sur l'Arduino pour lui fournir un programme et une impulsion d'horloge pour qu'il fonctionne.

C'est un pas de plus que lorsque je l'ai installé sur une planche à pain.

Je n'ai pas utilisé le 74HC373 cette fois mais le 6522 plus complexe pour verrouiller les sorties de données. Le 6522 possède également deux ports d'E/S.

J'ai l'intention d'aller plus loin dans ce projet en installant de la SRAM ou une EEPROM.

Conseillé: