Sinclair QL firmware

Sir Clive Sinclair, admitted not only the existence of the ‘bugs’, but that his company was using its customers as guinea pigs: “…we are getting our customers to find those bugs for us.” Personal Computer News, 16 June 1984.

Κάνοντας “πειραματόζωα” τους -ήδη δυσαρεστημένους έως και εξαγριωμένους από την καθυστέρηση παράδοσης και τα πολλαπλά προβλήματα του QL- πελάτες της, η Sinclair έβαζε ακόμα ένα λιθαράκι στην διαγραφόμενη αποτυχία του QL…

Είναι πολλά τα bugs Άρη!

Αν και δεν υπάρχει επίσημη βιβλιογραφία για τα πολυάριθμα bugs του firmware του QL, στα περιοδικά QL User και QL World εκείνης της εποχής, καθώς και στο μεταγενέστερο QL Today, υπήρξαν άρθρα τα οποία περιέγραφαν τα περισσότερα από αυτά τα bugs. Συνολικά έχουν καταμετρηθεί πάνω από 100 (!) bugs(102 για την ακρίβεια) στο σύνολο των εκδόσεων, που σχετίζονται με το λειτουργικό σύστημα QDOS αλλά και με την SuperBASIC.

 

Ql_dongle
The “dongle”.

‘PRINT VER$’

Αν και αρχικά το σχέδιο ήταν το QDOS και η SuperBASIC να χωρέσουν σε 32Κ, με την SuperBASIC να περιέχεται ένα μόνο τμήμα της στο firmware(κυρίως εντολές load-run για να τρέχουν από τα microdrives τα προγράμματα της Psion),τελικά δεν στάθηκε δυνατό να χωρέσει σε 32Κ ο απαιτούμενος κώδικας και στoυς πρώτους QLs που παραδόθηκαν, τα 2/3 του firmware ήταν μέσα στο QL και το υπόλοιπο 1/3 με τη μορφή ενός rom cartridge, του περίφημου “The kludge” ή “Dongle”, καταλάμβανε την rom cartridge slot στο πίσω μέρος του QL.

 

 

 

Η εντολή της SuperBASIC “PRINT VER$”, τύπωνε στην οθόνη έναν κωδικό δύο ή τριών γραμμάτων που ήταν η έκδοση του firmware του QL.

ver_JS
PRINT VER$

Οι εκδόσεις.

Η πρώτη έκδοση FB, η οποία αποκαλούνταν και “Full of Bugs”, πρακτικά ήταν μιά μισοτελειωμένη έκδοση του firmware. Με έναν editor που δεν σου επέτρεπε να κάνεις edit μιά γραμμή που είχε ήδη σημανθεί ως “bad line” αλλά έπρεπε να την πληκτρολογήσεις από την αρχή(!), τα προγράμματα της basic να μην ξεπερνούν τα 32Κ γιατί αλλιώς κρασάριζε ο υπολογιστής, την εντολή PRINT -2-2 να δίνει σαν αποτέλεσμα το μηδέν, τα προγράμματα της Psion να κάνουν αιώνες για να φορτωθούν(αν φορτωθούν) και μία SuperBASIC που οι περισσότερες εντολές της δεν δούλευαν γιατί δεν είχε ενσωματωθεί ο κώδικας, απλά δεν μπορούσες να κάνεις και πολλά πράγματα από το να ονειρεύεσαι την επόμενη updated version του firmware.

Στην επόμενη έκδοση PM, διορθώθηκε κατά πολύ ο line editor, αλλά τα προγράμματα της Psion ακόμα έκαναν πολύ χρόνο για να φορτώσουν. Σε αυτό το στάδιο παρουσιάστηκαν και οι EL και TB beta εκδόσεις, οι οποίες όμως δεν κυκλοφόρησαν σαν updated versions.

keywords_1
Keywords.

