Revenir au plan du site


Les fonctions câblées de split-screen de la gamme Amstrad Plus / GX-4000


Finies les bidouilles ou les largesses de CRTC avec les Plus, de nouveaux registres ASIC font leur apparition afin de réaliser facilement du découpage d'écran (split-screen).

Cependant, cette logique se greffant sur le CRTC contenu dans l'ASIC, nous allons voir que le contenu des registres à programmer est fortement lié à l'ancêtre.

SPLT - Split register
Mappé à l'adresse #6801, la valeur 8 bits correspond à la ligne déclenchant le changement écran. Le changement a lieu en fin de ligne et la nouvelle adresse est effective à la ligne suivante.

Quand ce registre vaut zéro, le split est désactivé. En conséquence, il n'est possible d'avoir la première rupture écran ni sur la première ligne, ni la deuxième puisque la première possible arrive en FIN de la deuxième ligne.

SSA - Split Screen Address register
Mappé à l'adresse #6802 et sur 16 bits, ce registre contient l'adresse écran telle qu'on l'enverrait à un CRTC aux registres 12 et 13.

SSR - Soft Scroll Register
Déjà évoqué dans les articles sur les scrollings du Plus, ce registre 8 bits contient les bits de correction de bloc qui nous intéressent, les bit 4,5 et 6.

Quelques exemples en pratique!


Après avoir déverrouillé l'ASIC, nous allons découper notre écran à la 16è ligne, soit après la 15è ligne. Cela se réalise avec un POKE dans le SPLT. Sur l'exemple ci-dessous, comme on n'a pas touché à l'adresse de split, les valeurs par défaut sont zéro et nous voyons la mémoire écran de la première bank, entre #0000 et #3FFF.



Histoire de visualiser autre chose, nous pouvons donner au SSA les mêmes valeurs que celle du CRTC affichant le Basic : #2000. Attention, si vous voulez écrire avec une instruction 16 bits dans le registre SSA, il faut inverser le poids faible et le poids fort! Dans notre cas, seul l'équivalent du registre 12 est à régler, on fera un POKE unique. Notre écran repart de "zéro" à la 16è ligne.



Si on essaie de bouger notre écran plus loin, mettons, à la 19è ligne, il semble ne pas bouger!



En fait il démarre bien plus loin, comme on peut s'en rendre compte si on remet le SSA à zéro. Promis, j'ai fait le poke en #6802! On voit alors apparaitre les 3 lignes suivantes puis coupure, nous avons changé d'écran.



Ce qui se passe en interne est que le CRTC continue de sauter de bloc en bloc et son compteur n'est pas réinitialisé par la rupture Plus. Comme nous sommes 3 lignes plus loin, si nous voulons reprendre au début de notre écran, il faut compenser le décalage avec le complément des blocs. Du troisième bloc, pour revenir à zéro, il faut ajouter 5 blocs grâce au SSR.



Notre écran reprend bien à la 19è ligne mais comme nous sommes en Basic, le premier écran est aussi décalé! Peu importe, l'idée était de montrer en pratique comment et pourquoi il faut compenser les blocs si on ne découpe pas notre écran sur des positions multiples de 8. En Basic, vous n'avez que le choix de découper à ces positions pour éviter les effets secondaires.

On peut s'assurer que c'est uniquement notre écran découpé qui démarre en changeant l'adresse du premier écran, cette fois en utilisant l'accès classique au CRTC. Nous avons bien 19 lignes qui précèdent le "Ready"



Maintenant, si vous voulez rester à la 19è ligne, il faudra régler le SSR à zéro avant l'affichage de la première ligne écran, et modifier le SSR juste avant la 19è ligne. Impossible en Basic, il faudra utiliser l'assembleur et les interruptions raster pour vous positionner facilement et précisemment. La technique de base sera de jongler entre un PRI à 18 pour le split et un PRI à 199 pour remettre le SSR à la fin de l'écran visible.

La suite se passe dans l'article suivant.