CODING ★ AS : EST LE TRAIN QUI TRAINE ★

Assembleur ACPC n°18

Eh non les potes, ce n'est pas le train qui traîne la vache, mais simplement le train qui traîne tout court. Et par les temps qui courent traîner tout court n'est pas aussi évident qu'on pourrait le croire. Alors je cours pour traîner le train qui traîne tout court.

A Cent Pour Cent comme vous le savez depuis toujours, et ce ne sont pas les tonnes de lettres qui arrivent tous les jours à la rédaction qui me contrediront, nous sommes loin, mais très loin d'être vache (car on ne traîne pas les vaches). Et comme nous avons adopté la devise mondialement connue : chose promise chose dure, nous pourrons enfin vous filer la routine béton du petit train qui passe pour pouvoir mieux repasser vos chaussettes.

Avant de me lancer dans les explications de la routine, je vous préviens d'emblée que moi et la musique, on fait trois (je me compte pour deux), et comme y en a maire de demander à Poum de nous trouver une zolîe zizic pour animer le train qui traîne depuis trop longtemps, vous aurez droit à un train qui traîne en silence (et si vous n'êtes pas content, vous trouverez le Poum en question tous les mercredi à ia rédaction, faites-lui sa fête pour qu'il ait plein de regrets).

UN TRAIN PAS COMME LES AUTRES

A la base de lancement, le principe est d'une simplicité enfantine. On doit dans un premier temps ajouter une interruption à la liste de celles déjà existantes lors de la réinitialisation du CPC. Cette interruption sera exécutée tous les trois centième de seconde et branchera la routine du petit train. Vient ensuite la routine proprement dite, qui doit prendre la main et s'occuper du compteur, de l'affichage et du toupitout.

Pour ajouter une interruption, il y a plusieurs méthodes. On peut la programmer proprement, selon les saintes règles de notre cher CPC. en passant par les vecteurs, ou bidouiller comme un malade pour virer les interruptions déjà en place et s'installer comme un roi à leur place, ou encore détourner le RST 38 en le faisant passer par notre routine qui, en sortie, se rebranchera sur les sous-programmes exécutés en temps normal à l'adresse &39 et &40. Les deux dernières méthodes relèvent du mégabidouillage. Il n'empêche qu'elles sont utilisées par les plus grands noms de la programmation et du bidouillage. mais nous allons rester pour notre train assez soft Donc, bonjour les vecteurs, basta les casse-têtes.

Il est inutile de vous rappeler comment on fait pour que le CPC prenne en compte une routine sous interruption de votre cru. Je me vois mal vous réexpliquer cette mise sous interruption que le barbare de service vous avait déjà exposée il y a quelques mois... (NDSined : Soit tu bosses vraiment, soit je te mets des baffes) Non ? Alors, vite fait.

JE VOUS INTERROMPS DEUX SECONDES

(NDSined : Sympa l'intertitre) Imaginez que vous ayez écrit la routine du siècle. Vous en êtes fier comme Septh de sa Fiesta ou comme Sined de son Archimèdc. Mais voilà, il faut qu'elle soit exéculée régulièrement. Le remède est de la placer sous interruption. Pour cela, il existe des vecteurs. Celui que nous allons utiliser est le &BCD7. Je vous rappelle en deux mots que. pour utiliser ce vecteur, il faut que la routine soit pointée par le registre 'DE', qu'il existe un tampon de dix octets qui sera pointé par le registre "HL" , et que la nature de l'interruption sera placée dans le registre "B". Quant au tout petit registre de mon Cœur "C" il sélectionnera la ROM. Si vous désirez plus de détails, relisez la rubrique de Sined concernant les interruptions. Les routines appelées par celle méthode (et les autres également), ne préviennent pas et peuvent arriver chez vous à l'improviste. Si je voulais me répéter, je dirais même qu'elles peuvent arriver à n'importe quel moment. C'est pour cette raison qu'il faut AB-SO-LU-MENT interdire les autres interruptions par la commande 'DE et sauvegarder tous les registres avant de faire quoi que ce soit. Ce n'est qu'à ce moment-là que l'on pourra bosser tranquillement sans se préoccuper de ce que pouvait bien faire l'autre avant d'intervenir. On n'oublira pas de fermer la porte en partant Pour cela, il suffit de restituer les registres, sauvegarder, et de redonner par la commande 'EI' la liberté aux autres interruplions de se placer à leur guise.

UN PARAGRAPHE NOMME RUBI

Vous avez vu le petit Rubicompteur qui, comme tout bon compteur digne de ce nom. conte des histoires à rubire debout Le principe est. lui aussi, simple. Tellement simple qu'une fois compris, il sera votre ami fidèle de tous les jours et vous suivra partout comme un chien dans vos programmes. C'est ce qu'on appelle une routine qui automodifie le programme, ou qui s'automodifie.

Voici un compteur assembleur de type classique :

LD A(COMPTEUR)
INC A
LD (COMPTEUR)A.
RET
COMPTEUR DB 0

C'est pas cher, c'est pas beau, et ça rapporte pas grand-chose. Je sais, je suis un peu sévère, mais quand même, voici une autre solution :

COMPTEUR LD A.0
INC A
LD(COMPTEUR+l)A

Si vous ne voyez pas de différence entre ces deux routines, c'est que vous n'êtes pas digne du Cent Pour Cent et que vous pouvez lire avec toute ma bénédiction les diverses revues du genre... (ne me faites pas dire ce que je ne pense pas) Pif Gadget ou Picsou chez les Glods en folie. En ce qui concerne l'affichage du train, c'est du tout classique. A part peut-être la mini astuce pour remplacer le 'CALL &BC26' qui, comme nous le savons presque tous, calcule l'adresse écran inférieure (plus bas pour les autres) de celle pointée par le double registre 'HL. Pour cela, nous savons que l'adresse écran située en bas d'un octet est la somme de son adresse plus 2048, et cela sept fois sur huit, car ensuite, il faudra retirer les 7*2048 et lui ajouter 80 (ce n'est valable que si l'écran en question n'est pas reformaté). Etant donné que le sprite ne fait que huit lignes, en partant de l'adresse &C000 nous pouvons descendre toutes les lignes en additionnant 2048 (&800 en hexa) à l'adresse où se trouve le registre 'DE' qui est le seul pointeur sur l'écran (à vrai dire, on n'avait pas besoin de plusieurs pointeurs écran). Sachant que la femme du chef de gare se réveille tous les matins à 8 heures et que la longueur du sprite est de 5 octets, qui lors du transfert déplace le pointeur écran de 5 octets à droite, nous en déduisons, comme le chef de gare déduit qu'il faut additionner 2048-5 à l'adresse de l'octet de droite d'une ligne de notre sprite. pour avoir, ô merci facteur, l'adresse de début de la ligne suivante.

THE BEST DEMO FOR YOU

Je suis persuadé que désormais les interruptions n'ont plus de secret pour vous, ou alors vraiment très peu pas beaucoup. Car si vous étiez les rois de l'interruption sur CPC, vous feriez des big démo comme celles de notre chouchou à la rédac, je veux, bien entendu, parler de grand FEFESSE, qui depuis longtemps est dans notre estime. Il n'empêche qu'après le raz de marée anglais et allemand (les ACD et MCS démo), voila-t-y que les têtes de camembert que nous sommes (ne le prenez pas comme une insulte, car on pue mais qu'est-ce qu'on est bon...), on a enfin décidé de mettre lin à notre sommeil tout doux pour montrer aux autres ce qu'on est capable de faire. Allez au hasard, prenez les sympathiques Atomics. ou le Dr TKC des Prédators (un peu vulgaire, mais on lui pardonne car 73 était un mauvais cru), l'excellent Logon Système. Ils ont tous montre au grand jour (et à la petite nuit), que nous sommes aussi bons sinon plus que les autres. J'en oublie sûrement plein d'autres, mais je pense quand même au petit Pyranha qui a fait sa démo en s'inspirant des routines parues dans Cent Pour Cent, et attend avec impatience de voir les dernières démo des Malibu Cracker's qui, vu ce qu'ils ont déjà fait, devraient promettre. Alors, si avec tout ça, vous pensez que vous n'êtes pas capable de nous pondre un petit quelque chose qui serait susceptible de remplir les pages de votre journal, vendez votre CPC et abonnez-vous à Canal Moins. A plus, et bonne défonce.

Zède , ACPC n°18 Septembre 89, p78-79

Page précédente : Bidouilles ACPC n°17 - Le catalogue AMSDOS

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

Lien(s):
» Coding » Assembleur ACPC n°48 : Compresse des Compress
» Coding » Bidouilles ACPC n°40 - Gestion d'erreurs des routines disques
» Coding » Bidouilles ACPC n°32 - RSX ùPEEK
» Coding » Bidouilles ACPC n°12 - Création de RSX
» Coding » Bidouilles ACPC n°14 - Les secrets du GATE ARRAY (1/2)
» Coding » Bidouilles ACPC n°46 - Les vecteurs system (4/6)
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 317 millisecondes et consultée 1632 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.