Patou Le 02/02/2003 à 14:25 Je voudrais savoir comment utiliser les fichiers textes "ams", "ams_c", "c_attoi", "c_attol", "c_attr", etc... avec cc. Je ne comprends pas comment les inclure dans mon programme.
"Mi lernas Esperanto. G^i estas tre facila lingvo"
Apprenez vous aussi l'Esperanto!
Cours gratuit
ici et dictionnaire
là#include "c_attoi"
Mais c'est inutile pour AMS_C car il est inclus automatiquement lors de la compilation.
Patou Le 02/02/2003 à 18:37 merci. mais quelle est la différence entre "ams" et "ams_c"?
"Mi lernas Esperanto. G^i estas tre facila lingvo"
Apprenez vous aussi l'Esperanto!
Cours gratuit
ici et dictionnaire
làams est pour les programmes codés directement en assembleur, ams_c est pour ceux créés par CC. C'est parce que les numéros dans ams_c sont négatifs, un hack pour que AS puisse traduire jsr DrawStr en une séquence d'appel valide.
D'ailleurs, je n'ai pas compris comment fonctionnaient les appels de ROM_CALLs avec CC. Est-ce que tu peux m'expliquer ?
Appels de romcalls avec CC: comme dans TIGCC!
Seul truc a vérifier, si le prototype est bien déclaré (c_attrs sert à ca en définissant le prototype de certaines romcalls). Cela ne sert a rien de declarer tous les prototypes des romcall, seulement ceux qui retournent autre chose que du short (pour les paramètres, cela n'a pas beaucoup d'importance)
Pour ams_c, cela ne sert a rien de l'inclure, c automatique:
exemple:
include "c_attrs"
...
main()
{
...
}
Non, il me semble que la méthode utilisée par Nitro pour appeler les ROM_CALLs n'est pas comme celle qu'utilise TIGCC. Un simple jsr Nom_Du_Rom_Call suffit pour appeler les ROM_CALL...
C'est juste que AS transforme les jsr avec une adresse négative en des ROM_CALLs (non optimisés d'ailleurs - sauf si tu supprimes la définition de old_ams dans ams_c, ce qui te donnera des ROM_CALLs en ligne F).
Patou Le 03/02/2003 à 18:22 Je n'arrive pas à trouver la doc pour utiliser les ROM_CALLs...
"Mi lernas Esperanto. G^i estas tre facila lingvo"
Apprenez vous aussi l'Esperanto!
Cours gratuit
ici et dictionnaire
là jackiechan Le 03/02/2003 à 19:57Edité par jackiechan le 03/02/2003 à 20:54 Avec CC ?
Sinon, Kevin, est-ce que c'est à cause de ce hack que l'on ne peut pas appeler plus de 3 ou 4 fois un ROM_CALL ? Si oui, pourquoi ? (désolé, je dois te soûler autant que PingoO me soûle avec ses questions sur le scrolling)
Patou Le 03/02/2003 à 20:30 Oui, avec CC: quels arguments utiliser, etc...
"Mi lernas Esperanto. G^i estas tre facila lingvo"
Apprenez vous aussi l'Esperanto!
Cours gratuit
ici et dictionnaire
làAh. Ben il faut bien connaître les rom_calls pour ça.
Mais apparemment, Jarode a fait un fichier où les prototypes sont donnés, ça pourra toujours t'aider.
Patou Le 03/02/2003 à 20:52 Oui, mais toi, par exemple, comment tu les connais?
"Mi lernas Esperanto. G^i estas tre facila lingvo"
Apprenez vous aussi l'Esperanto!
Cours gratuit
ici et dictionnaire
làParce que j'ai lu la doc de TIGCC. Tous les prototypes des ROM_CALLs sont dedans.
Ainsi que leur description.
Le readme l'indique, ce referer a la doc TIGCC pour les prototypes des romcalls et leurs utilisation. Encore faut t'il savoir ce qu'on veut.
jrs nom_romcall suffit avec le fichier 'ams' présent dans mon pack car ce sont directement leur adresses qui sont présisés et nom pas le numéro (CE QUI PERMET DE FAIRE PLUSIEURS APPELS DE LA MEME ROMCALL). Cela est dus au fais que j'ai appliqué je ne sais plus quel patch.
Dans mon readme, j'ai surtout developpé la programmation avec CC et non AS car les fonctions sont pour CC.
Dans le fichier 'ams', je suis désolé, je viens de vérifier, mais ce n'est pas l'adresse des rom_call, mais leur numéro (c'est lié, mais quand même).
Donc on ne peut pas faire jsr nom_du_rom_call à mon avis.
Il faut faire :
move.l $c8,a0
move.l 4*nom_du_rom_call(a0),a0
jsr (a0)
Mais je dois me tromper. Tu connais sûrement mieux que moi ton projet.
Ah ok, j'ai vu le fichier 'ams_c' en fait.
C'est effectivement l'adresse des rom_call qui est spécifiée, mais j'ai bien peur qu'elles changent selon les versions d'AMS, non ?
Si ce n'était pas le cas, je ne vois pas pourquoi TIGCC s'embêterait encore à faire ce qu'il fait actuellement, c'est-à-dire charger l'adresse de la table des rom_calls, puis charger l'adresse du rom_call voulu à partir de cette table puis enfin l'exécuter.
Le fait que dans le fichier 'ams' il y ai les numéros et dans le fichiers 'ams_c' il y ai leurs adresses, c dut au fait que j'ai appliquer un patch au fichier 'ams_c' pour pouvoir faire des appels successifs a une meme romcall sous CC.
Pour 'ams' c l'original. C'est une erreur de ma part, j'aurai du fournir une version de 'ams_c' non modifié (je l'avais oublié).
TIGCC dois faire comme dans le post #22 (c un peut plus universel que jrs $xxxxx)
Donc pour récapituler les appels de romcalls:
Pour les sources ASM: voir post #22
pour les sources C: comme la prog C sous TIGCC
Mais un jsr ($xxxxxx).l serait légerement plus optimisé à mon avis (en taille). Enfin bon c'est du détail, mais comme jackiechan je vois pas pourquoi au moins AMS ne fait pas ça... ou alors $c8 ne contient pas la meme adresse sur tous les AMS.