on dos buenas preguntas, una para saber su origen y la otra para saber su función. Vamos a empezar por el principio. Para quien no lo sepa, TSX es un formato de fichero para contener programas en cinta. Está basado en la versión 1.20 del formato TZX usado en la escena de Spectrum y Amstrad, pero al que se le ha añadido una nueva funcionalidad para poder albergar bloques de datos estándar MSX. Con ello el formato TSX sería una versión 1.21 no oficial del formato TZX, al que se le cambió el nombre para una mayor facilidad de búsqueda en internet.
Inicialmente manolito74, su promotor original, perseguía crear un formato unificado que pudiera contener todos los tipos de codificación en cinta de los ordenadores de 8 bits pero, ante la enormidad de este proyecto, se optó por centrarse en algo más tangible: coger un formato ya existente que fuera flexible y que permitiera, mediante una pequeña modificación, dar cabida al máximo número de codificaciones posible. Para ello Francisco Crespo (Blackhole) montó el nuevo tipo de bloque #4B que alberga datos en formato Kansas City Standard o KCS. Este estándar fue el adoptado por diversos ordenadores domésticos de la época, tales como: MSX, Acorn/BBC, MicroBee, Dragon/CoCo, ...
CONSIDERACIONES TÉCNICAS
En el caso concreto del estándar MSX, para una grabación a 1200 baudios, los valores del bloque #4B quedarían de la siguiente forma:
VALORES DE UN BLOQUE #4B PARA MSX
0x06 Duración pulso tono guía
729 T-States
0x08 Número pulsos tono guía
30720 / 7680 T-States
0x0A Duración pulso bit CERO
1458 T-States
0x0C Duración pulso bit UNO
729 T-States
0x0E Configuración de un BIT
0x24
0010 = 2 pulsos para un CERO 0100 = 4 pulsos para un UNO
0x0F Configuración de un BYTE
0x54
01 = 1 bit de arranque 0 = bits de arranque son 0 10 = 2 bits de parada 1 = bits de parada son 1 0 = Reservado 0 = Orden de bits LSb
CODIFICACIÓN DE UN BYTE:
Por lo tanto, para codificar un byte (8 bits), se usan en realidad 11 bits (8 del byte, más 1 de arranque, más 2 de parada):
0b0 b1 b2 b3 b4 b5 b6 b71 1
CODIFICACIÓN DE BITS:
A nivel de bits, cada uno de ellos se codifica en pulsos de la siguiente manera:
Como podemos ver, para codificar un bit a 0 se usan 2 pulsos mientras que para un bit a 1 se usan 4, durando ambos bits lo mismo debido a su distinta frecuencia. A diferencia de la codificación de Spectrum o la de los SVI-318/328 por ejemplo, en la que un bit 0 y un bit 1 no duran lo mismo.
¿ES NECESARIO ALGO ASÍ?
Tras esta rápida introducción ahora viene lo interesante: ¿Para qué queremos un formato nuevo si ya tenemos cientos y cientos de archivos CAS que están sobradamente probados?
Ciertamente el formato CAS ha sido, es y será el formato de facto en la escena MSX, y tiene puntos fuertes tales como:
Simplicidad.
Se pueden usar con LOADCAS desde el propio MSX.
Fácilmente implementable en emuladores.
Hay un volumen ingente de juegos en este formato.
El gran trabajo que hay detrás por parte de la gente que los desprotegió y arregló en caso de que fuera necesario (muchos juegos, para poder ser convertidos a formato CAS hubo que desproteger la carga para convertir todos sus bloques de datos a formato MSX estándar).
Pero tiene también varias carencias importantes, sobre todo de cara a la preservación fiel del contenido de las cintas:
Solo puede contener bloques MSX estándar.
El tamaño de los bloques de datos no es el original, siempre tiene que ser un múltiplo de 8 bytes y en caso de no coincidir se rellena con ceros.
No indica la velocidad de reproducción de los datos.
No contiene información sobre las pausas entre bloques.
No permite metadatos para almacenar información sobre la cinta.
En definitiva, no es el mejor formato para una preservación fidedigna de los datos de las cintas. Es un buen formato funcional, pero en la conversión de las cintas (archivos WAV) al formato CAS, en su día nos saltamos varios niveles de abstracción y por tanto perdimos información importante por el camino.
Por ejemplo, en una buena cantidad de juegos, los editados por Gremlin Graphics o Topo Soft entre otros, se hace uso de los coloquialmente llamados bloques turbo, que en definitiva no eran otra cosa que bloques en formato Spectrum con el objetivo de dificultar la piratería de estas cintas. Otras compañías como Opera Soft también solían usar sus propios bloques custom. Estos juegos contaban con un cargador especial que leía estos bloques que, evidentemente, no eran MSX estándar pero que todos recordaremos por la aparición en pantalla durante la carga, de las típicas barras horizontales de colores.
Todas estas cintas y muchas más pueden ser ahora preservadas fielmente usando el formato TSX. Al ser un formato que permite bloques nativos de Spectrum no hay ningún problema en incluirlos tal cual fueron concebidos, y al contar ahora con el bloque #4B, podemos incluir también los bloques nativos MSX u otros bloques KCS con la versatilidad que este bloque nos da.
MUY BIEN, ¿Y AHORA QUÉ?
Una vez creado el formato, teníamos que empezar a crear ficheros TSX, pero a pesar de contar con todas las herramientas propias de los TZX, necesitábamos una herramienta que fuera capaz de extraer bloques MSX #4B de un WAV y general los TSX con ellos. Así nació makeTSX. Este programa es muy similar a WAV2CAS o MAKETZX, ya que permite extraer datos de un archivo WAV, siempre que la calidad de la digitalización y el deterioro de la cinta lo permitan.
Como se puede ver en las imágenes, los datos serán rescatables siempre que la transición entre pulsos atraviese el cero (línea horizontal central). En caso contrario (como aparece en los recuadros rojos) habría que editar las ondas a mano para arreglarlas, cosa que lleva mucho tiempo y puede llegar a ser desesperante. Así que si os animáis a rescatar vuestras cintas MSX intentad por todos los medios obtener una grabación de la mejor calidad posible para evitar errores y falsos positivos.
Recordad que el objetivo es la preservación, de la forma más exacta posible, de todas las cintas tal como sus autores las concibieron, y eso es lo que estamos intentando lograr en la web TSX MSX Repository, donde contamos ya con más de 200 volcados procurando ser lo más exactos a la cinta original.
Todo esto está siendo posible gracias además al repositorio de cintas de Pablibiris y a la ayuda en la creación y verificación de archivos por parte de Retrocant y FelixFX.
Si os interesa el tema, en próximos artículos abordaré en detalle la extracción de datos con esta herramienta y varios trucos para validar que todo ha ido correctamente, o para localizar errores en la grabación. También abordaremos el uso de los TSX en emuladores y apps / dispositivos de emulación de casete como TapeRider, o el Maxduino de Rafa Molina basado en TZXDuino, aunque podéis ver ya la mayoría en TSX MSX Repository.