Guía práctica de uso Action Replay de C64 (Monitor CM aún en desarrollo )

Avatar de Usuario
kikems
Mensajes: 2648
Registrado: 30 May 2013 19:23
Agradecido : 628 veces
Agradecimiento recibido: 928 veces

Guía práctica de uso Action Replay de C64 (Monitor CM aún en desarrollo )

Mensajepor kikems » 24 Sep 2018 11:02

GuiaARC64.jpg
GuiaARC64.jpg (182.29 KiB) Visto 337 veces


Hace tiempo que tenía ganas de hacer una guía completa de este dispositivo, tras un par de revisiones aquí dejo la Guía de Action Replay para C64. Está más explicada que el escueto manual de inglés y describe un poco más detenidamente algunos procesos importantes cómo el Pokefinder.
La parte que he dejado coja y pendiente de completar es la del Monitor de Código máquina, ya que necesito tener más experiencia con él y su explicación práctica puede ser tan extensa como para crear otra guía propia solo para él.

Aquí dejo el enlace de las diferentes versiones de Action Replay para cargar en emulador o dispositivos actuales y el escueto manual de los mismos.
Lo mío es una simple guía práctica , si alguien quiere información más extendida sobre alguna de las funciones, buscando entre todos los manuales del enlace encontrará algo de información adicional.

http://ar.c64.org/wiki/Action_Replay

200px-Action_Replay_C64.jpg
200px-Action_Replay_C64.jpg (11.37 KiB) Visto 537 veces


Guía de uso y funciones de Action Replay C64 de RetroWiki.

Primero un poco de historia de los cartuchos fastloader/freezer de C64.

El C64 de siempre ha tenido gran cantidad de hardware adicional, tanto por parte de Commodore como por parte de terceros fabricantes. Unos de los productos más habituales de compra fueron los cartuchos Freezer o Fastload, que se popularizaron rápidamente pasando a ser casi un complemento indispensable si tenías una unidad de disco, pero también eran muy populares entre los usuarios de cassette.

El primero de todos, o el más popular en los inicios, fue el Epyx Fastload, que aceleraba las cargas del sistema de disco de los C64, que de origen eran realmente lentas. Le siguieron cantidad de cartuchos que imitaban esa funcionalidad de Fastload y además incluían más utilidades y funciones .
Muchos de los cartuchos existentes de la época eran copias piratas o hacks de cartuchos de otro fabricante, sin licencia alguna, y se comercializaban bajo otro nombre e incluso en otros idiomas, como fue el caso de los Nordic Replay que eran una versión hackeada y traducida al alemán del Action Replay. Sobre las primeras versiones del propio Action Replay se rumorea que algunas funciones y rutinas eran pirateadas de otros cartuchos como el SuperSnapshot.

Hacia el año 2005 Individual Computers pone a la venta una recreación de los cartuchos Freezer de la época, le añade alguna función nueva y compatibilidad con REU y RRnet llamando al producto Retro Replay. Además de poder funcionar con la rom modificada del propio Retro Replay, también es capaz de actuar como un Action Replay, Final Cartidge o cualquier otro cartucho freezer/fastload de la época que tenga su rom preservada.
Actualmente ya son muchos los dispositivos de nueva hornada, que entre sus múltiples características, son capaces de emular un cartucho Action Replay, Final Cartidge, Epyx Fastload , Nordic Replay etc... cono son los MMCReplay,Ultimate1541, Chamaleon, etc...

El Action Replay de Datel.

El Action Replay por sus características, una constante evolución de versiones y su buen marketing por parte de Datel, fue uno de los cartuchos más populares y vendidos de la época del C64. Incluye cantidad de utilidades y nuevas funciones, además de implementar un sistema de carga Turbo para disco y cinta.
En cartucho tiene dos botones, uno es para hacer un reset del C64 y el otro invoca a lo que se denomina como el Freezer del Action Replay, se describe más adelante. Las últimas versiones de Action Replay llevan una memoria adicional de 60K para poder alojar rutinas y funciones específicas.


Menú inicial
Este es el menú que se muestra al arrancar el C64 con el cartucho insertado.

01.png
01.png (125.68 KiB) Visto 340 veces


F1 - Configure Memory.
Esta función pone a cero todos los datos de la RAM, es importante si vamos a manejar posteriormente el Monitor CM y también es importante usarlo si vamos a hacer una copia a disco o a cinta del juego, una vez cargado. Al igual que en otros sistemas, tras un reset en caliente la memoria en realidad no se borra, simplemente queda disponible para su uso quedando almacenados los datos del anterior juego o programa en memoria, el nuevo juego o programa que vamos a cargar reemplaza los datos en memoria por los nuevos, pero no siempre ocupará toda la memoria y en aquellos lugares, que no escriba el nuevo programa, siempre quedará "basura" del anterior juego o programa.
En el caso de hacer un volcado del contenido de la ram a cinta o disco, es importante que tengamos solo los datos necesarios ya que la rutina del cartucho va a comprimir el contenido de la memoria y la "basura" solo ocupa espacio innecesario.
Me he encontrado con el caso de que algún juego no carga al usar previamente esta función, en ese caso recomiendo apagar , esperar unos segundos y volver a encender el equipo para obtener el mismo resultado sin necesidad de llenar la memoria con ceros y usar el F3, en su lugar.

