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
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 7 veces

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

Mensajepor antoniovillena » 23 Jul 2015, 09:04

mcleod_ideafix escribió:Tienes el PZX. Con ese formato puedes codificar practicamente cualquier cosa que tenga dos niveles de audio.


Cierto. De hecho mi idea era usar PZX tal cual o con alguna pequeña variación, pero con un cambio de extensión para que se sepa que es de MSX (de la misma forma que los CDTs de Amstrad son idénticos a los TZXs de Spectrum).

Pero me salió un trabajo y abandoné el proyecto. De todas formas los otros integrantes del grupo siguen dumpeando WAVs, así que si alguien se anima en este hilo está el proyecto de dumpeado de WAVs.

http://www.vintagenarios.com/hilo-ofici ... t1754.html

El siguiente paso lógico sería pasar los WAVs al nuevo formato e integrarlo en algún emulador de MSX (de los que tengan el código fuente disponible).

manolito74
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 169
Registrado: 18 Mar 2010, 22:44
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: Sony PlayStation 2
Primera consola: Nintendo NES/Clónica
Gracias dadas: 1 vez
Gracias recibidas: 9 veces

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

Mensajepor manolito74 » 14 Ago 2015, 02:06

Hola:

Pues sí, parece que el Proyecto de Juegos en Formato ".WAV" de Pablibiris va viento en popa. Ahora además lo tiene todo organizado, y fácilmente localizable por Nombre del Juego, Compañía, año, etc.

Todo esto puede servir para poder hacer pruebas con los distintos formatos de Juegos de cara a conseguir un Formato ".TSX" o ".MSX" similar al ".TZX". El hecho de tener los Juegos en Wav permite acceder a ellos tal cual, con las cargas Turbo pudiendo analizar los diferentes tipos de Cargas.

A ver si algún día arranca este proyecto "maldito"... :-(

Gracias & Saludetes. ;-)

BlackHole
Amiga 1200
Amiga 1200
Mensajes: 1380
Registrado: 07 Nov 2009, 11:38
Sistema Favorito: C64
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo SNES
Primera consola: Nintendo SNES
Ubicación: Madrid
Gracias dadas: 6 veces
Gracias recibidas: 161 veces

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

Mensajepor BlackHole » 08 Nov 2015, 14:59

Buenas tardes a todos,

A raíz de un reciente mensaje privado de manolito74, he vuelto a revisar un poco este tema olvidado.
Siento no haber sido más activo, pero estos últimos 18 meses he tenido muchos compromisos médicos.

En un principio creí, en mi ingenuidad, que el formato TZX era capaz de poder definir de forma lógica todos los formatos habidos y por haber que yo conocía, pues se podían crear ficheros de Spectrum, Amstrad, Commodore 64, ZX81, Apple II, Oric, Lynx y muchos otros. Sin embargo desconocía el MSX y la forma enrevesada de codificación que incorpora de serie.

TZX está diseñado originalmente para equipos que tienen una onda perfectamente definida para un bit a cero y otra onda perfectamente definida para un bit a uno. Hasta aquí también es el caso del MSX, pero la particularidad de este sistema es que para cada byte de 8 bits, se añaden un bit a cero de inicio por delante y dos bits a uno de parada por detrás, forzando a que cada byte venga definido por 11 bits, es decir, por 22 pulsos (o semiondas). Aparte, se almacena en formato LSB (Least Significant Bit) con los bits dados la vuelta respecto a otros ordenadores.

En Commodore 64 también existen bits de inicio y parada que acompañan a algunas de las codificaciones, de ahí que en la especificación v1.14 del formato TZX hubiese dos tipos de bloques especialmente diseñados para ese ordenador. En un principio pensé que podría aprovecharlo, pero más tarde he visto que solo permiten definir bits de inicio o parada para cada byte, pero no ambos simultáneamente.

Para enrevesar más las cosas, en la escena de Commodore 64 nunca se animaron a adoptar el formato TZX por la antigua rivalidad de ambos sistemas y considerar inferior todo lo proveniente de Spectrum, siguieron manteniendo sus TAP que recopilan los pulsos en bruto (RAW) con cierta compresión RLE, al estilo del formato CSW v1.0 de Spectrum (CSW v2.0 utiliza Zlib para comprimir). Por ello en la especificación v1.20 del formato TZX, oficialmente se declararon obsoletos los bloques diseñados para Commodore 64.

