Καλώς Ήλθατε στο Rainbow Project!

Submitted by sonic on Tue, 01/23/2018 - 21:02

Το Rainbow Project είναι φέτος μια από τις προχωρημένες δημιουργίες του Schoolspace-chania. Είναι ένας εκπαιδευτικός υπολογιστής μιας πλακέτας (Single Board Computer, SBC), βασισμένος στον παλιό καλό επεξεργαστή Z80 της Zilog. Διαθέτει RAM, ROM, οθόνη LCD (που ελέγχεται από μικροελεγκτή) και πολλά LED! Μπορούμε έτσι να δουμε πως λειτουργεί ένας επεξεργαστής (και κατά επέκταση ένας υπολογιστής) εκτελώντας τις εντολές βήμα - βήμα και βλέποντας πως μεταφέρονται οι εντολές και τα δεδομένα μέσα από τους διαύλους. Σε αυτό το site θα βρείτε λεπτομέρειες για την κατασκευή και τον προγραμματισμό του Rainbow Project.

Το αρχικό μας σχέδιο βασίζεται στην παρακάτω ιδέα, η οποία πιθανόν θα επεκταθεί καθώς αναπτύσσεται το project:

Έννατη και Δέκατη Συνάντηση 13/01 και 20/1/18

Submitted by sonic on Thu, 01/25/2018 - 00:16

Στις δύο αυτές συναντήσεις ασχοληθήκαμε με το κύκλωμα οθόνης του Rainbow Project.
To κύκλωμα αυτό αν και βασίζεται σε οθόνη LCD τύπου HD44781 παρουσιάζει κάποιες ιδιαιτερότητες:

  • Θέλουμε να υλοποιηθεί με σχετικά απλό τρόπο
  • Θέλουμε να λειτουργεί ικανοποιητικά ακόμα και με σταματημένο ή πολύ αργό το βασικό μας Z80

Για τους λόγους αυτούς επιλέξαμε να μην οδηγεί απευθείας την οθόνη ο Ζ80 (αν και αυτό θα ήταν δυνατό) αλλά να φτιάξουμε κάτι σαν αυτόνομη "κάρτα γραφικών". Η υλοποίηση μας ονομάζεται "Intelligent Display Interface" (IDI) και λειτουργεί με τον παρακάτω τρόπο:

  • Στον έλεγχο της οθόνης βρίσκεται ένας μικροελεγκτής MSP430G2553. Ο ελεγκτής αυτός είναι σε κατάσταση "sleep" και ενεργοποιείται όταν λάβει σήμα IORQ από το Ζ80
  • Ο Ζ80 στέλνει ένα byte το οποίο μπορεί να είναι είτε εντολή (καθαρισμός οθόνης, μετακίνηση κέρσορα σε θέση κλπ) είτε δεδομένα για εμφάνιση
  • Ο MSP λαμβάνει τα δεδομένα και πράττει ανάλογα. Κατόπιν πέφτει ξανά σε sleep

Μια επιπλέον ιδιαιτερότητα του κυκλώματος είναι βέβαια ότι ο MSP λειτουργεί στα 3.3V και όχι στα 5V, οπότε χρειάζεται level translation για να επικοινωνήσει με το Ζ80. Αυτό το επιτυχαμε με διαιρέτες αντιστάσεων και ένα κύκλωμα buffer 74HC44. Μπορείτε να δείτε το πετυχημένο μας αποτέλεσμα στο παρακάτω βίντεο:

Όγδοη Συνάντηση - 16/12/17

Submitted by sonic on Thu, 01/25/2018 - 00:01

Στην σημερινή συνάντηση καταφέραμε να γράψουμε και να διαβάσουμε δεδομένα από την μνήμη RAM, τύπου 6116, με διακοπτάκια!
Η 6116 είναι μια στατική μνήμη μεγέθους 2Κ. Για το δοκιμαστικό κύκλωμα χρειαζόμαστε οκτω διακοπτάκια (dip switches) για το data bus και μερικά ακόμα για το address bus (συνδέσαμε μονο 4 και τις υπόλοιπες διευθύνσεις στο μηδέν). Καταφέραμε να γράψουμε και να διαβάσουμε με επιτυχία bytes στις πρώτες δεκαέξι θέσεις!

Έβδομη συνάντηση - 09/12/17

Submitted by sonic on Wed, 01/24/2018 - 23:44

Στη σημερινή συνάντηση φτάσαμε ένα μεγάλο σταθμό στο Project: o Z80 εκτέλεσε για πρώτη φορά πραγματικό πρόγραμμα το οποίο γράψαμε στην EEPROM μέσω του programmer. Το όλο σύστημα χρειαστηκε τρεις(!) breadboard. Στη μια φιλοξενείται ο Ζ80, στην άλλη η ROM και στη μικρή το κύκλωμα με τα LEDs που μας επιτρέπει να "κατασκοπεύουμε" τη λειτουργία του διαύλου δεδομένων. Δεδομένου ότι δεν έχουμε ακομα RAM, δεν υπάρχει αποκωδικοποιητής διευθύνσεων (πόσες ακομα breadboard να χρειαστούν άραγε;) αλλά χρειάζεται ένα κύκλωμα 74HC244 για να οδηγήσουμε τα LEDs χωρίς να υπερφορτώνεται ο δίαυλος.

Μπορείτε να δείτε εδώ και το σχετικό βιντεάκι:

Έκτη Συνάντηση - 25/11/17

Submitted by sonic on Wed, 01/24/2018 - 23:31

Η πλακέτα ενός υπολογιστή, εκτός από επεξεργαστή, RAM και ROM περιέχει ακόμα μια σειρά βοηθητικών κυκλωμάτων που συνδέουν όλα αυτά μεταξύ τους. Στους απλούς υπολογιστές θα το ακούσετε πολλές φορές να αναφέρεται με το όνομα "glue logic" και είναι στην πραγματικότητα σχετικά απλά κυκλώματα της σειράς ολοκληρωμένων 74HC/74LS που μπορεί να περιέχουν πύλες, αποκωδικοποιητές κλπ.

Ένα από τα βασικότερα αυτά κυκλώματα, είναι ο αποκωδικοποιητής διευθύνσεων. Το κύκλωμα αυτό ουσιαστικά παρακολουθεί ποια διεύθυνση μνήμης προσπαθεί να προσπελάσει ο επεξεργαστής και ενεργοποιεί πάνω στο δίαυλο το αντίστοιχο τσιπάκι μνήμης. Έτσι, στο Rainbow Project οι πρώτες 8192 διευθύνσεις (από 0 ως 8191) είναι ROM. Όταν ο επεξεργαστής διαβάζει αυτές τις διευθύνσεις, ο αποκωδικοποιητής μνήμης εξασφαλίζει ότι πάνω στο δίαυλο είναι ενεργοποιημένη η ROM. Για μεγαλύτερες διευθύνσεις ενεργοποιείται η RAM.

Το κύκλωμα που χρησιμοποιούμε για την αποκωδικοποίηση μνήμης είναι το 74HC138. Στη σημερινή συνάντηση είδαμε πως λειτουργεί και πως πρέπει να συνδεθεί στο Rainbow προκειμένου να γίνεται σωστά η αποκωδικοποίηση. Δοκιμάσαμε μάλιστα τη λειτουργία του πάνω στη breadboard!

Τέταρτη Συνάντηση - 11/11/17

Submitted by sonic on Wed, 01/24/2018 - 22:49

To block διάγραμμα του Ζ80 και...

... ο Ζ80 στον εξομοιωτή:

Τι χρειάζεται για να ξεκινήσουμε να προγραμματίζουμε ένα Ζ80; Ευτυχώς δεν χρειάζεται να έχουμε τον ιδιο τον επεξεργαστή, μια και μπορούμε πάντα να δουλέψουμε με ένα cross assembler και ένα εξομοιωτή! Στη σημερινή συνάντηση του Rainbow Project, είδαμε την εσωτερική δομή και λειτουργία του Z80, μάθαμε για δυαδικό και δεκαεξαδικό σύστημα αρίθμησης και γράψαμε μικρά προγράμματα assembly.

Για να συνεχίσουμε τα πειράματα και στο σπίτι, έχουμε το περιβάλλον ανάπτυξης ως εικονική μηχανή και φυσικά έχουμε σημειώσεις και εικονική μηχανή για κατέβασμα:

  • Κατεβάστε το VirtualBox από εδώ.
  • Κατεβάστε την εικονική μηχανή με τα προγράμματα από εδώ.
  • Κατεβάστε τις σημειώσεις που μοιράσαμε από εδώ.

Ξεκινήστε τα πειράματα!

Τρίτη Συνάντηση - 04/11/17

Submitted by sonic on Wed, 01/24/2018 - 22:35

Στην τρίτη συνάντηση δοκιμάζουμε το Ζ80 μας σε ένα κύκλωμα τύπου "minimum test". Το minimum test για να επεξεργαστή μπορεί να πραγματοποιηθεί ως εξής:

  • Συνδέουμε τις γραμμές του διάυλου δεδομένων D0 - D7 στο λογικό μηδέν (γείωση). Η εντολή που αποτελείται από οκτώ μηδενικά στον Ζ80 είναι η NOP η οποία κάνει το ... τίποτα.
  • Συνδέουμε LEDs με αντιστάσεις στις γραμμές του διαύλου διευθύνσεων (όχι απαραίτητα σε όλες, στις αρχικές 4-5 πχ!)
  • Συνδέουμε κάποια άλλα σήματα του διαύλου ελέγχου σε κατάλληλες τιμές για να λειτουργεί ο επεξεργαστής.
  • Συνδέουμε ένα αργό ρολόι στην είσοδο χρονισμού (το είχαμε φτιάξει την προηγούμενη φορά!)
  • Ο επεξεργαστής εκτελεί διαδοχικά τις εντολές NOP που "διαβάζει" από το διάυλο δεδομένων και πρέπει να βλέπουμε τα LEDs στο δίαυλο δεδομένων να απαριθμούν στο δυαδικό καθώς πηγαίνει από τη μια εντολή στην επόμενη.

Με το παραπάνω κύκλωμα διαπιστώσαμε ότι πράγματι ο επεξεργαστής μας λειτουργεί!

Δεύτερη Συνάντηση - 21/10/2017

Submitted by sonic on Wed, 01/24/2018 - 22:14

Στη δεύτερη συνάντηση του Rainbow Project σχεδιάσαμε και κατασκευάσαμε σε breadboard το κύκλωμα χρονισμού (clock) του Ζ80. Το κύκλωμα θα μας επιτρέψει να "τρέχουμε" τον επεξεργαστή σε ότι ταχύτητα θέλουμε προκειμένου να βλέπουμε (με τη βοήθεια LEDs) πως λειτουργεί αναλυτικά! Για το σκοπό αυτό θα έχουμε διάφορες συχνότητες λειτουργίας αλλά και δυνατότητα να στέλνουμε χειροκίνητα ένα παλμό κάθε φορά!

Subscribe to The Rainbow Project RSS