1

Mon prog marche parfaitement en mode doorsos.
pour lui mettre un _nostub j'ai du remplacer les JSR _ROM_CALL_x par :
MOVE.l ($C8),A4
ADD.l #$x*4,A4
MOVE.l (A4),A4
JSR (A4)
est-ce que c'est vraiment le plus rapide?
ça prend 3 octets de plus que l'instruction avec JSR!

bon donc une fois que j'ai fait ça j'ai pu compiler mon prog en nostub, mais quand je le quitte ça plante : adress error, et l'écran est un peu n'importe quoi...
QU'EST-CE QU'IL FAUT FAIRE POUR QUITTER NORMALEMENT EN NOSTUB??? (en ASM plz, je suis pas dans le forum "C"!)

thanks

2

fait chier j'ai répondu à ???HELP??? et du coup mon topic est plus tout en haut.
bon ben voilà ;-) histoire d'avoir des réponses rapides!

3

Tu peux faire une sauvegarde de status avec ER_Catch puis quitter ton prog avec ER_success
Cours et tutos Asm: http://membres.lycos.fr/sirryl

4

cf le site de PaXal

5

Alors, ZOlive:

>est-ce que c'est vraiment le plus rapide?

1. Tu peux optimiser:
 add.l #$x*4,a4 
 move.l (a4),a4

en:
move.l $x*4(a4),a4

2. Tu peux faire ce que fait TIGCC avec OPTIMIZE_ROM_CALLS:
move.l $c8,a5
tout au début du programme. Puis, il ne te reste qu'a faire:
 move.l $x*4(a5),a0
 jsr (a0)

Tu peux aussi utiliser a4 plutôt que a5, mais l'idée est de garder le contenu de $c8 dans le registre que tu utilises et mettre l'adresse de la fonction dans a0 qui de toute façon sera détruit par le ROM call.

>QU'EST-CE QU'IL FAUT FAIRE POUR QUITTER NORMALEMENT EN NOSTUB???

Il faut sauvegarder les registres modifiés.

1. La solution la plus facile:
movem.l d0-d7/a0-a6,-(a7)
tout au début du programme et:
movem.l (a7)+,d0-d7/a0-a6
tout à la fin

2. En fait, tu as le droit de modifier d0-d2 et a0-a1, donc il suffit de faire:
movem.l d3-d7/a2-a6,-(a7)
tout au début du programme et:
movem.l (a7)+,d3-d7/a2-a6
tout à la fin

3. Tu peux utiliser un movem ou des moves pour les registres que tu modifies uniquement. Par exemple, si tu n'utilises que a1, d2, a4 et a5, sachant que tu as le droit de modifier a1 et d2, il suffit de faire:
movem.l a4/a5,-(a7)
tout au début du programme et:
movem.l (a7)+,a4/a5
tout à la fin
Et si tu n'utilises que a1, d2 et a4, sachant que tu as le droit de modifier a1 et d2, il suffit de faire:
move.l a4,-(a7)
tout au début du programme et:
move.l (a7)+,a4
tout à la fin
(Ici, il y a un seul registre, donc pas besoin de movem.)
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é

6

PS: Il faudrait vraiment un tutorial pour le _nostub en assembleur. Peut-être que je vais finir par en écrire un...
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é

7

merci Kevin tu es un Dieu!
enfin qqn qui répond qqc de complet!!!

8

Pour promouvoir le nostub, Kevin d'abord !
(C nul je sais wink)