Oui pour le m68k tout les arguments d'une fonction C sont pusher sur la stack.
Par contre y'a quelque technique pour optimiser tout ca, je m'explique :
Prenons memcpy par exemple, son prototype c'est
void * memcpy(void *dst, const void *src, size_t len);
Donc en asm m68k pour recuperer les parametres faudrais faire un truc du genre :
[source=plain]move.l 4(sp), a0
move.l 8(sp), a1
move.l 12(sp), d0[/source]
Ce qui peut se simplifier en :
[source=plain]movem.l 4(sp), a0-a1
move.l 12(sp), d0[/source]
Mais si on change l'ordre des paramettres (cad les adresses en derniers), on peut faire :
[source=plain]movem.l 4(sp), d0/a0-a1
[/source]
Notre prototype serais par contre :
void * memcpy(size_t len, void *dst, const void *src);
Meme si ce n'est pas conseiller pour des fonctions de la libc standard, pour des fonctions perso c'est ce que je fait (et ce que je conseil).
La raison pour laquelle on ne peut pas garder le meme prototype pour cet exemple est que l'instruction movem accede d'abord au registres de donnee puis au registre d'adresse.
Apres ce petit apparte, j'en profite pour dire que j'ai commencer cette nuit le dev neogeo (mvs/aes d'abord) et un de-assemblage du bios (pour l'instant pas mal commenter, je dirais a 30

.
Le but est de faire comme pour ma lib de dev megadrive, cad code en asm pour la lib (acces a la memoire video, joystick etc ...) mais prevu pour coder en C par dessus.
Des que cela un peu plus mature je posterais tout ca ici.