|  |  | ¿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.
 |