HispaMSX

RE: Pokes

2003-07-26 19:06:31
--- En hispamsx(_en_)yahoogroups(_punto_)com, "Francesc X. Blasco" 
<skyblasc@y...> 
escribió:
Hola Maso,

Gracias por los POKES, voy a probarlos ^_^

Así pués, si he entendido bién, los POKES se introducen en el 
cargador BASIC
después del último bloque BLOAD. Este bloque se carga sin 
ejecutarse ( sin 
R), se le añaden los POKES correspondientes, y después de llama a la
dirección de ejecución con el DEFUSR ( de esta forma se simula 
el ,R de la
instrucción BLOAD pero a posteriori de introducir los pokes).


Asi es, siempre que la direccion a parchear no este en un bloque 
anterior que haya sido "redireccionado" (a otra direccion/slot de la 
memoria RAM mediante LDIR por ejemplo).


Entonces lo complicado es descubrir cual es la dirección de 
ejecución del
último bloque. ¿Pq se añaden siempre después del último bloque ( 
para que
los datos que se pokean no sean machacados por un bloque posterior) 
o
depende del programa?? Es que en otros sistemas siempre había un 
método más
o menos estándar para poner los pokes simplemente, sin tener 
que "descubrir"
la dirección de ejecución del bloque a POKEAR. Me sorprende que en 
el MSX se
publicaran pokes en las revistas sin dar estos datos del defusr. 
¿NO habría
un método más estándar??
 

La direccion de ejecucion de cualquier bloque cargado con bload se 
guarda en la memoria alta (no recuerdo si era dir=&hFCC9, 2 
bytes).Desde el basic se puede ejecutar asi:

defusr=peek(dir)*256+peek(dir+1):a=usr(0)

por eso no lo decian en las revistas.


 Tambien lo puedes saber editando el archivo BIN con un editor hex y 
mirar la cabecera de carga en el Offset=0005. Lo dificil es descubrir 
QUE pokear, se puede decir que es un arte :) que puede hacer 
cualquiera. lo que no debe ser tan facil es descubrir el formato de 
una base de datos ,para mapas o algo asi o de un player para PSG. Eso 
es para Genios.

Un metodo Standard es el que usa MAME para ahorrarte el trabajo de 
buscar en el codigo mediante los cambios que se producen en los 
valores de las variables guardadas en la  RAM y hacer un cambio en 
tiempo de ejecucion.

En cuanto parchear el codigo el unico metodo standard es el que usa 
JAM - Buscando los op. codes con un editor hex de:

LD A,[CUALQUIER DIRECCION]
DEC A
LD [CUALQUIER DIRECCION],A

cuando se encuentra esto en algun bloque se parchea el DEC A (&h3D) y 
el poke quedaria de esta forma:

poke inicio datos+offset-7,0 (NOP) .el -7 es para tener en cuenta la 
cabecera.


si hay suerte funcionará para vidas o energia, pero no es valido en 
muchos casos,por ejemplo en los 3 juegos que pedias. A parte de esto 
lo mas standard que conozco es depurar el codigo.

Nos vemos en los bares

WYZ



<Anterior en la conversación] Conversación actual [Siguiente en la conversación>