F3 - Normal Reset.
Realiza un reset en caliente al Basic clásico del C64 sin ningún aditivo especial, recomendado cuando encontramos alguna incompatibilidad con las otras opciones.

F5 - Utilities.
Desde aquí accedemos al submenú de utilidades básicas del cartucho, se explican más adelante.

F7 - Install Fastload.
Esta opción es una de las más importantes del cartucho ya que reinicia el C64 reemplazando las rutinas originales de acceso a disco y cinta por unas más optimizadas que permiten la carga turbo de entre 2 y 7 veces la velocidad normal. Según el método de carga , la protección o que ya tenga unas rutinas propias de fastloader el programa o juego que vamos a cargar, en estos casos puede pasar que no carga cuando tenemos activo el FastLoader del Action Replay, en ese caso arrancaremos con la opción F3, antes indicada.
Por defecto siempre debemos usar el Fastloader del Action Replay, excepto en los casos de incompatibilidad.


Submenú Utilidades.

02.png
02.png (182.5 KiB) Visto 340 veces


F1 - Disk Device : 8
Indica la unidad de disco que vamos a usar con las opciones de este menú, por defecto e las 8, pero si tenemos más unidades de disco conectada, pulsando F1 podemos cambiar la selección.

F3 - Dos Command.
Nos permite escribir comandos del DOS para realizar operaciones sobre la unidad, sin necesidad de volver al Basic para ello.

F5 - Format.
Con esta opción podemos hacer de forma fácil un formateo del disco que está en la unidad. La secuencia para formatear discos desde el Basic del C64 era bastante compleja, por tanto esta opción será de mucha utilidad para cualquier usuario con unidad de discos.

F7 - Directory
Sencillamente lista el contenido de los archivos que están en el disco insertado en la unidad.

F8 - Save Loader.
Esta opción graba un Fastloader de software en el disco para acelerar las rutinas de carga en cualquier C64 aunque no tenga un Action Replay y también servirá para cargar las versiones turbo guardadas con ActionReplay.

A - Disk FileCopy.
Es una sencilla utilidad que sirve para copiar los archivos de un disco a otro. Primero listara los contenidos del disco actual, uno a uno, y te irá preguntando si lo quieres copiar con Y/N, una vez terminada la lista de contenidos el programa ya va solicitando el disco origen y destino para completar la copia de los archivos seleccionados.

B - Whole Disk Copy.
Esta opción hace una copia "Nibbler" lo más exacta posible del disco, pudiendo incluso llegar copiar bastantes discos protegidos.

C - Nova Transfer to Disk.
Junto con los Action Replay se incluían unos discos o se podían adquirir por separado, que incluían rutinas de copiado automático de varios juegos de cinta a disco, incluso multicargas, muchos usaban el sistema de carga de cinta llamado Nova. Esta utilidad permite volcar a disco los juegos con cargadores NovaLoader.
07.png
Disco extra de cargadores a disco de juegos con NovaLoader
07.png (369.01 KiB) Visto 340 veces


D - Tape Slideshow.
Puesto que el Action Replay, además de otras muchas cosas, permite guardar a cinta o disco "fotografías" de los gráficos que se ven en patalla, esta es una utilidad que simplemente carga las imágenes capturadas que hemos ido grabado en una cinta y nos permite ir visualizándolas de una en una.

E - Exit to Fastload.
Sale del menú y vuelve al Basic con el Fastloader del AR, igual que la opción F7 del menú principal.


FastLoader de Action Replay.

04.png
04.png (111.21 KiB) Visto 340 veces


Una vez que lanzamos el Fasloader del AR nos encontramos en un Basic "tuneado"" por el cartucho. Ahora no es necesario que sepamos de memoria oscuros comandos para hacer las tareas básicas de listar, cargar, etc..., están todas resumidas en las teclas de función. Me he encontrado que estas funciones pueden variar de tecla de función según la versión de Action Replay, generalmente son estas:

F1 - Pulsando esta tecla el C64 cargará y ejecutará automáticamente el primer archivo que esté en el disco. Es la opción que más usaremos al insertar un disco de juegos.
F3 - Lista el contenido del disco.
F4 - Cambiar el color del borde.
F5 - Hace un listado del programa Basic que tenemos en memoria, suponiendo que tenemos uno.
F6 - Invoca la función Freeze del Action Replay.
F7 - En el listado obtenido con F3, se puede navegar con los cursores hasta la línea donde está el archivo que deseamos cargar y una vez en esa línea pulsado F7 auto carga y ejecuta ese archivo.


