Το προφίλ μας στο Google Plus
0

Κατασκευάστε έναν υπολογιστή από το μηδέν, μέρος 1: Πιο προσωπικός, δεν γίνεται!

Το πιο όμορφο “Hello World” δεν γράφεται σε κάποια υπερσύγχρονη γλώσσα αλλά στην ταπεινή BASIC, η οποία είναι τόσο παλιά ώστε πολλοί αναγνώστες ενδέχεται να μην την συνάντησαν ποτέ. Θέλουμε επιπρόσθετα να πιστεύουμε ότι το δικό μας “γεια σου κόσμε” είναι πανέμορφο, όχι γιατί είναι περίτεχνα γραμμένο αλλά γιατί τρέχει σ’ έναν υπολογιστή που κατασκευάσαμε μόνοι μας. Κι όταν λέμε “κατασκευάσαμε μόνοι μας”, δεν εννοούμε φυσικά τη συναρμολόγηση ενός PC.

Παίζει παράξενα παιχνίδια ο νους του ανθρώπου. Μια αλλόκοτη ιδέα, όχι κατ’ ανάγκη πρωτότυπη αλλά σίγουρα ενδιαφέρουσα, είναι πιθανό να ξεφυτρώσει από τη σκέψη μας ανά πάσα στιγμή. Είναι τότε που διάφορες ασύνδετες πληροφορίες ξεπηδούν από άσχετες γωνιές του μυαλού κι εντελώς ξαφνικά μοιάζουν να ταιριάζουν μεταξύ τους σαν τα κομμάτια ενός παζλ. Κάτι τέτοιο συνέβη και σε μένα, πριν από περίπου ένα χρόνο, καθώς προσπαθούσα να φρεσκάρω τις γνώσεις μου στα CPLD. (Τα CPLD, από το Complex Programmable Logic Device, είναι προγραμματιζόμενα ολοκληρωμένα που ενσωματώνουν ένα μεγάλος πλήθος λογικών πυλών. Ο χρήστης μπορεί να συνθέτει λογικά κυκλώματα, συνδυάζοντας τις διαθέσιμες πύλες κατά το δοκούν.) Όλα τα σχετικά βιβλία ξεκινούσαν με τη μελέτη και την υλοποίηση μικρών λογικών κυκλωμάτων, εν είδει “Hello World”. Η μεταφορά αυτής της προγραμματιστικής άσκησης στη σχεδίαση του hardware μού θύμισε πόσο κοντά βρίσκεται ο κόσμος του λογισμικού με τον κόσμο του υλικού, όταν ασχολείται κανείς με μικροελεγκτές ή με CPLD και FPGA. Κάπως έτσι, η σκέψη μου έτρεξε σε μια σειρά άρθρων για την παραγωγή ήχου και τη μετατροπή του Arduino σ’ ένα απλοϊκό synthesizer. Στη συνέχεια θυμήθηκα δύο εντελώς διαφορετικά άρθρα που αφορούσαν στην παραγωγή σήματος VGA με τη βοήθεια ενός μικροελεγκτή, κι από ‘κει κατέληξα να σκέφτομαι ένα άρθρο του Γιώργου (aka @giannoug) στο τεύχος 014, που περιέγραφε την “εγκατάσταση” της tiny BASIC στο Arduino. Ε, λοιπόν, όλα αυτά τα άσχετα θέματα συνδυάστηκαν άψογα και με οδήγησαν σε μια συναρπαστική ιδέα: Θα μπορούσα να κατασκευάσω έναν υπολογιστή από το μηδέν και, εκεί, στο δικό του περιβάλλον και στη δική του γλώσσα, θα μπορούσα να γράψω ένα πραγματικά εντυπωσιακό “Hello World”. Ουσιαστικά θα έγραφα ένα τυπικό “Hello World”, μόνο που προηγουμένως θα έφτιαχνα τον υπολογιστή ο οποίος θα έτρεχε το αντίστοιχο πρόγραμμα.

Η μνήμη RAM του υπολογιστή μας είναι απειροελάχιστη, ακόμα και για τα δεδομένα των υπολογιστών της δεκαετίας του '80. Το ίδιο ισχύει και για τη μνήμη ROM, αλλά εμείς δεν έχουμε κανένα παράπονο. H αποστολή αυτού του χειροποίητου υπολογιστή δεν ήταν να σπάσει κάποιο ρεκόρ σε τεχνικά χαρακτηριστικά, ούτε σε επιδόσεις.

