Inhaltsverzeichnis:

6502 & 6522 Minimal Computer (mit Arduino MEGA) Teil 2: 4 Schritte
6502 & 6522 Minimal Computer (mit Arduino MEGA) Teil 2: 4 Schritte

Video: 6502 & 6522 Minimal Computer (mit Arduino MEGA) Teil 2: 4 Schritte

Video: 6502 & 6522 Minimal Computer (mit Arduino MEGA) Teil 2: 4 Schritte
Video: A 6502-Based Single Board Computer 2024, Juli
Anonim
6502 & 6522 Minimal Computer (mit Arduino MEGA) Teil 2
6502 & 6522 Minimal Computer (mit Arduino MEGA) Teil 2

Im Anschluss an mein vorheriges Instructable habe ich jetzt den 6502 auf ein Streifenbrett gelegt und einen 6522 Versatile Interface Adapter (VIA) hinzugefügt. Auch hier verwende ich eine WDC-Version des 6522, da sie perfekt zu ihrem 6502 passt. Diese neuen Chips verbrauchen nicht nur viel weniger Strom als die ursprünglichen MOS-Versionen, sondern können auch mit geringeren Geschwindigkeiten betrieben oder sogar durchgeschaltet werden ein Programm ohne Probleme.

Das Arduino-Programm wurde ursprünglich von Ben Eater geschrieben (der viele Videos auf YouTube hat) und wurde von mir modifiziert, um dieses Ergebnis zu erzielen.

Lieferungen

1 x WDC W65C02 Prozessor

1 x WDC W65C22 Vielseitiger Schnittstellenadapter

1 x 74HC00N IC (Quad 2-Input NAND Gate) oder ähnlich

1 x 10cm breit (35 Zeilen) Streifenbrett

2 x 40-polige DIL-Buchsen

1 x 14-polige DIL-Buchse

Leiterplatten-Stiftstifte 2,54 mm

Leiterplatten-Stiftbuchsen 2,54 mm

1 x 12 mm kurzzeitiger taktiler Druckknopfschalter PCB-montierter SPST oder ähnlich

1 x 1K Widerstand

1 x 3K3-Widerstand

2 x 0,1 uF Keramikkondensatoren

1 x 8-Wege-Wasserlichtzelt 5mm rote LED

Verschiedene farbige Kabel für Anschlüsse

8 männlich - männlich Verbindungsdrähte

Schritt 1: Die Platine

Die Platine
Die Platine
Die Platine
Die Platine

Die Platine ist recht kompakt und die Unterseite wird direkt in den Arduino MEGA gesteckt. Dazu werden die Pins so weit wie möglich in die Kunststoffhalterungen geschoben, bevor sie mit der Platinenunterseite verlötet werden. Dafür hätte man auch längere Pins verwenden können, aber die Standardpins sorgen dafür, dass die Platine fest auf der MEGA aufliegt.

Ich habe die 6502- und 6522-ICs so ausgerichtet, dass sie die Streifenleiterbahnen für die Verbindung mit dem MEGA verwenden. Unter dem IC sind auch einige Anschlüsse für den 6502 versteckt. Bei der Herstellung der Platine mussten zunächst die 16 Streifen geschnitten werden, die mit der doppelten Buchsenreihe des Arduino verbunden werden. Die äußeren 2 müssen nicht geschnitten werden, da sich 5v und Gnd auf beiden Seiten befinden. Als nächstes löten Sie die 2 Reihen mit 18 Stiften auf der Unterseite und die 2 Reihen mit 18 Buchsen auf der Oberseite.

Danach wurden die DIL-Buchsen eingelötet und die Leiterbahnen dazwischen geschnitten. Ich hätte eine Verbindung speichern können, indem ich Pin 14 des 74HC00 auf dieselbe Schiene wie 5V gelegt hätte. Ich habe die Spuren nur geschnitten, wenn ich sicher war, dass sie sein müssen, während ich die Anschlussdrähte lötete. Die Dinge laufen jedoch nicht immer nach Plan, ich habe ursprünglich das Streifenbrett vom vorherigen Brotbrett mit den Pins 2, 3 und 7 des Arduino entworfen, aber diese stimmen nicht mit den Löchern im Streifenbrett überein, also musste es verwendet werden Pins 18, 31 und 37. Daher die Links auf meinem Board auf 31 und 37. Sie fragen sich vielleicht, warum ich keinen der unbenutzten Pins (23, 24 usw.) für die Uhr verwendet habe, weil sie nicht unterstützen Interrupts, musste also Pin 18, 19, 20 oder 21 verwenden, die dies tun. Glücklicherweise fluchten diese 4 Stifte mit den Löchern in der Streifenplatine und halten alles kompakt. Pin 18 ist auch am weitesten von allen anderen Drähten entfernt.

