BLACK BOX V8 για C64 – Czy mówisz po polsku?

Η συγκεκριμένη cartridge με προέλευση την Πολωνία, κυκλοφόρησε εμπορικά και σχεδόν αποκλειστικά στην πατρίδα της για πρώτη φορά κάπου στις αρχές των ‘90s. Δημιουργός της είναι ο Romuald Drahokaupil που ενώ φαίνεται ότι έχει κάνει εξαιρετική δουλειά, φρόντισε να την κρατήσει επτασφράγιστη και καλά προστατευμένη μακριά από τα αδιάκριτα βλέμματα κοινών θνητών και μη Πολωνών τη γλώσσα. Όπως μου εκμυστηρεύτηκε ο φίλος μου Mr Wegi, ο κώδικας είναι άψογα κλειδωμένος -μπετόν αρμέ- και κάθε προσπάθεια επέμβασης (π.χ. απλής μετάφρασης των εντολών στα Αγγλικά) οδηγεί σε crash του προγράμματος και κρέμασμα του υπολογιστή. Αυτό βέβαια ίσως έγινε για έναν ακόμη λόγο που αφορά πνευματικά δικαιώματα και copyrights, αφού όπως θα δούμε στη συνέχεια ο πυρήνας της περιλαμβάνει τμήματα και ρουτίνες από “άλλα μαγαζιά”. Ας είναι…

Περί τίνος πρόκειται;

Μιλάμε για ακόμη μια cartridge 2 σε 1, ένα εργαλείο στα χέρια κάποιου χρήστη που του αρέσει να ψάχνεται και να εμβαθύνει. Πολύ επιγραμματικά θα λέγαμε ότι:

(1) Αποτελεί μια άξια και ισχυρή επέκταση της ενσωματωμένης BASIC με προσθήκη 31 νέων εντολών. Επιταχύνει σημαντικά το φόρτωμα και σώσιμο τόσο των δικών μας, όσο και άλλων, εμπορικών προγραμμάτων σε κασέτα. Οι  Turbo λειτουργίες σε load / save και verification of data – ίσως υπερτερούν σε ταχύτητα των Turbo ROM και ABC-TURBO, διατηρώντας άψογη συμβατότητα με γνωστούς και ευρύτατα διαδεδομένους (software) fast loaders.
Κάποιοι την χαρακτηρίζουν ως κακέκτυπο αντίγραφο της Action Replay MK IV (4η – 1988), αφού έχοντας σχεδόν τον ίδιο πυρήνα, με μοναδική διαφορά την αλλαγή στην αντιστοίχηση των function keys, πλασαρίστηκε άτυπα στην τοπική αγορά ως η εξέλιξη της (AR MK VI – 6η και τελευταία επίσημη έκδοση για C64). Έπαιζε δηλαδή σαν την έβδομη, ανεπίσημη και “πουσαρισμένη” έκδοση της AR. Το γεγονός αυτό φυσικά δεν ανταποκρίνονταν στην πραγματικότητα.
Προσωπικά και δίχως να διαθέτω την απαραίτητη τεχνική εμπειρία δηλώνω από ελλιπής ως και τελείως ακατάλληλος να κρίνω. Εκείνο όμως που λατρεύω και υποστηρίζω είναι ότι:
Αντίγραφο ή πρωτότυπο, καλώς ή κακώς, το γρήγορο φόρτωμα ήταν, είναι και θα είναι πάντα στην κορυφή των προτιμήσεων μου, έστω και αν αυτό αφορά (όπως στην συγκεκριμένη cartridge) αποκλειστικά και μόνο το ταπεινό και (καθόλου!) καταφρονεμένο μέσον της κασέτας.
Σε όλα τα παραπάνω έρχεται να προστεθεί, ως πολύτιμο και απαραίτητο συμπλήρωμα το ενσωματωμένο πρόγραμμα ρύθμισης του αζιμούθιου της κεφαλής του κασετοφώνου μας. Είναι ιδιαιτέρως φιλικό, ώστε να πετυχαίνουμε με εύκολο τρόπο, μέσω γραφικής παράστασης την βέλτιστη ρύθμιση. Νομίζω, είναι γνωστό σε όλους πόσο δύστροπο μπορεί να γίνει το κασετόφωνο του C64, ειδικά όταν πρόκειται να εργαστεί σε ταχύτητες φάσματος turbo.

(2) INTEGRATED SYSTEM SYNTHESIS SPEECH AND SOUND
Εδώ βρίσκεται το ενδιαφέρον μέρος, το ζουμί αν θέλετε της cartridge. Με αυτήν μπορούμε να μετατρέψουμε τον C64 σε synth, με δυνατότητα σύνθεσης ανθρώπινης φωνής. Πυρήνα και βάση της αποτελεί η χρήση φωνημάτων (βλ. και Currah μSpeech). Μαζί υποστηρίζονται έξτρα εντολές για να μας διευκολύνουν στην παραγωγή μουσικής και χειρισμού ήχων.
Σε αντίθεση με το Currah, εδώ δεν συναντούμε ένα εξειδικευμένο επεξεργαστή σύνθεσης φωνής όπως ο SP0256-AL2. Απεναντίας την δύσκολη δουλειά αναλαμβάνει να βγάλει εις πέρας και αποκλειστικά το μεγαλοπρεπές SID. Ακόμη μια σημαντική διαφορά είναι ότι η BLACK BOX περιλαμβάνει στον πυρήνα της, εντολές BASIC (εφικτό να προγραμματίσουμε και σε assembly) και προσφέρει παραμετροποιήσιμες ρυθμίσεις, ώστε να δώσουμε ιδιαίτερο χρώμα και τόνο στην φωνή του υπολογιστή μας. Εδώ δεν ακούμε πλέον την μονότονη, μεταλλική φωνή του Currah αλλά έναν πραγματικό αοιδό! Αλήθεια σας ανέφερα ότι έχουμε την δυνατότητα να κάνουμε τον υπολογιστή μας ακόμη και να τραγουδήσει με ή χωρίς μουσική υπόκρουση;
Το μόνο πρόβλημα είναι ότι όλα αυτά τα θαυμαστά είναι ρυθμισμένα εκ κατασκευής να λειτουργούν τέλεια στα Πολωνικά, αφού όπως καταλαβαίνετε αποτελεί την μητρική της γλώσσα. Μικρό το κακό όμως, γιατί με τους κατάλληλους χειρισμούς μπορούμε να μάθουμε τον υπολογιστή μας να μιλάει «φαρσί» όποια γλώσσα εμείς επιθυμούμε. Θυμάστε τι σας έλεγα; Φωνήματα!

Η BLACK BOX κυκλοφόρησε από την άγνωστη σε εμάς εταιρία ROM BIT, σε 8 διαφορετικές εκδόσεις, τις: V2.0, V3.0,V3.2,V4.0,V6.0,V8.0,V8.1 και V9.0  Εδώ θα ασχοληθούμε με την έκδοση 8 (ATRAX) που γνώρισε τις δόξες της, στην Πολωνία των early ‘90s.

Κατασκευή – Υλικά

Ο Mr Wegi πήρε την πλακέτα και αφού αντικατέστησε, όπως μου είπε, το cd4011 της original με το 74HCT02, έκοψε την διαδρομή Α14 και μαζί με κάποιες άλλες αλλαγές στους πυκνωτές καθυστέρησης των 1000pf (αγνοείστε τα 560pf / σχεδιαστική αστοχία) και 100nf στις γραμμές IO1/IO2, σχεδίασε μια τέλεια ρεπλίκα που… εδώ μπαίνω εγώ 😉

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

Η cartridge είναι έτοιμη και οπλισμένη με την original 27C256 eprom που περιέχει το πρόγραμμα, ακριβές αντίγραφο του γνήσιου, όπως ακριβώς το ανέπτυξε ο δημιουργός του χωρίς παρεμβάσεις. Για περισσότερες πληροφορίες σχετικές με το τι θα χρειαστείτε, μπορείτε να ανατρέξετε εδώ.
Ας δούμε τώρα αναλυτικά τις εντολές και τις διάφορες λειτουργίες της ώστε να ανακαλύψουμε με ποιους τρόπους θα κάνουμε αυτό το «καναρίνι» να κελαηδήσει.

