Sasume
: Pour le saut, quelle touche est la plus pratique sur TI-92+ ? Et sur la V200 ? (ça m'arrange si c'est une de celles-ci : Hand, Shift, Diamnd, 2nd)
Sinon, quelques questions : quand on invoque TIGCC avec plusieurs fichiers sources, comment les transmet-il au linker ?
Comment le linker sait-il quel fichier objet il doit mettre en premier (parce que s'il ne met pas celui où il y a le main, ce n'est pas pratique).
Je suppose qu'il les met dans l'ordre où on les lui passe sur la ligne de commande.
Avec le nouveau linker, comment savoir dans quelle section je dois mettre mon code ou mes données ? Quelles sont les sections qui existent ?
L'optimisation cut-ranges permet de gagner de la place sur les instructions qui ont été racourcies par a68k lors de l'assemblage, c'est bien ça ?
Quad je compile avec cette option, je gagne 4 octets. Cela veut dire que j'ai écrit quelque part une instruction qui a pu être remplacée par une autre plus petite, comment retrouver cet endroit dans mes sources ?
Kevin KoflerJe pense utiliser [HAND] pour des raisons de simplicité (Mac> elle désigne la même touche que lock, non ?), plutôt que [F1].
:Sasume
: Pour le saut, quelle touche est la plus pratique sur TI-92+ ? Et sur la V200 ? (ça m'arrange si c'est une de celles-ci : Hand, Shift, Diamnd, 2nd)
[HAND] est faisable pour les 2. Sur la TI-92+, [F1] serait peut-être plus pratique.
J'ai dit main, mais je pensais "début du programme".Comment le linker sait-il quel fichier objet il doit mettre en premier (parce que s'il ne met pas celui où il y a le main, ce n'est pas pratique).
Même si _main n'est pas en premier, avec TIGCC 0.95, ça marche sans problèmes.
Cette optimisation (cut-ranges) permet de remplacer quelles instructions précisément ? Si c'est du remplaçage "adressage absolu" par "adressage PC-relatif", ça ne me sert à rien puisque je n'utilise aucune adresse absolue pour accéder à mes données.Quand je compile avec cette option, je gagne 4 octets. Cela veut dire que j'ai écrit quelque part une instruction qui a pu être remplacée par une autre plus petite, comment retrouver cet endroit dans mes sources ?
Mauvaise question.La bonne question est: Suis-je censé faire ce remplacement moi-même? Et la réponse est non. L'optimisation du linker sert justement à transformer des références absolues en PC-relatives là où on connait la distance seulement en temps de linking!
Sasume
: (Mac> elle désigne la même touche que lock, non ?)
Au fait, pour le support des différents modèles, vous préférez unn programme compatible on-calc mais un peu plus gros ou bien des programmes différents selon les modèles ?
Même si _main n'est pas en premier, avec TIGCC 0.95, ça marche sans problèmes.J'ai dit main, mais je pensais "début du programme".
En ce qui concerne les sections, où va mon code lorsque je ne précise rien ?
Mauvaise question.Cette optimisation (cut-ranges) permet de remplacer quelles instructions précisément ? Si c'est du remplaçage "adressage absolu" par "adressage PC-relatif", ça ne me sert à rien puisque je n'utilise aucune adresse absolue pour accéder à mes données.La bonne question est: Suis-je censé faire ce remplacement moi-même? Et la réponse est non. L'optimisation du linker sert justement à transformer des références absolues en PC-relatives là où on connait la distance seulement en temps de linking!
En fait, je voulais savoir à quel endroit l'instruction est changée parce que j'essaie de faire attention quand je code à utiliser le plus possible l'instruction la plus petite pour faire ce que je veux faire (par ex : addq au lieu de add quand c'est possible). Or si le linker trouve quelque chose à optimiser, c'est que je n'ai pas bien fait mon boulot, donc je veux savoir où je me suis trompé.
Je sais que ce sont plutôt des optimisations qui se font en temps d'assemblage par a68k, mais comme j'ai remarqué que votre linker fait parfois des trucs qui devraient être fait en temps d'assemblage, j'ai pensé que c'était peut-être le cas ici.
Mais peut-être que non, auquel cas ce n'est pas la peine que j'essaie de relire mon code pour trouver mon erreur.
; adresses utiles AI1 equ $40064 AI5 equ $40074
0x000078: 42 93 42 AB 00 04 61 00 0x000080: <2B: Afficher (->) (rel)> 0x000082: 61 00 0x000084: <2B: GestionBarreSaut (->) (rel)> 0x000086: 61 00 0x000088: <2B: GestionPerso (->) (rel)> 0x00008A: 61 00 0x00008C: <2B: GestionCamera (->) (rel)> 0x00008E: 61 00 0x000090: <2B: Afficher (->) (rel)>
0x000078: 42 93 42 AB 00 04 61 0x00007F: <1B: Afficher (rel) - 1> 0x000080: 61 00 0x000082: <2B: GestionBarreSaut (rel)> 0x000084: 61 00 0x000086: <2B: GestionPerso (rel)> 0x000088: 61 00 0x00008A: <2B: GestionCamera (rel)> 0x00008C: 61 0x00008D: <1B: Afficher (rel) - 1>
bsr Afficher \MainLoop: bsr GestionBarreSaut bsr GestionPerso bsr GestionCamera bsr Afficher
bsr.s Afficher \MainLoop: bsr GestionBarreSaut bsr GestionPerso bsr GestionCamera bsr.s Afficher
VertyosJ'ai essayé de faire bien attention, normalement.
: J'ai l'impression que quand on veut lacher la barre au moment où elle est remplie au maximum, ça ne saute pas, comme si il y avait un décalage entre ce qui est affiché et la puissance réelle du saut. Je me trompe ?
Mon code se résume à ça :si l'utilisateur relâche [2nd] déclencher l'évènement SAUT sinon si le remplissage du au passage précédent est >= 32 réinitialiser la barre sinon si le temps écoulé depuis la dernière augmentation est suffisantMais j'avoue que c'est actuellement difficile de faire un saut avec la barre pleine (à 32) parce qu'avant d'augmenter la valeur de la barre de 1, je vérifie qu'il se soit écoulé un certain temps, ce que je ne fais pas avant de vérifier qu'elle est au max, ce qui signifie qu'on a un temps extrêmement court pour relâcher [2nd]. Je changerai ça pour la prochaine version.
Kevin KoflerJe ferai pareil alors
:SasumePersonnellement, je choisis toujours la première solution.
: Au fait, pour le support des différents modèles, vous préférez unn programme compatible on-calc mais un peu plus gros ou bien des programmes différents selon les modèles ?
Normalement, le début du programme (__ld_entry_point) se trouve dans le code de démarrage. Mais je vois que d'après tes sources, tu fais du _nostub pur à la bonne vieille manière. Pourtant, avec le code de démarrage, c'est tellement plus pratique... (Et oui, il faudra que je mettre un ou deux chapître(s) sur le mode tigcc_native, les global imports et le code de démarrage dans mon tuto...)Oui, j'avais regardé un peu la doc avant de mettre mon xdef _nostub, mais j'ai cru comprendre qu'il faut spécifier au moins une section de startup-code, mais je ne sais pas à quoi correspondent les sections possibles puisque leurs noms sont _st1, _st2, _st3, ...
Mais peut quand-même être intéressant de savoir ce qui est optimisé... Je vais jeter un coup d'œil sur les dumps pour toi.Merci, je ne t'en demandais pas tant.
Kevin Kofler :Oui, je sais, mais je l'ai précisé dans le README, donc ce n'est pas un "bug" (et tu le sais très bien).
Bug report:; adresses utiles AI1 equ $40064 AI5 equ $40074C'est incompatible avec la TI-89 Titanium, ça.
Sasume
:Normalement, le début du programme (__ld_entry_point) se trouve dans le code de démarrage. Mais je vois que d'après tes sources, tu fais du _nostub pur à la bonne vieille manière. Pourtant, avec le code de démarrage, c'est tellement plus pratique... (Et oui, il faudra que je mettre un ou deux chapître(s) sur le mode tigcc_native, les global imports et le code de démarrage dans mon tuto...)Oui, j'avais regardé un peu la doc avant de mettre mon xdef _nostub, mais j'ai cru comprendre qu'il faut spécifier au moins une section de startup-code, mais je ne sais pas à quoi correspondent les sections possibles puisque leurs noms sont _st1, _st2, _st3, ... Donc pour l'instant, je reste en _nostub.
_tigcc_native: xdef _tigcc_native __ref_all___startup_code: xdef __ref_all___startup_code __ref_all___nostub: xdef __ref_all___nostub xdef __main __main:
Mais peut quand-même être intéressant de savoir ce qui est optimisé... Je vais jeter un coup d'œil sur les dumps pour toi.Merci, je ne t'en demandais pas tant. Après la lecture de ton report, effectivement, il s'agit d'une optimisation qui doit être faite en temps de linking, donc je ne vais pas modifier mon code pour écrire des bsr.s à la place des bsr.w qui ont été optimisés. Parce que par exemple, si je linke mes fichier .asm dans un ordre différent de l'ordre actuel et que je mets le fichier affichage.asm vers la fin, l'instruction bsr.s ne permettra probablement pas de stocker la valeur du déplacement.
Kevin Kofler :Oui, je sais, mais je l'ai précisé dans le README, donc ce n'est pas un "bug" (et tu le sais très bien).
Bug report:; adresses utiles AI1 equ $40064 AI5 equ $40074C'est incompatible avec la TI-89 Titanium, ça.
D'ailleurs, vu que je prévois de supporter la titanium plus tard, la méthode à l'ancienne qui consiste à toucher aux ports pour désactiver la protection de la mémoire basse (c'est bien $600001 d'ailleurs ?),
elle fonctionne toujours sur titanium, elle ?
Kevin Kofler :Ben j'efface l'écran en même temps que je le sauve, donc ça va me prendre de la place en plus si je le sauve avec _save_screen et qu'après, je refais une boucle pour l'effacer.
Tu peux aussi rajouter d'autres trucs, par exemple __ref_all___save_screen pour ne pas avoir à t'occuper de ça toi-même.
Sasume
: Si tu veux le faire toi-même,
Sasume
:Kevin Kofler :Ben j'efface l'écran en même temps que je le sauve, donc ça va me prendre de la place en plus si je le sauve avec _save_screen et qu'après, je refais une boucle pour l'effacer.
Tu peux aussi rajouter d'autres trucs, par exemple __ref_all___save_screen pour ne pas avoir à t'occuper de ça toi-même.
Finalement, je n'ai pas vraiment compris à quoi cela me servirait d'utiliser le mode _tigcc_native
Sasume
: Sinon, pour les modèles de TI à grand écran, l'utilisation de la touche [F1] ne me pose aucun problème finalement, donc est-ce que c'est bien aussi pour les V200 d'utiliser F1 ?
Sasume :
énérer le fichier .v2z, je suis obligé de faire _v200: xdef _v200Par ailleurs, pour gAlors que pour spécifier les cibles _ti89 et _ti92plus, je n'ai pas besoin de déclarer le symbole dans mon fichier source. Pourquoi ?
Sasume :
Normalement je l'ai déjà changé dans cette nouvelle version.