Sie werden vielleicht auch feststellen, dass mein fertiges Board nicht genau mit meinem Diagramm übereinstimmt. Dies liegt daran, dass ich dem Diagramm einer anderen Person gefolgt bin. Daher die Verbindungen zum 74HC00. Ich habe auch eine Power-LED und 2 zusätzliche Buchsenreihen für Gnd und 5V sowie ein paar weitere Kondensatoren hinzugefügt.

Ich hätte die 2 Datenbuchsen anschließen können, aber das würde viel mehr Drähte bedeuten, die die Platine kreuzen. Ich habe mich für 8 Verbindungsdrähte entschieden, um dies vorübergehend zu tun.

Die 6522 Ports A und B sind mit angelöteten Sockeln versehen, so dass LED-Marken einfach eingesteckt werden können.

Es gibt jetzt viel weniger Drähte als bei der Brotplatinenversion.

Schritt 2: Programmiertheorie

Programmiertheorie
Programmiertheorie

Der 6522 hat zwei I/O-Ports sowie viele andere Funktionen, aber Port A und B sind leicht zugänglich. Um Daten auf dem Port auszugeben, muss das Data Direction Register (DDR) entsprechend eingestellt und die Daten an den Port selbst gesendet werden.

Mit der obigen Einrichtung befindet sich der 6522 bei $E000.

Um Daten an Port B auszugeben, wird der DDR an $E002 auf $FF (255 - alle Ausgänge) gesetzt und Daten werden an $E000 gesendet.

Um Daten an Port A auszugeben, wird der DDR an $E003 auf $FF (255 - alle Ausgänge) gesetzt und Daten werden an $E001 gesendet.

Der folgende Code lädt $FF in das 6502 A-Register und schreibt es bei $E002 in DDR B. Es lädt dann $55 und schreibt es in den ORB. Der Code wird rotiert (was $AA ergibt) und in den ORB geschrieben. Das Programm springt bis zu $1005 zurück und wiederholt sich endlos. HINWEIS: Der DDR muss nur einmal initialisiert werden.

Adresse Hexdump-Demontage

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

$55 in Binär ist 010101010 und $AA ist 10101010, was dazu führt, dass die LEDs abwechselnd 4 ein, 4 aus.

Schnelle und schmutzige Lösung:

Ersetzen Sie das 74HC00 (Quad-2-Eingangs-NAND-Gatter) durch ein 74HC08 (Quad-2-Eingangs-UND-Gatter) und der 6522 liegt jetzt bei 6000 $ statt E000 $. Dadurch wird es von den oberen 32 KB in die unteren 32 KB des adressierbaren Speichers des 6502 verschoben.

Schritt 3: Das Arduino-Programm und die Ausgabe

Das Arduino-Programm und die Ausgabe
Das Arduino-Programm und die Ausgabe

Da der 6502 keinen RAM zum Lesen hat, liefert der Arduino das Programm zum Lesen. Wenn an Pin 18 ein Takt erkannt wird, legt der Arduino die Programmdaten auf den Datenbus (Arduino-Pins 39, 41, 43, 45, 47, 49, 51 und 53). Der 6502 generiert eigene Adressen, die vom Arduino nur an den geraden Pins 22 bis 52 überwacht werden. Der Arduino liefert auch den Takt an Pin 37. Die R/W-Leitung des 6502 wird an Pin 31 überwacht.

Da der Arduino die Daten liefert, war es bisher nicht möglich, den 6502 dazu zu bringen, Daten vom VIA einzugeben (es sei denn, Sie wissen es besser).

Das Arduino-Programm ist unten und eine Beispielausgabe vom Serial Monitor ist oben.

Schritt 4: Fazit

Wieder habe ich versucht zu zeigen, wie man einen minimalen "6502 Computer" einrichtet.

Zu diesem Zeitpunkt verlässt sich der 6502 noch auf den Arduino, um ihn mit einem Programm und einem Takt zu versorgen, damit er läuft.

Es ist ein Schritt weiter, als wenn ich es auf einem Brotbrett aufstelle.

Ich habe diesmal nicht den 74HC373 verwendet, sondern den komplexeren 6522, um die Datenausgänge zu verriegeln. Auch der 6522 hat zwei I/O-Ports.

Ich beabsichtige, dieses Projekt weiterzuführen, indem ich etwas SRAM oder ein EEPROM installiere.

Empfohlen: