Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > Calculatrices > Ti > Apprendre l'asm z80 pour TI > Codage - les bases > Le commencement > Lecture du tutoriel

Le commencement

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : nightmat
Difficulté : Débutant (1 / 5)
Note : 16 / 20 (2 votes)
Visualisations : 2 455

Plus d'informations Plus d'informations
Eeeeeeehhhhh oui, il faut bien commencer par le commencement... :-°
Surtout, n'hésitez pas à vous attarder, la compréhension est essentielle pour la suite.
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Le header... incontournable !

C'est un bon début...
En effet, votre programme commencera toujours par un header.
Voyons sa structure :
Code : Autre
1
2
3
4
5
6
7
#define end .end
#define END .end
#define equ .equ
#define EQU .equ
#include "ti83plus.inc"
.org 9D93h
.db $BB,$6D

Ce header vient d'un code d'exemple mais il en existe de nombreux. Votre programme ne commencera donc pas forcément par celui-ci.


Étudions ça progressivement ; vous connaissez peut-être le rôle des #define [texte1] [texte2] mais je considérerai que non.
Ils servent à remplacer toutes les occurrences de [texte1] par [texte2] dans le programme.
TASM est une application très tatillonne qui reconnaît des termes très précis. Par exemple, la fin du programme lui est spécifiée par .end et pas end ou .END (Oui, la casse aussi a une importance >_< )
Selon vos envies ou vos habitudes, vous serez peut-être amené à utiliser d'autres termes et dans ce cas, pensez aux #define !
Ok, .end est une instruction de fin de programme mais assez importante pour que j'en parle maintenant, car si vous l'omettez, vous aurez droit à No END directive before EOF. :o Mignon non ?

Voyons la suite...
Un #include ; ce terme n'est peut-être pas inconnu si vous connaissez d'autres langages. Son utilité est d'insérer le contenu d'un fichier à l'endroit de son appel avant la compilation du programme.

Code : Autre
1
#include "ti83plus.inc"

Ceci inclura le texte du fichier ti83plus.inc entre #define EQU .equ et .org 9D93h dans l'exemple.
Je vous le remet si vous êtes faignants. :-°
Code : Autre
1
2
3
4
5
6
7
#define end .end
#define END .end
#define equ .equ
#define EQU .equ
#include "ti83plus.inc"
.org 9D93h
.db $BB,$6D


Les fichiers en .inc (include) sont en fait de simples fichiers texte dont l'extension a été modifiée pour distinguer son usage.
Ils stockent généralement des données relatives à la calculette. J'y consacrerai une partie plus tard ; ne vous en souciez pas trop pour l'instant.

Dernière instruction (enfin !) : .org
C'est un peu plus complexe. Indispensable, mais vous pouvez oublier son utilité. Je vous la donne quand même :D : il spécifie où le programme doit être chargé dans la mémoire pour son exécution.

Je profite de ceci pour prévenir les utilisateurs de ti83 qui auraient mal lu l'introduction ; l'adresse du lancement des programmes varie pour cette calculette. A titre indicatif, je la donne quand même : $9327


N'oubliez SURTOUT PAS la ligne .db $BB,$6D.
Si elle est omise, le programme sera compilé mais refusera de se lancer en vous reprochant un ERR : INVALID !
.db sert à spécifier une donnée ; j'expliquerai la signification de cette ligne plus tard. :p

Essayez aussi de vous imposer une mise en forme : pas de tabulation pour le header, les labels et ce qui commence par un point, et une tabulation pour le reste.

J'allais oublier les .equ...

Cela fonctionne sous la forme Code : Autre
1
[texte] .equ [nombre]

Il remplace dans le programme tous les [texte] par les [nombre].
Et concrètement, ça sert à quoi ?
A faire le café o_O Naaaaaaaan !
Ça sert dans la plupart des cas à définir des romcalls et, euh, bah... C'est le sujet suivant ! :p
L'ordre des instructions précédentes est totalement libre, on peut même les placer après le .org ; l'important est qu'elles définissent des valeurs avant leur utilisation.

Les romcalls

Bon, concrètement, vous savez maintenant faire des programmes vides. :euh:
Retenez la forme :
Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
header
 
#define ------
#include ------
.org ------
.db $BB,$6D
 
Corps du programme
 
instructions diverses et variées...
 
.end


Les romcalls sont un exemple d' "instructions diverses et variées".

