Η μία κατεύθυνση είναι εύκολη: locate 1,25:print. Αλλά πώς μπορώ - χωρίς Poke και ιδανικά χωρίς Call - να κάνω κύλιση προς τα πάνω ή ακόμα και προς τα πλάγια (γίνεται το τελευταίο καν;);
Το demo μου έχει ήδη προχωρήσει αρκετά με 8 εφέ αυτή τη στιγμή σε «Basic Pur»
Μπορείτε να χρησιμοποιήσετε τον κωδικό ελέγχου (control code) 11 για να μετακινήσετε τον κέρσορα προς τα πάνω. Αν αυτό συμβεί στα όρια ενός παραθύρου, το περιεχόμενο του παραθύρου θα κάνει (μαλακή) κύλιση. Αν δεν έχετε ορίσει κάποιο παράθυρο, θα κάνει κύλιση σε ολόκληρη την οθόνη εφόσον ο κέρσοράς σας βρίσκεται στην πρώτη γραμμή της οθόνης.
Η πλευρική μαλακή κύλιση (από όσο ξέρω) δεν λειτουργεί στη BASIC, αλλά θα μπορούσατε να χρησιμοποιήσετε κύλιση μέσω υλικού (hardware scrolling) χρησιμοποιώντας τους καταχωρητές CRTC με εντολές OUT.
Οι εντολές εξόδου (Out commands) προς τους καταχωρητές του CRTC είναι γενικά ο τρόπος με τον οποίο γίνεται. Δεν καταλαβαίνω γιατί αυτό να μην θεωρείται «καθαρή Basic».
Είναι απλά μια «κολλησιά» μου
Ή τι γίνεται με τα Peek και Poke;
Στην πραγματικότητα κι αυτά Basic είναι — και έτσι εξηγούνται τα sprites κ.λπ. στον C64.
Αλλά αυτό ακριβώς είναι το θέμα μου — να δείξω τι είναι δυνατό χωρίς «αμιγώς εσωτερικές» ρουτίνες — δηλαδή τα πράγματα στα οποία οι προγραμματιστές δίνουν άμεση πρόσβαση μέσω εντολών.
Το Out είναι πραγματικά μια ενδιάμεση περίπτωση — καθώς είναι ένα μέσο επικοινωνίας.
Το Call είναι μια άμεση κλήση μιας εσωτερικής ρουτίνας. Δυστυχώς, μέχρι στιγμής, δεν μπορώ να το αποφύγω εντελώς…
Στον C64 μπορείς να κάνεις poke στους καταχωρητές. Στον CPC, ένα poke θα αλλάξει μόνο δεδομένα στη μνήμη RAM, αλλά δεν θα αλλάξει κανέναν καταχωρητή. Για αυτό το σκοπό χρησιμοποιείς την εντολή OUT.
Σίγουρα, παραμένει εντολή της BASIC, αλλά χρησιμοποιώντας την OUT πειράζεις το υλικό (hardware) απευθείας και πρέπει να καταλαβαίνεις τι γίνεται, καθώς η BASIC δεν θα αντισταθμίσει τις ενέργειές σου. Για παράδειγμα, η θέση της οθόνης θα αλλάξει και η εντολή LOCATE 1,1 θα έχει διαφορετική θέση στην οθόνη αφού κάνεις scroll μέσω της OUT. Αυτό εννοούσα.
και μια τελευταία γρήγορη συμβουλή: μπορείς να πατήσεις CONTROL+K στο πληκτρολόγιο για να εισαγάγεις τον κωδικό ελέγχου 11 μέσα σε ένα String. Αντί για print chr$(11), θα έχεις μετά print “↑” στον κώδικά σου, το οποίο είναι λίγο πιο γρήγορο από το chr$.
Aυτό πιθανότατα θα μπει στην τελική έκδοση. Προγραμματίζω στο PC σε πρόγραμμα επεξεργασίας κειμένου - εκεί είναι λίγο πιο δύσκολο.
Αλλά αυτά που έχω φτιάξει μέχρι στιγμής φαίνονται ενδιαφέροντα