Perdonadme por el título del post jajajaja, no estaba demasiado inspirado!! Así pues, ¿eres un pr0 h4ck3r que quiere ser más chulo que los demás? ¿O simplemente vives en el mundo UNIX (Ubunteros y Maqueros, bienvenidos! xD)? ¡¡No llores más!! Hoy aprenderemos cómo crear y extraer datos del.... CDI.
Pero, ¿qué carajo es un CDI?
CDI es un formato de Padus Discjuggler, un conocido programa tostador de imágenes (hoy en día ya no tanto). Por cuestiones históricas, se ha convertido casi en un estándar en el mundo Dreamcast, porqué permite combinar fácilmente pistas de datos, con pistas de audio (lo que llamamos CDDA)... y porqué se usó para ripear los juegos originales (dumps exactos), en formato GDI (recuerden que la Dream funciona con GD-ROMs y, por supuesto, CD-ROMs).
Los CDI se usan tanto para quemar ya en un CD-ROM, como en emuladores. Así pues, es frecuente que nos lo encontremos :)
¡Genial! Pero el maldito (inserte aquí su SO) no me lo abre :(
Al igual que el formato ISO sí es un estándar más reconocido (tiene los famosos Books, ISO9960...), el CDI no (al ser más propietario).
En Windows, disponen del maravilloso Daemon Tools (tb hay una versión en Mac), o del Isobuster. Incluso el Alcohol 120% les permitirá usar los CDI pero... nos gusta lo complicado! ;)
Un CDI
selfbootable de Dreamcast necesita, al menos, tener una pista de audio y una de datos. No entraré en detalles técnicos (ok, las Dreamcast NTSC-U últimos modelos funcionan con data/data...), pero es importante saber qué es y sirve el LBA. La TOC de la imagen (Tabla de Contenidos), nos da la información de las pistas, y su LBA.
Un
LBA (Logical block addressing) es un método muy común usado para especificar la localización de los bloques de datos en los sistemas de almacenamiento (en este caso, el CDI). Si no se especifica correctamente, nos será imposible obtener los datos!! Es más, algunas protecciones de los juegos de Dreamcast se basan en el valor del LBA :D
Recuerden esto:
Binarios KATANA --> pueden tener un LBA diferente a 0, y en ese caso, habrá que arreglarlo.
Binarios Homebrew --> el LBA es 0 y no hay que preocuparse de ello (hooray!).
¡Argg! Sigue sin abrirse...
Ok!!! Empecemos con las herramientas necesarias!
*
CDIRIP 0.6.3: Herramienta para desensamblar una imagen CDI, lo usaremos para convertir la imagen en ISO. La versión 0.6.3 sólo va en 64-bit Intel (Mac). Si necesitan usarla en arquitecturas PPC usen la 0.6.2
http://www.dreamcast.es/descargas/uti...-0.6.3.zip
*
ISOFIX 1.3: Si es un juego comercial (KATANA), e intentas abrir la ISO, te dará naranjas de la china :( . Esta utilidad te permite arreglar el LBA de la ISO y así poder extraer los datos!
http://www.dreamcast.es/descargas/uti...fix1.3.zip
Pasos para triunfar:
1. Compilen CDIRIP y ISOFIX con un simple "make". No deberían de tener ningún problema!
2. Lo primero es obtener la información del CDI con este comando:
./cdirip imagen.cdi -info
Nos dará información de la versión CDI (2 , 3.5, etc), las sesiones y lo más importante, el LBA.
Apunten el LBA de la 2a sesión (es la de los datos) que lo usaremos luego.
3. Ahora a hacer la conversión!
4. Cuando termine, tendrán tres ficheros (.wav, .iso y .cue). Sólo nos interesa el
fichero ISO.
5. Si es un binario KATANA, tienen que arreglar la ISO con la otra herramienta:
Les preguntará por el nombre de la ISO (muevan la ISO en la misma carpeta que isofix, por comodidad), y luego el LBA (pongan el encontrado anteriormente).
Generará los ficheros: header.iso, bootfile.bin y fixed.iso. Quédense con fixed.iso y prueben de abrirlo ahora con su programa favorito ^^. Además, pueden borrar el "header.iso" y renombrar "bootfile.bin" a "IP.BIN" (¿les suena? hahaha).
Pasos opcionales:
* Pueden generar un fichero dummy para mover los datos al final de un CD y así ayuden a la Dreamcast a cargar mejor el juego... ¡¡de verdad de la buena!!
¿Qué no encuentran un creador de dummies para UNIX? No problemo, jefe!!
// gcc -o newfile newfile.c
//./newfile
#include <stdlib.h>
#include <stdio.h>
void main(int argc, char** argv)
{
FILE* fp = NULL;
char* name = "00DUMMY.DAT";
unsigned int size = 0;
if (argc<2)
{
printf("Usage: newfile <size in bytes> [filename]\n");
exit(-1);
}
size = atoi(argv[1]);
if (argc==3)
name = argv[2];
printf("Creating file...");
fp = fopen(name, "wb");
fseek(fp,size-1,SEEK_SET);
fputc('\0',fp);
fclose(fp);
printf("Done.\n");
}
* Pueden "hackear" un binario KATANA con Binhack32 de FamilyGuy. Necesitan usar la pareja 1ST_READ.BIN + IP.BIN (o 0WINCEOS.BIN si es un juego WinCE).
¡OMG, te queremos Indi! Pero ahora quiero hacer al revés, generar un CDI a partir de datos :)
Ok!!! Empecemos con las herramientas necesarias!
*
Scramble: Convierte los binarios unscrambled a scrambled y viceversa. La Dreamcast sólo ejecuta binarios "scrambled", y si usan homebrew (o compilan juegos), estos salen "unscrambled", con lo que hay que convertirlos.
http://mc.pp.se/dc/files/scramble.c
*
MakeIP: Si queremos crear nuestro propio IP.BIN personalizado lo podemos hacer con esta utilidad
http://mc.pp.se/dc/files/makeip.tar.gz
*
CDI4DC: La gran herramienta de Sizious, convierte una imagen ISO en formato CDI. El link apunta al código fuente para que lo podáis compilar:
http://sourceforge.net/projects/img4dc/
*
Mkisofs: La navaja suiza para poder crear imágenes ISO, dentro del paquete dvdrtools :)
Una vez descargados hay que compilarlos, simplemente con gcc:
gcc -o scramble scramble.c
gcc -o makeip makeip.c
Pasos a seguir:
1. Convertir el binario en scrambled
./scramble /ruta/al/binario.bin 1st_read.bin
Generará el 1st_read.bin en el directorio actual.
2. IP.bin (paso opcional)
Si se quiere personalizar el ip.bin, modificad el ip.txt (fijaros bien en el campo Boot Filename)
3. Copiad el IP.BIN (generado o no según el nombre del fichero) junto al 1st_read.bin
4. Crear formato ISO
mkisofs -l -r -C 0,11702 -G IP.BIN -o tmp.iso ./1st_read.bin
5. CDI4DC
./cdi4dc tmp.iso nombre_imagen.cdi
BONUS!! ¿Trabajar con imágenes GDI? Yes, we can!! Thanks FamilyGuy!! ;)
http://www.assemblergames.com/forums/...GDI-files!