CODING ★ AS : SANS DANS ★

Assembleur ACPC n°12 - AS : SANS DANS

Encore un cours assembleur ? Oui, un de plus pour vous les petits amis. J'espère pour moi que cela ne sera pas le dernier. Bref, bonne année et pas de blagues à Popol (voir bidouilles). Mais trêve de plaisanterie et au travail, bande de petites graisseuses et bande de petits graisseux.

Programmer en assembleur n'est en fait pas compliqué. Tenez, un exemple concret. Voyez Alain Massoumipour, ce génie que nous apprécions tant et qui nous gâte mois après mois avec tous ses petits programmes plus énervants les uns que les autres. Il a été capable de programmer l'Ile tout en assembleur, après seulement un an d'expérience (pub : moi je l'achète ! Pupub). Qu'attendez-vous pour vous y mettre ? Il faut simplement et contrairement au Basic, faire l'effort de se plier aux contraintes de la machine. On doit, pour chaque opération à programmer, gratter, fouiller, décomposer, neutraliser et pulvériser tous les petits problèmes que l'on peut rencontrer. Rome ne s'est pas faite en un jour, et bien un programme ne se fait pas non plus en un jour. Prenez votre mal en patience et comprenez bien que tout le secret de l'assembleur réside dans la révélation de ses énigmes par ta machine. Lorsque vous aurez compris que programmer en assembleur n'est que jongler avec des octets, donc des valeurs de 0 à 255, plus rien ne sera difficile pour vous, si ce n'est la recherche de vitesse. Donc, ne vous en faites pas et , pour vous remonter le moral, sachez que tout vient à point à qui sait attendre ( pour les habitués de l'assembleur : tout adresse le pixel pour ceux qui détournent les interruptions ). Amen, et que le quartz soit avec vous !

ASCENDANTS DESCENDUS

C'est fou ce que je peux me répéter ces temps-ci. Alors que cela continue de plus belle. Il faut, pour ceux qui ne l'auraient pas encore fait, que vous vous procuriez un livre sur les vecteurs systèmes du CPC. C'est obligatoire pour commencer. Il en existe des tonnes, de Clef pour CPC de chez PSI à la Bible du CPC de chez Micro Application, en passant par tous les autres, ce n'est pas ce qui manque. Une fois que vous avez fait l'acquisition de ce livre, vous pouvez vous attaquer à votre Z80, avec l'aide de votre assembleur, bien entendu. Cette fois, nous allons partir à la poursuite de l'affichage des scores. Cette bête se cache partout, dans tous les jeux, qu'Us soient d'arcade ou d'aventures. Alors taïaut, taillons-le en mnémoniques !

SCORES AROUND THE SCREEN