Η μνήμη RAM του υπολογιστή μας είναι απειροελάχιστη, ακόμα και για τα δεδομένα των υπολογιστών της δεκαετίας του ’80. Το ίδιο ισχύει και για τη μνήμη ROM, αλλά εμείς δεν έχουμε κανένα παράπονο. H αποστολή αυτού του χειροποίητου υπολογιστή δεν ήταν να σπάσει κάποιο ρεκόρ σε τεχνικά χαρακτηριστικά, ούτε σε επιδόσεις.

Πραγματικό Personal Computer
Περιττό να σας πω ότι αυτή η ιδέα κατέλαβε πλήρως τη σκέψη μου κι από τη σύλληψή της μέχρι σήμερα, έχασα κάθε διάθεση να ασχοληθώ με τα CPLD. Για το όλο εγχείρημα στράφηκα και πάλι στους 8μπιτους μικροελεγκτές της οικογένειας AVR, με τους οποίους είμαι βαθιά εξοικειωμένος. Η προτίμηση στο “δοκιμασμένο υλικό” δεν πρέπει να ερμηνευτεί σαν υποχώρηση. Είχα αποφασίσει να φτιάξω έναν κανονικό υπολογιστή και δεν σκόπευα να κάνω εκπτώσεις. Αυτό βέβαια δεν σημαίνει ότι είχα και αυταπάτες. Η χρήση των 8μπιτων μικροελεγκτών έθετε χαμηλό ταβάνι για τις επιδόσεις. Σε γενικές γραμμές, ο υπολογιστής μου θα βρισκόταν στα ίδια επίπεδα με εκείνους της δεκαετίας του ’80. Μιλάμε για την εποχή που η IBΜ έκανε διάσημο τον όρο PC. Η σκέψη ότι σχεδίαζα έναν τέτοιο υπολογιστή από το μηδέν, μου έδινε την αίσθηση ότι ορίζω εκ νέου την έννοια του Personal Computer. Ναι, υπερβάλλω λίγο, αλλά αυτό δεν σημαίνει ότι δεν βρήκα τη σκέψη διασκεδαστική.

Μετά από τόση δουλειά, για να φτιάξω τον υπολογιστή στον οποίο θα έγραφα το 'Hello World', αποφάσισα να το ρίξω έξω. Το πρόγραμμά μου τυπώνει το κλασικό μήνυμα, χρησιμοποιώντας το αγαπημένο μου χρώμα.

Μετά από τόση δουλειά, για να φτιάξω τον υπολογιστή στον οποίο θα έγραφα το ‘Hello World’, αποφάσισα να το ρίξω έξω. Το πρόγραμμά μου τυπώνει το κλασικό μήνυμα, χρησιμοποιώντας το αγαπημένο μου χρώμα.

Προσωπικοί υπολογιστές
Τα πρώτα Personal Computers εμφανίστηκαν στα μέσα της δεκαετίας του ’60. Ο χαρακτηρισμός “personal” δεν υπονοούσε ότι το σύστημα είχε χαμηλές επιδόσεις ή ότι προοριζόταν για απλές δουλειές. Η NASA είχε αγοράσει αρκετά κομμάτια από ένα μηχάνημα που θεωρείται ως το πρώτο PC — το Programma 101, από την Ιταλική Olivetti. Σκεφτείτε ότι οι συγκεκριμένοι υπολογιστές αξιοποιήθηκαν για τους υπολογισμούς του προγράμματος Apollo 11, που είχε σαν στόχο την προσεδάφιση στη Σελήνη. Η χρήση του όρου “προσωπικός” υπογράμμιζε την αντίθεση με τα Minicomputers και τα Mainframes, που απαρτίζονταν από ένα κεντρικό τμήμα και μερικά τερματικά. Οι χρήστες αυτών των υπολογιστών εργάζονταν στα τερματικά, αλλά η λειτουργία του υπολογιστή προϋπέθετε την παρουσία εξειδικευμένου προσωπικού στην κεντρική μονάδα. Το 1981 η IBM κυκλοφόρησε έναν υπολογιστή που στηριζόταν στον επεξεργαστή Intel 8088 κι έτρεχε στα 4.77MHz. Το πλήρες όνομα του μηχανήματος ήταν “IBM Personal Computer model 5150”, και η τεράστια εμπορική επιτυχία του καθιέρωσε την ονομασία “IBM PC”. Τα επόμενα χρόνια εμφανίστηκαν υπολογιστές που στηρίζονταν σε κλώνους/αντίγραφα του 8088 κι έτσι προέκυψαν τα περίφημα “IBM PC compatible”. Αυτή η ονομασία απλοποιήθηκε σύντομα σε ένα σκέτο “PC”.

Αυτό το πρόγραμμα επιδεικνύει τη μισή χρωματική παλέτα του συστήματος. Θα μπορούσε άνετα να επιδεικνύει το σύνολο των χρωμάτων, αλλά δεν θα χωρούσαν στην οθόνη *μαζί* με το πρόγραμμα ;)

Αυτό το πρόγραμμα επιδεικνύει τη μισή χρωματική παλέτα του συστήματος. Θα μπορούσε άνετα να επιδεικνύει το σύνολο των χρωμάτων, αλλά δεν θα χωρούσαν στην οθόνη μαζί με το πρόγραμμα ;)

Η εργασία μου ξεκίνησε απαντώντας σ’ ένα βασικό ερώτημα: Τι χρειάζεται για να χαρακτηριστεί ένα ηλεκτρονικό σύστημα ως υπολογιστής; Η απάντηση που έδωσα ικανοποιούσε τις προσωπικές μου προσδοκίες και ήταν επηρεασμένη από διάφορα αγαπημένα μηχανήματα που μεσουρανούσαν 30 χρόνια πριν. Το σύστημά θα μου θα έπρεπε να ενσωματώνει τα ακόλουθα:

  • Είσοδο για πληκτρολόγιο
  • Γλώσσα προγραμματισμού
  • Έξοδο εικόνας
  • Έξοδο ήχου

Αν πιστεύετε ότι η γλώσσα προγραμματισμού δεν έχει θέση στις προδιαγραφές του hardware, κάνετε λάθος. Σχεδίαζα έναν υπολογιστή παρόμοιο μ’ εκείνους που κυκλοφορούσαν τη δεκαετία του ’80. Αυτό μπορεί να μη σας λέει τίποτα, αλλά πρέπει να έχετε υπόψη ότι πολλά μηχανήματα της εποχής ενσωμάτωναν τον interpreter κάποιας παραλλαγής της BASIC, στο BIOS. Απ’ αυτή την άποψη, η γλώσσα προγραμματισμού ήταν πρακτικά αδύνατο να διαχωριστεί από το υλικό.

Η φωτογραφία δεν προέρχεται από κάποιο παλιό PC, αλλά από ένα 'IBM PC compatible'. Ο επεξεργαστής V40 της NEC αποτελεί κλώνο του 8088 της Intel. Πάντως ο συγκεκριμένος επεξεργαστής ενσωματώνει αρκετές βελτιώσεις, ενώ διαθέτει και περισσότερες εντολές σε σχέση με εκείνον της Intel.

Η φωτογραφία δεν προέρχεται από κάποιο παλιό PC, αλλά από ένα ‘IBM PC compatible’. Ο επεξεργαστής V40 της NEC αποτελεί κλώνο του 8088 της Intel. Πάντως ο συγκεκριμένος επεξεργαστής ενσωματώνει αρκετές βελτιώσεις, ενώ διαθέτει και περισσότερες εντολές σε σχέση με εκείνον της Intel.

Όπως αντιλαμβάνεστε, η παραπάνω λίστα δεν διατήρησε αυτή τη λακωνική μορφή για πολύ. Εξετάζοντας κάθε στοιχείο ως ξεχωριστό υποσύστημα, σκεφτόμουν και σημείωνα τα χαρακτηριστικά που θα ήθελα να έχει. Σε πολλές περιπτώσεις, εξάλλου, σημείωνα και λεπτομέρειες της υλοποίησης, που θα θεωρούσα ότι αργότερα θα μου φανούν χρήσιμες. Έτσι, σε σύντομο χρονικό διάστημα είχε προκύψει μια μακροσκελής λίστα τεχνικών προδιαγραφών, η οποία αποτέλεσε τον οδηγό για την υλοποίηση του υπολογιστή. Για να πάρετε μια γεύση, δείτε μερικά από τα χαρακτηριστικά του τελικού συστήματος:

  • Ανάλυση εικόνας: 256 x 240 pixels
  • Κείμενο: 32 στήλες x 24 γραμμές
  • Βάθος χρώματος: 8 bits (256 χρώματα)
  • Ήχος: 4 ανεξάρτητα κανάλια
  • Ακροδέκτες GPIO: 8 ψηφιακές είσοδοι/έξοδοι (λειτουργούν κι ως αναλογικές είσοδοι)
  • BASIC με πρόσθετες εντολές για το χειρισμό του hardware
  • Δυνατότητα αποθήκευσης και φόρτωσης προγραμμάτων
  • Είσοδο για πληκτρολόγιο PS2

