Formato de Cinta "Universal": Spectrum-Amstrad-Commodore-MSX

Comentarios sobre el actual panorama retro. Lanzamiento de libros, películas, vídeos, y cualquier media sobre retro. Cualquier otra iniciativa que promueva nuestra afición y noticias retro que no cuenten con foro específico en ZONADEPRUEBAS.
Avatar de Usuario
nataliapc
Commodore 128
Commodore 128
Mensajes: 89
Registrado: 03 Feb 2017, 10:25
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: (Otro)
Primera consola: (Otro)
Gracias dadas: 24 veces
Gracias recibidas: 27 veces
Contactar:

Re: Formato de Cinta "Universal": Spectrum-Amstrad-Commodore-MSX

Mensajepor nataliapc » 13 Ago 2018, 09:05

BlackHole escribió:Pero si no haces un reconociminento exhaustivo del resto de los datos y solo te fijas en una cabecera, es como hacer un pan como unas hostias: no estás validando la integridad de los datos y no compruebas que pudiesen estar corrompidos.

Tienes que hacer un "parser" para todo el fichero, si no, no vale para nada.


Pues tienes razón... lo suyo sería que el plugin calculara él mismo los Data Hash.

De todas formas es sencillo de generar, simplemente saltarse todos los bloques salvo los 10, 11, 14, 19 y 4B, y de estos últimos concatenar sus datos (sin cabeceras de bloque) y por ultimo calcular su hash.

Podeis ver cómo se genera en el tsx.php que tengo en mi repositorio.

Código: Seleccionar todo

      //Data info (blocks: 10, 11, 14, ¿19?, 4B)
      $data = array();
      $data['blocks'] = 0;
      $tmp = "";
      foreach ($this->blocks as $b) {
         switch ($b->getId()) {
            case 0x10:
            case 0x11:
            case 0x14:
            case 0x19:
            case 0x4B:
               $data['blocks']++;
               $tmp .= $b->getData();
               break;
         }
      }
      $data['crc32'] = hash("crc32b", $tmp);
      $data['md5'] = md5($tmp);
      $data['sha1'] = sha1($tmp);
      $info['data'] = $data;
@ishwin74

Avatar de Usuario
zerobyzero
Dragon 32
Dragon 32
Mensajes: 20
Registrado: 15 Ago 2017, 21:17
Sistema Favorito: C16
primer_sistema: VIC20
consola_favorita: Videopac
Primera consola: Mattel Intellivision
Gracias dadas: 1 vez

Re: Formato de Cinta "Universal": Spectrum-Amstrad-Commodore-MSX

Mensajepor zerobyzero » 13 Ago 2018, 10:39

Existe algún lugar donde esté recogida toda la estructura del formato TSX? Imagino que serán archivos binarios, ésta tarde me bajo alguno y cacharreo. Quiero programar un lector en Python para extraer ciertos datos (entre ellos el CRC32).

Un abrazo

Avatar de Usuario
nataliapc
Commodore 128
Commodore 128
Mensajes: 89
Registrado: 03 Feb 2017, 10:25
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: (Otro)
Primera consola: (Otro)
Gracias dadas: 24 veces
Gracias recibidas: 27 veces
Contactar:

Re: Formato de Cinta "Universal": Spectrum-Amstrad-Commodore-MSX

Mensajepor nataliapc » 13 Ago 2018, 11:07

zerobyzero escribió:Existe algún lugar donde esté recogida toda la estructura del formato TSX? Imagino que serán archivos binarios, ésta tarde me bajo alguno y cacharreo. Quiero programar un lector en Python para extraer ciertos datos (entre ellos el CRC32).


El formato TSX es el formato TZX añadiendo la definición de un bloque nuevo (4B) que permite incluir datos KCS (MSX, Dragon, BBC, ...). Por lo tanto toda la información referida a TZX te sirve, añadiendo la info nueva del bloque 4B.

TZX info:
https://www.worldofspectrum.org/TZXformat.html

Info del bloque 4B:
En inglés | En español
@ishwin74

Avatar de Usuario
zerobyzero
Dragon 32
Dragon 32
Mensajes: 20
Registrado: 15 Ago 2017, 21:17
Sistema Favorito: C16
primer_sistema: VIC20
consola_favorita: Videopac
Primera consola: Mattel Intellivision
Gracias dadas: 1 vez

Re: Formato de Cinta "Universal": Spectrum-Amstrad-Commodore-MSX

Mensajepor zerobyzero » 13 Ago 2018, 19:50

Muchas gracias, Natalia.

Me pongo al turrón, a ver si soy capaz de sacar algo en claro.

Un saludo.

EDITO:

Ya me he puesto manos a la obra. Conocéis algún editor de TZX para ver información de los bloques? es para ir comprobando que lo que mi programa va leyendo es correcto.

