Voilà je suis actuellement en train de programmer un logiciel de dessin qui marche plutôt bien, et en voulant améliorer la vitesse de mon affichage, je suis tombé sur un bug que je ne comprends pas.
Les symptômes
Lorsque mon programme tourne, un appui sur la touche ON met automatiquement le contraste à 0.
Lorsque je quitte mon programme sans appuyer sur la touche ON, et ensuite appuie sur la touche ON (alors que je navigue sur l'interface basique de ma TI), le contraste est mis à 0. Le bug de contraste est plus fort que la commande OFF : si j'essaie d'éteindre ma calculette, il ne l'éteindra pas, mais mettra le contraste à 0.
Le bug ne frappe qu'une fois; un deuxième appui sur la touche ON ne modifiera pas le contraste et je peux l'éteindre normalement.
EDIT : De plus, la mémoire Flash ROM Free affichée dans le menu mem de la calculette affiche la quantité 2 une fois le programme quitté.
Le code foireux
J'ai évidemment recherché dans mon programme la/les lignes de code à la source du mystérieux problème, et suis finalement tombé avec surprise sur cet innocent bout de code :
for (x=0;x<160;x++) memcpy(LCD_MEM+30*x, virtual+20*x, 20);
où virtual est un buffer de 2000 octets (soit un plein écran de ti89). Cette ligne (qui marche parfaitement à l'exécution) affiche à l'écran l'image enregistrée dans virtual.
Or lorsque je la mets en commentaire, je ne retrouve plus le bug de contraste ! Et je ne vois pas le rapport entre la touche ON, un contraste mis à zéro, et ce bout de code...

Je précise également que je désactive (plus exactement redirige vers rien) les auto-int 1 et 5 au début de mon programme, et les réactive à la fin.
Comment et surtout pourquoi ma calculette réagit-elle de la sorte ? Si quelqu'un a une idée, cela m'aiderait beaucoup.