Η ΑΗ έκδοση η οποία ήταν 20% ταχύτερη από την FB, χαρακτηρίστηκε από την Sinclair ως η τελική έκδοση του firmware. Αν και τώρα τα προγράμματα της Psion φόρτωναν σε 30-40 δευτερόλεπτα και ο υπολογιστής δεν έκανε crash τόσο συχνά, αποδείχτηκε ότι δεν ήταν η τελική έκδοση.

Ακολούθησε η JM version που σαν κώδικας ήταν σχεδόν ίδια με την ΑΗ και πήρε την ονομασία της από τα αρχικά του ονόματος του προγραμματιστή-μηχανικού της Sinclair John Mathieson. Ήταν η πρώτη έκδοση που εξ’ολοκλήρου τοποθετήθηκε μέσα στο QL με την μορφή δύο Rom chips 16K και 32Κ. Είχε καλύτερο χειρισμό και επικοινωνία με τα microdrives, διόρθωνε το bug της ΑΗ όπου η εντολή Χ=”.” όριζε την τιμή του Χ στο μηδέν αντί να δώσει μήνυμα λάθους, αλλά παρουσίαζε ένα σοβαρό bug. Δεν μπορούσε να αναγνωρίσει παραπάνω από μία κάρτα επέκτασης από τις συνολικά 16 που μπορούν ταυτόχρονα να συνδεθούν στο QL! Ο κώδικας είχε γραφτεί με τέτοιο τρόπο ώστε να γινόταν έλεγχος μόνο για την πρώτη κάρτα επέκτασης!

Στην έκδοση JS, διορθώθηκαν αρκετά bugs μαζί και το bug αναγνώρισης των καρτών επέκτασης και προστέθηκαν 25 νέες εντολές για Error trapping. Διορθώθηκε το bug εκείνο που δεν σου επέτρεπε να κάνεις INPUT strings με περισσότερους από 128 χαρακτήρες και επίσης χειριζόταν σωστά την εντολή CALL στα προγράμματα με μέγεθος πάνω από 32Κ που στις προηγούμενες εκδόσεις κράσαραν το μηχάνημα. H JS έκδοση, ήταν η τελευταία που χρησιμοποιήθηκε σε μηχανήματα που πωλήθηκαν στην Αγγλία. Μιά ειδική έκδοση της JS ήταν και η JSU που εκδόθηκε για τις Η.Π.Α. με τις απαραίτητες αλλαγές στον κώδικα για την σωστή απεικόνιση σε τηλεόραση με σύστημα NTSC.

 

Η τελευταία έκδοση του firmware από την Sinclair ήταν η MG, η λεγόμενη και “διεθνής”, αφού αυτή κυκλοφόρησε για διάφορες χώρες την Ευρώπης όπως η MGE για την Ισπανία, η MGS για την Σουηδία, η MGG για την Γερμανία, η MGI για την Ιταλία κτλ και η 1Σ13 ή ΣFP για την Ελλάδα, οι οποίες ενσωμάτωναν τους αντίστοιχους χαρακτήρες του πληκτρολογίου καθώς και τα μηνύματα του λειτουργικού στη γλώσσα της κάθε χώρας. Αν και δεν κυκλοφόρησε στην Αγγλία, λειτουργούσε απροβλημάτιστα σε Αγγλικής παραγωγής QLs. Αυτή η έκδοση διόρθωσε πολλά και σοβαρά bugs της προηγούμενης έκδοσης, αλλά εισήγαγε και ενα νέο bug. Το νέο bug αφορούσε την ρουτίνα σχεδιασμού γραμμών, η οποία κάποιες φορές δεν σχεδίαζε το τελευταίο σημείο μιάς γραμμής ή ενός τόξου. Όσον αφορά τα bugs που διορθώθηκαν, τα microdrives πιά δεν έμπαιναν σε ένα ατελείωτο loop λειτουργίας όταν γινόταν προσπάθεια προσπέλασής τους με την ελεύθερη Ram να είναι κάτω απο 1KB. Μπορούσες τώρα να κλείσεις(close) την σειριακή θύρα SER2, όταν στις παλιές εκδόσεις αντί της SER2 έκλεινε η SER1! Η σύνδεση άλλων 6 ZX Microdrives στο QL δεν ήταν πρόβλημα πιά, αφού και τα οκτώ ήταν προσπελάσιμα σε αντίθεση με τις προηγούμενες εκδόσεις του firmware, όπου το microdrive 2(MDV2_) “χανόταν” όταν πιό πρίν είχες προσπελάσει το microdrive 8(MDV8_)!

 