NUEVA EDICIÓN:

Peligro, peligro!!! la especificación que me has dado, Natalia, no está del todo actualizada (creo). En, ella se puede leer, por ejemplo, que en bloques 35h, la id es de 10 bytes. Sin embargo en la imagen de "La Abadía del Crimen" que estoy usando para probar, la id es de 16 bytes. Esa longitud la he obtenido de aquí http://www.zx-modules.de/fileformats/tz ... ta%20block

(por lo que veo, hay muchos tipos de bloques y mi escaneador de datos puede alargarse bastante más de lo que pensaba)

NUEVA EDICIÓN:

Así lo dejo por hoy...

Código: Seleccionar todo

<Tsx>
  .s_signature: ZXTape!
  .s_major_rev: 0x1
  .s_minor_rev: 0x15
  .lo_blocks:
                [35] ID:          TSX.RIPPER     
                     CUSTOM INFO: makeTSX v0.8b
                [35] ID:          TSX.LOAD       
                     CUSTOM INFO: BLOAD"CAS:",R
                [35] ID:          TOSEC.NAME     
                     CUSTOM INFO: Abadia del Crimen, La (1988)(Opera Soft)(ES)(Jewel case)[!][BLOAD'CAS-',R][v0.8b]
                [32] Full title: Abadia del Crimen, La
                     Software house/publisher: Opera Soft
                     Author(s): Opera Soft
                     Year: 1988
                     Language: es
                     Game/program type: game
                     Price: -
                     Protection scheme/loader: -
                     Origin: jewel case

Avatar de Usuario
nataliapc
Commodore 128
Commodore 128
Mensajes: 89
Registrado: 03 Feb 2017, 10:25
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: (Otro)
Primera consola: (Otro)
Gracias dadas: 24 veces
Gracias recibidas: 27 veces
Contactar:

Re: Formato de Cinta "Universal": Spectrum-Amstrad-Commodore-MSX

Mensajepor nataliapc » 14 Ago 2018, 01:28

Sí, es una errata de la web de spectrum.
En realidad son 10 en hexadecimal (16) y no 10 en decimal.

Sobre editores/visualizadores tienes:
- ZXBlockEditor
- makeTSX (tiene varias opciones para ver info de un TSX)
- ...y la clase PHP que hice para gestionar TSX.

Todo ello accesible desde [url]tsx.eslamejor.com[/url]
@ishwin74

Avatar de Usuario
zerobyzero
Dragon 32
Dragon 32
Mensajes: 20
Registrado: 15 Ago 2017, 21:17
Sistema Favorito: C16
primer_sistema: VIC20
consola_favorita: Videopac
Primera consola: Mattel Intellivision
Gracias dadas: 1 vez

Re: Formato de Cinta "Universal": Spectrum-Amstrad-Commodore-MSX

Mensajepor zerobyzero » 14 Ago 2018, 09:05

Estupendo, con esa información puedo tirar bastante para delante.

Ahora me surgen varias dudas con respecto al cálculo de CRC32 (y MD5+SHA1). No hace falta que respondas tú, Natalia, que ya te he dado bastante la lata.

  • En tsxeslamejor veo que hay unos campos de "file hash". Imagino que eso incluye todo el archivo, no?
  • A mi modo de ver, sólo los datos "reales" de la cinta deberían incluirse para calcular los hashes. Por ejemplo, los bloques 35 y 32 deberían dejarse fuera. Los meta-datos como programador, año, idioma, etc... no son incluídos por proyectos como No-Intro y Redump. Por otra parte, el hecho de que sean de longitud variable implica que no son evitables en ClrMamePro (ahora comprendo la complejidad del plugin para ROMcenter). Ésto puede suponer un pequeño (o no tan pequeño) handicap para popularizar el formato aunque bien es cierto que una solución rápida puede ser eliminar los meta-datos con un programa previamente a escanear las ROMs con ROMcenter o ClrMamePro. (Esta tarde intentaré probar si los TSX funcionan en los emuladores si se les eliminan las cabeceras).
  • De cualquier modo, el cálculo de los hashes cómo se haría? se concatenan los bloques deseados en el mismo formato binario en el que están y se calcular el hash?

Un saludo y buen día.

Avatar de Usuario
nataliapc
Commodore 128
Commodore 128
Mensajes: 89
Registrado: 03 Feb 2017, 10:25
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: (Otro)
Primera consola: (Otro)
Gracias dadas: 24 veces
Gracias recibidas: 27 veces
Contactar:

Re: Formato de Cinta "Universal": Spectrum-Amstrad-Commodore-MSX

Mensajepor nataliapc » 14 Ago 2018, 09:43

