samedi 11 février 2012

Tutoriel : Quand écrire dans la VRAM sur Coleco ?

Retrouvez ce tuto sur : http://perso.numericable.fr/michel.louvet/

5 commentaires:

  1. Bizarre la nmi coleco !!
    On dirai en fait une interruption non pas vblank,mais plutôt une vsync .
    Voilà pourquoi l'affichage reste actif pendant le nmi .

    TOUKO.

    RépondreSupprimer
  2. Michel, je t'ai envoyé un PM pour une collaboration, pas de réponse pour le moment...

    Sans avoir approfondi la question, voici quelques explications.
    D'après le schéma électrique, la broche d'interruption du processeur vidéo est connectée à celle du Z80 qui est la NMI !
    Donc à chaque vertical blank (VBL), c'est à dire le moment où le faisceau d'électron vient de terminer l'affichage d'un écran, une interruption NMI se produit. Le laps de temps entre cette NMI et le début de l'affichage du prochain écran est le temps pendant lequel on peut modifier la mémoire vidéo sans artefact à l'écran.
    Pour une coleco vendu en Europe, la fréquence de vbl est 50Hz soit une NMI toutes les 20ms.
    On a donc un budget temporel pour préparer le nouvel écran c'est à dire ses animations. Ce budget est assez limité, c'est pourquoi les routines d'animations doivent être optimisées au maximum et donc généralement codées en assembleur.

    J'espère que cela t'éclaire Michel.
    Toi qui code en C, une optimisation très simple est que toute fonction appelée dans ta routine de NMI soit une fonction inline (C99). C'est à dire que son code est inclu dans la fonction NMI pour éviter l'appel et le retour de sous-fonction. La contrepartie c'est la place mémoire prise.

    RépondreSupprimer
  3. Merci énormément pour cette explication très claire !

    Concernant ton mail, je te répond dès que possible.

    RépondreSupprimer
  4. Je reviens sur mon message pour le compléter avec des références certes sur plateforme MSX mais qui me semble appropriées et vrai pour coleco à ~100% malgré mes faibles connaissances de la plateforme.

    http://bifi.msxnet.org/msxnet/tech/tms9918a.txt
    => détails le fonctionnement du circuit vidéo, de sa programmation et notamment il y a un § sur les interruptions.

    Il y a aussi des références et particulièrement,
    http://bifi.msxnet.org/msxnet/tech/tmsposting.txt
    On y apprend pourquoi il ne peut y avoir que 4 spries par ligne et aussi le budget temporel transformé en nombre d'instruction pendant une VBL.
    "Theoretically, one can move (4300 us/2 us) 2150 bytes to/from the VRAM in one vertical blanking time." Attention il faut vérifier que les fréquences de fonctionnement du circuit vidéo sur la coleco sont bien les mêmes pour que ces chiffres soient corrects.
    Les explications sont techniques mais les grandes lignes sont je pense accessibles.

    J'ai vu une doc de newcoleco sur comment commencé en C sur coleco, un beau tutorial didactique qui n'est pas sans donné envie de faire des tests.

    RépondreSupprimer
  5. D'après ce que j'ai compris, En mode MI 1, la Colecovision effectue une interruption (RST 66) non masquable (NMI) en fin de rafraîchissement d'écran. Cela impose de cadencer les accès au VDP ou au contraire ne pas faire d'accès au VDP pendant une NMI afin de ne pas faire un accès au bon milieu d'un autre.

    Quand à l'interruption masquable (INT), c'est un RST38h apparemment provoqué par un périphérique lorsque le rafraichissement de l'écran commence (à confirmer). L'interruption NMI est prioritaire.

    RépondreSupprimer