printf est une routine de tigcclib.a, donc il faut que tu linkes tigcclib.a à ton projet pour que ça marche.
Renseigne-toi sur le fonctionnement de cette routine sur internet, il y a énormément de doc.

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
zegoo Le 30/01/2006 à 18:22 dsl, je comprends vraiment pas !
ou utilises spritnf puis drawstrXY

<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)
<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
zegoo Le 30/01/2006 à 18:32 Je ne trouves pas sprintf dans l'aide de tigcc!! Commeny çà marche, c'est une rom_call ?
zegoo Le 30/01/2006 à 21:51 pourquoi çà ne fonctionne pas ?
move.w #1000,d0
move.w #1,-(a7)
move.w d0,-(a7)
move.w sprintf*4(a5),a0
jsr (a0)
bin si, c'est un rom_call

<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)
<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
zegoo Le 30/01/2006 à 22:44 Dites en fouillant dans les posts, j'ai trouvé un bout de code de M. KK, je l'ai repris à ma sauce, çà marche pas !!! Vous savez pourquoi ? :
move.w #234,d0
move.w #23,d1
add.w d0,d1
move.w d1,-(a7) ;nombre
pea format(pc) ;format
pea buffer(pc) ;buffer
move.l sprintf*4(a5),a0
jsr (a0) ;appel de sprintf
addq.l #8,a7 ;adjuste la pile
move.w #1,(a7) ;Attr = A_NORMAL
pea.l buffer(PC) ;Il faut remettre str sur la pile car sprintf modifie l'adresse. dixit M.KK
clr.l -(a7) ;x = y = 0
move.l DrawStr*4(a5),a0
jsr (a0) ;appel de DrawStr
est-ce que tu as bien fait "move.l $C8,a5" au début de ton programme ?
« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)
zegoo Le 31/01/2006 à 07:58 M.Pollux, oui
M.Flanker est "illegal instruction"
zegoo Le 31/01/2006 à 08:47 J'ai essayé le code de M.KK tout seul et il fonctionne, j'en déduis donc que c'est le reste de mon programme qui déconne !
zegoo Le 31/01/2006 à 09:34 J'ai trouvé ce qui n'allait pas, maintenant çà fonctionne. J'ai lu dans un post que la rom_call sprintf était lente surtout si elle est placée dans une boucle principale. Pour éviter ce problème, faut-il coder manuellement la conversion du chiffre en chaine, à afficher ?
zegoo Le 31/01/2006 à 10:16 Je ne suis vraiment pas doué, qu'est-ce qui ne va pas là dedans ? :
move.l #0,d0
move.l #1,d1
loop5:
move.w d1,-(a7) ;nombre
pea format(pc) ;format
pea buffer(pc) ;buffer
move.l sprintf*4(a5),a0
jsr (a0) ;appel de sprintf
addq.l #8,a7 ;adjuste la pile
move.w #1,(a7) ;Attr = A_NORMAL
pea.l buffer(PC) ;Il faut remettre str sur la pile car sprintf modifie l'adresse.
clr.l -(a7) ;x = y = 0
move.l DrawStr*4(a5),a0
jsr (a0) ;appel de DrawStr
lea 10(a7),a7 ;nettoyage de la pile
add.l d0,d1
cmp.l #100,d1
bne loop5
de nouveau, il se passe quoi ?

