Sur les conseils de sam je suis allé voir la routine de maj palette du moniteur.
(Je ne sais pas qui a désassemblé le moniteur TO8 dans le sdk vital mais c'est très pratique ...)
Code:
// SETP$ A=couleur à modif / X=16bits OR modifier / Y=16bits AND modifier
//si A=FF alors X pointe sur un tableau contenant la nouvelle palette
FCB1 34 PSHS U,Y,DP,B,A,CC
FCB3 C6 LDB #E7
FCB5 1F TFR B,DP
FCB7 4D TSTA
FCB8 2A BPL FCE1 // prog d'une couleur
FCBA 8D BSR FCD6 // wait a VBL
FCBC 10 8E LDY #0200
FCC0 31 LEAY -1,Y
FCC2 26 BNE FCC0 // temporise 200x8µs
FCC4 0F CLR DB // met a zero le registre de selection
FCC6 10 8E LDY #0010
FCCA EC LDD ,X++
FCCC D7 STB DA // ecrit la valeur 16 bits dans le registre de donnée
FCCE 97 STA DA
FCD0 31 LEAY -1,Y
FCD2 26 BNE FCCA // repete 16fois
FCD4 35 PULS PC,U/S,Y,DP,B,A,CC
// RETOUR
FCD6 7D TST E7E7 // Wait a VBL
FCD9 2A BPL FCD6
FCDB 7D TST E7E7
FCDE 2B BMI FCDB
FCE0 39 RTS
Après l'attente VBL, il y a une tempo de 1600 cycles.
Donc si je comprends bien :
L'attente VBL permet de se positionner en fin de la dernière ligne "utile" et au début de la bordure basse.
La tempo de 1600 cycles permet de se positionner 25 lignes plus bas (64 cycles/ligne).
On est en théorie hors du champ visible (suivant le réglage de l'écran) ou en tout cas très bas.
J'ai appliqué les modifs, c'est bcp mieux. On voit encore quelques pixels tout en bas de l'écran, je vais ajuster ça.
Vu qu'il faut 400 cycles tout rond pour mettre à jour la palette, il faut donc 7 lignes invisibles.
si on part du principe que l'image est centrée sur l'écran, on a (312 - 200)/2 = 56 lignes de bordures en haut et 56 en bas.
donc si j'attends 52 lignes au lieu de 25 ça devrait être ok.
Bon il faut trouver le juste milieu car 3328 cycles a attendre ça fait pas mal de cycles perdus sur la frame.
Pour un fondu ça va car en général on ne fait pas grand chose d'autre.
<Edit> c'est parfait avec une tempo de 52 lignes