Πίνακας περιεχομένων:

6502 Minimal Computer (με Arduino MEGA) Μέρος 1: 7 Βήματα
6502 Minimal Computer (με Arduino MEGA) Μέρος 1: 7 Βήματα

Βίντεο: 6502 Minimal Computer (με Arduino MEGA) Μέρος 1: 7 Βήματα

Βίντεο: 6502 Minimal Computer (με Arduino MEGA) Μέρος 1: 7 Βήματα
Βίντεο: Geek Rant #6 - My DIY 65816 Computer 2024, Ιούλιος
Anonim
6502 Minimal Computer (με Arduino MEGA) Μέρος 1
6502 Minimal Computer (με Arduino MEGA) Μέρος 1

Ο μικροεπεξεργαστής 6502 εμφανίστηκε για πρώτη φορά το 1975 και σχεδιάστηκε από μια μικρή ομάδα με επικεφαλής τον Chuck Peddle για την τεχνολογία MOS. Τότε χρησιμοποιήθηκε σε κονσόλες βίντεο και οικιακούς υπολογιστές συμπεριλαμβανομένων των Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 και 64. Εκείνη την εποχή ήταν ένα από τα φθηνότερα στην αγορά. Δεν έχει εξαφανιστεί ποτέ και τώρα χρησιμοποιείται από χομπίστες και επαγγελματίες για πολλές εφαρμογές.

Η έκδοση που χρησιμοποιώ είναι η W65C02S6TPG-14 η οποία κατασκευάζεται από το Western Design Center και χρησιμοποιεί δέκα φορές λιγότερη ισχύ από την αρχική. Είναι ξεχωριστό στο ότι δεν χρειάζεται να λειτουργεί στα 1 MHz όπως το αρχικό τσιπ. Μπορεί να τρέξει πολύ πιο αργά ή να χρησιμοποιηθεί για απλό βήμα σε ένα πρόγραμμα και μάλιστα να ανεβαίνει έως και 14 MHz. Το φύλλο δεδομένων για το τσιπ εξηγεί τις δυνατότητές του. Άλλες μάρκες 6502 δεν έχουν αυτήν τη δυνατότητα και δεν θα λειτουργούν με αυτόν τον τρόπο. Οι μάρκες είναι προς το παρόν διαθέσιμες στο Ebay καθώς και σε άλλες πηγές.

Προμήθειες

Όλα τα ανταλλακτικά που χρησιμοποιούνται είναι προς το παρόν διαθέσιμα στο Ebay, το AliExpress και άλλα.

Βήμα 1: Η έννοια

Πήρα την έμπνευσή μου από τον Ben Eater, ο οποίος παρήγαγε μια σειρά βίντεο στο YouTube σχετικά με το 6502 και πολλές άλλες πτυχές της κατασκευής υπολογιστών και κυκλωμάτων. Το πρόγραμμα γράφτηκε από αυτόν αρχικά και έχω τροποποιήσει αυτό και μερικά από τα σχέδιά του για να καταλήξω σε αυτό το Instructable. Ένα άλλο άτομο που με ενέπνευσε ήταν ο Andrew Jacobs, ο οποίος έχει ένα τμήμα στο GitHub όπου χρησιμοποιεί ένα μικρόφωνο PIC για τον έλεγχο του 6502.

Όπως ο Ben, χρησιμοποιώ ένα Arduino MEGA για να παρακολουθώ το 6502. Χρησιμοποιώ επίσης το MEGA για να παρέχω το σήμα του ρολογιού σε αντίθεση με τον Ben. Προς το παρόν δεν χρησιμοποιώ ούτε EEPROM ούτε RAM.

Βήμα 2: Απαιτήσεις

Απαιτήσεις
Απαιτήσεις

Για να δημιουργήσετε αυτόν τον "υπολογιστή", μια λίστα με τα στοιχεία είναι η ακόλουθη:

1 x Arduino MEGA

1 x Western Design Center W65C02S6TPG-14

1 x 74HC00N IC (Quad 2 εισόδων NAND gate) ή παρόμοιο

1 x 74HC373N IC (διαφανές μάνταλο τύπου Octal D) ή παρόμοιο

2 σανίδες ψωμιού 830 οπών (1 σε μια πρέζα)

Διάφορα αρσενικά Dupont - αρσενικά καλώδια και καλώδια σύνδεσης

2 x LED (χρησιμοποίησα μπλε 5mm καθώς μπορείτε να ξεφύγετε χωρίς αντιστάσεις)

