Oui. Ça fonctionne comme en mode kernel, sauf que le programme se reloge lui-même plutôt que de faire recours à un TSR externe (le kernel).
Et ça vaut le coup: le code de relogement prend très peu de place, donc on économise de la place sur les gros programmes par rapport au format de relogements de AMS.
Kevin Kofler Le 24/07/2003 à 18:53Edité par Kevin Kofler le 24/07/2003 à 18:55 Le code de relogement pour relogements compressés prend actuellement 160 octets, 96 desquels sont pour le décodage des offsets, et donc partagés avec le support des BSS et d'autres fonctionnalités liées aux relogements. Et il me semble qu'il y a encore des optimisations possibles, donc d'ici la version finale, ça peut encore être réduit de quelques octets.
Quant au code de relogement pour relogements non-compressés, mais non-redondants (format style kernel), il prend encore moins de place (mais permet aussi moins de gains au niveau de la table). Le format optimal dépendra évidemment de la taille du programme (plus précisement du nombre de relogements qu'il contient).
Et je ne vois vraiment pas le problème. Dans TIGCCLIB, on a aussi un fichier par fonction, et c'est pratique, parce que si on veut éditer, à titre d'exemple, la fonction atoi, on édite atoi.s ou atoi.c et on n'a pas besoin de toucher au reste. On peut même éviter de recompiler le reste (Project/Make dans l'IDE; pour avoir la même chose en ligne de commande, tu peux utiliser un Makefile).
D'ailleurs, ton build.bat se résume à une ligne:
tigcc -ar INTERRUPT.asm variables.asm EnableSound.asm DisableSound.asm InstallSound.asm UninstallSound.asm Initialize.asm SetTempo_voice1.asm SetTempo_voice2.asm GetTempo_voice1.asm GetTempo_voice2.asm SetState.asm SetLoop.asm SetBeep_voice1.asm SetBeep_voice2.asm beep.asm PlayFX_voice1.asm PlayFX_voice2.asm PlayFX.asm GetFrequency_voice1.asm GetFrequency_voice2.asm PortStatus.asm Interrupt5.asm PlaySound_voice1.asm PlaySound_voice2.asm PlaySound.asm GetLength_voice1.asm GetLength_voice2.asm GetTime.asm GetState.asm GetMode.asm GetLoop.asm Time_voice1.asm Time_voice2.asm InitializeTime_voice1.asm InitializeTime_voice2.asm VoiceState.asm SetVoiceState.asm SetIntMask.asm -o polysnd2.a
Mais rien ne dit qu'ar existera toujours dans TIGCC 0.95 et supérieures... On a maintenant notre propre archiveur capable de lire les symboles dans les fichiers objet générés par A68k sans conversion, qui sera intégré à link.dll, chargée directement par IDE.exe et tigcc.exe. Ceci dit, on a aussi une interface en ligne de commande (ar-tigcc.exe) compatible avec les options les plus importantes de GNU ar qui sera probablement livrée avec TIGCC 0.95.
Tout ceci pour dire qu'il est une très mauvaise idée d'appeler des outils autres que tigcc.exe ou tprbuilder.exe dans ses lignes de commande.
Kevin Kofler Le 24/07/2003 à 19:33Edité par Kevin Kofler le 24/07/2003 à 19:35 D'ailleurs, à titre d'information, la version actuelle de ar-tigcc ne comprend pas -r. Seulement -rc et -qc. (Mais on peut changer ça si c'est vraiment nécessaire.)
Ça ne sert à rien. On linke par fichier objet, pas par section (du moins dans TIGCC 0.95). (Il y a une option pour supprimer les sections non référencées, mais je ne ferais pas confiance à ça à ta place. Et en plus, cette option peut être désactivée.)
Et pour finir, c'est du GCC. En assembleur, il faut déclarer les sections soi-mêmes pour utiliser cette méthode.
bah ça à l'air vachement bien tout ça, mais un point de détails:
vous entendez quoi par relogement ?
euh si je pose la question, c'est parce que j'ai pas bien compris pas parce que j'ai pas vu le post...
Au fait, Kevin, est-ce que maintenant (GCC 3.3 pre18), -mpcrel et -freg-relative-an fonctionnent correctement ?
Sally Le 25/07/2003 à 11:38 Ben en gros l'exécutable contient des pointeurs vers des endroits dont l'adresse n'est pas connue au moment de la compilation (seule l'adresse relative par rapport au début du fichier l'est) ; donc au moment du lancement du programme il faut écrire les bonnes adresses aux bons endroits dans l'exécutable, et c'est à ça que sert la table de relogement.

« Le bonheur, c'est une carte de bibliothèque ! » —
The gostak distims the doshes.Membrane fondatrice de la confrérie des
artistes flous.
L'univers est-il un
dodécaèdre de Poincaré ?
(``
·\ powaaaaaaaaa ! #love#
> Pas mieux qu'avant, à mon avis. Ces switches sont et ont toujours été expérimentaux.
Je sais, mais c'est un peu dommage... Il est bien sûr possible de faire sans, mais ils pourraient être intéressants (mode pc-relatif = pas de table de relogements; une solution pour s'en passer est soit -freg-relative-an qui ne marche pas super bien, soit une global register variable).
Ça m'étonnerait que l'algorithme soit fondamentalement différent. Mais j'avoue ne pas avoir vérifié.
Pen^2 Le 25/07/2003 à 12:54 je ne pense pas non plus qu'il soit different (l'algo), mais bon je precisais qu'une autre routine existait.