Opciones del Menú Freezer.

05.png
05.png (214.81 KiB) Visto 340 veces


El menú Freezer se puede invocar desde la tecla F6 desde Basic o desde el botón del cartucho, una vez pulsado accedemos al siguiente menú de opciones.

F1 - Backup.
Ejecutas la utilidad para hacer copias del contenido actual de la memoria a disco o cinta, permitiendo así también poder ir haciendo guardados o "snapshots" de nuestras partidas a medida que vamos avanzando en el juego, de forma que posteriormente podremos cargar la partida en el mismo lugar que la habíamos guardado.
Más adelante se detallan las funciones de esta sección.

F3 - Screen
Muestra la pantalla que teníamos en el momento que realizamos el Freeze.

F7 - Restart
Vuelve al programa en el mismo punto de ejecución que estaba cuando pulsamos el botón del Freeze.

M - Monitor
Desde aquí accedemos al Monitor de CM
D - Directory
Muestra el directorio del disco. Útil para el la siguiente opción de "Parameters"
P - Parameters.
Esta opción es para cargar extensiones de Action Replay que se distribuían en disco, hay multitud de ellas que extienden las opciones disponibles en el cartucho ; ripeadores de sid, samples, comunicación con Amiga, editores mejorados de sprites, etc...
Se usa metiendo un disco de extensiones de Action Replay, con la anterior opción de D - Directory ves el contenido del disco, entras en P - Parameters y escribes el nombre de la extensión a cargar, pulsas intro y se ejecuta.
V - View Sprites.
Permite explorar la memoria en busca de sprites y permite modificarlos, guardarlos a disco o cargar otros. Herramienta fundamental para ripear gráficos de juegos.
K - Sprite Killer.
Permite anular la detección de colisiones entre sprites con sprites, sprites con el fondo o ambos casos. Esto significa que, en los juegos que lo permitan, podremos anular que los enemigos y las balas nos maten o resten energía y también podremos trucar el juego para , por ejemplo, atravesar paredes.
X - PokeFinder.
Esta es una de las mejores herramientas que incluye el Action Replay ( solo en sus versiones 5 o superiores ). Nos permite de forma fácil y sin conocimientos de código máquina o similares, encontrar los Pokes válidos para vidas infinitas, energía infinita, balas infinitas, etc...
Aunque la utilidad solo pregunta por las vidas, en realidad lo que hace es buscar el número que nosotros le indiquemos y eso mismo es aplicable a vidas, balas, llaves, puntos de energía etc..
El procedimiento es el siguiente:
1- Reiniciamos el C64 y cargamos nuestro juego ya sea de cinta o disco.
2- Una vez que comencemos la partida, miramos cuantas vidas tenemos en el marcador. Si en el marcador no hay indicador de vidas dejamos que nos maten y segurámente nos indicará algo así como "....te quedan 4 vidas". En el momento que sabemos las vidas que tenemos pulsamos el botón de Freeze del Action Replay.
3- Pulsamos X para acceder al PokeFinder, nos pregunta cuantas vidas tenemos actualemnte, tecleamos el número de vidas que teníamos. Pokefinder comienza buscar por código las posibles direcciones de memoria donde ese valor puede estar almacenado, cuando termina nos dice que volvamos al juego y perdamos una vida.
4- con F7 volvemos al juego y perdemos una vida, cuando estemos seguros que ya hemos perdido esa vida volvemos a pulsar el botón de Freeze. En ocasiones hay una secuencia de muerte o algo parecido cuando nos matan, pero no siempre perdemos la vida inmediatamente, en ocasoines hay que esperar a que termine esa secuencia de muerte para que realmente se reste la vida. Si tenemos marcador nos aseguramos de que se ha restado la vida antes pulsar el Freeze.
5- Pulsando X volvemos a entrar en Pokefinder y el Action Replay recalcula qué valores de los anteriores han decrementado en 1 y hace la modificación necesaria.
Ahora PokeFinder te muestra unos valores similares a:

Poke 51715,173 CA03 AD

Te anotas en un papel Poke 51715,173 ( el resto lo puedes omitir ) y con esto la próxima vez que uses este juego puedes meter este poke directamente para tener vidas infinitas o enviarlo a tus amigos para que lo puedan usar desde su Action Replay o cualquier otro cartucho pokeador.
Cada juego tiene su propio Poke y los juegos multicarga es posible que tengas que volver a usar el PokeFinder en cada fase de carga, para encontrar el Poke correspondiente.
5- Una vez completado el proceso del Pokefinder, vuelves al juego pulsando F7. Comprueba que ahora cuando te matan el contador de vidas ya no baja, si no funciona vuelve a intentar del proceso de nuevo tras perder la primera vida.

Una vez que tienes el juego pokeado puedes hacer un backup a cinta o disco y así guardarás una copia ya trucada y no será necesario que tengas que usar el Pokerfinder o insertar el poke la siguiente vez que lo vuelvas a jugar.

En el caso de usar el Pokefinder para otros conceptos como balas, llaves, puntos de energía etc... el proceso es el mismo, solo tienes que insertar, por ejemplo, el número de puntos de energía en vez de las vidas, volver al juego, perder solo 1 punto de energía y volver al Pokefinder para que localice el poke correspondiente. Si el número de puntos d energía, llaves etc... es superior a 9 (una cifra de más de dos dígitos), te recomiendo que pierdas los suficientes puntos de energía, balas o lo que sea hasta quedarte en algo inferior a 9 y entonces ejecutes el proceso del Pokefinder.

Es muy importante que al usar el proceso descrito de Pokefinder pierdas solo 1 vida, llave, punto de energía o lo que sea, ya que Pokefinder compara que pierdas 1 unidad, si has pedido más de 1 unidad Pokefinder no será capaz de localizar el Poke necesario.
Según el juego y la técnica utilizada por el programador para contabilizar vidas, balas etc.. es posible que algunos casos Pokefinder no sea capaz de encontrar el Poke necesario. Mi experiencia es que funciona en la gran mayoría de los juegos.

Puedes hacer el proceso indicado de Pokefinder tantas veces necesites durante la ejecución de un juego.

E - Pokes.
Esta opción es para insertar directamente los Pokes que ya tienes anotados o que se muestran en diferentes revistas o páginas web.

T - Edit Screen
Te permite editar y manipular la tinta de fondo, el color del borde y la imagen que estaba en pantalla en el momento que se pulsó el Freeze. Según el modo gráfico usado te permite explorar la dirección de memoria que usa cada área de la pantalla, útil para los expertos con el Monitor de CM.

H - Printer Dump.
Si tienes una impresora conectada al C64, te permite imprimir la imagen que estaba en pantalla en el momento de pulsar el Freeze.
S - Picture Save.
Te permite guardar la imagen en disco o cinta (depende de la versión de Action Replay) en diferentes formato gráficos de C64, generalmente válido para las pantallas de carga de los juegos.
L - Turbo Linker
Esta opción permite modificar la velocidad del Datacassete a normal o turbo y asignar la unidad de disco contra la que trabajarán las otras utilidades y el Fastloader.


Opciones del submenú Backup.

06.png
06.png (253.1 KiB) Visto 340 veces


Las opciones del F1 al F8 que muestra el menú de Backup son exactamente iguales que las ya descritas en el menú de utilidades.

A - Disk Save - Turbo
Esta opción nos permite volcar a disco el programa cargado, de forma comprimida y en un formato que cargará entre 2 y 5 veces más rápido de lo habitual con el uso del Action Replay o de la utilidad que podemos grabar a disco con la opción F8 para cualquier C64 sin Action Replay.

B - Disk Save - Warp*25
Es uno de los formatos más rápido de carga existentes para C64, pero solo se puede grabar un archivo Warp por cada cara de disco y ocupa un poco más de espacio que los otros modos. Alcanza una velocidad de carga entre 7 y 8 veces la velocidad de carga habitual de un C64.

C - Disk Save - Standard
Hace un volcado que se carga a velocidad normal de C64, aunque también puede ser acelerado cuando se usa con el Fastloader de disco (f8) o el Fastloader del Action Replay.

D - Tape Save - Turbo
Como su nombre indica, es un volcado del juego en memoria con un sistema de carga turbo. Al igual que las otras opciones es importante no tener "basura" en la memoria para que ocupe lo menos posible y el tiempo de carga sea lo más corto posible, por eso es importante usar la opción F1 del menú principal al cargar el juego o arrancar el C64 desde un reset frío.
El archivo guardado carga entre 1,5 y 2 min.

E - Tape Save - Superturbo
Como su nombre indica es una opción de salvado para una carga superturbo, el problema radica en la baja calidad de las unidades de Datacasette de los Commodore, solía ser habitual que la carga SuperTurbo solo funcionaba en el mismo Datacassette en el que había sido grabado y en cuanto este se ensuciaba o desalineaba un poco, no él mismo era a cargarlo. Son cargas de cinta que apenas llegan o superan el minuto de carga, algo impresionante para la época. Hoy día se puede usar fácilmente con los Tapuinos o los diversos simuladores de Datacassette.

F - Vuelve al programa en el punto que lo habíamos dejado al pulsar el botón de Freeze.
G - Te lleva al mismo menú de utilidades del inicio del Action Replay.
H - Reinicia el C64 de nuevo en modo Fastload.

Hasta aquí la guía de uso, queda pendiente desarrollar el apartado del Monitor CM. Espero que le sea de utilidad a los aficionados al C64.

Avatar de Usuario
kikems
Mensajes: 2648
Registrado: 30 May 2013 19:23
Agradecido : 628 veces
Agradecimiento recibido: 928 veces

