Inhaltsverzeichnis:
- Lieferungen
- Schritt 1: Das Konzept
- Schritt 2: Anforderungen
- Schritt 3: Zusammenbauen
- Schritt 4: Testen der Schaltung
- Schritt 5: Nächster Schritt
- Schritt 6: Das Programm
- Schritt 7: Fazit
Video: 6502 Minimal Computer (mit Arduino MEGA) Teil 1: 7 Schritte
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
Der Mikroprozessor 6502 erschien erstmals 1975 und wurde von einem kleinen Team unter der Leitung von Chuck Peddle für MOS Technology entwickelt. Damals wurde es in Videokonsolen und Heimcomputern wie Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 und 64 verwendet. Damals war es eines der billigsten auf dem Markt. Es ist nie wirklich weggegangen und wird jetzt von Bastlern und Profis für viele Anwendungen verwendet.
Die von mir verwendete Version ist die W65C02S6TPG-14, die von Western Design Center hergestellt wird und zehnmal weniger Strom verbraucht als das Original. Die Besonderheit besteht darin, dass er nicht wie der Originalchip mit 1 MHz laufen muss. Es kann viel langsamer laufen oder verwendet werden, um ein Programm einzeln zu durchlaufen und sogar auf 14 MHz hochgefahren zu werden. Das Datenblatt des Chips erklärt seine Fähigkeiten. Andere 6502-Chips verfügen nicht über diese Fähigkeit und werden auf diese Weise nicht ausgeführt. Die Chips sind derzeit bei Ebay sowie anderen Quellen erhältlich.
Lieferungen
Alle verwendeten Teile sind derzeit bei Ebay, AliExpress und anderen erhältlich.
Schritt 1: Das Konzept
Ich habe mich von Ben Eater inspirieren lassen, der auf YouTube eine Reihe von Videos über den 6502 und viele andere Aspekte des Baus von Computern und Schaltungen produziert hat. Das Programm wurde ursprünglich von ihm geschrieben und ich habe dies und einige seiner Designs geändert, um dieses Instructable zu entwickeln. Eine andere Person, die mich inspiriert hat, war Andrew Jacobs, der einen Abschnitt auf GitHub hat, in dem er ein PIC-Mikro verwendet, um seinen 6502 zu steuern.
Wie Ben verwende ich einen Arduino MEGA, um den 6502 zu überwachen. Ich verwende den MEGA auch, um das Taktsignal im Gegensatz zu Ben bereitzustellen. Zur Zeit verwende ich auch keine EEPROMs oder RAM.
Schritt 2: Anforderungen
Um diesen "Computer" zu bauen, ist eine Liste von Elementen wie folgt:
1 x Arduino MEGA
1 x Western Design Center W65C02S6TPG-14
1 x 74HC00N IC (Quad 2-Input NAND Gate) oder ähnlich
1 x 74HC373N IC (Octal D-Typ transparenter Riegel) oder ähnlich
2 x 830 Loch Brotbretter (1 zur Not)
Verschiedene Dupont-Stecker - Stecker und Verbindungsdrähte
2 x LEDs (ich habe 5mm blau verwendet, da Sie ohne Widerstände auskommen können)
1 x 12 mm kurzzeitiger taktiler Druckknopfschalter PCB-montierter SPST oder ähnlich
1 x 1K Widerstand
2 x 0,1 uF Keramikkondensatoren
1 x 8-Wege-Wasserlicht-Festzelt 5 mm rote LED (wie oben) oder 8 LEDs und Widerstände
HINWEIS: Wenn Sie das ungelötete Kit erhalten, können Sie die LEDs falsch herum einsetzen, damit sie eine gemeinsame Kathode sind. Ich befestige ein Fliegenkabel (anstelle des Stifts), damit es leicht an anderer Stelle angeschlossen werden kann. VCC wird jetzt zu Masse. Sie können die LEDs natürlich umdrehen (an einem zusammengebauten Artikel) und neu verlöten, aber das ist eine Menge Faff! Kits sind derzeit auf AliExpress verfügbar.
Schritt 3: Zusammenbauen
Ich fand es einfacher, für die Adress- und Datenbusse neue DuPont-Kabel zu verwenden, die nicht von ihrem Band getrennt wurden.
Verbinden Sie Pin 9 (A0) des 6502 mit Pin 52 des MEGA, Pin 10 (A1) des 6502 auf Pin 50 usw. …
bis um
Verbinden Sie Pin 25 (A15) des 6502 mit Pin 22 des MEGA.
Bisher 16 Verbindungen.
Gleichfalls
Verbinden Sie Pin 26 (D7) des 6502 mit Pin 39 des MEGA, Pin 27 (D6) des 6502 auf Pin 41 usw. …
bis um
Verbinden Sie Pin 33 (D0) des 6502 mit Pin 53 des MEGA.
8 weitere Verbindungen.
Verbinden Sie Pin 8 (VDD) mit 5 V am MEGA.
Ein 0,1uF-Kondensator, der von Pin 8 mit Gnd der Steckplatine verbunden ist, kann hier nützlich sein, ist aber nicht erforderlich.
Verbinden Sie Pin 21 (VSS) mit Gnd am MEGA.
Pins 2, 4, 6, 36 und 38 können an 5V. gebunden werden
Verbinden Sie Pin 37 (Uhr) mit Pin 2 und Pin 7 des MEGA.
Verbinden Sie Pin 34 (RWB) mit Pin 3 des MEGA.
Verbinden Sie Pin 40 (Reset) wie oben abgebildet.
Schritt 4: Testen der Schaltung
In diesem Stadium funktioniert der 6502 und Programm1 kann verwendet werden. Wenn Sie das 8-Wege-Marquee (wie oben) verwenden, kann es direkt in das Steckbrett eingesteckt und das Fly-Kabel mit Masse verbunden werden, oder Sie können 8 LEDs und Widerstände verwenden. Die LEDs zeigen an, was sich auf dem Datenbus befindet.
Zu diesem Zeitpunkt wäre es auch gut, die Verzögerungen in Loop() auf 500 oder mehr zu setzen, um zu verfolgen, was passiert.
Sie sollten auf dem Serial Monitor eine ähnliche Ausgabe wie oben erhalten. Wenn Reset gedrückt wird, durchläuft der Prozessor 7 Zyklen und sucht dann nach dem Start des Programms an den Plätzen $FFFC und $FFFD. Da der 6502 keine physikalischen Adressen zum Lesen hat, müssen wir diese vom MEGA liefern.
In der obigen Ausgabe liest der 6502 $FFFC und $FFFD und erhält $00 und $10 (Low Byte, High Byte), was der Start des Programms bei $1000 ist. Der Prozessor beginnt dann mit der Ausführung des Programms an der Stelle $1000 (wie oben). In diesem Fall lautet es $A9 und $55, also LDA#$55 (Lade 85 in den Akkumulator). Da wiederum kein physikalischer Speicherplatz vorhanden ist, simuliert der MEGA, was vom Datenbus gelesen wird.
$55 (85) ergibt das Binärmuster 01010101 und bei Drehung um 1 Bit nach links ergibt $AA (170) 10101010.
Das Programm zeigt, dass der Prozessor korrekt arbeitet, wird aber bald etwas langweilig, also weiter zum nächsten Teil.
Schritt 5: Nächster Schritt
Der oben genannte "Spaghettihaufen" ist wahrscheinlich so etwas wie das, was Sie nach dieser Phase haben werden.
Als nächstes müssen Sie die ICs 74HC373N und 74HC00N zum Steckbrett hinzufügen.
Leider stimmen die Pins des 373 nicht mit dem Datenbus überein und müssen daher mit Drähten verbunden werden.
Verbinden Sie 5V mit Pin 20.
Masse an Pin 10 anschließen.
Verbinden Sie Pin 33 (D0) des 6502 mit Pin 3 (D0) des 74HC373N
und ebenso mit den Pins D1 bis D7.
Q0 bis Q7 sind die Ausgänge und diese müssen mit dem LED-Marquee oder einzelnen LEDs und Widerständen verbunden werden.
Beim 74HC00 werden nur 2 seiner Gates benötigt
Verbinden Sie 5V mit Pin 14.
Masse an Pin 7 anschließen.
Verbinden Sie Pin 17 (A8) des 6502 mit Pin 1 (1A) des 74HC00
Verbinden Sie Pin 25 (A15) des 6502 mit Pin 2 (1B) des 74HC00
Verbinden Sie Pin 34 (R/W) des 6502 mit Pin 5 (2B) des 74HC00
Verbinden Sie Pin 3 (1Y) des 74HC00 mit Pin 4 (2A) des 74HC00
Verbinden Sie Pin 6 (2Y) des 74HC00 mit Pin 11 (LE) des 74HC373N
Verbinden Sie Pin 11 (LE) des 74HC373N mit Pin 1 (OE) des 74HC373N
Sie können eine blaue LED an 1Y und Masse sowie 2Y an Masse anschließen, dies zeigt an, wenn das Gate aktiv ist.
Ändern Sie abschließend die Zeile in der onClock-Prozedur von program1 auf program2
setDataPins(Programm2[Offset]);
Schritt 6: Das Programm
Das Programm 6502-Monitor enthält die beiden oben beschriebenen 6502-Routinen.
Das Programm befindet sich noch in der Entwicklung und ist etwas unordentlich.
Beim Ausführen von program2 können die Verzögerungen in der Schleife() 50 oder weniger betragen und sogar ganz beseitigt werden. Das Auskommentieren der Serial.print()-Zeilen macht den 6502 auch schneller. Das Trennen von Pin 1 (OE) des 373 von Pin 11 (LE) führt zu anderen Ergebnissen. Wenn Sie Pin 1 und Pin 11 des 373 von den NAND-Gattern trennen, können Sie bei jedem Taktzyklus sehen, was sich auf dem Datenbus befindet.
Möglicherweise müssen Sie OE an Masse binden, anstatt es schwebend zu lassen, da die 8 Ausgangsleitungen deaktiviert sind, wenn dieser Pin auf High geht. Wenn der LE-Pin hoch ist, sind die Ausgangspins die gleichen wie die Eingänge. Wenn der LE-Pin auf Low gesetzt wird, werden die Ausgänge zwischengespeichert, dh wenn sich die Eingangspins ändern, bleiben die Ausgänge gleich.
Ich habe versucht, das Programm so einfach wie möglich zu halten, damit es leichter verständlich ist.
Durch Experimentieren mit den Zeitverzögerungen können Sie genau verfolgen, was der 6502 macht.
Unten sind die beiden Programme (beide laufen unter der Adresse $1000) in 6502 Assembler:
Programm1
LDA#$55
NOP
ROL
STA$1010
JMP$1000
Die ROL dreht den Inhalt des Akkumulators um ein Bit nach links, was bedeutet, dass aus $55 jetzt $AA wird.
Im Maschinencode (hex): A9 55 EA 2A 8D 10 10 4C 00 10
Programm2
LDA#$01
STA$8100
ADC#$03
STA$8100
JMP$1005
Im Maschinencode (hex): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10
In Programm2 gibt es jetzt eine physikalische Adresse $8100, wo sich der 74HC373 auf dem Adressbus befindet.
d.h. A15 der 6502 ist 32768 ($8000) und A8 ist 256 ($0100) = 33024 (8100$).
Wenn der 6502 also auf $8100 (STA$8100) schreibt, ist das R/W des 6502 niedrig und die Daten auf dem 6502-Datenbus werden zwischengespeichert, wenn der 373 LE niedrig wird. Durch das 74HC00 NAND Gate werden die Signale umgekehrt.
Im obigen Bildschirmausdruck wurde der zweite Schreibvorgang um 3 erhöht (ADC#$03) - von $7F auf $82.
In Wirklichkeit würden mehr als 2 Leitungen des Adressbusses für den spezifischen Standort des 373 verwendet. Da dies die einzige physikalische Adresse unter den möglichen 65536 ist, zeigt dies, wie der Adressbus funktioniert. Sie können mit verschiedenen Adress-Pins experimentieren und sie an einer anderen Stelle platzieren. Natürlich müssen Sie die STA-Operanden auf die neue Position ändern. z. B. Wenn Sie die Adresszeilen A15 und A9 verwenden, wäre die Adresse $8200 (32768 + 512).
Schritt 7: Fazit
Ich habe versucht zu zeigen, wie einfach es ist, einen 6502 zum Laufen zu bringen.
Ich bin kein Experte auf diesem Gebiet und würde mich über konstruktive Kommentare oder Informationen freuen.
Sie können dies gerne weiterentwickeln und mich würde interessieren, was Sie gemacht haben.
Ich beabsichtige, dem Projekt ein EEPROM, SRAM und einen 6522 hinzuzufügen und es in Zukunft auf Stripboard zu legen.
Empfohlen:
Bewegungsaktivierte Cosplay Wings mit Circuit Playground Express - Teil 1: 7 Schritte (mit Bildern)
Bewegungsaktivierte Cosplay-Flügel mit Circuit Playground Express - Teil 1: Dies ist Teil 1 eines zweiteiligen Projekts, in dem ich Ihnen meinen Prozess zur Herstellung eines Paars automatisierter Feenflügel zeige. Der erste Teil des Projekts ist der Mechanik der Flügel, und der zweite Teil macht es tragbar und fügt die Flügel hinzu
6502 Minimal Computer (mit Arduino MEGA) Teil 3: 7 Schritte
6502 Minimal Computer (mit Arduino MEGA) Teil 3: Um noch weiter zu gehen, habe ich der Hauptplatine jetzt einen Octal Latch, 8 rechteckige LEDs und ein 220 Ohm Widerstandsarray hinzugefügt. Es gibt auch einen Jumper zwischen dem gemeinsamen Pin des Arrays und Masse, damit die LEDs ausgeschaltet werden können. Das 74HC00 NAND-Gatter h
6502 & 6522 Minimal Computer (mit Arduino MEGA) Teil 2: 4 Schritte
6502 & 6522 Minimal Computer (mit Arduino MEGA) Teil 2: Nach meinem vorherigen Instructable habe ich jetzt den 6502 auf eine Streifenplatine 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 c
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: 7 Schritte (mit Bildern)
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: Update: 7. April 2019 - Rev 3 von lp_BLE_TempHumidity, fügt Datums- / Zeitdiagramme mit pfodApp V3.0.362+ hinzu und automatische Drosselung beim Senden von DatenUpdate: 24. März 2019 – Rev 2 von lp_BLE_TempHumidity, fügt weitere Plotoptionen hinzu und i2c_ClearBus, fügt GT832E
So bauen Sie Ihr eigenes Anemometer mit Reed-Schaltern, Hall-Effekt-Sensor und einigen Schrott auf Nodemcu. - Teil 1 - Hardware: 8 Schritte (mit Bildern)
So bauen Sie Ihr eigenes Anemometer mit Reed-Schaltern, Hall-Effekt-Sensor und einigen Schrott auf Nodemcu. - Teil 1 - Hardware: EinführungSeit ich mit dem Studium von Arduino und der Maker-Kultur begonnen habe, habe ich gerne nützliche Geräte aus Schrott- und Schrottstücken wie Kronkorken, PVC-Stücken, Getränkedosen usw. gebaut. Ich liebe es, eine Sekunde zu geben Leben für jedes Stück oder jeden Kumpel