Κάποιοι ίσως θυμούνται το ROMBA, μια πλακέτα (cart) που κυκλοφόρησα πριν από σχεδόν 10 χρόνια, που ήταν ένα Rombox με ορισμένες περιορισμένες δυνατότητες DMA. Όσο καθόταν εκεί, ο καιρός περνούσε, ήρθε ο COVID, το CPLD που χρησιμοποιεί εκείνη η πλακέτα πήγε από κάτω από 2€ το κομμάτι σε πάνω από 10€ το κομμάτι, και οι ελάχιστοι άνθρωποι που ενδιαφέρονταν για την πλακέτα έχασαν το ενδιαφέρον τους.
Καθώς φαίνεται ότι η τιμολόγηση των CPLD με μεγάλο αριθμό I/O δεν θα πέσει ποτέ ξανά στα επίπεδα που ήταν, πριν από λίγο καιρό άρχισα να σκέφτομαι τη δημιουργία ενός νέου σχεδίου με στόχο, για άλλη μια φορά, το χαμηλό κόστος κατασκευής, προσθέτοντας παράλληλα μερικά επιπλέον χαρακτηριστικά. Γνωρίστε το ROMBA π (ή ROMBA 3.14):
Ο σχεδιασμός βασίζεται στον RP2350B, έναν μικροελεγκτή «pi-pico2» αντί για CPLD. Αυτοί οι μικροελεγκτές είναι φθηνοί, με άφθονα 5V-tolerant pins και υποστηρίζουν έως και 16 MiB φθηνής μνήμης flash QSPI. Η πλακέτα συνδέεται στη θύρα επέκτασης (expansion port) και, όπως συνέβαινε και με την παλαιότερη πλακέτα μου ROMBA, μπορεί να συνδεθεί απευθείας χρησιμοποιώντας έναν edge connector ή μέσω μιας πλακέτας MX4 χρησιμοποιώντας έναν DIL connector.
Η χρήση ενός MCU αντί για CPLD/FPGA για τη διασύνδεση παράλληλου διαύλου (parallel bus), σε συνδυασμό με τη χρήση flash QSPI αντί για παράλληλη NOR flash, έκανε το εγχείρημα αρκετά δύσκολο ώστε να λειτουργήσει ως Rombox, λόγω των καθυστερήσεων (latencies) που συνεπάγεται το polling του διαύλου και η ανάγνωση από το τσιπ QSPI, αλλά επιτέλους τα καταφέραμε!
Τα χαρακτηριστικά που έχουν υλοποιηθεί μέχρι στιγμής είναι:
- Χωρητικότητα Flash ROM έως 16 MiB (128 megabits). Το μεγαλύτερο μέρος είναι αξιοποιήσιμο ως μνήμη ROM για τον CPC, με εξαίρεση το μέγεθος που καταλαμβάνει το firmware (το οποίο επί του παρόντος είναι περίπου 48 KiB, αλλά αναμένεται να αυξηθεί εάν προστεθούν περισσότερες δυνατότητες).
- Θύρα USB host. Επί του παρόντος έχει υλοποιηθεί υποστήριξη ποντικιού, αλλά θα μπορούσαν να προστεθούν και άλλες περιφερειακές συσκευές USB.
- Η υποστήριξη ποντικιού περιλαμβάνει παραμετροποιήσιμη κλασματική κλίμακα (fractional scaling) για τη ρύθμιση της ευαισθησίας από την πλευρά του CPC, με ανεξάρτητη ρύθμιση για X, Y και τροχό κύλισης.
- Συμβατό με Amstrad CPC Romboxes (έως 256 θέσεις/slots).
- Hardware DMA που μπορεί να χρησιμοποιηθεί για την αντιγραφή δεδομένων από τη ROM στην εσωτερική RAM (1 byte ανά μικροδευτερόλεπτο).
- Ο μηχανισμός DMA μπορεί να κάνει αντιγραφή σε linear mode και σε 2D mode, επιτρέποντας την αντιγραφή tiles στη μνήμη της οθόνης χωρίς να χρειάζεται να ανησυχείτε για τις ιδιομορφίες του CRTC και του GA.
- Ο μηχανισμός DMA σε 2D mode υποστηρίζει επίσης επιτόπιο καθρεφτισμό πλακιδίων (on the fly tile mirroring) και για τα 3 γραφικά modes.
Η υποστήριξη για τις παραπάνω λειτουργίες είναι σταθερή, αλλά δεν θα θεωρούσα το firmware ολοκληρωμένο ως προς τα χαρακτηριστικά του όπως είναι τώρα (περισσότερα για αυτό παρακάτω). Το hardware επιτρέπει επίσης την προσθήκη υποστήριξης για τα ακόλουθα:
- Μετατόπιση εικονοστοιχείων (pixel shifting) για tiles.
- Μάσκα εικονοστοιχείων (pixel masking) για tiles (προς το παρόν υλοποιημένη, αλλά μόνο σε επίπεδο byte granularity).
- Υποστήριξη Lower ROM.
- Πιο σύνθετη χαρτογράφηση μνήμης (memory mapping).
- Επέκταση RAM (ο MCU διαθέτει 512 KiB RAM, και το μέγεθος που δεν χρησιμοποιείται από το firmware θα μπορούσε να χρησιμοποιηθεί ως CPC RAM).
- Δυνατότητες ήχου (FM δυνατότητες, αναπαραγωγή δειγμάτων PCM).
- Αποθήκευση δεδομένων σε Flash.
- Προγραμματιζόμενη γεννήτρια NMI.
- Υποστήριξη για DMA από την εσωτερική RAM του CPC στην εσωτερική RAM του CPC (προς το παρόν υποστηρίζεται μόνο από ROM σε RAM).
Εδώ μπορείτε να δείτε την υποστήριξη ποντικιού στην πράξη:
Ο SyX έχει προσαρμόσει (patchάρει) μια σειρά από παιχνίδια για να υποστηρίζουν ποντίκι και θα έπρεπε να κάνω ένα βίντεο και για μερικά από αυτά
. Με βοήθησε επίσης πολύ σε θέματα όπως η κατανόηση της διάταξης της μνήμης βίντεο, καθώς και με μερικά snippets κώδικα και προγράμματα για δοκιμές.
Και εδώ μπορείτε να δείτε τις δυνατότητες 2D DMA σε δράση:
Αυτό το sprite είναι 32x64 pixels (mode 0) και το DMA χρειάζεται περίπου 1 ms για να το σχεδιάσει (σχεδιάζει δύο pixels του mode 0 ανά μικροδευτερόλεπτο). Ο μηχανισμός 2D DMA κάνει επίσης καθρεφτισμό on the fly μέσω hardware και διαχειρίζεται το screen clipping και masking (αλλά στην τρέχουσα έκδοση όλα γίνονται μόνο σε επίπεδο byte, άρα δύο pixels του mode 0).
Τόσο το hardware όσο και το firmware κυκλοφορούν ως Open Source. Η τεκμηρίωση σχετικά με τον προγραμματισμό για αυτά λείπει προς το παρόν, αλλά σκοπεύω να την προσθέσω αργότερα.
Τώρα, σχετικά με την τρέχουσα «ημιτελή» κατάσταση του firmware. Ήθελα να προσθέσω τα περισσότερα (αν όχι όλα) τα χαρακτηριστικά που αναφέρονται παραπάνω και δεν έχουν ακόμη υλοποιηθεί. Φαίνεται όμως ότι ένα μεγάλο κομμάτι (ίσως η πλειοψηφία;) της κοινότητας του CPC ενδιαφέρεται μόνο για επιτεύγματα σε επίπεδο λογισμικού και βλέπει αυτές τις επεκτάσεις hardware ως «anti-features», ως «αυτό δεν είναι πια CPC» και άλλα παρόμοια. Οπότε, αντί να ρίξω περισσότερη προσπάθεια σε αυτό, σταματώ την ανάπτυξη μέχρι να δω πραγματικό ενδιαφέρον για την πλακέτα. Δηλαδή κάποιον που να ενδιαφέρεται πραγματικά να προγραμματίσει για αυτήν την πλατφόρμα αξιοποιώντας αυτές τις δυνατότητες. Διότι, αν πρόκειται να είναι το δεύτερο σχέδιό μου για τον CPC που θα καταλήξει αχρησιμοποίητο, θα προτιμούσα να αφιερώσω τον χρόνο μου σε άλλα hardware projects που ίσως βοηθήσουν άλλους devs.
Εσείς λοιπόν τι πιστεύετε; Έχει ενδιαφέρον κάτι τέτοιο; Υπάρχει κανείς που να ενδιαφέρεται να αναπτύξει λογισμικό για αυτές τις φθηνές και ικανές πλακέτες; Ή μήπως η προσθήκη οτιδήποτε άλλου εκτός από μνήμη θεωρείται «ζαβολιά» και πρέπει να θαφτεί;

