LE SCROLLING VERTICAL BAS
LE SCROLLING VERTICAL HAUT
LE SCROLLING VERTICAL BAS + COPIE
LE SCROLLING VERTICAL HAUT + COPIE


LE SCROLLING VERTICAL BAS

Le scrolling vers le bas (haut vers bas écran) est tout simplement construit en décalant les lignes de l'écran. Ce décalage est fait sur 4 points en même temps (32 bits). Il ne faut pas oublier d'utiliser l'instruction machine STD dans ce cas, car il faut partir du bas de l'écran pour remonter ... vers le haut.

Dans Totalwar, c'est ecran0 qui contient le décor de fond, puis est copié dans l'ecran final soit ecran1. Pour cela et pour améliorer les performances, on scroll l'écran décor et en même temps on le copie dans l'écran final.
C'est Le scrolling bas + copie.

void scrolling_haut(unsigned char *ecran)
{

asm volatile("
movl %0,%%esi
movl %%esi,%%edi
addl $199*320+316,%%edi
addl $198*320+316,%%esi
movl $199*80,%%ecx
std
rep; movsl
"
:
: "m" (ecran));
};


LE SCROLLING VERTICAL HAUT

Ce type de scrolling utilise le même principe de fonctionnement que son frère pour le bas. Cette fois-ci, nous copions les lignes de 1 à 0, 2 à 1 et ainsi de suite. Le transfert se fait en incrément donc par l'instruction CLD.

void scrolling_bas(unsigned char *ecran)
{

asm volatile("
movl %0,%%esi
movl %%esi,%%edi
addl $320,%%esi
movl $199*80,%%ecx
cld
rep; movsl
"
:
: "m" (ecran));
};


LE SCROLLING VERTICAL BAS + COPIE
LE SCROLLING VERTICAL HAUT + COPIE

Cette méthode consiste à scroller un écran et d'en faire une copie dans l'écran de travail. De cette façon, les sprites qui sont affichés dans l'écran de travail, ne perturberont pas le décor de fond. A chaque scrolling et copie, le contenu antérieur de l'écran de travail se trouvera effacer par le nouveau contenu du décor (réf: Construction d'une image).
Je ne fourni pas de routine assembleur pour faire ceci, mais pour pouvez pour cela faire appel à deux fonctions:
(Cette routine existe, c'est celle avec insertion de décor).

scrolling_bas(&buffer[ecran0]);
copie_screen(&buffer[ecran0],&buffer[ecran_travail]);

Ecran0 correspond à l'écran de decor et ecran_travail à l'ecran final où s'affichera la totalité des graphismes en vue d'être copié sur la carte VGA par le biais de vstoscreen(...).

et pour le scrolling haut:

scrolling_haut(&buffer[ecran0]);
copie_screen(&buffer[ecran0],&buffer[ecran_travail]);

Ecran0 correspond à l'écran de décor et ecran_travail à l'écran final où s'affichera la totalité des graphismes en vue d'être copié sur la carte VGA par le biais de vstoscreen(...).