Nouveau design de cartouche : ROMBA π

Merci. Je ne connaissais pas le CPC-CPLINK2, mais maintenant que je le vois, peut-être qu’il pourrait bénéficier des modes DMA.

2 « J'aime »

Documentation mise à jour, ajout de l’utilisation du mode DMA 2D : PROGRAMMING.md · master · doragasu / romba-pi-src · GitLab

Je pense que je devrais peut-être ajouter les programmes BASIC que j’utilise pour les tests afin de compléter les explications sur la façon d’utiliser les modes DMA.

1 « J'aime »

Oui, cela aiderait probablement pour le DMA, mais j’ai dû utiliser 8 GPIO pour le côté données du PI (GPIO32..39), les GPIO 40..47 restants (non tolérants au 5V) étant également dédiés au PI. Il me manque donc probablement quelques signaux du bus CPC.

Pour le moment, j’utilise simplement une carte de développement.

1 « J'aime »

Documentation mise à jour avec beaucoup plus d’informations :

  • Des explications (j’espère) plus faciles à comprendre sur l’utilisation du mode DMA 2D.
  • Mise à jour de la liste des registres DMA.
  • Ajout d’exemples de listings BASIC pour lire la souris et effectuer des transferts DMA linéaires et 2D.
  • Ajout d’informations sur la façon de réaliser des remplissages DMA et d’effectuer des transferts depuis la mémoire interne du CPC.

Comme toujours, vous pouvez la consulter sur le dépôt : PROGRAMMING.md · master · doragasu / romba-pi-src · GitLab

4 « J'aime »

Les discussions récentes autour d’Another World, expliquant comment le jeu tourne sur une simple machine à états qui ne dépend que d’une routine rapide de remplissage de polygones, me font penser que ce serait un bon candidat pour expérimenter les capacités DMA de cette cartouche.

Dans son état actuel, le remplissage par DMA peut être utile pour dessiner des rectangles (y compris des lignes horizontales et verticales). Mais en dehors de cela, ce n’est peut-être pas d’une grande aide.

Un polygone peut sûrement être construit à partir de lignes horizontales, non ? Ou est-ce que cela engendre trop de surcharge (overhead) pour que cela en vaille la peine ?

Les anciens moteurs 3D logiciels affichaient les triangles de cette façon. En divisant les triangles verticalement, puis en traçant des lignes horizontales.

Je ne suis pas sûr que le DMA soit plus utile pour les transferts de données en masse que pour des données très spécifiques et en constante évolution.

Il faut faire quelques OUT pour modifier les coordonnées et la longueur de remplissage, puis lancer le transfert. Donc, pour dessiner quelques pixels, il serait peut-être plus rapide de les écrire directement dans le tampon.

On pourrait tout à fait faire des choses comme faire le rendu de polygones sur le RP2350 et les transférer via DMA, mais là, la police du CPC viendrait frapper à votre porte :sweat_smile:

On pourrait même faire tourner DOOM sur le RP2350, quantifié pour la palette de couleurs et la résolution du CPC, et transférer les images vers le CPC. Le transfert d’un écran complet prend environ 16,4 ms, donc des applications comme un lecteur vidéo à 50 FPS seraient aussi envisageables (on dispose également de jusqu’à 16 Mio de ROM pour stocker la vidéo).

Je limite les capacités DMA de la cartouche à ce qu’un blitter classique pouvait faire à l’époque. Mais pouvoir modifier l’intégralité du contenu de l’écran du CPC en moins d’une frame permet de concevoir n’importe quel type d’accélérateur, pour peu que ça ne vous dérange pas que le rendu ne soit pas effectué par le Z80.

Cela dit, est-ce que ça intéresserait quelqu’un de porter Bad Apple sur ROMBA π ?

Ça a l’air intéressant !

J’adore les capacités DMA — ça ferait une énorme différence pour obtenir des fréquences d’images bien fluides ! :slight_smile:

Si tu en lances une production, j’en prends un à coup sûr !

Je trouve les fonctionnalités DMA vraiment très intéressantes ! Continuez comme ça ! J’ai juste une question : est-ce que le 2350 pourrait être une carte fille (par exemple un module central) que l’on pourrait souder directement ? Cela simplifierait grandement ce montage