1 x 12mm Momentary Tactile Push Button Switch PCB Mounted SPST ή παρόμοιο

1 x 1K αντίσταση

2 κεραμικοί πυκνωτές 0,1 uF

1 x 8 Way Water Light Marquee 5mm κόκκινο LED (όπως παραπάνω) ή 8 LED και αντιστάσεις

ΣΗΜΕΙΩΣΗ: Εάν πάρετε το μη συγκολλημένο κιτ, μπορείτε να τοποθετήσετε τα LED λάθος, έτσι ώστε να είναι κοινή κάθοδος. Συνδέω ένα μολύβι μολύβδου (αντί για τον πείρο) έτσι ώστε να μπορεί εύκολα να συνδεθεί αλλού. Το VCC γίνεται τώρα Ground. Μπορείτε φυσικά να γυρίσετε τις λυχνίες LED (σε ένα συναρμολογημένο αντικείμενο) και να τις κολλήσετε ξανά, αλλά αυτό είναι πολύ χάλια! Τα κιτ είναι προς το παρόν διαθέσιμα στο AliExpress.

Βήμα 3: Το βάζουμε μαζί

Το βάζουμε μαζί
Το βάζουμε μαζί
Το βάζουμε μαζί
Το βάζουμε μαζί

Βρήκα πιο εύκολο να χρησιμοποιήσω νέα καλώδια DuPont που δεν είχαν διαχωριστεί από την κορδέλα τους για τους διαύλους διευθύνσεων και δεδομένων.

Συνδέστε τον πείρο 9 (A0) του 6502 στον πείρο 52 του MEGA, ακίδα 10 (Α1) του 6502 έως πείρο 50 κλπ…

μέχρι

Συνδέστε τον πείρο 25 (A15) του 6502 στον πείρο 22 του MEGA.

16 συνδέσεις μέχρι στιγμής.

Επίσης

Συνδέστε τον πείρο 26 (D7) του 6502 στον πείρο 39 του MEGA, καρφίτσα 27 (D6) του 6502 έως pin 41 κλπ…

μέχρι

Συνδέστε τον πείρο 33 (D0) του 6502 στον πείρο 53 του MEGA.

8 ακόμη συνδέσεις.

Συνδέστε τον πείρο 8 (VDD) σε 5v στο MEGA.

Ένας πυκνωτής 0.1uF συνδεδεμένος από τον πείρο 8 στο Gnd της σανίδας ψωμιού μπορεί να είναι χρήσιμος εδώ αλλά όχι απαραίτητος.

Συνδέστε τον πείρο 21 (VSS) στο Gnd στο MEGA.

Οι ακίδες 2, 4, 6, 36 και 38 μπορούν να συνδεθούν με 5v

Συνδέστε τον πείρο 37 (Ρολόι) στον πείρο 2 και τον πείρο 7 του MEGA.

Συνδέστε τον πείρο 34 (RWB) στον ακροδέκτη 3 του MEGA.

Συνδέστε τον πείρο 40 (Επαναφορά) ως παραπάνω διάγραμμα.

Βήμα 4: Δοκιμή του κυκλώματος

Δοκιμή του κυκλώματος
Δοκιμή του κυκλώματος

Σε αυτό το στάδιο το 6502 θα λειτουργήσει και το πρόγραμμα1 μπορεί να χρησιμοποιηθεί. Εάν χρησιμοποιείτε τη μαρκίζα 8 κατευθύνσεων (όπως παραπάνω), μπορείτε να την τοποθετήσετε κατευθείαν στο breadboard και να συνδέσετε τη μύτη με τη γείωση ή μπορείτε να χρησιμοποιήσετε 8 LED και αντιστάσεις. Τα LEDS θα δείξουν τι υπάρχει στο δίαυλο δεδομένων.

Σε αυτό το στάδιο θα ήταν επίσης καλό να ορίσετε τις καθυστερήσεις στο Loop () σε 500 ή περισσότερες, για να παρακολουθήσετε τι συμβαίνει.

Θα πρέπει να λάβετε μια παρόμοια έξοδο στο Serial Monitor όπως αυτή που αναφέρθηκε παραπάνω. Όταν πατηθεί το Reset, ο επεξεργαστής περνάει από 7 κύκλους και στη συνέχεια αναζητά την έναρξη του προγράμματος σε τοποθεσίες $ FFFC και $ FFFD. Δεδομένου ότι δεν υπάρχουν φυσικές διευθύνσεις για την ανάγνωση του 6502, πρέπει να τις παρέχουμε από το MEGA.

