Πέμπτη 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", έτσι; Ειλικρινά, είναι εντελώς συμπτωματικό το γεγονός ότι από τον θάνατο του "θείου" μέχρι και σήμερα όλα τα θέματα των αναρτήσεων έχουν να κάνουν με τον "γομολάστιχα". Λογικά, σύντομα θα αναφερθώ και σε κάτι άλλο. Απλά έτυχε, τίποτα περισσότερο...

4 σχόλια:

  1. τέλειο θεμα μπραβο, ο ΖΧ ειναι κομμάτι της ζωης μας, και πρωταρχικό στο τομέα των υπολογιστών για μας

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Σε ευχαριστώ πολύ! Και ναι, συμφωνώ για τον πρωταρχικό ρόλο του Spectrum στον τομέα των υπολογιστών. Και του προγραμματισμού, θα συμπλήρωνα.

      Διαγραφή
  2. Believe or not, this demo does not use single line of machine code. OUT is used to program AY chip, POKE/PEEK commands are used to configure BASIC/ROM system variables or just store values to memory. If you look closely in the listing, you won't see any custom routine. It would be whole different demo using machine code routines. Anyway, thanks for nice article :)

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Thank you for clarifying these details and, most of all, thank you and the rest of the Gemba crew for giving the Spectrum community such excellent demos! Keep up the good work!

      Διαγραφή

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