Οι εφαρμογές μου MSX

Έμαθα να προγραμματίζω στη βασική κατά τη διάρκεια μιας εξωσχολικής δραστηριότητας στο δημοτικό μου σχολείο (ARCE) τα τελευταία δύο χρόνια με τον Χουάν Κάρλος, έναν δάσκαλο που κατάγονταν από τον Σαλβαδόρ Μπατλ.

Αργότερα αγόρασα έναν υπολογιστή MSX (ένα Sony Hit Bit 501P (Sony HB-501P)) και, μαζί με έναν φίλο, εξερευνήσαμε τις δυνατότητες του μηχανήματος, περνώντας ολόκληρα απογεύματα πληκτρολογώντας προγράμματα που ήρθαν γραμμένα σε χαρτί σε κάποια περιοδικά MSX της εποχής.

Το επόμενο βήμα, μετά την ανάληψη της πρόκλησης από τον καθηγητή μαθηματικών μου, ήταν να μάθω να προγραμματίζω σε γλώσσα συνελεύσεων MSX (επεξεργαστής Z-80).


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

  • Φλάουτο: Ένα πρόγραμμα για ένα διαγωνισμό στο γυμνάσιο μου (I.B. Gabriel Ferrater), όταν ήμουν στο πρώτο έτος του BUP (στη BASIC).
  • Σχεδιασμός: Ένας γραφίστας, για να σχεδιάσει τα γραφικά για τα παιχνίδια που επρόκειτο να προγραμματίσει στο μέλλον (στο Assembler Z-80).
  • Zodia: Ένα παιχνίδι διαστημοπλοίου, με κάθετη κύλιση που περιλαμβάνεται (στο Assembler Z-80).
  • Habla: Μια εφαρμογή κειμένου-προς-ομιλία για τα ισπανικά. (Ένας συνδυασμός του Z-80 Assembler και του BASIC).
  • Tetris: Η δική μου εκδοχή του δημοφιλούς παιχνιδιού Tetris. (στο Assembler Z-80).
  • Ristu: Ο σπόρος αυτού που υποτίθεται ότι ήταν ένα παιχνίδι λαβύρινθου, εμπνευσμένο από το The Maze of Galious του Konami. Ξέμεινα από μνήμη... (στο Assembler Z-80).
  • Μοιράζομαι επίσης τους πηγαίους κωδικούς των εφαρμογών στο Assembler, μαζί με το Hisoft assembler που αγόρασα πίσω στην ημέρα, και το οποίο μοιράζομαι ανάμεσα στα αρχεία.cas στο download (δεν λειτουργούν όλα).


Θα μοιραστώ επίσης μερικές τροποποιήσεις που έχω κάνει στην εφαρμογή διεπαφής γραμμής εντολών wav2cas, που έχει προγραμματιστεί από τον Βίνσεντ βαν Νταμ.

Υπάρχει τώρα μια προαιρετική λειτουργία για την απόρριψη του σήματος που επεξεργάζεται το wav2cas σε ένα csv, μεταξύ άλλων νέων χαρακτηριστικών.

Θα μοιραστώ επίσης μια σειρά συμπληρωματικών σεναρίων για να δουλέψω με το.cas, ή με το νέο.csv των δειγμάτων σήματος wav2cas:

  • histogram.py : Σενάριο για την απόκτηση τιμών ιστογράμματος από δείγματα.
  • .
  • split_msx_tapes_into_singular_files.py : Διαχωρίζει αρχεία.cas σε αρχεία.cas που περιέχουν μεμονωμένα αρχεία. Χειρίζεται τύπους αρχείων caddir, συν αρχεία πηγαίου κώδικα asm (HiSoft Assembler).
  • .
  • extract_msx_sources.py : Σας επιτρέπει να εξαγάγετε ένα αρχείο.txt με κάθε αρχείο πηγής από ένα αρχείο.cas (ascii και asm). Δεν λειτουργεί πολύ καλά, αλλά μπορεί να είναι μια αρχή.
  • .

Φλάουτο (1987)

Watch vdeo (στα Αγγλικά)

Γραφίστας (1989)

Watch vdeo (στα Αγγλικά)

Ζόντια (1987-1989)

Watch vdeo (στα Αγγλικά)

Συνθεσάιζερ (1991)

Watch vdeo (στα Αγγλικά)

Ρίστου (1990-1992)

Watch vdeo (στα Αγγλικά)

Συνεδρία με τον συναρμολογητή

Watch vdeo (στα Αγγλικά)

Περιγραφή προγράμματος

image
image

Το πρόγραμμα Flauta δημιουργήθηκε για να συμμετάσχει σε διαγωνισμό λογισμικού στο γυμνάσιο μου (I.B. Gabriel Ferrater), όταν ήμουν στην πρώτη χρονιά του γυμνασίου.

Προορίζεται να είναι μια εφαρμογή για την αναθεώρηση της θέσης του δακτύλου για την αναπαραγωγή κάθε νότας σε ένα φλάουτο.

Το πρόγραμμα είναι μια δικαιολογία για να εμφανίσετε μια διεπαφή χρήστη σε γραφικό τρόπο λειτουργίας.

Μπορείτε να δείτε ένα βίντεο του προγράμματος να λειτουργεί Επίδειξη βίντεο

image
image

Η ιδέα του γραφίστα (Disea) ήταν να έχει ένα εργαλείο για να μπορεί να σχεδιάζει σωστά τα γραφικά για τα παιχνίδια που επρόκειτο να προγραμματίσει στο μέλλον.

Είναι προγραμματισμένο στο Assembler Z-80.

Τελείωσα τον προγραμματισμό του μετά από δύο εντατικούς μήνες ανάπτυξης.

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

Με αυτό, θα μπορούσε να σχεδιάσει οθόνες παρουσίασης, sprites, και χαρακτήρες παιχνίδι.

Μπορείτε να δείτε ένα βίντεο του προγράμματος να λειτουργεί Επίδειξη βίντεο


Υπάρχει επίσης ένα demo που δείχνει τα καλύτερα στιγμιότυπα και γραφικά που σχεδίασα με αυτό: Βίντεο από τις καλύτερες οθόνες

image
image

Προγραμμάτισα το παιχνίδι διαστημοπλοίων Ζόντια εμπνευσμένο από τα παιχνίδια διαστημοπλοίων κύλισης του Κονάμι.

Είναι προγραμματισμένο στο Assembler Z-80.

Είναι αφιερωμένο στον καθηγητή μαθηματικών μου (J. R. M. - José Ramn Molina), επειδή μου έδωσε την ιδέα της μάθησης του συναρμολογητή.

Το παιχνίδι είναι στο SCREEN 1, με ελαφρύτερα γραφικά από το SCREEN 2.


Να σου δώσω μια ιδέα για το πως ήταν τα πράγματα...

Προφανώς, κάποια στιγμή το σκορ που πέτυχε ο παίκτης έπρεπε να τυπωθεί...

Οι αριθμοί ήταν είτε ισοδύναμοι με uint8 ή uint16.

Για τον πίνακα αποτελεσμάτων, επέλεξα τον τύπο uint16 (δεν μπορούσε να υπερβεί το 65535)

Για να τυπωθούν τα ψηφία, ο αριθμός έπρεπε να μετατραπεί σε Base-10, κάτι που έκανα διαιρώντας με 10 n φορές, παίρνοντας τα moduli και quotients.

Αλλά... το Z-80 δεν είχε οδηγίες στο Assembler για πολλαπλασιασμό ή διαίρεση!! Και τώρα τι;

Λοιπόν, είναι εύκολο... διαιρούμε, αφαιρώντας τον διαιρέτη από το μέρισμα Ν φορές, και αυξάνουμε το πηλίκο εφ' όσον το αποτέλεσμα δεν υπερχειλίζει...

Τι κακόγουστο!

Λοιπόν, έτσι ήταν τα πράγματα...


Υπάρχει ένα βίντεο που δείχνει την πλήρη κύλιση (με κάποια σφάλματα): Πλήρες βίντεο κύλισης


Μπορείτε να δείτε ένα βίντεο του προγράμματος να λειτουργεί Επίδειξη βίντεο

image

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

Ο στόχος ήταν να προγραμματιστεί ένα synthesizer προσαρμοσμένο στο τσιπ ήχου MSX (με τρεις φωνές, και την εφαρμογή εφέ αντήχησης (ταχεία αλλαγή (χειροκίνητα) της εκπεμπόμενης συχνότητας για κάθε πιεσμένη νότα), και απενεργοποίηση της σημείωσης όταν κυκλοφόρησε το κλειδί.

Η κατάσταση των τριών πλήκτρων συνθεσάιζερ που πιέζονται ταυτόχρονα (οι τρεις φωνές του τσιπ) θυμήθηκαν.

Ήθελα επίσης να κάνω χρήση των συχνοτήτων που σχετίζονται με κάθε νότα, τις οποίες βρήκα σκληροκωδικοποιημένες σε μια περιοχή του MSX ROM κατά τη διάρκεια μιας αναζήτησης.

Για να εκτελέσω την αναζήτηση, προχώρησα, απλά γνωρίζοντας τη συχνότητα της σημείωσης A ((tuning fork) 400 Hz, και εφαρμόζοντας ένα συντελεστή ρίζας-δώδεκα του 2 (2 (1/12))) (μία οκτάβα, δώδεκα ημιτόνους)).

Και στη συνέχεια ψάχνει για τα αντίστοιχα στοιχεία στη ROM, με αριθμούς τύπου uint16.


Μπορείτε να δείτε ένα βίντεο του προγράμματος να λειτουργεί Επίδειξη βίντεο

image

Κατά τη διάρκεια του καλοκαιριού μεταξύ του γυμνασίου μου και του πρώτου έτους της Teleco (1991), εργάστηκα εντατικά ως σερβιτόρος στο Bar Argente's στο Salou.

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

Μετά από περισσότερα από 60 παιχνίδια εκείνου του παιχνιδιού, έγινα ειδικός, και μου άρεσε να βρίσκω εκείνο το παιχνίδι όταν η μοίρα με πήγε τυχαία σε ένα μέρος όπου υπήρχαν μηχανές arcade.


Το 1992, αποφάσισα να προγραμματίσω τη δική μου εκδοχή του Tetris, στο Assembler Z-80 και στο χρόνο ρεκόρ των τριών ημερών.

Εκείνη την εποχή, είχα ήδη φλερτάρει λίγο με την ψηφιοποίηση των ήχων (από την κασέτα MSX), και στην οθόνη αναμονής του παιχνιδιού, ένα τραγούδι παίζεται μέσω του ηχείου. (ο εξομοιωτής openMSX μιμείται τέλεια αυτή τη λεπτομέρεια).


Μπορείτε να δείτε ένα βίντεο του προγράμματος να λειτουργεί Επίδειξη βίντεο

image

Δεν θυμάμαι πότε βρήκα για πρώτη φορά την πιθανότητα να ψηφιοποιήσω ήχους από την κασέτα του MSX.

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

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


Από μια τηλεοπτική σειρά που μου άρεσε, πήρα την ιδέα ότι ένας υπολογιστής θα μπορούσε να "προφέρει" μια πρόταση που επέλεξε ο χρήστης.

Έτσι, με το νέο παιχνίδι της ψηφιοποίησης, ξεκίνησα να αποκτήσω όλα τα φωνήματα ψηφιοποιώντας τη δική μου φωνή.

Το επόμενο βήμα θα ήταν να περάσουμε από τα γράμματα μιας πρότασης, να τη χωρίσουμε σε φωνήματα και να εκπέμψουμε κάθε φωνήμα με τη σειρά του.

Ναι, λίγο κακόγουστο... αλλά δεν έδωσε άλλα...

Προγραμμάτισα τους κανόνες της ισπανικής φωνητικής σε μια εφαρμογή Assembler Z-80, με την αλληλεπίδραση με το χρήστη ζητώντας την πρόταση στη BASIC.


Με τον εξομοιωτή openMSX μπορείτε να εξομοιώσετε τέλεια την εκτέλεση αυτού του μικρού προγράμματος.


Μπορείτε να δείτε ένα βίντεο του προγράμματος να λειτουργεί Επίδειξη βίντεο

image

Αφού πέρασα αμέτρητες ώρες παίζοντας το The Maze of Galious, αποφάσισα να δημιουργήσω ένα παιχνίδι λαβύρινθου εμπνευσμένο από αυτό, και με μια πολύ παρόμοια οπτική εμφάνιση (με τους περιορισμούς μου).

Το πρόγραμμα ήταν και πάλι στο Assembler Z-80.

Δημιούργησα τις οθόνες (σε μια μήτρα οθόνης 14 x 12) βασισμένη σε μπλοκ χαρακτήρων 4x4 που συνδυάστηκαν σαν παζλ.

Έτσι, μια οθόνη καταλάμβανε 5 x 8 = 40 bytes, αν και έπρεπε να προστεθεί μια εργασία σταθερής μνήμης για να καθορίσει τα 4 x 4 μπλοκ.


Διέσωσα αρκετές υλοποιήσεις για να μετακινήσω τον χαρακτήρα σε όλο τον κόσμο, αν και ο πιο ολοκληρωμένος ("PERFEC"), δεν μπορούσα να το κάνω να δουλέψει στον εξομοιωτή.

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

Θυμάμαι ότι μια μέρα έπρεπε να κάνω το τέχνασμα της μετακίνησης της περιοχής μνήμης BASIC ψηλότερα (με μερικά υπέροχα pokes που δεν θυμάμαι πια).

Και χωρίς αυτά, δεν υπάρχει τρόπος να γίνει αυτή η υλοποίηση να λειτουργήσει (αν και ο πηγαίος κώδικας εξήχθη σωστά στο.cas).


Μπορείτε να δείτε ένα βίντεο του προγράμματος να λειτουργεί Επίδειξη βίντεο

image

Ο συναρμολογητής είναι ένα θεμελιώδες μέρος της ανάπτυξης στο Assembler Z-80.

Αγόρασα το devpack από το hisoft και το εκμεταλλεύτηκα στο έπακρο, κάνοντας εντατική χρήση του.

Υπήρχε επίσης ένα μόνιτορ, αλλά ποτέ δεν ήξερα πώς να το κάνω να δουλέψει...


Στο βίντεο μπορείτε να δείτε ένα παράδειγμα συνεδρίας με τον συναρμολογητή Επίδειξη βίντεο

Βίντεο

Λήψεις