Revenir au plan du site
Un scrolling vertical avec le registre 5
Avant toute chose, vous pouvez jeter un oeil à
[ l'article sur le scrolling vertical avec l'ASIC ] car l'exemple utilise une largeur non conventionnelle et propose en conséquence une gestion de rebouclage aux petits oignons. Ça vous fera réviser les adresses écrans!
Contrairement à l'ASIC, le CPC ne permet pas de scroller facilement en vertical autrement que de 8 lignes en 8 lignes. Et l'utilisation du registre 5 pour réaliser des scrollings doux n'était pas évidente. C'est Paul Shirley qui écrira la première rupture CRTC sur Amstrad en 1987 pour le jeu Mission Génocide (Firebird) et ouvrira la voix à tout un tas de techniques dérivées de son travail. Il faut croire que chez Firebird les scrollings hards étaient du menu fretin car Paul Hutchinson de son côté, après avoir réalisé un scroll bi-directionnel au caractère en 1987 dans Gothik, sortira un scrolling multi-directionnel précis avec split-screen dans le jeu Druid II en 1988 !!!
Mission Genocide (1987)
Druid II (1988)
Pourquoi je vous parle de rupture et pourquoi donc ai-je précédé cet article de plusieurs articles sur le split-screen?
Comme le souligne Hicks dans l'ouvrage Memory Full (le tome 2 va
[Bientôt sortir]), le registre 5 ne fait qu'ajouter des lignes supplémentaires à la fin de l'écran et si on peut observer un décalage visuel, l'ajout de ligne va augmenter la durée de l'écran et se désynchroniser du 50Hz "parfait". La rupture devient alors indispensable pour ajouter un autre morceau d'écran qui viendrait compenser le décalage. Si on ajoute 3 lignes à la zone de scrolling, il faut en ajouter 5 pour retrouver un bloc de 8 lignes complet. Et pour ne pas avoir tout le temps 8 lignes de trop, il faut bien sûr formater son écran global en conséquence.
Pas de panique, on va voir ça progressivement, d'abord avec un peu de BASIC, ensuite avec de l'assembleur et des schémas :)
L'exemple en BASIC
Si on reprend notre
[rupture stable en BASIC] qui coupe l'écran en deux,
nous avions un écran total plus court (pour avoir un nombre de blocs pair) de 8 lignes.
En mettant le registre 5 à 4, nous allons ajouter 4 lignes à chaque écran, soit un total de 8 lignes et nous retrouver à 312 lignes (soit un 50Hz "parfait"). Si vous sortez votre règle, vous pourrez voir un décalage de 4 lignes supplémentaires entre l'écran du haut et celui du bas.
BORDER 13
OUT &BC00,7 : OUT &BD00,11
OUT &BC00,4 : OUT &BD00,18
OUT &BC00,6 : OUT &BD00,10
OUT &BC00,5 : OUT &BD00,4
|
J'ai fusionné les captures avant/après pour mettre en évidence le décalage de 4 lignes. Il reste 4 lignes invisibles à la capture, situées tout en bas. J'ai "synchronisé" le départ du premier écran mais il démarre physiquement plus bas car... Les lignes étant ajoutées après la VBL de synchronisation verticale, le départ du nouvel écran (en haut) sera lui aussi décalé de 4 lignes. BREF! Vous avez à nouveau rupté en BASIC, et à 50Hz cette fois!
Maintenant, voyons ce que l'assembleur va pouvoir nous offrir dans
[l'article suivant]