

  INTRODUCTION
  ------------

  Ce fichier MODIFTP7.TXT est la documentation du programme MODIFTP7.EXE.

  MODIFTP7.EXE est un utilitaire qui permet de rsoudre un problme survenant
  avec les excutables crs par Turbo Pascal 7 et utilisant l'unit CRT :
  si le processeur est trop rapide, l'excution choue immdiatement
  avec un message du type " Runtime error 200 at XXXX:XXXX ".


  EXPLICATION
  -----------

  Au dbut de l'excution d'un tel programme, la procdure d'initialisation
  de l'unit CRT calibre la boucle de temporisation utilise par la procdure
  Delay, et cela mme si le programme ne fait aucun appel  Delay.

  Lors de ce calibrage, une division par 55 est effectue.

  Avec les processeurs rcents, le nombre  diviser est suprieur  3604480
  et le quotient est suprieur  65536, donc ne tient pas dans un mot.
  ( un mot = deux octets = 16 bits )

  Il se produit ainsi un dpassement de capacit, gnrant une erreur qui
  cause l'arrt du programme.

  Si on examine le code de la partie en cause, on dcouvre que la boucle
  de temporisation se sert d'un compteur sur 32 bits ( dans la paire DX:AX )
  qui utilise tous les 32 bits lors du calibrage, mais seulement 16 bits
  lors des appels par Delay ( car DX est alors mis  0 ).

  La solution du problme est l : pour corriger ce dfaut, il faut utiliser
  tous les 32 bits, et pas seulement 16, lors des appels par Delay.


  MA SOLUTION
  -----------

  La difficult a consist  trouver un code qui puisse prendre la place
  du code existant ( je voulais conserver la taille des fichiers ).

  La place disponible tant limite, les possibilits taient peu nombreuses.

  Voici les modifications que je propose :

  - dans la procdure de calibrage de la boucle de temporisation, le code

      B8E4FF        MOV   AX,FFE4         met la valeur FFE4h dans AX
      99            CWD                   prolonge AX dans DX:AX
      E83C02        CALL  02C6            appel de la boucle de temporisation
      F7D0          NOT   AX              change le signe de AX
      F7D2          NOT   DX              change le signe de DX

    est remplac par

      BAC8FF        MOV   DX,FFC8         met la valeur FFC8h dans DX
      E83D02        CALL  02C6            appel de la boucle de temporisation
      31C0          XOR   AX,AX           met AX  0
      F7D2          NOT   DX              change le signe de DX
      92            XCHG  DX,AX           permute AX et DX

  - dans la procdure Delay, le code

      33D2          XOR   DX,DX           met DX  0

    est remplac par

      89C2          MOV   DX,AX           recopie AX dans DX

  - la boucle de temporisation est inchange.


  AVANTAGES ET INCONVENIENTS
  --------------------------

  Avantages de ma solution :

  - supprime le Runtime error, quelle que soit la vitesse du processeur

  - modifie uniquement 13 octets ( 12 en fait car l'octet FF est inchang )

  - trs simple  raliser

  - ne modifie pas la taille des fichiers

  - s'applique aussi bien  TURBO.TPL qu' un fichier *.EXE

  - ne ncessite pas d'avoir le source du programme *.EXE

  Inconvnients :

  - les nouveaux dlais sont faux :
    Delay(1) dure environ 3.6 ms avec un Pentium  75
                          2.6 ms avec un Pentium 100
                          2.2 ms avec un Pentium 120
                          1.6 ms avec un Pentium 166
                          1.3 ms avec un Pentium 200
                          1.9 ms avec un PII     266
                          1.5 ms avec un PII     350
                          1.3 ms avec un PII     400
                          1.1 ms avec un PIII    733
                          1.2 ms avec un PIII    866


  UTILISATION
  -----------

  Le programme MODIFTP7.EXE s'utilise en ligne de commande, sous MS-DOS.

  Placez-vous dans le rpertoire contenant le fichier que vous voulez modifier,
  ( ou donnez le nom complet du fichier, chemin d'accs compris )

  puis entrez   MODIFTP7  TURBO.TPL
                pour modifier la librairie de Turbo Pascal 7.01

           ou   MODIFTP7  NOM.EXE
                o NOM.EXE est le nom de l'excutable cr par Turbo Pascal 7

  Dans le premier cas, MODIFTP7 apporte les modifications dans la librairie,
  aprs avoir renomm l'ancien fichier TURBO.TPL en TURBOTPL.OLD.

  Dans le second cas, MODIFTP7 apporte les modifications dans l'excutable,
  aprs avoir renomm l'ancien fichier NOM.EXE en NOM.EX.


  RESTRICTIONS
  ------------

  Comme il est expliqu plus haut, les nouveaux dlais sont faux : ils sont
  plus longs qu'ils ne devraient l'tre.

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                                                                          %
  %  Si le programme cr par Turbo Pascal 7 ncessite des dlais prcis,    %
  %  n'utilisez pas MODIFTP7 !                                               %
  %                                                                          %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  Il existe d'autres utilitaires, que l'on peut trouver sur Internet, qui
  proposent galement des solutions au problme pos par TP 7.

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                                                                          %
  %   Le programme MODIFTP7 est donn sans aucune garantie.                  %
  %                                                                          %
  %   Vous l'utilisez  vos risques et prils.                               %
  %                                                                          %
  %   L'auteur ne peut pas tre tenu pour responsable des dgats commis      %
  %   par des programmes modifis  l'aide de MODIFTP7.                      %
  %                                                                          %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


  LICENSE
  -------

  Le programme MODIFTP7 est libre  la diffusion et  l'utilisation.


  L'AUTEUR
  --------

  Jean-Paul MICHEL

  Je suis professeur de Mathmatiques  LYON.

  Je programme en Assembleur et en Pascal, sous MS-DOS et sous Windows.
  ( MODIFTP7 a t crit en Assembleur )


