π
<-

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

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

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

Unread postby 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: Select all
; 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.
User avatar
tyann2
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 12.5%
 
Posts: 96
Joined: 19 Sep 2011, 11:38
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: STRING en assembleur sur Ti 83+

Unread postby 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
User avatar
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 8.7%
 
Posts: 1172
Images: 4
Joined: 08 Dec 2014, 17:38
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Ensimag
GitHub: MathisLav

Re: STRING en assembleur sur Ti 83+

Unread postby 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: Select all
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 ?
User avatar
tyann2
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 12.5%
 
Posts: 96
Joined: 19 Sep 2011, 11:38
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: STRING en assembleur sur Ti 83+

Unread postby 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: Select all
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
User avatar
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 8.7%
 
Posts: 1172
Images: 4
Joined: 08 Dec 2014, 17:38
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Ensimag
GitHub: MathisLav

Re: STRING en assembleur sur Ti 83+

Unread postby 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: Select all
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 ?
User avatar
tyann2
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 12.5%
 
Posts: 96
Joined: 19 Sep 2011, 11:38
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: STRING en assembleur sur Ti 83+

Unread postby 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: Select all
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
User avatar
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 8.7%
 
Posts: 1172
Images: 4
Joined: 08 Dec 2014, 17:38
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Ensimag
GitHub: MathisLav

Re: STRING en assembleur sur Ti 83+

Unread postby tyann2 » 15 Mar 2016, 22:04

Merci Epharius, super sympa.
Au plaisir.
User avatar
tyann2
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 12.5%
 
Posts: 96
Joined: 19 Sep 2011, 11:38
Gender: Not specified
Calculator(s):
MyCalcs profile

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

Unread postby 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
User avatar
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 8.7%
 
Posts: 1172
Images: 4
Joined: 08 Dec 2014, 17:38
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Ensimag
GitHub: MathisLav


Return to Langages alternatifs

Who is online

Users browsing this forum: ClaudeBot [spider] and 3 guests

-
Search
-
Social TI-Planet
-
Featured topics
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 !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
968 utilisateurs:
>933 invités
>27 membres
>8 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)