Re: Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor kikems » 24 Sep 2018 11:27

El 90% del dispositivo tengo claro cómo se usa como para hacer una guía paso a paso, pero en el uso del Monitor CM ya me pierdo. A ver si alguno de los que sabéis del tema, me podéis ayudar a hacer una guía "paso a paso" de cómo proceder para buscar las direcciones de memoria donde se almacenan las claves, vidas infinitas, energía , etc...

La idea es que todo el proceso se pueda realizar desde una máquina real , ya he visto tutoriales de cómo buscar esas direcciones de memoria desde emuladores con plugins específicos que monitorizan la memoria en tiempo real, pero sigo interesado en el proceso para hacerlo desde una máquina real. Estos son lo típicos conocimientos que se perderán con el tiempo y me gustaría dejarlo aquí documentado antes de que nadie sepa ya cómo se hacía.
Una vez localizada la dirección de memoria , por ejemplo del contador de las vidas, sé cómo hacer el proceso para localizar el decremento con el desensamblador, modificarlo y ese resultado convertirlo en un POKE válido, lo que no sé es cómo encontrar esa dirección de memoria desde el propio Action Replay. Imagino que habrá que hacer un "trace" o una comparativa de las variables que están cambiando durante el juego hasta dar con la correcta.

Lo mismo me interesa para abrir otro hilo de los equivalentes ( multiface, transtape, etc... ) para ZX spectrum , CPC, Amiga ... . Aunque las instrucciones sean diferentes, imagino que el método es similar en todos, localizar la dirección de memoria donde se resta la vida, desensamblarlo, anular el decremento y convertirlo en un POKE.

Ojo no pretendo hacer un curso de CM, solo saber las rutinas básicas o procedimiento básico para localizar y modificar vidas, energía, etc....
En resumen algo funcional con lo que cualquiera que no sepa nada, pueda aventurarse a pasar un buen rato investigando e intentando "romper" algún juego.

Avatar de Usuario
minter
Mensajes: 1982
Registrado: 22 Jul 2014 18:51
Agradecido : 1430 veces
Agradecimiento recibido: 592 veces

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor minter » 24 Sep 2018 12:28

La verdad es que me parece curioso que no haya una guía rapida o tutorial de uso de AR en español.
He visto que hay tutoriales de como integrar nuevas caracteristicas al SEUCK con el AR, cosa que se puede hacer con cualquier desensamblador, como el HesMon.
Pero parece divertido aprender el uso de los AR.
Yo en su epoca empleaba el ya comentado HesMon para toquetear caracteristicas de juegos, extraer rutinas y tocar algún gráfico, pero eso fue hace muchos años y todo era de memoria. (puñetera mania de no apuntar nada) :)

Por cual de ellos vas a decantarte para empezar? Alguna versión en particular? La mas distribuida en España por ejemplo?
No vendrá una review en alguna revista de Commodore World o Commodore Magazine?

Avatar de Usuario
kikems
Mensajes: 2648
Registrado: 30 May 2013 19:23
Agradecido : 628 veces
Agradecimiento recibido: 928 veces

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor kikems » 24 Sep 2018 13:41

minter escribió:La verdad es que me parece curioso que no haya una guía rapida o tutorial de uso de AR en español.
He visto que hay tutoriales de como integrar nuevas caracteristicas al SEUCK con el AR, cosa que se puede hacer con cualquier desensamblador, como el HesMon.
Pero parece divertido aprender el uso de los AR.
Yo en su epoca empleaba el ya comentado HesMon para toquetear caracteristicas de juegos, extraer rutinas y tocar algún gráfico, pero eso fue hace muchos años y todo era de memoria. (puñetera mania de no apuntar nada) :)

Por cual de ellos vas a decantarte para empezar? Alguna versión en particular? La mas distribuida en España por ejemplo?
No vendrá una review en alguna revista de Commodore World o Commodore Magazine?


La idea es un AR 6 o 7.

Avatar de Usuario
Chema
Mensajes: 1980
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1185 veces
Agradecimiento recibido: 391 veces
Contactar:

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor Chema » 24 Sep 2018 14:06

Pues no sé cómo hacerlo sin entrar en código de máquina... Ni siquiera sé cómo lo hace el Pokefinder ese. Por lo que vi en el programa supongo que coge una imagen de la memoria, te pregunta cuántas vidas tienes (pongamos 2), luego pierdes una y mira en la imagen nueva qué posiciones de memoria han pasado del valor 4 al 3. Alguna de esas debe ser el número de vidas (si no se hace algún truco).

A partir de ahí buscará instrucciones DEC xxxx donde xxxx sea la dirección de memoria de antes y las parcheará para que no hagan nada. Es lo que se hacía a mano antes.

No puede funcionar en todos los casos. Hay juegos que guardan las vidas en negativo, o enmascaradas de alguna manera para que no se encuentren fácilmente. La verdad es que yo recuerdo haber visto hacer eso para buscar pokes. No es lo más rápido ni cómodo porque puede haber muchas coincidencias y modificar cosas al tuntún...

