¡Oh no! ¿Dónde está el JavaScript? El navegador Web no tiene JavaScript activado o no es compatible con JavaScript. Active JavaScript en su explorador Web para ver correctamente este sitio Web o actualizar a un navegador Web que admita JavaScript.
Sabías que...
El mando de Wii (Wiimote) es sospechosamente similar a un prototipo de mando de Dreamcast....

¡Yo controlo! Manejar imágenes CDI por Terminal "like a boss" :)

Última actualización en 9 year hace
IndiketIndiketAdministrador
Publicado 9 year hace
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!
./cdirip imagen.cdi


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)
./makeip ip.txt IP.BIN


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!
Editado por Indiket en 25-08-2016 10:55, 8 year hace
X-CrimX-CrimMiembro
Publicado 9 year hace
enorme enorme y enorme

gracias indi
GromberGromberMiembro
Publicado 9 year hace
Gracias indi.
F
FamilyGuyNuevo
Publicado 9 year hace
(Excusar mi de escribo en inglès, mi español no es muy bueno, pero me gusta español mucho)

Nice tutorial Indi!
I have a few more tips you could like:

To create a dummy file on linux, it's easier to do this:
dd if=/dev/zero of=0.0 bs=total_lenght count=1


or

dd if=/dev/zero of=0.0 bs=2048 count=number_of_sectors


To know the right size of the 0.0 to create, first create an empty 0.0 file and put it in the data folder then do this:
mkisofs -l -no-pad -o nul data

It will tell you the amount of sectors, or 'extents' it has created. Your dummy size is now (347844 - extents) * 2048
You have to create the 0.0 file because it can affect the size of the TOC of the iso, even if using -hide 0.0 will blank it afterward. The -no-pad option should also be used while creating the final iso to get the exact right size. (Or you can simply use 347800 instead of 347844 and be safe :P)


Also, you could use classes found in my gditools.py to extract the data once the dump has been converted to bin/iso. I could make you such a script if you want to, or show you how to do it in python.

Basically, you'd have to know the starting LBA of your data track, it'll work for both iso and bin files. Simply do in a python shell (I suggest using ipython):

from gditools import ISO9660
description = dict(filename = track_filename, offset = start_lba*2048, wormhole = [0, start_lba*2048, 32*2048], mode = 2048) # Change mode to 2352 for bin files, if the starting LBA is 0, simpy remove the wormhole part to be safe (should work anyway, but untested)
with ISO9660(*description) as d:  # Opening the track as if it was isofixed
    d.dump_sorttxt()              # Dumping the sorttx.txt
    d.dump_bootsector()           # Dumping the ip.bin
    d.dump_all_files()            # Dumping all files


Continues el bueno trabajo!

FG
Editado por FamilyGuy en 02-01-2015 06:34, 9 year hace
S
sonic2099Nuevo
Publicado 9 year hace
Buenas,
Gracias por el tutorial. Tengo una pregunta: una vez usado isofix sobre la imagen original obtenemos fixed.iso y bootable.bin, que lo renombramos a IP.bin. En caso de querer quemar esa imagen para arrancar en una Dreamcast, ¿podemos quemar directamente fixed.iso o hay que añadir el archivo IP.BIN dentro de la iso antes de quemarla?

Otra pregunta, si el primer valor de LBA que veo al usar cdirip -info es 0 aunque el juego sea KATANA, ¿quiere decir que la imagen ya se hizo bootable automaticamente o hay que volver a hacer este proceso (por mucho que ya estuviera hecho)?

Gracias de antemano
IndiketIndiketAdministrador
Publicado 9 year hace
Para las imágenes que generamos nosotros, tienen que incluir un IP.BIN para que se puedan quemar. Es decir, a partir del ISO le añadiremos un IP.BIN para generar un fichero CDI.

Recomiendo antes de quemar un CDI, que lo pruebes en un emulador para ver si botea :)

Si sale 0 ya quedará decir que no hay que ajustar el LBA, y de hecho ya la podrás abrir directamente después de usar CDIRIP. Lo mejor es probar esa imagen en un emu, y ver si es autobotable.