Στην παραπάνω έξοδο, το 6502 διαβάζει $ FFFC και $ FFFD και παίρνει $ 00 και $ 10 (Low byte, High byte) που είναι η αρχή του προγράμματος στα $ 1000. Στη συνέχεια, ο επεξεργαστής ξεκινά την εκτέλεση του προγράμματος στη θέση $ 1000 (όπως παραπάνω). Σε αυτήν την περίπτωση διαβάζει $ A9 και $ 55, δηλαδή LDA#$ 55 (Φορτώστε 85 στον συσσωρευτή). Και πάλι καθώς δεν υπάρχει θέση φυσικής μνήμης, το MEGA προσομοιώνει αυτό που διαβάζεται από το δίαυλο δεδομένων.

$ 55 (85) δίνει το δυαδικό μοτίβο 01010101 και όταν περιστραφεί 1 bit αριστερά δίνει $ AA (170) 10101010.

Το πρόγραμμα δείχνει ότι ο επεξεργαστής λειτουργεί σωστά, αλλά σύντομα γίνεται λίγο βαρετός, έτσι για το επόμενο μέρος.

Βήμα 5: Επόμενο βήμα

Επόμενο βήμα
Επόμενο βήμα
Επόμενο βήμα
Επόμενο βήμα

Ο "σωρός από μακαρόνια" παραπάνω είναι πιθανώς κάτι σαν αυτό που θα έχετε μετά από αυτό το στάδιο.

Στη συνέχεια, πρέπει να προσθέσετε τα IC 74HC373N και 74HC00N στον πίνακα ψωμιού.

Δυστυχώς, οι ακίδες των 373 δεν ταιριάζουν με το δίαυλο δεδομένων, οπότε θα πρέπει να συνδεθούν με καλώδια.

Συνδέστε 5v στο pin 20.

Συνδέστε το Ground με τον πείρο 10.

Συνδέστε τον πείρο 33 (D0) του 6502 στον πείρο 3 (D0) του 74HC373N

και ομοίως με τους πείρους D1 έως D7.

Το Q0 έως το Q7 είναι οι έξοδοι και αυτές θα χρειαστούν σύνδεση με το περίβλημα LED ή μεμονωμένα LED και αντιστάσεις.

Με το 74HC00 χρειάζονται μόνο 2 πύλες του

Συνδέστε το 5v στο pin 14.

Συνδέστε το Ground με τον πείρο 7.

Συνδέστε τον πείρο 17 (A8) του 6502 στον πείρο 1 (1Α) του 74HC00

Συνδέστε τον πείρο 25 (A15) του 6502 στον πείρο 2 (1B) του 74HC00

Συνδέστε τον πείρο 34 (R/W) του 6502 στον πείρο 5 (2B) του 74HC00

Συνδέστε τον πείρο 3 (1Y) του 74HC00 με τον πείρο 4 (2A) του 74HC00

Συνδέστε τον πείρο 6 (2Y) του 74HC00 στον πείρο 11 (LE) του 74HC373N

Συνδέστε τον πείρο 11 (LE) του 74HC373N στον πείρο 1 (OE) του 74HC373N

Μπορείτε να συνδέσετε ένα μπλε LED σε 1Y και γείωση καθώς και 2Y στη γείωση, αυτό θα δείξει πότε είναι ενεργή η πύλη.

Τέλος, αλλάξτε τη γραμμή στη διαδικασία onClock από πρόγραμμα1 σε πρόγραμμα2

setDataPins (πρόγραμμα2 [μετατόπιση]);

Βήμα 6: Το πρόγραμμα

Το πρόγραμμα
Το πρόγραμμα
Το πρόγραμμα
Το πρόγραμμα

Το πρόγραμμα 6502-Monitor περιέχει τις δύο ρουτίνες 6502 που περιγράφονται παραπάνω.

Το πρόγραμμα είναι ακόμη υπό ανάπτυξη και είναι λίγο ακατάστατο.

Κατά την εκτέλεση του προγράμματος2, οι καθυστερήσεις στον βρόχο () μπορεί να είναι 50 ή λιγότερες και ακόμη και να αφαιρεθούν εντελώς. Ο σχολιασμός των γραμμών Serial.print () κάνει επίσης το 6502 να τρέχει γρηγορότερα. Η αποσύνδεση του πείρου 1 (OE) του 373 από τον πείρο 11 (LE) παράγει διαφορετικά αποτελέσματα. Η αποσύνδεση των ακίδων 1 και 11 του 373 από τις πύλες NAND σάς επιτρέπει να βλέπετε τι υπάρχει στο δίαυλο δεδομένων σε κάθε κύκλο ρολογιού.