(*Σημείωση: Ότι ακολουθεί από εδώ και πέρα αποτελεί τμήμα του manual, έχει μεταφραστεί (από τα Πολωνικά) και επεξεργαστεί έχοντας ως πηγή αυτήν την σελίδα.)

Τοποθέτηση – Λειτουργία

Με κλειστό το μηχάνημα, τοποθετούμε την cartridge στο αντίστοιχο slot. Ανοίγουμε και ευθύς μας υποδέχεται η αρχική οθόνη επιλογών.

Το interface επικοινωνίας είναι στα Πολωνικά, αλλά όπως βλέπετε εγώ σας το παρέχω μεταφρασμένο

 

Με ‘P‘ (Help) έχουμε το σύνολο εντολών (συντομογραφιών) και του τρόπου σύνταξης

Με ένα στιγμιαίο πάτημα της μπάρας SPACE, μας καλωσορίζει το μήνυμα: “C64 BASIC IMPROVED BY BLACK BOX V.8” (Mode: BLACK BOX)

Είμαστε έτοιμοι πλέον να χρησιμοποιήσουμε τις επιπλέον εντολές που μας προσφέρει το σύστημα. Τις ενεργοποιούμε πάντα με την προσθήκη του αριστερού βέλους (←), ακριβώς από μπροστά κατά την πληκτρολόγηση. Ο τρόπος είναι αντίστοιχος με εκείνον της Ogryzek cart. Εάν κατά το άνοιγμα κρατήσουμε για ένα περίπου δευτερόλεπτο το πλήκτρο της Commodore τότε αυτόματα μπαίνουμε σε αυτό ακριβώς το mode.

Λειτουργία του πλήκτρου RESET

Όπως βλέπουμε στη επάνω, δεξιά γωνία υπάρχει το πλήκτρο RESET. Μόνο του ή συνδυαζόμενο με άλλα, μας δίνει τις ακόλουθες επιλογές.

– Με απλό RESET βγαίνουμε εκ νέου στην αρχική οθόνη, όπως είδαμε λίγο παραπάνω.

– Έχοντας πατημένο το πλήκτρο Commodore, κάνουμε επανεκκίνηση με ενεργή την επέκταση συστήματος και τις επιπλέον εντολές ενώ μας καλωσορίζει το χαρακτηριστικό C-64 BASIC IMPROVED BY BLACK BOX V.8 Με αυτόν τον τρόπο δεν χάνονται τα προγράμματα μας από την μνήμη που κάλλιστα μπορούμε να τα ανακτήσουμε, δίνοντας ←U (unnew).

– Κρατώντας ταυτόχρονα το RUN STOP, πάμε κατευθείαν στην δεύτερη λειτουργία της cartridge ως synth.

Η εισαγωγική οθόνη σε λειτουργία SAM / Reciter in Polish

– Εάν ανοίξουμε τον υπολογιστή ή πατήσουμε RESET, έχοντας ταυτόχρονα πατημένο κάποιο από τα SPACE ή CTRL, τότε βγαίνουμε σε κανονικό, εργοστασιακό και ορθόδοξο boot χωρίς καμία έξτρα δυνατότητα. Ακόμη όμως και σε αυτό το mode, με την εντολή SYS 277 μπορούμε να απολαύσουμε ταχύτητες turbo σε LOAD, SAVE και VERIFY των προγραμμάτων μας. Με τον συνδυασμό πλήκτρων RUN STOP και RESTORE επαναφέρουμε την κανονική λειτουργία.

 

1. Λειτουργία του συστήματος επέκτασης εντολών BLACK BOX

Στα γρήγορα:
Για να φορτώσουμε ένα πρόγραμμα από κασέτα δίνουμε ←L ή πατάμε το πλήκτρο F5. Για να το τρέξουμε, δίνουμε το γνωστό RUN ολογράφως ή πατάμε F3.

Αναλυτικά οι εντολές που έχουμε στην διάθεση μας αφορούν διάφορες λειτουργίες και μπορούμε να τις ταξινομήσουμε ως εξής :

Χειρισμός προγραμμάτων και κασέτας

← @ (COPY)
Με αυτήν μπορούμε να αντιγράψουμε εύκολα όλα τα προγράμματα σε κασέτα. Το μέγιστο επιτρεπτό μέγεθος είναι τα 152 blocks. Τα προγράμματα πρέπει να υπακούν σε δυο προϋποθέσεις με πρώτη να μην εκτελούνται αυτόματα μετά το φόρτωμα (autorun) και δεύτερον να φορτώνουν μια κι έξω. Δεν πρέπει να απαιτούν δηλαδή γύρισμα της κασέτας σε συγκεκριμένα σημεία (multi load), όπως για παράδειγμα το Summer Games. Η διαδικασία της αντιγραφής μπορεί να γίνει αμέσως μετά την ολοκλήρωση του φορτώματος και μπορεί να επαναληφθεί όσες φορές θέλουμε. Το αρχικό τμήμα του loader που προηγείται πάντα των δεδομένων στην κασέτα, αντιγράφεται και στην καινούργια, αυτούσιο και με το ίδιο όνομα. Η λειτουργία της αντιγραφής είναι συμβατή με όλους τους turbo loaders που κυκλοφορούν. Για συντομία μπορούμε να πατήσουμε απλά το πλήκτρο F7

← HF (HEAD FIT)
Ξεκινάει το ενσωματωμένο πρόγραμμα ρύθμισης αζιμούθιου της κεφαλής του κασετοφώνου που γίνεται με τρόπο πολύ κατανοητό και πανεύκολο για τον χρήστη.

← L (LOAD) ή ← L

Αυτός είναι ο πιο συνηθισμένος τρόπος φορτώματος προγραμμάτων (αρχείων) στον υπολογιστή. Το πρώτο αρχείο που εμφανίζεται στην κασέτα θα μεταφερθεί στη μνήμη. Αν η κεφαλίδα του προγράμματος είναι 1, θα φορτωθεί ώστε να εκτελεσθεί στην περιοχή μνήμης για BASIC (συνήθως στην διεύθυνση 2049). Εάν ο τύπος κεφαλίδας του προγράμματος είναι 3 (αφορά προγράμματα σε κώδικα μηχανής), θα μεταφερθεί και θα ξεκινήσει στην περιοχή μνήμης που ορίζεται από την αρχική και τελική διεύθυνση ( start/end address).

← L “NAME” – Φορτώνει το συγκεκριμένο πρόγραμμα με συγκεκριμένο όνομα. Αντί του πλήρους ονόματος, μπορείτε να δώσετε μια συντόμευση παραλείποντας χαρακτήρες από το τέλος (ποτέ από την αρχή!).

Π.χ. Το ← L “COMMANDO” μπορεί να γίνει ← L “COM”

← L “NAME”, 1,1 –Είναι δυνατό να συντομεύσουμε το όνομα με τον τρόπο που αναφέρθηκε προηγουμένως ή να το παραλείψουμε εντελώς δίνοντας ← L “”, 1,1.
Μπορούμε να μπούμε σε λειτουργία φορτώματος και με το πάτημα του F5.

← ME (MERGE)
Με την εντολή αυτή μπορούμε να συγχωνεύσουμε δυο προγράμματα BASIC που έχουμε σώσει σε κασέτα, με τελικό αποτέλεσμα ένα και ενιαίο listing. Απαραίτητη προϋπόθεση είναι οι αριθμοί σειρών που εμφανίζονται στο listing του δεύτερου να είναι μεγαλύτεροι του πρώτου, αλλιώς θα έχουμε σβήσιμο και αντικατάσταση των πρώτων από τους δεύτερους. Επίσης πρέπει τα προγράμματα που θέλουμε να συγχωνευτούν να έχουν σωθεί ως “ONOMA”,1,1

← V (VERIFY)
Η γνωστή μας επαλήθευση. Γίνεται με τρεις τρόπους:

← V – Επαλήθευση του πρώτου προγράμματος που βρέθηκε. Αυτός είναι ο πιο απλός τρόπος για να ελέγξετε την ορθότητα της εγγραφής στην κασέτα. Μπορεί να χρησιμοποιηθεί για όλα τα προγράμματα με διεύθυνση εκκίνησης την γνωστή μας 2049, ανεξάρτητα από τον τύπο κεφαλίδας καθώς και για όλα τα προγράμματα με τύπο κεφαλίδας 3, ανεξάρτητα από την αρχική τους διεύθυνση.

