CODING ★ INITIATION A L'ASSEMBLEUR ★

Assembleur ACPC n°11

AS : TERISQUES ET PERILS

Comme promis, pour une fois qu'il tient ses promesses celui-là, nous allons, enfants de la partie, faire notre premier vrai programme en assembleur. Ouais ! Génial ! Clap, clap, clap, ( extase, joie, bonheur, etc. ). A partir d'un listing de conception 100 % Cent Pour Cent, nous aborderons ( par bâbord, mille sabords ) les coins les plus étranges (de cake) de ce langage si machine.

Bon, fini de rire. C'est ici que débutent réellement les cours assembleurs de papy Sined. Fini les explications imbitables ( que l'on ne peut biter, c'est-à-dire transformer en bits ) et les listes d'instructions rébarbatives ( sorties tout droit de la bouche d'un barbare ). Nous allons maintenant utiliser toutes les mnémoniques que nous avons vues dans les initiations précédentes. Mais là, c'est plus pour de rire, le moindre faux pas et c'est la laborieuse plan-touille du CPC qui se retrouve illico presto aux fraises. Alors, première étape, on se jette sur son CPC que l'on allume. Deuxième étape, on met la pancarte "Do not disturb pendant la sieste" sur sa porte. Troisième étape, on engueule bobonne parce qu'elle a rangé les disquettes ce qui fait qu'on ne trouve plus l'assembleur. Ça y est, maintenant tout est prêt, crions donc ensemble le fameux cri de guerre qu'utilisait Géronimo avant Chakatak : Yapukah !

SCROLLINGS AROUND THE SCREEN

Alors, nous allons faire scroller un message sur l'écran. A priori, c'est simple. Il suffit de faire un petit organigramme de ce que l'on va faire par la suite. Comme disait Lanico Starcrav, un ex toujours grand ami de présentement moi-même, un gros problème n'est qu'une suite de petits problèmes. Donc, lorsque l'on se trouve face à un gros ennui, il suffît de le décomposer en une suite de petits ennuis résolvables simplement un par un. Programmer le défilement d'un message quelconque n'est pas une mince affaire, mais si on décompose ce scrolling en une suite de petits travaux, la programmation devient tout de suite plus simple et plus limpide. Avant tout, il faut prévoir deux versions principales. Une utilisable sous Basic, et l'autre directement appelable en assembleur. Mais ceci n'est qu'un petit problème sur lequel nous reviendrons plus tard. Pour faire défiler un message sur une ligne, il faut avant tout décaler la ligne d'un caractère vers la gauche, puis afficher le caractère suivant de la chaîne en fin de ligne. Si on répète cette opération plusieurs fois, le message se décalera vers la gauche, ce qui est normal. puisqu'on lit de la gauche vers la droite. Poursuivons plus encore notre dépeçage. Pour décaler d'un caractère vers la gauche, il faut en fait décaler huit lignes de pixels. Pour décaler huit lignes, il faut décaler huit fois une ligne (cela paraît bête, mais il fallait y penser). Pour décaler une ligne, il faut décaler un par un les octets qui la composent. Une fois les octets des huit lignes de pixels formant la ligne de caractères décalés, il suffit de faire un Locate en fin de ligne (pour positionner le curseur) et pour finir. inscrire le caractère de la chaîne, si elle n'est pas finie.

C'est simple, non ? En fait le truc pour programmer en assembleur, c'est de décomposer au maximum le programme à réaliser, pour le transformer en une multitude de petites tâches simples comme le jour. La nuit, on dort Du moins normalement car vous avez dû vous apercevoir que lorsqu'on touche à l'informatique, les nuits ont tendance à devenir blanches, voire même inexistantes. A ce sujet je vous conseille un petit truc : ne donnez pas la première nuit, vous dormirez à coup sûr à la deuxième (quoique cela ne marche pas à tous les coups). Une fois que vous avez réduit votre gros problème en plein de petits, il suffit de les anéantir un par un. Eh. le petit frisé là-bas qui di( que c'est facile à dire. Je vais te montrer qu'on peut aussi le faire. Mais avant tout, trois lignes de silence pour ce pauvre Robby qui est parti sous les drapeaux servir la France. Il doit penser à nous, alors rendons-lui la pareille et prions tous ensemble pour qu'il soit le moins malheureux et maltraité possible.

Voilà, les trois lignes de silence pour Robby sont passées, alors au boulot (Bisou Biro).

COMMENT ÇA MARCHE, C'EST TRES SIMPLE

Les lignes 3 et 4 ( wouahlauté, y dit : "3 4" ci y dit qui c'est qui dit : "3 4". C'est comme si j'dis "3 4" et que j'dis qui c'est qui dit : "3 4". Paf ! une baffe pour le chef qui vient d'essayer de faire du Coluche). Ces lignes, donc, servent à définir où se logera le programme en mémoire, et à quelle adresse il sera appelé. Sous Dams, vous devrez remplacer EXEC par ENT.

Les lignes 6 à 19. nous les reverrons plus tard.

La ligne 20 permet de sauvegarder HL, pour ne pas qu'il soit détruit ou perdu lors des travaux faits avec lui. Il contient, à ce moment de la routine, l'adresse du caractère à écrire.

La ligne 21 contient le Call permettant de se synchroniser avec le balayage écran, pour ne pas que des schmurs voraces viennent interférer avec notre beau décalage mémoire (Frame en Zîkba. comme dirait le poto Jean-Pierre).

La ligne 22 positionne le double registre HL pour qu'il pointe sur le second octet de première ligne de pixels de la dernière ligne écran.

Ensuite, dans la ligne 23, on charge 79 (4F en hexadécimal) dans le registre B, ce qui est le nombre de décalages d'octets à faire par ligne.

En ligne 24, on sauvegarde encore HL qui contient maintenant l'adresse du second octet de la ligne en cours de décalage.

Lignes 25 et 26. on copie HL dans DE par l'intermédiaire de la pile. On aurait aussi pu faire LD E,L et LD D.H ou inversement, mais je trouve que c'est plus marrant comme cela. C'est aussi moins rapide, mais on s'en fout, dans le cas présent, nous n'avons pas besoin d'aller vite.

En ligne 27, nous décrémentons DE qui contient ainsi l'adresse de l'octet de la première ligne en cours de modification.

De la ligne 28 à la ligne 32. on met le contenu de l'adresse pointée par HL dans celle pointée par DE, ce qui revient à décaler à gauche d'un octet. On incrémente ensuite les deux registres pour les l'aire avancer sur la ligne. L'opération est répétée 79 fois (soit le contenu de B).

Des lignes 33 à 35, on charge 2048 dans DE, on récupère l'adresse de la ligne en cours sur la pile, et on lui additionne DE pour passer à la ligne suivante.

Ligne 36. si la Carry a été positionnée. cela signifie que HL ne pointe plus dans Técran, et que nous avons fini de décaler les lui il lignes de pixels.

Lignes 37 et 38. H contient 80 (50 hexa). L contient 25 (19 hexa) et on fait un petit Locate tout bête en appelant le vecteur système approprié.

En ligne 39 et 40. on récupère l'adresse du caractère à imprimer empilée au début, et on le charge dans A.

En ligne 41, 42 et 43, on incrémente HL pour qu'il pointe sur le caractère suivant, on regarde si c'est la fin de chaîne (si A=0),et on sort si c'est le cas.

Ligne 44 et 45. on écrit le caractère situé dans A et on boucle. Ligne 46 et 47. on écrit un espace pour ne pas doubler le dernier caractère de la ligne, et on s'en retourne par le RET situé à la fin de la routine BB5A.

REVENONS-Y GAIEMENT

Tout à l'heure, nous vous avons parlé des lignes de 6 à 19. Elles servent seulement à récupérer l'adresse de la chaîne de caractères envoyée par le Basic. Le dernier paramètre d'un Call est dans DE. Pour une chaîne de caractères, c'est l'adresse d'un descripteur que le Basic nous envoie. Ce descripteur est fait de la manière suivante : le premier octet contient la taille de la chaine. et les deux suivants son adresse avec le poids faible de celle-ci d'abord. La petite routine sert à récupérer l'adresse et à mettre un zéro à sa fin.

SEE YOU LA PROCHAINE FOIS

Encore une fois, je n'ai plus de place pour écrire mes bêtises. Je vous laisse donc en disant pour la énième fois : le dernier Métalica est béton d'enfer (pour les hardos qui aiment le gras dur). Bécot à tous et à la prochaine. PS : Ayez une petite pensée tous les jours pour notre petit Biro qui est parti au SN. cela lui tiendra chaud au cœur.

Sined l'assemblar , A100% n°11 p52-53

Page précédente : Assembleur ACPC n°10: ADES un assembleur d'enfer

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

Lien(s):
» Coding » Assembleur ACPC n°17
» Coding » Bidouilles ACPC n°17 - Le catalogue AMSDOS
» Coding » Assembleur ACPC n 04 - Initiation : Débuter avec sont assembleur
» Coding » Bidouilles ACPC n°48 - Les vecteurs system (6/6)
» Coding » Assembleur ACPC n°15 - La mémoire écran
» Coding » Assembleur ACPC n°44 - La programmation HARD du PSG
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 239 millisecondes et consultée 2050 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.