Victime de son succès, Turbo Pascal dure. Créé dans les années 80, il résiste encore 20 ans plus tard. Or, il n'a jamais été conçu pour une telle durée de vie, et n'est notamment pas prêt à affronter des processeurs de plus en plus véloces.
Ainsi, sur les processeurs de fréquence supérieure à 200 Mhz (tous les processeurs actuels, donc), les programmes utilisant l'unité
Crt plantent sur une erreur 200 de division par zéro, alors qu'aucune division de ce genre n'est visible.
Une petite explication s'impose.
L'unité
Crt contient, entre autres, la procédure
Delay, qui permet de faire attendre l'utilisateur pendant un nombre donné de millisecondes. Or, pour que cette procédure fonctionne comme il faut, il faut l'étalonner. Ainsi, au lancement de votre programme, l'unité
Crt va se charger calculer combien d'itérations d'une boucle simple sont possibles pour un nombre donné de cycles processeur. Ensuite, elle utilisera ce résultat pour générer une temporisation.
Mais dans ce que je viens d'expliquer, aucune division par zéro n'apparaît. En fait, avec un processeur de fréquence trop élevée pour Turbo Pascal, le nombre d'itérations possibles explose. Le processeur se retrouve donc devant un cas de débordement (
overflow en anglais). Or, le débordement et la division par zéro déclenchent, pour le processeur, la même exception, autrement dit, le même code d'erreur. De fait, Turbo Pascal interprète cette erreur comme une division par zéro, et non comme un débordement.
Comment corriger ce problème ? Diverses solutions sont envisageables :
- La politique de l'autruche : c'est l'unité Crt qui pose problème. Par conséquent, si un programme n'utilise pas cette unité, il ne rencontrera aucune erreur 200.
- Une solution basique : ralentir le processeur. Mais cela pénalise alors l'ensemble de l'ordinateur, et on perd tous les avantages d'un processeur rapide. Si des logiciels existent pour cela, la solution n'est pas réellement viable.
- La solution à préférer : corriger le problème à la source. Il suffit en effet d'éviter le débordement pour que tout rentre dans l'ordre. Borland s'est contenté d'utiliser un Word pour effectuer le calcul. Il suffirait d'utiliser un Longint pour solutionner le problème.
C'est le rôle des divers patchs existant sur Internet.
Remarques :
- Borland a toujours refusé de mettre un correctif à disposition des nombreux utilisateurs de Turbo Pascal. Ainsi, il n'existe aucun patch officiel : inutile d'en chercher un. Vous pouvez donc prendre le premier qui corrige le problème.
- Si vous avez téléchargé Turbo Pascal sur www.developpez.com, vous ne rencontrerez jamais ce problème : la version de Turbo Pascal mise à disposition a déjà été patchée pour vous !