<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)
<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
zegoo Le 31/01/2006 à 10:53 Désolé pour les embetements. En fait je veux faire une boucle qui affixhe 1,2,3...jusqu'à 100 ou plus. A l"écran, il doit y avoir 1 puis 2 sur le 1, l'écran reste figé et je crois que je reste dans la boucle !!! Je suis obligé de faire un reset sur vti!
zegoo Le 31/01/2006 à 11:01 En fait, j'ai changé la valeur de d0, j'ai mis 1 sinon c logique que çà ne marche pas mais çà ne marche toujours pas, on dirait que d1 se mets à 0 ! Bizarre
zegoo Le 31/01/2006 à 11:13 Ouais, d1 est modifié alors j'ai fait çà et çà marche :
move.l #1,d3
loop5:
move.l ScreenClear*4(a5),a0
jsr (a0)
move.w d3,-(a7) ;nombre
pea format(pc) ;format
pea buffer(pc) ;buffer
move.l sprintf*4(a5),a0
jsr (a0) ;appel de sprintf
addq.l #8,a7 ;adjuste la pile
move.w #1,(a7) ;Attr = A_NORMAL
pea.l buffer(PC) ;Il faut remettre str sur la pile car sprintf modifie l'adresse.
clr.l -(a7) ;x = y = 0
move.l DrawStr*4(a5),a0
jsr (a0) ;appel de DrawStr
lea 10(a7),a7 ;nettoyage de la pile
add.l #1,d3
cmp.l #1001,d3
bne loop5
zegoo Le 31/01/2006 à 11:20 Effectivement c'est très rapide par rapport au basic, environ 5 fois plus rapide. Est-ce que ce j'ai fait est optimisable encore ?
Carrément !
Tu peux éviter d'effacer tout l'écran à chaque fois.
Ne pas appeler sprintf qui est très lent, mais faire la conversion toi-même.
Ne pas appeler DrawStr, qui est lent aussi, mais afficher toi-même.
Mais de toute façon, même si tu triples la vitesse de ce code ça ne servira pas à grand chose, car ton code actuel est déjà vraiment nettement plus rapide que le TI-BASIC.

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
zegoo Le 31/01/2006 à 11:41 Merci M.Sasume,
Ok pour l'écran, pour la conversion je n'ai pas compris le principe et comment afficher sans utiliser drawstr ?
Pour la conversion, il faut comprendre qu'une chaîne de caractères est une suite d'octets, dont la valeur de chacun est vu comme un code ASCII.
Par exemple, le code de 'A' est 65.
Donc la chaîne de caractères "ABCD" est stockée en mémoire sous la forme dc.b 65,66,67,68,0 (il y a un caractère nul pour indiquer la fin de la chaîne, par convention).
Le code du caractère '0' est 48.
Donc là où ton nombre contient 0, il faudra écrire 48 dans la chaîne de caractères, pour 1 ce sera 49, et ainsi de suite.
En fait, cela revient à ajouter la valeur '0' (c'est-à-dire 48) à chaque chiffre du nombre.
Tu peux regarder dans les sources de tigcclib la fonction itoa pour avoir une idée de comment coder ça.
Ensuite, pour ce qui est de l'affichage... Tu peux ne pas utiliser DrawStr si tu écris ta propre routine d'affichage qui serait moins générique donc facilement plus rapide.

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
zegoo Le 31/01/2006 à 20:47 Merci M.Sasume, j'ai rien trouver sur itoa d'intéressant en ASM, c'est encore le meme soucis dans l'aide de tigcc...plein de trucs pour faire du C...quasiment rien pour faire de l'asm !!!
Je ne connais pas le principe d'affichage sans drawstr, doit-on utiliser sprintf ?
Non.
Essaie de lire des sources sur l'affichage de sprites.
Pour itoa, c'est dans les sources de tigcclib qu'il faut regarder.

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
zegoo Le 01/02/2006 à 14:26 j'ai étudier une source que je n'arrive pas à mettre en oeuvre :
move.l #50; x
move.l #50; y
lea croix,a0
move.l #LCD_MEM,a1
move.l d1,d2 ; d1 et d2 contiennent la même valeur
lsl.l #5,d1 ; On multiplie d1 par 2^5, soit 32
lsl.l #1,d2 ; On multiplie d2 par 2^1, soit 2
sub d2,d1 ; On soustrait d1*32 et d2*2, en factorisant on a d1*(32-2) d'ou d1*30 !
move.l d0,d2 ; On copie d0 dans d2
lsr #3,d0 ; On divise d0 par 2^3 soit 8
and #7,d2 ; l'instruction AND permet grâce à un miracle de la nature d'obtenir le reste de d2/8
add d0,d1 ; Ajout du reste à d1
add #1,d1
add d1,a1 ; Ajout du total à a1
move.b #8,d3
sub d2,d3
move.w #7,d1
boucle:
clr.w d0
move.b (a0)+,d0
lsl.w d3,d0
move.w d0,(a1)
add #20,a1
dbra d1,boucle
croix: ; Placer les données en fin de programme avec les autres variables.
dc.b %10000001
dc.b %01000010
dc.b %00100100
dc.b %00011000
dc.b %00011000
dc.b %00100100
dc.b %01000010
dc.b %10000001