π
<-

[Résolu] STRING en assembleur sur Ti 83+

Assembleur, Axe, C/C++, ICE...

[Résolu] STRING en assembleur sur Ti 83+

Message non lude tyann2 » 15 Mar 2016, 06:10

Bonjour
Je cherche en vain depuis quelques jours à récupérer dans un programme
en assembleur le contenu d'une variable de chaîne.
par exemple : "LONG"-> str1
Voici ce que j'ai essayé de plus simple:

Code: Tout sélectionner
; lecture d'une string var
#include "ultimate.inc"
   bcall(_clrlcdfull)
   ld hl,strname
   bcall(_mov9toop1)
   bcall(_findsym) ; ici je pense récupérer l'adresse du contenu str1 dans de (pas sûr)
   ld h,d
   ld l,e
   ld a,1
   ld (pencol),a
   ld (penrow),a
   bcall(_vputs)
   bcall(_getkey)
   ret
strname:
.db strngobj,tvarstrng,tstr1,0,0
.end


d'après des exemples vus dans un pdf de routines système pour 83+.
Mais vous l'aurez compris ça ne marche pas.
J'ai essayé de remplacer vputs par vputsn pour limiter le nombre de caractères sans résultat.
Merci d'avance.
Avatar de l’utilisateur
tyann2
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 17.2%
 
Messages: 99
Inscription: 19 Sep 2011, 11:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: STRING en assembleur sur Ti 83+

Message non lude Epharius » 15 Mar 2016, 07:50

Salut !
Il faut savoir que les deux premiers octets sont les octets de la taille de à string (LSB puis MSB) il faut donc ajouter Inc hl deux fois quelque part ;)

Ensuite je ne sais pas si c'est un problème mais je crois que les String sont stockées par tokens et non par caractères donc ça n'affichera correctement que A-Z 0-9. A toi de voir si t'as besoin des espace/virgule toussa. Pour t'aider _putTokString affiche en gros caractères le token contenu dans DE. Mais pour afficher en petits caractères comme VPuts je ne crois pas qu'il existe de Romcall.
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 8.9%
 
Messages: 1182
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav

Re: STRING en assembleur sur Ti 83+

Message non lude tyann2 » 15 Mar 2016, 12:47

Merci beaucoup, ça y est ça marche.
J'ai utilisé _vputsn, car _vputs m'ajoute un chiffre à la fin de la chaîne.
Comme vous vous en doutez sans doute, je débute en assembleur.
Dans l'exemple du fameux "hello world", on avait
Code: Tout sélectionner
label:
.db "hello world",0

le tuto spécifie que le 0 marque la fin de la chaîne, apparemment les chaîne stockées dans
les variables str0 ... str9 ne sont pas codées pareils ?
Avatar de l’utilisateur
tyann2
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 17.2%
 
Messages: 99
Inscription: 19 Sep 2011, 11:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: STRING en assembleur sur Ti 83+

Message non lude Epharius » 15 Mar 2016, 16:45

Non, et c'est là où tu dois faire attention. Une chaine qui va être affichée avec _Puts ou Vputs doit TOUJOURS se terminer par ,0
Cependant, les chaînes Str[0-9] sont stockées sans ce 0 à la fin, et donc vont t'afficher plus que tu ne le voudrais. Et c'est là que les octets qui t'informent de la taille sont utiles : grâce à ça, tu peux mettre ta chaine de StrX jusqu'à OP1 (par exemple, tu peux aussi mettre dans la saferam, une zone de la mémoire pas ou peu utilisée) et ensuite faire une sorte de add OP1,size et y mettre un 0.
Plus précisément, ça va ressembler à ça (je n'ai pas vérifié si ça marchait par contre) :
Code: Tout sélectionner
bcall(_ChkFindSym)
ld h,d ; on met DE dans HL
ld l,e
bcall(_ldHLind) ; ld hl,(hl)
ld b,h
ld c,l
ex de,hl
inc hl
inc hl
ld de,OP1
ldir
xor a ; ld a,0 (prend moins de place)
ld (de),a
ret


Bon, vérifie que ça marche mais c'est l'idée ;)
Si tu ne comprends pas quelque chose, dis moi. C'est un code assez compliqué à comprendre à certains endroits (j'ai essayé de faire la méthode la plus optimisée mais pas la plus simple)
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 8.9%
 
Messages: 1182
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav

Re: STRING en assembleur sur Ti 83+

Message non lude tyann2 » 15 Mar 2016, 18:49

Bonsoir
Je viens de faire un essai, nickel.
Je pense avoir compris :
On met le contenu pointé par hl dans hl (ldhlind) ça je connaissais pas.
Comme hl est un registre de 2 octets, on lit donc la longueur de strx
On met cette longueur dans bc, l'échange de, hl remet l'adresse de strx dans hl
On incrémente deux fois hl pour arriver au premier caractère
On met l'adresse op1 dans de et on copie bc octets avec ldir.
de et hl se sont incrémentés pendant la copie (ça j'y aurai pas pensé)
donc de pointe juste après le dernier caractère et on y met donc zéro pour
marquer la fin de la chaîne.
Ensuite j'ai mis op1 dans hl et appelé vputs.
Merci encore.
Pour faire ce que j'ai en tête, un petit softmenu,
j'utilise des titres de longueur fixe de 4 caractères.
J'ai pensé à faire quelque chose comme ça.
Code: Tout sélectionner
label:
.db "1234",0,"1234",0, etc...

puis à copier les 4 premiers caractères de la chaîne à l'adresse label
puis les 4 suivants à label+5 etc... comme ça j'ai mon zéro automatiquement.
Comme j'ai déjà réalisé un softmenu sous cette forme avec les titres directement dans le listing.
Qu'en pensez-vous ?
Avatar de l’utilisateur
tyann2
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 17.2%
 
Messages: 99
Inscription: 19 Sep 2011, 11:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: STRING en assembleur sur Ti 83+

Message non lude Epharius » 15 Mar 2016, 20:26

Tu as tout très bien compris, c'est exactement ça ;)

Oui, ça devrait marcher. Seul inconvénient si tu veux regarder ce qu'il y a dans cette chaîne via Ti-Basic ou sur l'écran de calcul, ça va t'afficher un caractère bizarre (genre ?) mais au pire, c'est pas trop grave à mon avis.

Aussi, en terme d'optimisation, tu n'as pas vraiment besoin de faire ld hl,label+5 puisque _vputs va retourner HL=adresse après le 0. Un exemple :
Code: Tout sélectionner
ld hl,Lbl
call _vputs ; après _Vputs on a (HL)='C' car HL a été incrémenté durant l'affichage
call _vputs ; Affiche bien "C'est moi !"
ret
Lbl:
.db "COUCOU",0,"C'est moi !",0
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 8.9%
 
Messages: 1182
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav

Re: STRING en assembleur sur Ti 83+

Message non lude tyann2 » 15 Mar 2016, 22:04

Merci Epharius, super sympa.
Au plaisir.
Avatar de l’utilisateur
tyann2
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 17.2%
 
Messages: 99
Inscription: 19 Sep 2011, 11:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: [Résolu] STRING en assembleur sur Ti 83+

Message non lude Epharius » 15 Mar 2016, 23:55

De rien, ça fait plaisir de voir des collègues assembleux :p

Si tu as d'autres questions, n'hésite pas
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 8.9%
 
Messages: 1182
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav


Retourner vers Langages alternatifs

Qui est en ligne

Utilisateurs parcourant ce forum: ClaudeBot [spider] et 9 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Ndless for CX 4.5.5 / CX II 6.2.0
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
2133 utilisateurs:
>2123 invités
>6 membres
>4 robots
Record simultané (sur 6 mois):
32248 utilisateurs (le 01/09/2025)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)