Avatar de Usuario
minter
Mensajes: 1982
Registrado: 22 Jul 2014 18:51
Agradecido : 1430 veces
Agradecimiento recibido: 592 veces

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor minter » 24 Sep 2018 15:42

a mí lo que me resuktaba complicado era buscar en los juegos que la vida tenía barra de energía.
Ahí no me coscaba de nada. XD

Edito: Uys! Parece que ha habido una revisión en el texto inicial. Me lo parecerá a mi.

Avatar de Usuario
kikems
Mensajes: 2648
Registrado: 30 May 2013 19:23
Agradecido : 628 veces
Agradecimiento recibido: 928 veces

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor kikems » 24 Sep 2018 15:52

Chema escribió:Pues no sé cómo hacerlo sin entrar en código de máquina... Ni siquiera sé cómo lo hace el Pokefinder ese. Por lo que vi en el programa supongo que coge una imagen de la memoria, te pregunta cuánta...


Si , el pokefinder hace eso y respecto al resto , esa es la forma habitual, el caso es saber cómo se hace en la práctica. No funcionará para todos los casos, pero se pueden plantear casos específicos de 2 o 3 juegos y luego eso sirva de base de experimentación y aprendizaje para quien quiera experimentar más ampliamente.

BlackHole
Mensajes: 910
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 5 veces
Agradecimiento recibido: 116 veces

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor BlackHole » 24 Sep 2018 16:31

Yo entre 1986 y 1991 fui cracker de Commodore 64 y conozco bien el Action Replay. Lo primero que hay que decir, como acaba de apuntar Chema, es que no hay una técnica fiable que funcione siempre, ya que el programador del juego puede a propósito haber querido ocultar las cifras: pueden empezar en una cantidad diferente, puede que no estén en hexadecimal sino en BCD (las unidades en un byte, las decenas en otra, las centenas en otra), puede que la cifra esté en negativo y que cuando llegue a cero es porque ha sumado uno desde 255.

Pero bueno, teniendo en cuenta las técnicas anteriores que podrían forzar varias búsquedas, luego el funcionamiento de la opción POKEFINDER del Action Replay es muy sencilla. Cogemos un juego al azar, como Bruce Lee de Datasoft, distribuido por US Gold. Empezamos la partida por defecto (1 jugador) con F7. Vemos que el contador "FALLS" en pantalla está en 4. Pulsamos el freezer (ALT+Z en emulador VICE) y elegimos "X - POKEFINDER". En la pregunta "HOW MANY LIVES NOW ?" tecleamos 4. Nos salen varios resultados en decimal y hexadecimal, que el programa en la ROM del Action Replay estima que pudiesen servirnos:

POKE 1730,173 06C2 AD
POKE 6206,165 183E A5
POKE 6833,173 1Ab1 AD
POKE 11273,173 2C09 AD
POKE 12255,189 2FDF BD
POKE 25509,173 63A5 AD
POKE 26733,173 686D AD
POKE 61881,165 F1B9 A5
LOSE A LIFE AND REFREEZE
<STOP> TO ABORT
PRESS A KEY

Volvemos al juego con la opción "F3 - RESTART" y perdemos una vida. Volvemos a congelar y volvemos a entrar en POKEFINDER. En cuanto le damos a la X el código ha sido lo suficientemente inteligente como para descartar todas las opciones menos una y muestra en pantalla:

POKE 6206,165 183E A5
INSTALLED
PRESS ANY KEY

Si desensamblamos el contenido en $183E, originalmente era DEC $28 y ahora ha sido modificado por LDA $28

Sencillo, ¿no?

Avatar de Usuario
kikems
Mensajes: 2648
Registrado: 30 May 2013 19:23
Agradecido : 628 veces
Agradecimiento recibido: 928 veces

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor kikems » 24 Sep 2018 16:45

BlackHole escribió:.......

Volvemos al juego con la opción "F3 - RESTART" y perdemos una vida. Volvemos a congelar y volvemos a entrar en POKEFINDER. En cuanto le damos a la X el código ha sido lo suficientemente inteligente como para descartar todas las opciones menos una y muestra en pantalla:

POKE 6206,165 183E A5
INSTALLED
PRESS ANY KEY

Si desensamblamos el contenido en $183E, originalmente era DEC $28 y ahora ha sido modificado por LDA $28

Sencillo, ¿no?


Si esa parte está clara, pero cómo hacerlo sin el pokefinder, a mano es el proceso que me interesa conocer. Imagina que no existe el pokefinder, cómo es el proceso para llegar a la conclusión que la vida se almacena en $183E ?, una vez localizada la dirección tengo claro como es el resto del proceso hasta obtener el poke o anular el DEC, lo que no sé es cómo llegar a la conclusión de que la vida se almacena en $183E.
Creo que si nos basamos en un ejemplo concreto, como el que propones del BruceLii, es más fácil.

