|
Effacer l'écrans
Je vous propose ici une fonction CLS qui est ultras rapide, et bien sur c'est de l'ASM :-)
Le principe pour effacer l'écran er simple, on remet tout les octets de la mémoire entre C000 et CFFF à 0.
Pour effacer l’écran, on a :
- le firmware, avec une fonction pour changer de mode (faite un MODE 1 sous basic, bas cela efface l'écran) qui est BC0E.
- le firmware encore avec une fonction qui efface l’écran BC14.
- du code, mettre la zone mémoire de l’écran à 0, on peut faire cela avec un pointeur (vous avez bien lut tous les autre article que j'ai fait quand même ? :-) )et une simple boucle for.
- du code, faire un memset.
- ...
- en assembleur, en détournant l'utilisation de la pile.. . aller, je vous laisse chercher sur le net, moi je vous donne la fonction.
Je vous laisse aussi faire vos propre test pour voire quel méthode est la plus rapide.
// Efface l'ecran en utilisent la pile
// détournement de la pile pour faire un cls super rapide !
int PILE;
void CLS_WidthPile()
{
__asm
DI
LD (#_PILE),SP
LD B,#0 ; la boucle
LD SP,#0 ; pile a 0 (car 0 - 1 = 0xFFFF fin de l ecran quand il est en 0xC000), comme cela on remonte jusqu a 0xC000
LD DE,#0 ;valeur que l'on vas mettre en mémoire
BOUC: PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
PUSH DE
DJNZ BOUC
LD SP,(#_PILE)
EI
RET
__endasm;
}
Voila, pas comme d'hab, je ne vous est pas fait de ZIP :-o
|
|
|