CODING ★ L'AS HUIT DU SERRE PAN ★

Assembleur ACPC n°25

Coucou ! me revoilà. On était resté le mois dernier avec un écran et ses couleurs et un cadre fait par des CHR$(143). Le Border était également mis, mais notre cage à serpent restait vide. On saute dans la gueule du loup (quel cirque !).

Avant toute chose, on modifie le programme précédent en remplaçant le CHR$(143) par CHR$(232), qui représente un carré vide. Pourquoi ? Parce que lors des tests de collision, on utilisera l'équivalent de COPY CHR$ du Basic et le carré plein du caractère ASCII 143 est pris par cette routine comme un espace (CHR$(32)), et croyez-moi, c'est le caca assuré. Je vous donne le programme tout entier. Il peut être saisi et lancé par un CALL 40000. Pour plus de détails, suivez le guide (c'est moi, qu'il faut suivre, OK ?).

LE GUI DADDY

Il a dit qu'on initialise les variables avant de lancer le prog. Vous verrez plus tard à quoi elles correspondent. On entre ensuite dans une nouvelle ère, qui est la boucle principale du jeu. Pour cela, je me dois de vous explica-turer la technique employée pour le bon déroulement de ce mini jeu.

  1. On teste le clavier durant un court moment pour voir si une touche est enfoncée. Si oui, on la stocke dans un octet et on revient à la suite. Le serpent, comme tout serpent digne de ce nom, possède une tête et une queue. On utilise pour cela les deux caractères ASCII 231 et 230, qui représentent des boules pleine et creuse. La tête en vert et le corps en blanc.
  2. On affiche à la place de la tête un caractère représentant le corps du serpent.
  3. On modifie, en fonction de la touche enfoncée par le joueur, la position de cette même tête (un cran à droite, gauche, haut ou bas).
  4. On teste la nouvelle position. De trois choses l'une. Ou cette emplacement est pris par un caractère représentant le corps, ou par un autre représentant un des bords de l'écran, ou cet emplacement est vide. Dans le premier cas, le joueur a perdu, dans le deuxième aussi, alors que dans lé troisième cas on continue avec le...
  5. On affiche la tête au nouvel emplacement.
  6. Il existe une tempo pour ralentir le jeu. Pour corser le tout, on diminue cette tempo pour accélérer le jeu au fur et à mesure de son déroulement.
  7. On incrémente le score, ce qui correspond au nombre de caractères affichés pour le corps.
  8. On relance le tout, tant que le joueur n'en a pas marre.

Cela représente, d'une façon simple, un organigramme. Sans ce genre de plan, vous aurez beaucoup de mal à écrire des programmes en assembleur.

DECOR PTIT CON

Vous comprenez maintenant la procédure logique que va suivre le programme, hummmm ? Il ne nous reste plus qu'à décortiquer les sous-routines pour que la lumière soit.

LE CLAVIER

Le premier CALL appelle la routine qui doit tester et éventuellement stocker la touche du clavier enfoncée par le joueur. Lors de l'initialisation, on place dans l'octet TOUCHE la valeur 243 qui est la trace de la touche fléchée pointant à droite. On utilise la mnémonique DJNZ, qui crée ainsi une boucle de 256, car vous le voyez comme moi, le registre -B est chargé avec la valeur 0. En le décrémentant aussi zarbi que cela paraisse, il passe à 255 ; l'inverse serait vrai parce que incrémenter 255 sur un registre 8 bits donne zéro. Dans les deux cas, le Flag (ou drapeau en français ou encore Carry pour les copines) C est mis et vous permet le cas échéant de faire des branchements conditionnels (voir Cent Pour Cent 24). Revenons à nos bêtes qui broutent dans la prairie. Le vecteur BB1B teste le clavier. Si une touche est enfoncée, sa valeur ASCII sera mise dans l'accu et le Flag C sera mis à 1. Donc, si après l'appel de Victor, la Carry n'est pas mise à 1, on saute la ligne qui stocke la touche et on boucle 256 sur cet appel système (rassurez-vous, ça va très vite). Il va de soi que si le joueur appuie sur une touche, on note comme un grand sa valeur dans l'octet portant le label TOUCHE. Quand notre boucle est finie, on revient au point d'appel par l'instruction RET.


DE PLUS EN PLUS LONG

La deuxième sous-routine remplace la tête de serpent par un caractère formant son corps. On emploie dans ce cas le PEN 3. Inutile de revenir sur le père BB90 ? Le label XY est formé par deux octets. Dans le premier se trouve la valeur en X de la tête (1 à 40), alors que le deuxième garde bien au chaud la valeur de cette même tête en Y Etant donné que pour positionner le curseur à l'écran (LOCATE ou BB75) on doit placer dans H le numéro de la colonne en coordonnées logiques, et dans L le numéro de la rangée en coordonnées logiques, on peut faire direct LD HL,(XY) qui charge d'un coup les deux registres. BB75, je ne reviens pas sur lui car vous êtes censés le connaître par cœur. Afficher le caractère 230 me paraît également très clair.

LA SUITE
DANS LE DESORDRE

Les sous-prgrammes ne sont pas écrits dans l'ordre de leur apparition dans la boucle principale, mais cela ne change rien. La suite physique des sous-routines nous mène à l'affichage de la tête. Est-il vraiment utile de vous expliquer ce sous-programme qui ressemble comme deux gouttes d'eau au précédent ?

Nous verrons le mois prochain la suite et la fin de notre petit jeu. Dans l'attente de cette promesse, étudiez ce qui a été dit. Mettez-y votre grain de sel si vous le voulez et, pourquoi pas, essayez de comprendre la suite qui ne doit pas poser trop de problème pour peu que vous vous donniez un peu de mal.

On m'a souvent demandé conseil pour l'achat de livres traitant de l'assembleur pour débutants. Les Clefs pour Amstrad sont évidemment indispensables pour la suite de votre travail, même si ce livre est introuvable. Par contre, je ne saurais trop vous conseiller l'Assembleur de l'Amstrad CPC464 et 664 édité chez PSI (si vous ne le trouvez pas, il vous reste la solution de vous jeter dans la Seine ou sous le premier métro venant de la Porte d'Orléans). Il est truffé de bons tuyaux et aurait pu s'appeler Hoggy (eh oui, Hoggy les bons tuyaux). Un dernier conseil pour tous ceux qui aiment l'assembleur : allez faire un tour du côté de la rue Belleville dans te XLXe à Paris. Au 79, vous trouverez un petit restau antillais hyper sympa qui mérite d'être visité le samedi soir, car...

PS : Le mois passé, j'ai oublié de mettre dans le panier des sauts conditionnels les instructions JR. Voilà qui est réparé.

Zède, le Snake charmeur , A100% n°25

Page précédente : Assembleur ACPC n°24

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

Lien(s):
» Coding » Bidouilles ACPC n 05 - Le PSG (2/2)
» Coding » Assembleur ACPC n°08 - Initiation : Les CALL / JR
» Coding » Bidouilles ACPC n°43 - Les vecteurs system (1/6 : Clavier, mode texte , les sons)
» Coding » Assembleur ACPC n°22 - Le CLS le plus rapide sur CPC - Part II
» Coding » Assembleur ACPC n°10 - Initiation : Les decalages
» Coding » Bidouilles ACPC n°40 - Gestion d'erreurs des routines disques
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 388 millisecondes et consultée 1769 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.