Ce sont des "miniprogrammes" stockés dans la mémoire de la calculette qui permettent de réduire considérablement la complexité du programme. On peut faire la comparaison avec les fonctions en C ; une romcall prend des arguments en entrée, et retourne une ou plusieurs données en sortie.
Elles peuvent aussi bien avoir un effet visible (comme effacer l'écran) qu'invisible (on verra ça plus tard !).

On les appelle (à prendre dans le sens "appel de fonction") différemment selon les habitudes, et j'ai pour habitude d'utiliser bcall(xxxx) où xxxx est le nom de la romcall.
Ça n'a pas d'importance de toute façon, utilisez un #define avec le texte que vous voulez.
Le code correspondant est le suivant :
Code : Autre
1
2
rst 28h
.dw xxxx

Je ne vous demande pas de le comprendre.

On a donc un texte à remplacer par un autre, à moins que vous ne préfériez taper deux lignes de code au lieu d'une ! :p
Ça ne vous rappelle rien ?

Il faut utiliser #define :)

On inclura donc dans le header :
Code : Autre
1
#define bcall(xxxx) rst 28h \ .dw xxxx
" \" permet de placer deux lignes l'une à la suite de l'autre.


Vous avez peut-être remarqué que cette ligne n'apparaît pas dans le header de la partie précédente ; eh bien c'est juste qu'elle est déjà présente dans le fichier include. Vous commencez à comprendre leur utilité, non ? :)

Bon, xxxx désigne un nom, alors que les romcalls correspondent à des adresses mémoires ?
En fait, xxxx peut aussi bien désigner un texte qu'un nombre. A la base, ce sont bien des adresses mémoires, donc des nombres que nous utilisons. Mais avouez que bcall(_ClearDraw) est plus explicite que bcall($4540).

On remplace un nombre par du texte. Le compilateur doit donc remplacer du texte par un nombre, ce qui nous amène à utiliser .equ ! :D
Rappelez vous... Code : Autre
1
[texte] .equ [nombre]

Donc pour continuer sur ma lancée, on utilisera dans le header : Code : Autre
1
_ClearDraw .equ $4540
Par convention, le nom de toutes les romcalls débutent par un souligné "_". Après c'est vous qui voyez !

Eh oui, $4540 (Inutile de vous rappeler que c'est de l'hexadécimal ^^ ) n'a pas été pris au hasard ; il correspond à l'adresse mémoire où se trouve la romcall qui gère l'effacement de l'écran ; elle ne nécessite aucun argument.

Et quand il y en a, on les passe comment ? Et comment on fait pour savoir à quelle adresse correspond tel effet ?
Si j'ai pris un exemple où il n'y en a pas besoin, c'est que je vais en parler plus tard, :ange: patience ! (A moins que je décide de ne pas en parler du tout, yêk :diable: ).
En ce qui concerne les adresses, je vous les donnerai en fonction des besoins du tutorial. Si vous êtes pressés, jetez donc un coup d'oeil à des fichiers include !

Certaines romcalls "détruisent" des registres. C'est à dire qu'elles ne conservent pas leur valeur de départ. Par exemple, _ClearDraw (qui se nomme réellement _clrlcdfull) détruit TOUS les registres !


Vous en savez maintenant assez pour compiler votre 1er programme ! (Tatsiiiin !!)

Votre 1er programme !

Si j'ai bien suivi ^^ , vous en connaissez maintenant assez sur le header et le corps du programme. D'accord, pas beaucoup mais assez !
Nous allons donc créer un programme qui efface l'écran et qui ne plante pas.
Voyons... Nous n'avons besoin que d'une romcall qui a été définie précédemment.
Et j'allais oublier... L'instruction asm pour la fin d'un programme est ret, qui nécessite donc une tabulation.

Bah ? je croyais que c'était .end pour la fin du programme ?

Attention, .end indique à TASM où il doit s'arrêter de compiler ; tandis que ret agira en tant que fermeture du programme lors de son exécution.

N'hésitez pas à relire les 1er chapitres jusqu'à bien les comprendre, je ne vous en voudrais pas ! :ange:

Selon moi, on obtient quelque chose comme ça :
Secret (cliquez pour afficher)
Code : Autre
1
2
3
4
5
6
7
#define bcall(xxxx) rst 28h \ .dw xxxx
_ClearDraw .equ $4540
.org $9D93
.db $BB,$6D
        bcall(_ClearDraw)
        ret
.end


TASM laisse tout de même la possibilité de laisser des commentaires. Il suffit d'utiliser un point-virgule devant son texte ; il ne sera ainsi pas considéré comme du code.

OK, j'autorise des différences au niveau des "appellations", c'est à dire "_ClearDraw" et "bcall(", et des #define si vous utilisez une autre notation.

Au secours !! Ca ne marche pas !!
Si votre compilation échoue, retentez-la en utilisant le code ci-dessus tel quel, pour voir si votre erreur vient du code ou des applications. Si ça ne marche toujours pas, éclatez votre ordinateur à coup de relisez la première partie, vérifiez que vous avez toutes les applications, qu'elles correspondent à votre calculette...
Si malgré cela la compilation échouait une fois de plus, envoyez moi un message avec l'erreur indiquée. :-°

Une fois que vous avez un beau fichier transférable... transférez le !
Considérons xxxx comme le nom de votre programme (vous l'appelez comme vous voulez, je n'impose rien !).
Pour l'exécuter :
Image utilisateur

La commande Asm( se trouve dans le catalogue. (2ND+0)




Image utilisateur





Logiquement, votre écran devrait ressembler à ça (après appui sur ENTER :p ) :



Ne vous inquiétez pas pour le Done, nous verrons comment le faire disparaître plus tard.

Quelle émotion, non ?
Non ?
Ok on continue :pirate:

C'est bien beau d'avoir fait un programme, mais je suis sûr que vous l'avez trouvé léger et que vous en voulez plus ?
Nous allons donc voir les essentiels, c'est à dire les variables (enfin !), les fichiers include et les instructions du z80.
Courage ! ^^
Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 06/09/2007 à 12:33:57
Modifié : le 05/10/2008 à 19:09:22
Avancement : 100%
Licence : Copie non autorisée

4 commentaires

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 166 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0745s (0.0626s)