Questions assembleur 6809

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Questions assembleur 6809

Message par __sam__ »

Je crois que c'est pas encore ca :(
exemple n = $7FE0 soit -32800 en non signé
Impossible ! Tu as un signe "-" (négatif) sur une valeur non signée...

En fait, signé ou pas $7FE0 est positif car le dernier des 16 bits est à 0, et vaut 32736 signé ou pas.

La différence entre signé ou pas signé ne change que pour les nombres dont le dernier des 16bits est à 1. Si ce bit est à 1, le nombre est à interpréter en négatif. Tu obtiens la valeur négative à partir de la valeur positive en soustrayant 65536.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Questions assembleur 6809

Message par Daniel »

Un conseil : Si l'assembleur doit un jour être diffusé, il faut qu'il soit compatible avec Windows 10. La version 7 de Windows est obsolète.
Il faut aussi qu'il offre plus de fonctions intéressantes que les assembleurs existants, sinon personne ne l'utilisera. En général les programmeurs sont attachés à leur assembleur favori et il n'est pas facile de les faire changer, à moins de leur proposer nettement mieux.
La règle est identique pour la documentation.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
SOREK
Messages : 27
Inscription : 25 févr. 2012 02:29
Localisation : 59169 Férin (près de Douai, département du Nord 59)

Re: Questions assembleur 6809

Message par SOREK »

Bonjour,

Mon programme n'a pas du tout la prétention de supplanter un assembleur existant, loin de là.

Il faut que je vous explique, dans mon projet de réalisation d'une carte à base de 6809, il y avait un point de départ que je me suis fixé, celui d'avoir le contrôle à 100,001 % :
--- de la documentation
--- des outils de développement
--- du matériel

J'ai donc créé cet assembleur dans cet optique, maintenant si des personnes pouvaient le tester également se serait déjà pour moi un grand honneur.
Et si je pouvais d'avoir leur avis et leurs retours sur des bugs éventuels que je n'aurai pas vu, alors là se serait le TOP ! Ce qui me permettrais de le corriger.
Bonne soirée.
Richard
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Questions assembleur 6809

Message par Papy.G »

Peut-être suis-je à côté de la plaque, mais j'ai l'impression que je problème vient du fait que des instructions différentes ont la même mnémonique.
Est-il interdit de faire de légères variantes pour que le programmeur choisisse lui-même le type d'adressage?
Je ne connais pas le 6809, mais sur le 8051, par exemple, point de store/load mais mov, quel que soit le sens du mouvement, bien qu'une lettre supplémentaire précise l'espace mémoire utilisé.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Questions assembleur 6809

Message par Daniel »

Il existe déjà un moyen pour choisir l'adressage direct ou l'adressage étendu. Exemple :

Code : Tout sélectionner

LDA   <$6081       adressage direct
LDA   >$6081       adressage étendu
A defaut de signe < ou > l'assembleur optimise.

Pour les instructions indexées avec déplacement sur 5, 8 ou 16 bits il serait tout à fait possible de définir des signes conventionnels pour permettre au programmeur d'imposer l'instruction à utiliser. L'assembleur pourrait détecter les erreurs (déplacement trop grand pour le nombre de bits choisi) et à défaut de signe il choisirait l'instruction la plus courte en fonction de la valeur du déplacement.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Questions assembleur 6809

Message par __sam__ »

Pour préciser ce qu'écrit Daniel, l'adressage direct ne contient que la partie "basse" des adresses. La partie haute vient d'un registre spécial DP dit DirectPage. On peut ainsi pointer une page mémoire de 256 octets consécutifs n'importe où en mémoire avec ce mode d'adressage. L'avantage c'est qu'il n'occupe qu'un seul octet et est très rapide (plus rapide que le mode étendu car il y a un octet de moins à lire). Le principe d'adresse par page est très courant dans les ordis 8bits, mais comme sur 6809 on peut modifier à volonté le registre contenant la valeur haute, chaque programme résident en mémoire peut avoir sa propre zone de 256 octets d'accès rapide à lui. Le système se réserve en général une page bien à lui dite la "page 0 du moniteur".

A noter: on précise à l'assembleur la valeur courante du registre d'adresse haute (DP) avec la directive

Code : Tout sélectionner

SETDP $NN
Plus tard quand l'assembleur voit une adresse <$PPQQ (remarquez le "<"), il vérifie que $PP et $NN sont identiques et encode l'adressage direct. Si ca ne coincide pas, il cesse de compiler avec un message d'erreur. Si on oublie le "<", quand il rencontre une adresse $PPQQ et que la partie haute ($PP) coincide avec la valeur déclarée dans le set DP il optimisera avec le mode d'adressage direct plutôt qu'étendu pour occuper moins de place et générer un binaire plus rapide.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
SOREK
Messages : 27
Inscription : 25 févr. 2012 02:29
Localisation : 59169 Férin (près de Douai, département du Nord 59)

Re: Questions assembleur 6809

Message par SOREK »

Bonjour,

Dans un listing, je rencontre un cas d'un branchement long avec dans l'opérande un format d'adressage indexé :

