32
PlayStation 2 Arquitectura y Programación Rafael García Moreno <[email protected]> 9 de mayo de 2003

Playstation 2 Programación

Embed Size (px)

DESCRIPTION

Playstation 2 Programación

Citation preview

PlayStation 2Arquitectura y Programación

Rafael García Moreno <[email protected]>

9 de mayo de 2003

Índice general

1. Introducción 2

2. Arquitectura de la PS2 52.1. Emotion Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2. IO Processor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.3. Sintetizador Gráfico (GS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3. Protección anticopia de la PS2 y modchips 103.1. Protección anticopia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.2. La partición de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.3. Método CogSwap para evitar la protección anticopia . . . . . . . . . . . . . . . 133.4. Nosolder chips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.5. Modchips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.6. Backups de juegos bajo linux y creación de CDs para la PS2 . . . . . . . . . . . 15

4. Métodos de programación de la PS2 184.1. Kit de desarrollo de Sony . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.2. Kit de linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.3. Programación RAW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

5. Instalación del entorno de programación RAW 225.1. Preparando el entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225.2. Emotion Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235.3. Unidades Vectoriales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255.4. IOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275.5. Newlib y ps2lib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.6. Compilando una demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

1

Capítulo 1

Introducción

La PlayStation 2 (PS2) de Sony, fué uno de los productos más esperados del 2001. Las ca-racterísticas técnicas de la consola son impresionantes.

Esta consola ha sido diseñada desde el pricipio con un claro objetivo: Juegos 3D. Es por esoque todo el harware está orientado a que se puedean realizar juegos que lleven al usuario a unainmersión en un mundo audiovisual en tres dimensiones.

La PS2 es la evolución de la primera consola desarrollada por Sony, la Playstation (PSX),que fué puesta en el mercado en el año 1995. La PSX fué de las primeras consolas cuyos juegosse distribuian en soporte CDROM. Los juegos de la PS2 se distribuyen en DVD aunque tambiénes capaz de reproducir los juegos de la PSX en CDROM. Gracias a la gran capacidad de losDVDs (4.7 GB), los juegos de la PS2 están repletos de videos, música y sonido en 3D. Ademásde juegos, la PS2 puede reproducir CDs de audio y películas en DVD por tanto es una completaplataforma de entretenimiento.

El panel frontal contiene, además de la bandeja para los DVDs/CDs:

2 slots para las tarjetas de memoria que son de 8 MB normalmente, aunque el formato esel mismo que las de la PSX por lo que se pueden intercambiar.

2 slots para los nuevos controles, también funcionan los controles antiguos de la PSX.

2 puertos USB que pueden ser usados con cualquier dispositivo USB compatible comoteclados, ratones, impresoras, etc.

1 puerto Firewire de alta velocidad

La parte trasera contiene conectores para la salida de televisión, para televisión de alta definicióny salidas de sonido surround, DTS y Dolby Digital 5.1.

2

CAPÍTULO 1. INTRODUCCIÓN 3

Figura 1.1: Playstation 2

Los mandos estándar, Dual Shock 2, tienen 15 botones; todos son analógicos, excepto Ana-log, Start y Select.

Figura 1.2: Dual Shock 2

El mando consta de:

4 botones ordenados como cursores direccionales (arriba-izquierda)

Botones Analog, Start y Select (medio)

4 botones de acción de distintos colores (arriba derecha)

CAPÍTULO 1. INTRODUCCIÓN 4

4 botones de accion, L1 , L2 (frente-izquierda) y R1, R2 (frente-derecha)

2 joysticks analógicos con force-feedback (arriba-izquierda y arriba-derecha)

La siguiente tabla comparativa muestra algunas consolas disponibles en el mercado en el añode presentación de la PS2 y las consolas más recientes. Los datos proporcionados por Sony yMicrosoft no son realistas, son los datos máximos, mientras que los de Nintendo y Sega estánmedidos en un juego real:

Consola Polígonos/seg Frecuencia Memoria PrincipalPlaystation 2 75 millones 300 Mhz 32 Mb RAMBUS + 4 Mb DRAM de video

XBox 150 millones 733 Mhz 64 Mb RAM unificada

Gamecube 6-12 millones 485 Mhz 24Mb SRAM+16Mb DRAM+3Mb SRAM de video

Playstation 360,000 33.86 Mhz 2 Mb + 1 Mb de video

Dreamcast 3 millones 200 Mhz 16 Mb + 8 Mb de video

Nintendo 64 150,000 93.75 Mhz 4 Mb Direct RAMBUS

El alto grado de paralelismo de la arquitectura de la PS2 permite obtener un rendimientosuperior a las últimas consolas funcionando a una velocidad de reloj menor.

Capítulo 2

Arquitectura de la PS2

La arquitectura de la PS2 se compone de 4 partes principales:

Procesador de Entrada/Salida (IOP): El IOP maneja el USB, el FireWire, y todo eltráfico de los mandos de control del juego. El IOP envía la entrada de los mandos de controlal Emotion Engine para que este pueda actualizar el estado del juego apropiadamente.

Emotion Engine (EE): El Emotion Engine es el corazón de la PS2, y la parte que la haceúnica. El Emotion Engine realiza las siguientes funciones:

• Cálculos geométricos: transformaciones, translaciones, etc.

• Comportamiento del mundo 3D: IA de los enemigos, colisiones y en general la físicadel mundo que se está simulando.

• Funciones generales: Control del programa y en general la dirección del juego.

El resultado del trabajo del Emotion Engine son display lists, esto es, secuencias de co-mandos de rendering que son enviados al sintetizador gráfico (GS).

Sintetizador Gráfico (GS): El sintetizador gráfico recoge los display list que le envía elEE y los representa en la pantalla. Es lo que sería la “tarjeta gráfica” de la PS2.

Procesador de sonido (SP): El SP es lo que sería la “tarjeta de sonido” de la PS2. Escapaz de reproducir sonido digital 3D.

5

CAPÍTULO 2. ARQUITECTURA DE LA PS2 6

Figura 2.1: Arquitectura de la PS2

2.1. Emotion Engine

El Emotion Engine es el corazón de la Playstation, una CPU RISC de 128-bits desarrolladapor Sony y por Toshiba. Implementa un subconjunto de instrucciones del procesador MIPS-IV.La CPU funciona con una velocidad de reloj de 300 MHz.

Para el proceso masivo de información multimedia a altas velocidades, tanto el bus de datos,como la memoria caché y los registros son de 128-bits. Todo está integrado en un solo chip LSI a0.18 micras. El Emotion Engine ha sido la primera CPU desarrollada completamente de 128-bits.

La capacidad de cálculo en punto flotante es muy superior a la de los ordenadores personalescorrientes. La CPU incorpora dos unidades de enteros (IU) de 64-bits, una unidad SIMD de128 bits con 107 instrucciones para el procesamiento multimedia, dos unidades independientesde calculo de vectores en punto flotante (VU0, VU1), un circuito decodificador de MPEG-2 ycontroladores DMA de alto rendimiento.

Son tres los componentes que pueden realizar operaciones en punto flotante en paralelo:

Coprocesador 1 FPU con 1 FMAC1 y 1 FDIV

1Unidad de multiplicación y acumulación en punto flotante

CAPÍTULO 2. ARQUITECTURA DE LA PS2 7

Figura 2.2: Arquitectura del Emotion Engine

Coprocesador 2 VU0 con 4 FMAC y 1 FDIV

Unidad de proceso vectorial con 5 FMAC y 2 FDIV

El rendimiento combinado de todos estos elementos permite calculos físicos complicados, gene-ración de superficies NURBS y transformaciones geométricas 3D.

Además de procesar los datos a 128-bits, es posible procesar y transferir volúmenes masivosde datos multimedia. Los 32 MB de RAM de memoria principal que soportan la velocidad de laCPU son Direct Rambus DRAM de dos canales para conseguir un ancho de banda de 3.2 GB/seg.Unas cuatro veces el rendimiento de las memorias PC-100 que se montaban en los ultimos PCscuando salió al mercado la PS2.

Con la incorporación del decodificador MPEG-2 en un chip, es posible procesar en paralelodatos gráficos 3D de alta resolución y imágenes DVD de alta calidad.

Con una capacidad de calculo en punto flotante de 6.2 GFLOPS/seg, el rendimiento de estaCPU alcanza el de algunos supercomputadores. Cuando es aplicado al procesamiento de trans-formaciones de perspectiva y geométricas, que son las que se usan normalmente para el cálculode gráficos en 3D, el rendimiento llega a 66 millones de polígonos por segundo. Este rendimientoes comparable con las estaciones gráficas usadas en la producción de películas de animación.

CAPÍTULO 2. ARQUITECTURA DE LA PS2 8

2.2. IO Processor

El IOP es el procesador que tenía la ’antigua’ PSX. Con la inclusión de este procesador dentrode la PS2 se ha conseguido la compatibilidad al 100 % con la PSX. Además, se le ha añadido alprocesador soporte para IEEE 1394, también conocido como Firewire y para USB ya que estosson los nuevos estándares de interocnectividad.

El nuevo IOP también incorpora las siguientes novedades sobre la CPU de la PSX: memoriacache mejorada, una nueva arquitectura DMA de alto rendimiento que permite un incrementode hasta 4 veces en la transferencia de datos. La interface serie también ha sido actualizada y esunas 20 veces más rápida que la de la PSX.

La interfaz USB es compatible con OHCI (Open Host Controller Interface) y puede mane-jar transferencias de datos desde 1.5 Mbps hasta 12 Mbps. IEEE 1394 puede manejar tasas detransferencia desde 100 Mbps hasta 400 Mbps.

El uso de estas interfaces permiten la futura conectividad de la PS2 a un gran variedad deotros sistemas como los VCR, Camaras digitales, Impresoras, Joysticks, Teclados, Ratones, etc.

2.3. Sintetizador Gráfico (GS)

El sintetizador gráfico desarrollado por Sony incorpora un motor de rendering paralelo quecontiene un bus de datos de 2560 bits de ancho el cual es unas 20 veces el tamaño de las tarjetasaceleradoras de los PCs. Tasas de relleno de pixeles muy altas y rendimiento en el dibujado esalcanzado a través de DRAM embebida.

La PS2 introduce el concento de Sintetizador Gráfico a través del cálculo en tiempo real ydibujado de objetos 3D. La función de rendering ha sido especialmente optimizada para generarimágenes que soportan televisiones NTSC/PAL, televisión digital de alta resolución (HDTV) yel estándar VESA. La calidad de la imagen resultante en pantalla es comparable a la calidad delas peliculas de animación 3D en tiempo real.

En el diseño de systemas gráficos, la capacidad de rendering es definida por el ancho de bandade la memoria entre el motor de pixels y la memoria de video. Los sistemas convencionales usanmemoria externa VRAM alcanzada a traves de un bus externo al chip que limita el rendimientototal del sistema. Sin embargo, en el caso del nuevo GS, hay un ancho de banda de 48 Gigabytesque se ha alcanzado gracias a la integración de la memoria y el motor de render en el mismochip.

Cuando se dibujan pequeños polígonos, el rendimiento pico es de 75 millones de polígo-

CAPÍTULO 2. ARQUITECTURA DE LA PS2 9

nos por segundo y el sistema puede dibujar 150 millones de partículas por segundo. Con estacapacidad, es posible generar imágenes con calidad de cine. Se pueden llegar a 20 millones depoligonos dibujados de forma sostenida usando Z-buffering, texturas, luces y transparencias.

Esta nueva arquitectura puede ejecutar procesamiento en pasadas múltiples de forma recur-siva y operaciones de filtrado a alta velocidad sin la asistencia de la CPU principal o el acceso albus principal.

Capítulo 3

Protección anticopia de la PS2 y modchips

3.1. Protección anticopia

Los detalles de la protección anticopia que Sony utiliza para su PS2 no han sido publica-dos nunca, los datos que se conocen han sido realizados a través de ingeniería inversa por loscreadores de los sistemas anticopia. Debido a problemas legales y/o intereses comerciales es di-fícil encontrar publicada la información obtenida por ingeniería inversa por lo que puede que ladescripción que sigue no sea del todo exacta.

La PS2 admite los formatos CDR de audio, CDROM modo XA2, DVD-Video y DVD-ROM.La PS2 no proporciona ningún esquema de protección contra los backups CDR de audio y

utiliza la protección estándar para los DVD-video.

Protección de los formatos DVD-video

El DVD-video es el estándar para manejar video en MPEG 2 con su correspondiente streamde audio asociado y que puede ser leido por los reproductores DVD. La especificación del DVD-video contempla la protección anticopia para proteger los productos de los grandes estudioscinematográficos.

La protección del DVD-video se ve reforzada por un contrato que debe ser firmado por todoslos fabricantes de reproductores DVD tanto hardware como software y que les obliga a imple-mentar una serie de protecciones, entre ellas proteger las salidas digitales, implementar la sepa-ración por regiones, implementar tecnicas de ofuscación para hacer dificil la ingeniería inversa,etc.

La protección del DVD-video es parte del la Content Protection System Arquitecture. Aun-

10

CAPÍTULO 3. PROTECCIÓN ANTICOPIA DE LA PS2 Y MODCHIPS 11

que el formato DVD es anterior a la CPSA y por lo tanto no la implementa completamente. Laespecificación de la CPSA puede ser encontrada en [8].

Actualmente todas las protecciones de los DVDs han sido rotas.

Protección de juegos

En principio, el sistema de protección de la PS2 para los juegos en CDROM y en DVD esigual al de la PSX y consiste en la generación incorrecta de los códigos ECC y EDC de ciertossectores del CD o del DVD.

La especificación de la estructura del CDROM/XA se encuentra en el libro amarillo[9], eneste documento se divide la estructura del cd en sectores de 2352 bytes cada uno. Al final decada sector se encuentran los bytes de los códigos ECC (Error Correction Codes) y EDC (ErrorDetection Codes) que emplean información redundante sobre el sector para poder detectar ycorregir los fallos de lectura. Tanto los códigos ECC y EDC son calculados por la grabadora a lahora de escribir los sectores.

La protección se basa en emplear unas grabadoras especiales que permitan modificar estoscódigos ECC y EDC, en el caso de la Playstation, los códigos de los 16 primeros sectores deldisco han sido manipulados. Estos sectores contienen ceros en la información correspondienteal EDC y al ECC. Las grabadoras normales al intentar copiar estos discos, corrigen los códigosEDC y ECC automáticamente. La Playstation al no encontrar los ceros en estos sectores, suponeque hemos introducido un CD de música y muestra el menú de audio o nos dice que el CD no esválido.

Por otro lado, las pistas de datos están almacenadas en el sistema de ficheros ISO9660[10].Cuando cualquier pista de datos esté seguida por una pista de audio, tiene que haber una sepa-ración a continuación de la de datos de al menos 150 sectores (2 segundos aprox.). Aplicado aldisco de Playstation tenemos que siempre van 150 sectores llenos de ceros (0s) detrás de la pistadel juego. El propósito de esta separación ’fisica’ es el de tener un buffer para ’ayudar’ a loslectores de CD que no siempre son capaces de pasar directamente de datos a audio o viceversasin una separación mínima.

Además, cuando una pista de audio sigue a una de datos tiene que empezar con otra separa-ción de al menos 150 sectores que sirve para lo mismo que el postgap: separar pistas de datosy audio. En la PlayStation, los pregaps que normalmente encontramos son de 150 sectores (2segundos) o 300 sectores (4 segundos). Cuando los pregaps separan dos pistas de audio puedenser de 0 o 150 sectores según el disco.

Por último, el leadout se escribe directamente por la grabadora (excepto en algunos modelos)

CAPÍTULO 3. PROTECCIÓN ANTICOPIA DE LA PS2 Y MODCHIPS 12

y su contenido no es modificable por el usuario. Tampoco es posible leer el leadout de un CDdesde un lector ’doméstico’ de CD-ROMs.

Bloqueo regional

Además de la protección contra copias ilegales, la consola utiliza un sistema de ’bloqueo re-gional’. Esto se hace porque Sony tiene acuerdos distintos en los mercados Asiáticos, Americanoy Europeo y entonces tienen que proteger los juegos para que no se puedan utilizar más que enel área geográfica para el que fueron distribuidos. El bloqueo regional funciona de la siguientemanera:

Los primeros cinco sectores (000000-000004) contienen la información del área para el quese edita un determinado juego. Básicamente identifican el CD como Japonés, Americano o Eu-ropeo. Si la información que envía el CD no cuadra con la que tiene almacenada la consola nosvuelve a avisar que el CD introducido no es válido.

3.2. La partición de datos

Como hemos visto en la sección anterior, la partición de datos se almacena en formatoISO9660[10]. La Playstation no soporta las extensiones Rock Ridge ni Joliet, esto supone unaserie de limitaciones. Las más importantes son que no hay distinción entre mayusculas y minis-culas en los nombres de ficheros y que la longitud de nombres de ficheros debe serguir el formatode DOS, esto es, 8 caracteres como máximo para el nombre y 3 para la extensión.

Los juegos constan de una serie de ficheros binarios ejecutables y ficheros de datos. Losficheros ejecutables compilados para el Emotion Engine están en formato ELF[11] que es elformato estándar en bastantes sistemas operativos, entre ellos Linux. El código de entrada/salidaque se ejecuta en el IOP suele estar en ficheros binarios separados con extensión IRX también enformato ELF pero compilados para MIPS-I.

Los juegos de la PS2 los podemos montar en nuestro sistema operativo y acceder al sistemade ficheros.

En el proceso de arranque, la PS2 lee la tabla de contenidos de CD y busca un fichero llamadoSYSTEM.CNF. Este fichero indica el nombre del ejecutable a cargar. El sistema operativo de laPlaystation parsea el fichero y ejecuta el binario que se indica.

Además de las protecciones físicas impuestas por Sony. Las productoras de videojuegos aña-den mecanismos de protección extra usando en los juegos librerías criptográficas, comprobandoel formato físico donde se ejecuta el juego, etc. Prácticamente todas estas protecciones se han roto

CAPÍTULO 3. PROTECCIÓN ANTICOPIA DE LA PS2 Y MODCHIPS 13

Algorithm 1 Manipulación del sistema de ficheros desde Linux# mount /mnt/cdrom# cd /mnt/cdrom# lschall.ngh eorps2io.irx mcman.irx padman.irx sles_512.57 dataioprp254.img mcserv.irx sdrdrv.irx story.ngh default.nghlibsd.irx mtapman.irx sio2man.irx system.cnf# file sles_512.57sles_512.57: ELF 32-bit LSB MIPS-III executable, MIPS,version 1 (SYSV), statically linked, not stripped# file mcserv.irxmcserv.irx: ELF 32-bit LSB MIPS-I processor-specific, MIPS,version 1 MathCoPro/FPU/MAU Required (SYSV), not stripped

Algorithm 2 SYSTEM.CNF del juego THE SIMSBOOT2=cdrom0:\SLES_512.57;1VER=1.02VMODE=PAL

y es fácil encontrar parches en Internet específicos para cada juego y que desabilita la protecciónde ese juego permitiendo su copia.

3.3. Método CogSwap para evitar la protección anticopia

Existen varios programas comerciales que permiten ejecutar juegos en la Playstation modi-ficando su comportamiento. Normalmente sirven para añadir vidas infinitas, inmunidad y otrascaracterísitcas especiales a los juegos. Los programas de este tipo más conocidos son el ActionReplay 2 (AR2) para PAL y el Gameshark 2 (GS2) pata NTSC, ambos de la misma compañía.

Podemos aprovechar la capacidad de cargar otros juegos de este programa para ejecutar co-pias de juegos sin que salte la protección.

El programa presenta un menú y una de las opciones es cargar un juego. Si introducimosun juego y pulsamos sobre esta opción, el juego cargará siempre que sea una copia originalya que cada vez que introducimos un juego, la PS2 realiza los tests de sectores erróneos, lacomprobación de región y carga la tabla de contenidos en memoria del CD/DVD introducido.

El método consiste en arrancar con el AR2 y abrir la bandeja del CD/DVD de la PS2 sin quea la PS2 le llegue la notificación, intercambiar los discos y pulsar sobre el menú de ejecutar. De

CAPÍTULO 3. PROTECCIÓN ANTICOPIA DE LA PS2 Y MODCHIPS 14

esta forma se ejecutará el juego sin llevar a cabo los chequeos anticopia.Hay varios métodos para abrir la bandeja sin que se le notifique a la PS2, los métodos van

desde forzar la bandeja con un cuchillo hasta hacer una palanca especial para este menester. Elmétodo está comentado en detalle en [12].

Este método tiene varios inconvenientes aparte de que podemos romper la bandeja. Estosinconvenientes vienen de que la tabla de contenidos del nuevo disco introducido no se lee, por lotanto la PS2 tiene los datos del disco anterior. Esto se traduce en que el fichero SYSTEM.CNFde la copia debe estar en la misma posición que tiene en el AR2. Esta posición en el LBA esla 12231. Por lo tanto debemos parchear la imagen ISO antes de pasarla a CD. Existen variosprogramas que se encargan de mover el SYSTEM.CNF a la posición correspondiente y rellenarel hueco que quede de ceros si es necesario. En [1] podemos encontrar varios programas querealizan esta función. A partir de la versión 1.3, el AR2 utiliza un método de carga del juegodiferente y ya no es necesario que el SYSTEM.CNF se encuentre en la posición 12231.

Otro de los inconvenientes es que la Playstation no leerá más del tamaño del AR2. Cadaversión del AR2 tiene un tamaño, por ejemplo, el límite de la versión 2 es de 74 min.

La única ventaja de este método con respecto a los chips, es que no se pierde la garantía dela PS2 puesto que no se abre.

3.4. Nosolder chips

Para evitar el engorro del CogSwap y los posibles daños que se le puedan hacer a la consola,existen algunos chips, que sin necesidad de soldar, se pueden instalar en la PS2 y que evitan quese produzca la notificación de inserción del CD a la consola. Estos tipos de chips gozan de lasmismas limitaciones que el CogSwap añadiendo que se pierde la garantía puesto que se tiene queabrir la PS2 para su instalación.

Se puede encontrar información sobre su instalación en [13], en este mismo sitio se puedeconsultar el precio y hacer un pedido via Internet.

Con este chip y el AR2 v1.3 o superior teoricamente es posible cargar cualquier copia dejuego sin necesidad de parchearlo (siempre que el juego no implemente una protección hardwareo software adicional).

CAPÍTULO 3. PROTECCIÓN ANTICOPIA DE LA PS2 Y MODCHIPS 15

3.5. Modchips

El sistema más cómodo, aunque también el más complicado de instalar, es el uso de Mod-chips. Los Modchips interceptan los datos de protección anticopia enviados por el disco y envíalos que la Playstation espera. De esta forma basta con introducir la copia y la Playstation auto-máticamente lo reconocerá como válido.

Este método no tiene ninguna limitación de los métodos de swap, el único inconveniente esque, dependiendo del tipo de chip, hay que realizar hasta 40 soldaduras en distintos puntos parapoder engañar a la BIOS.

El modchip más fiable hasta la fecha es el Messiah 2. El uso y la venta de estos chips esperfectamente legal en España, por lo que se pueden encontrar en diversas tiendas por unos 40E, incluso existen tiendas que venden la Playstation con el chip instalado, eso sí, sin garantía.

3.6. Backups de juegos bajo linux y creación de CDs para laPS2

Puesto que todo el entorno de desarrollo se instala fácilmente bajo el sistema operativo Li-nux (aunque se puede instalar bajo Windows usando Cygwin), a continuación se describen losdistintos métodos de crear un CD bajo este sistema operative para que pueda ser leido por la PS2.

Para realizar copias el método más rápido es usando el programa cdrdao[14], este programahace una copia identica de la estructura del CD. El programa viene además con dos scripts,read-psx y write-psx que nos permiten leer y escribir directamente CDs para PSX. El programatambién es capaz de escribir imágenes .cue/.bin generadas por el CDR-Win. Se puede usar elscript write-psx para escribir la imagen o bien usar el siguiente comando directamente:

# cdrdao write fichero.cue

Si disponemos de la imagen del sistema de ficheros (iso9660) podemos usar el cdrecord[15] paragrabar el CD, el comando sería:

# cdrecord -dev=0,0,0 -multi fichero.iso

o bien

# cdrecord -dev=0,0,0 -xa1 fichero.iso

CAPÍTULO 3. PROTECCIÓN ANTICOPIA DE LA PS2 Y MODCHIPS 16

Para generar el sistema de ficheros del CD con los ficheros de los programas que estemos de-sarrollando usaremos el mkisofs que viene incluido con las cdrtools junto con el cdrecord. Paragenerar la imagen con nuestro programa, metemos todos los ficheros que van a ir en el CD en undirectorio y usamos el siguiente comando:

# mkisofs -o fichero.iso directorio

Si queremos que el CD generado funcione con los métodos swap hay que parchearlo para queel SYSTEM.CNF esté en la posición adecuada. Normalmente los ficheros se almacenan en laimagen ISO ordenados alfabéticamente. En el caso de nuestros programas de prueba, al ser pe-queños, el SYSTEM.CNF se encontrará por debajo del sector 12231 de la imagen. Para ver laposición donde se encuentra el fichero en la iso usaremos el comando isoinfo que se encuentraen el mismo paquete que mkisofs.

Normalmente tendremos que generar un fichero vacio para empujar al SYSTEM.CNF a laposición conveniente. Como ejemplo vamos a ver el proceso de creación de una iso para la demostarsim. Una vez compilada la demo tenemos un fichero ejecutable, starsim.elf, este fichero es elque grabaremos en el CD junto con el SYSTEM.CNF que tendremos que generar para la ocasión.

# cd starsim

# ls

starsim.elf system.cnf

# cat system.cnf

BOOT2 = cdrom0:\STARSIM.ELF;1

VER = 1.10

VMODE = PAL

# cd ..

# mkisofs -o starsim.iso starsim

# isoinfo -l -i starsim.iso

Directory listing of /

d--------- 0 0 0 2048 May 6 2003 [ 23 02] .

d--------- 0 0 0 2048 May 6 2003 [ 23 02] ..

---------- 0 0 0 126615 May 6 2003 [ 24 00] STARSIM.ELF;1

---------- 0 0 0 56 May 6 2003 [ 86 00] SYSTEM.CNF;1

Como podemos observar, el SYSTEM.CNF está en la posición 86. Cada sector de la imagen isoes de 2048 bytes. Por lo tanto habrá que mover el SYSTEM.CNF 12231 - 86 = 12145 sectores.Creamos pues el fichero, que llamaremos 0.0 para que se ponga el primero y regeneramos la iso.

CAPÍTULO 3. PROTECCIÓN ANTICOPIA DE LA PS2 Y MODCHIPS 17

# dd if=/dev/zero of=starsim/0.0 bs=2048 count=12145

# mkisofs -o starsim.iso starsim

# isoinfo -l -i starsim.iso

d--------- 0 0 0 2048 May 8 2003 [ 23 02] .

d--------- 0 0 0 2048 May 8 2003 [ 23 02] ..

---------- 0 0 0 24872960 May 8 2003 [ 24 00] 0.0;1

---------- 0 0 0 126615 May 6 2003 [ 12169 00] STARSIM.ELF;1

---------- 0 0 0 56 May 6 2003 [ 12231 00] SYSTEM.CNF;1

La imagen iso parcheada es la que grabaremos en el CD con el cdrecord.Existe un programa, con código fuente, llamado arpatch que a partir de la imagen iso calcula

automaticamente el tamaño del fichero 0.0 y lo genera. El programa también es capaz de par-chear el fichero SYSTEM.CNF. Estudiando los fuentes del programa podemos comprobar que elparcheo que realiza sobre el SYSTEM.CNF es que si es menos de 56 bytes, añade al final caracte-res 0x0A hasta que llega a ese tamaño. El programa lo podemos encontrar en [2, 1]. La finalidadde esta modificación al SYSTEM.CNF no la entiendo.

Teoricamente estos pasos deberían crear una imagen válida para los métodos swap. En larealidad, con las nuevas versiones del mkisofs no funciona. Comparando imágenes iso que fun-cionan, con las generadas por este método, he visto que el mkisofs genera una sección para elarranque en desde CD, aunque esta sección no se utiliza. El problema es que esta sección ocupaun sector y por lo tanto el directorio raiz empieza en el sector 23. Como el Action Replay notiene este sector de arranque el directorio raiz comienza en el sector 22. Ya que la PS2 no se haenterado del cambio de disco y como guarda en caché la posición donde encuentra el directorioraiz, la imagen no funciona, habría que desplazar un sector todo el sistema de ficheros macha-cando el sector de arranque y reescribiendo la posición del directorio raiz en la descripción delvolumen principal que es lo que realmente está en caché y contiene todas las limitaciones delmétodo swap.

El programa ps2mkisofs[1], genera la imagen iso con el directorio raiz en la posición correc-ta, por lo tanto las isos generadas por este programa funcionan perfectamente en la PS2.

A partir de la versión 1.3 del AR2, el sistema de carga ha cambiado y no es necesario que elSYSTEM.CNF se en cuentre en el sector 12231, por lo que funcionarán imágenes sin parchearsiempre que el directorio raiz empieze en el sector 22 de la iso.

Capítulo 4

Métodos de programación de la PS2

4.1. Kit de desarrollo de Sony

Sony vende el Sony Computer Entertainment Development Kit DTL-T10000 para desarro-llar programas y juegos para la PS2. El coste por unidad es de unos 20.000 $, lo que lo haceinaccesible para usuarios normales, incluso para empresas pequeñas ya que normalemente sobreun kit pueden trabajar 1 o 2 personas por lo que para un equipo de desarrollo habrá que comprarvarios kits con el consiguiente desembolso.

El KIT contiene dos PS2 de desarrollo:

La PS2 TEST, es igual que una PS2 normal pero puede leer cdr sin necesidad de modchips.

La PS2 TOOL, es bastante más grande que una PS2 normal debido al aumento de loscomponentes con respecto a esta, entre las diferencias, destacan:

• 128 MB de memoria principal

• Disco duro

• Tarjeta de red

Sony proporciona a los desarrolladores esta máquina de tal forma que compilan su código y seejecuta sobre el hardware de esta PS2. Sony sólo proporciona el hardware y las librerias,así comoasesoría y ejemplos.

Existen una serie de entornos de desarrollo comerciales. Entre ellos los dos mas conocidos:

ProDG de Snsys. Tienen diferentes módulos, incluido uno muy interesante llamado pro-view que permite mediante el uso del interfaz firewire conectar una PS2 modelo DTL-H

18

CAPÍTULO 4. MÉTODOS DE PROGRAMACIÓN DE LA PS2 19

Figura 4.1: Kit de desarrollo

Test Unit a un pc. Este modelo de PS2 tiene la peculiaridad de que es capaz de leer yejecutar cdr ( sin chip ni nada parecido dado que es una unidad de testeo para desarrolla-dores). Snsys te proporciona con el proview los archivos de una iso que corre en esta PS2a modo de programa monitor permitiendo la comunicación con el software que corre en elPC. ¿Y para que demonios sirve esto? Pues muy fácil, para subir el código que tu compilasdirectamente y ejecutarlo sin necesidad de grabar un cd por cada prueba. También tieneheramientas de debug que redirigen la salida al lado del pc para facilitar el desarrollo.

CodeWarrior de Metrowerks. Al igual que Snsys nos proporciona un entorno de desarrollocompleto con multitud de herramientas.

Para tener acceso a estas herramientas es necesario ser desarrollador oficial de Sony y estarregistrado como tal.

4.2. Kit de linux

El kit de Linux para PS2[7] permite ejecutar una distribución Linux en la PS2. Esto conviertea la consola en un ordenador de sobremesa plenamente funcional. El kit de Linux contiene:

CAPÍTULO 4. MÉTODOS DE PROGRAMACIÓN DE LA PS2 20

un disco duro interno de 40 GB

un teclado usb

un ratón usb

una tarjeta de red 10/100 Base-T

dos discos DVD

El primero contiene el entorno de ejecución (RTE) y los manuales de la PS2 que Sonysuele incluir en el kit de desarrollo.

El segundo disco contiene todo el software de la distribución que se puede instalar en eldisco duro.

El kernel de Linux contiene drivers que ocultan el hardware e impiden el acceso directo a la IOP.Sony proporciona solo los binarios de estos drivers por lo que existen limitaciones a la hora deprogramar la PS2 con este kit. Por ejemplo estos drivers no proporcionan interfaz con el puertoFirewire, por lo que es imposible de programar este puerto.

El Kit viene con el compilador de GNU gcc, las xfree y muchas otras utilidades. Por lo quetenemos un completo entorno de desarrollo. Aunque los programas o juegos que se desarrollensobre el kit de Linux solo podrán ejecutarse en una PS2 que tenga el kit.

4.3. Programación RAW

La programación RAW consiste en escribir programas para la PS2 sin utilizar ni el kit dedesarrollo de Sony, ni el kit de Linux. El desarrollo se realiza en un PC mediante el uso decompiladores cruzados. Necesitamos trabajar con los siguientes procesadores:

El procesador principal es un MIPS R5900[16], este procesador implementa todas las ins-trucciones del MIPS III ISA, algunas del MIPS IV y un conjunto propietario de instruccio-nes multimedia. Información sobre el conjunto de instrucciones y su uso se encuentran en[17, 18]

Unidades vectoriales (VU0, VU1)

IOP, es un MIPS R3000

CAPÍTULO 4. MÉTODOS DE PROGRAMACIÓN DE LA PS2 21

Existen herramientas libres de desarrollo libres capaces de generar código para todos los proce-sadores de la PS2. Estas herramientas son:

binutils Es una colección de herramientas multiplataforma para trabajar con ficheros ejecuta-bles, entre las que destacan:

ld, el linkador de GNU

as, el ensamblador de GNU

gcc Es la colección de compiladores de GNU. Estos compiladores son capaces de generar códigopara una gran cantidad de plataformas. Nos interesa especialmente el compilador de C.

ps2lib Es una librería open-source para desarrollar directamente con la PS2. Esta librería hasido desarrollada a base de ingeniería inversa. La librería proporciona un gran número defunciones básicas para acceder al hardware de la PS2. Como la PS2 tiene dos CPUs (EE eIOP), la librería está formada por dos partes, cada una con funciones para una CPU.

Newlib Es la librería que implementa las funciones de estándar de C (libc) y las funciones ma-temáticas (libm). Es una librería de Cygnus usada en muchos sistemas empotrados debidoa su pequeño tamaño que ha sido adaptada para la PS2.

Cuando comenzó la programación RAW de la PS2, para probar los programas que se estabandesarrollando había que grabarlos en un CD y ejecutarlos con alguno de los métodos vistosanteriormente. Esto hacía muy engorroso (y caro) el desarrollo. Con el tiempo han ido surgiendoprogramas que mediante la conexión de la PS2 al PC permiten enviar los programas compiladosdel PC a la PS2 para que esta la ejecute. De esta forma el proceso de desarrollo se ha dinamizadobastante.

Existen tres programas de este tipo, uno para cada forma de conectar la PS2 con el PC[19]:

Pukklink/InLink, que usa la tarjeta de red que se encuentra en el kit de Linux para trans-mitir los ejecutables.

Naplink, usa un cable USB <->USB

El método más común, por ser el más barato, es hacerlo con el Naplink. El único problema coneste método es que hay que usar un cable USB que tenga el chip PL-2301 o PL-2302.

Una vez que tengamos el cable, conectamos el PC a la PS2. En la PS2 ejecutamos el Naplinkservidor, que tenemos que tener previamente grabado en un CD, y en el PC ejecutamos el Naplinkcliente. Desde el cliente podremos indicarle a la PS2 el ejecutable a cargar. Existen versiones delcliente para Windows y para Linux.

Capítulo 5

Instalación del entorno de programaciónRAW

En este capítulo vamos a ver como instalar el entorno de desarrollo para empezar a programarla PS2. El entorno de desarrollo se compone de los compiladores cruzados de C y ensambladorpara el EE y el IOP. También compilaremos las binutils para que se puedan programar las uni-dades vectoriales en ensamblador. Por último hay que instalar las librerías que nos facilitarán latarea de acceso al hardware.

El método de instalación descrito es para máquinas Unix, aunque también se puede instalaren Windows usando el entorno Cygwin que simula un entorno Unix en Windows.

5.1. Preparando el entorno

Lo primero es elegir el directorio donde se va a instalar el entorno de programación y crearla estructura de directorios que albergará nuestras utilidades y compiladores para la PS2. En estecaso se van a instalar todos los componentes en el directorio /opt/ps2dev. Creamos la estructurade directorios con:

# cd /opt

# mkdir ps2dev

# cd ps2dev

# mkdir ee iop newlib ps2lib

Los funcionalidad de los directorios creados es evidente.

22

CAPÍTULO 5. INSTALACIÓN DEL ENTORNO DE PROGRAMACIÓN RAW 23

A continuación crearemos el script ps2dev.sh que irá en /opt/ps2dev y que servirá para ponerlas variables de entorno necesarias para compilar. Habrá que ejecutar este script antes de empezara programar. No es mala idea incluir las variables de entorno en el .bashrc para que estén siemprecargadas. El contenido del script es el siguiente:

PS2DEV=/opt/ps2dev

EE=$PS2DEV/ee

IOP=$PS2DEV/iop

PS2LIB=$PS2DEV/ps2lib

NEWLIB=$PS2DEV/newlib

PATH=$PATH:$PS2DEV/bin:$EE/bin:$IOP/bin

export PS2DEV EE IOP PS2LIB NEWLIB PATH

Veamos a continuación el proceso de instalación de los compiladores necesarios.

5.2. Emotion Engine

La versión de GNU de binutils y gcc no soportan el juego completo de instrucciones del EE

por lo tanto tenemos que descargarnos las versiones adaptadas a esta CPU. Podemos encontrarlas binutils y el gcc para EE en [20].

Una vez descargado el fichero, estos son los pasos a seguir para compilar e instalar el compi-lador y el ensamblador del EE:

# source /opt/ps2dev/ps2dev.sh

# tar xzvf gnu-ee-binutils-gcc-1.1.tar.gz

# cd gnu-ee-binutils-gcc

# ./configure --prefix=$EE --target=mips64r5900-sf-elf

# make LANGUAGES="c"

# make install

Esta versión tiene algunos problemas para compilar con los últimos compiladores, estos son loscambios que he tenido que hacer para que compile en mi ordenador:

El paquete gperf debe estar instalado

En el fichero gcc/c-lex.c hay que eliminar la línea:

CAPÍTULO 5. INSTALACIÓN DEL ENTORNO DE PROGRAMACIÓN RAW 24

#include "rtl.h"

En el fichero gcc/cppobscure.c, cambiar la línea:

#include <sys/utime.h>

por:

#include <utime.h>

En el fichero cpp/cpplib.c, cambiar la linea:

extern int devstudioflag;

por:

int devstudioflag;

En el fichero gcc/Makefile, cambiar la linea:

stmp-fixproto: fixhdr.ready fixproto stmp-headers

por:

stmp-fixproto: fixhdr.ready stmp-headers

En el fichero gcc/cp/pt.c, borrar la linea:

#include "parse.h"

Creamos enlaces simbolicos a los programas recien compilados para que los nombres sean másmanejables:

# cd /opt/ps2dev/ee/bin

# ln -s mips64r5900-sf-elf-addr2line ee-addr2line

# ln -s mips64r5900-sf-elf-ar ee-ar

# ln -s mips64r5900-sf-elf-as ee-as

# ln -s mips64r5900-sf-elf-c++filt ee-c++filt

# ln -s mips64r5900-sf-elf-gasp ee-gasp

CAPÍTULO 5. INSTALACIÓN DEL ENTORNO DE PROGRAMACIÓN RAW 25

# ln -s mips64r5900-sf-elf-gcc ee-gcc

# ln -s mips64r5900-sf-elf-ld ee-ld

# ln -s mips64r5900-sf-elf-nm ee-nm

# ln -s mips64r5900-sf-elf-objcopy ee-objcopy

# ln -s mips64r5900-sf-elf-objdump ee-objdump

# ln -s mips64r5900-sf-elf-protoize ee-protoize

# ln -s mips64r5900-sf-elf-ranlib ee-ranlib

# ln -s mips64r5900-sf-elf-readelf ee-readelf

# ln -s mips64r5900-sf-elf-size ee-size

# ln -s mips64r5900-sf-elf-strings ee-strings

# ln -s mips64r5900-sf-elf-strip ee-strip

# ln -s mips64r5900-sf-elf-unprotoize ee-unprotoize

Ya tenemos el compilador de ensamblador, ee-as, y de C, ee-gcc, listos para funcionar.

5.3. Unidades Vectoriales

Las unidades vectoriales pueden ser programadas en modo interactivo o mandándole un pro-grama y diciendo que lo ejecute. Para la segunda forma, necesitaremos un compilador que generecódigo para estas unidades vectoriales.

Primero, en el fichero gnu-ee-binutils-gcc/config.sub, buscamos la linea que contiene:

tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k ...

y entre “tahoe” y “i860” introducimos “dvp”:

tahoe | dvp | i860 | ia64 | m32r | m68k | m68000 ...

Y ejecutamos lo siguiente para generar el compilador de ensamblador:

# cd libiberty

# sh ./configure --target=dvp-elf --prefix=$EE

# make all

# make install

# cd ../bfd

CAPÍTULO 5. INSTALACIÓN DEL ENTORNO DE PROGRAMACIÓN RAW 26

# sh ./configure --target=dvp-elf --prefix=$EE

# make all

# make install

# cd ../opcodes

# sh ./configure --target=dvp-elf --prefix=$EE

# make all

# make install

# cd ../binutils

# sh ./configure --target=dvp-elf --prefix=$EE

# make all

# make install

# cd ../ld

# sh ./configure --target=dvp-elf --prefix=$EE

# make all

# make install

# cd ../gas

# sh ./configure --target=dvp-elf --prefix=$EE

# make all

# make install

Ya solo queda generar los enlaces correspondientes con nombres más manejables:

# cd $EE/bin

# ln -s dvp-elf-addr2line dvp-addr2line

# ln -s dvp-elf-ar dvp-ar

# ln -s dvp-elf-as dvp-as

# ln -s dvp-elf-c++filt dvp-c++filt

# ln -s dvp-elf-gasp dvp-gasp

# ln -s dvp-elf-ld dvp-ld

# ln -s dvp-elf-nm dvp-nm

# ln -s dvp-elf-objcopy dvp-objcopy

# ln -s dvp-elf-objdump dvp-objdump

# ln -s dvp-elf-ranlib dvp-ranlib

# ln -s dvp-elf-readelf dvp-readelf

# ln -s dvp-elf-size dvp-size

# ln -s dvp-elf-strip dvp-strip

CAPÍTULO 5. INSTALACIÓN DEL ENTORNO DE PROGRAMACIÓN RAW 27

5.4. IOP

El procesador de la IOP está soportado por las utilidades estándar de las GNU, por lo queusaremos el gcc[23] y las binutils bajadas del sitio de GNU[22].

Compilación de las binutils

# tar xzvf binutils-2.11.2.tar.gz

# ./configure --prefix=$IOP --target=mipsel-sf-elfl

# make

# su

# make install

Compilación del gcc

# cd ..

# tar xzvf gcc-2.95.2.tar.gz

# cd gcc-2.95.2

# ./configure --prefix=$IOP --target=mipsel-sf-elfl

--with-gnu-ld --with-gnu-as --disable-shared

--enable-languages="c" --with-newlib

# make all-gcc

# su

# make install

Creamos los enlaces simbólicos:

# cd $IOP

# ln -s mipsel-sf-elfl-addr2line iop-addr2line

# ln -s mipsel-sf-elfl-ar iop-ar

# ln -s mipsel-sf-elfl-as iop-as

# ln -s mipsel-sf-elfl-gasp iop-gasp

# ln -s mipsel-sf-elfl-gcc iop-gcc

# ln -s mipsel-sf-elfl-ld iop-ld

# ln -s mipsel-sf-elfl-nm iop-nm

# ln -s mipsel-sf-elfl-objcopy iop-objcopy

CAPÍTULO 5. INSTALACIÓN DEL ENTORNO DE PROGRAMACIÓN RAW 28

# ln -s mipsel-sf-elfl-objdump iop-objdump

# ln -s mipsel-sf-elfl-ranlib iop-ranlib

# ln -s mipsel-sf-elfl-readelf iop-readelf

# ln -s mipsel-sf-elfl-size iop-size

# ln -s mipsel-sf-elfl-strings iop-strings

# ln -s mipsel-sf-elfl-strip iop-strip

5.5. Newlib y ps2lib

La forma más fácil de instalar estas librerías es bajándolas ya precompiladas. Los ficherosps2lib-1.9.tar.gz y ee-newlib-binary-1.81.tar.gz que se pueden encontrar en [24] contienen estaslibrerías.

Para instalarlas simplemente tenemos que descompirmirlas en el directorio /opt/ps2dev. Losdirectorios include y lib, habrá que indicárselos explícitamente al compilador con las opciones -I

y -L para que encuentre las librerías cuando estemos compilando nuestros programas.

5.6. Compilando una demo

Para probar nuestro entorno, nos bajaremos la demo de funslower de [25] e intentaremoscompilarla.

La demo contiene un fichero llamado crt0.s. Este fichero lo necesita el ee-ld para poderfuncionar. Muchas demos y librerias lo traen. Vamos a compilarlo y lo ponemos en un sitiodonde siempre lo encuentre el cargador:

# ee-as -mcpu=5900 -EL crt0.s -o crt0.o

# cp crt0.o $EE/mips64r5900-sf-elf/lib

También es necesario para compilar, un script para el ld que le indique la posición de inicio delcódigo ejecutable, el alineamiento de las secciones y algunos parámetros más, ya que los valorespor defecto del ld no son los correctos. Este fichero se llama linkfile y también viene con la demo.El fichero se añada con -Tlinkfile al comando de linkado.

Tendremos que editar el Makefile para indicarle los nombres de nuestras utilidades. Habráque cambiar:

CPATH = ../ee-bin/bin/mips64r5900-sce-elf-

CAPÍTULO 5. INSTALACIÓN DEL ENTORNO DE PROGRAMACIÓN RAW 29

CC = $(CPATH)gcc.exe

VAS = $(CPATH)dvp-as.exe

AS = $(CPATH)as.exe

LD = $(CPATH)ld.exe

OBJCOPY = $(CPATH)objcopy.exe

por:

CPATH = $(EE)/bin

CC = $(CPATH)/ee-gcc

VAS = $(CPATH)/dvp-as

AS = $(CPATH)/ee-as

LD = $(CPATH)/ee-ld

OBJCOPY = $(CPATH)/ee-objcopy

Tambien hay que compilar con el compilador normal de nuestra máquina el fichero rawasm.c

que se usará para convertir una imagen de la demo a asm:

# gcc -o rawasm rawasm.c

Seguidamente podemos probar a compilar el programa:

# make

Si todo ha ido bien, se habra generado el ejecutable main.elf. Podremos probar la demo con elNaplink, si poseemos el cable apropiado o grabando el ejecutable junto con un system.cnf quetendremos que generar en un CD y probándolo directamente.

Bibliografía

[1] PS2DEV network. http://ps2dev.livemedia.com.au

[2] PS2DEV. http://ps2dev.sourceforge.net

[3] PS2 Reality. http://www.ps2reality.net

[4] El Otro Lado. http://www.elotrolado.net

[5] Specs for Freeware Developers. http://www.ccs.neu.edu/home/bchafy/cdb/info/info.html

[6] Protection technologys. http://www.goldenpi.no-ip.org/drm/protection.shtml

[7] Playstation 2 Linux Comunity. http://playstation2-linux.com

[8] Especificación CPSA. http://www.goldenpi.no-ip.org/drm/pdf/cpsa081.pdf.

[9] Libro amarillo de la especificación CDROM. http://www.ecma.ch/ecma1/stand/ecma-

130.htm

[10] Especificación del sistema de ficheros ISO9660.http://www.ecma-international.org/publications/files/ecma-st/Ecma-119.pdf

[11] Executable and Linkable Format (ELF) Specification (Programmer Guide).ftp://ftp.opennet.ru/pub/docs/program/elf.ps.gz

[12] Método CogSwap detallado.http://www.elotrolado.net/showthread.php?s=c951dd40188a330e6d21ead49a60bed2&threadid=92424

[13] Chips No solder. http://www.chipspain.com/guias/v5-v6.htm

[14] Homepage de cdrdao. http://cdrdao.sourceforge.net/

30

BIBLIOGRAFÍA 31

[15] Homepage de cdrecord y cdrtools.http://www.fokus.fhg.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html

[16] Procesadores MIPS. www.mips.com

[17] MIPS ISA. http://www.mips.com/publications/index.html

[18] Conjunto de instrucciones y programación del MIPS III.http://decstation.unixag.org/docs/ic_docs/3715.pdf

[19] Distintos métodos de carga. http://ps2dev.livemedia.com.au/kb/kb.asp?T=863

[20] Compilador y binutils para EE. http://ps2dev.sourceforge.net/downloads/ee/gnu-ee-

binutils-gcc-1.1.tar.gz

[21] Parches para el compilador EE y binutils del kit de linux. http://www.cip.informatik.uni-

muenchen.de/~bolzer/ps2linux/src/

[22] Download de binutils 2.11. ftp://ftp.gnu.org/gnu/binutils/binutils-2.11.2.tar.gz

[23] Download del gcc 2.95.2. ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.2.tar.gz

[24] Newlib y ps2lib. http://ps2dev.sourceforge.net/ps2lib.html

[25] Demo de Funslower. http://ps2dev.livemedia.com.au/kb//files/FSsource.zip