← V “NAME” – Αναφέρεται στην εύρεση ενός αρχείου με όνομα NAME μέσα στην κασέτα και το επαληθεύει. Ο τρόπος χρήσης της εντολής είναι ίδιος, όπως παραπάνω.

← V “NAME”, 1.1 – Το αρχείο με όνομα “NAME” θα αναζητηθεί και θα επαληθευτεί.

← £ (VERIFY)
Επαληθεύει το τελευταίο αποθηκευμένο πρόγραμμα στην κασέτα. Αποτελεί τον ταχύτερο, πιο αξιόπιστο και καλύτερο τρόπο επαλήθευσης. Η εντολή έχει εκχωρηθεί επίσης και στο πλήκτρο λειτουργίας F8.

← S (SAVE)
Γίνεται αποθήκευση (save) ενός προγράμματος. Τρόποι χρήσης:

← S “NAME” – Το αρχείο με συγκεκριμένο όνομα “NAME” θα αποθηκευτεί στην κασέτα. Με αυτό τον τρόπο αποθηκεύουμε όλα τα προγράμματα γραμμένα σε BASIC, καθώς και οποιαδήποτε παιχνίδια (και άλλα προγράμματα σε γλώσσα μηχανής) τρέχουν από την BASIC, με την εντολή RUN. Το σώσιμο γίνεται γρήγορα πατώντας το πλήκτρο λειτουργίας F6.

← S “NAME”, 1,1

← W (WRITE)
Η εντολή είναι χρήσιμη σε προγραμματιστές γλώσσας μηχανής. Με αυτήν μπορείτε να μεταφέρετε ολόκληρα μπλοκ κώδικα, γραφικών κτλ από την κασέτα απευθείας σε συγκεκριμένες διευθύνσεις μνήμης. Για την ορθή χρήση της συγκεκριμένης εντολής συνιστάται προσοχή και καλή γνώση του λειτουργικού συστήματος (Kernal). Περισσότερα για την οργάνωση της μνήμης του 64άρη (memory map) εδώ

Τρόποι χρήσης:

← W, αρχική διεύθυνση, τελική διεύθυνση “NAME” ή
← W, αρχική διεύθυνση, τελική διεύθυνση “NAME”, 1,1

Παραδείγματα:
← W, 49152, 53248 “PROGRAM YOU HAVE”, 1,1
← W, 40960, 49152 “TEXT”, 1.1 – περιοχή διευθύνσεων της BASIC,
← W, 57344, 0 “ΕΙΚΟΝΑ”, 1.1 – περιοχή KERNAL,
← W, 1024, 2024 “SCREEN”, 1.1 – περιοχή οθόνης LO-RES (χαρακτήρες)
← W, 1024, 0 “MEMORY”, 1.1

 

Προγραμματισμός σε BASIC – Βοηθήματα και λειτουργίες πληκτρολόγησης

← D (DELETE)
Μπορούμε να σβήσουμε μονομιάς ολόκληρα κομμάτια κώδικα μονομιάς, δίνοντας απλώς την αρχική και τελική γραμμή μέσα στο listing.
Με ←D, 200, 780 σβήνουμε όλες τις γραμμές, από 200 μέχρι 780.

← F (FIND WORD)
Αναζήτηση μιας συγκεκριμένης λέξης. Μέθοδος χρήσης:
← F “BLA” Θα δοθούν όλοι οι αριθμοί γραμμής που περιέχουν την λέξη BLA (εάν υπάρχουν). Με αυτόν τον τρόπο, μπορείτε να αναζητήσετε λέξεις σε αλυσίδες, μετά από REM(s), καθώς και μεταβλητές.

← KR (KILLER of REM)
Αυτή η εντολή σβήνει το κείμενο μετά από κάθε REM, σε προγράμματα γραμμένα σε BASIC, γεγονός που μειώνει το μήκος του προγράμματος. Εάν η γραμμή περιέχει μόνο REM, διαγράφεται στο σύνολό της. Προσοχή μόνο στις παραπομπές GOTO ή GOSUB προς τέτοιες γραμμές. Η διαδοχική εκτέλεση των ← KR, ← KS, ← P είναι δυνατό να μειώσει επίσης σημαντικά το μέγεθος των προγραμμάτων μας.

← KS (KILLER of SPACE)
Αφαιρεί όλα τα περιττά κενά σε κείμενα μετά από REM, μειώνοντας έτσι το μήκος του προγράμματος. Τα υπόλοιπα διαστήματα φυσικά παραμένουν ανέπαφα.

← X (EXPEND)
Αποκαθιστά τους χώρους (κενά). Συνδυάζεται με την παραπάνω ←KS

← P (PACKAGE)
Βοηθά στην βελτιστοποίηση των προγραμμάτων όσο αφορά την δομή και ειδικότερα τις παραπομπές GOTO και GOSUB. Είναι μη αναστρέψιμη και μετά την εκτέλεσή της δεν μπορείτε πλέον να αλλάξετε το πρόγραμμα που προκύπτει.

← U (UN-NEW)
Έχει να κάνει με την επαναφορά προγραμμάτων, γραμμένων σε BASIC, μετά την εκτέλεση της εντολής NEW ή μετά το RESET με πατημένο το πλήκτρο COMMODORE, όπως αναφέρθηκε παραπάνω.

← R (RENUMBER)
Αλλάζει την αρίθμηση των σειρών, του προγράμματος BASIC. Η διαδικασία αρίθμησης λαμβάνει υπόψη και αλλάζει τις διευθύνσεις όλων των αλμάτων τύπου GOTO ή GOSUB. Εκτυπώνουμε με ← R και πατάμε RETURN. Μας ζητά τον αριθμό της πρώτης γραμμής και βήμα αλλαγής αρίθμησης. Εάν παρουσιαστεί σφάλμα, εμφανίζεται το αντίστοιχο μήνυμα.

← A (AUTONUMBER)
Προχωράει σε αυτόματη αρίθμηση γραμμών.
Μέθοδος εφαρμογής:
← Α, αριθμός πρώτης γραμμής, βήμα. Παράδειγμα:
← Α, 100,10
Η τιμή του βήματος δεν μπορεί να υπερβαίνει το 255. Η απενεργοποίηση της λειτουργίας AUTONUMBER γίνεται με εισαγωγή μιας κενής γραμμής (δηλαδή στην επόμενη προτεινόμενη γραμμή, μην εισάγετε τίποτα και απλά πατήστε RETURN). Ωστόσο, το πρόγραμμα θυμάται τον αριθμό γραμμής που παύσαμε τη λειτουργία AUTONUMBER. Η εκτέλεση ← A χωρίς εισαγωγή αριθμών θα οδηγήσει στη συνέχιση της αυτόματης αρίθμησης ξεκινώντας από τον τελευταίο αριθμό.

← I (INFO)
Παρέχει σχετικές πληροφορίες για προγράμματα BASIC (διευθύνσεις έναρξης, λήξης κτλ).

…Άλλες χρήσιμες εντολές

← CO (COLOR)
Αλλάζει το χρώμα του περιθωρίου και της οθόνης σύμφωνα με την κωδικοποίηση της Commodore. Παράδειγμα:
←CO,8,0

← CP (CURSOR POSITION)
Τοποθετεί τον δρομέα σε συγκεκριμένη θέση. Μέθοδος χρήσης:
← CP, αριθμός στήλης, αριθμός σειράς.
Αριθμός στήλης = 0-39, αριθμός σειράς = 0-24.

Μπορεί να ακολουθήσει μια εντολή PRINT ή INPUT.
Π.χ.
← CP, 20, 12: PRINT A$

← HE (HELP)
Η βοήθεια μας εμφανίζει την λίστα εντολών του συστήματος BLACK BOX V.8

← MO (Assembler monitor)
Σε αυτή την λειτουργία μπορούμε να μπούμε ακόμη και με το πάτημα του F2. Για επιστροφή πίσω στο σύστημα BLACK BOX, πατάμε το πλήκτρο Χ και RETURN