PD: Mi versión del Brucelee arroja otra dirección, si puedes compartir el tuyo será mejor, así podré seguirlo paso a paso. Gracias de antemano por la ayuda.

BlackHole
Mensajes: 910
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 5 veces
Agradecimiento recibido: 116 veces

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor BlackHole » 24 Sep 2018 16:58

Pues habría que empezar a desensamblar docenas de KB desde el inicio de ejecución del código, y probar cientos de valores. Ni yo tendría la paciencia.

Avatar de Usuario
kikems
Mensajes: 2648
Registrado: 30 May 2013 19:23
Agradecido : 628 veces
Agradecimiento recibido: 928 veces

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor kikems » 24 Sep 2018 17:00

BlackHole escribió:Pues habría que empezar a desensamblar docenas de KB desde el inicio de ejecución del código, y probar cientos de valores. Ni yo tendría la paciencia.


-banghead no hay una forma de poner un "trace" o buscar un DEC que apunte a un 4 desde el Monitor CM y de ese modo acotar la búsqueda ? o de trazar el último código recorrido desde que perdiste la vida?
Algo parecido a lo que ha realizado el PokeFinder, parece que busca las variables que almacenan un 4 en el código en el primer listado que te muestra y luego parece que simplemente compara cual ha cambiado de valor.
PokeFinder existe desde AR 5 en adelante, los anteriores no tenían esa función.

BlackHole
Mensajes: 910
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 5 veces
Agradecimiento recibido: 116 veces

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor BlackHole » 24 Sep 2018 17:09

Una cosa es ser cracker: analizar un cargador, ver a qué zona de memoria va cada bloque cargado de cinta o disco y luego volcar los datos. Otra cosa diferente es ser un trainermaster. Antes de la existencia del POKEFINDER, pues buscabas sitios donde se cargasen un 4 en memoria (bien registro A, X o Y) y luego a ver si por casualidad había otro sitio donde se decrementase, pero buscando por la secuencia de opcodes de la instucción (y los diferentes modos de direccionamiento podían multiplicar el trabajo por 10). Acababas con un folio lleno de direcciones apuntadas a boli que probar a ver si mantenían el valor tras perder la vida o no. Pero imagínate si no se inicializaba así o el contador estaba trucado, acababas con muchas muchas horas de trabajo para nada.

A veces era tan exagerado que había que examinar la propia memoria de pantalla donde estaba la cifra del contador o la energía para poder tirar del hilo hacia atrás. Titánico con las herramientas del momento, porque no había trazas que saltasen al monitor cuando cambiaba un valor determinado... eras TU quien tenías que buscar los valores en RAM adecuados.

Ten en cuenta de las limitaciones de memoria en dichas máquinas. El Commodore 64 tenía 64 KB de RAM y 20 de ROM. El Action Replay tiene 16 KB de ROM (32 KB a partir del AR4) y 256 bytes de RAM que swapea en una zona que normalmente no es usada (algo que no evita que los juegos detecten y/o bloqueen al cartucho entero). NO puedes poner traces, como mucho mucho puntos de ruptura en algún sitio.

Avatar de Usuario
kikems
Mensajes: 2648
Registrado: 30 May 2013 19:23
Agradecido : 628 veces
Agradecimiento recibido: 928 veces

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor kikems » 24 Sep 2018 17:31

Haciendo el proceso del revés creo que he dado con algo, voy a probarlo en otro juego cualquiera y comento.

Avatar de Usuario
minter
Mensajes: 1982
Registrado: 22 Jul 2014 18:51
Agradecido : 1430 veces
Agradecimiento recibido: 592 veces

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor minter » 25 Sep 2018 11:27

Vale... Esta noche recordé como hacíamos trampas en los juegos con el desemsamblador.
No podíamos hacerlo con todos los juegos, ya que al detener el juego para entrar en el monitor, en algunas ocasiones se pisaban rutinas de los juegos con la ROM del cartucho.
Los juegos que si te permitían hacer ñapas de esta manera eran los que al hacer un Reset, se podía volver con SYS. No ocupaban la parte reservada al Basic.

Bueno, lo que hacía era buscar la rutina de final del juego, la del GameOver. Simplemente buscando la cadena de texto.
Luego miraba hacia arriba en el programa hasta que encontraba el primcipio de la rutina. Se identificaba las diferentes rutinas al tener muchos NOP por medio.
Probaba lanzando las rutinas con :G Rutina a ver si aparecía el mensaje.
Localizada su posición de memoria, buscaba en toda la memoria un salto hacia esa rutina, como volviendo a buscar una cadena.
Cuando aparecía, miraba que instrucción tenía asociada y las anteriores... Y depende de lo que entendía, o cambiaba las condiciones ddel salto de final de programa... O le cascaba un NOP.
A veces iba.... otras cascaba el juego y otras, el contador volvía a empezar.