Saludos!
S
sonic2099Nuevo
Publicado 9 year hace
Gracias por la respuesta.
Mi intención es quemar isos con Linux. ¿Es posible preparar una iso que pueda arrancar en Dreamcast siguiendo estos pasos (sin tener que usar el formato cdi)?
Yo intenté quemando simplemente fixed.iso (y la Dreamcast entra en un bucle de intentos furiosos de lectura pero nunca arranca), luego pensé que a lo mejor tenía que añadir IP.BIN al principio de la iso para que fuera bien, pero antes de gastar más CDs he preferido preguntar.
Un saludo y gracias de nuevo.
IndiketIndiketAdministrador
Publicado 9 year hace
Jejeje, Dreamcast furious mode on!!

Se puede quemar directamente el ISO, peeero hay que preparar la estructura del cd (multisesión de pista de audio + pista de datos) de una forma concreta.

Esta página lo explica muy bien, dale un vistazo: https://sites.google.com/site/hackerb...ckerb9/cdi

En resumen, de un CDI se extrae el ISO (con IP.BIN) y el WAV, para las dos pistas. En tu caso, si sólo tienes el ISO y no tienes el WAV, lo puedes generar con este comando:

>> dd if=/dev/zero bs=2352 count=300 of=audio.raw


Luego, la chuleta para quemar es la siguiente (OJO, recuerda de ponerle un IP.BIN a la ISO con el mkisofs):
>> cdrecord -dao -v -multi -audio audio.raw
>> cdrecord -tao -v -xa tdata02.iso


Saludos!!

PD: Más info aquí: https://devicesanddesires.wordpress.c...x/#more-44
S
sonic2099Nuevo
Publicado 9 year hace
Muchas gracias por ese link, me viene de lujo. La DC sigue furiosa y no tengo ninguno pero, por curiosidad, ¿arrancaría ese disco si usara antes el Utopia?

Según tengo entendido el mkisofs usa un directorio para crear la iso. ¿Eso quiere decir que tengo que montar fixed.iso, copiar IP.BIN a ese punto de montaje y generar la iso a partir de ahí?

Dos cosas mas, cuando monto fixed.iso hay una carpeta que se llama 'bins' y contiene un 1st_read.bin y un IP.bin. Luego fuera de esta carpeta (en el root de la imagen) hay otro 1st_read.bin (pero no IP.bin),¿qué son? ¿Esa IP.bin me serviría o después de usar isofix siempre hay que usar su IP.bin (bootable.bin)? ¿Es posible que la ISO arranque sin tener que añadirle el IP.bin pero haciendo bien lo de insertar el audio y la multisesion (gracias al link he visto que lo habia hecho mal)?

Por ultimo, cdirip me ha extraído dos pistas de audio (también mostradas por -info) Según tengo entendido lo del audio da un poco igual ¿se puede poner cualquier audio mientras este quepa en el CD o eso vuelve loco todo el tema de los LBA?

Gracias de nuevo y un saludo!

edit:

He añadido IP.bin a fixed.iso de la siguiente manera: he puesto IP.bin en una carpeta y montando fixed.iso, entonces he usado mkisofs pasandole como parámetros primero la carpeta de ip.bin y el punto de montaje de fixed.iso y he creado otra iso (bootable.iso) que tiene el IP.bin en su root. ¿Esta imagen debería funcionar ya si la grabo bien con el audio y la multisesión?¿Hay que usar algún parámetro específico con mkisofs para que la iso tenga el formato bueno para Dreamcast (como -iso-level)?
Editado por sonic2099 en 31-07-2015 23:36, 9 year hace
IndiketIndiketAdministrador
Publicado 9 year hace
Puede ser que fixed.iso ya tengo un IP.BIN o no, pero sí, ese es el procedimiento en homebrew para añadir el IP.BIN.

El audio de la primera pista puede ser cualquiera, siempre con un tamaño determinado. El comando que te puse para generarlo, te hace un audio vacío.

Si el binario no está protegido (ej. que sea Katana), en teoría debería ir tal y como dice, grabando con el audio y multisesion. Pero es todo muy confuso, te recomiendo que generes un CDI con el cdi4dc a partir de los ficheros, y lo pruebes en un emu (puedes usar lxdream, o nulldc 1.0.3 con wine).
puede ver todos los hilos de discusión en este foro.
puede iniciar un nuevo hilo de discusión en este foro.
no puede responder en este hilo de discusión.
no puede empezar en una encuesta en este foro.
puede cargar archivos adjuntos en este foro.
no puede descargar archivos adjuntos en este foro.
Afiliados
SEGA Saturno - Saturn, SEGA y Videojuegos