← YK, ← NK (YES KEY, NO KEY)
Ενεργοποιεί και απενεργοποιεί την χρήση των πλήκτρων ειδικής λειτουργίας (Function keys).

← YR, ← NR (YES REPEAT, NO REPEAT)
Ενεργοποιεί ή όχι την αυτόματη επανάληψη οποιουδήποτε πλήκτρου. Με ενεργή την λειτουργία ο χαρακτήρας επαναλαμβάνεται στην οθόνη κρατώντας το αντίστοιχο πλήκτρο πατημένο.

← YS, ← NS (YES SCREEN, NO SCREEN)
Επιτρέπει ή όχι την απεικόνιση στην οθόνη. Η απενεργοποίηση της, επιταχύνει δραματικά τους υπολογισμούς.

← YT, ← NT (YES TONES OF MUSIC, NO TONES OF MUSIC)
Ενεργοποιεί ή όχι τους τόνους των πλήκτρων. Το απλό πληκτρολόγιο του C64 μετατρέπεται σε μουσικό, 3 οκτάβων, επιτρέποντας να δοκιμάσετε τις ικανότητες σας. Πατώντας SHIFT ή SHIFT LOCK ανεβαίνουμε ανά δύο οκτάβες. Παράλληλα επιτρέπεται η ταυτόχρονη εκτέλεση προγραμμάτων γραμμένων σε BASIC.

← Q (QUIT)
Απενεργοποιεί όλες τις επιπλέον εντολές του συστήματος BLACK BOX. Ο υπολογιστής λειτουργεί σα να μην υπάρχει η cartridge, ακριβώς εργοστασιακά. Αυτό χρειάζεται σε κάποιες σπάνιες περιπτώσεις, προκειμένου να τρέξουν σωστά κάποια ελάχιστα παιχνίδια ή εφαρμογές.
Για να επαναφέρετε το σύστημα με ενεργοποιημένα όλα τα έξτρα, εκτελείτε RESET ή δίνετε SYS 268.

← E (EXIT)
Απενεργοποιεί επίσης όλες τις εντολές συστήματος BLACK BOX. Ταυτόχρονα όμως, οι τυπικές LOAD, SAVE και VERIFY εντολές λειτουργούν τώρα σε σύστημα TURBO, με τον ίδιο τρόπο όπως στο ABC-TURBO. Πατώντας RUN / STOP και RESTORE απενεργοποιείται και επανέρχεται η κανονική λειτουργία εντολών. Με SYS 277 ρυθμίζουμε ξανά τις εντολές LOAD, SAVE και VERIFY ώστε να λειτουργήσουν ξανά σε σύστημα TURBO. Το πλεονέκτημα είναι η συμβατότητα με την εργοστασιακή COMMODORE BASIC V2, με ταυτόχρονο κέρδος στην αύξηση της ταχύτητας φορτώματος και σωσίματος, μέχρι και 10 φορές παραπάνω. Η μέθοδος συνιστάται κατά το φόρτωμα και την έναρξη παιχνιδιών. Οι εντολές λειτουργούν τόσο σε γραμμή όσο και μέσα από πρόγραμμα. Η εντολή LOAD προσφέρει επιπλέον αυτόματη εκκίνηση.

←←←
Άμεση μετάβαση στο δεύτερο σύστημα, της σύνθεσης ομιλίας.

Πλήκτρα ειδικών λειτουργιών (Function keys)

Μπορούμε να τα ενεργοποιήσουμε ή το αντίθετο, δίνοντας τις εντολές <-ΥΚ (ενεργοποίηση) ή <-NK (απενεργοποίηση). Η αντιστοίχηση τους με διάφορες εντολές και λειτουργίες έχει ως εξής:

F1 – LIST
F2 – Assembler monitor. Το ίδιο με ← MO
F3 – Εκτέλεση προγράμματος. Το ίδιο με ← Q: RUN
F4 – Εναλλαγή συστήματος σε λειτουργία synth
F5 – Φόρτωμα (LOAD) από κασέτα σε turbo
F6 – Εγγραφή (SAVE) στην κασέτα σε turbo
F7 – Αντιγραφή (COPY) του τελευταίου προγράμματος
F8 – Επαλήθευση (VERIFY) του τελευταίου προγράμματος που σώσαμε στην κασέτα

2. Σύνθεση ομιλίας και ήχων

Η cartridge επιτρέπει την «ανάγνωση» γραπτών κειμένων στα Πολωνικά. Επιτρέπει επίσης τη σύνθεση ομιλίας ακόμη και την αναπαραγωγή τραγουδιού με συνοδεία μουσικής ή όχι. Το Πολωνικό πρόγραμμα σύνθεσης ομιλίας προσφέρει μεγάλη παραμετροποίηση πολλών επιμέρους χαρακτηριστικών της ανθρώπινης φωνής. Στην ουσία είναι μια τροποποιημένη εκδοχή του προγράμματος SAM/Reciter.
Η βασική αλλαγή έγινε στην αντικατάσταση των υφιστάμενων κανόνων αγγλικής προφοράς με εκείνους της πολωνικής γλώσσας.
Ενσωματώνει εντολές ελέγχου του ήχου επιτρέποντας τον προγραμματισμό μουσικής και δημιουργία διαφορετικών εφέ.
Για μια πλήρη λίστα όλων των διαθέσιμων εντολών πληκτρολογούμε ←←← ή προχωράμε σε RESET κρατώντας πατημένο το πλήκτρο RUN / STOP.

Εδώ θα ακούσουμε το demo ή θα αναζητήσουμε βοήθεια με το ‘P’

Στην πρώτη περίπτωση έχουμε πρόσβαση στο πρόγραμμα επίδειξης, όχι όμως και στη δεύτερη. Για τον τερματισμό του demo αρκεί να πατήσουμε SPACE. Αν έχουμε την περιέργεια να ρίξουμε μια αδιάκριτη ματιά στο listing τοu προγράμματος επίδειξης, αρκεί το πλήκτρο RUN / STOP και στη συνέχεια δίνουμε την παλιά μας γνώριμη LIST.

Ολόκληρο το listing σε BASIC

Με το πλήκτρο ‘P‘ βγαίνουμε στον πίνακα εντολών

 

Λίστα εντολών – Σύνταξη και χρήση

]SAM – Συντόμευση: ]SA
Επιτρέπει την λειτουργία του προγράμματος S.A.M (Software Automatic Mouth) και την σύνθεση ανθρώπινης φωνής, βάση φωνημάτων.

]RECITER – Συντόμευση: ]RE
Αυτή η εντολή ενεργοποιεί το πρόγραμμα RECITER και επιτρέπει την ανάγνωση κειμένων (κυρίως) στην πολωνική γλώσσα, σύμφωνα με τους ισχύοντες κανόνες ορθογραφίας, καθώς και ανάγνωση αριθμών και ορισμένων συντομογραφιών. Συνδυάζεται με την εντολή SAY. Μπορεί να διαβάσει αριθμούς αλλά και σύμβολα (+ * / ↑ < > = % etc ie e.g no)
Παράδειγμα:

]RE : SAY “1,2,3,4,5,6,7,8,9,0” : SAY “124.45”

