Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Ακολουθώντας το προηγούμενο Instructable, τώρα έβαλα το 6502 σε μια λωρίδα και πρόσθεσα έναν προσαρμογέα ευέλικτης διεπαφής 6522 (VIA). Και πάλι, χρησιμοποιώ μια έκδοση WDC του 6522, καθώς ταιριάζει απόλυτα με το 6502. Όχι μόνο αυτά τα νέα τσιπ καταναλώνουν πολύ λιγότερη ισχύ από τις αρχικές εκδόσεις MOS, αλλά μπορούν να λειτουργήσουν με πιο αργές ταχύτητες ή ακόμα και να περάσουν ένα πρόγραμμα χωρίς κανένα πρόβλημα.
Το πρόγραμμα Arduino γράφτηκε αρχικά από τον Ben Eater (ο οποίος έχει πολλά βίντεο στο YouTube) και έχει τροποποιηθεί από μένα για να επιτευχθεί αυτό το αποτέλεσμα.
Προμήθειες
1 x Επεξεργαστής WDC W65C02
1 x Προσαρμογέας ευέλικτης διεπαφής WDC W65C22
1 x 74HC00N IC (Quad 2 εισόδων NAND gate) ή παρόμοιο
Πλάτος 1 x 10 εκατοστά (35 γραμμές) Λωρίδα σανίδας
2 πρίζες DIL 40 ακίδων
1 x υποδοχή DIL 14 ακίδων
PCB Header Pins 2.54mm
Υποδοχές κεφαλίδας PCB 2,54mm
1 x 12mm Momentary Tactile Push Button Switch PCB Mounted SPST ή παρόμοιο
1 x 1K αντίσταση
1 x 3K3 αντίσταση
2 κεραμικοί πυκνωτές 0,1 uF
1 x 8 Way Light Light Marquee 5mm κόκκινο LED
Σύρμα διαφόρων χρωμάτων για συνδέσεις
8 αρσενικά - αρσενικά καλώδια σύνδεσης
Βήμα 1: Ο πίνακας κυκλωμάτων
Η πλακέτα κυκλώματος είναι αρκετά συμπαγής και η κάτω πλευρά συνδέεται απευθείας στο Arduino MEGA. Για να επιτευχθεί αυτό, οι καρφίτσες σπρώχνονται όσο το δυνατόν περισσότερο στις πλαστικές θήκες πριν συγκολληθούν στην κάτω πλευρά της σανίδας. Θα μπορούσαν να χρησιμοποιηθούν μεγαλύτερες ακίδες για αυτό, αλλά οι τυπικές ακίδες σημαίνουν ότι ο πίνακας στηρίζεται σταθερά πάνω από το MEGA.
Έχω παρατάξει τα IC 6502 και 6522 έτσι ώστε να κάνουν χρήση των κομματιών του πίνακα ταινιών για σύνδεση με το MEGA. Υπάρχουν επίσης ορισμένες συνδέσεις για το 6502 που κρύβονται κάτω από το IC. Κατά την κατασκευή του πίνακα, το πρώτο πράγμα που έπρεπε να κάνετε ήταν να κόψετε τις 16 λωρίδες που θα συνδεθούν με τη διπλή σειρά πριζών του Arduino. Το εξωτερικό 2 δεν χρειάζεται να κοπεί καθώς το 5v και το Gnd βρίσκονται και στις δύο πλευρές. Επόμενη συγκόλληση στις 2 σειρές των 18 ακίδων στην κάτω πλευρά και τις 2 σειρές των 18 υποδοχών στην επάνω πλευρά.
Μετά από αυτό, οι πρίζες DIL συγκολλήθηκαν στη θέση τους και τα κομμάτια κόπηκαν μεταξύ τους. Θα μπορούσα να είχα αποθηκεύσει μια σύνδεση τοποθετώντας την ακίδα 14 του 74HC00 στο ίδιο κομμάτι με 5v. Έκοψα τα κομμάτια μόνο όταν ήμουν σίγουρος ότι έπρεπε να είναι ενώ κολλούσα τα καλώδια σύνδεσης. Ωστόσο, τα πράγματα δεν πάνε πάντα σύμφωνα με το σχέδιο, αρχικά σχεδίασα την σανίδα λωρίδας από την προηγούμενη σανίδα ψωμιού χρησιμοποιώντας τις καρφίτσες 2, 3 και 7 του Arduino, αλλά αυτές δεν ευθυγραμμίζονται με τις τρύπες στον πίνακα λωρίδων, οπότε έπρεπε να χρησιμοποιήσω καρφίτσες 18, 31 και 37. Εξ ου και οι σύνδεσμοι στον πίνακα μου στις 31 και 37. wonderσως αναρωτιέστε γιατί δεν χρησιμοποίησα μία από τις αχρησιμοποίητες ακίδες (23, 24 κ.λπ.) για το ρολόι, αυτό συμβαίνει επειδή δεν υποστηρίζουν διακόπτει, οπότε έπρεπε να χρησιμοποιήσω τα pin 18, 19, 20 ή 21 που κάνουν. Ευτυχώς αυτές οι 4 ακίδες ευθυγραμμίζονται με τις τρύπες στην σανίδα λωρίδας και διατηρούν τα πάντα συμπαγή. Ο πείρος 18 είναι επίσης πολύ πιο μακριά από όλα τα άλλα καλώδια.
Μπορεί επίσης να παρατηρήσετε ότι ο ολοκληρωμένος πίνακας μου δεν είναι ακριβώς ο ίδιος με το διάγραμμά μου. Αυτό συμβαίνει επειδή ακολουθούσα το διάγραμμα κάποιου άλλου. Εξ ου και οι συνδέσεις με το 74HC00. Έχω προσθέσει επίσης ένα LED τροφοδοσίας και επιπλέον 2 σειρές πρίζας για Gnd και 5v, καθώς και δύο πυκνωτές.
Θα μπορούσα να είχα συνδέσει τις 2 πρίζες δεδομένων, αλλά αυτό θα σήμαινε πολύ περισσότερα καλώδια να διασχίζουν τον πίνακα. Επέλεξα 8 καλώδια σύνδεσης για να το κάνω αυτό ως προσωρινό μέτρο.
Οι θύρες 6522 A και B είχαν πρίζες συγκολλημένες στα ίχνη τους, έτσι ώστε να μπορούν να τοποθετηθούν εύκολα τα σημάδια LED.
Υπάρχουν πολύ λιγότερα καλώδια τώρα από ό, τι υπήρχαν στην έκδοση του σκάφους ψωμιού.
Βήμα 2: Θεωρία προγραμματισμού
Το 6522 διαθέτει δύο θύρες εισόδου/εξόδου καθώς και πολλά άλλα χαρακτηριστικά, αλλά οι θύρες Α και Β είναι εύκολα προσβάσιμες. Για να εξάγετε δεδομένα στη θύρα, πρέπει να οριστεί το Μητρώο Κατεύθυνσης Δεδομένων (DDR) και τα δεδομένα να σταλούν στην ίδια τη θύρα.
Με την παραπάνω ρύθμιση, το 6522 βρίσκεται στα $ E000.
Για την έξοδο δεδομένων στη θύρα B, το DDR στα $ E002 έχει οριστεί σε $ FF (255 - όλες οι έξοδοι) και τα δεδομένα αποστέλλονται σε $ E000.
Για την έξοδο δεδομένων στη θύρα Α, το DDR στα $ E003 έχει οριστεί σε $ FF (255 - όλες οι έξοδοι) και τα δεδομένα αποστέλλονται σε $ E001.
Ο παρακάτω κώδικας φορτώνει $ FF στον καταχωρητή 6502 A και τον γράφει στο DDR B στα $ E002. Στη συνέχεια φορτώνει 55 $ και το γράφει στο ORB. Ο κώδικας περιστρέφεται (δίνει $ AA) και γράφεται στο ORB. Το πρόγραμμα πηδάει πίσω 1005 $ και επαναλαμβάνεται ατελείωτα. ΣΗΜΕΙΩΣΗ: Το DDR πρέπει να προετοιμαστεί μόνο μία φορά.
Διεύθυνση Hexdump Dissassembly
$ 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 σε δυαδικό είναι 010101010 και $ AA είναι 10101010 που προκαλεί την εναλλαγή των λυχνιών LED 4, 4 απενεργοποίηση.
Γρήγορη και βρώμικη διόρθωση:
Αντικαταστήστε το 74HC00 (Quad 2 input NAND Gate) με ένα 74HC08 (Quad 2 input AND Gate) και το 6522 βρίσκεται τώρα στα 6000 $ αντί για E000 $. Αυτό το μετακινεί από το ανώτερο 32K στο κάτω 32K της διευθυνσιοδοτούμενης μνήμης του 6502.
Βήμα 3: Το πρόγραμμα και η έξοδος του Arduino
Καθώς το 6502 δεν έχει RAM για ανάγνωση, το Arduino παρέχει το πρόγραμμα για ανάγνωση. Όταν ανιχνεύεται ένας παλμός ρολογιού στην ακίδα 18, το Arduino τοποθετεί τα δεδομένα του προγράμματος στο δίαυλο δεδομένων (οι ακίδες Arduino 39, 41, 43, 45, 47, 49, 51 και 53). Το 6502 δημιουργεί τις δικές του διευθύνσεις οι οποίες παρακολουθούνται μόνο από το Arduino στους ζυγούς αριθμημένους πείρους 22 έως 52. Το Arduino παρέχει επίσης τον παλμό ρολογιού στον πείρο 37. Η γραμμή R/W του 6502 παρακολουθείται στην ακίδα 31.
Καθώς το Arduino παρέχει τα δεδομένα, μέχρι στιγμής δεν ήταν δυνατό να λάβετε το 6502 για εισαγωγή δεδομένων από τη VIA (εκτός εάν γνωρίζετε καλύτερα).
Το πρόγραμμα Arduino είναι παρακάτω και ένα δείγμα εξόδου από το Serial Monitor είναι παραπάνω.
Βήμα 4: Συμπέρασμα
Και πάλι προσπάθησα να δείξω πώς να ρυθμίσετε έναν ελάχιστο "Υπολογιστή 6502".
Σε αυτό το στάδιο, το 6502 εξακολουθεί να βασίζεται στο Arduino για να του παρέχει ένα πρόγραμμα και έναν παλμό ρολογιού για να λειτουργεί.
Είναι ένα βήμα παραπέρα από όταν το έστησα στο ψωμί.
Δεν έχω χρησιμοποιήσει το 74HC373 αυτή τη φορά αλλά το πιο περίπλοκο 6522 για να κλειδώσω τις εξόδους δεδομένων. Επίσης το 6522 διαθέτει δύο θύρες εισόδου/εξόδου.
Σκοπεύω να συνεχίσω αυτό το έργο εγκαθιστώντας κάποιο SRAM ή ένα EEPROM.