El formato TZX v1.20 introdujo un nuevo tipo de bloque generalista que permitía definir codificaciones extrañas de bits, bien con ondas asimétricas, con grupos largos de varias ondas (como el ZX81), o para los casos que una onda de determinada longitud codifica 2 bits a la vez. Esto es posible gracias a que ese nuevo bloque incluye un diccionario para definir los patrones de bits. Sin embargo, el problema con MSX subsiste, pues los bits están bien definidos, pero no así los bytes en su conjunto.

Si hemos de usar TZX v1.20, una solución podría ser la inclusión de un diccionario de 22 pulsos para cada una de las 256 combinaciones posibles de un byte. Eso provocaría que para cada bloque en formato MSX nativo, se incluyesen 22 x 256 = 5632 entradas de diccionario, con lo que tendríamos exactamente 11 KB de metadatos extra aunque solo necesitásemos cargar una cabecera de 16 bytes. Sería una burrada, pero radicalmente inferior al espacio consumido por un WAV.

Ante mi desconocimiento del otro formato PZX v1.0 de 2007 propuesto al principio del hilo, he echado un vistazo a las especificaciones y he visto que igualmente está muy orientado a Spectrum. Incluye la posibilidad de múltiples ondas para definir un bit cero o uno, pero al igual que TZX, solo plantea bytes de 8 bits. El poder incluir flujos indefinidos de pulsos no arregla la situación; para eso ya existía el formato CSW que impide la asociación rápida de un flujo de bits a los datos que realmente serían cargados después en memoria y editables en un programa como Tapir o ZX-Blockeditor.

La solución por ahora, que permite usar editores y reproductores de TZX bien asentados (en PCs o móviles) parte por la inclusión de un diccionario extendido de 11 KB para cada bloque de carga, o modificar el formato TZX a nuestro libre albedrío fuera de las especificaciones oficiales, lo que obligaría a crear software completamente nuevo que lo soportase.

Voy a hacer pruebas estos días y os subo algún ejemplo lo antes posible.
Última edición por BlackHole el 08 Nov 2015, 17:40, editado 1 vez en total.

manolito74
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 169
Registrado: 18 Mar 2010, 22:44
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: Sony PlayStation 2
Primera consola: Nintendo NES/Clónica
Gracias dadas: 1 vez
Gracias recibidas: 9 veces

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

Mensajepor manolito74 » 08 Nov 2015, 16:44

Hola @Blackhole:

Mil gracias por tus esfuezos y dedicación e interés y mil gracias por darle de nuevo otro pequeño empujón a este tema. ;-)

Gracias & Saludetes. ;-)

BlackHole
Amiga 1200
Amiga 1200
Mensajes: 1380
Registrado: 07 Nov 2009, 11:38
Sistema Favorito: C64
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo SNES
Primera consola: Nintendo SNES
Ubicación: Madrid
Gracias dadas: 6 veces
Gracias recibidas: 161 veces

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

Mensajepor BlackHole » 11 Nov 2015, 19:53

¡Ya estoy de vuelta! Llevo tres días sin parar con este tema, pero ya he generado por fin un primer fichero funcional.

Mis suposiciones iniciales no eran correctas del todo, debido a que no entendí adecuadamente la información presente en el documento "MSX2 Technical Handbook". Tras una primera prueba fallida, me puse el Adobe Audition para diseccionar correctamente un volcado y pude comprobar que la BIOS de MSX generaba dos pulsos para un bit 0, pero cuatro pulsos al doble de frecuencia para un bit 1, de tal forma que ambos bits duran exactamente lo mismo. Acostumbrado a que en el resto de ordenadores el bit 0 durase la mitad que el bit 1, en la norma MSX es diferente.

Esto provocaba que para la combinación óptima "0[00000000]11" necesitásemos 26 pulsos (semiondas), pero para la peor "0[11111111]11" necesitásemos 42 pulsos para definirla. Al necesitar TZX reservar la misma cantidad de espacio para cada entrada de diccionario, ha forzado la utilización de 21 KBytes para almacenar las 256 posibilidades. Fue tedioso generar la plantilla base, pero una vez hecha con Tapir es cómodo insertar el resto de datos de cada bloque.

El TZX que he generado es el correspondiente al volcado con Goldwave del juego Stardust de Topo Soft, que se enlazó aquí en Junio de 2014. Ha sido una labor muy manual y laboriosa por la falta de herramientas correctas. Me he tenido que apañar con WAV2CAS para la parte MSX, MakeTZX y copiones nativos para la parte Spectrum (los bloques "turbo" de la mayoría de protecciones MSX son cargas estándar de Spectrum), editores hexadecimales y volcados de memoria desde el emulador openMSX (blueMSX no lee ficheros WAV) para comprobar doblemente que eran correctos. Aquí está el resultado:

