Principal Clipper P-Code Sitios favoritos

    ¿Por qué ocurre?
Existen ciertas instrucciones del Clipper que necesitan que transcurran una cierta cantidad de ciclos de reloj para ejecutar la siguiente. Las instrucciones para ejecutarse necesitan una cierta cantidad (T) de ciclos de reloj del procesador. De esta manera si ejecutamos una instrucción una cantidad (N) de veces, entonces consumimos N x T ciclos de reloj. Esta es la idea de la rutina WAIT, utilizada por el Clipper para generar los tiempos de espera.
Esta rutina realmente no fue muy bien ideada, ya que es como hacer FOR i=1 TO 100;NEXT.
De hecho esa esta es la parte de la rutina que realiza la espera :

¿Quien recuera el PC-MAN en modo texto? Funcionaba barbaro en la 286, pero imposible de jugarlo en una 486, al primer casillero que te movías, ya te habían comido.

Por qué digo que la rutina no fue bien ideada, porque cada nueva generación de procesadores, además de aumentar la velocidad de procesamiento (Mhz), disminuye la cantidad de ciclos necesarios para ejecutar una instrucción. Por lo tanto N x T resulta ser más chico y ya no alcanza para esperar el tiempo necesario.

Soluciones:
Teniendo en cuenta (N x T):
1) Aumentar (N), o sea, la cantidad de veces que se ejecuta la instrucción. (Aumentar el FOR)
2) Aumentar (T), o sea, el tiempo que tarda en ejecutarse. (Agregar instrucciones dentro del FOR)
Teniendo en cuenta el análisis de los procesadores y pensando en el futuro:
3) Tomar como parámetro de espera algo más constante e independiente de la velocidad del procesador y de sus características. El reloj interno de la computadora es un perfecto parámetro.

Aplicando las soluciones:
Para agregar a las compilaciones:
La solución 2 es la utilizada por __WAIT_4.OBJ y por una variante de este que encontré en un programa durante el estudio.
La solución 3 es la utilizada por __WAIT_B.OBJ, creo que es la mejor opción porque no depende del microprocesador. Creo que esta solución va a servir hasta en los procesadores de 1Ghz.
Para solucionar aplicaciones sin tener los fuentes:
La solución 1 es la única posible, porque no necesita agregar código y no precisa ningún descompilador.

La solución a los sistemas que producen este error, es tan sencilla como ejecutar un programa.
De todas maneras se debe realizar una copia de seguridad del sistema a reparar.
El programa fué probado en sistemas compilados con Clipper 5.2, 5.2c, Clipper 5.3b, CA-Tools 3.0b.
Con los enlazadores RT-Link, Blinker 2.x, 3.x, 4.x, Blinker 1.0 y Exospace de Clipper 5.3.
Las pruebas no fueron exhaustivas, pero repararon el problema en todos los casos.

No es compatible con ejecutables comprimidos con Blinker ni con ningun otro compresor.
No repara ejecutables que funcionen con .PLL, y tampoco repara los .PLL.
Debido a que el programa busca una cadena determinada, podría llegar a confundir alguna rutina que contenga esa misma cadena, pero creo que sería un caso muy raro, ya que la cadena a buscar contine 12 bytes.

Soluciones para compilar. Soluciones sin re-compilar
  Recomendado  
__WAIT_4.OBJ __WAIT_B.ZIP R6003FIX.ZIP
    comentarios, sugerencias y reportes de errores a: