1

Comment ecrire en C un installeur de TSR (pas d'utilisation de Sample TSR)???

cf post 12
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

2

Ça ne marchera pas. Il faut utiliser la méthode de SampleTSR.
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é

3

Mais qui fait que l'on ne puisse pas???

Au fait la fonction _main n'est exécutéé qu'une fois???
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

4

Bon, en fin de compte, il me semble que ton code est à peu près correct (ça fonctionne plus ou moins comme SampleTSR), donc je regarde ça plus en détail:
21: // On ajoute le TSR à installer en mémoire 22: #include "kbdhook.h"

OK. Mais tu devrais aussi poster le contenu de kbdhook.h (ou du moins dire comment tu l'as généré) pour voir si c'est bon.
3: // Pour pouvoir empécher le lancement sur 89
4: #define USE_TI89
[...]
30: // On empeche tout lancement sur une TI89
31: if (TI89)
32: {
33: ST_helpMsg("Uniquement pour 92+ et V200")
34: return; 35: }

C'est inutile, les bêtas récentes de TIGCC font ça toutes seules!
41: if (!h220xTSR())
42: {
43: ST_helpMsg("RAM insuffisante")
44: return; 45: }

Euh... Tu travailles avec quelle version là? Parce qu'avec la 1.11 (celle que tu es censé utiliser parce que c'est la plus récente), il y a aussi d'autres raisons d'échec que ça (cf. documentation).
48: // Taille du TSR+12 bits pour la signature et 4 bits pour enregistrer l'emplacement de l'ancien hook
49: if (!(place=HeapAllocHigh(sizeof(kbdhook)+16)))
50: {
51: ST_helpMsg("RAM insuffisante")
52: return;
53: }
54: debuga("point 2") 55:

OK.
56: // L'adresse ou l'on peux stocker le TSR
57: ptsr=HeapDeref(place);
58: ptsr+=0x40010; 59: debuga("point 3")

Voilà un problème. C'est 0x40000 qu'il faut mettre ici. Les autres 16 octets, tu les rajouteras après!
63: // On copie la signature
64: memcpy(ptsr, signature, 12);
65: ptsr+=12;
66: debuga("point 4")
67:
68: // On copie l'adresse du vieux hook
69: *((unsigned long*)ptsr)=(unsigned long)EV_hook;
70: ptsr+=4; 71: debuga("point 5")

OK. C'est que tu rajoutes les 16 octets.
Et d'ailleurs, la ligne 69 serait mieux écrite: *((void **)ptsr)=EV_hook;
73: // On copie le tableau de char contenant le hook
74: memcpy(ptsr, kbdhook, sizeof(kbdhook));
75: ptsr+=sizeof(kbdhook); 76: debuga("point 6")

Autre problème: la ligne 75 est en trop!
78: // On bouge le TSR dans une zone particuliére de la mémoire
79: EX_patch(ptsr+2, ptsr+sizeof(kbdhook)-2); 80: debuga("point 7")

Catastrophe: Si tu commences EX_patch à ptsr+2, c'est que tu as oublié de supprimer la taille du fichier au début de kbdhook. C'est une grave erreur, tu ne respectes pas mes conventions! (La partie exécutable doit venir directement après la signature et l'ancien hook.) Ça fera planter UnInEvHk lors de la désinstallation! Donc:
1. Supprime les 2 premiers octets du tableau kbdhook.
2. Remplace la ligne 79 par: ptsr+sizeof(kbdhook)-1. (Il faut pointer sur le dernier octet du tableau, qui devrait valoir 0xF3.)
82: // On met sur le stack l'ancien hook (le TSR le récupérera) 83: push_longlongint((long long)EV_hook);

Tu ne respectes pas mes conventions en faisant cela!!! Il faut utiliser le pointeur dans le header pour accéder à l'ancien EV_hook, parce que sinon, si ton hook est au milieu de la liste chaînée de hooks quand UnInEvHk le désinstalle, ça plante!
Supprime ces 2 lignes, et regarde ce que fait SampleTSR!
Ou alors (c'est plus simple) utilise ça pour avoir l'adresse de l'ancien hook (dans la partie TSR):
extern void **program_start asm("tigcc_compiled.")
void *OldHook=program_start[-1];


Et d'ailleurs, n'oublie pas ce point de ma convention:
2) À la fin
* vérifier si "vieux hook d'évènements" est non nul
* s'il est non nul:
- copier la structure d'évènements vers a2, parce que TeOS l'attend là
- passer la structure d'évènements comme un argument (sur la pile en (a7)) - l'appeler

La solution la plus simple pour respecter ça:
IV) Remarques sur l'usage en C Utilisez toujours l'option "-ffixed-a2" (sous "Compiler Options" si vous utilisez TI-GCC IDE) pour être sûr que a2 n'est pas modifié (sinon vous devriez le restaurer manuellement avec de l'assembleur inline).

