Page 1 of 2

Fichier .asm pas pris en compte par la toolchain

Unread postPosted: 30 Aug 2025, 16:29
by Bobb
Bonjour,
J'essaie de compiler un projet C+ASM avec la toolchain (dernière version nightly), mais le fichier .asm présent dans mes sources en même temps que les fichiers .c n'est pas pris en compte par la toolchain.
Le projet est dispo ici : https://github.com/Bobb56/neon. La commande exacte que j'utilise pour compiler est C:\CEdev\bin\make.exe -f Makefile.ez80

Re: Fichier .asm pas pris en compte par la toolchain

Unread postPosted: 30 Aug 2025, 16:39
by Adriweb
C'est très louche ta structure de projet.
Pourquoi ce build.bat qui fait des copies et des lancements bizarres ?

Une fois la toolchain installée et les variables d'environnement mises en place, il ne devrait rien y avoir à faire de plus que le "make" habituel qui s'occupe de tout.

Autrement dit directement avec les sources (asm, c...) dans le dossier src, et voilà

Re: Fichier .asm pas pris en compte par la toolchain

Unread postPosted: 30 Aug 2025, 16:41
by Bobb
Oui, le problème est que ce projet doit pouvoir être compilé à la fois pour linux, windows et ez80. Et le makefile pour windows et linux est très différent de celui pour ez80. Du coup je copie les sources dans un autre dossier qui a un makefile spécial pour la toolchain.

Mais la seule chose que fait le build.bat est copier les sources et lancer la commande de compilation

Re: Fichier .asm pas pris en compte par la toolchain

Unread postPosted: 30 Aug 2025, 17:04
by Adriweb
Mais ce n'est pas un problème. Tu peux avoir la même structure exactement et juste 3 makefiles différents. C'est assez commun. Par exemple Makefile.ez80, Makefile.linux, Makefile.windows. Et tu les appelles avec make -f [...]

Re: Fichier .asm pas pris en compte par la toolchain

Unread postPosted: 30 Aug 2025, 17:20
by Bobb
ok merci je vais modifier ça alors

Re: Fichier .asm pas pris en compte par la toolchain

Unread postPosted: 31 Aug 2025, 11:21
by Bobb
J'ai modifié le repo pour compiler tout avec les mêmes sources et 3 Makefiles différents. Je précise que le problème ne vient absolument pas de ça, et persiste encore. Voici l'erreur exacte que j'obtiens pendant le linking :
C:\CEdev\meta\ld.alm [1568] macro ? [1295] :read? [14] obj\\lto.src [85096]:
sbc hl, iy
sbc? [74]
Custom error: invalid arguments.
make: *** [bin/NEON.bin] Error 2

Re: Fichier .asm pas pris en compte par la toolchain

Unread postPosted: 31 Aug 2025, 11:30
by Adriweb
Tant mieux pour les makefile, mais pour l'erreur ASM c'est normal, sbc hl, iy n'existe pas en eZ80, d'où l'erreur d'arguments invalides pour sbc :P

Re: Fichier .asm pas pris en compte par la toolchain

Unread postPosted: 31 Aug 2025, 11:42
by Bobb
Oui, je comprends bien, le seul problème est que le seul contenu de mon fichier .asm est :
Code: Select all
assume  adl=1

section .text

public  reset_stack_and_registers
reset_stack_and_registers:
    ret

public  save_stack_and_registers
save_stack_and_registers:
    ret

public  switch_registers
switch_registers:
    ret

public  get_stack
get_stack:
    ret

extern  launch_process


A aucun moment je n'utilise d'instruction sbc. Et de toute façon, le log du makefile montre que les seuls fichiers compilés sont des fichiers C.

L'instruction sbc hl, iy provient de lto.src, un fichier intermédiaire créé pendant la compilation.

Cette instruction est insérée lors de la compilation de cette fonction C :

Code: Select all
ProcessCycle* loadNextLivingProcess(ProcessCycle* pc) {
    do {
        pc = pc->next;
    }
    while (pc->process->state == Finished);

    switchGlobalLocalVariables(pc->process->varsToSave);
    return pc;
}


Voici le code assembleur généré (ligne 71) :

Code: Select all
_loadNextLivingProcess:
   push   ix
   ld   ix, 0
   add   ix, sp
   lea   hl, ix - 23
   ld   sp, hl
   ld   iy, (ix + 6)
   lea   hl, ix - 5
   ld   (ix - 11), hl
BB395_1:
   ld   iy, (iy + 3)
   ld   bc, (iy)
   push   bc
   pop   hl
   lea   de, iy
   push   bc
   pop   iy
   ld   a, (iy + 56)
   push   de
   pop   iy
   cp   a, 2
   jr   z, BB395_1
   ld   (ix - 8), iy
   push   hl
   pop   iy
   ld   iy, (iy + 69)
BB395_3:
   lea   hl, iy
   add   hl, bc
   or   a, a
   sbc   hl, bc
   jp   z, BB395_9
   ld   hl, (iy)
   push   hl
   pop   bc
   add   hl, bc
   or   a, a
   sbc   hl, bc
   jp   z, BB395_9
   ld   (ix - 17), iy
   ld   de, (ix - 11)
   push   bc
   pop   iy
   ld   (ix - 20), iy
   lea   hl, iy
   ld   bc, 5
   ldir
   ld   hl, (iy + 5)
   ld   iy, (_global_env)
   ld   de, (iy + 62)
   ld   (ix - 14), de
   ld   iy, (ix - 14)
   ld   iy, (iy + 3)
   ld   bc, 5
   call   __imulu
   push   hl
   pop   de
   ld   (ix - 23), de
   add   iy, de
   push   iy
   call   _update_if_promise
   pop   hl
   ld   iy, (ix - 14)
   ld   hl, (iy + 3)
   ld   iy, (ix - 20)
   ld   de, (ix - 23)
   add   hl, de
   lea   de, iy
   ld   bc, 5
   or   a, a
   sbc   hl, iy
   add   hl, iy
   jr   c, BB395_7
   ldir
   jr   BB395_8
BB395_7:
   add   hl, bc
   dec   hl
   ex   de, hl
   add   hl, bc
   dec   hl
   ex   de, hl
   lddr
BB395_8:
   ld   hl, (iy + 5)
   ld   iy, (_global_env)
   ld   iy, (iy + 62)
   ld   iy, (iy + 3)
   ld   bc, 5
   call   __imulu
   push   hl
   pop   de
   add   iy, de
   lea   de, iy
   ld   hl, (ix - 11)
   ldir
   ld   iy, (ix - 17)
   ld   iy, (iy + 3)
   jp   BB395_3
BB395_9:
   ld   hl, (ix - 8)
   ld   sp, ix
   pop   ix
   ret



Il s'agit d'un problème du générateur de code. Je suis donc repassé sur la version 12.1 stable de la toolchain, mais ça ne règle pas l'erreur.

Re: Fichier .asm pas pris en compte par la toolchain

Unread postPosted: 31 Aug 2025, 12:07
by Adriweb
Ah, c'est étrange parce que ça voudrait dire que seulement toi est tombé sur ce bug, depuis toutes ces années ? 😂
Je vais creuser avec les experts habituels.

Mais sinon les "asm" ne sont pas compilés, puisqu'ils sont déjà en ASM. le fait que tu vois l'erreur sur le sbc montre bien qu'il est pris en compte dans le build, donc pas de problème à ce niveau la.

Re: Fichier .asm pas pris en compte par la toolchain

Unread postPosted: 31 Aug 2025, 12:13
by Adriweb
Si tu tentes avec -Oz au lieu de O3, dans le makefile, c'est mieux ?