Certains se souviennent peut-être de ROMBA, une cartouche que j’ai sortie il y a près de 10 ans, qui était une Rombox dotée de fonctionnalités DMA limitées. Le temps a passé, le COVID est arrivé, et le CPLD utilisé par cette cartouche est passé de moins de 2 € pièce à plus de 10 € l’unité, faisant perdre tout intérêt au très petit nombre de personnes qui s’y intéressaient.
Comme les prix des CPLD disposant d’un grand nombre d’E/S ne semblent pas près de redescendre à leur niveau d’antan, j’ai commencé il y a quelque temps à réfléchir à une nouvelle conception axée, encore une fois, sur un faible coût de fabrication, tout en ajoutant davantage de fonctionnalités. Voici ROMBA π (ou ROMBA 3.14) :
La conception repose sur le RP2350B, un microcontrôleur « pi-pico2 », plutôt que sur un CPLD. Ces microcontrôleurs sont bon marché, possèdent de nombreuses broches tolérantes au 5V et prennent en charge jusqu’à 16 Mio de mémoire flash QSPI économique. La cartouche se branche sur le port d’extension, et comme pour mon ancienne ROMBA, elle peut être connectée directement via un connecteur de bord de carte (edge connector), ou via une carte MX4 à l’aide d’un connecteur DIL.
Utiliser un MCU au lieu d’un CPLD/FPGA pour l’interfaçage avec le bus parallèle, combiné à l’utilisation de flash QSPI plutôt que de flash NOR parallèle, a rendu son fonctionnement en tant que Rombox particulièrement complexe en raison des latences liées au scrutation du bus et à la lecture de la puce QSPI, mais ça y est, ça fonctionne !
Les fonctionnalités actuellement implémentées sont les suivantes :
- Jusqu’à 16 Mio (128 mégabits) de capacité Flash ROM. La majeure partie est utilisable comme mémoire ROM pour le CPC, à l’exception de l’espace réservé au firmware (qui est actuellement d’environ 48 Kio, mais devrait augmenter si d’autres fonctionnalités sont ajoutées).
- Port hôte USB. Actuellement, la prise en charge de la souris est implémentée, mais d’autres périphériques USB pourraient être ajoutés.
- La prise en charge de la souris comprend une mise à l’échelle fractionnaire configurable (pour ajuster la sensibilité depuis le CPC), avec des réglages indépendants pour X, Y et la molette.
- Compatible avec les Rombox Amstrad CPC (jusqu’à 256 slots).
- DMA matériel pouvant être utilisé pour copier des données de la ROM vers la RAM interne (1 octet par microseconde).
- Le moteur DMA peut copier en mode linéaire et en mode 2D, ce qui permet de copier des tuiles dans la mémoire d’écran sans avoir à se soucier des bizarreries du CRTC et du Gate Array.
- Le moteur DMA en mode 2D prend également en charge la mise en miroir des tuiles à la volée pour les 3 modes graphiques.
La prise en charge des fonctionnalités ci-dessus est stable, mais je ne considérerais pas le firmware comme complet en l’état (plus de détails là-dessus plus bas). Le matériel permet d’ajouter également la prise en charge des éléments suivants :
- Décalage de pixels (pixel shifting) pour les tuiles.
- Masquage de pixels pour les tuiles (actuellement implémenté, mais uniquement avec une granularité d’un octet).
- Prise en charge de la Lower ROM.
- Gestion plus complexe de la mémoire (memory mapping).
- Extension de RAM (le MCU dispose de 512 Kio de RAM, et la portion non utilisée par le firmware pourrait servir de RAM pour le CPC).
- Capacités sonores (capacités FM, lecture d’échantillons PCM).
- Sauvegarde de données en mémoire Flash.
- Générateur de NMI programmable.
- Prise en charge du DMA de la RAM interne du CPC vers la RAM interne du CPC (seul le transfert ROM vers RAM est pris en charge pour le moment).
Vous pouvez voir ici la prise en charge de la souris à l’œuvre :
SyX a patché plusieurs jeux pour intégrer la souris et je devrais aussi faire une vidéo de certains d’entre eux
. Il m’a également beaucoup aidé sur des points comme la compréhension de l’agencement de la mémoire vidéo, ainsi qu’avec des extraits de code et des programmes de test.
Et ici, vous pouvez observer les capacités du DMA 2D en action :
Ce sprite fait 32x64 pixels (mode 0) et le DMA met environ 1 ms pour le dessiner (il dessine deux pixels mode 0 par microseconde). Le moteur DMA 2D gère également la mise en miroir à la volée de manière matérielle, ainsi que le découpage à l’écran (clipping) et le masquage (mais dans la version actuelle, uniquement avec une granularité à l’octet, soit deux pixels mode 0).
Le matériel comme le firmware sont publiés en Open Source. La documentation sur la façon de programmer pour ces derniers fait défaut pour l’instant, mais je prévois de l’ajouter plus tard.
Maintenant, concernant l’état actuel « inachevé » du firmware. Je voulais ajouter la plupart (si ce n’est la totalité) des fonctionnalités énumérées ci-dessus qui ne sont pas encore implémentées. Mais il semble qu’une grande partie (peut-être la majorité ?) de la communauté CPC ne s’intéresse qu’aux prouesses logicielles et perçoive ces extensions matérielles comme des « anti-fonctionnalités », en disant que « ce n’est plus un CPC » et d’autres remarques du même genre. Donc plutôt que d’y consacrer davantage d’efforts, je suspends le développement en attendant de voir un réel intérêt pour la cartouche. Comme quelqu’un de véritablement motivé à développer pour cette plateforme en exploitant ces fonctionnalités. Car s’il s’agit de ma deuxième conception pour le CPC destinée à finir aux oubliettes, je préfère consacrer mon temps à d’autres projets matériels qui pourraient être utiles à d’autres développeurs.
Alors, qu’en pensez-vous ? Est-ce que ce genre de projet vous intéresse ? Y a-t-il des personnes motivées à développer pour ces cartouches économiques et performantes ? Ou bien est-ce qu’ajouter quoi que ce soit d’autre que de la mémoire relève de la triche et devrait être enterré ?