85: // On appelle notre hook (enfin!!!)
86: ASM_call(ptsr+2); 87: debuga("point 8")

Là aussi, le +2 est à supprimer (cf. remarque ci-dessus).
89: // On sauvegarde la nouvelle valeur du EV_hook
90: EV_hook=ptsr;
91: debuga("point 9")
92: 93: ST_helpMsg("KbdFunc €1.00 installé")

OK.
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é

5

Et franchement, je ne vois pas du tout pourquoi tu t'obstines à réinventer la roue alors que Greg Dietsche a déjà tout fait pour toi!
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é

6

arf, si on ne devait plus faire de jeux sous prétexte qu'il en existe déjà winksmile
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

7

Je suis d'accord avec Pim89.
Moi, si je programme sur TI, c'est uniquement pour APPRENDRE.
Alors, bien sûr que je ne fais que des trucs qui existent déjà, mais j'en ai besoin pour apprendre.

8

ouais mais si t'as jamais fait de TSR, commence par en faire avec sa méthode et apres seulement tu pourras essayer dereinventer la roue (sauf si tu as deja fait bc de TSR)
avatar

L'amour est ce je ne sais quoi, qui vient de je ne sais ou,
et qui finit je ne sais comment

9

J'ai utilisé sa méthode, et après avoir lu la convention de Kévin, je me suis dis que je pouvais essayer de faire mon propre installeur!!!

Au fait le TSR permet de lancer des progs nommé kbdfuncX ou X est un nombre entre 1 et 8 par l'intermediaire de [<>]+[FX] pour ceux que ça interesse!!!
Et aussi régler l'APD avec [<>]+[A]
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

10

Personne n'est intérésséwhat
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

11

pas moi.
l'APD, mon prog d'installation après reset le met à 60 s => c bon.

krbdprgm Fx, pas utile pr moi.
(j'utilise même pas les krbdprgm0-9 du TIOS)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

12

Chez moi les kbdprgm de 1 (pas 0) à 9 sont utilisé donc il m'en fallais d'autretongue
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

13

Voici la source complete:

kbdfunc.c

Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

14

La suite...

kbdhook.c

Enfin pour faire l'exécutable, avec tigcc-tools (TICT)
make_kbdfunc.bat
@ECHO off
CLS

ECHO Compilation du hook
tigcc -O3 -outputbin kbdhook.c -W -Wall -ffixed-a2
REM -ffixed-a2

ECHO Transformation du fichier produit en tableau de char
ECHO.
ttbin2hex -b1 -a kbdhook kbdhook.bin kbdhook.h

ECHO.
ECHO Compilation de l'installeur
tigcc -Os kbdfunc.c h220xtsr.a -W -Wall

ECHO KbdFunc €1.00 compilé
@ECHO ON


Donc le prog plante une fois que le message d'installation correcte apparait!!
Au fait Kévin les deux lignes que tu m'a dis d'ajouter dans la partie TSR c'est au début du fichier ou dans main???
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

15

Il reste encore quelques erreurs:

1.
>60: ptsr+=20;
C'est faux. Tu as déjà rajouté 12, donc il te reste à rajouter 4 seulement:
60: ptsr+=4;

2.
>6: CALLBACK void hook(EVENT*);
>15: CALLBACK void hook(EVENT *ev)
Il faut appeler ton hook _main, vu que c'est la fonction principale de la partie TSR:
6: CALLBACK void _main(EVENT*);
15: CALLBACK void _main(EVENT *ev)
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é

16

Pour éviter de créer un nouveau topic, je vous dérange dans votre super conversation à laquelle je ne cale rien...

Je voulais savoir si vous aviez des TSR assez simples (en open-source comentés), en fait j'aimerais débuter la programmation en TSR. J'ai déja lu le Tutoriel de la Chess Team, donc j'ai quelques (petites) bases.

Voilà merci.
François BALLAND

Site Ti : http://www.balland.org

17

Pour les TSRs branchés sur une interruption, le tutorial de la TICT est la voie à suivre.
Pour les TSRs branchés sur EV_hook (comme les miens), cf. SampleTSR sur http://gforce.calc.org.

Sinon, il y a mes TSRs qui sont livrés avec des sources commentées, mais c'est de l'assembleur, pas du C comme SampleTSR ou le tutorial de la TICT.
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é

18

Essai de comprendre grosso modo le code de celui cigni

Ou elle vont ces deux lignes???
extern void **program_start asm("tigcc_compiled.")
volatile void *OldHook=program_start[-1];
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

19

slubman a écrit :
Essai de comprendre grosso modo le code de celui cigni

Ou elle vont ces deux lignes???
extern void **program_start asm("tigcc_compiled.")
volatile void *OldHook=program_start[-1];

Elles vont au début de ton _main de kbdhook.c, comme tu l'as déjà fait correctement dans le post #13. (D'ailleurs, pourquoi volatile? Je ne pense pas que ce soit nécessaire.)

Ce qu'elles font:
>extern void **program_start asm("tigcc_compiled.")
tigcc_compiled. est un label automatiquement inséré par TIGCC au vrai début du programme. Donc ce code définit program_start comme un pointeur vers le début du programme. Le asm("tigcc_compiled.") est nécessaire parce que je ne peux pas mettre extern void **tigcc_compiled.; parce que ce n'est pas un identifiant C valide.

>volatile void *OldHook=program_start[-1];
Ça lit l'adresse du hook à l'adresse tigcc_compiled.-1*sizeof(void *), c'est-à-dire tigcc_compiled.-4, exactement là où elle se trouve selon ma convention.
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é

20

C vrai j'ai oublié de dire que je ne savais pas programmer en ASM. Je vais me focaliser sur les TSR reposant sur une interruption, et je crois que le tuto S1P2 de la TICT détaille ces fameux interrupts.

Thanx
François BALLAND

Site Ti : http://www.balland.org

21

Ben en faite arrivé au "point 7" l'écran home reste affiché tel quel (pas de barre noire) mais la calc ne répond plus à l'appui des touchesconfus
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

22

As-tu corrigé les erreurs que j'ai repérées dans le message #14?
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é

23

Oui
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

24

Voici le prog maintenant

kbdfunc.c: #define USE_TI92PLUS #define USE_V200 //#define EXECUTE_IN_GHOST_SPACE #include <tigcclib.h> // Pour le deboguage #define debug #ifdef debug #define debuga(p) (ST_helpMsg(p)) #else #define debuga(p) #endif // On ajoute le support pour les HW2 (par Kevin KOFLER) #include "h220xtsr.h" // On ajoute le TSR à installer en mémoire #include "kbdhook.h" // La signature du TSR #define signature "evHkKbdFunc " // La routine d'insatallation du TSR en mémoire void _main(void) {      // Handle du bloc alloué pour installer le hook      HANDLE place;      void *ptsr;      short msg;      msg=h220xTSR();      switch(msg)      {           case -3:                ST_helpMsg("Hw2patch installé");                break;           case -2:                ST_helpMsg("Installation sur AMS1");                break;           case -1:                ST_helpMsg("Installation sur HW1");                break;           case 0:                ST_helpMsg("RAM insuffisante");                return;                break;           default:                break;      }            debuga("point 1");      // Taille du TSR+12 bits pour la signature et 4 bits pour enregistrer l'emplacement de l'ancien hook      if (!(place=HeapAllocHigh(sizeof(kbdhook)+16-2)))      {           ST_helpMsg("RAM insuffisante");           return;      }      debuga("point 2");      // L'adresse ou l'on peux stocker le TSR      ptsr=HeapDeref(place);      ptsr+=0x40000;      debuga("point 3");      // On installe le TSR proprement dit en mémoire      // On copie la signature      memcpy(ptsr, signature, 12);      ptsr+=12;      debuga("point 4");      // On copie l'adresse du vieux hook      *((void**)ptsr)=EV_hook;      ptsr+=4;      debuga("point 5");      // On copie le tableau de char contenant le hook      memcpy(ptsr, kbdhook+2, sizeof(kbdhook)-2);      debuga("point 6");      // On bouge le TSR dans une zone particuliére de la mémoire      EX_patch(ptsr, ptsr+sizeof(kbdhook)-3);      debuga("point 7");      // On appelle notre hook (enfin!!!)      ASM_call(ptsr);      debuga("point 8");      // On sauvegarde la nouvelle valeur du EV_hook      EV_hook=ptsr;      debuga("point 9");      ST_helpMsg("KbdFunc €1.00 installé"); }
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

