Bon, j'ai trouvé le problème:
>15: void *OldHook=program_start[-1];
...
>82: // On verifie l'existence d'un ancien hook
>83: if (OldHook)
>84: {
>85: ASM_call(OldHook);
>86: }
Tu ne passes pas la structure d'évènements sur la pile là.
Mets:
EVENT_HANDLER OldHook=program_start[-1];
...
if (OldHook) (*OldHook)(ev);
Et d'ailleurs, il y a plein de "startup code" qui traînera dans ton hook. Mets:
#define NO_EXIT_SUPPORT // pas besoin de exit, atexit, assert, abort
#define NO_CALC_DETECT // la TI-89 est déjà reconnue et rejetée par le programme d'installation
#define NO_AMS_CHECK // c'est au programme d'installation de vérifier la version d'AMS
ben, c à ça sert l'ASM inline, entre autre...
Tiens, est-ce que tu pourrais me mailer les fichiers tels quels, sans ces !"§$%&/()=? de numéros de lignes qu'il faut supprimer avant de compiler?
ty met quelque chose du style
ev->Type = 0;
(pas sur que ce soit type... mais l'équivalent)
ev->Type=CM_IDLE;
Et CM_IDLE ne vaut pas 0!
bof, il me semble que qd on met le ve-->Type à 0, ça entraine que l'event qui était enregistré "disparait", et n'est donc plus vu par le TIOS...
du moins, je fais ça dans le TSR que j'utilises en permanence, sans que ça ai jamais planté
C'est possible, mais je ne conseille quand-même pas d'envoyer des évènements en-dehors de la rangée valable (et 0 est bien en-dehors de cette rangée). Les évènements partagent un espace de nombres avec les chaînes XR (utilisées pour la localisation), et les nombres en-dessous de 0x700 sont utilisés pour ces chaînes. Il y a un define CM_NOTHING qui vaut 0 dans tiams.h, mais AMS n'utilise jamais ça pour les évènements, et donc je ne suis pas sûr que ça ne peut pas donner de mauvaises surprises, surtout avec des mises à jour de AMS.