* Προσοχή: Η ανάγνωση γίνεται στα Πολωνικά !

]PITCH – Συντόμευση: ]PI xx ή POKE 39439,xx
Η παράμετρος xx μπορεί να έχει τιμή 0-255 και καθορίζει το βήμα της φωνής. Τιμή ίση με 64 αντιστοιχεί σε μια μέση αρσενική φωνή. Τιμές κάτω του 20 καλό είναι να μην εφαρμόζονται λόγω του ότι δεν είναι πρακτικές.

]SPEED – Συντόμευση: ]SP xx ή 39438,χχ
Καθορίζει την ταχύτητα της ανάγνωσης και μπορεί να κυμανθεί από 0-255. Η εργοστασιακή ρύθμιση είναι 72. Τιμές κάτω του 20 επίσης δεν έχουν πρακτική χρήση.

]KNOBS xx,yy – Συντόμευση: ]KN xx,yy ή
POKE 38880, xx: SYS 38882: POKE 38881, yy: SYS 38882
Με αυτήν την εντολή καθορίζουμε το ηχόχρωμα της παραγόμενης φωνής. Η παράμετρος xx καθορίζει τα χαρακτηριστικά που θα λέγαμε ότι εξαρτώνται από τον λάρυγγα, ενώ η παράμετρος yy καθορίζει τα εξαρτώμενα από την μορφολογία της στοματικής κοιλότητας. Και οι δύο παράμετροι μπορούν να έχουν τιμές 0-255. Για την πολωνική γλώσσα, η καταλληλότερη ρύθμιση είναι ]KN 145, 140. Χρησιμοποιώντας POKE(s), οι παράμετροι xx και yy μπορούν να ρυθμιστούν ανεξάρτητα.

]ERROR – Συντόμευση: ]ER
Αυτή η εντολή είναι χρήσιμη κατά τη διάρκεια δοκιμών και πειραμάτων σύνθεσης φωνής χρησιμοποιώντας φωνήματα, όταν δηλαδή ενεργοποιείται το πρόγραμμα S.A.M. με την συντόμευση ]SA και την αντίστοιχη μεταβλητή A$ (ή B$ …)
Υπόδειγμα εκτέλεσης: SAY A$ : ]ERROR

]LIGHT x – Συντόμευση: ]LI x
Η συγκεκριμένη εντολή έχει να κάνει με την ταυτόχρονη εμφάνιση ή όχι της οθόνης, παράλληλα με την εκτέλεση της εντολής SAY. Η μεταβλητή x μπορεί να πάρει τιμές 0 και 1.
Αν x = 0, τότε η οθόνη απενεργοποιείται κι ενώ εκτελείται η εντολή SAY, ολόκληρη παίρνει το χρώμα του πλαισίου. Ο ήχος είναι υψηλής ποιότητας.
Αν x = 1, η εικόνα εμφανίζεται αλλά ο ήχος παραμορφώνεται. Η παραγόμενη φωνή είναι μεν κατανοητή, αλλά πολύ μονότονη και ίσως βαρετή.
Η απενεργοποίηση της οθόνης συνίσταται σε γενικές γραμμές λόγω της υψηλής ποιότητας του τελικού αποτελέσματος.

SAY “…σειρά γραμμάτων (λέξεων), αριθμών ή συμβόλων…” ή SAY A$
Με αυτήν την εντολή παράγεται η ομιλία. Οι χαρακτήρες αμέσως μετά την εντολή SAY, δεν μπορεί να υπερβαίνουν τους 35. Η μεταβλητή A$ (non index string), μπορεί να περιέχει 255 χαρακτήρες, συμπεριλαμβανομένων των κενών διαστημάτων. Ωστόσο, δεν αποτελεί καλή ιδέα η ταυτόχρονη χρήση πολλών, λόγω της πιθανότητας απροσδόκητων, σύντομων διακοπών κατά την σύνθεση της ομιλίας. Φαίνεται ότι ο βέλτιστος αριθμός χαρακτήρων κυμαίνεται μεταξύ 20-70. Αν θέλουμε να υπερβούμε το παραπάνω όριο και επιθυμούμε να αναγνώσουμε μακρά κείμενα, τότε θα κινηθούμε με βάση κάποιο πρόγραμμα του τύπου:

100 FOR I = 0 TO N : B$ = A$(I) ; SAY B$ : NEXT

Το μέγεθος των κειμένων προς ανάγνωση περιορίζεται μόνο από την μνήμη (RAM) του υπολογιστή.

Προσοχή στην χρήση μέσα στην IF…THEN. Η εντολή SAY έχει διαφορετικό τρόπο σύνταξης από ότι ισχύει στην εντολή PRINT

BASIC:
IF A$ = “TEST” THEN PRINT “IAMRETRO”

IF A$ = “TEST” THEN : SAY “IAMRETRO”

]QUIT – Συντόμευση: ]QU
Έξοδος από όλες τις έξτρα εντολές. Πλέον η σύνθεση φωνής γίνεται εφικτή μόνο μέσω κώδικα μηχανής ή των εντολών POKE και SYS. Μπορούμε να αποκαταστήσουμε τις επιπλέον δυνατότητες με SYS 38144.

ΠΡΟΣΟΧΗ:
Στις εντολές ]PITCH, ]SPEED, ]KNOBS, ]LIGHT οι παράμετροι xx και yy πρέπει να έχουν συγκεκριμένες αριθμητικές τιμές. Σε καμία περίπτωση δεν μπορεί να είναι μεταβλητές. Εάν πρέπει να χρησιμοποιήσουμε μεταβλητές, τότε πρέπει να τις εντάξουμε μέσω POKE και SYS. Για παράδειγμα, όσο αφορά την PITCH μπορούμε να δώσουμε PI 57 ή αν επιθυμούμε μεταβλητή με POKE 39439,K(I).
Κατά τη διάρκεια ομιλίας με την εντολή SAY, δεν μπορούμε να διακόψουμε την ροή του προγράμματος με χρήση των πλήκτρων RUN / STOP + RESTORE. Ωστόσο, μπορούμε να πατήσουμε το RUN / STOP (χωρίς RESTORE) και να το κρατήσουμε πατημένο (στην πράξη, μερικά δευτερόλεπτα περίπου είναι αρκετά). Κάποια στιγμή το πρόγραμμα θα διακοπεί.

 

Σχετικά με προφορά, τονισμό λέξεων και στίξη

Με το RECITER έχουμε μια κάπως μονότονη ανάγνωση λέξεων σε ουδέτερο τόνο. Με το S.A.M μπορούμε να χρωματίσουμε τις λέξεις μας μέσα στον παραγόμενο λόγο. Δυστυχώς δεν είναι δυνατή η εφαρμογή κανόνων τονισμού. Η δυνατότητα προφοράς είναι επίσης πολύ περιορισμένη. Ως εκ τούτου είναι σκόπιμο να χρησιμοποιηθεί το πρόγραμμα S.A.M, ειδικά στην ανάγνωση μεγαλύτερων κειμένων που μπορούν να κερδίσουν σημαντικά σε ποιότητα και σαφήνεια. Είναι πιθανό να παρατηρηθούν ανεπιθύμητα ηχητικά αποτελέσματα σε λέξεις που περιέχουν τους χαρακτήρες: A, E, S, C, N. Η χρήση του RECITER είναι κατάλληλη σε περιπτώσεις που αφορούν κατανόηση εξ ακοής και μόνο από τη φωνή του υπολογιστή με εισαγωγή άγνωστου, γραπτού κειμένου.
Για να βελτιώσουμε ή να δώσουμε έμφαση στον λόγο, μπορούμε να εφαρμόσουμε κάποια κολπάκια. Ο διαχωρισμός των συλλαβών ή η χρήση διπλών φωνήεντων παράγουν ένταση σε κάθε λέξη. Για παράδειγμα, οι Πολωνικές λέξεις: MATEMATY KA, PRO STOKĄT ή PROSTOOKĄT ακούγονται πολύ καλύτερα με αυτόν τον τρόπο γραφής.

Ακόμη ένα τέχνασμα είναι η χρήση των σημείων στίξης όταν εισάγουμε τις λέξεις ή την πρόταση που θέλουμε να ακούσουμε.
Αυτά είναι τα: “? ! . , –

Π.χ. Δοκιμάστε να γράψετε και να ακούσετε τις διαφορές:

SAY “HERE IS THE QUESTION!”: SAY “IS IT A QUESTION?” : SAY “BE, OR NOT TO BE”: SAY “BE OR NOT?”
Ενώ σε Πολωνικά, δοκιμάστε:
SAY “OTO JEST PYTANIE!”: SAY “CZY TO JEST PYTANIE?” : SAY “BYĆ, ALBO NIE BYĆ” : SAY “BYĆ – ALBO NIE BYĆ”
Το πρόγραμμα S.A.M χρησιμοποιεί πάνω από 50 φωνήματα και επιτρέπει την εφαρμογή ομιλίας σε πολλές γλώσσες, ακόμα και σε τραγούδι. Η αλλαγές του βήματος γίνεται στην περιοχή των περίπου δύο οκτάβων. Η χρήση των φωνημάτων μπορεί να δημιουργήσει μεμονωμένες λέξεις και μακροσκελή κείμενα. Μπορούμε ακόμα να φτιάξουμε διαφορετικά φωνητικά εφέ , όπως π.χ. διαφορετικά είδη γέλιου, κραυγές τρόμου κτλ. Η χρήση φωνημάτων αποτελεί τον τελειότερο τρόπο σύνθεσης ομιλίας για το Commodore 64. Μόνο με αυτά μπορούμε να διασφαλίσουμε σωστό τόνο λέξεων, μεμονωμένων ή μέσα σε προτάσεις. Η σύνθεση ομιλίας απευθείας με τα φωνήματα ενεργοποιείται από τη συντόμευση ]SA.

