1

Bonjour, j'ai créé une application de maths et de physique pour le bac avec tous les cours et formules dedans mais parfois la calculatrice plante et fait un ram cleared.. Tant que ce problème n'est pas réglé je ne peux pas passer mon application.. Cela se produit sans raison apparente et ce n'est pas souvent le meme bug, parfois le programme gele, parfois c'est lorsque l'application désarchive et lance un programme basic, je me suis retrouver une fois avec une tonne de texte dans y= et la calculatrice affichait plein de chiffre qui changeaient quand j'appuyais sur les boutons, c'est assez étrange et cela ne se produit pas souvent (1 fois sur 50 utilisation peut etre) mais c'est trop ..

Auriez-vous une technique pour diagnostiquer d'ou viens le bug ? car je ne sais pas du tout quelle partie de mon code foire ..

Voila !
pourriez vous jeter un coup d'oeuil à mon code source..
pour toute question n'hésitez pas.


sinon j'ai aussi un autre problème assez mineur qui est peut être lié .. quand je quitte le programme, une fois sur deux les axes de l'écran graphique ont disparus ou mon programmes reste affiché si je lance l'écran graphique, si je fait un effDessin les axes réaparaissent et l'écran graphique refonctionne.

Le programme de maths "finit" (400 ko): http://chouquette.fr/Bac2010/MathsV1.2.zip
et le code source (1.4 Mo avec latenite) : http://chouquette.fr/Bac2010/MathsSources.zip

j'ai mis l'assembleur/editeur latenite avec le code source, le code en lui meme se trouve dans le dossier project.
- le projet "Application maths", est l'application principale qui gere les menus, les texte (souligner les texte, ...), le lancement des programmes basics, etc..
- le projet Z, sert à créer un programme assembleur qui est appelé par mes programmes basics pour relancer l'application une fois éxécutés et à se rearchiver si ils ont étés désarchivés pour se lancer.

n'hésitez pas à poser des questions.
après le bac je posterais le code source du système qui permet de générer les données (textes et menus) facilement si vous êtes intéréssés.

2

C'est un peu compliqué ce que tu nous demandes, relire un tel document en ne sachant pas où ça pourrait merder c'est presque impossible.

A la limite ce qu'il faut faire c'est utiliser un émulateur, WabbitEmu par exemple, d'utiliser son débuggeur et d'essayer de recréer le bug en question...
je me suis retrouver une fois avec une tonne de texte dans y= et la calculatrice affichait plein de chiffre qui changeaient quand j'appuyais sur les boutons

Je suis pas spécialiste mais ça ressemble à un buffer overflow, en gros t'as dû écrire dans la mémoire du système (voir wikiti à ce sujet).
sinon j'ai aussi un autre problème assez mineur qui est peut être lié .. quand je quitte le programme, une fois sur deux les axes de l'écran graphique ont disparus ou mon programmes reste affiché si je lance l'écran graphique, si je fait un effDessin les axes réaparaissent et l'écran graphique refonctionne.

Essai d'effacer ton buffer graphique avant de quitter, où d'appeler une rom call qui efface l'écran (_clrLCDFull).

3

Merci beaucoup pour ta réponse !
je sais que c'est un peu compliquer pour vous de trouver mais je cherchait surtout si vous aviez un moyen pour diagnostiquer parce que moi même je ne vois pas vraiment ou ca peut être et sinon j'effectue déjà un clrLCDFull à la fin du programme c'est ca qui est bisard..
je regarde WabbitEmu et je te dit !

4

en fait mon programme ne reste plus dans l'écran graphique depuis que je fait _clrLCDFull, l'écran graphique reste vide, les courbes et les axes n'apparaissent plus tant que je ne fait pas un effDessin. Et la ils réaparaissent..

5

A la limite essai d'appeler la rom call "DispAxes" et/ou "ReGraph" avant de quitter.

Tu t'en sors avec l'émulateur ?

6

merci, nan j'ai réviser de la SVT entre temps mais je m'y met. Je te dit..

7

"DispAxes" avec "ReGraph" fonctionne mais si j'ai par exemple y=5x² ca va me tracer la fonction quand je quitte l'application. Mais ce n'est pas très grave ne t'en fait pas.. J'ai recréé le bug et sauvegardé l'état de la calculette : http://chouquette.fr/TEST.sav mais j'ai du mal à utiliser le débuggeur.. je vais continuer de chercher ou peut se trouver le bug dans mon code..

8

c'est bon j'avance je crois savoir d'ou ca vient, à parrement quand j'arrive au bout d'un texte et que j'éssaye d'aller à la page suivante plusieurs fois de suite c'est la qu'il y a un buffer overflow ca écrit dans ! merci beaucoup je te redit une fois réglé ! ca écrit dans la : Variable Allocation Table (VAT) for all variables with a fixed name: reals, strings, ans, functions, matrices, etc.

9

c'est un push auquel il manque un pop, mais je n'ai pas encore trouvé ou ..

10

Je n'arrive pas à trouver l'endroit ou il manque le pop, éxiste t'il un moyen de vider toute la pile quand on ne sait pas combien d'élément sont présents dedans ? comme cela je la vide régulièrement, et ca ne devrait pas poser de problèmes dans mon code... Meme si c'est de la bidouille j'ai pas beaucoup de temps et ca pourrait le faire, je verrais après le bac pour enlever ca..

11

A ma connaissance c'est pas possible... Le mieux c'est d'essayer de trouver ce qui cloche dans ta routine de changement de page.

Edit : D'après ASM Corner y'a peut être moyen de se débrouiller avec le "Stack Pointer".

12

merci beaucoup pour ton aide j'aurais pas réussis sans toi ! ca semble être réglé, j'ai placé "au pif" des pop dans mon code et j'ai regardé le résultat dans le debugger, après plusieurs éssais ca à l'air d'être bon mais je n'ai toujours pas trouvé la position du push qui n'a pas de pop je chercherais apres le bac.
a+ !

13

De rien, ça fait plaisir de voir qu'il y a encore des personnes intéressées par l'asm z80 smile

14

Bonjour Olphebus,

J'ai lu tes topics avec beaucoup d'intérêt et d'attention même si je n'ai pas eu le temps d'y répondre (ou su y répondre) .

Je n'arrive pas à trouver l'endroit ou il manque le pop, éxiste t'il un moyen de vider toute la pile quand on ne sait pas combien d'élément sont présents dedans ?


Une solution qui me vient à l'esprit...Pourquoi ne pas copier l'adresse de la base de la pile dans SP (le pointeur sur la pile "Stack Pointer").
Tu ne vides rien (comme quand tu fais pop d'ailleurs les valeurs restent à leur emplacement mais sont récupérée et SP est incrémenté car la pile est inversée il me semble)

En 8086, tu définis au départ BP = adresse du base de la pile, puis BP =SP (debut du programme)
Mais en asm z80 pas de BP , donc à toi de mettre la bonne adresse (je ne suis pas sur mais peut-être "FFFF" ?)

Ca peut sembler plus clair avec ce petit screenshot.

tromb Fichier joint : BHUg (debug1com.png)

[...]ça fait plaisir de voir qu'il y a encore des personnes intéressées par l'asm z80

idem et d'un bon niveau grin

Je ne suis pas très bon en ASM z80 (tu sembles bien meilleur), j'espère n'avoir pas dit trop de bêtises tongue

N'hésite pas à me contacter, t_dot_duponchelle_at_gmail_dot_com

Cordialement

Thibault Duponchelle


PS: et au fait, petit aperçu de TilEm "nouvelle génération" (oui je sais, le debugger ne marche pas encore complètement grin)

15

Oui l'adresse de base du SP c'est $FFFF, et c'est apparemment possible de la modifier.

16

Merci ! je vais regarder ca après le bac ^^ je te redirais.