30

squalyl (./29) :
je teste, je vais te dire.


OK, testé, ça marche.
A noter que dans la fenêtre "Infos..." il y a toujours marqué TI Emu 2. Je fais un bug report à qui, pour ça? grin

31

Ce n'est pas un bogue, les skins sont compatibles entre TiEmu 2 et 3, donc le format de skins est bien "TiEmu 2".
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

32

33

Kevin Kofler (./19) :
Hmmm, je peux le voir, ton programme? Il doit faire quelque chose de pas du tout courant avec l'écran (genre ta propre routine de gris qui fonctionne différemment de celles courantes?). TiEmu a des heuristiques assez complexes pour afficher des niveaux de gris parfaits, donc si on fait quelque chose de bizarre, c'est possible de le faire boguer.


...genlib...7 ans... gris... pourris... tiemu....

34

35

...gris...genlib...normalement...reconnus...parfaitement...

Un problème est peut-être que le plane switching est trop rapide pour la détection des plans? Il y a ce problème aussi avec le Tilemap Engine de Sasume avec mon patch pour le double buffering (plane switching) TIGCCLIB. TiEmu a une méthode assez complexe pour détecter les plans de manière "parfaite", si on change la paire de plans avant qu'au moins un cycle complet (3 expositions, dont 2 du plan foncé et 1 du plan clair) ait complété, ça risque de boguer. Le workaround que je donne, c'est de mettre un GrayWaitNSwitches suffisamment élevé dans le jeu pour que ça ne bogue pas, mais ce workaround n'est pas très populaire. gni Je n'ai pas encore trouvé de méthode pour faire mieux dans TiEmu. sad
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

36

... sais...deja...reponse...aucune...idee...solution.

37

38

Aucune n'était vraiment exploitable. sad
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

39

40

Comment fait VTI ?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

41

Il n'émule que les HW1 (c'est plus compliqué d'émuler les HW >= 2 pour les niveaux de gris) et ses niveaux de gris clignotent beaucoup plus que sur la calculatrice réelle.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

42

Merci de vos réponses!

Alors j'ai testé ce que tu m'as recommandé, Kevin.

Je suis allé voir dans la fenêtre Windows/Breakpoints du Disassembly et j'obtiens ça :
-Symbol : #4 - Illegal Instruction vector
-Type : exception
-Status : enabled
-Start : 0x000010
-Breakpoint context : hw protection violation: RAM execution at $00f702.

Je ne sais pas trop comment l'interprêter...

J'ai reconstruit le programme (Build) puis je l'ai lancé, j'ai eut exactement le même bug qu'avant.

J'ai enfin installé sur TiEmu Hw3patch et j'ai lancé Ghostbuster sur mon programme. Ghostbuster annonce qu'il a appliqué un patch à mon programme. Quand je lance ensuite mon programme il me met cette fois-ci une "Adress Error" mais sans me lancer le débuggueur etc...

Le truc que je comprend pas, c'est qu'avant, quand je testais les programmes mis au point avec le vieux TIGCC et VTI (réglés donc pour marcher sur une HW1, si j'ai bien compris) sur ma calculatrice réelle, une TI89 Titanium 3.10 sans Hw3patch ni Ghostbuster, ça marchait parfaitement.
avatar
Ancien pseudo : worfang.

43

-Breakpoint context : hw protection violation: RAM execution at $00f702.

Voilà l'erreur. Tu essaies d'exécuter du code à 0xf702, ce qui n'est pas permis par la protection. Mais normalement il ne faut pas exécuter à cet endroit du tout, donc ça ne m'étonne pas que tu aies un Address Error après HW3Patch.

Normalement, GhostBuster n'est pas nécessaire sur un programme compilé avec le TIGCC le plus récent, l'endroit qu'il a patché est probablement un endroit de gray.s qui n'est exécuté que sur HW1 (donc inutile de le rendre compatible Titanium).

Bref, il y a un problème dans ton programme (ou dans TIGCC ou TiEmu), mais il est difficile de dire qu'est-ce qui ne va pas exactement avec l'information qu'on a. Si tu veux, tu peux m'envoyer ton projet (complet et compilable) et je peux regarder ce qui se passe. Je peux aussi essayer de t'expliquer comment utiliser le débogueur Insight (GDB graphique) intégré à TiEmu (version avec GDB) pour chercher le bogue toi-même.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

44

y'a quoi à l'adresse f702? ce n'est pas dans les vecteurs, c'est quoi? et pourquoi y a t il une protection hardware a cet endroit?

45

C'est quelque part au début de la RAM allouable. Et la protection anti-exécution empêche d'exécuter partout en RAM sauf dans la plage de 12/28/68 KO commençant par la plage de 4 KO contenant l'adresse de départ de ton programme, et sauf dans la plage 0x5000-0x5fff.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

46

ah il est sacrément sévère le vérificateur du hw3 sorry c'est presque un mmu, quoi.

47

Les deux solutions me vont, de toute façon vu la taille du programme (je venais juste de commencer) je risque pas de dévoiler grand chose sur mes technique exceptionnelles de programmation (héritée des plus grands maitres grin ).

Cependant ça m'étonne quand même ce bug, je ne fais rien de bizarre dans mon programme..

Peux-tu m'envoyer ton adresse mail par Mini Msg? Ou je t'envoies mes sources directement comme ça?
avatar
Ancien pseudo : worfang.

48

(J'ai envoyé mes sources à Kevin et, comme indiqué par mini-message, j'aimerais aussi apprendre comment débugguer moi-même le programme).
avatar
Ancien pseudo : worfang.

49

Bon, je décris la méthode que j'utilise pour déboguer ce problème (j'utilise KTIGCC, mais TIGCC IDE fonctionne de la même manière):
1. Activer les informations de débogage:
Project / Options / Compilation / Generate debug information / OK
(Il faut aussi que la compression soit désactivée pour qu'on puisse déboguer, ici c'est déjà le cas.)
2. Project / Build (enfin bon, Run va aussi détecter que les options ont changé et recompiler, donc tu peux sauter cette étape)
3. Debug / Run
4. TiEmu ouvre le débogueur sur le code de démarrage de TIGCC. Je clique donc sur Continue dans la fenêtre titrée Source Window.
5. Maintenant on est au début de _main. Comme je ne sais pas où se trouve l'erreur, je fais encore une fois Continue pour lancer le programme normalement.
6. Le débogueur s'arrête sur le plantage en 0xfc6e. Regardons comment on est arrivés à cet endroit: dans la fenêtre Disassembly, je choisis Windows / PC trace.
7. La dernière addresse est 0x85e868 (une adresse en ROM). Je me place sur cette adresse dans la fenêtre Disassembly (g 0x85e868 Entrée): c'est un jsr (%a1) (plus précisément celui de l'appel de programmes de AMS, mais il faut bien connaître AMS pour savoir ça wink).
8. Malheureusement le PC trace ne contient pas suffisamment d'informations pour savoir d'où vient l'appel, je regarde donc la pile (Windows / Stack frame) et je retrouve à l'offset +4 ce qui a l'air d'être une adresse en RAM: 0x3f648. Je regarde donc cette adresse dans Disassembly. Hélas, c'est l'adresse du début du programme (ça se reconnaît au move.l (%sp),(%sp) marqueur des commentaires _nostub), donc on oublie cette piste et on recommence en pas par pas.
9. On fait donc un Reset Calc dans TiEmu et on refait les étapes 3 et 4 pour revenir au début de _main. (Ici, TiEmu a planté en faisant Run (bogue de TiEmu évidemment), donc j'ai refait un Run, ce qui a réouvert TiEmu, puis le Continue.)
10. Cette fois-ci, on y va au pas par pas: Faisons "Next" (n) dans le Source Window. Répétons jusqu'au plantage. Plantage dans barre_statut.
11. Je répète une fois de plus, mais cette fois-ci, à la ligne 83, je choisis "Step" (s) pour rentrer dans la fonction. Après des Next, je vois que l'appel à DrawStr de la ligne 79 plante.
12. Regardons maintenant cette fonction barre_statut de plus près: Tu alloues une chaîne de caractères de 41 octets sur la pile. Or, je compte un total de 43 octets (42 + le '\0' final) dans le résultat de ton sprintf. Donc tu débordes ton buffer, détruis le contenu de la pile, et c'est en fait le retour de barre_statut à la fonction appelante (juste après le DrawStr qui avait l'air d'être l'endroit du plantage - avec les optimisations, parfois la ligne indiquée n'est pas la bonne à 100%) qui plante.
=> C'est une erreur dans ton programme, qui par hasard n'était pas visible avec l'ancien GCC, mais l'est avec le nouveau.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

50

51

Kevin> Ouh, merci pour la correction détaillée!
La vache je pense pas que j'aurais été capable de faire ça tout seul quand même =_= .

Dans tous les cas merci beaucoup!
avatar
Ancien pseudo : worfang.

52

D'ailleurs, ça ne sert à rien de faire le sprintf 2 fois, il suffit d'afficher le même buffer sur les 2 plans.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

53

Ouep, ça je l'ai vu au moment où j'ai corrigé la taille de mon tableau.

Merci tout de même.
avatar
Ancien pseudo : worfang.