APPLICATIONSDIVERS ★ ROCK'n SCROLL ★

Rock N Scroll (AM-Mag)Applications Divers

Les scrollings multidirectionnels

Auteur fécond de programmes de qualité et didactitien hors pair, Claude LE MOULLEC nous prête aujourd'hui main-forte par un article sur les scrollings tous azimuts avec exemples à l'appui. Amateurs de sensations fortes, accrochez vos ceintures...

Le Basic des CPC, un des plus riches qui soit, comporte néanmoins quelques lacunes ; entre autres, l'absence de fonction SCROLL. L'article qui suit a l'ambition d'y remédier. Avant toute chose, sachez que les plus novices d'entre vous ont déjà fait des scrollings sans le savoir. En effet, un simple LIST sur un programme de quelques Kilo-octets, suffit à provoquer un scrolling du bas vers le haut. Il s'agit là d'un Scrolling vertical. Pour ce dernier, assez facile à maîtriser, il est nécessaire de délimiter les coins de la fenêtre dans laquelle on désire réaliser un scrolling vertical.

Pour un scrolling vertical vers le haut, les coordonnées du coin supérieur gauche de la fenêtre sont utilisées. A l'inverse, un scrolling vers le bas fait appel aux coordonnées du coin inférieur droit. Lorsque celles-ci sont connues, il suffit d'y envoyer le caractère de contrôle approprié. Pour, en mode 1, utiliser tout l'écran comme fenêtre de référence, il faut faire :

LOCATE1,1:PRINTCHR$(11) :REM SCROLLING MONTANT

LOCATE 40,25 : PRINT CHR$ (10): REM SCROLLING DESCENDANT

Efficace, non ? Maintenant, rions un peu :

10 FOR i = 0 TO 10:LOCATE 1,1:PRINT CHR$(11):NEXT
20 FOR i = 0 TO 10:LOCATE 40,25:PRINT CHR$(10):NEXT
30 GOTO 10

En fait, tout ceci n'est qu'un apéritif. Le plus intéressant des scrollings, celui qui offre le plus de possibilités, est le Scrolling latéral. Soit deux façons d'obtenir un scrolling latéral :
— Agir directement sur le contrôleur vidéo.
— Jouer sur les octets de la mémoire écran.

LE CONTROLEUR VIDEO

Les scrollings par action sur le contrôleur vidéo, ne sont, à mon humble avis, que des fioritures au pouvoir limité. Néanmoins, voici quelques exemples Issus d'une action sur celui-ci.

10 OUT &BC00,13:FOR H = 1 TO 40:OUT &BD00,H
20 FOR T = 1 TO 50:NEXT T.H

Dans le même genre, mais pour les possesseurs d'un 464 sans drive :

10 FOR H = 1 TO 40:OUT 256.H
20 FOR T = 1 TO 50:NEXT T,H

Dans ces deux exemples, nous avons agi sur la mémoire écran, grâce au contrôleur vidéo. Il est également possible de jouer de même sur la bordure par :

OUT &BCOO,7:OUT &BD00.X (X entre 0 et 38 pour un décalage vertical)
OUT &BCOO,2:OUT &BD00,X (X entre 0 et 63 pour un décalage latéral)

Pour plus d'informations sur ce chapitre, la lecture de PEEK et POKE paru chez Micro Application est vivement conseillée. Bien que, comme je l'évoquais plus haut, tout ceci me semble quelque peu limité, je vous offre néanmoins un petit gag pour terminer joyeusement ce chapitre. Faites...

10 X = 8: Y = 1 :OUT 255,X:OUT 256,Y

Stoppez ce délire hallucinatoire par OUT 256,2
Voici un petit exemple que j'utilise dans mes programmes, lorsqu'un test de collision se révèle positif. Cela me permet d'agrémenter le sous-programme : VIE = VIE-1

10 FOR H = 1 TO 20:OUT &BCOO,2:OUT &BD00,49
20 FOR T = 1 TO 80:NEXT: SOUND 1,1800 + (H*50), 15,0, 0,H
30 OUT &BC00,2:OUT &BD00,43
40 FOR T = 1 TO 70:NEXT T,H:OUT &BCOO,2:OUT &BD00, 46

ACTION

Nous abordons ici le système le plus intéressant : le scrolling va être effectué par une routine en assembleur offrant de larges possibilités. Auparavant, il est nécessaire d'avoir à l'esprit quelques notions sur la structure de la Ram vidéo des CPC. Cette mémoire écran est composée de 400 lignes de 80 octets chacune. Pour faire scroller une ligne de la gauche vers la droite, il convient de procéder comme suit.
— Primo, mettre en mémoire la valeur de l'octet 80 (le dernier de la ligne).
— Secundo, transférer la valeur des 79 autres, d'un pas vers la droite. Le 79e devient le 80e, le 78e devient le 79e etc.
— Tertio, restituer la valeur du 80e octet dans le 1er.
Voici schématiquement la marche à suivre. Pour vous faciliter la tâche, je vous ai concocté plusieurs exemples. Chaque programme dispose d'un double, selon que l'on désire un scrolling à gauche ou à droite. Le premier programme est sous forme d'instruction RSX (Shift et Arrobas pour les QWERTY et « ù » pour les AZERTY). Le nom de l'instruction ainsi créée, provoquant un scrolling de toute une ligne texte, est SCROLLG.x ou SCROLLD.x (x entre 1 et 25). Pour un scrolling complet de l'écran, faire :

10 FOR H = 1 TO 80:REM 80 OCTETS
20 FOR L = 1 TO 25:REM 25 LIGNES
30 ùSCROLL,L:NEXT L,H

Bien qu'un peu longue, cette commande a l'avantage de pouvoir être utilisée par tout un chacun, sans connaissance particulière du langage machine. Deux autres routines, beaucoup plus courtes et offrant plus de possibilités, sont destinées aux utilisateurs avertis. Seule difficulté : définir trois paramètres déterminant la fenêtre à scroller et les inclure correctement dans la routine. Exemple : scrolling de la WINDOW # 1,5,25,11,15 en MODE 1.
— Le 1er paramètre est l'adresse de l'octet du coin supérieur gauche de notre fenêtre. Il se trouve à la position LOCATE 5,11. Soit la formule déterminant cette adresse :

PRINT HEX$(&C000 + (Y-1 ) *80 + (X-1)*MO)

D'après notre exemple, remplacez Y par 11 et X par 5. La variable MO prend la valeur 4 en MODE 0, 2 en MODE 1 et 1 en MODE 2. Le 1er paramètre de notre fenêtre doit être ici : &C328. Une chose encore, si vous choisissez le scrolling à droite, c'est le coin supérieur droit de la fenêtre qui est concerné (LOCATE 25,11 dans notre cas). De plus, il faudra augmenter l'adresse obtenue de 1 en MODE 1 et de 3 en mode 0, ceci parce que la formule détermine l'adresse de l'octet le plus à gauche du caractère texte.
— Le second est le nombre de lignes de pixels que comporte notre fenêtre. Ici, la formule est simple. Nous avons 5 lignes texte que nous multiplions par 8 lignes de pixels. Le résultat est donc 40.
— Le dernier paramètre est le nombre d'octets compris dans une ligne de pixels de notre fenêtre. La formule est : PRINT (FIN-(DEB-1)*MO)

D'après notre exemple, remplacer FIN par 25, DEB par 5 et MO par 2. Le résultat est 42. Voilà. Bien qu'un tantinet plus complexe qu'une commande RSX, vous devriez, après quelques tâtonnements, saisir tous les mécanismes de cette routine.

Les programmes 5 et 6 sont identiques aux 3 et 4. La seule différence réside dans la non reproduction de l'octet de bout ou de fin de ligne. Vous pouvez avantageusement remplacer un banal CLS par un scrolling de ce type pour tout l'écran. Ceux qui pratiquent l'assembleur, pourront modifier le programme afin de faire apparaître par le bord, un paysage ou tout autre décor de fond. Dans HARRIER ATTACK, le scrolling utilisé n'est guère différent de celui-ci. A vous maintenant d'utiliser à bon escient ce fabuleux savoir.

★ ANNÉE: 1988
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTEUR: CLAUDE LE MOULLEC
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» RSX-Rock  n  ScrollDATE: 2010-08-13
DL: 242
TYPE: ZIP
SiZE: 5Ko
NOTE: 42 Cyls
.HFE: Χ

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » RSX Turbo-Circle (Schneider Aktiv)
» Applications » RsxSort
» Applications » RSX-Druck (CPC Amstrad International)
» Applications » RSX-Fill (Happy Computer)
» Applications » RITA : Resident Inline Turbo-Assembler (Happy Computer)
» Applications » RSX Designer (Popular Computing Weekly)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 257 millisecondes et consultée 1766 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.