Βασικές Hovercards

Λοιπόοοον, μετά τα Firmware Hovercards και κατόπιν πρότασης του @Devlin, προχώρησα και υλοποίησα παρόμοια hovercards για τις λέξεις-κλειδιά της BASIC!

Λόγω της ομοιότητάς τους με τη φυσική γλώσσα, έπρεπε να τα περιορίσω μόνο σε blocks κώδικα:

10 MODE 1: BORDER 0: CLS
20 INK 0, 0: INK 1, 26: INK 2, 6
30 ENV 1, 5, 1, 5: SOUND 1, 239, 50, 12, 1
40 ORIGIN 320, 200: DEG
50 FOR a = 0 TO 345 STEP 15
60   CALL &BD19: REM Sync to vertical flyback
70   DRAWR 100 * COS(a), 80 * SIN(a), 1
80   MOVER -100 * COS(a), -80 * SIN(a)
90 NEXT a
100 LOCATE 1, 24: PRINT "Press any key to reset palette...";
110 CALL &BB18: REM Wait for keypress
120 CALL &BC02: REM Reset inks to defaults

Τα-ντάααα!

Για να λειτουργήσει αυτό, όμως, έπρεπε επίσης να βεβαιωθώ ότι δουλεύει μόνο σε blocks κώδικα BASIC. Και παρόλο που έχω προσπαθήσει να κάνω το σύστημα του φόρουμ να αναγνωρίζει αυτόματα τη BASIC σε προμορφοποιημένο κείμενο, αυτό δεν λειτουργεί πάντα (θα πρέπει να το τακτοποιήσω κάποια στιγμή). Οπότε, βεβαιώσου ότι επιλέγεις BASIC όταν εισάγεις ένα πρόγραμμα BASIC:

Αυτά κι αυτά.

Τα σχόλιά σας είναι πάντα ευπρόσδεκτα!

Υ.Γ.: Αυτό ήταν πολύ πιο εύκολο να γίνει από όσο αρχικά νόμιζα, χάρη στη δουλειά που είχε ήδη γίνει στον FW parser και στα blocks κώδικα BASIC. Παρόλα αυτά, το μεγαλύτερο εμπόδιο ήταν το scraping των εντολών της BASIC από το ίδιο το wiki, λόγω της προστασίας anti-bot :joy:

Υ.Γ.2: Πηγές που χρησιμοποιήθηκαν για τη σύνταξη του οδηγού της BASIC:

  1. Locomotive BASIC Reference Manual (Χρησιμοποιήθηκε για την ακριβή σύνταξη των εντολών, τις παρενθέσεις παραμέτρων και τις διαφορές μεταξύ εκδόσεων (BASIC 1.0 vs 1.1).
  2. AMSDOS Firmware & Reference Manual (Soft 158): Χρησιμοποιήθηκε για τις 13 ενσωματωμένες εντολές δίσκου Resident System Extension (|), την αλλαγή drive και τις παραμέτρους σύνταξης.
  3. CPCWiki Locomotive BASIC Category: Τεκμηρίωση και πίνακες ROM token που χρησιμοποιήθηκαν για την επαλήθευση εντολών ειδικών περιπτώσεων (όπως COPYCHR$ και WINDOW SWAP) και τις αλληλεπιδράσεις με τους καταχωρητές υλικού (hardware registers).

…τροφοδοτήθηκαν στο Gemini, το οποίο έβγαλε το json που χρειαζόταν για τον parser.

Aπολύτως εξαιρετικό!

Αναρωτιέμαι όμως… είναι δυνατόν με κάποιον τρόπο να εμφανίζονται οι παράμετροι για τις συναρτήσεις της BASIC όταν περνάς το ποντίκι από πάνω τους;

Το ENV είναι ένα καλό παράδειγμα εντολής με διάφορες παραμέτρους.

Nαι, αυτό είναι εφικτό. Όχι μόνο το ENV αλλά και τα ENT και SOUND. Υπάρχουν άλλες εντολές που παίρνουν πολλαπλές υποπαραμέτρους;

Σχεδιάζω να προσθέσω μια αναλυτική κατανομή παραμέτρων στα hovercards για αυτές και όποιες άλλες χρειαστούμε.

Οκ, νομίζω ότι το ολοκλήρωσα. Επέκτεινα τις ακόλουθες εντολές:

  1. AFTER: Καθυστέρηση, δείκτης χρονοδιακόπτη (0–3) και αριθμός γραμμής προορισμού.
  2. BORDER: Κύριο χρώμα και εναλλακτικό χρώμα που αναβοσβήνει.
  3. ENT: Αριθμός διαμόρφωσης τονικότητας/envelope (1–15), πλήθος βημάτων τονικότητας, μέγεθος βήματος delta τονικότητας και διάρκεια παύσης.
  4. ENV: Αριθμός διαμόρφωσης έντασης/envelope (1–15), πλήθος βημάτων έντασης, μέγεθος βήματος delta έντασης, διάρκεια παύσης και μορφή/περίοδος υλικού PSG.
  5. EVERY: Διάστημα επανάληψης, δείκτης χρονοδιακόπτη (0–3) και αριθμός γραμμής προορισμού.
  6. INK: Λογικός αριθμός γραφίδας (pen), φυσικό χρώμα 1 και χρώμα που αναβοσβήνει 2.
  7. KEY DEF: Αριθμός πλήκτρου (0–79), εναλλαγή επανάληψης και κωδικοί χαρακτήρων χωρίς Shift/με Shift/με Control.
  8. ORIGIN: Μετατοπίσεις συντεταγμένων (x, y) και όρια αποκοπής περιοχής προβολής/viewport (αριστερά, δεξιά, κάτω, πάνω).
  9. SOUND: Μάσκα bit καναλιού, περίοδος τονικότητας, διάρκεια/συνάντηση (rendezvous), ένταση, διαμόρφωση έντασης, διαμόρφωση τόνου και περίοδος θορύβου.
  10. SPEED INK: Διάρκεια φάσης 1 και φάσης 2 της αναλαμπής.
  11. SPEED KEY: Καθυστέρηση έναρξης και ταχύτητα επανάληψης.
  12. SYMBOL: Κωδικός χαρακτήρα προορισμού (240–255) και τα 8 bytes του bitmapped χαρακτήρα ανά γραμμή.
  13. WINDOW: Αριθμός ροής (#0–#7) και ορθογώνιες συντεταγμένες παραθύρου (αριστερά, δεξιά, πάνω, κάτω).

Επίσης, περιόρισα τη συνάρτηση αναλυτή (parser) που δημιουργεί τα hovercards, ώστε να μην τα δημιουργεί μετά από δηλώσεις REM, καθώς αυτές μπορεί να περιέχουν φυσική γλώσσα. Ας το δοκιμάσουμε:

10 MODE 1: BORDER 0, 1: SPEED INK 15, 15
20 INK 0, 0: INK 1, 26: INK 2, 6: INK 3, 15
30 REM Notice that MODE, BORDER, and SOUND inside this comment stay unlinked
40 SPEED KEY 30, 2: WINDOW #1, 2, 38, 2, 8: CLS #1
50 SYMBOL 240, 24, 60, 126, 255, 255, 126, 60, 24
60 ENV 1, 5, 1, 5: ENT 1, 10, -5, 2
70 SOUND 1, 239, 40, 12, 1, 1
80 ORIGIN 320, 200: DEG
90 EVERY 150, 1 GOSUB 200
100 PRINT #1, "Custom character: "; CHR$(240)
110 FOR a = 0 TO 360 STEP 45
120   DRAWR 60 * COS(a), 40 * SIN(a), 2
130 NEXT a
140 CALL &BB18: REM KEY and WAIT checks ignored here
150 END
200 PRINT #1, "*TICK* ";: RETURN

Πώς σου φαίνεται, @ervin ; :slight_smile:

Aυτά είναι σοβαρά φοβερά πράγματα. Μπορεί να χρειαστεί να χρησιμοποιήσω το CPC wiki για να γράψω τον κώδικά μου την επόμενη φορά, καθώς θα είναι πιο γρήγορο από το να ψάχνω στο εγχειρίδιο.

Ευχαριστώ φίλε, να ‘σαι καλά! Κι εμένα μου αρέσει έτσι όπως βγήκε, καλύτερο απ’ ό,τι περίμενα. Είχα βέβαια μεγάλη βοήθεια από το Gemini που τα οργάνωσε όλα στην εντέλεια, αλλιώς θα έπαιρνε αιώνες να συγκεντρωθούν…

Λες να φτιάξω έναν BASIC editor βασισμένο σε αυτό, κάπου στο φόρουμ ή στο wiki; Ίσως θα μπορούσα να τον φτιάξω ακόμα και αυτόνομο (stand-alone)· υπάρχουν έτοιμοι code editors που θα μπορούσα να χρησιμοποιήσω αντί να ανακαλύπτω ξανά τον τροχό, ενώ η βασική δομή υπάρχει ήδη! Θα μπορούσε να υποστηρίζει μέχρι και αυτόματη συμπλήρωση (auto-complete), ενδεχομένως εξαγωγή σε αρχείο dsk, ΑΛΛΑ και εκτέλεση στον ενσωματωμένο RVMPlayer?!

Ίσως ο δημιουργός αυτού να μπορούσε να βοηθήσει;

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

Πρόσεχε μήπως η προστασία σου κατά των bot σε κλειδώσει έξω από τον ίδιο σου τον διακομιστή καμιά μέρα, με την ΤΝ να σου λέει «:robot: :smiling_face_with_sunglasses: Hasta la vista, baby». :sweat_smile:

Ngl, ήταν πολύ αμήχανη στιγμή αυτή😂