1

Quelqu'un peut il me donner une routine, un prog, en asm nostub, pour ouvrir et afficher un fichier STR?

Ca pourrait en plus servir de tutoriel de programmation en asm pour TI
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

2

je pense que nombreux sont ceux qui peuvent t'aider a ecrire une telle routine.
mais que peu d'entre eux iront jusqu'a l'ecrire pour toi smile

dans la FAQ de TIGCC, il me semble qu'il est ecrit comment creer une chaine, et donc, que sont format est precise.
ben, pour la lire, c'est l'inverse smile
(encore que ce soit la methode bourrin avec les fonctions de stdio, il me semble)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

3

T'es gentil de me le préciser, mais c'est du C, ca je sais le faire!
Quand il s'agit de l'asm, je me promène de bugs en bugs!

Si c'est si pénible pour le niveau que vous avez, ca ne va pas devenir une habitude, c'est juste pour avoir un point depart, que je n'arrive meme pas à construire moi même
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

4

Pourquoi as-tu posté dans la rubrique C alors ?
Sinon, c'est n'est pas tellement différent en C et en ASM (enfin, tu peux te débrouiller pour faire en ASM comme tu as l'habitude de faire en C).
Explique plutôt quels sont tes problèmes.

5

T'a raison, je me suis carrément gourré de rubrique (c'est ma préféré smile )

Ce que je n'arrive pas à faire
***effectuer un SYMSTR sur un nom de variable (je sais, je suis nul)
***c'est obtenir un pointeur sur le premier octet de la variable

...
et j'ai du oublier plein de chose, à part coder en asm sans le moindre bug roll

Les règles pourtant je les connais
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

6

T'es gentil de me le préciser, mais c'est du C, ca je sais le faire!

bah ecoute mon p'tit gars, ici, c'est la rubrique C, et tu n'as pas precise que ct en ASM que tu demandais de l'aide
alors si t pas content des conseils qu'on te donne, prend ta pelle et ton seau, et va jouer !

(non mais. pas croyable. on donne un indice, une piste, et le gars il nous jette parce qu'il s'est plante....)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

7

Tu sais lire les post croisés toi? (Ah oui, un indice, l'heure exiiiiste...) Si tu veux, je t'enverrais par mail ma photo avec mon rateau et mon seau sur les plages qui perdent leurs galettes...
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

8

Luigi a écrit :
Ce que je n'arrive pas à faire ***effectuer un SYMSTR sur un nom de variable (je sais, je suis nul)
Tu peux regarder les .s générées par TIGCC.
Personnellement, j'utilise une technique que je ne préfère pas expliquer parce qu'elle est très inélégante.
***c'est obtenir un pointeur sur le premier octet de la variable
Bah une fois que tu as ton nom de fichier au format SYMSTR, tu peux récupérer la structure SYM_ENTRY associée au fichier avec un SymFindPtr et tu peux de là récupérer son handle que tu déréférences (comme en C).

Et au fait, si ton nom de fichier est toujours le même ("toto" par exemple), ça simplifie énormément les choses, tu n'as pas à parcourir la VAT...

9

Ok merci, je vais essayer de faire qqch de correct
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

10

Si tu as ton nom au moment de la compilation c'est vraiment simple pour avoir SYMSTR, par exemple pour une variable nommée 'test', tu fais:
 dc.b 0,'test'
nom_variable: dc.b 0
puisqu'un SYMSTR c'est une chaîne de caractères commençant et terminant par un zéro, avec le pointeur sur le zéro de fin.

Je ne sais pas si ma routine marche comme la tienne, mais si tu veux j'ai une routine en ASM qui permet d'ouvrir une variable avec le nom au choix, elle ne vérifie pas l'extension mais ça doit se faire sans trop de difficultés.
Ma routine n'accepte pas une SYMSTR, mais tout simplement une chaîne de caractères normale qui contient le nom de la variable, et parcourt la VAT jusqu'à trouver une SYM_ENTRY qui ne soit pas un dossier et qui est le même nom que celui demandé. Je n'ai pas le temps de la poster là, mais je le mettrais plus tard si t'as pas réussi. (Essaye quand même c'est plus intéressant de le faire soi même)
avatar
;)

11

Je regarderais les.s plus tard, mais il y a un véritable problème : on ne peut pas mettre d'addresses impaires aux pointeurs d'addresse, et pourtant, et on obligé de le faire pour tester les différents octets
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

12

Merci bcp pour l'astuce! Je n'y aurais jamais pensé top

Ta routine m'interesse bcp, et je vais essayer d'abord d'arriver à qqch
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

13

Tu peux évidemment pointer vers une adresse impaire !
Mais tu ne peux pas manipuler de words à une adresse impaire (mais pour les octets, aucun pb).

14

6> lol roll
m'enfin bon, je v pas continuer sur ma lancée, puisque le topic est pas encore hors sujet.
je m'efface donc, ne serait-ce que temporairement
(v pas foutre le souk sur un topic qui a pas encore derive)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

15

BiHi> Tu pourrais me passer ta fonction, stp smile (juste pour voir comment tu fais)

16

En fait, Kevin , je pense que tu devrais rappeler dans ta traduction du 68kguide, pour l'instruction btst, que le bit les plus à gauche est le 7e et le bit le plus à droite est le 0e (grin)

(Comme le signale le formalisme de la Doors Home Page: <76543210> )
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

17

erf !
l'impossible n'existe pas,ce n'est que le possible qui n'est pas encore possible.

18

Ce n'est pas moi qui ai traduit ça. (Je sens que j'aurais dû mettre "lien externe" en gras comme je l'ai fait sur le reste de mon site... roll)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

19

Excuse moi alors
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

20

BiHi>> Ca m'arrangerait beaucoup si tu pouvais me passer ta routine. Sinon c'est pas grave, j'attendrais d'être au point. Même avec l'aide de cc() j'ai vraiment du mal...
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

21

 even
fopen:
 movem.l a3/a5,-(a7)
 link a6,#0
 move.l a0,a3
 move.l ($c8).w,a5
 move.w #2,-(a7)
 pea 0
 move.l SymFindFirst*4(a5),a0 ;SymFindFirst(NULL, FO_RECURSE);
 jsr (a0)
 move.l a0,d0
 beq fnull
 move.l d0,a4
 pea (a3)
flp:
 pea (a4)
 move.l strcmp*4(a5),a0
 jsr (a0)
 addq.l #4,a7
 tst.l d0
 bne fnext
 move. b 11(a4),d0 ; même nom, on vérifie que c'est pas un dossier
 btst.l #7,d0
 beq ffin
fnext:
 move.l SymFindNext*4(a5),a0
 jsr (a0)
 move.l a0,d0
 beq fnull
 move.l d0,a4
 bra flp
ffin:
 move.w 12(a4),-(a7)
 move.l HeapDeref*4(a5),a0
 jsr (a0)
 addq.l #2,a0
fnull:
 unlk a6
 movem.l (a7)+,a3/d5
 rts

Ca renvoie un pointeur vers le début de la variable, après avoir sauté les 2 octets de taille.

Si tu veux afficher le contenu d'une variable STR dans la status line, il suffit de copier ce qui suit (en mettant la routine à la fin quand même smile) et d'assembler.
 lea varname(pc),a0
 bsr fopen
 move.l a0,d0
 beq null
 pea 1(a0) ; on saute le 0 de début de chaîne
 move.l ($c8).w,a1
 move.l ST_helpMsg*4(a1),a1
 jsr (a1)
 addq.l #4,a7
null:
 rts
varname: dc.b 'test',0

Tu fais "blablabla" [STO>] test et tu lance le fichier assemblé. Ca a été testé et ça a marché avec AS on calc aujourd'hui même.
avatar
;)