Cuando tenga tiempo y no esté haciendo recados a "la maquina de reñir" intentaré una prueba.

Avatar de Usuario
kikems
Mensajes: 2648
Registrado: 30 May 2013 19:23
Agradecido : 628 veces
Agradecimiento recibido: 928 veces

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor kikems » 25 Sep 2018 11:32

Aún no he encontrado un método más o menos fiel y simple. Digamos que estoy haciendo el procedo al revés para encontrar una lógica básica para que funciones de forma general para la mayoría de los casos.

con el AR puedo ver los datos en hexadecimal y también puedo desensamblar el código. Desensamblando el código la cosa se simplifica mucho y es relativamente fácil localizar el contador de vidas y modificarlo. Para localizar la direcciones de memoria hay un comando que se llama Hunt que permite hacer búsquedas de cadenas de texto o buscar direcciones de memoria o buscar en hexadecimal, pero no consigo buscar en modo desensamblado que sería lo más sencillo. A ver si poniendo un ejemplo me puedo explicar mejor.

Cargo un juego y miro cuantas vidas tengo ( suponemos que tengo 4 ). Busco el valor 04 con hunt, y me lista todos los registros de memoria que lo contienen, que son un montón :

H 0800 ffff 04

Supongamos que hay ese valor esta en la dirección de memoria 3B21, si voy a ella y desensamblo se vería algo así ( para los huecos en blanco uso _ ya que si meto muchos espacios en blanco el foro se los come y los simplifica en unos solo ) :

.>3B1E 20 AA 3A JSR $3AAA
.>3B21 04 __ __ ???
.>3B23 AD 00 4E LDA $4E00

Vemos que a continuación de la dirección de memoria muestra tres valores de dos dígitos, luego el comando en ensamblador y la variable o dirección sobre la que actúa. En el caso de la variable de vidas el comando es desconocido al desensamblar y muestra ??? y el valor 04.
El problema es que no sé cómo limitar la búsqueda a ese 04 con los espacios nulos hasta el ??? desde el comando Hunt, buscando 04 muestra todas las direcciones que tienen un 04 en alguno de sus contenidos.
Creo que Hunt solo busca en modo hexadecimal y observado valores en el código que tenga "04 __ __ ???" , cuando muestro esas direcciones en hexadecimal me he encontrado resultados dispares como "0400AD....", "040000...", "0400BD...."04AD...", etc ... por lo que no encuentro una forma de buscar desde hexadecimal el equivalente que me sirva para encontrar solo los "04 __ __ ???" desensamblados.

La verdad que no sé si me he explicado bien o si alguien será capaz a entender lo que comento. El resumen es que con Hunt o cualquier otro comando, ¿ cómo se puede buscar de forma fiel ese "04 __ __ ???" ?.

BlackHole
Mensajes: 910
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 5 veces
Agradecimiento recibido: 116 veces

Re: (WIP) Guía de uso de cartuchos del tipo Action Replay en C64 y Monitor CM

Mensajepor BlackHole » 25 Sep 2018 11:55

Sí te has explicado bien, pero creo que la aproximación que tomas no es del todo correcta. Si buscas por sí solo un 4 en memoria puede haber cientos. NO es lo que hay que buscar, no es la forma más óptima. Teniendo en cuenta que estamos en el procesador 6502 (el 6510 del Commodore 64 es un 6502 modificado para tener más puertos de I/O) pues solo tenemos 3 registros de 8 bits: A, X e Y. Lo que habría que buscar es un LDA #$04, LDX #$04 o LDY #$04 (en opcodes hexadecimal A9 04, A2 04 y A0 04). El buscar 2 bytes en vez de 1 va a ofrecer muchos menos resultados.

Luego a la hora de desensamblar hay que empezar bastantes bytes antes del resultado de la búsqueda. Yo solía empezar 128 antes ($80) porque así vas viendo si hay código o si hay basura (u otros datos), si el flujo del desensamblado sigue una cadena lógica y no hay instrucciones desconocidas (marcadas con ???) en medio de alguna instrucción con sentido. En contraposición al Z80 cuyos bytes a 0 son un NOP, el 0 del procesador 6502 equivale a la instrucción BRK que rompe el flujo del programa: en definitiva no hay ceros en medio de un código 6502 del Commodore 64 (el Apple II sí que puede llegar a utilizar alguna vez la instrucción BRK).

El contenido cargado en un registro no vale para nada si no se deposita en una dirección de memoria, así que inmediatamente después o alguna instrucción más tarde, debe haber un STA, STX o STY con una dirección de memoria (bien en direccionamiento absoluto de 2 bytes, bien en página cero con 1 solo byte) que son las que debemos apuntar en nuestro cuaderno. Al menos, hemos bajado de cientos a pocas unidades. Son estas direcciones las que iremos vigilando mientras perdemos vidas, a ver si suena la flauta.


Volver a “Hardware C64”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados