C'est avant tout un projet technique :
1) utilisation de la RAM $0000-1FFF comme tampon de dessin virtuel de 32 lignes de 256 octets. H désigne la ligne et L la colonne. Cependant, la ligne est découpé en deux pour contenir deux tampons entrelacés : l'un contiendra l'image décalé d'un dot vers le bas pour éviter de faire le décalage de toute l'image lors d'un scroll vertical.
Pour passer à la ligne suivante, on fait :
Code : Tout sélectionner
INC H ; passe à la ligne suivante
RES 7,H ; effectue le wrapping dans le tampon si nécessaire
Code : Tout sélectionner
LD A,H ; récupère la position Y
AND 63 ; "wrap" le si nécessaire
SRL A ; convertis le ligne d'écran en le divisant par deux
RR L ; choisi la bonne image dans la ligne selon la parité de cette dernière
; tout en divisant la colonne par deux
LD H,A ; HL contient l'adresse source du tampon à afficher à l'écran
3) Le scrolling se fait simplement en affichant une zone de 28x25 caractères puis d'attribut. Ça correspond à du 56x50 en terme de dots. Il s'effectue en dot grâce à l'entrelacement de deux images par ligne (on permute l'image à chaque scroll). L'affichage est ce qui prend le plus de temps du fait que l'accès à la VRAM n'est possible que durant les blancs horizontaux. 14 octets par blanc. Comme on a 28x25 que l'on double du fait que l'on doit afficher et le caractère et la couleur, ça nous fait donc 100 lignes sur les 312 de la résolution PAL en sortie. On a donc encore plus de la moitié des ressources CPU pour le reste comme dessiner dans le tampon virtuel via un "rolling pointer", la logique du jeu, etc. Il n'y a donc pas de décalage physique pour faire le scrolling.
Et enfin une vidéo :