1

Bonsoir, voilà ce que j'ai en fin de programme:

texte_1:
 dc.b "Il était une fois,",0
 dc.b "Dans la ville de Foix",0


Pourquoi seule la première ligne s'affiche ?

2

3

Merci Martial,
C'est bien ce que je pensais.
J'ai enlever le ",0" de la première ligne, çà n'a rien changé.
J'utilise DrawStr.
Effectivement avec un autre label, çà fonctionne en rapellant la fonction d'affichage mais j'ai vu dans certaine source qu'un label pouvait contenir plusieurs dc.b, alors je cherche à comprendre comment çà fonctionne.

Je dois rapeller la fonction d'affichage avec un pointeur! Je ne comprends pas.

4

Fait un nouveau label (un label c'est un pointeur) pour la deuxième chaîne.

Sinon tu peux remplacer le zéro à la fin de la première chaîne par un 13, et appeler printf au lieu de DrawChar. printf passera à la ligne en voyant le code 13.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

5

printf est une ROM_CALL ?

move.l printf*4(a5),a0
 jsr (a0) ;appelle printf


>>relocatability error !

6

Non printf fait partie de tigcclib smile
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

7

8

Martial>
e te déconseille printf en assembleur, ça doit peser dans le 1,5 ko j'imagine, c'est ridicule, et ça ne te fera pas comprendre.

Avec ta déclaration, si tu laisses ton 0, on se retrouve avec ça en mémoire (regarde dans un débogueur) :

'I','l',' ','é','t','a','i','t',' ','u','n','e',' ','f','o','i','s',0,'d','a','n','s',' ','l','a', etc...


sans le 0, ça donne ça :

'I','l',' ','é','t','a','i','t',' ','u','n','e',' ','f','o','i','s','d','a','n','s',' ','l','a', etc...

Ca m'étonnerait donc que ça ne fasse aucune différence.

Je suis entièrement d'accord avec toi.
Et où as tu vu des sources sans label? Je suis étonné.

Je n'ai jamais écris cela !

J'ai écris; "...mais j'ai vu dans certaine source qu'un label pouvait contenir plusieurs dc.b,..."

9

10

printf ne fait pas dans les 1,5 ko. Si j'ai bonne mémoire, elle doit faire une vingtaine d'octets. L'essentiel de la fonction est situé en ROM.

L'implémentation de printf dans la bibliothèque de TIGCC consiste à pousser l'adresse de DrawChar sur la pile et à appeler la fonction générique en ROM (qui sert à la fois pour printf, sprintf et fprintf).

Pour avoir accès à la bibliothèque de TIGCC, il suffit de dire à l'éditeur des liens de consulter tigcclib.a, c'est une option de plus dans la ligne de commande. Enfin de mémoire... En gros le principe est là smile
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

11

Il ne pousse pas DrawChar comme pointeur de callback (ça ne marcherait pas), mais fputc, fonction de TIGCCLIB qui fait quand-même quelques trucs en plus que juste appeler DrawChar.
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é

12

Et donc au total ça prend combien d'octets ?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

13

14

C'est la fonction générique qui sert pour sprintf, fprintf et printf wink Pas DrawChar.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

15

16

OK, autant pour moi.
Mais je lance un pari : Le ROM_CALL sprintf fait appel à la même fonction générique que fprintf et printf smile
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

17

18

Tu penses ?
Il me semble que non. La fonction générique prend en argument un pointeur vers une fonction. Nommons "A" cette fonction. Pour chaque caractère rencontré par la fonction générique, elle regarde si c'est un %. Si oui, elle le traite. Ensuite, elle appelle A.

Quand on a appelé printf, A est une fonction qui écrit un caractère à l'écran (entre autres).
Quand on a appelé sprintf, A est une fonction qui ajoute un caractère sur une chaîne.
Quand on a appelé fprintf, A est une fonction qui ajoute un caractère dans un fichier.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

19

20

printf (TIGCCLIB), fprintf (TIGCCLIB) et sprintf (AMS) font tous appel à la même fonction interne de AMS, vcbprintf, que les routines de TIGCCLIB trouvent en regardant dans le code binaire de sprintf (sick, mais on ne peut pas faire plus propre). Cette fonction s'occupe du formatage et "affiche" les caractères en appelant un callback qui lui est passé. Pour sprintf, c'est un callback qui rajoute le caractère au buffer, pour printf, c'est fputchar, pour fprintf, c'est fputc. fputchar appelle DrawChar, pas DrawStr, la chaîne est affichée caractère par caractère, pour chaque caractère, vcbprintf appelle le callback.
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é

21

22

Waouh !!! Tout çà c'est du chinois pour moi.
Je réexplique mieux ce que je voulais faire:

Supposons que je veuille écrire des lignes d'instructions (d'aide) pour un jeu, je prefererais afficher en une seule fois tous les dc.b figurant dans une étoquette avec un saut de ligne à chaque fois.
Certains le font dans leur programme (Kevin Koffler par exemple), mais comment font -ils ?

23

24

zegoo (./22) :
Certains le font dans leur programme (Kevin Koffler par exemple), mais comment font -ils ?

Tu penses auquel de mes programmes là? Si tu penses aux tables de touches de XtraKeys, ce n'est pas du texte que j'affiche là, c'est une image. gni (J'ai dessiné le texte pixel par pixel dans Paint à l'époque, pour avoir exactement la taille qu'il me faut. gni)
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é

25

Kevin>Je pensais à h220xtsr.asm dans Xtrakeys.
Dans ta section "error message", tu écris:
...
trap4DL: dc.b 'Please temporarily uninstall any memory resident keyboard '
             dc.b 'auto-repeat accelerators or password programs before '
             dc.b 'installing or updating h220xTSR.',0
...

message d'erreur que tu lances par:
...
trap4_already:
 move.l #$10000,-(a7)
 pea.l trap4DL(PC)
 pea.l trap4DLT(PC) ;"trap 4 already hooked" error message 
 bra showmsg
...

Je suis Newbie mais en regardant "showmsg", je vois que tu utililises une boîte de dialogue pour l'affichage et chaque ligne de "trap4DL" s'affiche ligne après ligne; d'où mon interrogation.

26

27

Et les sauts de lignes que AMS affiche n'ont rien à voir avec ceux dans le code source, c'est AMS qui décide où arrêter la ligne.
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é

28

Bon, le plus simple pour moi serait de faire une boucle avec une table d'offsets comme le propose Martial ?

29

Oui
Tout ce qui passe pas par le port 80, c'est de la triche.