Τα φωνήματα του SAM, συμβολίζονται με τους ακόλουθους χαρακτήρες:

Φωνήεντα : IY, IH, EH, AE, AA, AH, AO, OH, UH, UX, ER, X, IX
Σύμφωνα : EY, AY, OY, AW, OW, UW, YX, WX
Voiced: R, RX, L, LX, W, WH, Y, M, N, NX, B, D, D, G, J, Z, ZH, V, DH
Unvoiced consonants: *, S, SH, F, TH, P, T, K, CH, /H, /X
Special φωνήματα: UL, UM, UN, Q

Έπειτα από κάθε έναν από τους παραπάνω ήχους (στην πράξη, μετά από κάθε φωνήεν) μπορείτε να βάλετε έναν αριθμό από 1 έως 8, για παράδειγμα: AE5. Η προσθήκη αριθμού επιτρέπει τον συναισθηματικό χρωματισμό της λέξης. Η σύνδεση φωνημάτων γίνεται με σειριακή ακολουθία (σαν αλυσίδα), δίνοντας την εντολή SAY. Π.χ.

SAY “DVAA5 RAA6ZIXDVAA – RUH6VBAA SHEHUH CHQTAE6RIX”, A$ = “TSYX5FRAA”: SAY A$

Σε περίπτωση κάποιου λάθους στην χρήση, ακολουθεί ηχητική ειδοποίηση. Εάν η εντολή SAY χρησιμοποιηθεί σε συνδυασμό με την εντολή ]ERROR τότε θα πάρουμε στην οθόνη και το αντίστοιχο λάθος.

Η σύνταξη της είναι: SAY A $:]ERROR

Το ίδιο ηχητικό αποτέλεσμα με τα φωνήματα, μπορούμε να πάρουμε και με χρήση διφθόγγων όπως για παράδειγμα AY ως AYYX, OY ως AOYX, UL ως AXL κ.λπ.
Με την χρήση φωνημάτων μπορούμε να κάνουμε τον υπολογιστή μας να προφέρει λέξεις και φράσεις σε διάφορες γλώσσες. Κάθε γλώσσα χαρακτηρίζεται από τον δικό της αριθμό φωνημάτων, για παράδειγμα στην Πολωνική γλώσσα έχουμε 37. Εφόσον όπως είπαμε η συγκεκριμένη cartridge είναι κομμένη και ραμμένη κατά τα Πολωνικά πρότυπα λέξεων, θα ήταν χρήσιμο να συμβουλευόμαστε τον παρακάτω πίνακα με αντιστοίχηση ήχων και φωνημάτων, σύμφωνα πάντα με την εμπειρία και τους πειραματισμούς του Πολωνού προγραμματιστή. Προκειμένου, όπως καταλαβαίνουμε, να κάνουμε τον C64 να απαγγείλει ακόμη και ποίηση σε άπταιστα Ελληνικά δεν έχουμε παρά να πειραματιστούμε με τους ήχους.

Ας πειραματιστούμε με Πολωνικές λέξεις και προφορά, σύμφωνα με τον παρακάτω πίνακα:

Προφορά: Όπως στην λέξη: Φώνημα (συνδυασμοί):
a mama AA
e wesele AE
o kolor AO
u, ó kultura, dopóki W
uł, ół artykuł, wół UWX
łu, łó łuk, łódka WUX
i kino IY
y pytanie YX
ę się, gęś EHUH
ę tępić AEM
ę pręt AEN
ą wąwóz, piszą AOUH
ą rąbać AOM
ą pieniądze AON
b baran B
b babka, Rabka P
c cena TS
ci, ć ciało, miłość Q*
ci cisza Q*IY
cz czapka CH
d dom D
d radca, kładka, czad TQ
drz drzewo DZH8SH
dżuma J*
dźwigać DY*
dzi działka DY*IX, DY*
dzi dziwny, dzisiaj, ludzi DY*IY
dz władza, sadza DDZ7
dz przeprowadzka, rydz TS
dc zarządca T-TS
f fabryka F
g gość G
g próg K, QG
h, ch huk, chmura /H, /X
j jama Y
ij kij, bij IY5Y7
k kaszA, mak K
k akt, fakt KQ
l kalka, malarz LX
ł łapka, kładka W
m mowa M
n noc N
ni nic NXIY
ni koniec, świnia NIY, NX
ń koń, bańka NX
p puszcza, pismo O
p łapka, mapka PQ
r rok, pora RX, R
s słoń, pasmo S
rz, ż rzut, żaba ZH6, ZHZH, JH S
rz, sz, ż krzak, przód, szum, wąż SH
si siła, prosić SHIY
si, ś siano, kość, ściana SH
t tato, fakt T, QT
trz trzeba, patrz TSH, CH
w wizyta V
w wtorek, Wrocław F
z zupa, pazur Z
z pokaz, rozkosz S
zi, ź ziarno, źródło ZH3, ZH4
zi zima ZH3IY
ź paź SH

Τα αποτελέσματα των παραπάνω δοκιμών σύνθεσης ομιλίας με την βοήθεια του C64, αποδεικνύουν ότι ο τονισμός και η σωστή στίξη είναι θεμελιώδους σημασίας για τη σαφήνεια του λόγου. Είναι σημαντικές για την σωστή προφορά και τελική κατανόηση των ήχων. Κάθε γλώσσα όταν ομιλείται ζωντανά, περιέχει αρκετά μεγάλο όγκο πληροφοριών. Κάθε μεμονωμένη λέξη στην καθομιλουμένη αποκτά σημασία συνδυαζόμενη με άλλες. Αποκτά το τελικό της νόημα αφού ο ακροατής ακούσει ολόκληρη την πρόταση και με βάση την λογική ανάλυση του περιεχομένου. Η διαδικασία γίνεται αυτόματα μέσα στον εγκέφαλο. Δεν μπορώ να αναφερθώ παραπάνω στην φυσιολογία της λειτουργίας του εγκεφάλου και τις διαδικασίες που επιτελούνται, αφού είναι πολύ πέρα και εκτός της συγκεκριμένης παρουσίασης. Όποιος θελήσει να ασχοληθεί παραπάνω, το διαδίκτυο είναι γεμάτο σχετικές πληροφορίες και πλούσια βιβλιογραφία.

Να πούμε ένα τραγουδάκι;

Γιατί όχι; Άφησα το καλύτερο για το τέλος!

Το τραγούδι αναπαράγεται με την αλλαγή του τόνου και του χρονισμού των ήχων των φωνήεντων που περιέχονται στο γραπτό κείμενο. Για να αλλάξουμε τον τόνο (pitch), δίνουμε την εντολή ]ΡΙ xx ή POKE 39439,xx όπου xx είναι ένας αριθμός από 0 έως 255. Στην πράξη, το εύρος αυτών των τιμών είναι μικρότερο και κυμαίνεται μεταξύ του 25 και 100 (εκτός του συγκεκριμένου εύρους, ο ήχος ακούγεται αφύσικος). Όπως ανέφερα παραπάνω, με POKE μπορούμε να χρησιμοποιήσουμε και μεταβλητές τιμές – POKE 39439,K(Ι).
Για την αλλαγή χρονισμού, δεν έχουμε παρά να αυξομειώσουμε την σειρά των φωνημάτων ή και των φωνήεντων μέσα στον στίχο του τραγουδιού μας. Επειδή όμως όλα αυτά ακούγονται λίγο εξωπραγματικά, καλό είναι να χρησιμοποιήσω παραδείγματα.

Παράδειγμα (Α)

