85Fermer87
DEATHLe 13/05/2021 à 01:32
Pour en revenir au code, j'ai changé le mode de détection des trames paire ou impaire parce qu'en fonction de l'initialisation des registres, du moment où ils sont paramétré, du moment où le programme prend la main, de la vitesse du vent et de l'âge du capitaine, le résultat est parfois incertain.
J'avais un doute alors j'ai déplacé VI et VBB plus haut afin d'être dans la zone visible, j'ai inclus un changement de couleur de BORD1 en début d'interruption puis un autre un peu plus loin.

Résultat, avec la routine qui test le bit 12 de VC, en fonction de quand le programme prend la main, de l'endroit où les registres vidéo sont initialisé, etc. je ne sais pas si c'est un bug de la Jaguar ou du btst ou... bref j'ai des résultats aléatoire comme expliqué au tout début de ce sujet.
Soit les lignes paire et impaire sont inversées, soit il maque une trame sur 2, soit ça fonctionne.... Alors il y a des cas ou ça fonctionne à 100% mais c'est un peu la loterie si je change une valeur quelque part.

Mais grace au changement de couleur de BORD1 j'ai pu voir que l'interruption à bien lieu au bon moment à chaque trame (la routine n'a pas le même nombre d'instruction en fonction de la ligne paire ou impaire).

Du coup au lieu de tester le bit 12 de VC et que tout le fonctionnement de l'entrelacé repose dessus, je bascule l'état du bit 0 de VI à chaque trame quoi qu'il arrive et je test également son état pour savoir si on est sur une ligne paire ou impaire. Ca fonctionne à tous les coups.

En gros voilà le code avant :
btst.b #(11-8),VC ; we're testing bit 11 (the 12th bit) of VC but... bne .bottom ; btst only works on bytes when operating on memory ; top field ori.w #1,vi_line ; set line next VI will occur on move.w vi_line,VI ; and set it (VI is write-only) bra .done .bottom: ; bottom field andi.w #$fffe,vi_line ; set line next VI will occur on move.w vi_line,VI ; and set it (VI is write-only) add.l #((BMP_PHRASES)<<11),(a0) ; add IWIDTH to DATA to start one line lower .done:
et après :
move.w vi_line,d0 eori.w #1,vi_line ; set line next VI will occur on move.w vi_line,VI ; and set it (VI is write-only) ; test de VI donc de la ligne en cours qui semble être plus fiable que de tester le bit 12 de VC btst #0,d0 beq .done ; top field ; bottom field add.l #((BMP_PHRASES)<<11),(a0) ; add IWIDTH to DATA to start one line lower .done: