195Fermer197
PolluxLe 28/06/2004 à 15:10
Et au cas où certains auraient envie de le lire sans devoir scroller à chaque ligne :
EVENT HOOK CONVENTIONS RECOMMENDED BY KEVIN KOFLER (document version 3.00)
==========================================================================

FRANÇAIS (FRENCH):
------------------

Les conventions suivantes sont nécessaires pour une compatibilité totale avec d'autres hooks d'évènements et pour la compatibilité avec le programme de désinstallation UnInEvHk:

I) Contenus du hook d'évènements
1) Au début
* signature: "evHk" (4 octets)
Remarque: La signature "EvHk" avec un "E" majuscule est obsolète et n'est plus acceptée par UnInEvHk.
* nom du programme: 8 octets non nuls (utilisez des espaces si vous avez vraiment besoin d'un remplissage)
* place réservée pour l'adresse du vieux hook d'évènements (4 octets), 0 = aucun vieux hook d'évènements
* sauvegarder les registres d3-d7/a2-a6
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
* restaurer les registres the d3-d7/a2-a6
* utiliser un RTS normal (RTE est selement pour les interruptions et NE marchera PAS)

II) Installation
* Votre programme d'installation DOIT être "nostub" (indépendant des kernels). Les kernels NE permettent PAS d'installer les hooks d'évènements de manière fiable et conforme à cette convention.
* Je conseille d'inclure le HW2 AMS 2 TSR support sur: http://ti89prog.francais.kevinkofler.cjb.net
Si vous ne voulez pas l'inclure, veuillez dire à vos utilisateurs que, si leur calculatrice a pour version matérielle 2.00 et pour version de Advanced Mathematics Software 2.0x, alors ils auront besoin soit du HW2Patch de Julien Muchembled, soit de mon HW2 AMS 2 TSR support, soit de mon HW3Patch pour exécuter tout programme résident en mémoire (sauf le HW2 AMS 2 TSR support lui-même) sans plantages avec barre noire.
Sur la version matérielle 3, l'utilisateur devra TOUJOURS installer mon HW3Patch avant.
* sauvegarder EV_hook vers la place réservée pour le "vieux hook d'évènements" dans la routine manipulatrice d'évènements (EV_hook est 0 s'il n'y a aucun hook d'évènements installé, donc ma convention sera automatiquement respectée sans traîtement spécial pour ce cas-là.)
* allouer un bloc mémoire en utilisant HeapAllocHigh
* Contrairement à ce que la v.1.00 de ce document suggérait, il N'est PAS nécessaire de verrouiller le bloc explicitement parce que HeapAllocHigh le fait automatiquement.
* le déréférencer (HeapDeref)
* copier la routine manipulatrice d'évènements vers le bloc verrouillé
* ajouter OFFSET+0x10 à l'adresse du bloc:
- OFFSET pour HW 2 AMS 2 sans HW2Patch (mais le HW2 AMS 2 TSR support est nécessaire dans ce cas)
- 0x10 pour sauter les informations pour la désinstallation
La valeur de OFFSET est de:
- 0 ou 0x40000 sur HW1. Il est recommandé d'utiliser 0x40000 sur HW1 pour la compatibilité antérieure avec les vieilles versions de UnInEvHk.
- 0x40000 sur HW2. Mon HW2 AMS 2 TSR support nécessite cela pour fonctionner.
- 0 sur HW3. Il n'y a pas d'espace fantôme à 0x40000 sur HW3.
* mémoriser l'adresse résultante en EV_hook

III) Désinstallation
Incluez simplement mon programme de désinstallation UnInEvHk et donnez moi le crédit nécessaire. Il n'y aucune raison pour avoir plusieurs programmes de désinstallation pour la même convention.
Vérifiez que vous êtes en train de distribuer la v.4.00 ou supérieure. Les versions antérieures ne gèrent pas la TI-89 Titanium.

IV) Types d'évènements réservés.
Les numéros d'évènement 0x7F00-0x7FFF sont réservés pour la compatibilité avec la convention de hooks d'évènements dépassée 2.00 et NE sont à destiner à AUCUN usage.

V) 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).
Vous pourriez en plus avoir besoin de l'option "-mpcrel" (sous "Compiler Options" si vous utilisez TI-GCC IDE) pour être sûr que le code peut être déplacé. Si votre programme plante, la raison est probablement là. Cependant, la meilleure solution est de convertir votre hook d'évènements en un tableau hexadécimal à réallouer par votre installeur. Ceci vous permettra d'avoir plus d'une fonction et d'utiliser des appels à TIGCCLIB. Pour savoir comment le faire, veuillez jeter un coup d'oeil sur SampleTSR (voir ci-dessous).
Greg Dietsche a créé un programme exemple appelé SampleTSR pour écrire des hooks d'évènements en C. Il est disponible ici: http://calc.gregd.org