early_sinclair_ql_with_dongle
Kludged QL!

 

Ένα (ενδιαφέρον)bug.

Με διαφορά, το πιό ενδιαφέρον bug στις περισσότερες versions του firmware του QL αφορά την εντολή CLS(CLear Screen) της SuperBASIC. Η εντολή CLS μπορεί να δεχθεί μία (προαιρετική) παράμετρο μεταξύ 0 και 4 που αφορούν διαφορετικά τμήματα της οθόνης όπως περιγράφονται και στο manual του QL. Σε περίπτωση όμως που ορίσετε ‘μη αποδεκτές’ παραμέτρους, θα συμβούν περίεργα πράγματα όπως:

  • η εντολή CLS 8 ισοδυναμεί με την εντολή STRIP 0.
  • η CLS 9 ισοδυναμεί με την εντολή ΙΝΚ 0.
  • η CLS 10 με την εντολή FLASH 1.
  • η CLS 11 με την εντολή UNDER 1.
  • η CLS 12 με την εντολή OVER 0.
  • η CLS 16 σχεδιάζει ένα σημείο στις συντεταγμένες 0,0 της οθόνης, η CLS 17 σχεδιάζει μία γραμμή μηδενικού μήκους, ενώ οι 18 και 19 σχεδιάζουν μηδενικού μήκους τόξα και ελλείψεις αντίστοιχα και πάει λέγοντας μέχρι και την CLS 128 που ισοδυναμεί με την CLS 0.

 

Στη πράξη.

Πρακτικά, ο υποψήφιος αγοραστής ενός Sinclair QL για να μην αγοράσει ένα ‘full of bugs’ μηχάνημα, έπρεπε να προσέξει 2-3 πραγματάκια όσον αφορά τον συνδιασμό software-hardware του υπολογιστή.

Όπως περιγράφει ο Tony Tebby: “ελέγχοντας τον σειριακό αριθμό στο κάτω μέρος του QL, μπορούσες να ξέρεις εάν έχεις ένα χρηστικό μηχάνημα! Εάν τα δύο ψηφία μετά το D ήταν 07, τότε είχες ενα καλό μηχάνημα. Εάν ήταν οτιδήποτε πάνω από 09 ήταν εξαιρετικό!“. Οι μεταπωλητές των υπολογιστών της Sinclair βέβαια, ξέροντας ότι έχουν να κάνουν με “ψιλιασμένους” πιά αγοραστές, δεν ξαφνιάστηκαν όταν αυτοί τους ζητούσαν QLs με hardware version D12, JS firmware version και version 2.00 Psion software! Το πρόβλημα ήταν, πόσους QLs με αυτό το configuration και από που, θα τους στοκάριζαν!

ql_builds
Builds.

Επίλογος.

Ξεκάθαρος ορισμός του τι είναι bug δεν υπάρχει (με την έννοια ότι δεν υπάρχει κάποιος διεθνής προτυποποιημένος ορισμός του). Εάν όμως ορίσουμε σαν bugs εκείνες τις “ιδιοσυγκρασίες” του firmware, οι οποίες σε σωστά γραμμένα προγράμματα δίνουν λάθος αποτελέσματα, καθόλου αποτελέσματα ή/και κρασάρουν τον υπολογιστή, τότε το firmware του Sinclair QL, είναι σίγουρα ο πρωταθλητής των bugs!

chriskgnr

chriskgnr

Γεννημένος στη Θεσσαλονίκη, η μοίρα τό'φερε εγώ ο Παοκτσής να βρίσκομαι χρόνια τώρα στον Πειραιά! Φανατικός Sinclair QL και Acorn user, πωρωμένος adventurάς με αμέτρητες ώρες και ξενύχτια πάνω από μία Α500 προσπαθώντας να λύσω γρίφους των adventures games... Τα PC? Αναγκαίο "κακό". Και φυσικά, Ν64 rules!

