Trouver un autre système de gris pour les g85
Posté le 05/02/2012 16:41
Bonjour,
Cela fait depuis un moment que je cherche comment rendre le gris sur les g85 sans bugs.
J'ai été en échec jusqu'à maintenant.
Mais un espoir est possible: en passant par les timers du sdk on a un gris sans bug mais affreux.
Le problème du gris est que l'on n'arrive pas actuellement à avoir l'interruption de gris et les interruptions casio, et donc il y a des bugs (nottament lorsque l'on sort du programme)
Le gris utilise une sorte de timer: le tmu. Lorsque le tmu a fini son décompte, l'interruption par défaut est appelée avec l'option 0x400 ('c'est le tmu0 qui appelle')
le problème est que l'interruption casio n'a rien prévu pour ce cas de figure, et ça plante.( l'interruption appelle en faite la fonction à la case d'un tableau de pointeurs de fonctions t l'option donne le numero de la case)
Actuellement, on change donc l'adresse de l'interruption par défaut, pour y mettre l'interruption du gris, mais donc les interruptions casio sont ignorées.
Je vois deux solutions possibles:
- soit on arrive à écrire l'adresse de l'interruption du gris dans le tableau casio à la case du numero du tmu.
Ce serait la meilleure solution.
D'après une doc anglaise:
The startup interrupt table starts at 0x80000340 for all OS versions.
The runtime interrupt table starts at 0x8001022C for all OS versions.
Each interrupt table consists of 0x77 entries.
The effective address ea of a handler can be calculated from the interrupt code IC of the interrupt source.
ea = table_base + ( IC - 0x40 ) / 8
Il faudrait donc écrire à l'adresse 0x800003B8
j'ai essayé, mais il me dit que j'écrit dans un endroit inexistant de la mémoire. Peut-être ais-je mal fait quelque chose...
- soit on copie le contenu du tableau casio, et on rajoute la case que l'on souhaite. On réecrit l'interruption casio qui appelle la bonne fonction du tableau en fonction du paramètre d'entrée.
Le code source ressemble probablement à celui de cette page :
http://resource.renesas.com/lib/eng/e_learnig/superh_e_learning/24/index.html
Je ne pense pas que ce soit la meilleure solution, car casio utilise surement aussi la fonction qui gère les exeptions et dont l'adresse est déterminée par celle de l'interruption par défaut, mais cette solution est peut-être faisable...