Stardust_ID19.tzx.gz
TZX comprimido del juego Stardust de MSX
(52.41 KiB) Descargado 117 veces

Naturalmente no existe ningún emulador que soporte el formato. Si queréis comprobar que funciona en equipos reales, deberéis descomprimir el fichero y usar un reproductor de TZX (bien en PC, Android o iOS) o generar un WAV usando una de las muchas herramientas disponibles en World of Spectrum que reconozcan TZX v1.20. No he subido el WAV porque al durar 10:25 ocupa 30 MB... pero si realmente tenéis problemas en generarlo, un RAR de 1.5 MB puede subirse a otro lugar.

Este juego, por ejemplo, tiene 6 bloques de MSX y 4 de Spectrum. Cada bloque de MSX, como he comentado más arriba, necesita 21 KB de metadatos, por lo que este TZX de por sí lleva 126 KB extra que no deberían estar ahí (al menos comprimidos no se notan). ¿Cómo actuar a partir de ahora? En la escena del Spectrum acabaron a tortas para decidir las especificaciones finales de TZX, después de meses de argumentaciones y el abandono de los creadores iniciales del formato. Hasta donde yo sé, ahora mismo no hay ningún grupo oficial que lo gestione, así que estamos solos.

Si se crean suficientes ficheros, quizás y con suerte se podría llegar a convencer a Claus Jahn que incluyese esa plantilla de 21 KB en su ZX-Blockeditor. Sin embargo lo más inteligente sería crear un tipo de bloque nuevo completamente al margen de las especificaciones oficiales y que no necesite incluir dicho diccionario... pero el problema es que difícilmente será aceptado por la comunidad de Spectrum (pues el MSX le interesará a muy pocos) y por la comunidad MSX que se encuentra cómoda con los CAS que ha desarrollado durante años.

Editado el 5-Dic-2016: Por alguna razón que ignoro, el adjunto subido aquí el 11-Nov-2016, se ha corrompido. Los bytes 0A se han convertido en 0D 0A, probablemente por un volcado de la BBDD en modo ASCII en vez de binario. Vuelvo a subir el adjunto.
Última edición por BlackHole el 05 Dic 2016, 12:09, editado 1 vez en total.

jlsoler
Spectrum 48K Plus
Spectrum 48K Plus
Mensajes: 45
Registrado: 07 Jun 2011, 17:19
Gracias dadas: 1 vez
Gracias recibidas: 2 veces

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

Mensajepor jlsoler » 11 Nov 2015, 20:49

Hola BlackHole,

De entrada, yo no conozco (para nada) los esquemas de carga en otras plataformas que no fuera Spectrum y Amstrad, por lo que escribo aquí pisando con tiento. Sin embargo sí que conozco lo que es hacer y editar TZXs para el gomas. No sé si conoces la herramienta Tapir, pero creo que para esto mismo te habría venido de perlas. Ten presente que la desarrolló Mikie, la última persona que tuvo bajo su control la definición del propio formato TZX (de hecho fue el responsable de la versión 1.20 del formato). Tapir es para Windows y no necesita instalación, simplemente descomprimir y lanzar el ejecutable. La pongo aquí para el que la quiera: Tapir.

Decir además que Tapir hace también archivos WAV en mono a partir de TZX (opción Play to WAV).

Espero que te vaya bien con esto; la verdad es que los usuarios de Spectrum no sabemos lo que tenemos...

manolito74
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 169
Registrado: 18 Mar 2010, 22:44
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: Sony PlayStation 2
Primera consola: Nintendo NES/Clónica
Gracias dadas: 1 vez
Gracias recibidas: 9 veces

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

Mensajepor manolito74 » 11 Nov 2015, 22:25

Hola de nuevo:

Joer @Blackhole, ¡eres un crack! 1.000 gracias por retomar el tema. ;-)

Tengo recopilada un montón de Info Técnica de diferentes Libros acerca apasionante Mundo del Cassette. Unos se centran más en temas de la onda, frecuencias y demás, y otros más en temas de bits y bytes. Luego los subo para que puedas revisarlos cuando puedas por si te aclaran y/o te dan más ideas.

También tengo un disco lleno de Copiones que son capaces de leer y copiar Bloques Turbo en MSX. lo mismo: luego los subo. ;-)

Bueno, ya tenemos un "algo". Ahora es el momento de pararse un poco y debatir y decidir qué hacer y cómo hacerlo. A ver si aparte de los que domináis el Spectrum algún gurú del MSX se deja caer por aquí y aporta ideas, puntos de vista, etc, etc, etc.