21 thoughts on “Sinclair QL firmware

  • geoanas
    January 6, 2015 at 10:34 am
    Permalink

    Άψογο άρθρο για ακόμα μια φορά Χρήστο !

    Όλα αυτά τα bugs, το περίφημο “The kludge”, κλπ, κλπ, νομίζω δεν είναι παρά αποδείξεις της βιασύνης της Sinclair να βγάλει γρήγορα το μηχάνημα στην αγορά …. από design πάντως ο QL …”σκίζει” !
    Ακόμα θυμάμαι εκείνη την ερώτηση σου… “Βρείτε το τελευταίο bug του QL που εντοπίστηκε!”

    (http://www.retrocomputers.gr/forum/diafora-alla-sxetika-themata/16955-quizzes?start=285#21995)

    😉

  • dR_wH0
    January 6, 2015 at 12:13 pm
    Permalink

    Κοίτα να δείς ε ; Τελικά όντως ισχύει το ρητό “There is no such thing as bad publicity!” – Απολαυστικό το άρθρο σου για ακόμα μια φορά φίλε μου Χρήστο.

  • nkary
    January 6, 2015 at 3:10 pm
    Permalink

    Με το άρθρο σου Χρήστο φαίνεται πόσο υπολόγιζαν εκείνα τα χρόνια οι εταιρίες κατασκευής υπολογιστών τους χρήστες. Ευτυχώς για αυτές ο κόσμος τότε δεν ήξερε και πολλά πολλά.
    Και σήμερα συμβαίνει αυτό. Τσεκάρετε να δείτε πόσα BIOS updates έχουν κυκλοφορήσει για το motheboards σας 😉
    Θέλουμε όμως και το στόρι πίσω από την δημιουργία του QL και πιστεύω δεν υπάρχει καλύτερος να το κάνει αυτό.

    • chriskgnr
      January 6, 2015 at 4:08 pm
      Permalink

      Ειδικά για το story του QL Νίκο, εκτός από το καθαυτό υλικό που υπάρχει σχετικά με τον σχεδιασμό και τις προδιαγραφές του QL, υπάρχει και πολύ παρασκήνιο! Το βλέπω να βγαίνει σε τρία parts το άρθρο! 🙂

  • chriskgnr
    January 6, 2015 at 4:05 pm
    Permalink

    Ευχαριστώ παίδες! Η ιστορία του firmware και γενικότερα του QL, θυμίζει την φράση “τι πρέπει να κάνεις για να πάνε όλα στραβά” ή “τι πρέπει να κάνεις για να καταστρέψεις μιά πολύ καλή ιδέα”! 🙂

  • January 11, 2015 at 11:24 am
    Permalink

    Επιτέλους λιγο χρονο να το διαβάσω με προσοχή, μπράβο Χρήστο για ολα τα καλούδια που μας δίνεις.

  • arislab
    January 12, 2015 at 8:54 pm
    Permalink

    Εντάξει! RESPECT Χρηστάρα! πολύ ωραίο άρθρο, χίλια μπράβο!!!
    Παρ’οτι έχουμε συζητήσει πολλές φορές τα QL bugs μ’αρεσε πολύ η εκτενέστερη αναλύση που έκανες όπως επίσης και το bug της CLS command. Θα ‘θελα πολύ να δω και 2ο μέρος (ή και μ’ενα απλό post) να κάνεις μια αναφορά στην “πτυχιακή εργασία” 😉
    Όσον’αφορα τον ορισμό των bugs, προέκυψε γιατί κάποτε στα mainframe της IBM, οι διάτρητες κάρτες με τα προγράμματα, είχαν πιάσει μαμούνια (bugs), που τις καταστρέφανε και κατα συνέπεια δεν λειτουργούσαν σωστά τα προγράμματα. Στην περίπτωση του QL…τον έφαγε η μαρμάγκα!!! 😀

    • chriskgnr
      January 12, 2015 at 10:00 pm
      Permalink

      Ευχαριστώ Άρη! Τα στοιχεία και οι πληροφορίες της πτυχιακής εργασίας που έγινε σε ανοικτό πανεπιστήμιο της Αγγλίας για την “περιπτωσάρα” QL, θα σχολιαστούν σε άλλο άρθρο, μαζί με πλήθος πληροφοριών για το παρασκήνιο σχεδιασμού και υλοποίησης του υπολογιστή, από ανθρώπους που ενεπλάκησαν ενεργά όπως ο Tony Tebby, ο David Karlin κτλ.

      • nkary
        January 13, 2015 at 10:42 am
        Permalink

        Ωραίος. Γουστάρω πολύ να διαβάζω για το παρασκήνιο των αγαπημένων μας home micro’s

        • chriskgnr
          January 13, 2015 at 5:28 pm
          Permalink

          Για να το πω απλά σε όλους σας, “‘έχει πολύ φαΐ” το παρασκήνιο του QL! 🙂

  • turrican
    January 15, 2015 at 7:13 pm
    Permalink

    Πω! Πω! Τι bugs θα έχουμε φάει τόσα χρόνια βρε παιδιά και χωρίς μάλιστα να το πάρουμε χαμπάρι (και τους λέγαμε και ευχαριστώ από επάνω!). Ακόμα και σήμερα αναρωτιέμαι (και είναι πραγματικά άξιο θαυμασμού) πώς στην ευχή οι άνθρωποι της sinclair επέδειξαν τέτοια ψυχραιμία στην διαχείριση της κρίσης του QL! Πως άντεξαν και δεν έπαθαν εγκεφαλικό οι αθεόφοβοι; Τι θα πεις στους πελάτες που σου έχουν προπληρώσει εδώ και καιρό τα μηχανήματα, τους έχεις ταράξει στις αναβολές και τελικά τους στέλνεις μηχανήματα με μισοτελειωμένες ROM (και αυτές σε cartrige;;;); Τι θα πεις στις αλυσίδες; Τι θα πεις στον τύπο; Respect!!! Αυτούς πρέπει να φέρουμε για να γλιτώσουμε το μνημόνιο (το ανησυχητικό εδώ βέβαια είναι ότι και αυτοί χρεοκόπησαν…).

    Στο προκείμενο τώρα, μπορεί οι επόμενες versions του QL να ήταν κάτι τι βελτιωμένες, αλλά έλα που εγώ είμαι λίγο μαζόχας! Εγώ εκείνο, το πρώτο το καλό πράγμα θέλω! Βλέπετε για τους συλλέκτες εκείνη η πρώτη version φαντάζει τέλεια!

    Με εντυπωσίασε επίσης πολύ και η CLS με τα bugs της! Δεν μπήκα στον κόπο να τη δοκιμάσω (ίσως σε κάποιο emulator), αλλά θα έλεγα ότι μάλλον αντιδρά σαν…. συνάρτηση χα! Χα! Χα!

    Αν και μπερδεύτηκα λίγο (τα μαθηματικά – γεωμετρία δεν είναι το φόρτε μου), διαβάζοντας ότι “η CLS 17 σχεδιάζει μία γραμμή μηδενικού μήκους” υπέθεσα ότι μάλλον η basic λανθασμένα τοποθετεί cursor και end line στο ίδιο σημείο(;). Φαντάζομαι κάτι αντίστοιχο κάνει και στις ελλείψεις και στα τόξα. Τα συγχαρητήρια μου στο Χρήστο για άλλη μια φορά!

  • chriskgnr
    January 15, 2015 at 8:36 pm
    Permalink

    Thanx turrican! Όντως είναι απορίας άξιο πως την βγάλανε καθαρή με τόση πίεση οι άνθρωποι της Sinclair! 🙂

  • March 17, 2015 at 1:44 pm
    Permalink

    Φοβερό άρθρο, δεν είχα ιδέα τι παίζει με τον QL. Τραγωδία τα bugs.

    Εγώ αναρωτιόμουνα τι παίζει και δεν έχω δει ποτέ demo σε αυτό το μηχάνημα. Άραγες με τον 68000 δεν σου δίνει καλή ισχύ; Αλλά από γραφικά και δυνατότητες φτωχός μάλλον;

    Βασικά ένα παλικάρι από την demoscene το παλεύει και είχε να πει τα εξής:

    “Managed to get five(!) 24×32 sprites running in one frame on a stock QL.
    Let’s just say the machine wasn’t exactly built for realtime graphics.

    I can’t discuss all the problems in such small space, but for a start:

    – The 68008 sits on an 8-bit bus which cripples it down really badly
    – The second possible location for a gfx page is filled with system datas
    – Interrupt vectors are in ROM so you can’t take over the system and still have a VBI
    – There’s no real sound chip. The coprocessor, an Intel 8049 can play some weird one-channel sound using its absurd ROM routines
    – You can’t even reprogram the 8049 because it just runs its ROM code
    – Communication with the 8049 bogs down the main CPU, and is required for sound
    – Trashy microdrives eating the precious cassettes (luckily have an SD reader now)
    – With an unrolled movem loop the QL can almost clear 1/3 of its screen per frame of 32k
    – The graphics are kind of linear, except the bits of four consecutive pixels are interleaved in two consecutive bytes – no fast planar tricks here
    – There are four bits per pixel, but that doesn’t mean 16 colors. One bit was lost for the useless flash attribute (which can’t be controlled).
    – Fixed 1 bit per component RGB colors
    – Pretty much the only tricks available with the gfx hardware are page flipping and blanking, and exact timing is just a dream if the ROM code is running
    – No character mode, attribute blocks, sprites, blitter, scrolling or … anything
    – The only viable emulator is a commercial product. You can use a serial cable for uploading your own code but the required plugs are extremely rare.”

    • dR_wH0
      March 19, 2015 at 6:43 pm
      Permalink

      Νο wonder που το μηχάνημα δεν έχει τα *φόντα* για demoscene οπότε!

  • chriskgnr
    March 19, 2015 at 10:14 pm
    Permalink

    Αν και δεν εχω πολυψάξει τα των γραφικών δυνατοτήτων του QL, αυτό που έχω να πω είναι ότι το σετ γραφικών εντολών της SuperBASIC, είναι αρκετά δυνατό. Απο κει περα, για τη διαχείριση της screen memory(ειναι ένα κομματι 32ΚΒ στο memory map), απο το λειτουργικό, δεν έχω ακούσει τα καλύτερα πράγματα. Επίσης οι ηχητικές δυνατότητες του QL, θα έλεγα ότι είναι σε εμβρυακό στάδιο, οποτε λογικά για demos δεν ηταν και η καλυτερη πλατφόρμα!

  • turrican
    March 19, 2015 at 10:37 pm
    Permalink

    Ενδιαφέροντα και τα στοιχεία του optimus!
    Κάνουν τα πράγματα να δείχνουν πολύ δραματικά.
    Αναρωτιέμαι τι θα είχαν να πουν οι πρώτοι coders που έγραψαν games για την πλατφόρμα.
    Πολλά απο αυτά έμειναν στη μέση και δεν τελείωσαν ποτέ εξαιτίας της αποτυχίας του QL.
    Ένα απο αυτά ήταν το Brataccas (ίσως ήταν και το πρώτο game της εταιρίας) της psygnosis.
    Αν δείτε τα γραφικά σε Amiga και Atari θα νομίζετε ότι είναι QL.

    • chriskgnr
      March 19, 2015 at 10:44 pm
      Permalink

      Μόλις είδα φωτογραφίες του Brataccas στο google. Πραγματικά λες και φτιάχτηκε για το QL! H τετράχρωμη παλέτα είναι ίδια με του QL στην υψηλή ανάλυση, άσπρο, μαύρο, κόκκινο, πράσινο!

Leave a Reply