Sí, file hash es de todo el archivo.

Sobre el data hash tienes un post mío con la info unos cuantos posts más arriba incluso con el codigo php para generarlo.
Era eso lo que necesitabas?

De todas formas, si tienes alguna duda más en concreto ya me dices...
@ishwin74

Avatar de Usuario
zerobyzero
Dragon 32
Dragon 32
Mensajes: 20
Registrado: 15 Ago 2017, 21:17
Sistema Favorito: C16
primer_sistema: VIC20
consola_favorita: Videopac
Primera consola: Mattel Intellivision
Gracias dadas: 1 vez

Re: Formato de Cinta "Universal": Spectrum-Amstrad-Commodore-MSX

Mensajepor zerobyzero » 18 Ago 2018, 16:39

A ver, pregunta para los que estén trabajando en el cáculo de los hashes CRC32 de los TSX:

1. Que bloques se incluyen? todos? sólo algunos? cuáles?

En mi opinión es un gran error mezclar datos y meta-datos. Por ejemplo, el bloque 32 donde se incluye información como...

Código: Seleccionar todo

    '0x0': 'Full title',
    '0x1': 'Software house/publisher',
    '0x2': 'Author(s)',
    '0x3': 'Year',
    '0x4': 'Language',
    '0x5': 'Game/program type',
    '0x6': 'Price',
    '0x7': 'Protection scheme/loader',
    '0x8': 'Origin',
    '0xff': 'Comment(s)'}


...es un gran "error" del formato TZX. Esos datos deberían corresponder a otros proyectos diferentes al del dumpeo y preservación.

2. En los bloques de datos de verdad, por ejemplo el 4B, qué "hashea"? sólo los datos binarios o también la descripción de pulsos y demás?

En mi opinión se debería hashear todo, porque si bien los datos están recogidos en la secuencia de bytes, es importante guardar también la descripción de cómo están almacenados en cinta. Si se pierde el segundo grupo de datos, somos incapaces de dumpear el TSX a cinta, por ejemplo. Pero esto conduce a la duda de cómo calcular el hash. Se usan los bloques al completo, tal y como están guardados en el TSX y en el mismo orden? o tal vez sería mejor concatenar en dos cadenas diferentes los datos reales y la información de pulsos y demás para juntarlos al final?

3. Existe algún hilo/lugar donde poder ver los CRC calculados??

Imagino que no, pero estaría bien que existiera algún sitio para que los que queramos trabajar un poco en estos temas pudiéramos hacer "cross-check" de nuestros progresos.

Un saludo.

imulilla
Spectrum 48K Plus
Spectrum 48K Plus
Mensajes: 40
Registrado: 03 Jun 2018, 22:15
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: Sony PlayStation 2
Primera consola: Sony PlayStation 1
Gracias dadas: 2 veces
Gracias recibidas: 3 veces

Re: Formato de Cinta "Universal": Spectrum-Amstrad-Commodore-MSX

Mensajepor imulilla » 18 Ago 2018, 18:56

Buenas, te voy contestando sobre tus preguntas.

"1. Que bloques se incluyen? todos? sólo algunos? cuáles?"

Si miras el codigo que puso Natalia veras que para el calculo del Data CRC solo tiene en cuenta los bloques que contienen los datos (10,11,14,19,4b) y solo la parte de los datos, obviando todo lo demas, el bloque 32 que comentas no lo tiene en cuenta.

3. Existe algún hilo/lugar donde poder ver los CRC calculados??

Tienes la pagina donde esta todo lo relativo al TSX (http://tsx.eslamejor.com/), en cada TSX tienes especificados tanto el File CRC como el Data CRC.

Yo he estado haciendo pruebas con el fichero "Tutor (1985)(Sony - Indescomp)(ES)(Side B)[!][CLOAD + RUN][v0.8.2b].tsx", que es el mas simple de los subidos,si despliegas la informacion de la pagina veras que son 6 bloques, de los que solo tendra el cuenta el 5 y el 6 para el calculo del Data CRC.

Si coges ese TSX y le borras todos los bloques del 1 al 4 y las cabeceras del 5 y 6, el fichero resultante te dara el mismo Data CRC que aparece en la web.

Si crearamos 2 TSX de una misma cinta usando 2 grabadoras distintas (que fueran una un poco mas lenta que otra, por ejemplo), el File CRC seria diferente pero el data CRC seria el mismo.

Espero haberme explicado bien, si tienes alguna duda que te pueda responder no dudes en consultarla.

Avatar de Usuario
zerobyzero
Dragon 32
Dragon 32
Mensajes: 20
Registrado: 15 Ago 2017, 21:17
Sistema Favorito: C16
primer_sistema: VIC20
consola_favorita: Videopac
Primera consola: Mattel Intellivision
Gracias dadas: 1 vez

Re: Formato de Cinta "Universal": Spectrum-Amstrad-Commodore-MSX

Mensajepor zerobyzero » 18 Ago 2018, 21:08

Mil perdones porque no me había dado cuenta de que los "data CRC32" ya estaban en la web.

Y, bueno, habemus papa. El escaneador de TSX en python funciona!!! (al menos con los pocos bloques que he configurado).

Aquí el resultado de "Tutor (1985)(Sony - Indescomp)(ES)(Side B)[!][CLOAD + RUN][v0.8.2b].tsx":

Código: Seleccionar todo

╔══════════╗
║ TSX File ║
╚═╤════════╝
  ├─────────────
  │   File path: data/Tutor (1985)(Sony - Indescomp)(ES)(Side B)[!][CLOAD + RUN][v0.8.2b].tsx
  │   File size: 5809 bytes
  │  File CRC32: 688fc1ef
  │    File MD5: 7ec7577b052793f199cb51bedfc949e0
  │   File SHA1: b3422a33cfd082e14a8057c4b9f9c46334214da8
  │  Data CRC32: 542bd0a0
  │    Data MD5: f183d5666184151ae2fa51788504494a
  │   Data SHA1: c214b229488e4d579c2b2ee09b83aa0ded6f9cbd
  ├─────────────
  │   Signature: ZXTape!
  │    Revision: 1.21
  │      Blocks: 6
  ├─────────────
  │ #1     Type: 35 - CUSTOM INFO
  │      Offset: [0xb : 0x2e]
  │          Id: TSX.RIPPER     
  │ Custom info: makeTSX v0.8.2b
  ├─────────────
  │ #2     Type: 35 - CUSTOM INFO
  │      Offset: [0x2f : 0x4e]
  │          Id: TSX.LOAD       
  │ Custom info: CLOAD + RUN
  ├─────────────
  │ #3     Type: 35 - CUSTOM INFO
  │      Offset: [0x4f : 0xa6]
  │          Id: TOSEC.NAME     
  │ Custom info: Tutor (1985)(Sony - Indescomp)(ES)(Side B)[!][CLOAD + RUN][v0.8.2b]
  ├─────────────
  │ #4     Type: 32 - ARCHIVE INFO
  │      Offset: [0xa7 : 0xe9]
  │  Text field: Full title > Tutor (Logo)
  │  Text field: Software house/publisher > Indescomp
  │  Text field: Author(s) > Sony
  │  Text field: Year > 1985
  │  Text field: Language > es
  │  Text field: Game/program type > application
  │  Text field: Price > -
  │  Text field: Protection scheme/loader > -
  │  Text field: Origin > -
  ├─────────────
  │ #5     Type: 4b - Kansas City Standard
  │      Offset: [0xea : 0x10a]
  │       Pause: 1423 ms
  │ Pilot pulse: 738 T-states
  │  Pilot tone: 30716 pulses
  │  ZERO pulse: 1476 T-states
  │   ONE pulse: 738 T-states
  │  Bit format: 00100100
  │ Bit wrapper: 01010100
  │   Data size: 16 bytes
  │  Data CRC32: 1351a782
  │    Data MD5: 1ee3b2ab9cdf43581805345472ef9ea4
  │   Data SHA1: 970fe42f9c609501dcd7e40303c9caca299512b1
  ├─────────────
  │ #6     Type: 4b - Kansas City Standard
  │      Offset: [0x10b : 0x16b1]
  │       Pause: 0 ms
  │ Pilot pulse: 737 T-states
  │  Pilot tone: 7676 pulses
  │  ZERO pulse: 1475 T-states
  │   ONE pulse: 737 T-states
  │  Bit format: 00100100
  │ Bit wrapper: 01010100
  │   Data size: 5526 bytes
  │  Data CRC32: 6ab90d66
  │    Data MD5: 770782af884f48b9d8f997826df27956
  │   Data SHA1: c3d820a8762f1815ace349ba50b2ecd135d1ee34
  └─────────────


Si crearamos 2 TSX de una misma cinta usando 2 grabadoras distintas (que fueran una un poco mas lenta que otra, por ejemplo), el File CRC seria diferente pero el data CRC seria el mismo.


Vaya, no tenía ni idea, así que la duración de pulsos y demás depende de la grabadora en sí, no de la lógica del que programó el juego y decidió cómo almacenar los datos. Como dije en un post anterior, me está sorprendiendo la complejidad que supone el correcto dumpeo y almacenado de los datos grabados en cinta.

Muchas gracias otra vez por la ayuda y, sobre todo, por conseguir que este gran proyecto vaya para adelante.


Volver a “Retroinformatica hoy”

¿Quién está conectado?

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