¡1.000 gracias! ;-)

Saludetes. ;-)

BlackHole
Amiga 1200
Amiga 1200
Mensajes: 1380
Registrado: 07 Nov 2009, 11:38
Sistema Favorito: C64
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo SNES
Primera consola: Nintendo SNES
Ubicación: Madrid
Gracias dadas: 6 veces
Gracias recibidas: 161 veces

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

Mensajepor BlackHole » 11 Nov 2015, 23:47

jlsoler escribió:No sé si conoces la herramienta Tapir, pero creo que para esto mismo te habría venido de perlas.

@jlsoler: Hola. No sé si en mi último post te has saltado el momento cuando dije "fue tedioso generar la plantilla base, pero una vez hecha con Tapir es cómodo insertar el resto de datos de cada bloque". Por supuesto ha sido Tapir lo que he utilizado para insertar el diccionario. El tema que estamos tratando aquí es otro, conseguir meter con calzador en el formato TZX la extraña codificación de bytes del sistema MSX. Podría haberse hecho también con ZX-Blockeditor, pero hubiese tenido que meter con ratón 10700 números a mano... al menos ahí ahorras tiempo. Te animo a que descargues el fichero y lo cargues en Tapir para que compruebes la extrema complejidad del mismo.

@manolito74: Creo que tengo revisados todos los documentos que en su día posteaste. El "Technical Data Book", el "msx-tape", el "curso de desprotección de programas". En fin, que el proceso ya está claro. Lo que falta un poco es algo que consiga automatizarlo mejor... cada vez que intento buscar algo en Google, sales tú en los foros buscandolo. Me resulta extremadamente curioso que no hubiese un software nativo de MSX que volcase a disco en tiempo real cualquier bloque de cinta legible en el puerto CAS: por la BIOS independientemente de su tamaño y tipo. Tiene que existir por narices, puesto que hubo escena cracker al igual que en el resto de plataformas.
Última edición por BlackHole el 12 Nov 2015, 00:28, editado 2 veces en total.

manolito74
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 169
Registrado: 18 Mar 2010, 22:44
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: Sony PlayStation 2
Primera consola: Nintendo NES/Clónica
Gracias dadas: 1 vez
Gracias recibidas: 9 veces

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

Mensajepor manolito74 » 12 Nov 2015, 00:10

Hola de nuevo:

Blackhole, he estado contrastando tu información y demás y entiendo que estás en lo cierto porque lo que me comentan es esto:

- A 2400 baudios, un 0 es un ciclo completo a 2400 Hz y un 1 se guarda como dos ciclos completos a 4800 Hz, por lo que sí es verdad que ocupan lo mismo.

- A 1200 baudios, un 0 es un ciclo a 1200 y un 1 son dos ciclos a 2400.

Si tú llamas pulso a medio ciclo, entonces es correcto.

El MSX incluye tres bits más para guardar cada byte (8 bits se convierten en 11 al guardarlos en cinta) para controlar onda, paridad, etc.


Saludetes. ;-)

BlackHole
Amiga 1200
Amiga 1200
Mensajes: 1380
Registrado: 07 Nov 2009, 11:38
Sistema Favorito: C64
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo SNES
Primera consola: Nintendo SNES
Ubicación: Madrid
Gracias dadas: 6 veces
Gracias recibidas: 161 veces

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

Mensajepor BlackHole » 12 Nov 2015, 00:31

El código que genera el diccionario en la sintaxis que espera Tapir en realidad es un código bastante sencillo:

Código: Seleccionar todo

10 LET c = 1458 : REM T-states bit cero
20 LET u = 729  : REM T-states but uno
30 FOR a = 0 TO 255
40 PRINT a;": 0; ";c;", ";c;", ";
50 FOR b = 0 TO 7
60 IF (a & (2^b))=0 THEN PRINT c;", ";c;", "; ELSE PRINT u;", ";u;", ";u;", ";u;", ";
70 NEXT b
80 PRINT u;", ";u;", ";u;", ";u;", ";u;", ";u;", ";u;", ";u
90 NEXT a

Lo que nos permite crear rápidamente el otro diccionario pendiente, el de la carga a 2400 baudios, donde los T-states para el bit cero serán 729 (3500000/4800) y los del bit uno serán 365 (3500000/9600).
Hemos de recordar que aunque el reloj del MSX sea de 3579545 Hz, los tiempos de los ficheros TZX se basan en un micro a 3500000 Hz. Las ondas generadas son aproximadas en cualquier caso.


Volver a “Retroinformatica hoy”

¿Quién está conectado?

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