Si l'interruption VBL n'est pas implémentée matériellement, on revient encore à du polling, et si jamais la variabilité de la boucle est supérieure à 1/50s, on se retrouve avec un résultat irrégulier.
Markerror a écrit : ↑18 mai 2020 10:57Ok, ta version est 100% assembleur Joaopa ? Pour le coup, le RST &38 est utilisable, avec un compteur que tu gères toi-même pour l'appel aux routines du jeu. Si le compteur n'est pas atteind, tu ne fais rien. Cela suppose par contre que le code tienne compte de cette manière de fonctionner.
C'est ce que le gars qui a codé Tortues a fait, l'affichage des sprites se fait sous interruption.
Je ne pensais pas à une routine entièrement sous interruption, mais, si les routines d'interruption sont exécutées en RAM, ou que l'on peut modifier l'adresse (le vecteur?) de la routine d'interruption, y ajouter une dixaine de lignes de code pour le compteur et validation d'un bit d'autorisation, qui, lui, est testé par le programme principal hors interruption.
Après, je ne connais pas le Z80, à vous lire, ça a l'air d'être vachement plus compliqué que le 8051.
Sinon, il n'y a pas un timer disponible sur lequel on peut faire un comptage hors TM, et dont le vecteur d'interruption n'aura qu'à mettre à jour le bit d'autorisation de bouclage?
hlide a écrit : ↑18 mai 2020 13:26Certaines machines (Sinclair par exemple, utilise l'instruction HALT qui se débloque sur un signal /INT qui doit être connecté au /VBLNK ou apparenté). La question est : est-ce que le VG5000 utilise l'interruption et pour quoi ? sans cette réponse, on ne peut pas aveuglement utiliser HALT et interruption 38H (en supposant que le VG5000 soit en mode IM1).
Donc consulter la valeur de (ix+00h) permettrait de savoir à combien d'interruptions il faut passer pour le rafraîchissement.
Par contre, j'ai un doute sur le fait que ce soit bien cadencé par rapport au vrai VBLANK.
Oui, mais le Sinclair, c'est particulier, le Z80 doit être suspendu pendant la génération de l'affichage pour ne pas interférer avec les accès mémoire de L'ULA, non?
Comme on est dans une architecture avec processeur graphique, et que le jeu est tout en assembleur, on doit pouvoir suspendre le processeur principal à notre guise. Attention toutefois à la gestion des appuis de touches dont le régime devra être changé, avec un "ou" à chaque boucle, et un reset après chaque rafraîchissement de position. Le scan clavier se fait sur interruption, ou par tests incessants (polling)?
Les routines que tu montres ne servent-elles pas au BASIC pour savoir s'il doit envoyer la page-écran au VDP, plutôt?
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.