Mayσως χρειαστεί να συνδέσετε το OE με τη γείωση αντί να το αφήσετε να επιπλέει καθώς οι 8 γραμμές εξόδου είναι απενεργοποιημένες εάν αυτός ο πείρος πάει ψηλά. Όταν ο πείρος LE είναι υψηλός, οι ακίδες εξόδου είναι ίδιες με τις εισόδους. Λαμβάνοντας τον πείρο LE χαμηλά μανδαλώνει τις εξόδους, δηλαδή εάν αλλάξουν οι ακίδες εισόδου, οι έξοδοι παραμένουν οι ίδιες.

Προσπάθησα να κρατήσω το πρόγραμμα όσο το δυνατόν πιο απλό για να το καταλάβω πιο εύκολα.

Ο πειραματισμός με τις χρονικές καθυστερήσεις σας δίνει τη δυνατότητα να ακολουθήσετε ακριβώς αυτό που κάνει το 6502.

Παρακάτω είναι τα δύο προγράμματα (και τα δύο εκτελούνται στη διεύθυνση $ 1000) στο 6502 Assembler:

πρόγραμμα 1

LDA#55 $

ΟΧΙ

ROL

STA 1010 $

JMP $ 1000

Το ROL περιστρέφει το περιεχόμενο του συσσωρευτή ένα bit αριστερά, πράγμα που σημαίνει ότι τα $ 55 γίνονται $ AA τώρα.

Σε κωδικό μηχανής (εξάγωνο): A9 55 EA 2A 8D 10 10 4C 00 10

πρόγραμμα2

LDA#$ 01

STA 8100 $

ADC#$ 03

STA 8100 $

JMP 1005 $

Σε κωδικό μηχανής (εξάγωνο): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

Στο πρόγραμμα2 υπάρχει τώρα μια φυσική διεύθυνση $ 8100, όπου βρίσκεται το 74HC373 στο δίαυλο διευθύνσεων.

δηλ. το A15 του 6502 είναι 32768 ($ 8000) και το A8 είναι 256 ($ 0100) = 33024 ($ 8100).

Έτσι, όταν το 6502 γράφει σε $ 8100 (STA $ 8100), το R/W του 6502 είναι χαμηλό και τα δεδομένα στο δίαυλο δεδομένων 6502 ασφαλίζονται όταν το 373 LE πέσει χαμηλά. Λόγω της 74HC00 NAND Gate, τα σήματα αντιστρέφονται.

Στην παραπάνω εκτύπωση οθόνης, η δεύτερη εγγραφή αυξήθηκε κατά 3 (ADC#$ 03) - από $ 7F σε $ 82.

Στην πραγματικότητα, περισσότερες από 2 γραμμές του διαύλου διευθύνσεων θα χρησιμοποιούνταν για τη συγκεκριμένη τοποθεσία του 373. Καθώς αυτή είναι η μόνη φυσική διεύθυνση από την πιθανή 65536, δείχνει πώς λειτουργεί ο δίαυλος διευθύνσεων. Θα μπορούσατε να πειραματιστείτε με διαφορετικές καρφίτσες διευθύνσεων και να τις τοποθετήσετε σε διαφορετική τοποθεσία. Φυσικά, θα χρειαστεί να αλλάξετε τους τελεστές STA στη νέα τοποθεσία. π.χ. Εάν χρησιμοποιούσατε τις γραμμές διευθύνσεων A15 και A9, η διεύθυνση θα ήταν $ 8200 (32768 + 512).

Βήμα 7: Συμπέρασμα

συμπέρασμα
συμπέρασμα

Προσπάθησα να δείξω πόσο εύκολο είναι να βάλεις σε λειτουργία ένα 6502.

Δεν είμαι ειδικός σε αυτόν τον τομέα, οπότε θα χαιρόμουν κάθε εποικοδομητικό σχόλιο ή πληροφορία.

Είστε ευπρόσδεκτοι να το αναπτύξετε περαιτέρω και θα με ενδιέφερε αυτό που έχετε κάνει.

Σκοπεύω να προσθέσω ένα EEPROM, ένα SRAM και ένα 6522 στο έργο, καθώς και να το τοποθετήσω στο μέλλον.

Συνιστάται: