CODINGCHRONIQUE A100% DES LOGON SYSTEM ★ RASTER (suite et fin) ★

Logon System ACPC n°42 - Raster suite et fin ...Coding Chronique A100% Des Logon System

Tout d'abord je vous présente toutes mes excuses pour l'incident du mois précédent: eh oui! peut-être que certains d'entre vous (ceux qui tapent les programmes) ont constaté qu'il manquait le programme Basic utile pour créer les tables de mouvement du raster ( zut alors! c'est donc pour cela que le raster était immobile... ).

Le listing doit normalement (je dis bien: normalement) se trouver parmi ces pages.

Une petite remarque au sujet du but que le Logon System s'est fixé lorsque nous avons commencé cette rubrique: le but des programmes d'exemple n'est pas de vous fournir des routines utilisables telles quelles dans vos petites démos, mais bel et bien de vous faire comprendre le principe des routines afin que vous puissiez ensuite les récrire (à votre sauce) pour vos propres réalisations. Donc inutile de nous demander des routines prêtes à l'emploi directement intégrables dans un autre programme, nous ne fournissons que des exemples: le lecteur doit lui aussi faire un effort de compréhension ( ça sert à quoi que Logon se décarcasse ? ).

VA Y AVOIR DU BOULOT

Comme convenu, nous allons continuer sur les rasters. Vous allez me dire que cela fait maintenant le troisième article à leur sujet: pour l'instant nous avons seulement vu la partie cachée de l'iceberg, car j'ai uniquement parlé de rasters lignes ou bien de split rasters simples, mais il me reste encore àvous parler des rasters dans plusieurs encres (impression de passage derrière puis devant un plan), rasters en diagonale, scrolling en split rasters, défilement d'un damier avec des rasters ( il suffit de regarder les démos allemandes pour voir de nombreuses utilisations de ces rasters).

Au niveau de la programmation, les plus simples à réaliser sont les rasters en diagonale, car il s'agit en fait de simples split rasters dont la durée de synchronisation ligne est soit supérieure soit inférieure à 64 microsecondes.

Le schéma 1 est la représentation symbolique du déroulement d'une routine de raster en diagonale. Dans notre programme d'exemple ( qui se trouve dans ces pages, enfin qui devrait s'y trouver... ), comme on désire faire une bande de couleur, il faut qu'elle soit encadrée de deux changement de couleur en noir. On peut donc déjà prévoir la durée totale des instructions contenues dans la boucle, à chaque changement de couleur on peut compter 4 microsecondes puisque chaque changement de couleur s'opère grâce a une instruction OUT; il faut en plus compter la gestion d'une variable qui servira de compteur de boucle ( la variable est sur 8 bits puisqu'on ne dépassera pas 256 lignes de rasters), donc il nous faut comptabiliser un DEC x ( décrémentation d'un registre 8 bits quelconque) apres la mise à jour par le DEC de la variable. Il ne faut pas oublier de tester la condition de sortie de boucle et, si cette condition est fausse, de continuer la boucle, ce qui correspond à un saut conditionnel qui utilise 3 microsecondes. Dans l'exemple que j'ai choisi (j'ai encore mon mot à dire dans cet article: je choisis l'exemple que je veux, na ! ) il y a sept couleurs qui se succèdent dans le raster en diagonale, au nombre desquelles on doit ajouter le changement de couleur pour passer en noir, puis la mise à jour du regisye ainsi que le saut conditionnel, donc on obtient:

8 OUT + un DEC + 1 JP c'est-à-dire 8* 4+ 1 +3=36 microsecondes.

Attention, car on ne doit pas se hâter pour en déduire la durée de temporisation pour la boucle, car dans notre exemple, et pour des raisons de facilité, je me suis servi des registres secondaires (j'espère que je n'ai pas à vous rappeler que ces registres sont accessibles en utilisant l'instruction EXX), ce qui nous oblige à ajouter encore deux microsecondes (puisque EXX en prend une seule mais qu'il y a deux EXX dans la boucle) et nous donne pour total 38 microsecondes.

La temporisation de la boucle sera donc de 64 - 38 = 26 microsecondes. C'est le fait d'ajouter ou de soustraire 1 microseconde à cette temporisation qui fera que l'on obtiendra soit un raster en diagonale allant de la droite vers la gauche soit l'inverse. Je n'ai pas à vous répéter qu'il nous faudra mettre autant de fois l'instruction NOP qu'il y a de microsecondes nécessaires dans la boucle.

PASSONS A AUTRE CHOSE

Comment réaliser un scrolling en caractères géants sans avoir à afficher d'octets et sans faire de rupture ? Eh bien, c'est très simple! Il suffit de faire un scrolling en split raster. Je sais, c'est facile à dire mais à faire c'est une autre histoire. Je vais essayer de vous expliquer à peu près le principe de ce type de scrolling (j'entends déjà les remarques désobligeantes sortant de la bouche des autres membres du groupe... bouh, les vilains !). Tout d'abord, il faut considérer chaque lettre à faire dé{iler comme un tableau constitué de lignes et de colonnes; dans ce tableau, chaque élément est un pixel qui sera soit allumé, soit éteint. Si l'on considère qu'un split raster est lui-même constitué de lignes et de colonnes, on peut facilement dessiner les pixels d'une lettre en un tableau de couleur géré par le split raster (un pixel en largeur correspond àun changement de couleur sur la ligne et en hauteur correspond à un groupe de plusieurs lignes). Pour comprendre la représentation, j'ai fait un petit schéma (il s'agit du schéma 2) qui, je l'espère, est plus explicite que ma prose: parfois un simple dessin aide beaucoup plus à la compréhension que de longues phrases, surtout si le sujet concerne le graphisme et les animations de couleurs.


Déroulement de programme de Rasters en parallèle avec le progression du cannon a éléctrons


Déroulement de programme de Rasters en parallèle avec le progression du cannon a éléctrons

Les deux schémas que j'ai ajoutés à l'article sont seulement une représentation symbolique en fonction du temps, dans le deuxième schéma les instructions OUT 1 et OUT 0 n'existent pas en assembleur mais cela représente en fait le passage d'un pixel du split raster soit en couleur allumée soit en couleur éteinte (la couleur éteinte est la même que celle du fond, c'est logique) ; dans le schéma la disposition des OUT 0 et des OUT 1 est totalement arbitraire.

Maintenant que nous sommes censés savoir représenter une lettre grâce à un split raster, il nous faut la faire bouger.

ATTENTION SVP

Le tout est de connaître ce qui conditionne la position du split raster par rapport au bord de l'écran; en fait, cela va dépendre de l'instant ou le split raster va être affiché en fontion de la position du canon à électrons. Plus clairement, on peut dire que cela dépend de la durée entre le HALT de synchronisation du split raster et le début du déroulement de la boucle d'instructions de changement de couleur. Donc, pour déplacer le split raster, il faut installer une temporisation variable avant d'exécuter la boucle composée des OUTs de changement de couleurs; cette temporisation variable va permettre selon sa durée (cette durée est exprimée en microseconde et est réalisée avec des NOPs) de positionner le split raster par rapport au bord du moniteur. Le petit exemple qui sert d'illustration pour cette partie de l'article est une routine qui réalise un quadrillage avec des .split rasters, et ce quadrillage donne l'impression de se déplacer en utilisant le principe de temporisation variable cité plus haut. Vous constaterez par vous-même que l'inconvénient des split rasters est qu'ils peuvent au minimum se déplacer à l'écran que de deux octets par deux octets (un changement de temporisation d'un NOP dans le programme donne un déplacement de deux octets à l'écran), ce qui explique pourquoi les scrolls en split raster sont si rapides et si fatigants pour les yeux.

En conclusion, les scrolls en split raster c'est bien beau mais c'est à utiliser avec beaucoup de parcimonie et surtout à ne pas mettre en cas de scrolling racontant une longue et fatigante histoire, sinon personne ne regardera votre démo jusqu'a la fin, de peur d'avoir une conjonctivite et une tête comme une citrouille. Bon, je vais clore ici cet article et en promettant de ne plus vous embêter avec les rasters (au moins pas pendant un mois...).

DiGiT, APCPC n°42, p36-37-38

★ ANNÉE: 1992
★ AUTEUR: DIGIT

Page précédente : Logon System ACPC n°41 - Raster suite...
★ AMSTRAD CPC ★ DOWNLOAD ★

Other platform tool:
» logon42DATE: 2012-08-27
DL: 98 fois
TYPE: image
SIZE: 483Ko
NOTE: w608*h2720
 

Je participe au site:
» Newfile(s) upload/Envoye de fichier(s)
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Logon System ACPC n°41 - Raster suite...
» Coding » Logon System ACPC n°31 - Le CRTC
» Coding Src's » Test CRTC v1.1 (Longshot)
» Coding » Logon System ACPC n°46 - Une demo décortiquée
» Coding » Logon Menu
» Coding » Logon System ACPC n°35 - Le Gate Array

QUE DIT LA LOI FRANÇAISE:

L'alinéa 8 de l'article L122-5 du Code de la propriété intellectuelle explique que « Lorsque l'œuvre a été divulguée, l'auteur ne peut interdire la reproduction d'une œuvre et sa représentation effectuées à des fins de conservation ou destinées à préserver les conditions de sa consultation à des fins de recherche ou détudes privées par des particuliers, dans les locaux de l'établissement et sur des terminaux dédiés par des bibliothèques accessibles au public, par des musées ou par des services d'archives, sous réserve que ceux-ci ne recherchent aucun avantage économique ou commercial ». Pas de problème donc pour nous!

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 098 millisecondes et consultée 1083 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.