jeudi, septembre 02, 2010

Comment ça marche ...

Je suis un hacker. Voilà, c'est dit. Attention, pas cracker -- genre "je vais pirater votre ordi et voler votre numéro de carte bleue". Non. Hacker -- genre "passe moi un tournevis, on va regarder comment ça marche", au grand dam de mes copains d'enfance. Alors, voilà. Je code mon jeu sur la DS parce que j'adore la manière dont le hardware graphique se programme. Mais au fait, ça marche comment, le hardware graphique d'une DS? Si j'essayais de reproduire un chip graphique affichant 4 plans, des sprites et tout le tralala sur un FPGA, ça donnerait quoi ?

A friend of mine persistently repeats I've got a hacker's desktop. When hacker == "hand me the screwdriver and let's see how that thing works", I guess he's quite right. Need a proof ? Well, not only I'm coding homebrew games and apps on the nintendo DS (which is supposed to be a closed system), but I can't help thinking of "how could we reprogram an FPGA so that it mimmics the DS' (2D) graphic engine". I know that's pretty pointless: my experience of programmable chip is thin and obsolete (VHDL on PAL 22v10, anyone ?). But what if ...

Je n'aurai peut-être pas la réponse (je ne suis pas un dieu des FPGA, loin de là) mais la question est posée. En guise d'amuse-gueule voilà déjà le genre de schéma de timing à respecter en sortie (source sur http://www.sharpsma.com/) Quelques lignes de contrôle pour prévenir qu'on commence une image, un temps de réaction de l'écran et c'est parti.

Vous donnez une fréquence d'horloge, et sur chaque flanc montant, les lignes Rx Gx et Bx contiennent les composantes RVB d'un pixel. Point après point. ligne après ligne. Avec un temps de resynchronisation (HBLANK) de quelques pixels entre chaque ligne. Et en ayant laissé un temps t1 pour que les données se stabilisent avant lecture, et en les maintenant pendant un temps t2 pour que l'écran les exploite.

Pour une matrice de 256x256 à 60 images/secondes, il faut quand même cavaler à ~4MHz, et donc pomper les données graphiques correspondantes hors de la VRAM à temps ... Choisir quelle couleur donner en fonction des différents sprites présents, calculer les compositions de couleur genre "alpha-blending", et tout ça. Je sens déjà se dessiner le "pipe-lining" entre les différents stades, tiens.

Digging back in the refs of the Jumbotron project I found the specs of a DS-alike LCD screen ... let's study that a bit to figure out what the problem actually is.