CODING ★ ESCARRE, GO AWAY ! ★

Bidouilles ACPC n°32

C'est qu'on en a chopé des ampoules, à essayer de faire de ce listing Assembleur un programme digne de ce nom. Espérons que nous y sommes parvenus.

Dans nos élucubrations, une contrainte gigantesque nous a considérablement ralentis : le source devait être le plus court possible pour ne pas trop empiéter sur le texte l'accompagnant. Que de nuits passées... Les ampoules, ça va encore. Je ne vous parlerai pas de ce que nous avons aux fesses à force de rester assis devant le CPC. A part cela, nous n'avons pas trop mal réussi notre affaire. Le but était en fait de réaliser une routine capable de renvoyer une adresse à chaque appel. Nous ne parlons évidemment pas de l'adresse de Miss X, ni de celle de Robby qui, s'il n'est pas le plus intelligent de nous tous, est indubitablement le plus beau. Bref, ces maudites adresses représentent en fait les différents points haut-gauche d'un sprite qui suivrait un chemin spirale centrifuge rectangle, puis spirale centripète, rectangle itou ( pour les scatos, ne pas confondre avec vermifuge et pètophile ).

L'idée de ce genre de trajectoire a dû venir à Poum lorsqu'il s'est mis à rêver de Tron. Vous vous rappelez ces petites motos qui laissent des murs derrière elles ? Eh bien, le déplacement de notre brave point fait un peu de même. Il s'enferme dans un rectangle et tournicote jusqu'à ce qu'il se trouve sur une trop petite surface pour y déambuler. A ce moment là, et pour obtenir un mouvement de type infini, il écrase ses traces jusqu'à son point de départ, d'où il repart pour recommencer sa ronde éperdument folle et inutile.

Rien de bien compliqué, à première vue. Ecrit linéairement, ce listing aurait été un jeu d'enfant, mais voici ce que nous nous sommes fixé :

  • N'utiliser qu'une routine d'incrémentation et de décrémentation pour tous les compteurs, qu'ils soient verticaux ou horizontaux.
  • Que le programme soit paramétrable pour plus de facilité d'emploi. Cela paraît simple ? OK, on y va.

DES QUARTS, CASSONS !

Quatre parties pour le prix d'une. C'est une belle affaire, ma bonne dame. On peut les regrouper en deux parties distinctes : l'horizontale et la verticale. Dans chacune de ces deux subdivisions, il existe deux cas bien dissociables. Le premier et le second qui sont respectivement celui dans lequel on avance et l'autre chargé du recul (ND Sined : Lipfy, tu me copieras cent fois la phrase « je ne dis pas de grossièretés pendant les cours Assembleur »). Voici maintenant l'affectation de chaque registre du Z80 et des quelques variables de la routine, par ordre d'apparition, comme à la télé :

  • STOP définit l'ordonnée {coordonnée verticale) à laquelle le tracé devra s'arrêter lors d'une décrémentation sur cet axe. Cette variable doit être strictement inférieure à la moitié de la longueur de la spirale.
  • ECRAN et HL contiennent l'adresse visée sur l'écran. Cette adresse est comprise entre 0 et &4000 (16384) ce qui permet de l'adapter à toute mémoire vidéo, qu'elle soit située en &4000, en &C000 ou encore ailleurs.
  • STAT est un octet contenant des bits drapeaux. Le bit zéro, s'il est à un, indique que l'axe actuel est le vertical. Dans le cas contraire, le travail est réalisé horizontalement. Le bit un, s'il vaut zéro, force la progression selon les deux axes à être croissante, sinon, décroissante. Le bit deux, s'il vaut un, tend à ce que la courbe s'éloigne du centre de l'escargot (centrifuge) et inversement qu'il s'en rapproche (centripète). Voilà tout pour lui, et avec trois bits, il n'est pas mal loti.
  • XMAX : abscisse maximale servant à délimiter l'évolution du pointeur d'adresse courant.
  • XPOS : position courante de l'adresse écran virtuelle.
  • XMIN : Abscisse minimale servant à arrêter le retour du pointeur d'adresse.
  • XFIN : limite maximale de progression sur l'axe horizontal du pointeur vers la droite de l'écran.

Les mêmes variables préfixées de Y ont les mêmes caractéristiques que les précédentes. La limite minimale est zéro pour les deux axes. En ce qui concerne l'algo, le, voici discrètement glissé en attendant les explications complètes du listing que nous ne pourrons vous fournir que le mois prochain, faute de place.

Le pointeur part d'en haut, à gauche de l'écran. Il se dirige, bon an, mal an, vers le côté droit de l'écran. Lorsqu'il atteint XMAX, il lui retranche deux. Il tourne alors à droite, ce qui le fait descendre. Lorsqu'il tombe sur YMAX, il lui joue le même tour qu'à la limite précédemment fixée. Il retourne à droite, tentant de rejoindre la limite gauche de l'escargot nommée XMIN. Au moment précis où il l'atteint, il lui ajoute deux et se met à monter jusqu'à ce qu'il tombe sur YMIN. Dans ce cas, deux solutions. Si YMIN=STOP, alors on ajoutera deux aux maxi et on les retranchera des mini en arrivant à leur borne, histoire d'éloigner le tracé du centre de l'escargot. Seul YMIN revenu à 0 refermera dans ce cas le cercle infernal. Si YMIN est différent de STOP, alors les choses se poursuivent jusqu'à la condition remplie.

LOGO EST LENT

Si les torts ruent, alors nous pouvons mourir pour ne pas vous avoir livré toute la routine d'un seul coup, avec ses commentaires et ses remarques. En attendant le mois prochain, essayez de faire quelque chose avec cette trajectoire. Qui sait si elle ne cache pas une surprise.

Poum & Sined, from Ringard Soft , A100 n°32 , Dec90

Page précédente : Bidouilles ACPC n°31 - RSX

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

Lien(s):
» Coding » Bidouilles ACPC n°32 - Bip, son and sound
» Coding » Assembleur ACPC n 07 - Initiation : Les INC / DEC / CP
» Coding » Assembleur ACPC n°45 - Le directeur rit ( Modification du catalogue AMSDOS )
» Coding » Bidouilles ACPC n°37 - FDC en mode direct
» Coding » Assembleur ACPC n 04 - Initiation : Débuter avec sont assembleur
» Coding » Assembleur ACPC n°16: Organisation des pixels à l'écran
Je participe au site:

» 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 643 millisecondes et consultée 1540 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.