Πληκτρολογούμε:

]RE : ]KN 130,130 : ]SP 70 : ]PI 62 : SAY “LAA” : ]PI 52 : SAY : “LAA” : ]PI 46 : SAY “LAA” : ]PI 37 : SAY “LAAAAAAA”

Ας μην ξεχνάμε ότι οι σωστές τιμές, αυτές δηλαδή που «ακούγονται» καλύτερα στο αυτί μας, θα έρθουν ως αποτέλεσμα συνεχών δοκιμών σωστού και λάθους. Δυστυχώς, η ακρίβεια της ρύθμισης της συχνότητας είναι περιορισμένη (ειδικά για τους υψηλούς τόνους) και συνεπώς δεν είναι όλοι οι ήχοι τόσο “καθαροί”. Ακριβέστερος συντονισμός επιτυγχάνεται με αλλαγή της παραμέτρου xx με την εντολή ]KN xx, yy, αλλά έτσι το πρόγραμμα του «τραγουδιού» μας, γίνεται πιο περίπλοκο.
Αναγνωρίζοντας ότι ο Commodore 64 δεν μπορεί να ανταγωνιστεί φτασμένους τραγουδιστές (Δεν πιστεύω να σας είχε καλλιεργηθεί τέτοια εντύπωση; :mrgreen: ), μπορούμε να χρησιμοποιήσουμε τον ακόλουθο πίνακα:

Φωνήεντα a o i y u e
Φωνήματα AA AO IY YX W AE
Νότες
C 62 59 54 56 55 61
C# 60 57 52 55 52 59
D 57 54 50 53 50 56
D# 55 52 47 50 47 54
E 52 49 44 47 44 52
F 50 47 42 44 42 48
F# 48 45 40 42 40 47
G 46 43 39 41 38 45
G# 44 41 36 38 36 43
A 42 39 35 36 34 41
A# 40 37 32 34 32 39
H 39 36 31 33 31 38
C 37 35 29 31 29 36

ΠΡΟΣΟΧΗ:
Ο πίνακας ισχύει μόνο όταν ]ΚΝ 130, 130

Παράδειγμα (Β)

Πληκτρολογούμε το παρακάτω listing:

10 ]S.A. : ]KN 130, 130 : ]SP 70
20 ]PI 59 : SAY “DAOAO” : ]PI 56 : SAY “RXAEAE” : ]PI 44 : SAY “MI-YIY”
30 ]PI 48 : SAY “FAAAA” : ]PI 43 : SAY “SAOAOLX” : ]PI 42 : SAY “LXAAAA”
40 ]PI 31 : SAY “SIYIY” : ]PI 35 : SAY “DAOAO”

Παράδειγμα (Γ)

Πληκτρολογούμε το παρακάτω listing:

10 DIM X(15), A$(15)
20 FOR I=0 TO 15 : READ X(I), A$(I) : NEXT
30 ]RE : ]KN 130,130 : ]SP 60
40 FOR I=0 TO 15 : POKE 39439, X(I) : B$=A$(I) : SAY B$ ; NEXT
50 DATA 50, SZŁAAAA, 40, DZIEE, 34, WEEEE, 38, CZKAA, 38, DOOOO, 42, LAA
60 DATA 40, SEEE, 44, CZKAA, 47, DOOOO, 49, ZIEE, 54, LOOOO, 54, NEE, 47, GOOOO
70 DATA 35, AA, 41, HAAAA, 50, HAA

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

Όσο αφορά τον προγραμματισμό ομιλίας σε assembly, πρέπει να ξεκινούμε να εισάγουμε τους χαρακτήρες μας ASCII, στην διεύθυνση μνήμης $9A15, με τον επόμενο χαρακτήρα να ακολουθεί στην $9A16 κοκ. Το πλήθος των χαρακτήρων (συμπεριλαμβανομένων των κενών διαστημάτων) δεν μπορεί να υπερβαίνει την $9B. Εάν θέλουμε να εισάγουμε κείμενο προς αναπαραγωγή μέσω S.A.M, τότε δίνουμε πρώτα την εντολή JSR $9A03. Για την εκτέλεση και αναπαραγωγή μέσω RECITER, δίνουμε JSR $9A09. Αντίστοιχα και μέσω BASIC μπορούμε να δώσουμε τις ισοδύναμες τιμές στις POKE και SYS.

3. Σύνθεση μουσικής

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

Λίστα εντολών – Σύνταξη και χρήση

HELP – Συντόμευση: H(shift+E)
Δίνει την λίστα εντολών

SOUNDCLEAR – Συντόμευση: S(shift+O)
Διαγράφει όλες τις ρυθμίσεις που προηγήθηκαν (απενεργοποιεί τα κανάλια, μηδενίζει τις τιμές των συχνοτήτων κλπ) και εκκινεί το SID

VOLUME xx – Συντόμευση: V(shift+O) xx
Ορίζει την ένταση και για τις 3 γεννήτριες. H τιμή του xx μπορεί να αλλάξει μεταξύ 0 και 15. Π.χ. VOLUME 15 σημαίνει πλήρη ένταση.

OSCILLATE x,yy – Συντόμευση: O(shift+S) x,yy
Η εντολή καθορίζει τη συχνότητα yy για το κανάλι x. Η συχνότητα πρέπει να δίνεται απευθείας σε Hertz, για παράδειγμα η OSCILLATE 2, 1000 σημαίνει ότι η συχνότητα του δεύτερου καναλιού θα παραμείνει σταθερή στα 1000 Hz. Η μέγιστη τιμή συχνότητας είναι 3848 Hz. Αποτελεί εναλλακτική λύση για την TUNE.

TUNE x,A$ – Συντόμευση: T(shift+U) x,A$
Καθορίζει πια νότα και πως, θα παίξει κάθε κανάλι.
Για παράδειγμα: TUNE 3, “D4”: TUNE 1, “F # 5”, σημαίνει ότι το κανάλι 3 θα παίξει την D στην 4η οκτάβα, και το κανάλι 1 την F# στην 5η.

ENVELOPE x,a,d,s,r – Συντόμευση: E(shift+N) x,a,d,s,r
Καθορίζει έναν «φάκελο» με τα χαρακτηριστικά ενός ήχου που θα παραχθεί από συγκεκριμένο κανάλι x (x=1,2,3)
Οι υπόλοιπες παράμετροι παίρνουν τιμές από 0 έως 15 και αφορούν τα A=Attack, D=Decay, S=Sustain, R=Release, επιμέρους χαρακτηριστικά ήχου που περιγράφονται αναλυτικά μέσα στο εγχειρίδιο του υπολογιστή.

WAVE x,y (,zz) (,I) – Συντόμευση: W(shift+A) x,y (,zz) (,I)
Αυτή η εντολή χρησιμοποιείται για να καθορίσει το σχήμα της κυματομορφής του ήχου. Οι μεταβλητές είναι:
X: Ο αριθμός του καναλιού
Y: Ο αριθμός αυτός αντιστοιχεί σε είδη κυματομορφών και μπορεί να είναι: 1 – Τριγωνικός, 2 – Οδοντωτός, 3 – Ορθογώνιος, Γεννήτρια Λευκού Θορύβου.
Η μεταβλητή (,zz) σε ελεύθερη μετάφραση από τα Πολωνικά προς Αγγλικά μας δίνει ‘rectangular pulse fill factor’ . Στα Ελληνικά δεν μπορώ να σκεφτώ την μετάφραση. Αναγράφεται πάντα με ακέραιο αριθμό (εκφράζει ποσοστό) και κυμαίνεται από 0 έως 100 (%).
Η επόμενη παράμετρος που εικονίζεται μέσα στην παρένθεση με τον αριθμό 1 (,1) έχει σχέση με τον συγχρονισμό των καναλιών ήχου, την προσωρινή παύση κάποιου από αυτά κλπ.
Μπορεί να πάρει τιμές: ‘OFF’ (όταν θέλουμε να σιγήσουμε προσωρινά ένα συγκεκριμένο κανάλι ήχου), ‘S’ (για να συγχρονίσουμε κανάλια) και ‘B’ (αντιστοιχεί στο είδος κυματομορφής με αριθμούς 1,2,3 όπως περιέγραψα παραπάνω. Έχει να κάνει με τον συνδυασμό τόσο μεταξύ τους όσο και μεταξύ των καναλιών ήχου).
Παραδείγματα χρήσης:
WAVE 2,2 – Το κανάλι 2 παράγει ήχο οδοντωτού παλμού.
WAVE 1,3,60 – Το κανάλι 1 παράγει ορθογώνιο παλμό με fill factor 60(%).
WAVE 3, 1, OFF – Το κανάλι 3 παράγει τρίγωνο παλμό που όμως μπαίνει σε προσωρινή σίγαση (OFF).
WAVE 1, 3, 40, S – Το κανάλι 1 παράγει ήχο ορθογώνιου παλμού, με fill factor 40(%), το οποίο συγχρονίζεται με εκείνον του καναλιού 3 (παράμετρος ‘S’).

