Normalización de imágenes .z80
Moderador: Fundadores
Reglas del Foro
Si no se incluyen los fuentes, se debe usar el foro de proyectos de software generales
Si no se incluyen los fuentes, se debe usar el foro de proyectos de software generales
- Bubu
- Demonio segundo orden
- Mensajes: 1125
- Registrado: 02 May 2013, 20:35
Re: Normalización de imágenes .z80
Un ejemplo de lo que digo; abro un TZX cualquiera con el Spectaculator, y veo ahí los bloques mientras se cargan:
Cuando llega al final del último, el Spectaculator automáticamente apaga el cassete, por lo que este emulador sabe perfestamente cuándo ha finalizado la carga. Pues AHÍ es donde yo haría un volcado de los 48KB de memoria RAM, jiji
Fácil, ¿ein?
Cuando llega al final del último, el Spectaculator automáticamente apaga el cassete, por lo que este emulador sabe perfestamente cuándo ha finalizado la carga. Pues AHÍ es donde yo haría un volcado de los 48KB de memoria RAM, jiji
Fácil, ¿ein?
Si algo funciona... no lo toques. ¡¡Pero ni de coña!!
- antoniovillena
- Demonio segundo orden
- Mensajes: 1596
- Registrado: 02 Abr 2013, 19:06
- Been thanked: 1 time
Re: Normalización de imágenes .z80
Cada emulador tiene su propio criterio a la hora de parar la cinta, por lo que obtendrías distintos .z80 y por tanto ninguno "normalizado". La diferencia puede ser de unos pocos ciclos o de varios milisegundos, pero esto hace que los .z80 sean distintos.
Todo esto suponiendo que el juego sea monocarga, si es multicarga la cosa se complica. De hecho un mismo .tzx puede ser monocarga en 128k y multicarga en 48k. Spectaculator detiene la cinta varias veces, no hay forma (automática me refiero) de saber en cual de ellas empieza el juego. Es más, ni siquiera hay un método automático que te diga que el primer bloque es un cargador, porque bien podría tratarse de un juego en BASIC.
En resumen, puedes "normalizar" un juego si manualmente detectas mediante depuración que se ejecuta la primera instrucción en código máquina del mismo (tras haber pasado todos los cargadores, las desprotecciones, las descompresiones, etc...). Lo que no puedes hacer es tratar que un emulador haga automáticamente ese trabajo por tí.
Todo esto suponiendo que el juego sea monocarga, si es multicarga la cosa se complica. De hecho un mismo .tzx puede ser monocarga en 128k y multicarga en 48k. Spectaculator detiene la cinta varias veces, no hay forma (automática me refiero) de saber en cual de ellas empieza el juego. Es más, ni siquiera hay un método automático que te diga que el primer bloque es un cargador, porque bien podría tratarse de un juego en BASIC.
En resumen, puedes "normalizar" un juego si manualmente detectas mediante depuración que se ejecuta la primera instrucción en código máquina del mismo (tras haber pasado todos los cargadores, las desprotecciones, las descompresiones, etc...). Lo que no puedes hacer es tratar que un emulador haga automáticamente ese trabajo por tí.
- Bubu
- Demonio segundo orden
- Mensajes: 1125
- Registrado: 02 May 2013, 20:35
Re: Normalización de imágenes .z80
Sin saber mucho sobre esto de los formatos de archivos para emuladores, yo te diría que sí que el emulador sabe exácticamente dónde se debe parar la cinta. En la documentación sobre archivos TZX lo tienes:
http://www.worldofspectrum.org/TZXforma ... PAUSEBLOCK
Como verás, sólo tiene que detectar en el ID 20 un valor 0. Eso signfica parar el cassete.
http://www.worldofspectrum.org/TZXforma ... PAUSEBLOCK
Como verás, sólo tiene que detectar en el ID 20 un valor 0. Eso signfica parar el cassete.
Si algo funciona... no lo toques. ¡¡Pero ni de coña!!
- wilco2009
- Hermano de Lucifer
- Mensajes: 8152
- Registrado: 01 Abr 2013, 23:47
- Ubicación: Valencia
- Has thanked: 47 times
- Been thanked: 101 times
Re: Normalización de imágenes .z80
Lo que te dice Antonio es que el emulador no sabe si el juego es multicarga o no, por lo que no puede saber exactamente si debe parar o esperar al siguiente bloque.
Esperar al final de la cinta sólo sería válido para los juegos de una sola carga, y aun así un tzx puede tener una pausa ligeramente más larga que otro.
Esperar al final de la cinta sólo sería válido para los juegos de una sola carga, y aun así un tzx puede tener una pausa ligeramente más larga que otro.
"Aprender a volar es todo un arte. Aunque sólo hay que cogerle el truco. Consiste en tirarse al suelo y fallar".
Douglas Adams. Guía del autoestopista galáctico.
Douglas Adams. Guía del autoestopista galáctico.
- antoniovillena
- Demonio segundo orden
- Mensajes: 1596
- Registrado: 02 Abr 2013, 19:06
- Been thanked: 1 time
Re: Normalización de imágenes .z80
En ese caso el emulador sabría exactamente dónde parar la cinta, pero no te dice en qué instrucción y en qué ciclo exacto parar el snapshot. Algunos emuladores lo pararán en un punto y otros lo pararán en otro, por lo que el hash (MD5 ó SHA1) del fichero sería distinto. Es más, el formato z80 permite una especie de compresión RLE y un mismo archivo se puede comprimir de varias formas, por lo que dependiendo del codificador RLE del emulador el hash para un mismo snapshot sería también distinto. Esto se puede arreglar forzando a que los .z80 no tengan compresión RLE.
En cuanto a la instrucción "Parar la cinta" del formato .TZX, se pone de forma manual y no es obligatorio ponerla, de hecho nunca la he visto en un fichero monocarga. Se supone que es una marca que la pone manualmente una persona, el creador del .TZX. No existe por ejemplo en el formato TAP.
En cuanto a la instrucción "Parar la cinta" del formato .TZX, se pone de forma manual y no es obligatorio ponerla, de hecho nunca la he visto en un fichero monocarga. Se supone que es una marca que la pone manualmente una persona, el creador del .TZX. No existe por ejemplo en el formato TAP.
- antoniovillena
- Demonio segundo orden
- Mensajes: 1596
- Registrado: 02 Abr 2013, 19:06
- Been thanked: 1 time
Re: Normalización de imágenes .z80
Lo que tú pides se podría hacer añadiendo la siguiente información a un marcador "Parar la cinta":
Con esto no necesitas almacenar el .z80 ya que todos los emuladores generarían el mismo, y además tendría muchas utilidades más: desprotectores automáticos, conversores TZX a TAP, ultracargadores, compresores, etc...
- PC que indica donde comienza el juego, este podría bastante tiempo después, sobre todo si hay descompresión.
- Bloques de memoria relevantes para el juego. Esto excluye al cargador.
Con esto no necesitas almacenar el .z80 ya que todos los emuladores generarían el mismo, y además tendría muchas utilidades más: desprotectores automáticos, conversores TZX a TAP, ultracargadores, compresores, etc...
- Bubu
- Demonio segundo orden
- Mensajes: 1125
- Registrado: 02 May 2013, 20:35
Re: Normalización de imágenes .z80
¡¡¡¡¡OOOOOOOOOOOOHHHHHHHHHHHH!!!!!!
Eso sí, eso sí pué ser un poblema, efestivamenete, si el que genera un TZX ha dejado un poco de tiempo el cassette astivado... ufff...
Bueno, se me ocurre lo siguién: ¿y si hago una utilidad que cá vez que cargue un .tzx, grabe un volcado .z80 cá vez que deje de entrar datos por el EAR virtual (bit 6 del puerto 254)?
Así las cosas el último .z80 generado será el güeno del tó, ¿nor?
Eso sí, eso sí pué ser un poblema, efestivamenete, si el que genera un TZX ha dejado un poco de tiempo el cassette astivado... ufff...
Bueno, se me ocurre lo siguién: ¿y si hago una utilidad que cá vez que cargue un .tzx, grabe un volcado .z80 cá vez que deje de entrar datos por el EAR virtual (bit 6 del puerto 254)?
Así las cosas el último .z80 generado será el güeno del tó, ¿nor?
Si algo funciona... no lo toques. ¡¡Pero ni de coña!!
- antoniovillena
- Demonio segundo orden
- Mensajes: 1596
- Registrado: 02 Abr 2013, 19:06
- Been thanked: 1 time
Re: Normalización de imágenes .z80
Puedes hacer dicha utilidad, quizás te valga para tus propósitos. Pero no puedes llamarlos .z80 normalizados puesto que el snapshot estaría tomado al final del cargador, y si alguien saca una utilidad similar a la tuya, sacará snapshots diferentes (aunque el usuario no note la diferencia).
- Bubu
- Demonio segundo orden
- Mensajes: 1125
- Registrado: 02 May 2013, 20:35
Re: Normalización de imágenes .z80
Yo creo que sería exácticamenete el pispo .z80. Cualquier emulador que se trague los .tzx lo que hará será emitir por el puerto 254 sincronizadamente con la CPU, ¿nor? Por tanto cuando el emisor de datos por el puerto 254 ya no tenga nada más que emitir, parará la emulación justo en ese ciclo de reloj, y grabará el archivo .z80
Cualquiera que haga otra utilidad de estas generaría el mismo archivo .z80, siempre y cuando lo grabe en el primer ciclo de reloj sin puerto 254.
¿nor?
PD: Vuelvo a recalcar que esto no tié arsolutamente ninguna utilidad, no es más que un frikeo teórico para los que nos gusta hablar de estos jaleos, jiji.
Cualquiera que haga otra utilidad de estas generaría el mismo archivo .z80, siempre y cuando lo grabe en el primer ciclo de reloj sin puerto 254.
¿nor?
PD: Vuelvo a recalcar que esto no tié arsolutamente ninguna utilidad, no es más que un frikeo teórico para los que nos gusta hablar de estos jaleos, jiji.
Si algo funciona... no lo toques. ¡¡Pero ni de coña!!
- zx81
- Aspirante a demonio
- Mensajes: 499
- Registrado: 19 Oct 2013, 16:27
- Ubicación: Valencia
- Has thanked: 11 times
- Been thanked: 2 times
- Contactar:
Re: Normalización de imágenes .z80
Nada mejor que un ejemplo para demostrar que no es tan claro como piensas: Babaliba (el primer TZX, medium case). ¿Cual es ahí el último bloque del juego?Bubu escribió:Yo creo que sería exácticamenete el pispo .z80. Cualquier emulador que se trague los .tzx lo que hará será emitir por el puerto 254 sincronizadamente con la CPU, ¿nor? Por tanto cuando el emisor de datos por el puerto 254 ya no tenga nada más que emitir, parará la emulación justo en ese ciclo de reloj, y grabará el archivo .z80
Cualquiera que haga otra utilidad de estas generaría el mismo archivo .z80, siempre y cuando lo grabe en el primer ciclo de reloj sin puerto 254.
¿nor?
PD: Vuelvo a recalcar que esto no tié arsolutamente ninguna utilidad, no es más que un frikeo teórico para los que nos gusta hablar de estos jaleos, jiji.
Today's robots are very primitive, capable of understanding only a few simple instructions such as 'go left', 'go right' and 'build car'.
John Sladek
Emulador de Spectrum JSpeccy.
Emulador de Spectrum Bare-metal para las Raspberry PI ZXBaremulator
John Sladek
Emulador de Spectrum JSpeccy.
Emulador de Spectrum Bare-metal para las Raspberry PI ZXBaremulator