22

Ok merci bcptop
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

23

arf!
Hum je viens de re-tester en collant dans TIGCC et ça marche apparement... Il y a peut-être une erreur quelque part, mais je vois pas.
avatar
;)

24

Non c'est bon j'ai trouvé, c'est parce que tu n'utilise pas le formalisme de AS pouir les ROMCALLS :

1) les romcalls sont contenues dans un fichier texte ams_c : Nitro y déclare une tableau des valeurs des ROMCALLS

2) ces valeurs doivent etre opposées : DlgMessage = -$#Je sais plus la valeur hexa#

3) cette ingénieuse bidouille de Nitro permet donc de lancer une romcall avec un simple jsr : jsr DlgMessage

DOnc j'ai corrigé ton programme, et il fonctionne parfaitement : voila

lea varname(pc),a0
bsr fopen
move.l a0,d0
beq null
pea 1(a0) ; on saute le 0 de début de chaîne
jsr ST_helpMsg
addq.l #4,a7
null:
rts
varname: dc.b 'test',0
even
fopen:
movem.l a3/a5,-(a7)
link a6,#0
move.l a0,a3
move.w #2,-(a7)
pea 0
jsr SymFindFirst ;SymFindFirst(NULL, FO_RECURSE);
move.l a0,d0
beq fnull
move.l d0,a4
pea (a3)
flp:
pea (a4)
jsr strcmp
addq.l #4,a7
tst.l d0
bne fnext
move. b 11(a4),d0 ; même nom, on vérifie que c'est pas un dossier
btst.l #7,d0
beq ffin
fnext:
jsr SymFindNext
move.l a0,d0
beq fnull
move.l d0,a4
bra flp
ffin:
move.w 12(a4),-(a7)
jsr HeapDeref
addq.l #2,a0
fnull:
unlk a6
movem.l (a7)+,a3/d5
rts


Par contre il faudrait que tu m'expliques comment tu as fait pour passer un pointeur sur ton SYMSTR dans l'appel de SymFindFirst, tout ce que j'ai vu, c'est le "pea 0" :
je remarque que tu l'as mis à NULL, mias apparemment a0 devait contenir l'adresse de la chaine avant l'appel, et ca change completement de ce que j'ai pu voir sur la doc de TIGCC
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

25

Luigi> Le code de BiHi marche très bien. Il faut simplement utiliser le fichier AMS au lieu de AMS_C (qui lui est prévu pour fonctionner avec CC).

26

Ok merci. Si on m'explique pas clairement les choses, c'est sur que moi je vais faire n'importe quoi
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

27

C'est expliqué dans le readme de AS embarrassed

28

Ah ben c'est parceque je lit les deux readme et que je m'embrouille
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

29

Je repose ma question de tout à l'heure plus clairement : pourquoi ca marche quand on met l'adresse (C ANSI) du nom de la variable dans a0 avant de lancer fopen, et qu'ensuite on pousse un 0 en 1er argument de SymFindFirst, là où la fonction attendait un pointeur sur le caractère nul de fin de la chaine?
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

30

Il a mis en commentaire, ce à quoi correspond son appel (SymFindFirst(NULL,FO_RECURSE)), regarde dans la doc de TIGCC à quoi ça correspond.