PLAY x,yy (1) – Συντόμευση: P(shift+L) x,yy (1)
Ενεργοποιεί / Απενεργοποιεί το αντίστοιχο κανάλι X (x=1,2,3)
Η δεύτερη παράμετρος YY μπορεί να είναι αριθμός ή ON/OFF. Αφορά χρόνο. Αν δώσουμε στη δεύτερη παράμετρο μια αριθμητική τιμή το κανάλι X θα ενεργοποιηθεί για το χρονικό διάστημα που ορίζεται από αυτήν την τιμή. Η μέγιστη τιμή της παραμέτρου YY είναι 65535 και σε πραγματικό χρόνο αντιστοιχεί σε περίπου 46 δευτερόλεπτα. Εάν η εντολή PLAY χρησιμοποιηθεί με κάποιον αριθμό, το πρόγραμμα που είναι αποθηκευμένο και τρέχει στην BASIC, σταματά μέχρι να τελειώσει ο ήχος από το κανάλι που ορίζει αντίστοιχα η X (συμπληρώνοντας τον χρόνο που καθορίζεται από αυτήν την παράμετρο) και συνεχίζεται μετά.

Μια εναλλακτική είναι να χρησιμοποιήσουμε την παράμετρο με διακόπτη ON ή OFF. Η εντολή PLAY x,ON ενεργοποιεί το κανάλι X για απεριόριστο χρόνο, αλλά εδώ το πρόγραμμα που ήδη εκτελείται σε BASIC δεν περιμένει να απενεργοποιηθεί για να τρέξει. Έτσι επιτρέπεται η ταυτόχρονη εκτέλεση ενός προγράμματος με την αναπαραγωγή ήχων. Αντίστοιχα την PLAY x,OFF ακολουθεί η πλήρης απενεργοποίηση του καναλιού X.
Σύνταξη και παραδείγματα:
PLAY: PLAY 2,5000 : PLAY 3,ON

FILTER 1,xx,yy,x(,y)(,z) – Συντόμευση: F(shift+I) 1,xx,yy,x(,y)(,z)
Ενεργοποιεί τα αντίστοιχα φίλτρα για κάθε κανάλι. Το είδος του φίλτρου ορίζεται από την πρώτη παράμετρο (αριθμός 1) και αναλυτικά έχουμε:
‘1’ ισούται με:
H – high-pass,
B – band pass,
T – low-pass,
N – middle-range
‘XX’: Καθορίζει την συχνότητα ορίου (border frequency) του Hercach filter (Εύρος από 30 μέχρι 11800)
‘YY’: Καθορίζει τον συντονισμό (κέρδος απόκρισης συχνότητας – frequency response gain) στη συχνότητα ορίου που καθορίζεται από την παράμετρο ‘XX’. Η ‘YY’ παίρνει τιμές από 0 (χωρίς συντονισμό) έως 15 (πλήρης συντονισμός).
x,y … – Μπορεί να αποτελούνται από 4 ψηφία που χωρίζονται με κόμματα (ο αριθμός των ψηφίων δεν μπορεί να υπερβαίνει, αλλά δύναται να είναι μικρότερος από 4 ). Οι αριθμοί αντιστοιχούν στα ηχητικά κανάλια των οποίων οι κυματομορφές θα φιλτραριστούν. Ο αριθμός 4 σημαίνει «είσοδο ήχου».
Παραδείγματα χρήσης της εντολής FILTER:
FILTER H,2000,0,1,2 Οι κυματομορφές που παράγονται από τις γεννήτριες (κανάλια) 1 και 2 θα φιλτραριστούν μέσω high pass, με συχνότητα 2000 Hz.
FILTER T,1000,1,3,4 Οι κυματομορφές που παράγονται από τη γεννήτρια (κανάλια) 1, 3 μαζί με ένα ηχητικό σήμα που τροφοδοτείται από έξω (τροφοδότηση μέσω SID input?), φιλτράρονται μέσω low pass φίλτρου και με όριο τα 1000 Hz.

Ενδεικτικά listings ως παραδείγματα χρήσης των εντολών:
(Α)
10 SOUNDCLEAR : VOLUME 15
20 ENVELOPE 1, 0, 15, 0 : ENVELOPE 3, 0, 0, 15, 0
30 WAVE 1, 1, R : WAVE 3, 3, 30
40 PLAY 1, ON : PLAY 3, ON
50 FOR I=1 TO 3000 STEP 100 : FOR X=1 TO 3000 STEP 50
60 OSCILLATE 3, X : NEXT : OSCILLATE 1, I : NEXT
70 SOUNDCLEAR

(Β)
10 SOUNDCLEAR : VOLUME 15
20 ENVELOPE 1, 0, 0, 15, 0
30 WAVE 1, 3, 40, S : WAVE 3, 1, OFF
40 OSCILLATE 3, 250
50 PLAY 1, ON : PLAY 3, ON
60 FOR I=100 TO 3000 STEP 3
70 OSCILLATE 1, I
80 NEXT
90 SOUNDCLEAR

Σημείωση:
Η συχνότητα στην εντολή OSCILLATE και ο καθορισμός ορθογώνιου παλμού στην εντολή WAVE δεν χρειάζεται να είναι ακέραιοι μα και δεκαδικοί αριθμοί. Η μέγιστη ακρίβεια αντικατοπτρίζεται στο πλήθος των δεκαδικών ψηφίων μετά την υποδιαστολή. Π.χ. OSCILLATE 2, 432,7

Συνοψίζοντας…

Τελειώνοντας την μακροσκελή μου παρουσίαση, θα ήθελα να ευχαριστήσω όσους φίλους κατάφεραν να την αναγνώσουν ίσαμε εδώ και να ζητήσω ένα μικρό συγγνώμη για την κούραση που ίσως σας προκάλεσα. Όπως συμπεραίνουμε η άγνωστη BLACK BOX (V8) cartridge θα μπορούσε ενδεχομένως να γνωρίσει σημαντικές δόξες εάν η εσωστρέφεια του δημιουργού της δεν την περιόριζε στα στεγανά των συνόρων της πατρίδας του. Ποιος ξέρει; Σίγουρα θα είχε τους λόγους του.
Εγώ πάλι, ως απλός οπαδός και χρήστης του C64 θα αρκεστώ σε ένα απλό: «Κάλιο αργά παρά ποτέ», μιας που δοθείσας της ευκαιρίας που μου πρόσφερε ο καλός μου φίλος Mr Wegi, με την ελεύθερη διάθεση όλου του σχετικού υλικού στην σελίδα του, μπόρεσα τελικά να την φτιάξω, να την γνωρίσω, να την δουλέψω και να την χαρώ εξερευνώντας και αποκαλύπτοντας όλες τις κρυφές της χάρες.

Η χαρά μου δε ήταν τόσο μεγάλη που αποφάσισα για άλλη μια φορά να την μοιραστώ εδώ, μαζί σας. Ελπίζω να άξιζε τον κόπο.

Over and Out!…

geoanas

I am an avid collector of retro hardware. I collect anything retro ... from calculators, to real arcade boards and home computers. Being a tech/craftsman (self taught by experience), I like tinkering with electronics. I believe that hardware engineering is a kind of an art form. I don't want to miss any chance to grab my trusty screwdriver and my precious soldering iron just to repair, improve or spice up with a ‘mod-flavor’ almost anything. I was familiar with retro scene world when...wasn’t retro at all (!)...

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.