Avant tout, il faut choisir le mode de stockage que l'on va utiliser. Le plus simple, bien entendu, est d'avoir le score en mémoire sous forme de caractères affichables. Dans ce cas, aucun problème ne se pose, il suffît de travailler sur les codes ASCII de &30 à &39 représentant respectivement les caractères de 0 à 9. Pour incrémenter et afficher un score, pas de problème. le cas est très simple (je vous conseille d'ailleurs ce genre de méthode dans vos jeux). Comme vous pouvez le voir dans le listing 1, la routine pour afficher un score est très courte et, de plus, assez rapide. Ce n'est pas, par contre, un exemple dans sa réalisation : elle est un peu antistructuration. M'enfin, on ne peut pas tout donner en même temps.

Comme vous pouvez le remarquer, on procède comme si on comptait sur ses doigts. Les chiffres sont rangés dans le bon ordre et il est ainsi facile de les afficher. On commence par le dernier, auquel on ajoute obligatoirement un. Si, une fois l'incrémentation effectuée, le caractère est un chiffre, tout va bien. Sinon, on charge 1 dans l'accumulateur pour modifier le caractère suivant, et ainsi de suite jusqu'au cinquième. Cette routine est bien pensée : dans le cas où il n'y a pas de retenue, l'affichage se fait instantanément sans que l'on soit obligé de passer sur les cinq caractères. Il est en effet possible, dans ce cas, de sortir tout de suite de la boucle qui n'est là que pour s'assurer du non débordement des données sur le programme. Avec cette routine, on peut également additionner 10 ou 100 en modifiant B, ne contenant respectivement plus que 4 ou 3, et HL ne pointant pas sur FINSCO mais, encore respectivement, sur FINSCO-1 ou FINSCO-2.

Si vous changez la ligne contenant LD A,#30 en SUB 10, vous pouvez rentrer par AUX avec u ne autre valeur dans A Ainsi additionner 20, 3 ou 600 ne pose pas de problèmes. Voilà une bonne démonstration sur l'art et ta manière de trouver le meilleur codage des données en fonction de leur utilisation. Mais, comme je l'ai déjà dit. cette forme de travail est très simple. Imaginons maintenant une situation légèrement plus complexe (mais je me soigne).

OH CATARINETTA-BELLAMISSIX, ÇA SE CORSE

Le problème consiste à transformer une valeur codée sur 16 bits (de 0 à 65 535) en caractères affichables, et en décimal de surcroît Pas simple, hein ? Bon, je compte jusqu'à dix pour vous laisser le temps de réfléchir. FOR I=1 TO 10:NEXT. Ca y est ! Pas de réponses ?

Très bien, alors voici la solution au problème que nous allons décomposer ensemble. Pour passer d'une valeur quelconque à une suite de caractères affichables en base dix. bien des solutions se présentent En voici une qui est des plus simples à comprendre. Il faut décomposer le nombre en une suite de multiples de dix, du plus grand vers le plus petit, de manière logique. Lisez ceci, prenez petit papier et petit crayon et vous verrez que cela marche. Passons sans plus attendre à l'action (anticalcaire). Comment savoir combien il y a de fois 10 000 dans notre nombre ? Pour cela, on lui soustrait 10 000 jusqu'à ce qu'il y ait débordement et que l'on passe sous zéro. Pendant ce temps, à chaque soustraction, nous incrémenterons un registre contenant, à ta fin, le nombre de dizaines de mille qu'il suffira de convertir en caractères affichables en lui additionnant 48, soit &30, soit encore le code ASCII du zéro. On procédera ensuite de la même manière pour les milliers, les centaines, les dizaines, et enfin les unités qui couleront alors de source. Mais trêve de niaises causeries et passons au listing 2.

Comme vous pouvez le remarquer, c'est aussi simple de le dire que de le programmer. Nous avons utilisé un sous-programme pour ne pas avoir à écrire cent fois la même routine servant simplement à compter le nombre de fois où DE est dans HL. Dans le cas où il y est plus d'une fois, la boucle avec le JR (et wing...) est effectuée plusieurs fois. HL et A sont ensuite rétablis pour ne pas fausser la suite des calculs sur ce double registre. Notez que A subit un XOR avant que HL ne soit modifié, pour que la retenue ne soit pas porteuse d'une fausse information. Dans le cas présent, elle contient bien zéro et le résultat de la soustraction de DE du registre 16 bits HL n'est pas faussé. Notez que le sous-programme ne finit pas par un RET qui se trouve déjà à la sortie du JP #BB5A Pour les unités, on traite directement L, car H contient obligatoirement zéro. Nous aurions pu faire de même pour les centaines et les dizaines, mais nous aurions été obligés de réécrire une routine de soustraction. D'ailleurs, cette programmation, nous vous en laissons le soin. Il faut que cela soit fait question de rapidité et de style. Ça c'est vrai, ça. comme dirait la mère Denis (c'est moi aussi). Pourquoi faire des opérations lentes sur 16 bits alors qu'il est possible de travailler sur 8 seulement Tâchez de vous rappeler ceci ; c'est un gage de rapidité et d'optimisation. Autre chose, lors du traitement des unités, nous avons fait un OR au lieu d'un ADD qui, dans ce cas, vu la configuration binaire, exécute exactement la même opération. N'utilisez pas systématiquement cette solution et faites bien attention, à chaque fois, que les bits ne se chevauchent pas. Sans quoi, le OR ne se transformera pas en addition, mais bel et bien en OR (ce sera alors la ruée fantastique sur ce métal ika!).

AS : PIRINE

Quand même, je l'ai bien méritée, moi, mon aspirine, car ces astuces m'ont assommé, hélas. C'est assis que je m'assoupis en espérant vous retrouver le mois prochain. Même jour, même heure et même pêche. Alors à plus, et que vos CPC cépessent en paix.

Sined l'assodé , A100% n°12

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

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

Lien(s):
» Coding » Assembleur ACPC n°22 - Le CLS le plus rapide sur CPC - Part II
» Coding » Assembleur ACPC n°19 - Création d'RSX
» Coding » Assembleur ACPC n°20 - Convertion numerique
» Coding » Assembleur ACPC n°16: Organisation des pixels à l'écran
» Coding » Bidouilles ACPC n°14 - Les secrets du GATE ARRAY (1/2)
» Coding » Bidouilles ACPC n°15 - Les secrets du GATE ARRAY (2/2)
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 497 millisecondes et consultée 1768 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.