Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 33 732 187

  • Nb. de membres 193
  • Nb. d'articles 1 329
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  OS4 toutes plateformes confondues »» Appel système en assembleur PPC sous OS4

Appel système en assembleur PPC sous OS4

3 Modérateur(s)
K-LElwoodcorto
CentaurZ CentaurZicon_post
@JuLieN
Pour "GetTickCount", d'après le nom, tu devrais regarder du côté des fonctions du timer.device (GetSysTime, GetUpTime).
sinisrus sinisrusicon_post
Corto = c'est bien toi qui a eu les source de mplayer morphose? juste pour savoir si ta des p'tit info dessus un eventuel portage ou si tu a eu le temps de te penché sur le code?
corto cortoicon_post
Ok Julien, j'espère que tu pourras consacrer un peu de temps au développement !

Concernant AROS, il y a une discussion en cours sur l'ABI à choisir pour le PowerPC. Pour x86, je ne sais pas si des changements sont prévus (ce qui n'aurait à mon avis pas un gros impact) mais sur cette architecture, il y a tellement peu de registres que la pile est utilisée. Le PPC offre un grand nombre de registres donc ça n'aurait pas de sens d'utiliser la pile.

Pour la fonction GetTickCount, tu n'aura aucun mal à trouver ou écrire un équivalent. Mais si tu as besoin, cela pourra faire l'objet d'un autre thread.

Allez, un peu de bricolage chez moi et je me repenche sur le convertisseur PPS vers Hollywood, qui offre déjà toutes les fonctions dont j'ai besoin :)

Bon week-end à tous
JuLieN JuLieNicon_post
@Corto

Oui, je suis arrivé aux mêmes observations que toi, à propos de la manière dont OS4 passe les appels systèmes. Pour ce qui est d'AROS, je m'y étais déjà intéressé il y a 2-3 ans, et Aaron Digulla himself m'avait expliqué que les paramètres étaient passés via la pile (sur l'architecture x86 en tout cas). Mais il semblerait que l'ABI d'Aros soit en cours de remaniement, ce qui provoquera une incompatibilité binaire avec l'existant.

@K-L & Elwood

Développer est un bien grand mot pour l'instant (faute de temps). JE ne fais pour l'instant que regarder comment marche OS4 par rapport aux autres AmigaOSes.

Cela dit, j'ai essayé de porter mon jeu d'échecs sous OS4, à l'aide du portage de FreePascal fait par Chain-Q, et ça a... presque marché. Sur les trois classes qu'il comporte, deux se sont compilées sans problèmes. Par contre, la troisième fait appel à la méthode GetTickCount de Windows, et je n'ai pas encore pris le temps de chercher l'équivalent sous AmigaOS. Quelqu'un à un tuyau, d'ailleurs? La gestion du temps est primordiale dans un jeu d'échecs. Mon jeu vérifie plusieurs dizaines de fois par seconde combien de temps il consomme.
----------------------
Pourquoi sont-ce toujours ceux qui ont tort qui ne sont jamais d'accord avec moi?
K-L K-Licon_post
Nope, Julien développe pour AmigaOS 4 ;-)
--
AmigaONE X1000 1,8 Ghz (A-Eon), Radeon RX560, 2 Go de Ram et OS4.1 FE
Sam460LE 1,14 Ghz (ACube Systems), Radeon RX560, 2 Go de Ram et OS4.1 FE
corto cortoicon_post
Elwood : C'est peut-être un hello world qui réserve des surprises :)

Julien : Tu es toujours là ? J'espère que ça a pu t'aider. C'est en rapport avec AROS ?? J'ai vu qu'il y avait eu plein de mails au sujet de l'ABI PowerPC, vu que le support de cette architecture semble relancée avec le bounty sur le portage sur Sam440.
Elwood Elwoodicon_post
@JuLieN

J'espère qu'on verra bientôt un programme un peu plus "utile" qu'un Hello world ;-)

Je suis très friand de nouveaux programmes pour OS4 :-)
--
Philippe Ferrucci
Avec une Sam460 et AmigaOS 4.1, je suis eco-responsable. Cool !
corto cortoicon_post
Salut

Ca y est, j'ai pris le temps de regarder de plus près ce sujet qui m'intéresse aussi.

Pour voir ce que donne un hello en assembleur ou comment sont faits les appels systèmes, il suffit de faire le prog en C correspondant et "gcc -O2 -S source.c" donne le code assembleur (ou "vc -O2 -S source.c", ça peut être intéressant de comparer).

Sur OS4, les appels systèmes sont faits comme un appel C classique :
- registres dans r3, r4, r5, ...
- saut avec sauvegarde de l'adresse dans le registre lr

Donc pour un OpenLibrary("dos.library", 50), on a :
- dans r3 l'adresse de l'interface IExec
- dans r4 l'adresse de la cha?ne
- dans r5 la version

Pour l'appel lui-même :
- gcc utilise le registre ctr dans lequel il met l'adresse de la fonction chargé avec un offset par rapport à IExec, puis appelle "bctrl" (saut à l'adresse contenue dans ctr et met l'adresse de la prochaine instruction dans lr)
- vbcc utilise le registre lr directement avec là aussi l'adresse de la fonction et qu'il appelle avec "blrl" (saut à l'adresse contenue dans lr et en même temps met dans lr l'adresse de la prochaine instruction)

Voilà ce que j'en ai compris. MorphOS utilise quant à lui un wrapper, passant les arguments dans les pseudo-registres 68k.
JuLieN JuLieNicon_post
Juste pour vous dire que ça y est, j'ai résolu le problème (avec les conseils de quelques uns sur le site UtilityBase, dont l'ami Corto ;-) )

Je vais nettoyer tout cet affreux code pondu par gcc et vous montrerai un Hello World présentable dès que possible! :b
----------------------
Pourquoi sont-ce toujours ceux qui ont tort qui ne sont jamais d'accord avec moi?

Message édité par : JuLieN / 10-01-2008 23:32
alex alexicon_post
Ah oups, il semble que je "m'a trompé" on passe bien les paramètres dns les registres, mais ça dot être fait automatiquement par le compilo C alors.... Désolé :-?
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme