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 .
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.
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.
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.
Avertissement : ceci n'est pas un tuto, mais une expérimentation. Vous pouvez suivre ce que je fais, mais je ne suis pas responsable des résultats. Je possède 2 Colecovision, dont une qui à un transfo qui fait que l'image n'arrête pas de sauter. Le transfo Coleco est quasi impossible à démonter, et même après ça, je vois pas ce que je pourrais réparer la dedans. J'ai donc tenté d'alimenter la Coleco avec une alimentation de PC. Pour cette expérience il m'a fallu : - une alimentation PC capable de délivrer du +5 Volts, -5 Volts, + 12Volts, et 2 masses. Bref une ancienne alim PC devrait faire l'affaire. - Un transfo Coleco (Pas obligatoire, mais ça évitera de souder directement sur la console) - Un multimètre (Voltmètre et continuité) - Un fer à souder et de l'étain - Une pince à couper - Une pince à dénuder - Un trombone en métal - Un disque dur ... (Ou un ventilo, ...) vous verrez pourquoi. Voici ce qu'il faut en tension pour alim...
Si vous avez parcouru un tant soit peu ce blog, vous avez souvent vu citer XPadder. Cet outils permet de simuler un clavier/souris avec la manette. En gros, cela permet de jouer aux vieux jeux qui ne supporte plus les manettes avec justement une manette. Ce tutorial, va expliquer comment configurer une manette Xbox 360 avec Xpadder 5.3, dernière version gratuite. En effet l'outil est devenu payant (xpadder.com) et coute 9.99$. Franchement, ce n'est pas cher pour la puissance de l'outil et la dernière version est compatible Windows 7 (sans bidouille). Pour ce tuto, basez vous sur la version gratuite disponible sur clubic.com ou à cette adresse : http://www.megaupload.com/?d=PLJ4GDD1 . Après avoir téléchargé le fichier, double cliquez dessus. C'est un fichier zippé auto extractible. Choisissez l'endroit ou vous voulez décompresser XPadder. Utilisateurs de Windows 7 vérifiez bien que l'endroit que vous aurez choisit dispose des droits d'écriture ! Une fo...
Bonjour, en ce jour je dévoile un peu plus le projet de shoot'em up Dreamcast en développement. Le nom de code du projet est Little Witch Adventure, car je voulais faire à la base un shoot'em up du style Cotton, mais comme vous allez le voir ensuite, pas mal de choses ont évolué. Tout d'abord j'ai eu la chance d'être contacté par 2 graphistes Apoka et Badinette qui l'un et l'autre sont des graphistes pro qui ont un style bien à eux, et c'est grâce à eux que le look du jeu à évolué vers tout autre chose. Hé, oui les premiers concepts des niveaux nous font approcher d'un style plus ressemblant à Patapon qu'à un cotton. Ce que vous allez voir ici bien entendu ne sont que des essais et de nombreuses choses vont certainement évoluer, mais le style graphique est je pense trouvé. A ce style piquant du joueur (qui évoluera selon les nivaux, ici on à son mode "je suis très très en colère"), se mèlera également des choses plus ron...
Bizarre la nmi coleco !!
RépondreSupprimerOn dirai en fait une interruption non pas vblank,mais plutôt une vsync .
Voilà pourquoi l'affichage reste actif pendant le nmi .
TOUKO.
Michel, je t'ai envoyé un PM pour une collaboration, pas de réponse pour le moment...
RépondreSupprimerSans 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.
Merci énormément pour cette explication très claire !
RépondreSupprimerConcernant ton mail, je te répond dès que possible.
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.
RépondreSupprimerhttp://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.
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.
RépondreSupprimerQuand à 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.