Εμφάνιση αναρτήσεων με ετικέτα BASIC. Εμφάνιση όλων των αναρτήσεων
Εμφάνιση αναρτήσεων με ετικέτα BASIC. Εμφάνιση όλων των αναρτήσεων

Κυριακή 12 Φεβρουαρίου 2023

B3 Browser BASIC

Κάποτε, όταν άναβες τον υπολογιστή σου βρισκόσουν αντιμέτωπος με την οθόνη του BASIC interpreter. Στην καλύτερη περίπτωση απεικόνιση των bytes ελεύθερης μνήμης, ένα "Ready" κι ένας κέρσορας να αναβοσβήνει. That's it. Τίποτα άλλο. Κι όμως, σε αυτό το λιτό - δωρικό θα μπορούσε κάποιος να το χαρακτηρίσει - περιβάλλον μπορούσες να κάνεις άπειρα πράγματα. Χωρίς να έχεις ούτε μια κασέτα με προγράμματα, ούτε μια δισκέτα, τίποτα. Σαν ζωγράφος με τις μπογιές, την παλέτα, τα πινέλα σου κι έναν κενό καμβά. Έτοιμος να δημιουργήσεις.

Λίγο καιρό αργότερα, τα πράγματα άλλαξαν. Ο κέρσορας που αναβόσβηνε αντικαταστάθηκε από ένα χεράκι που κρατούσε μια δισκέτα. Από μία μαύρη οθόνη που αναζητούσε boot disk. Ή, από μία πράσινη επιφάνεια εργασίας που περίμενε μια δισκέτα προκειμένου να φανεί κάπου, κάπως, χρήσιμη. Πλέον δεν ήσουν εσύ ο ζωγράφος, τώρα πια απλά θα μπορούσες να θαυμάσεις τα έργα των άλλων. Και στην κατάσταση της πρώτης παραγράφου (που περιγράφει τους 8bit υπολογιστές) μπορούσες να το κάνεις αυτό, αλλά ξεκινούσες από αλλού. Αυτή ήταν η μεγάλη διαφορά.

Εσύ που διαβάζεις αυτό το κείμενο, όπως και η πλειονότητα του κόσμου εκεί έξω, πιθανότητα δεν πέρασες ποτέ από τον κόσμο των 8μπιτων υπολογιστών. Ή, ίσως, να μην πέρασες από αυτόν τον κόσμο την ώρα που έπρεπε, τα χρόνια που μεσουρανούσαν υπολογιστές με 16-64ΚΒ μνήμης. Για εσένα όμως, όπως και για αυτούς τους λίγους (πια) που έζησαν την εποχή του κενού καμβά υπάρχει μια ενδιαφέρουσα σελίδα, που ονομάζεται B3 Browser BASIC.


Το "B3" προκύπτει από τα τρία B's, ήτοι Basically Browser BASIC. Αυτό βασικά, μια BASIC που τρέχει στον browser. Όχι η ιδανική έκδοση της γλώσσας για να δημιουργήσει κάποιος χαώδεις εφαρμογές με χιλιάδες γραμμές κώδικα, αλλά μια χαρά κατάλληλη για να πειραματιστεί. Για να πάρει μια ιδέα του "πώς ήταν τότε". Για να ζήσει την εμπειρία μιας κατάστασης στην οποία πριν φορτώσεις το όποιο παιχνίδι καθόσουν πρώτα να "παίξεις" με τη γλώσσα, να κάνεις τις πρώτες σου, δειλές βουτιές στον προγραμματισμό. Να περάσεις ρε παιδάκι μου έστω και για λίγες στιγμές από τη θέση του δημιουργού, προτού επιστρέψεις σε αυτήν του θεατή. Μεγάλη υπόθεση, γι' αυτό και η ικανοποίηση που αντλεί κάποιος από τη δημιουργία έστω και του πιο απλού προγράμματος είναι απείρως μεγαλύτερη αυτής της ολοκλήρωσης του πιο δύσκολου παιχνιδιού. Τώρα βέβαια, το να γράφω κάτι τέτοιο εν έτει 2023 είναι μάλλον ανόητο, καθώς, πραγματικά, αμφιβάλλω εάν θα βρουν κάποιον αποδέκτη που να συμφωνεί. 35 χρόνια πίσω δεν θα διαφωνούσε κανένας, αλλά πλέον οι εποχές άλλαξαν, και οι δημιουργοί είναι χαμένοι μέσα σε αχανή πλήθη χρηστών. Λογικό, καθώς πλέον όταν ανάβει το μηχάνημά σου βρίσκεσαι αντιμέτωπος με τα social media, όχι με μια κενή οθόνη με ένα "Ready". Πλέον, αντί να δημιουργείς κριτικάρεις και χαβαλεδιάζεις. Τίποτα κακό σε αυτά, αλλά όταν αποτελούν όλη σου τη ζωή, ε, τότε δεν είναι και ό,τι καλύτερο...

Εν πάση περιπτώσει, αν θέλετε να τσεκάρετε την B3 Browser BASIC, να φτιάξετε 2-3 απλά loops, να πειραματιστείτε με το αρχαϊκό animation σε text mode με χαρακτήρες που μετακινούνται ανά μία θέση, να παίξετε με τα χρώματα και με τα σχήματα, μπορείτε να την βρείτε εδώ. Δοκιμάστε την, πού ξέρετε, μπορεί να νιώσετε έστω και λίγο όπως νιώθαμε εμείς, οι χρήστες των πρώτων home computers 40 και βάλε χρόνια πίσω...

Σάββατο 16 Απριλίου 2022

Όχι για... Αμιγκάδες!

Δεν είναι μία και δύο οι φορές που έχω γράψει κάποιο θέμα σχετικό με τον προγραμματισμό σε BASIC στο παρόν blog. Βλέπετε, για όσους ανήκουν στη γενιά μου και η ενασχόλησή τους με τους υπολογιστές ξεκίνησε από τα 8bit home micros, τότε που - θέλοντας και μη - περνούσες από τον BASIC interpreter προκειμένου να κάνεις οτιδήποτε, η (αρχαία, πια) αυτή γλώσσα προγραμματισμού είχε πολύ μεγαλύτερη σημασία από ότι στους μεταγενέστερους "κομπιουτεράδες". Και όταν αναφέρομαι σε "μεταγενέστερους" εννοώ ανθρώπους που κόλλησαν το "μικρόβιο" μερικά μόλις χρόνια αργότερα και η πρώτη τους επαφή ήταν με την Amiga ή με τον Atari ST. Αυτούς τους ανθρώπους πώς άραγε μπορείς να τους πείσεις ότι η δημιουργική απόλαυση που προσέφεραν μηχανήματα με (πολύ) υποδεέστερο hardware ήταν ίση ή και μεγαλύτερη από την ικανοποίηση που αντλούσε κανείς από τις ψυχαγωγικές (λέγε με παιχνίδια) αρετές των πανίσχυρων απογόνων τους; Πόσο εύκολο είναι άραγε να θαυμάσει ένα παιχνίδι σκακιού που φτιάχτηκε χωρίς γραφικά στο 1KB μνήμης RAM του ZX81 κάποιος που μεγάλωσε με τις αισθήσεις του να διεγείρονται από το Shadow of the Beast; Πιστέψτε με, δεν είναι καθόλου εύκολο, και το κατανοώ απόλυτα. Γι' αυτό και ο τίτλος της ανάρτησης: οι Αμιγκάδες (και οι Αταράδες - αν υπάρχουν τέτοιοι - ) πιθανότατα δεν πρόκειται να διαβάσουν εδώ κάτι που να τους αγγίζει ή να τους ενδιαφέρει. Στους υπόλοιπους... δεινόσαυρους απευθύνεται η ανάρτηση, σε αυτούς που έχουν βιώσει κάποτε στη ζωή τους το αίσθημα της ολοκλήρωσης φέρνοντας εις πέρας ένα απλό ή σύνθετο προγραμματιστικό task μέσα από μερικές (ή περισσότερες από μερικές) γραμμές προγράμματος BASIC.

Για αυτούς δηλαδή που χρονικά βρίσκονται πιο κοντά στο να αποκτήσουν εγγόνια από το να κάνουν παιδιά, η ιστορία με την BASIC έχει "ζουμί". Διότι, όπως άπαντες θα θυμάστε - αν δεν σας έχει χτυπήσει η γεροντική άνοια - , δεν υπήρχε κάτι που δεν μπορούσε να γίνει μέσω της BASIC, απλά η πλειοψηφία των προγραμμάτων δεν μπορούσε να υλοποιηθεί με ικανοποιητική ταχύτητα. Το πρόβλημα αυτό φυσικά μπορεί κάλλιστα να ξεπεραστεί με την επεξεργαστική ισχύ των σύγχρονων υπολογιστών, αλλά τι γίνεται όταν κάποιος έχει να αντιμετωπίσει επεξεργαστές που "τρέχουν" (πιο σωστά "σέρνονται") στο 1-4MHz σε συνδυασμό με περιορισμένη μνήμη ελάχιστων kilobytes; Πόσους λαγούς μπορεί να βγάλει κάποιος από το καπέλο του;

Πολλούς, απ' ότι αποδείχτηκε. Οι σύγχρονοι coders, υποβοηθούμενοι από τα μέσα και την τεχνογνωσία της εποχής μας, κατάφεραν να φτιάξουν εντυπωσιακότατα προγράμματα σε BASIC στα 8bit home micros του παρελθόντος. Και ναι, μιλάμε για demos αλλά και παιχνίδια. Όπως για παράδειγμα το (απίστευτο) Balik για τον ZX Spectrum για το οποίο είχα γράψει παλιότερα. Ή το Tetris dotBAS στον Amstrad CPC. Ή το ZX Frogger 48K, πάλι στον Spectrum. Μιλάμε για παραγωγές που στα 80s θα μπορούσαν άνετα να ήταν commercial τίτλοι, έτσι;


Αλλά, δεν έφταναν αυτά. Οι περιορισμοί της ταχύτητας και της λιλιπούτειας μνήμης δεν αρκούσαν ως προκλήσεις για τους ταλαντούχους προγραμματιστές του σήμερα. Έτσι, σκέφτηκαν να προσθέσουν έναν ακόμα, και οδηγήθηκαν στα περίφημα 10-liners: τι πρόγραμμα μπορεί άραγε να φτιάξει κάποιος σε 10 γραμμές BASIC; Στο σημείο αυτό, είναι απαραίτητο να διευκρινίσουμε το εξής: στους 8bit micros των 80s, μία "γραμμή" BASIC μπορεί να είχε παραπάνω από μία εντολές. Ανάλογα μάλιστα με τη διάλεκτο του κάθε υπολογιστή, αυτή η "γραμμή" μπορεί είτε να φαινόταν... κινέζικα (Commodore 64) είτε να ήταν μία ολόκληρη οθόνη (ZX Spectrum). Αλλά αυτά είναι λεπτομέρειες. 10 γραμμές είναι 10 γραμμές. Από τη στιγμή που, αναλόγως του υπολογιστή, μπορούσες να έχεις ένα πρόγραμμα με από 9999 έως 65535 "γραμμές", καταλαβαίνετε τον περιορισμό που δημιουργεί ο αριθμός "10", έτσι δεν είναι;

Έτσι λοιπόν ξεκίνησε πριν από μερικά χρόνια ο διαγωνισμός για τα "10 liners", ο οποίος έφτασε φέτος στην 11η διοργάνωσή του και, όπως και κάθε χρονιά, μας χάρισε πολλά "διαμαντάκια". Τους ακριβείς κανόνες και τις υποκατηγορίες μπορείτε να τους δείτε παρακάτω:

Μιας και ο φετινός διαγωνισμός ολοκληρώθηκε, δυστυχώς δεν μπορείτε να πάρετε μέρος, ακόμα και αν σας κέντρισε το ενδιαφέρον. Κάντε λίγη υπομονή για του χρόνου. Μπορείτε όμως να πάρετε μία ιδέα για τις παραγωγές που διαγωνίστηκαν ή, ακόμα καλύτερα, να ψαχουλέψετε τα listings τους, εδώ (πατήστε στο "Read more" σε κάθε πρόγραμμα).

Όπως έγραψα και προηγουμένως, ο "κώδικας" (δεν το λέγαμε έτσι τότε) μπορεί να είναι πυκνός και ολίγον τι ακαταλαβίστικος σε κάποιες περιπτώσεις, προκειμένου να χρησιμοποιηθεί μέχρι και ο τελευταίος διαθέσιμος χαρακτήρας, ή το τελευταίο διαθέσιμο byte. Το αποτέλεσμα δεν είναι και αυτό που θα χαρακτηρίζαμε ως... user friendly, όπως π.χ. εδώ:

Εντάξει, διάλεξα επίτηδες μηχάνημα σε Commodore BASIC με τις "ιδιαίτερες" συντομογραφίες των εντολών που το κάνουν κάτι περισσότερο από δυσανάγνωστο. Αλλά πήρατε μια ιδέα, έτσι;

Προσωπικά, βγάζω το καπέλο σε όλους αυτούς τους coders οι οποίοι, ορμώμενοι από την προκήρυξη του διαγωνισμού, έσπευσαν να καταθέσουν τις προγραμματιστικές τους ιδέες, άλλες απλές, άλλες (πολύ) πιο σύνθετες, αλλά όλες ποτισμένες με μεράκι και αγάπη για αυτό που πρέσβευαν κάποτε τα 8μπιτα μηχανήματα: ήταν υπολογιστές, με όλη τη σημασία της λέξης, που προορίζονταν για τον προγραμματιστή, τον χομπίστα, τον επιστήμονα, τον καλλιτέχνη και, φυσικά, τον gamer. Αλλά δεν στόχευαν σχεδόν αποκλειστικά στον τελευταίο όπως οι 16μπιτοι διάδοχοί τους, στους οποίους η BASIC ήταν αρχικά ένα ακόμα πρόγραμμα και στη συνέχεια δεν δινόταν καν μαζί με τη βασική μονάδα. Άλλα μηχανήματα, άλλες εποχές. Ακόμα κι αν μεσολάβησαν λιγότερα από 10 χρόνια...

Πέμπτη 24 Φεβρουαρίου 2022

Προγραμματίστε online σε BBC BASIC!

Όσοι πρόλαβαν την εποχή των 8bit micros και τον τεχνικό τύπο της εποχής (Computer για Όλους, Pixel) προφανώς θα θυμούνται ότι ο BBC micro αντιμετωπιζόταν περίπου με... δέος, ως ένας υπολογιστής που ήταν το απόλυτο μέτρο σύγκρισης για οποιονδήποτε άλλο κυκλοφορούσε. Απλησίαστος τιμολογιακά σε σχέση με τις άλλες 8bit προτάσεις, αλλά με την αύρα του "σοβαρού", αυτού που θα επέλεγε κάποιος που δεν θα ήθελε να κάνει συμβιβασμούς.

Και πράγματι, έτσι ήταν σε μεγάλο βαθμό. Το μηχάνημα της Acorn που επέλεξε το BBC προκειμένου να αποτελέσει το αντικείμενο των μαθημάτων χρήσης υπολογιστών και προγραμματισμού σε BASIC που πρόβαλλε στα 80s, δεν ήταν όπως όλα τα υπόλοιπα: εκεί που o ανταγωνισμός έκοβε μέχρι και τους διακόπτες on/off (Spectrum) ή δεν πλήρωνε για καλύτερη BASIC (Commodore 64), ο BBC micro ή Acorn Proton όπως ήταν η αρχική του ονομασία (ακολούθησε τον Atom και προηγήθηκε του Electron), ερχόταν εφοδιασμένος με ό,τι θύρα διασύνδεσης μπορούσε να χρειαστεί - ή, απλά, να φανταστεί! - κάποιος, με δυνατότητα τοποθέτησης 2ου επεξεργαστή αλλά και με μια διάλεκτο BASIC που συνδύαζε δύο αντικρουόμενα χαρακτηριστικά. Διέθετε πλήθος εντολών ώστε να μπορεί κάποιος μέσω αυτής να κάνει σχεδόν τα πάντα, αλλά ήταν και ταχύτατη, αφήνοντας κατά πολύ πίσω της τις προτάσεις του ανταγωνισμού. Ίσως δεν είναι τυχαίο το ότι ο Acorn Proton και η BASIC του ήταν προϊόντα της δουλειάς των Sophie Wilson και Steve Furber, του διδύμου δηλαδή που σχεδίασε ένα chip που μάλλον το γνωρίζουν άπαντες, αφού αποτελεί την "καρδιά" της συντριπτικής πλειονότητας των handled και mobile συσκευών που υπάρχουν αυτή τη στιγμή στον πλανήτη μας: ναι, αναφέρομαι στον επεξεργαστή ARM, τα αρχικά του οποίου σημαίνουν Acorn RISC Machine. Για δες...

Ας επανέλθουμε όμως στην BASIC του BBC microcomputer. Η διάλεκτος αυτή, αν και ομολογουμένως δεν ήταν η πλέον user friendly που υπήρχε, απέκτησε φανατικούς υποστηρικτές και χρήστες, χάρη στις δυνατότητες και στα χαρακτηριστικά της. Δεν είναι τυχαίο λοιπόν που σήμερα, 41 χρόνια αργότερα, υπάρχει το BBC Micro Bot, ένα bot του Twitter που μεταφέρει Tweets και τα εκτελεί σε έναν online εξομοιωτή BBC Micro! Ακριβώς λόγω του περιορισμένου μεγέθους θα θεωρούσε κάποιος ότι είναι αδύνατο να φτιαχτεί κάτι το εντυπωσιακό, αλλά, πιστέψτε με, αυτό δεν θα μπορούσε να απέχει περισσότερο από την αλήθεια: δείτε την σελίδα του BBC Micro Bot και... χαζέψτε! Να σημειώσω ότι πατώντας πάνω σε οποιαδήποτε εικόνα μεταφερόμαστε στον online εξομοιωτή με το listing του προγράμματος που την δημιούργησε, κάτι που, πέρα από ενδιαφέρον, μπορεί να αποβεί και εξόχως... διδακτικό.


 

Αλλά, πού πάτε, δεν τελειώσαμε: ο online εξομοιωτής για το BBC micro που λέγαμε; Λοιπόν, κάντε μια βόλτα σε αυτή τη σελίδα όπου, όχι μονάχα θα βρείτε τον online emulator για να πειραματιστείτε, αλλά και αρκετά παραδείγματα που αν μη τι άλλο δείχνουν τις εντυπωσιακές δυνατότητες της BBC BASIC.

Παρατηρώ εσχάτως ότι υπάρχει μια τάση αναβίωσης του προγραμματισμού σε γλώσσα BASIC σε retro computers και δεν θα σας κρύψω ότι αυτό είναι κάτι που με ευχαριστεί ιδιαίτερα, καθώς back in the day (και όχι μονάχα τότε) είχα ξοδέψει εκατοντάδες ώρες της ζωής μου πειραματιζόμενος με αυτήν και διερωτώμενος πώς θα μπορούσα να φτιάξω κάτι εντυπωσιακό αλλά και γρήγορο ταυτόχρονα. Εννοείται πως ποτέ δεν τα κατάφερα, αλλά όπως μπορείτε να δείτε από αρκετές σύγχρονες δημιουργίες αλλά και από το BBC Micro Bot πολλοί άλλοι το έκαναν!

Πέμπτη 21 Οκτωβρίου 2021

Balik: the raw power of Sinclair BASIC

"Είναι να γελάει κανείς", που θα έλεγε και ο μακαρίτης ο Φίλιππας ο Συρίγος. Γιατί; Διότι κάποια τυπάκια από την Τσεχία και την Σλοβακία - θυμηθείτε ότι "στα χρόνια μας" επρόκειτο για κοινή χώρα που ονομαζόταν Τσεχοσλοβακία - θεώρησαν λογικό και εφικτό να φτιάξουν ένα demo χρησιμοποιώντας την... Sinclair BASIC! Κανονικά, στο σημείο αυτό θα έπρεπε να είχα βάλει παραπάνω από ένα θαυμαστικά και να είχα σταματήσει με ατάκες του τύπου "δεν μεταδίδω άλλο", αλλά επειδή γνωρίζω ότι ίσως να μην καταλαβαίνετε άπαντες ποιο ακριβώς είναι το όλο θέμα και γιατί το θεωρώ κάτι που έχει κάποιο ιδιαίτερο ενδιαφέρον, θα σας κάνω ένα (πολύ) σύντομο μαθηματάκι ιστορίας...

Την εποχή λοιπόν που έκανε την εμφάνισή του ο ZX Spectrum της Sinclair, το 1982, ακριβώς στη μέση της περιόδου της κυριαρχίας των 8bit υπολογιστών, ο κανόνας ήταν κάθε μηχάνημα που κυκλοφορούσε να είναι εξοπλισμένο και με μία διάλεκτο της γλώσσας BASIC (υπήρξαν και κάποιες ελάχιστες εξαιρέσεις, αλλά δεν είναι του παρόντος). Η δημοφιλέστερη διάλεκτος της BASIC που υπήρχε εκείνη την εποχή ήταν η Microsoft BASIC, πράγμα που σήμαινε ότι όποιος κατασκευαστής επιθυμούσε να εξοπλίσει τον υπολογιστή του με τη γλώσσα αυτή θα έπρεπε να πληρώσει κάποιο ποσό στην εταιρία του Bill Gates και του Paul Allen. Οι περισσότεροι κατασκευαστές το έκαναν, αλλά ο Clive Sinclair, επιθυμώντας οι home computers του να έχουν όσο το δυνατόν χαμηλότερη τιμή ώστε να είναι προσιτοί στον καθένα, απέρριψε την ιδέα από την αρχή: παρά να επιβαρύνει τον καταναλωτή με το κόστος της άδειας χρήσης της Microsoft BASIC, ανέθεσε στην εταιρία Nine Tiles τη δημιουργία της Sinclair BASIC, τα δικαιώματα της οποίας θα ανήκαν αποκλειστικά και μόνο στην Sinclair Research. Οι άνθρωποι της Nine Tiles - αρχικά ο John Grant και στη συνέχεια ο Steve Vickers - έφεραν εις πέρας το έργο, ξεκινώντας με την πρώτη έκδοση της Sinclair BASIC με την οποία εφοδιάστηκε ο ZX80 (4ΚΒ σε μέγεθος), συνεχίζοντας με την βελτιωμένη έκδοση του ZX81 (8KB) την οποία και εξέλιξαν σε μία γλώσσα που πλέον υποστήριζε γραφικά υψηλής ανάλυσης, χρώματα και ήχο, τις νέες δυνατότητες δηλαδή που διέθετε ο ZX Spectrum. Αυτή η τελευταία έκδοση της Sinclair BASIC από την Nine Tiles ήταν διπλάσια σε μέγεθος (16ΚΒ) και, παρόλο που σε κάποιες εντολές ξέφευγε λίγο από τα standards χρησιμοποιώντας ιδιαίτερο συντακτικό και ονοματολογία, αποτέλεσε ένα σημαντικό επίτευγμα, καθώς ήταν μία διάλεκτος που μπορούσε κουτσά-στραβα να ανταποκριθεί στα πάντα. Το κοινό την λάτρεψε και ήταν αμέτρητα τα προγράμματα σε Sinclair BASIC που δημοσιεύτηκαν στα περιοδικά της εποχής και αναρίθμητοι οι χρήστες που ξημεροβραδιάζονταν καθημερινά ππροσπαθώντας να την χρησιμοποιήσουν ως όχημα για τον μετασχηματισμό των ιδεών τους σε λειτουργικά προγράμματα. Πέρα από την (αρκετά ενοχλητική) έλλειψη εντολών δομημένου προγραμματισμού, η Sinclair BASIC είχε ένα σημαντικότατο ελάττωμα: ήταν αργή. Για την ακρίβεια ήταν από τις πλεόν αργές διαλέκτους BASIC όπως μπορείτε να διαπιστώσετε και από αυτή τη σειρά αναρτήσεων.

