Joder, Sage, me encanta tu humor. Tan sutil e inteligente...
Soy un verdadero fan de tus memes. Además de que ese ''When'' tiene mucho gancho.
Me encanta, lo amo, amemos el ''When'' de Sage.
Es que en serio, me encanta, felicidades, el mejor aporte de Whack a Hack. 10/10.
Aunque tiene sus fallos argumentales, me encantó la historia de superación personal. Que sí, el anime pudo haber tratado de la vida de un estudiante en su colegio, o lo que sea, pero el universo de los ángeles y los EVAs me gustó mucho también, además de como los personajes afrontan este mundo. El final de la serie, pues de lo que intenté comprender, es que ya se llevó a cabo la instrumentalización y Shinji no quiere aceptarla, o algo así, y al final lo hace. Luego, al verme la película, leí en un comentario que afirma que el final de la serie ocurre, y se complementa, cuando Shinji tiene que elegir una decisión para lo que pasará con la humanidad.
Recomiendo mucho este anime, no es perfecto pero sí es muy bueno y tiene una gran enseñanza. Además de dejarte huecos argumentales que puedes llenar con tu imaginación.
Como cuando te ponés a ver tu primera rutina ASM, la cual a pesar de tener como 20 llamadas a subrutinas completamente innecesarias, hace su trabajo. Pero tiene un problema bastante raro como lo es que funcione únicamente si es insertada en offset terminado en cuatro ceros (que encima ni a eso le pegué, eran sólo dos)
Pero ahora que tenés un poco de idea del tema y te pones a ver cual es la verdadera causa del problema... Y te das cuenta que a única razón por la que anda es una tremenda serie de casualidades.
Resulta que la rutina que estaba remplazando es una rutina que el juego esperaba que retorne un número de 8 bits. Si retornaba 1 la rutina se dejaría de ejecutar, retornando cualquier otra cosa, la rutina se volvería a ejecutar pasado un tiempo. En mi caso la rutina se debía ejecutar una sola vez, por lo que debería de retornar 1.
Ahora, ¿qué tiene que ver todo esto?
Bueno... Resulta que esta rutina es llamada mediante un "bx r0", por lo que el offset de la rutina está en el registo r0 cuando esta es ejecutada.
Eso sumando a que era un noob que hacía push y pop a r0, a pesar de ser totalmente innecesario (que en esta situación resultaba ser muy necesario), da como resultado un función que retorna su propio offset.
Como yo inserté la rutina en un offset que terminaba en dos ceros, digamos "XXXXXX00", para llamarla, el offset que habría que usar es "XXXXXX01". Una vez llamada pushea ese valor y cuado termina popea el mismo valor a r0 (el registro de retorno).
El juego como esperaba que esa función retorne un número de 8 bits, procede a eliminar los número que no necesita, es decir, convierte "XXXXXX01" en "01".
Consecuencia, una función que retorna 1 por pura casualidad.
Si uno la insertaba en un offset terminado en 4 por ejemplo, la rutina devolvería siempre 5. Causando que se ejecute infinitamente y que el juego se clave...
Como cuando te ponés a ver tu primera rutina ASM, la cual a pesar de tener como 20 llamadas a subrutinas completamente innecesarias, hace su trabajo. Pero tiene un problema bastante raro como lo es que funcione únicamente si es insertada en offset terminado en cuatro ceros (que encima ni a eso le pegué, eran sólo dos)
Pero ahora que tenés un poco de idea del tema y te pones a ver cual es la verdadera causa del problema... Y te das cuenta que a única razón por la que anda es una tremenda serie de casualidades.
Resulta que la rutina que estaba remplazando es una rutina que el juego esperaba que retorne un número de 8 bits. Si retornaba 1 la rutina se dejaría de ejecutar, retornando cualquier otra cosa, la rutina se volvería a ejecutar pasado un tiempo. En mi caso la rutina se debía ejecutar una sola vez, por lo que debería de retornar 1.
Ahora, ¿qué tiene que ver todo esto?
Bueno... Resulta que esta rutina es llamada mediante un "bx r0", por lo que el offset de la rutina está en el registo r0 cuando esta es ejecutada.
Eso sumando a que era un noob que hacía push y pop a r0, a pesar de ser totalmente innecesario (que en esta situación resultaba ser muy necesario), da como resultado un función que retorna su propio offset.
Como yo inserté la rutina en un offset que terminaba en dos ceros, digamos "XXXXXX00", para llamarla, el offset que habría que usar es "XXXXXX01". Una vez llamada pushea ese valor y cuado termina popea el mismo valor a r0 (el registro de retorno).
El juego como esperaba que esa función retorne un número de 8 bits, procede a eliminar los número que no necesita, es decir, convierte "XXXXXX01" en "01".
Consecuencia, una función que retorna 1 por pura casualidad.
Si uno la insertaba en un offset terminado en 4 por ejemplo, la rutina devolvería siempre 5. Causando que se ejecute infinitamente y que el juego se clave...
Antes que nada, perdón por el doble post, si molesta demasiado considerad hacer lo oportuno, pero pls, no borréis el meme que me da pereza volver a sacar captura. Las mentiras hacen llorar al niño Jesús.