25

kbdhook.c #define USE_TI92PLUS #define USE_V200 #include <tigcclib.h> // Prototypes des fonctions void launch(const char*); void apd(void); // Variables globales //volatile EVENT_HANDLER *oldhook=NULL; CALLBACK void _main(EVENT *ev) {      extern void **program_start asm("tigcc_compiled.");       void *OldHook=program_start[-1];       if(ev->Type==CM_KEYPRESS)           {                // Appui sur [<>]+[A]           if(ev->extra.Key.Code==8257)           {                apd();                ev->extra.Key.Code=0;           }           // Appui sur [<>]+[F1]           if(ev->extra.Key.Code==8460)           {                launch("kbdfunc1");                ev->extra.Key.Code=0;           }           // Appui sur [<>]+[F2]           if(ev->extra.Key.Code==8461)           {                launch("kbdfunc2");                ev->extra.Key.Code=0;           }           // Appui sur [<>]+[F3]           if(ev->extra.Key.Code==8462)           {                launch("kbdfunc3");                ev->extra.Key.Code=0;           }           // Appui sur [<>]+[F4]           if(ev->extra.Key.Code==8463)           {                launch("kbdfunc4");                ev->extra.Key.Code=0;           }           // Appui sur [<>]+[F5]           if(ev->extra.Key.Code==8464)           {                launch("kbdfunc5");                ev->extra.Key.Code=0;           }           // Appui sur [<>]+[F6]           if(ev->extra.Key.Code==8465)           {                launch("kbdfunc6");                ev->extra.Key.Code=0;           }           // Appui sur [<>]+[F7]           if(ev->extra.Key.Code==8466)           {                launch("kbdfunc7");                ev->extra.Key.Code=0;           }           // Appui sur [<>]+[F8]           if(ev->extra.Key.Code==8467)           {                launch("kbdfunc8");                ev->extra.Key.Code=0;           }      }      // On verifie l'existence d'un ancien hook      if (OldHook)      {           ASM_call(OldHook);      } } // Lancement d'un prog (tiré de la FAQ de TIGCC) void launch(const char *prog) {      char fname[25]="main";      HANDLE h;      TRY           strcat(fname, prog);           strcat(fname, "()");           push_parse_text(fname);           h=HS_popEStack();           NG_execute(h, FALSE);           HeapFree(h);      ONERR           ST_helpMsg("Lancement impossible");      ENDTRY } // Réglage de l'APD void apd(void) {      // Fonction locale (extension GNU)      void trace(short lcd_height, short lcd_width)      {           char copyright[37],info[37];           SCR_RECT ecran,cache;           WIN_RECT cadre;           //Initialisation des structures  SCR_RECT           ecran.xy.x0=0;           ecran.xy.y0=0;           ecran.xy.x1=2*lcd_width;           ecran.xy.y1=2*lcd_height;           cache.xy.x0=lcd_width-67;           cache.xy.y0=lcd_height-29;           cache.xy.x1=lcd_width+67;           cache.xy.y1=lcd_height+26;           //Fin de l'initalisation des strucures SCR_RECT           //Initialisation de la structure WIN_RECT           cadre.x0=lcd_width-68;           cadre.y0=lcd_height-30;           cadre.x1=lcd_width+68;           cadre.y1=lcd_height+26;           //Fin de l'initialisation de  la structure WIN_RECT           sprintf(copyright," Par DOUALOT Nicolas  DNDD.INC %c2001",169);     // caractère n°169=®           sprintf(info,"%c,%c=change [ESC]=CANCEL [ENTER]=OK",23,24);           FontSetSys(F_6x8);                              //Sélection des caractères de taille moyenne.           // Tracé du cadre.           ScrRectFill(&cache,&ecran,A_NORMAL);           cache.xy.x0=lcd_width-66;           cache.xy.y0=lcd_height-18;           cache.xy.x1=lcd_width+66;           cache.xy.y1=lcd_height+18;           ScrRectFill(&cache,&ecran,A_REVERSE);           DrawClipRect(&cadre,&ecran,A_REVERSE);           DrawStrXY(lcd_width-24, lcd_height-27, "APD_USER", A_XOR);           DrawStrXY(lcd_width-45,lcd_height-16,"Valeur de l'APD",A_REPLACE);           FontSetSys(F_4x6);                                   //Sélection des caractères de petite taille.           DrawStrXY(lcd_width-66, lcd_height+20, copyright, A_XOR);           DrawStrXY(lcd_width-65,lcd_height+12,info,A_REPLACE);           FontSetSys(F_6x8);                                   //Sélection des caractères de taille moyenne.           // Fin du tracé du cadre.      };      //Fin du tracé.      //Déclaration des variables locales.      char *screensave=NULL;      char b[13]={"            "};      short key, init, lcd_height,lcd_width;      unsigned short apd;      //Fin de la déclaration des variables locales.            //Initialisation des variables locales.      if (!(screensave=(char*)malloc(3841*sizeof(char)))) return;      LCD_save(screensave);      init=OSInitBetweenKeyDelay(15);      apd=1+OSTimerCurVal(APD_TIMER)/20;               //Récupération de la valeur de l'apd.      key=0;                                   //Correspond à la valeur de la touche appuyée.      lcd_height=128/2;                         //Centre de l'écran en hauteur.      lcd_width=240/2;                         //Centre de l'écran en largeur.      //Fin de l'initialisation des variables locales.      trace(lcd_height,lcd_width);                    //Activation du tracé du cadre.      //Boucle principale du programme.      do      {           sprintf(b," %d secondes ",apd);          //Formatage de la chaîne de caractères.           DrawStrXY(lcd_width-3*strlen(b),lcd_height-3,b,A_REPLACE);           key=ngetchx();                                        //Mémorisation de la touche appuyée           if (key==338 && apd<=998) apd++;     //Si on appuis sur [HAUT].           if (key==344 && apd>=11) apd--;//Si on appui sur [BAS].      }      while (key!=264 && (key!=13));               //Si on appui sur [ESC] ou [ENTER].      //Fin de la boucle principale.            //Enregistrement de la nouvelle valeur de l'APD si on a appuyé sur [ENTER].      if (key==13)      {           OSFreeTimer(APD_TIMER);                         //Libération du timer corespondant àl'APD.           OSRegisterTimer(APD_TIMER, apd*20);     //Enregistrement de la nouvelle valeur.      };      OSInitBetweenKeyDelay(init);      LCD_restore(screensave);      free(screensave);      //Fin de l'enregistrement de la nouvelle valeur de l'APD si on a appuyé sur [ENTER]. }
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

26

Ah, tiens, un truc tout bête:
87: // On appelle notre hook (enfin!!!)
88: ASM_call(ptsr); 89: debuga("point 8")

Pas la peine d'appeler le hook pendant l'installation. C'est peut-être ça qui fait planter.
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é

27

Ca plante toujours!!!

Bon en attendant que je résolve le pb une version faite vite fait bien fait avec sampleTSR ici
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

28

Le plantage n'a plus lieu lors de l'installation, mais on ditais plutôt lors de l'appel au TSR puisque l'on obtient bien le message de succès de l'installeur, puis l'indicateur busy reste allumé en permanence, et toute les touches à part [2nd],[<>] et [hand] ne marchent plusconfus
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

29

juste pour reseter alors wink
Site : http://www.phareaway.com/
Membre du groupe Phare Away et webmaster du site

30

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
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é