Όμως, ας μην κοροϊδευόμαστε: ακόμα και μια ταχύτατη υλοποίηση της BASIC, όπως π.χ. αυτές των BBC micro και Amstrad CPC, δεν είναι η κατάλληλη γλώσσα για τον προγραμματισμό demos. Εκεί χρειάζεται άμεση επικοινωνία με τα ίδια τα chips και πλήρης εκμετάλλευση του κάθε κύκλου ρολογιού του επεξεργαστή. Εκεί, οι γλώσσες υψηλού επιπέδου δίνουν με συνοπτικές διαδικασίες τη θέση τους στην assembly. Demos σε BASIC δεν γίνεται να φτιαχτούν, τουλάχιστον όχι τέτοια που να δίνουν παρόμοια αποτελέσματα με αυτά που είναι γραμμένα σε assembly. Εκτός...

Εκτός κι αν έχουμε να κάνουμε με τους θεότρελους (πρώην) Τσεχοσλοβάκους του group Gemba Boys οι οποίοι με το Balik αποφάσισαν να με διαψεύσουν στο έπακρο για όσα έγραψα στην προηγούμενη παράγραφο!

Πραγματικά, το Balik σου δίνει την εντύπωση ότι είναι γραμμένο εξ' ολοκλήρου σε assembly διότι απλά, αυτά που κάνει δεν γίνονται σε BASIC! Και όχι μονάχα δεν γίνονται, αλλά, ακόμα και αν γινόντουσαν θα απαιτούσαν... μέρες μέχρι να ολοκληρωθούν! Έτσι και εγώ λοιπόν, από τη μία περίεργος και από την άλλη λιγάκι δύσπιστος, προσπάθησα να αποκτήσω πρόσβαση στον κώδικα (listing το λέγαμε στα χρόνια μου) του Balik. Και, σχετικά εύκολα τα κατάφερα. Ιδού ένα δείγμα:

Βλέπετε πως πρόκειται για ατόφια Sinclair BASIC. Πλην όμως, για παρατηρείστε λίγο πιο προσεκτικά: θα διαπιστώσετε ότι οι εντολές PEEK και POKE αποτελούν την συντριπτική πλειονότητα, ενώ και οι IN και OUT δεν πάνε πίσω. Επί της ουσίας λοιπόν έχουμε μεν ένα πρόγραμμα γραμμένο σε BASIC, το οποίο όμως δεν χρησιμοποιεί την πλειοψηφία των εντολών υψηλού επιπέδου αλλά αντί γι' αυτό διαβάζει και αποθηκεύει συνεχώς bytes σε συγκεκριμένες διευθύνσεις της μνήμης ή ports του επεξεργαστή. Αν έχετε ασχοληθεί με την "περίφημη" Commodore BASIC 2.0 θα γνωρίζετε ότι εκεί τα PEEK & POKE πάνε σύννεφο, ελλείψει άλλων εντολών. Στην περίπτωση του Balik όμως οι PEEK, POKE, IN και OUT χρησιμοποιούνται κατά κόρον προκειμένου υπορουτίνες σε γλώσσα μηχανής να κάνουν ό,τι θα έκαναν πολύ πιο αργά οι αντίστοιχες εντολές της BASIC. Οπότε, ναι μεν το Balik είναι γραμμένο σε Sinclair BASIC, αλλά μονάχα... τυπικά!

Όπως και να 'χει, το Balik είναι μία εντυπωσιακότατη παραγωγή, η οποία μπορεί να μην παρουσιάζει  ακριβώς την ωμή δύναμη της Sinclair BASIC όπως διατυμπανίζουν οι Gemba Boys, αλλά σίγουρα δείχνει πώς το πάντρεμα εντολών μιας γλώσσας υψηλού επιπέδου με υπορουτίνες γλώσσας μηχανής μπορεί να κάνει τα αδύνατα να γίνουν δυνατά. Κατεβάστε το Balik από εδώ ή δείτε το απλά να τρέχει στο παρακάτω video...

Α, και να μην το ξεχάσω: δεν άλλαξε η θεματολογία του blog σε "μόνο για Spectrum", έτσι; Ειλικρινά, είναι εντελώς συμπτωματικό το γεγονός ότι από τον θάνατο του "θείου" μέχρι και σήμερα όλα τα θέματα των αναρτήσεων έχουν να κάνουν με τον "γομολάστιχα". Λογικά, σύντομα θα αναφερθώ και σε κάτι άλλο. Απλά έτυχε, τίποτα περισσότερο...

Κυριακή 29 Μαρτίου 2020

The speed of BASIC: η παράξενη περίπτωση του Commodore 128 και η τελική κατάταξη (μέρος 5ο)

Να 'μαστε και πάλι με το τελευταίο μέρος του θέματος για την ταχύτητα της γλώσσας BASIC στα δημοφιλέστερα 8/16bit μηχανήματα (τα προηγούμενα μέρη μπορεί να τα βρείτε εδώ: 1ο, 2ο, 3ο και 4ο).

Τα όσα θα διαβάσετε στη συνέχεια δεν πρόκειται σε καμία περίπτωση να αλλάξουν ριζικά ό,τι αποκομίσατε από την ανάγνωση των προηγούμενων μερών και, για να λέμε και την αλήθεια, έχουν περισσότερο εγκυκλοπαιδική σημασία παρά ουσιαστική. Θα ασχοληθούμε λοιπόν κάπως εκτενέστερα με την περίπτωση του Commodore 128, ενός υπολογιστή που είχε πάμπολλες ιδιαιτερότητες, μία εκ των οποίων θα μας απασχολήσει και στη συνέχεια.

Αν θυμάστε τα αποτελέσματα των benchmarks στα 3 πρώτα μέρη, ο Commodore 128, αν και εφοδιασμένος ουσιαστικά με τον ίδιο επεξεργαστή με τα υπόλοιπα 8bit μοντέλα της Commodore, ήταν ο πιο αργός μεταξύ των ομόσταυλών του. Προφανώς έπαιζε ρόλο η πολυπλοκότητα (;) της Commodore BASIC 7.0, αλλά τι συνέβαινε με την ταχύτητα του 8502; Αυτή δεν γινόταν πουθενά αντιληπτή;


Ο Commodore 128 διέθετε 2 chip γραφικών: το VIC-II, το ίδιο δηλαδή με αυτό του Commodore 64 για συμβατότητα με τον πρόγονό του, αλλά και το VDC, που του παρείχε 80στηλο text mode και γραφικά υψηλής ανάλυσης. Όταν ο 128άρης λειτουργούσε σε C64 mode τότε επιστρατευόταν το VIC-II, το οποίο λειτουργούσε στο 1MHz όπως και ο 8502. Θα περίμενε κανείς όταν λειτουργούσε σε C128 mode λοιπόν να επιστρατεύεται το VDC, έτσι δεν είναι; Ε, και ναι, και όχι. Βλέπετε, το VDC είχε άλλη έξοδο από το VIC-II - μιλάμε για chips στον ίδιο υπολογιστή, μην ξεχνιόμαστε - οπότε, για να μπορούν να χρησιμοποιούσουν το μηχάνημα όσοι δεν διέθεταν RGB monitor, όταν ο 128άρης "έπαιζε" σε 40στηλο mode απεικόνισης χρησιμοποιούσε το VIC-II. Έλα όμως που το τελευταίο δεν είχε τη δυνατότητα να λειτουργήσει στα 2MHz! Το αποτέλεσμα των αλλοπρόσαλλων αυτών επιλογών ήταν το εξής: όταν ο υπολογιστής λειτουργούσε σαν Commodore 128 αλλά με composite monitor ή τηλεόραση να απεικονίζει 40 στήλες κειμένου και ο επεξεργαστής του να τρέχει στο 1MHz και όταν κάποιος χρησιμοποιούσε RGB οθόνη με 80στηλη απεικόνιση ο επεξεργαστής (και το VDC) να τρέχει στα 2MHz! Αλλά - και εδώ είναι το καλύτερο - υπήρχε η δυνατότητα, ακόμα και στο 40στηλο να "γυρίσουμε" τον επεξεργαστή στα 2MHz. Πώς; Μα, απλούστατα, χρησιμοποιώντας τις εντολές FAST και SLOW και κόβοντας την απεικόνιση στην οθόνη, ακριβώς όπως συνέβαινε δηλαδή και με τον ZX81 μερικά χρόνια νωρίτερα! Και, αν με τον ZX81 αυτό μπορούσε να γίνει εν μέρει αποδεκτό λόγω της πολύ χαμηλής τιμής του και της εποχής που κυκλοφόρησε, τι μπορεί κανείς να πει για τον Commodore 128; Αστεία και απαράδεκτα πράγματα θα έλεγα αν με ρωτούσατε για ένα μηχάνημα που ούτε φτηνό ήταν και αποτελούσε και τον διάδοχο του πλέον επιτυχημένου home computer παγκοσμίως...

Με όλα τα παραπάνω ως δεδομένα, θα επαναλάβουμε λοιπόν τα benchmarks 1-8 σε FAST mode λειτουργίας, κλείνοντας την απεικόνιση στην οθόνη μέχρι την ολοκλήρωση των υπολογισμών. Τα αποτελέσματα, όπως μπορείτε να διαπιστώσετε, διαφοροποιούνται αρκετά:

Benchmark #1

Commodore 128 (8502/2MHz) --> 1,2 sec
Commodore 128 (8502/1MHz) --> 2,2 sec


Benchmark #2

Commodore 128 (8502/2MHz) --> 5,7 sec
Commodore 128 (8502/1MHz) --> 11,7 sec


Benchmark #3

Commodore 128 (8502/2MHz) --> 10,7 sec
Commodore 128 (8502/1MHz) --> 22,2 sec


Benchmark #4