Η κατασκευή του υπολογιστή διήρκεσε λίγο παραπάνω από έναν χρόνο και ήταν γεμάτη με αμέτρητες σπαζοκεφαλιές. Μπορώ να θυμηθώ αρκετά στάδια της ανάπτυξης κατά τα οποία ήμουν έτοιμος να παραιτηθώ. Σκεφτείτε την απελπισία που ένιωθα όταν, για παράδειγμα, το firmware του “κεντρικού επεξεργαστή” παρουσίαζε κάποιο άγνωστο πρόβλημα και η επικοινωνία με το κύκλωμα γραφικών αποτύγχανε. Χωρίς έξοδο στην οθόνη και χωρίς παλμογράφο, έπρεπε να κάνω debug στα τυφλά.

Ένας μακρινός πρόγονος των σύγχρονων GPU. Μεταξύ άλλων, το datasheet αναφέρει ότι μπορεί να οδηγήσει οθόνες LCD και CRT, υποστηρίζει αρκετές διαφορετικές αναλύσεις, διαθέτει μνήμη που μπορεί να αξιοποιηθεί ως video RAM και υποστηρίζει τη σύνδεση light pen. Το πιο εντυπωσιακό όμως είναι η ικανότητα διαχείρισης του δρομέα. Ναι, η σχεδίαση του δρομέα αποτελεί εργασία για τη GPU.

Ένας μακρινός πρόγονος των σύγχρονων GPU. Μεταξύ άλλων, το datasheet αναφέρει ότι μπορεί να οδηγήσει οθόνες LCD και CRT, υποστηρίζει αρκετές διαφορετικές αναλύσεις, διαθέτει μνήμη που μπορεί να αξιοποιηθεί ως video RAM και υποστηρίζει τη σύνδεση light pen. Το πιο εντυπωσιακό όμως είναι η ικανότητα διαχείρισης του δρομέα. Ναι, η σχεδίαση του δρομέα αποτελεί εργασία για τη GPU.

Στην παρούσα σειρά άρθρων θα μελετήσουμε τη δομή και τη λειτουργία του υπολογιστή σε όλα τα επίπεδα. Θα εξετάσουμε τις σχεδιαστικές επιλογές που έγιναν στο hardware, τους στόχους και τους περιορισμούς, όπως επίσης και τα λάθη. Σε αντίθεση με την ενστικτώδη απάντηση που θα έδινε κανείς, σε αυτή την κατασκευή το hardware είναι πολύ πιο απλό από το software. Ο κατάλληλος προγραμματισμός των μικροελεγκτών αποτέλεσε μακράν τη μεγαλύτερη πρόκληση. Ακριβώς γι’ αυτό, η παρουσίαση θα περιλαμβάνει και τη διεξοδική μελέτη του κώδικα, κάθε υποσυστήματος. Στο τέλος της διαδρομής θα μπορείτε να κατασκευάσετε κι εσείς τον συγκεκριμένο υπολογιστή ή, ακόμα καλύτερα, θα είστε σε θέση να σχεδιάσετε και να υλοποιήσετε τον δικό σας.

Το τσιπάκι με το κίτρινο αυτοκόλλητο προέρχεται από την AMD και είναι μια OTPROM (One Time Programmable ROM) των 16kB. Το τσιπ από την Toshiba αποτελεί έναν port extender και προσφέρει στον επεξεργαστή μερικούς πρόσθετους ακροδέκτες GPIO. Μόνο το Arduino νομίζατε ότι έχει αυτό το πρόβλημα;

Το τσιπάκι με το κίτρινο αυτοκόλλητο προέρχεται από την AMD και είναι μια OTPROM (One Time Programmable ROM) των 16kB. Το τσιπ από την Toshiba αποτελεί έναν port extender και προσφέρει στον επεξεργαστή μερικούς πρόσθετους ακροδέκτες GPIO. Μόνο το Arduino νομίζατε ότι έχει αυτό το πρόβλημα;

Απαραίτητος εξοπλισμός
Για να παρακολουθήσει κανείς τη συγκεκριμένη σειρά άρθρων απαιτούνται βασικές γνώσεις στα ηλεκτρονικά και στον προγραμματισμό. Μην φαντάζεστε τίποτα ιδιαίτερο. Αν σας αρέσει η μελέτη και η κατασκευή ηλεκτρονικών κυκλωμάτων, οσοδήποτε απλά κι αν ήταν αυτά που έχετε συναντήσει ως τώρα, το υλικό του υπολογιστή δεν θα σας δυσκολέψει. Αντιστοίχως, αν έχετε προγραμματίσει οποιονδήποτε μικροελεγκτή, θα κατανοήσετε εύκολα τη γενική λογική του κώδικα που εμψυχώνει τον υπολογιστή.

Πέρα από τα παραπάνω εφόδια, για να προχωρήσει κανείς στην υλοποίηση της κατασκευής θα χρειαστεί κι ορισμένα εργαλεία. Τα απολύτως απαραίτητα σύνεργα είναι μόλις τρία:

  • Ένα κολλητήρι με σχετικά λεπτή “μύτη”
  • Ένα πολύμετρο με “buzzer συνέχειας” (continuity tester)
  • Έναν hardware programmer για AVR

Για το κολλητήρι δεν υπάρχει κανένας ιδιαίτερος περιορισμός. Έχετε υπόψη ότι οι κολλήσεις είναι εύκολες, αλλά είναι και πάρα πολλές. Οι απαιτήσεις για το πολύμετρο είναι επίσης μηδαμινές. Το “buzzer συνέχειας” (μερικοί ηλεκτρολόγοι το αποκαλούν “τζιτζίκι”) θα σας βοηθήσει να εντοπίσετε τις προβληματικές κολλήσεις, καθώς και τα πιθανά βραχυκυκλώματα. Όπως είπαμε ήδη, οι κολλήσεις είναι πάρα πολλές και είναι βέβαιο ότι θα γίνουν λάθη. Εγώ πάντως έκανα πάρα πολλά.

Ο μικρός hardware programmer της Atmel. Υποστηρίζεται από το Atmel Studio, από το Arduino IDE κι από κάθε γνωστό εργαλείο για τον προγραμματισμό των AVR. Αποτελεί άριστη επιλογή για όσους ξεκινούν τώρα και σκοπεύουν να ασχοληθούν σοβαρά.

Ο μικρός hardware programmer της Atmel. Υποστηρίζεται από το Atmel Studio, από το Arduino IDE κι από κάθε γνωστό εργαλείο για τον προγραμματισμό των AVR. Αποτελεί άριστη επιλογή για όσους ξεκινούν τώρα και σκοπεύουν να ασχοληθούν σοβαρά.

Ο hardware programmer αποτελεί τη συσκευή που μεσολαβεί για τη μεταφορά ενός προγράμματος από τον υπολογιστή προς τον μικροελεγκτή. Μη σας ξεγελούν οι αυτοματισμοί που ενσωματώνει το Arduino. Ο προγραμματισμός ενός οποιουδήποτε μικροελεγκτή προϋποθέτει την παρουσία ενός hardware programmer. Εγώ αξιοποίησα ένα STK500 από την Atmel, μόνο και μόνο επειδή το είχα ήδη. Εσείς δεν είναι υποχρεωτικό να χρησιμοποιήσετε κάτι τόσο ακριβό. Μπορείτε να στραφείτε στον “entry-level” προγραμματιστή του ίδιου κατασκευαστή, που ονομάζεται AVRISP mkII και κοστίζει περί τα 30€. Αν αυτό το κόστος είναι απαγορευτικό τη δεδομένη περίοδο, μπορείτε να φτιάξετε το δικό σας programmer χρησιμοποιώντας ένα Arduino. Στην περίπτωση που επιλέξετε τη δεύτερη λύση, θα βρείτε αναλυτικές οδηγίες στο άρθρο “Ξεφύγετε από το Arduino” του τεύχους 025.

Για την ώρα μπορείτε να αναπολήσετε τα μηχανήματα της εποχής του ’80 κι αν δεν ανήκετε σε αυτούς που τα πρόλαβαν, μπορείτε να φανταστείτε τα χαρακτηριστικά που θα δίνατε σε έναν δικό σας υπολογιστή, αν τον χτίζατε από το μηδέν. Όταν η φαντασία αρχίσει να γίνεται ανιαρή διαβάστε τη συνέχεια, όπου ξεκινάμε τη μελέτη του hardware.

Αν δεν έχετε και δεν προτίθεστε να αγοράσετε κάποιον hardware programmer, μπορείτε να επιστρατεύσετε το Arduino. Αρκεί να του φορτώσετε το πρόγραμμα 'ArduinoISP' και να πραγματοποιήστε μια απλή συνδεσμολογία. Περισσότερες πληροφορίες θα βρείτε στο τεύχος 025, στο άρθρο 'Ξεφύγετε από το Arduino'.

Αν δεν έχετε και δεν προτίθεστε να αγοράσετε κάποιον hardware programmer, μπορείτε να επιστρατεύσετε το Arduino. Αρκεί να του φορτώσετε το πρόγραμμα ‘ArduinoISP’ και να πραγματοποιήστε μια απλή συνδεσμολογία. Περισσότερες πληροφορίες θα βρείτε στο τεύχος 025, στο άρθρο ‘Ξεφύγετε από το Arduino’.

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων