LE SCROLLING VERTICAL BAS
LE SCROLLING VERTICAL HAUT
LE SCROLLING VERTICAL BAS + COPIE
LE SCROLLING VERTICAL HAUT + COPIE
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));
};
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(...).