Commodore 128 (8502/2MHz) --> 11,2 sec
Commodore 128 (8502/1MHz) --> 23,7 sec


Benchmark #5

Commodore 128 (8502/2MHz) --> 12,5 sec
Commodore 128 (8502/1MHz) --> 26,4 sec


Benchmark #6

Commodore 128 (8502/2MHz) --> 20 sec
Commodore 128 (8502/1MHz) --> 42,75 sec


Benchmark #7

Commodore 128 (8502/2MHz) --> 32,50 sec
Commodore 128 (8502/1MHz) --> 68 sec


Benchmark #8

Commodore 128 (8502/2MHz) --> 61 sec
Commodore 128 (8502/1MHz) --> 128,5 sec



Βλέπουμε από τα παραπάνω ότι στα 2MHz ο υπολογιστής λειτουργεί στην διπλάσια ταχύτητα (ποιος θα το περίμενε;) και κάνει πάνω-κάτω τον μισό χρόνο σε όλες τις δοκιμές. Τον κατατάσσει όμως αυτό στην κορυφή των 8μπιτων; Όχι, όπως θα δούμε αν συγκρίνουμε τους χρόνους του με αυτούς των Acorn BBC model B & Electron και Amstrad CPC 464:


Benchmark #1

Acorn BBC Micro model B (6502/2MHz) --> 0,8 sec
Acorn Electron (6502/2MHz) --> 1,11 sec
Amstrad CPC 464 (Z80A/4MHz) --> 1,13 sec
Commodore 128 (8502/2MHz) --> 1,2 sec
Commodore 128 (8502/1MHz) --> 2,2 sec


Benchmark #2

Acorn BBC Micro model B (6502/2MHz) --> 3,1 sec
Amstrad CPC 464 (Z80A/4MHz) --> 3,4 sec
Acorn Electron (6502/2MHz) --> 4,01 sec
Commodore 128 (8502/2MHz) --> 5,7 sec
Commodore 128 (8502/1MHz) --> 11,7 sec


Benchmark #3

Acorn BBC Micro model B (6502/2MHz) --> 8,1 sec
Amstrad CPC 464 (Z80A/4MHz) --> 9,4 sec  
Commodore 128 (8502/2MHz) --> 10,7 sec
Acorn Electron (6502/2MHz) --> 11,12 sec 
Commodore 128 (8502/1MHz) --> 22,2 sec


Benchmark #4

Acorn BBC Micro model B (6502/2MHz) --> 8,7 sec
Amstrad CPC 464 (Z80A/4MHz) --> 9,8 sec
Commodore 128 (8502/2MHz) --> 11,2 sec
Acorn Electron (6502/2MHz) --> 11,76 sec
Commodore 128 (8502/1MHz) --> 23,7 sec


Benchmark #5

Acorn BBC Micro model B (6502/2MHz) --> 9,0 sec
Amstrad CPC 464 (Z80A/4MHz) --> 10,39 sec
Acorn Electron (6502/2MHz) --> 12,4 sec
Commodore 128 (8502/2MHz) --> 12,5 sec
Commodore 128 (8502/1MHz) --> 26,4 sec 


Benchmark #6

Acorn BBC Micro model B (6502/2MHz) --> 13,9 sec
Acorn Electron (6502/2MHz) --> 18,72 sec
Amstrad CPC 464 (Z80A/4MHz) --> 19,33 sec 
Commodore 128 (8502/2MHz) --> 20 sec
Commodore 128 (8502/1MHz) --> 42,75 sec


Benchmark #7

Acorn BBC Micro model B (6502/2MHz) --> 21,2 sec
Acorn Electron (6502/2MHz) --> 28,71 sec
Amstrad CPC 464 (Z80A/4MHz) --> 30,81 sec 
Commodore 128 (8502/2MHz) --> 32,50 sec
Commodore 128 (8502/1MHz) --> 68 sec  


Benchmark #8

Amstrad CPC 464 (Z80A/4MHz) --> 34,48 sec 
Acorn BBC Micro model B (6502/2MHz) --> 49,9 sec
Commodore 128 (8502/2MHz) --> 61 sec
Acorn Electron (6502/2MHz) --> 72,53 sec
Commodore 128 (8502/1MHz) --> 128,5 sec 


Όσοι περίμεναν θριάμβους, προφανώς θα απογοητεύτηκαν: ο Commodore 128 μόλις 3 στις 8 φορές κατόρθωσε να "χωθεί" μέσα στην πρώτη τριάδα των 8μπιτων, και αυτό στην 3η θέση και χωρίς απεικόνιση στον οθόνη! Δεν το λες και μεγαλειώδες όπως και να το κάνουμε...


Στο σημείο αυτό, και μετά την - απολύτως λογική - παραίνεση του φίλου μου Δημήτρη Φ. (dimfil) δοκιμάσαμε και κάποιες πιο εξελιγμένες διαλέκτους της BASIC στους Atari XL και Commodore 64, ήτοι τις Turbo BASIC XL και Simon's BASIC. Όπως θα δούμε στη συνέχεια, η Turbo BASIC XL λίγο-πολύ επιβεβαιώνει το πρώτο συνθετικό της ονομασίας της, ενώ, από την άλλη, η Simon's BASIC, η οποία ποτέ δεν διαφήμισε την ταχύτητά της, αποδείχτηκε ότι... καλώς έπραξε! Για να δούμε τι αποτελέσματα μας έδωσαν λοιπόν οι δύο εξ' Αμερικής 8μπιτοι:


Benchmark #1

Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 0,85 sec
Commodore 64 (6510/1MHz) --> 1,2 sec
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 1,5 sec
Atari 800XL (6502/2MHz) --> 2,2 sec


Benchmark #2

Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 3,27 sec
Atari 800XL (6502/2MHz) --> 7,3 sec
Commodore 64 (6510/1MHz) --> 9,3 sec
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 10,5 sec


Benchmark #3

Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 7,94 sec
Commodore 64 (6510/1MHz) --> 17,6 sec
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 19,5 sec
Atari 800XL (6502/2MHz) --> 19,7 sec


Benchmark #4

Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 8,74 sec
Commodore 64 (6510/1MHz) --> 18,8 sec
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 21 sec
Atari 800XL (6502/2MHz) --> 24,1 sec


Benchmark #5

Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 9,58 sec
Commodore 64 (6510/1MHz) --> 21 sec
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 22,3 sec
Atari 800XL (6502/2MHz) --> 26,3 sec


Benchmark #6

Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 14,74 sec
Commodore 64 (6510/1MHz) --> 29,5 sec
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 34 sec
Atari 800XL (6502/2MHz) --> 40,3 sec


Benchmark #7

Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 24,71 sec
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 54 sec
Commodore 64 (6510/1MHz) --> 55,4 sec
Atari 800XL (6502/2MHz) --> 60,1 sec

Benchmark #8

Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 56,53 sec
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 118 sec
Commodore 64 (6510/1MHz) --> 119,3 sec
Atari 800XL (6502/2MHz) --> - sec



Μάλιστα. Αφού λοιπόν διαπιστώσαμε ότι με την κατάλληλη γλώσσα οι 8μπιτοι Atari είναι, speed-wise, άλλα μηχανήματα, και πριν πάμε στην συνολική κατάταξη, θα εξετάσουμε και μια νέα, ολόφρεσκια προσθήκη: αναφέρομαι στον ZX Spectrum Next, ο οποίος θα μας δείξει πόσα απίδια πιάνει ένας Z80A (σε FPGA) στα 28MHz απέναντι στον παλιό, καλό ZX Spectrum.

Benchmark #1

ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 0,8 sec
ZX Spectrum (Z80A/3,5MHz) --> 4,4 sec


Benchmark #2

ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 1,45 sec
ZX Spectrum (Z80A/3,5MHz) --> 8,2 sec


Benchmark #3

ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 3,2 sec
ZX Spectrum (Z80A/3,5MHz) --> 20 sec


Benchmark #4

ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 3,1 sec
ZX Spectrum (Z80A/3,5MHz) --> 19,2 sec


Benchmark #5

ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 3,55 sec
ZX Spectrum (Z80A/3,5MHz) --> 23,1 sec


Benchmark #6

ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 8,45 sec
ZX Spectrum (Z80A/3,5MHz) --> 53,4 sec


Benchmark #7

ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 12,32 sec
ZX Spectrum (Z80A/3,5MHz) --> 77,6 sec


Benchmark #8

ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 36,8 sec
ZX Spectrum (Z80A/3,5MHz) --> 239 sec


Όπως αναμενόταν, ο ZX Spectrum Next, παρά το γεγονός ότι η Next BASIC είναι υπερσύνολο της Sinclair BASIC που βασίζεται στην τελευταία (με ό,τι κακό αυτό συνεπάγεται από άποψη ταχύτητας) είναι κατά πολύ πιο σβέλτος από τον original 48άρη Spectrum και, συνολικά, όπως θα δούμε και στη συνέχεια, βρίσκεται στην κορυφή των 8μπιτων, χωρίς όμως να μπορεί να πλησιάσει τις κορυφαίες επιδόσεις των 16μπιτων με πολύ πιο χαμηλά χρονισμένους επεξεργαστές...


Τώρα λοιπόν που έχουμε ολοκληρωμένη εικόνα από όλα τα μηχανήματα, θα σας αραδιάσω όλα τα αποτελέσματα με οτιδήποτε  ήταν δυνατόν να δοκιμαστεί συν μερικά μηχανήματα-έκπληξη, των οποίων τα αποτελέσματα συνέλεξα από το internet. Πάρτε βαθειά ανάσα και πάμε λοιπόν!

Benchmark #1

PC (Celeron/2400MHz) (QBASIC) --> 0,007 sec
Acorn Archimedes A3010 (ARM250/12MHz) --> 0,04 sec
Amiga (68000/7,14MHz) (AMOS) --> 0,40 sec
ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 0,8 sec
Atari ST (68000/8MHz) (STOS) --> 0,40 sec
Acorn Atom (6502/1MHz) --> 0,5 sec
Amiga (68000/7,14MHz) (ABasic) --> 0,60 sec
Acorn BBC micro model B (6502/2MHz) --> 0,85 sec
Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 0,85 sec 
Atari ST (68000/8MHz) (Atari BASIC) --> 1,10 sec
Acorn Electron (6502/2MHz) --> 1,11 sec
Amstrad CPC 464 (Z80A/4MHz) --> 1,13 sec
Commodore VIC-20 (6502/1MHz) --> 1,2 sec
Commodore 64 (6510/1MHz) --> 1,2 sec
Commodore 128 (8502/2MHz) --> 1,2 sec
Apple II (6502/1,022MHz) --> 1,3 sec
IBM PC (8088/4,77MHz) --> 1,5 sec
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 1,5 sec 
Dragon 32 (6809/0,89MHz) --> 1,6 sec
Oric Atmos (6502/1MHz) --> 1,6 sec
Spectravideo SVI-328 (Z80A/3,6MHz) --> 1,6 sec
Oric-1 (6502/1MHz) --> 1,8 sec
Commodore Plus/4 (8501/1,76MHz) --> 1,9 sec
Commodore 128 (8502/1MHz) --> 2,2 sec
Atari 800XL (6502/2MHz) --> 2,2 sec
Texas Instruments TI-99/4A (TMS9900/3MHz) --> 2,9 sec
Sinclair ZX Spectrum (Z80A/3,5MHz) --> 4,4 sec
Sinclair ZX81 (Z80A/3,5MHz) (Fast mode) --> 4,5 sec


Benchmark #2

PC (Celeron/2400MHz) (QBASIC) --> 0,011 sec
Acorn Archimedes A3010 (ARM250/12MHz) --> 0,15 sec
Atari ST (68000/8MHz) (STOS) --> 0,80 sec 
Amiga (68000/7,14MHz) (AMOS) --> 0,95 sec
ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 1,45 sec
Amiga (68000/7,14MHz) (ABasic) --> 2,10 sec
Acorn BBC micro model B (6502/2MHz) --> 3,1 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 3,2 sec
Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 3,27 sec 
Amstrad CPC 464 (Z80A/4MHz) --> 3,4 sec 
Acorn Electron (6502/2MHz) --> 4,01 sec
Acorn Atom (6502/1MHz) --> 5,1 sec 
IBM PC (8088/4,77MHz) --> 5,2 sec 
Spectravideo SVI-328 (Z80A/3,6MHz) --> 5,4 sec
Commodore 128 (8502/2MHz) --> 5,7 sec
Sinclair ZX81 (Z80A/3,5MHz) (Fast mode) --> 6,9 sec
Atari 800XL (6502/2MHz) --> 7,2 sec
Commodore VIC-20 (6502/1MHz) --> 8,3 sec
Apple II (6502/1,022MHz) --> 8,5 sec 
Sinclair ZX Spectrum (Z80A/3,5MHz) --> 8,7 sec
Texas Instruments TI-99/4A (TMS9900/3MHz) --> 8,8 sec
Commodore 64 (6510/1MHz) --> 9,3 sec
Commodore Plus/4 (8501/1,76MHz) --> 9,3 sec
Dragon 32 (6809/0,89MHz) --> 10,2 sec
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 10,5 sec
Commodore 128 (8502/1MHz) --> 11,7 sec
Oric Atmos (6502/1MHz) --> 15,2 sec
Oric-1 (6502/1MHz) --> 17,1 sec


Benchmark #3

PC (Celeron/2400MHz) (QBASIC) --> 0,024 sec
Acorn Archimedes A3010 (ARM250/12MHz) --> 0,37 sec
Amiga (68000/7,14MHz) (AMOS) --> 1,2 sec
Atari ST (68000/8MHz) (STOS) --> 1,45 sec  
ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 3,2 sec
Amiga (68000/7,14MHz) (ABasic) --> 4,1 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 6,1 sec
Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 7,94 sec 
Acorn BBC micro model B (6502/2MHz) --> 8,1 sec
Amstrad CPC 464 (Z80A/4MHz) --> 9,2 sec 
Acorn Atom (6502/1MHz) --> 9,5 sec  
Commodore 128 (8502/2MHz) --> 10,7 sec 
Acorn Electron (6502/2MHz) --> 11,12 sec
IBM PC (8088/4,77MHz) --> 12,1 sec 
Commodore VIC-20 (6502/1MHz) --> 15,5 sec
Apple II (6502/1,022MHz) --> 16 sec  
Sinclair ZX81 (Z80A/3,5MHz) (Fast mode) --> 16,4 sec
Commodore 64 (6510/1MHz) --> 17,6 sec
Spectravideo SVI-328 (Z80A/3,6MHz) --> 17,9 sec 
Commodore Plus/4 (8501/1,76MHz) --> 18,1 sec 
Atari 800XL (6502/2MHz) --> 19,1 sec
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 19,5 sec 
Dragon 32 (6809/0,89MHz) --> 19,7 sec
Sinclair ZX Spectrum (Z80A/3,5MHz) --> 21,1 sec
Commodore 128 (8502/1MHz) --> 22,2 sec 
Texas Instruments TI-99/4A (TMS9900/3MHz) --> 22,8 sec 
Oric Atmos (6502/1MHz) --> 25,4 sec
Oric-1 (6502/1MHz) --> 29 sec


Benchmark #4

PC (Celeron/2400MHz) (QBASIC) --> 0,024 sec
Acorn Archimedes A3010 (ARM250/12MHz) --> 0,33 sec
Amiga (68000/7,14MHz) (AMOS) --> 1,25 sec
Atari ST (68000/8MHz) (STOS) --> 1,35 sec  
ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 3,1 sec
Amiga (68000/7,14MHz) (ABasic) --> 5,1 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 6,8 sec
Acorn BBC micro model B (6502/2MHz) --> 8,7 sec
Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 8,74 sec 
Amstrad CPC 464 (Z80A/4MHz) --> 9,7 sec 
Acorn Atom (6502/1MHz) --> 10,8 sec  
Commodore 128 (8502/2MHz) --> 11,2 sec 
Acorn Electron (6502/2MHz) --> 11,76 sec
IBM PC (8088/4,77MHz) --> 12,6 sec 
Sinclair ZX81 (Z80A/3,5MHz) (Fast mode) --> 15,8 sec 
Commodore VIC-20 (6502/1MHz) --> 17,1 sec
Apple II (6502/1,022MHz) --> 17,8 sec  
Commodore Plus/4 (8501/1,76MHz) --> 18,8 sec 
Commodore 64 (6510/1MHz) --> 19,5 sec
Spectravideo SVI-328 (Z80A/3,6MHz) --> 19,6 sec
Sinclair ZX Spectrum (Z80A/3,5MHz) --> 20,4 sec 
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 21 sec 
Dragon 32 (6809/0,89MHz) --> 21,6 sec 
Atari 800XL (6502/2MHz) --> 22,8 sec
Commodore 128 (8502/1MHz) --> 23,7 sec 
Texas Instruments TI-99/4A (TMS9900/3MHz) --> 24,5 sec 
Oric Atmos (6502/1MHz) --> 27,4 sec
Oric-1 (6502/1MHz) --> 31,4 sec


Benchmark #5

PC (Celeron/2400MHz) (QBASIC) --> 0,025 sec
Acorn Archimedes A3010 (ARM250/12MHz) --> 0,35 sec
Amiga (68000/7,14MHz) (AMOS) --> 1,35 sec
Atari ST (68000/8MHz) (STOS) --> 1,5 sec  
ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 3,55 sec
Amiga (68000/7,14MHz) (ABasic) --> 5,75 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 7,6 sec
Acorn BBC micro model B (6502/2MHz) --> 9 sec
Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 9,58 sec 
Amstrad CPC 464 (Z80A/4MHz) --> 10,3 sec 
Acorn Electron (6502/2MHz) --> 12,4 sec 
Commodore 128 (8502/2MHz) --> 12,5 sec  
IBM PC (8088/4,77MHz) --> 13,6 sec  
Acorn Atom (6502/1MHz) --> 13,9 sec  
Commodore VIC-20 (6502/1MHz) --> 18,3 sec
Sinclair ZX81 (Z80A/3,5MHz) (Fast mode) --> 18,6 sec 
Apple II (6502/1,022MHz) --> 19,1 sec  
Spectravideo SVI-328 (Z80A/3,6MHz) --> 20,6 sec 
Commodore Plus/4 (8501/1,76MHz) --> 20,8 sec 
Commodore 64 (6510/1MHz) --> 21 sec
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 22,3 sec 
Dragon 32 (6809/0,89MHz) --> 23,3 sec 
Sinclair ZX Spectrum (Z80A/3,5MHz) --> 24 sec 
Atari 800XL (6502/2MHz) --> 25,8 sec
Texas Instruments TI-99/4A (TMS9900/3MHz) --> 26,1 sec  
Commodore 128 (8502/1MHz) --> 26,4 sec 
Oric Atmos (6502/1MHz) --> 33 sec
Oric-1 (6502/1MHz) --> 38 sec


Benchmark #6

PC (Celeron/2400MHz) (QBASIC) --> 0,072 sec
Acorn Archimedes A3010 (ARM250/12MHz) --> 0,66 sec
Amiga (68000/7,14MHz) (AMOS) --> 1,30 sec
Atari ST (68000/8MHz) (STOS) --> 2,2 sec  
ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 8,45 sec
Amiga (68000/7,14MHz) (ABasic) --> 9,7 sec
Acorn BBC micro model B (6502/2MHz) --> 13,9 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 14 sec
Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 14,74 sec 
Acorn Electron (6502/2MHz) --> 18,72 sec 
Acorn Atom (6502/1MHz) --> 19,1 sec   
Amstrad CPC 464 (Z80A/4MHz) --> 19,2 sec 
Commodore 128 (8502/2MHz) --> 20 sec  
IBM PC (8088/4,77MHz) --> 23,5 sec  
Commodore VIC-20 (6502/1MHz) --> 27,2 sec
Apple II (6502/1,022MHz) --> 28,6 sec   
Commodore 64 (6510/1MHz) --> 29,5 sec 
Spectravideo SVI-328 (Z80A/3,6MHz) --> 30,7 sec  
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 34 sec 
Dragon 32 (6809/0,89MHz) --> 34,3 sec  
Commodore Plus/4 (8501/1,76MHz) --> 34,4 sec  
Atari 800XL (6502/2MHz) --> 37,6 sec 
Commodore 128 (8502/1MHz) --> 42,75 sec  
Oric Atmos (6502/1MHz) --> 45,6 sec
Sinclair ZX81 (Z80A/3,5MHz) (Fast mode) --> 49,7 sec 
Oric-1 (6502/1MHz) --> 51,8 sec
Sinclair ZX Spectrum (Z80A/3,5MHz) --> 55,3 sec 
Texas Instruments TI-99/4A (TMS9900/3MHz) --> 61,6 sec  


Benchmark #7

PC (Celeron/2400MHz) (QBASIC) --> 0,096 sec
Acorn Archimedes A3010 (ARM250/12MHz) --> 1,04 sec
Amiga (68000/7,14MHz) (AMOS) --> 1,76 sec
Atari ST (68000/8MHz) (STOS) --> 3,85 sec  
ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 12,32 sec
Amiga (68000/7,14MHz) (ABasic) --> 13,2 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 20,65 sec
Acorn BBC micro model B (6502/2MHz) --> 21,2 sec
Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 24,71 sec 
Acorn Electron (6502/2MHz) --> 28,71 sec  
Amstrad CPC 464 (Z80A/4MHz) --> 29 sec 
Acorn Atom (6502/1MHz) --> 31,1 sec  
Commodore 128 (8502/2MHz) --> 32,5 sec  
IBM PC (8088/4,77MHz) --> 37,4 sec  
Spectravideo SVI-328 (Z80A/3,6MHz) --> 42,2 sec  
Commodore VIC-20 (6502/1MHz) --> 42,7 sec 
Apple II (6502/1,022MHz) --> 44,8 sec  
Commodore 64 (6510/1MHz) --> 47,5 sec
Dragon 32 (6809/0,89MHz) --> 50 sec  
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 54 sec
Commodore Plus/4 (8501/1,76MHz) --> 55,4 sec  
Atari 800XL (6502/2MHz) --> 58,3 sec 
Commodore 128 (8502/1MHz) --> 68 sec  
Sinclair ZX81 (Z80A/3,5MHz) (Fast mode) --> 68,5 sec 
Oric Atmos (6502/1MHz) --> 68,5 sec
Oric-1 (6502/1MHz) --> 77,8 sec 
Sinclair ZX Spectrum (Z80A/3,5MHz) --> 80,7 sec 
Texas Instruments TI-99/4A (TMS9900/3MHz) --> 84,4 sec  


Benchmark #8

PC (Celeron/2400MHz) (QBASIC) --> 0,12 sec
Acorn Archimedes A3010 (ARM250/12MHz) --> 0,85 sec
Amiga (68000/7,14MHz) (AMOS) --> 1,4 sec
Amiga (68000/7,14MHz) (ABasic) --> 9,4 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 9,65 sec
Amstrad CPC 464 (Z80A/4MHz) --> 34 sec  
IBM PC (8088/4,77MHz) --> 35 sec   
ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 36,8 sec
Acorn BBC micro model B (6502/2MHz) --> 49,9 sec
Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 56,53 sec 
Commodore 128 (8502/2MHz) --> 61 sec   
Acorn Electron (6502/2MHz) --> 72,53 sec  
Atari ST (68000/8MHz) (STOS) --> 78,85 sec   
Acorn Atom (6502/1MHz) --> 92 sec  
Commodore VIC-20 (6502/1MHz) --> 99 sec 
Commodore Plus/4 (8501/1,76MHz) --> 106,3 sec   
Apple II (6502/1,022MHz) --> 107 sec  
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 118 sec 
Commodore 64 (6510/1MHz) --> 119,3 sec
Commodore 128 (8502/1MHz) --> 128,5 sec  
Dragon 32 (6809/0,89MHz) --> 129 sec  
Oric Atmos (6502/1MHz) --> 136 sec
Sinclair ZX81 (Z80A/3,5MHz) (Fast mode) --> 229 sec  
Oric-1 (6502/1MHz) --> 230 sec 
Spectravideo SVI-328 (Z80A/3,6MHz) --> 236 sec   
Sinclair ZX Spectrum (Z80A/3,5MHz) --> 253 sec 
Texas Instruments TI-99/4A (TMS9900/3MHz) --> 382 sec   
Atari 800XL (6502/2MHz) --> 412 sec   


Και επειδή με όλα τα μηχανήματα μαζεμένα και όλα τα benchmarks να... χάσατε τη μπάλα (δεν σας αδικώ καθόλου, πιστέψτε με), αν σας κούρασαν όλα τα υπόλοιπα δώστε βάση στην παρακάτω και τελευταία κατάταξη, που βασίζεται στους μέσους χρόνους του κάθε μηχανήματος:

Μέσος χρόνος-Τελική κατάταξη


PC (Celeron/2400MHz) (QBASIC) --> 0,047 sec
Acorn Archimedes A3010 (ARM250/12MHz) --> 0,117 sec
Amiga (68000/7,14MHz) (AMOS) --> 1,2 sec
Amiga (68000/7,14MHz) (ABasic) --> 6,24 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 8,64 sec
ZX Spectrum Next (Z80A/28MHz) (Next BASIC) --> 8,71 sec
Atari ST (68000/8MHz) (STOS) --> 11,3 sec    
Acorn BBC micro model B (6502/2MHz) --> 14,3 sec
Amstrad CPC 464 (Z80A/4MHz) --> 14,5 sec  
Atari 800XL (6502/2MHz) (Turbo BASIC XL) --> 15,85 sec  
IBM PC (8088/4,77MHz) --> 17,6 sec   
Commodore 128 (8502/2MHz) --> 19,35 sec   
Acorn Electron (6502/2MHz) --> 20,05 sec  
Acorn Atom (6502/1MHz) --> 22,8 sec  
Commodore VIC-20 (6502/1MHz) --> 28,7 sec 
Apple II (6502/1,022MHz) --> 30,4 sec   
Commodore 64 (6510/1MHz) --> 33,1 sec
Commodore Plus/4 (8501/1,76MHz) --> 33,13 sec   
Commodore 64 (6510/1MHz) (Simon's BASIC) --> 35,1 sec 
Dragon 32 (6809/0,89MHz) --> 36,2 sec  
Commodore 128 (8502/1MHz) --> 40,68 sec  
Oric Atmos (6502/1MHz) --> 44,1 sec
Spectravideo SVI-328 (Z80A/3,6MHz) --> 46,7 sec    
Sinclair ZX81 (Z80A/3,5MHz) (Fast mode) --> 51,2 sec  
Sinclair ZX Spectrum (Z80A/3,5MHz) --> 58,5 sec  
Oric-1 (6502/1MHz) --> 59,6 sec 
Atari 800XL (6502/2MHz) --> 73,1 sec  
Texas Instruments TI-99/4A (TMS9900/3MHz) --> 76,6 sec

Ουφ, τέλος. Επιτέλους!

Τι συμπεράσματα μπορούμε να εξάγουμε από την παραπάνω (τελική) κατάταξη; Λοιπόν, το πρώτο και προφανέστερο όλων είναι ότι το πού βρέθηκε τελικά το κάθε μηχάνημα στην παραπάνω λίστα οφείλεται κατά μεγάλο μέρος στο 8ο benchmark: αν την "πάλεψε" σε αυτό θα τα πήγε γενικώς καλά. Αν όχι, θα την έπαθε σαν τον Atari ST (STOS) που ενώ κανονικά θα τερμάτιζε στην 3η θέση, το 8ο benchmark τον... καταβαράθρωσε στην 6η! Επίσης συμπεραίνουμε ότι όλα τα μηχανήματα της Acorn, ανεξαρτήτως εποχής και αρχιτεκτονικής ήταν εξαιρετικά γρήγορα (στην BASIC, πάντα). Ότι υπάρχει χάσμα μεταξύ 8bit και 16bit μηχανημάτων. Ότι ο IBM PC μάλλον τελικά δεν επικράτησε για την ταχύτητά του (λες και δεν το ξέραμε!). Ότι ο VIC-20 ήταν ο πλέον "τίμιος" 8μπιτος Commodore σε ό,τι είχε να κάνει με την σβελτάδα της BASIC. Ότι ο Apple II, παρά τα χρονάκια του (μιλάμε για υπολογιστή του 1977, αν θυμάστε) τα πήγαινε γενικώς καλά. Ότι αν είχαμε μετρήσει τον ZX81 σε SLOW mode ακόμα θα χρονομετρούσαμε! Ότι ο Oric Atmos με τον Oric-1 είχαν αρκετά μεγάλη διαφορά στην ταχύτητα μόνο και μόνο χάρη στην επιδιόρθωση κάποιων bugs στην ROM (κατά τα άλλα σαν hardware ήταν ίδιοι). Ότι τα μηχανάκια της Sinclair καθώς και οι 8bit Atari γενικώς... σερνόντουσαν. Ότι η Turbo BASIC XL έδινε πραγματικά φτερά στα 8μπιτα Atari, μετατρέποντάς τα από ουραγούς σε ισάξιους ανταγωνιστές των κορυφαίων 8bit micros. Ότι ο ZX Spectrum Next, όπως ήταν αναμενόμενο για ένα τόσο σύγχρονο μηχάνημα, παίζει σε μια δική του κατηγορία, μεταξύ 8μπιτων και 16μπιτων. Και, τέλος, ότι το πλέον αργό μηχάνημα του συγκριτικού είχε 16μπιτο επεξεργαστή (TI-99/4A)!

 Φυσικά, το ένα και απόλυτο συμπέρασμα ως απόρροια όλων των παραπάνω αλλά και όλων των προηγούμενων είναι ότι, τελικά, για την ταχύτητα που μπορεί να πετύχει η BASIC κάποιου υπολογιστή παίζει πολύ μεγαλύτερο ρόλο η ίδια η διάλεκτος της γλώσσας, παρά τα MHz, ο επεξεργαστής, τα custom chipsets και οτιδήποτε άλλο...

Αυτά. Ελπίζω να το χαρήκατε κι εσείς όσο και εγώ (λάθος κατακλείδα, έτσι; Κάτι κατάλαβα...).

Τετάρτη 25 Μαρτίου 2020

The speed of BASIC: Amiga και Atari ST (μέρος 4ο)

Λοιπόν, αυτό που συμβαίνει τις τελευταίες 10 μέρες πάνω-κάτω, από τότε δηλαδή που - κάποιοι νωρίτερα, κάποιοι αργότερα - πήραμε απόφαση να κλειστούμε σπίτια μας για τα καλά, θα μπορούσα να το χαρακτηρίσω ολίγον τι απογοητευτικό. Βλέπετε, πίστευα ότι με τόσο χρόνο στα χέρια τους, άπαντες, με τον ένα ή με τον άλλο τρόπο, θα έβρισκαν κάτι εποικοδομητικό, δημιουργικό ή επιμορφωτικό να ασχοληθούν. Τι στο διάολο, τόσα χρόνια γκρινιάζουμε ότι δεν βρίσκουμε χρόνο για το ένα, καιρό για το άλλο, κλπ. Τώρα, δεν είναι μονάχα οι μέρες που πέρασαν, αλλά και οι υπόλοιπες 35 ημέρες μέχρι να μπει ο Μάιος, οπότε, σύμφωνα με τα πλέον αισιόδοξα σενάρια (στο επίπεδο του ουτοπικού, εδώ που τα λέμε), θα μπορούμε σιγά-σιγά να αρχίσουμε να ξεμυτίζουμε από τις εξώπορτές μας και να βγάλουμε τα ασπρουλιάρικα κορμιά μας στον ανοιξιάτικο ήλιο. Συνολικά μιλάμε για 45 ημέρες, το ελάχιστο. Ποια είναι η αντίδραση των "συναδέλφων" ρετρο-κομπιουτεράδων πρωτίστως αλλά και των υπολοίπων μελών της ελληνικής κοινωνίας γενικότερα;

Βράστα Χαράλαμπε, είναι η απάντηση. Τι έγραφα; "εποικοδομητικό, δημιουργικό ή επιμορφωτικό"; Ναι, καλά. Το 80% τουλάχιστον εκεί έξω (εκεί μέσα, για να είμαστε και ακριβείς) συμπεριφέρεται σαν να βρίσκεται σε μια τεράστια ουρά σε κάποια δημόσια υπηρεσία ή σε κάποιο μέσο μαζικής μεταφοράς ή στην αίθουσα αναμονής κάποιου ιατρείου. Κοινώς δεν βρίσκουν κάτι ουσιαστικό για να ασχοληθούν, αλλά, αντίθετα, αναλώνονται στο να βρίσκουν τρόπους να σκοτώνουν τον χρόνο τους, λες και θα κάτσουν μέσα για 45 λεπτά, και όχι για 45 μερόνυχτα. Και, όχι μονάχα αυτό, αλλά ταυτόχρονα γκρινιάζουν κι από πάνω. Και εδώ έρχομαι να ρωτήσω: γιατί καλέ μου άνθρωπε δεν αντιμετωπίζεις όλον αυτόν τον ελεύθερο χρόνο ως απρόσμενο δώρο και επιλέγεις να τον δεις ως καταναγκαστικό έργο; Κομμάτι της ζωής σου είναι, γιατί δεν προσπαθείς να το εκμεταλλευτείς για να περάσεις καλά και να κάνεις πράγματα; Δικαιολογίες του τύπου "και τι να κάνω κλεισμένος μέσα στους 4 τοίχους;" προφανώς δεν στέκουν στην εποχή του internet: sorry αδερφέ, αλλά μπορείς να κάνεις τα πάντα. Είσαι διασυνδεδεμένος με όλο τον πλανήτη και μπορείς ανά πάσα στιγμή να επικοινωνήσεις με τον οποιονδήποτε, να μελετήσεις/χαρείς οποιοδήποτε ανθρώπινο έργο και να έχεις πρόσβαση σε ό,τι δημιούργησε η ανθρώπινη διανόηση και η ανθρώπινη σοφία τα χιλιάδες χρόνια της ύπαρξης του είδους μας. Κινηματογράφος, βιβλία, μουσική, ζωγραφική, τηλεόραση, video games, περιοδικά, εφημερίδες, επιστήμες και τέχνες, τα πάντα βρίσκονται στο χέρι σου, σε απόσταση μερικών clicks του ποντικιού: αν εσύ επιλέγεις να μην τα αγγίξεις, να μην τα χαρείς, να μην τα γευτείς και αντ' αυτού λιώνεις στα social media, ε, τότε είσαι απλά άξιος της μοίρας σου και αυτές οι μέρες που θα μείνεις κλεισμένος μέσα θα είναι οι χειρότερες της ζωής σου. Μη γκρινιάζεις όμως, εσύ το επέλεξες. Εσύ, και κανένας άλλος.


Α, κι αυτό το πράγμα με τα social media ώρες-ώρες πραγματικά με ξεπερνάει: πώς την βρίσκουν έτσι οι άνθρωποι και αντί να κάνουν οι ίδιοι οτιδήποτε ουσιαστικό και παραγωγικό προτιμούν να κρίνουν τις πράξεις και τα έργα των άλλων, και, όχι μονάχα αυτό, αλλά να θεωρούν κιόλας ότι επιβάλλεται να μας τρίψουν στα μούτρα ολονών την άποψή τους, για την οποία φυσικά είναι 100% βέβαιοι (καθώς κατέληξαν σε αυτήν μετά από βαθειά σκέψη μικροδευτερολέπτων). Και να φανατίζονται κιόλας με δαύτην, και να ψάχνουν μέσα από likes και dislikes να βρουν συμμάχους και εχθρούς. Και να αναζητούν κάθε τόσο και λιγάκι ήρωες και αποδιοπομπαίους τράγους, χωρίς να μπορούν να χωνέψουν ότι η συντριπτική πλειοψηφία των ανθρώπων δεν ανήκει σε καμία από τις δύο κατηγορίες και κατά συνέπεια δεν οφείλει να καταταχθεί σε κάποια εξ' αυτών! Το ότι φτάσαμε στο σημείο όλος σχεδόν ο "πολιτισμένος" (με πάρα πολλά εισαγωγικά) κόσμος να βρίσκεται ταυτόχρονα κλεισμένος σπίτι του και να μολύνει ως άλλος - λιγότερο θανατηφόρος αλλά εξίσου ενοχλητικός - ιός με τα εγκεφαλικά του περιττώματα τα social media μάλλον δείχνει ότι αυτός ο κόσμος στον οποίο ζούμε έχει πιάσει πάτο για τα καλά και ίσως να χρειάζεται ένα δραστικό restart. Ένα hard reset, βρε αδερφάκι μου. Να είναι ο κορονοϊός αυτό; Τι να σας πω; Ούτε το μέλλον μπορώ να διαβάσω αλλά ούτε και είμαι κάτι παραπάνω από ένας χομπίστας που λατρεύει τους παλιούς υπολογιστές και γουστάρει να ασχολείται με δαύτους και από την άλλη απεχθάνεται όσους βροντοφωνάζουν τις απόψεις τους επί παντός επιστητού χωρίς να τους ζητηθεί και όσους ψάχνουν απεγνωσμένα να ενταχθούν κάπου και να γίνουν ακόλουθοι κάποιου. Όχι, ευχαριστώ, δεν θα πάρω...

Εντάξει λοιπόν, αφού σας έπρηξα με πολυλογία άσχετη με το θέμα της ανάρτησης, ας επανέλθουμε στα "δικά μας": BASIC, φίλες και φίλοι. Η φιλικότερη και δεύτερη πλέον "κουσουριασμένη" γλώσσα προγραμματισμού (εντάξει, υπάρχει πάντοτε και η COBOL, ευτυχώς) για υπολογιστές, ένα από τα σημαντικότερα κριτήρια επιλογής home micro για κάποιους πίσω στα 80s. Είδαμε στα προηγούμενα μέρη του θέματός μας πώς τα πήγαν από άποψη ταχύτητας οι δημοφιλέστεροι 8μπιτοι computers, τώρα έφτασε η ώρα να ανέβουμε κατηγορία: 16-24-32bit, ανάλογα με το πώς βάφτιζε η κάθε εταιρία τον υπολογιστή της..

Ξεκινάμε λοιπόν βάζοντας στο παιχνίδι των 8 κλασικών benchmarks του Personal Computer World δύο υπολογιστές που είχαν αρκετά κοινά χαρακτηριστικά, αλλά άπαντες σχεδόν επέλεξαν να σταθούν στις διαφορές τους: ναι, φυσικά αναφέρομαι στην Amiga της Commodore και τον ST της Atari...


Αυτοί οι δύο υπολογιστές, πέραν του ότι ήταν 16μπιτοι (για την ακρίβεια, οι επεξεργαστές τους είχαν 16bit data bus), ήταν τα πρώτα home micros που κυκλοφόρησαν χωρίς γλώσσα BASIC (ή, πιο σωστά, χωρίς οποιαδήποτε γλώσσα προγραμματισμού) στην ROM τους. Έτσι λοιπόν, υπάρχουν δεκάδες διάλεκτοι BASIC που θα μπορούσε να χρησιμοποιήσει κάποιος, και οι οποίες διαφέρουν ριζικά από άποψη ταχύτητας, δυνατοτήτων, εκμετάλλευσης του hardware, κλπ. Ξεκίνησα τις δοκιμές με τις παλαιότερες διαλέκτους της γλώσσας για τα δύο μηχανήματα, ήτοι την Atari BASIC για τον ST και - κρατηθείτε - την ABasic της Metacomco για την Amiga, η οποία είχε προηγηθεί χρονικά της Microsoft BASIC που γνωρίζουν άπαντες και η οποία δινόταν μαζί με τις 1.2 και 1.3 Amiga 500. Οι δύο αυτές διάλεκτοι που επέλεξα λοιπόν, ως γλώσσες που δημιουργήθηκαν ενώ ακόμα δεν είχε ολοκληρωθεί το hardware στο οποίο θα έτρεχαν, έχουν ουκ ολίγα "θεματάκια". Ένα από αυτά είναι φυσικά και η ταχύτητα, καθώς, για να το θέσουμε απλά, μάλλον οι επιδόσεις τους αδικούν κατάφωρα το προικισμένο υλισμικό για το οποίο προορίζονται. Για να δούμε όμως και με αριθμούς τι έκαναν...

Παραθέτω παρακάτω τα αποτελέσματα σε όλα τα benchmarks με τη σειρά, μαζί και με αυτά του ταχύτερου 8μπιτου, του BBC Micro της Acorn, ως μέτρο σύγκρισης. Τα listings των benchmarks μπορείτε να τα βρείτε στα 3 προηγούμενα μέρη, δηλαδή εδώ, εδώ και εδώ.

Benchmark #1

Amiga (68000/7,14MHz) (ABasic) --> 0,6 sec
BBC micro model B (6502/2MHz) --> 0,85 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 1,10 sec

Benchmark #2

Amiga (68000/7,14MHz) (ABasic) --> 2,10 sec
BBC micro model B (6502/2MHz) --> 3,10 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 3,20 sec

Benchmark #3

Amiga (68000/7,14MHz) (ABasic) --> 4,10 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 6,10 sec
BBC micro model B (6502/2MHz) --> 8,10 sec

Benchmark #4

Amiga (68000/7,14MHz) (ABasic) --> 5,10 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 6,80 sec
BBC micro model B (6502/2MHz) --> 8,70 sec

Benchmark #5

Amiga (68000/7,14MHz) (ABasic) --> 5,75 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 7,60 sec
BBC micro model B (6502/2MHz) --> 9 sec

Benchmark #6

Amiga (68000/7,14MHz) (ABasic) --> 9,70 sec
BBC micro model B (6502/2MHz) --> 13,90 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 14 sec

Benchmark #7

Amiga (68000/7,14MHz) (ABasic) --> 13,20 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 20,65 sec
BBC micro model B (6502/2MHz) --> 21,20 sec


Benchmark #8

Amiga (68000/7,14MHz) (ABasic) --> 9,40 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 9,65 sec
BBC micro model B (6502/2MHz) --> 49,90 sec

Όπως μπορείτε να συμπεράνετε από τα παραπάνω, σε όλα ανεξαιρέτως τα benchmarks η Amiga βρίσκεται στην πρώτη θέση, και ο Atari ST την ακολουθεί, πλην των benchmarks 1, 2 και 6 στα οποία τον προσπερνάει, έστω και με ελάχιστη διαφορά, ο BBC.

Και, δεν μπορεί να πει κανείς, εντάξει, καλά τα πάνε τα 16μπιτα, είναι σαφώς ταχύτερα από την πλειοψηφία των 8μπιτων. Αυτή είναι όμως η πραγματική τους διαφορά; Δεν έχετε την εντύπωση ότι θα μπορούσαν και καλύτερα;


Έτσι σκέφτηκα και εγώ, φίλες και φίλοι, και αποφάσισα να ξαναδοκιμάσω όλα τα benchmarks στον Atari ST χρησιμοποιώντας την STOS αντί της Atari BASIC. Η STOS είναι μία διάλεκτος της BASIC με κύριο αντικείμενο την δημιουργία παιχνιδιών, αλλά, όπως και να 'χει, είναι μια γλώσσα ανώτερη σε κάθε επίπεδο από την Atari BASIC και είναι και interpreter όπως και όλες οι υπόλοιπες γλώσσες της δοκιμής. Για να δούμε τα αποτελέσματα λοιπόν και με τα benchmarks του ST με την STOS στην κατάταξη...

Benchmark #1

Atari ST (68000/8MHz) (STOS) --> 0,40 sec
Amiga (68000/7,14MHz) (ABasic) --> 0,60 sec
BBC micro model B (6502/2MHz) --> 0,85 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 1,10 sec

Benchmark #2

Atari ST (68000/8MHz) (STOS) --> 0,80 sec 
Amiga (68000/7,14MHz) (ABasic) --> 2,10 sec
BBC micro model B (6502/2MHz) --> 3,10 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 3,20 sec

Benchmark #3

Atari ST (68000/8MHz) (STOS) --> 1,45 sec 
Amiga (68000/7,14MHz) (ABasic) --> 4,10 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 6,10 sec
BBC micro model B (6502/2MHz) --> 8,10 sec

Benchmark #4

Atari ST (68000/8MHz) (STOS) --> 1,35 sec 
Amiga (68000/7,14MHz) (ABasic) --> 5,10 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 6,80 sec
BBC micro model B (6502/2MHz) --> 8,70 sec

Benchmark #5

Atari ST (68000/8MHz) (STOS) --> 1,50 sec 
Amiga (68000/7,14MHz) (ABasic) --> 5,75 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 7,60 sec
BBC micro model B (6502/2MHz) --> 9 sec

Benchmark #6

Atari ST (68000/8MHz) (STOS) --> 2,20 sec 
Amiga (68000/7,14MHz) (ABasic) --> 9,70 sec
BBC micro model B (6502/2MHz) --> 13,90 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 14 sec

Benchmark #7

Atari ST (68000/8MHz) (STOS) --> 3,85 sec 
Amiga (68000/7,14MHz) (ABasic) --> 13,20 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 20,65 sec
BBC micro model B (6502/2MHz) --> 21,20 sec

Benchmark #8

Amiga (68000/7,14MHz) (ABasic) --> 9,40 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 9,65 sec
BBC micro model B (6502/2MHz) --> 49,90 sec 
Atari ST (68000/8MHz) (STOS) --> 78,85 sec  

Όπα, τι έγινε; Με την χρήση της STOS ο ST πραγματικά απογειώνεται, ξεχωρίζοντας με διαφορά όχι μονάχα από τα 8μπιτα, αλλά και από την άσπονδη φίλη του! Επιτέλους, ο αγώνας τώρα δικαιώνεται, έστω και με τριακονταπενταετή καθυστέρηση για του Atarάδες. Και, για όσους σταθήκατε στα αποτελέσματα του 8ου benchmark, να σας ενημερώσω ότι η συγκεκριμένη έκδοση της STOS που χρησιμοποίησα είχε κάποια bugs αναφορικά με τις πράξεις με χρήση αριθμών με κινητή υποδιαστολή και, αναμενόμενα, αυτό φαίνεται - και με το παραπάνω - στον υπολογισμό λογαρίθμων, ημιτόνων κλπ. Δυστυχώς δεν είχα στη διάθεσή μου την έκδοση 2.4 όπου και λύθηκαν αυτά τα θέματα για να ξαναδοκιμάσω το τελευταίο benchmark, οπότε σε αυτό ας κρατήσουμε ως βέλτιστο (για το ST) τον χρόνο που δίνει η Atari BASIC. Viva Atari!


Για μια στιγμή όμως: ΟΚ, με την STOS ο ST τα σαρώνει (σχεδόν) όλα, αλλά μήπως αυτό είναι κομμάτι άδικο για την Amiga; Άλλωστε, η "Μεγάλη Κυρία" είχε στο ρεπερτόριό της πολύ καλύτερες διαλέκτους BASIC από αυτήν της Metacomco, έτσι δεν είναι;

Φυσικά και έτσι είναι, και ως εκ τούτου αποφάσισα να χρησιμοποιήσω κάτι αντίστοιχο και στην Amiga, ήτοι την AMOS, το αδελφό προϊόν της STOS για τον υπολογιστή της Commodore. Για να δούμε τώρα τι γίνεται με την Amiga να πολεμάει με τα ίδια όπλα τον Atari...

Benchmark #1

Amiga (68000/7,14MHz) (AMOS) --> 0,40 sec
Atari ST (68000/8MHz) (STOS) --> 0,40 sec
Amiga (68000/7,14MHz) (ABasic) --> 0,60 sec
BBC micro model B (6502/2MHz) --> 0,85 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 1,10 sec

Benchmark #2

Atari ST (68000/8MHz) (STOS) --> 0,80 sec 
Amiga (68000/7,14MHz) (AMOS) --> 0,95 sec 
Amiga (68000/7,14MHz) (ABasic) --> 2,10 sec
BBC micro model B (6502/2MHz) --> 3,10 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 3,20 sec

Benchmark #3

Amiga (68000/7,14MHz) (AMOS) --> 1,20 sec 
Atari ST (68000/8MHz) (STOS) --> 1,45 sec 
Amiga (68000/7,14MHz) (ABasic) --> 4,10 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 6,10 sec
BBC micro model B (6502/2MHz) --> 8,10 sec

Benchmark #4

Amiga (68000/7,14MHz) (AMOS) --> 1,25 sec 
Atari ST (68000/8MHz) (STOS) --> 1,35 sec 
Amiga (68000/7,14MHz) (ABasic) --> 5,10 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 6,80 sec
BBC micro model B (6502/2MHz) --> 8,70 sec

Benchmark #5

Amiga (68000/7,14MHz) (AMOS) --> 1,35 sec 
Atari ST (68000/8MHz) (STOS) --> 1,50 sec 
Amiga (68000/7,14MHz) (ABasic) --> 5,75 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 7,60 sec
BBC micro model B (6502/2MHz) --> 9 sec

Benchmark #6

Amiga (68000/7,14MHz) (AMOS) --> 1,30 sec 
Atari ST (68000/8MHz) (STOS) --> 2,20 sec 
Amiga (68000/7,14MHz) (ABasic) --> 9,70 sec
BBC micro model B (6502/2MHz) --> 13,90 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 14 sec

Benchmark #7

Amiga (68000/7,14MHz) (AMOS) --> 1,76 sec 
Atari ST (68000/8MHz) (STOS) --> 3,85 sec 
Amiga (68000/7,14MHz) (ABasic) --> 13,20 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 20,65 sec
BBC micro model B (6502/2MHz) --> 21,20 sec

Benchmark #8

Amiga (68000/7,14MHz) (AMOS) --> 1,40 sec 
Amiga (68000/7,14MHz) (ABasic) --> 9,40 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 9,65 sec
BBC micro model B (6502/2MHz) --> 49,90 sec
Atari ST (68000/8MHz) (STOS) --> 78,85 sec  

Μάλιστα! Αυτά είναι! Γι' αυτό την λένε "Μεγάλη Κυρία", λοιπόν. Με τη χρήση μίας αντίστοιχης γλώσσας (η AMOS είναι μεταγενέστερη και πιο εξελιγμένη έκδοση της STOS) η Amiga είναι από λίγο έως αρκετά ταχύτερη του ST. Και, φυσικά, με τη χρήση τέτοιων γλωσσών προγραμματισμού η διαφορά και των δύο ακόμα και από τα καλύτερα 8μπιτα είναι, απλά, χαώδης. Πώς αλλιώς δηλαδή να χαρακτηριστεί το 1,40 sec της ναυαρχίδας της Commodore συγκριτικά με τα 49,90 sec του BBC micro στο 8o benchmark; Ή τα 3,85 sec του ST με τα 21,20 sec του BBC στο 7ο benchmark;


Τέλος καλό, όλα καλά, λοιπόν; Χμμμ... Μάλλον όχι. Ίσως επειδή λόγω σχετικά ακριβής τιμής δεν μας πολυάγγιξε, ίσως επειδή μας ενδιέφεραν τα παιχνίδια που δεν ήταν το απόλυτο φόρτε του, έχουμε την τάση να ξεχνάμε ότι στην "γενιά των 16μπιτων" υπήρξε και άλλο ένα home micro - και μάλιστα αρκετά επιτυχημένο και με μεγάλη διάρκεια ζωής στην Αγγλική αγορά -, ο Acorn Archimedes. Αυτός, ως γνήσιος απόγονος του BBC micro ερχόταν με γλώσσα BASIC στην ROM του και με έναν επεξεργαστή αρχιτεκτονικής RISC (ARM), τα νεότερα μέλη της οικογένειας του οποίου βρίσκονται μέσα στα tablets, τα set top boxes και τα κινητά μας. Ας βάλουμε λοιπόν και έναν Αρχιμήδη στα benchmarks μας, shall we?


Benchmark #1

Acorn Archimedes A3010 (ARM250/12MHz) --> 0,04 sec
Amiga (68000/7,14MHz) (AMOS) --> 0,40 sec
Atari ST (68000/8MHz) (STOS) --> 0,40 sec
Amiga (68000/7,14MHz) (ABasic) --> 0,60 sec
BBC micro model B (6502/2MHz) --> 0,85 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 1,10 sec

Benchmark #2

Acorn Archimedes A3010 (ARM250/12MHz) --> 0,15 sec
Atari ST (68000/8MHz) (STOS) --> 0,80 sec 
Amiga (68000/7,14MHz) (AMOS) --> 0,95 sec 
Amiga (68000/7,14MHz) (ABasic) --> 2,10 sec
BBC micro model B (6502/2MHz) --> 3,10 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 3,20 sec

Benchmark #3

Acorn Archimedes A3010 (ARM250/12MHz) --> 0,37 sec
Amiga (68000/7,14MHz) (AMOS) --> 1,20 sec 
Atari ST (68000/8MHz) (STOS) --> 1,45 sec 
Amiga (68000/7,14MHz) (ABasic) --> 4,10 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 6,10 sec
BBC micro model B (6502/2MHz) --> 8,10 sec

Benchmark #4

Acorn Archimedes A3010 (ARM250/12MHz) --> 0,33 sec
Amiga (68000/7,14MHz) (AMOS) --> 1,25 sec 
Atari ST (68000/8MHz) (STOS) --> 1,35 sec 
Amiga (68000/7,14MHz) (ABasic) --> 5,10 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 6,80 sec
BBC micro model B (6502/2MHz) --> 8,70 sec

Benchmark #5

Acorn Archimedes A3010 (ARM250/12MHz) --> 0,35 sec
Amiga (68000/7,14MHz) (AMOS) --> 1,35 sec 
Atari ST (68000/8MHz) (STOS) --> 1,50 sec 
Amiga (68000/7,14MHz) (ABasic) --> 5,75 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 7,60 sec
BBC micro model B (6502/2MHz) --> 9 sec

Benchmark #6

Acorn Archimedes A3010 (ARM250/12MHz) --> 0,66 sec
Amiga (68000/7,14MHz) (AMOS) --> 1,30 sec 
Atari ST (68000/8MHz) (STOS) --> 2,20 sec 
Amiga (68000/7,14MHz) (ABasic) --> 9,70 sec
BBC micro model B (6502/2MHz) --> 13,90 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 14 sec

Benchmark #7

Acorn Archimedes A3010 (ARM250/12MHz) --> 1,04 sec
Amiga (68000/7,14MHz) (AMOS) --> 1,76 sec 
Atari ST (68000/8MHz) (STOS) --> 3,85 sec 
Amiga (68000/7,14MHz) (ABasic) --> 13,20 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 20,65 sec
BBC micro model B (6502/2MHz) --> 21,20 sec

Benchmark #8

Acorn Archimedes A3010 (ARM250/12MHz) --> 0,85 sec
Amiga (68000/7,14MHz) (AMOS) --> 1,40 sec 
Amiga (68000/7,14MHz) (ABasic) --> 9,40 sec
Atari ST (68000/8MHz) (Atari BASIC) --> 9,65 sec
BBC micro model B (6502/2MHz) --> 49,90 sec
Atari ST (68000/8MHz) (STOS) --> 78,85 sec  

Όπως βλέπετε, η υπεροχή του A3010 είναι σαφής. Φυσικά είναι Acorn (ένα το κρατούμενο), έχει BBC BASIC (2ο κρατούμενο), έχει RISC επεξεργαστή (3ο) και ο τελευταίος είναι και χρονισμένος παραπάνω από τον ανταγωνισμό, στα 12MHz (4ο). Ε, με όλα αυτά τι περιμένατε, να ερχόταν τρίτος ή κάτι τέτοιο;


Μετά τα παραπάνω ολίγα (;!;) θα σας αφήσω και για σήμερα. Σύντομα θα ανεβάσω και ένα ακόμη μέρος στην σειρά αυτή των αναρτήσεων, το 5ο και τελευταίο. Μέχρι τότε μείνετε σπίτι και μείνετε υγιείς!