Salut,
Autant commencer par le début : je n'ai jamais utilisé Turbo C.
Supposons que ce soit l'appel _dos_setvect(0x1C,gestionnaire) qui plante...
D'une manière générale, une fonction plante quand on lui passe des arguments incorrects, ou lorsque l' "environement" n'est pas près pour l'exécution de cette fonction.
Globalement, ce que doit faire ta fonction, c'est mettre en place Gestionnaire, autrement dit une adresse, à un endroit qui dépend du premier argument, qui est très certainement valide dans ton cas.
Il y a de bonne chance pour que le fait de mettre 12 ou gestionnaire en deuxième argument ne soit pas plus suceptible qu'autre chose de faire planter ton programme. Tout ce que peut faire la fonction pour s'assurer de la validité du deuxième argument, c'est lire quelques octets à cette adresse, ce qui serait mal élevé. Pour que le deuxième argument passe si c'est lui qui pose problème, il faut s'assurer qu'il a le bon prototype comme définit un peu plus bas.
Donc je ne pense pas une seconde que ce soit _dos_setvect qui plante.
Je soupçonne par contre fortement que le problème se situe 1/18.2 secondes plus tard...
Le code ci-dessous, inspiré de
ça, devrait passer sans problème, et te permettra de t'assurer que la fonction marche très bien.
#include "dos.h"
void _interrupt _far Gestionnaire(void)
{
}
void (_interrupt _far *old_isr)(); // Sauvegarde de l'ancien ISR
void main(void)
{
// Sauvegarde du isr courant
old_isr = _dos_getvect(0x1C);
// Mise en place de notre handler
_dos_setvect(0x1C, Gestionnaire);
// Remise en place du vieux isr
_dos_setvect(0x1C, old_isr);
exit(0);
}