El defecto de la "división por cero" en la unidad Crt:


El defecto de la "división por cero" (El error 200): Existe un error en los procesadores Pentium II de Intel y en AMD K6, y con cualquier programa que utilice la unidad CRT. Al inciarse el programa en estos sistemas, aparece (apenas iniciado) un mensaje de terminación que dice Runtime Error 200 at xxxx:xxxx, el cual pertenece al error denominado "División por cero". Un error de este tipo también ha sido encontrado por los usuarios que utilizan la unidad Graph, pero se estima que este último error es originado a causa de que la unidad Graph llama a la unidad Crt.

Un código sencillo de muestra que puede producir este error en los sistemas mencionados puede ser el siguiente:

Uses Crt;
Begin
End.

O este otro ejemplo también:

Uses Crt;
Begin
WriteLn('Hola');
End.

Las causas:
La unidad Crt de Borland está incluida en los archivos TURBO.TPL y TPP.TPL que vienen incluidos a la vez junto con el compilador. Cuando se incluye a la unidad Crt en la cláusula "Uses", su rutina de iniciación es incluida dentro del programa. Este problema está originado en la iniciación de la unidad Crt, así que con solo mencionarla en la cláusula "Uses" el error igualmente se producirá.
Durante la iniciación de la unidad Crt, un ciclo repetitivo de 55 milisegundos incrementa un contador. Hasta la versión de Turbo Pascal 6, este contador era un contador de 16 bits (word) y podía fácilmente desbordarse con procesadores de más de 20 MHz de velocidad, originando así un funcionamiento incorrecto del procedimiento "Delay". Para las versiones de Turbo Pascal 7 y Borland Pascal 7 este contador se convirtió en contador de 32 bits, haciendo esta vez que para que el error vuelva a ocurrir se necesitara un procesador de 100 GHz o más. Pero este contador es dividido por 55, y si el resultado no entra en una variable de 16 bits la CPU ocasiona un error de "Desbordamiento de división".
La tasa de velocidad del reloj depende evidentemente del tipo de CPU. Este error aparece en los procesadores de Intel de 200 MHz o más, pero en los procesadores AMD K6 el error aparece también a partir de los 350 MHz.
Cuando se ejecuta bajo una ventana de DOS en Windows el programa no obtiene todo el tiempo de la CPU, y por ello se han obtenido reportes indicando por ejemplo que en una Pentium II de 300 Mhz el error solo ocurre aproximadamente en la mitad de las veces.

¿Cómo aplicar una corrección de este defecto?:
Existen actuamente varios programas y sitios donde se ofrecen gratuitamente distintas formas de solucionar este inconveniente y así poder crear y utilizar aplicaciones desarrolladas con Turbo Pascal y Borland Pascal en los sistemas mencionados. Estas formas consisten en el reemplazo de los archivos TURBO.TPL y TPP.TPL con versiones ya corregidas, y también a través de programas que se encargan de corregir el defecto en los programas compilados (Es decir, corrigen el defecto sobre los archivos EXE). Es importante dejar en claro que estas correcciones no han sido desarrolladas ni son mantenidas por Borland, y las personas que utilicen y apliquen los correctores deberán usarlos bajo su propia responsabilidad.
Aquí en esta página puedes descargar las versiones ya corregidas de los archivos TURBO.TPL (para compilar en modo real) y TPP.TPL (para compilar en modo protegido) que puedes implementarlos sin necesidad de modificar tu código actual, solo necesitarás recompilar todos los programas y unidades que tengas y que utilicen la unidad Crt.

Descarga de las correcciones:

Instrucciones:
Descarga los archivos y descomprímelos (Necesitarás un descompresor de archivos ZIP para poder extraer las correcciones). Luego copia las correcciones al directorio donde se encuentran los archivos TURBO.TPL o TPP.TPL actuales (Si utilizas la instalación predeterminada el directorio será C:\BP\BIN). Una vez hecho esto, abre Borland Pascal y recompila tus programas.