Code : Tout sélectionner

00735 >F36C 1027 0000                           LBEQ      <LF41C,PCR
.
.
00832  FA1A  39                     LF41C       RTS 
Que veut dire le symbole > devant l'adresse absolue ?

Est-ce que ce cas de figure concerne aussi l'adressage relatif court ?

Pour ce cas d'adressage relatif long avec comme opérande un adressage indexé, comment fait-on pour connaitre l'adresse effective ?

Pourquoi il y a 0000 après le code hexa 1027 ?
($1027 c'est le code hexa correspondant à LBEQ) ,
0000 cela doit être une erreur car l'adresse de l'étiquette LF41C = $FA1A et LBEQ est en $F36C

Bonne journée à tous.
Richard
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Questions assembleur 6809

Message par __sam__ »

Sur 6809 les branchements sont toujours relatifs au compteur programme. Pour moi un "LBEQ label,PCR" est du jamais vu. On écrit "LBEQ label" tout court.

En assembleur cette instruction occupe 4 octets: $1027 $offset. Ici l'offset est à $0000 ce qui est sans doute la valeur qu'utilise l'assembleur quand il ne sait pas décoder le label comme dans le format "label,pcr" qui n'a pas de sens sur 6809 dans le cadre d'un saut.

Le "'>F36C" du début est en fait l'addresse où se situe ce saut ($F36C). Pourquoi ">" au début ? Je sais pas, mais dans macroassembleur on doit taper ">" pour afficher l'instruction suivante à l'écran. Si ca se trouve c'est juste une scorie écran d'un desassemblage à la main.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Questions assembleur 6809

Message par Daniel »

Chaque macro-assembleur a une syntaxe qui lui est propre, elle est décrite dans sa documentation. Pour pouvoir interpréter le code source il faut connaître l'assembleur utilisé. Expliquer une ligne seule isolée de son contexte est impossible.

Toutefois la syntaxe de ce LBEQ paraît vraiment bizarre, je n'ai jamais vu ça dans aucun assembleur connu.

Pour les branchements, une question se pose à chaque fois : doit-on utiliser la version courte (ex: BEQ) ou la version longue (ex: LBEQ).
Dans la plupart des assembleurs (en particulier dans celui que j'utilise) c'est au programmeur de choisir. L'assembleur signale une erreur si le déplacement est trop grand pour un branchement court, ou un avertissement s'il est possible de remplacer un branchement long par un branchement court. Mais on pourrait aussi concevoir un assembleur qui optimise automatiquement. Dans ce cas, l'utilisation du signe > pourrait être envisagée pour forcer un branchement long même si un branchement court est possible. Par contre je ne vois pas l'utilité du signe <.

Dans un assembleur normal (j'ai utilisé ici A09 de Hermann Seib) on aurait ceci :

Code : Tout sélectionner

 0735 102700F9        LF36C LBEQ LF41C
 . 
 .
 0832 39              LF41C RTS 
Je tente quand même une explication en réponse à la question posée :
- Le programmeur a fait une erreur de syntaxe en écrivant LBEQ <LF41C,PCR
- L'assembleur, ne sachant pas interpréter ce code, l'a transformé en LBEQ *
- Il a sûrement signalé l'erreur, mais comme nous n'avons pas le listing complet nous ne la voyons pas.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
SOREK
Messages : 27
Inscription : 25 févr. 2012 02:29
Localisation : 59169 Férin (près de Douai, département du Nord 59)

Re: Questions assembleur 6809

Message par SOREK »

Bonjour à tous,
Un grand merci à __sam__ et à Daniel.
Bonne journée.
Richard
jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: Questions assembleur 6809

Message par jasz »

A mon avis le '>' devant l'adresse doit tout bonnement indiquer une erreur car le branchement représente un saut de... 0000. Ce qui est impossible sauf si tu tentes de désassembler des datas associées au programme.

Personnellement, je n'ai jamais vu ce genre "LBEQ <LF41C,PCR" pour transcrire un branchement long. Pourquoi le PCR alors que l'on part de la position du pointeur dans le programme????

Tu devrais avoir un truc comme ci-dessous pour que ta routine soit correct.

Code : Tout sélectionner

00735  F36C 1027 06AA                           LBEQ      LF41C
.
00832  FA1A  39                     LF41C       RTS 
Avatar de l’utilisateur
SOREK
Messages : 27
Inscription : 25 févr. 2012 02:29
Localisation : 59169 Férin (près de Douai, département du Nord 59)

Re: Questions assembleur 6809

Message par SOREK »

Un grand merci pour jasz
Avatar de l’utilisateur
SOREK
Messages : 27
Inscription : 25 févr. 2012 02:29
Localisation : 59169 Férin (près de Douai, département du Nord 59)

Re: Questions assembleur 6809

Message par SOREK »

Bonjour,
Je recherche des programmeurs en assembleur sur 6809 en vue de créer un club dans les environs de DOUAI 59500 (Nord de la France).
Bonne journée
Richard
Répondre