You are on page 1of 32

PlayStation 2

Arquitectura y Programación

Rafael García Moreno <bladecoder@gmx.net>

9 de mayo de 2003
Índice general

1. Introducción 2

2. Arquitectura de la PS2 5
2.1. Emotion Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2. IO Processor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3. Sintetizador Gráfico (GS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3. Protección anticopia de la PS2 y modchips 10


3.1. Protección anticopia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2. La partición de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3. Método CogSwap para evitar la protección anticopia . . . . . . . . . . . . . . . 13
3.4. Nosolder chips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.5. Modchips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.6. Backups de juegos bajo linux y creación de CDs para la PS2 . . . . . . . . . . . 15

4. Métodos de programación de la PS2 18


4.1. Kit de desarrollo de Sony . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2. Kit de linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.3. Programación RAW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

5. Instalación del entorno de programación RAW 22


5.1. Preparando el entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.2. Emotion Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.3. Unidades Vectoriales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.4. IOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.5. Newlib y ps2lib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.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 eso
que todo el harware está orientado a que se puedean realizar juegos que lleven al usuario a una
inmersió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 juegos
se distribuian en soporte CDROM. Los juegos de la PS2 se distribuyen en DVD aunque también
es capaz de reproducir los juegos de la PSX en CDROM. Gracias a la gran capacidad de los
DVDs (4.7 GB), los juegos de la PS2 están repletos de videos, música y sonido en 3D. Además
de juegos, la PS2 puede reproducir CDs de audio y películas en DVD por tanto es una completa
plataforma 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 es
el 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 como
teclados, 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ón
y 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ño


de presentación de la PS2 y las consolas más recientes. Los datos proporcionados por Sony y
Microsoft no son realistas, son los datos máximos, mientras que los de Nintendo y Sega están
medidos en un juego real:

Consola Polígonos/seg Frecuencia Memoria Principal


Playstation 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 rendimiento


superior 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 el


tráfico de los mandos de control del juego. El IOP envía la entrada de los mandos de control
al 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ísica
del 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 el
EE 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. Es


capaz 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 desarrollada
por 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 a
0.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 personales
corrientes. La CPU incorpora dos unidades de enteros (IU) de 64-bits, una unidad SIMD de
128 bits con 107 instrucciones para el procesamiento multimedia, dos unidades independientes
de calculo de vectores en punto flotante (VU0, VU1), un circuito decodificador de MPEG-2 y
controladores 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


1
Unidad 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 masivos
de datos multimedia. Los 32 MB de RAM de memoria principal que soportan la velocidad de la
CPU 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 PCs
cuando salió al mercado la PS2.
Con la incorporación del decodificador MPEG-2 en un chip, es posible procesar en paralelo
datos 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 esta
CPU 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álculo
de gráficos en 3D, el rendimiento llega a 66 millones de polígonos por segundo. Este rendimiento
es 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 dentro
de la PS2 se ha conseguido la compatibilidad al 100 % con la PSX. Además, se le ha añadido al
procesador soporte para IEEE 1394, también conocido como Firewire y para USB ya que estos
son los nuevos estándares de interocnectividad.
El nuevo IOP también incorpora las siguientes novedades sobre la CPU de la PSX: memoria
cache mejorada, una nueva arquitectura DMA de alto rendimiento que permite un incremento
de hasta 4 veces en la transferencia de datos. La interface serie también ha sido actualizada y es
unas 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 de
transferencia desde 100 Mbps hasta 400 Mbps.
El uso de estas interfaces permiten la futura conectividad de la PS2 a un gran variedad de
otros 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 que
contiene un bus de datos de 2560 bits de ancho el cual es unas 20 veces el tamaño de las tarjetas
aceleradoras de los PCs. Tasas de relleno de pixeles muy altas y rendimiento en el dibujado es
alcanzado a través de DRAM embebida.
La PS2 introduce el concento de Sintetizador Gráfico a través del cálculo en tiempo real y
dibujado de objetos 3D. La función de rendering ha sido especialmente optimizada para generar
imágenes que soportan televisiones NTSC/PAL, televisión digital de alta resolución (HDTV) y
el estándar VESA. La calidad de la imagen resultante en pantalla es comparable a la calidad de
las 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 banda
de la memoria entre el motor de pixels y la memoria de video. Los sistemas convencionales usan
memoria externa VRAM alcanzada a traves de un bus externo al chip que limita el rendimiento
total del sistema. Sin embargo, en el caso del nuevo GS, hay un ancho de banda de 48 Gigabytes
que se ha alcanzado gracias a la integración de la memoria y el motor de render en el mismo
chip.
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 esta
capacidad, es posible generar imágenes con calidad de cine. Se pueden llegar a 20 millones de
poligonos 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 al
bus 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 los
creadores 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 la
descripció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 stream
de 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 estudios
cinematográficos.
La protección del DVD-video se ve reforzada por un contrato que debe ser firmado por todos
los 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. La


especificació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 es
igual al de la PSX y consiste en la generación incorrecta de los códigos ECC y EDC de ciertos
sectores del CD o del DVD.
La especificación de la estructura del CDROM/XA se encuentra en el libro amarillo[9], en
este documento se divide la estructura del cd en sectores de 2352 bytes cada uno. Al final de
cada sector se encuentran los bytes de los códigos ECC (Error Correction Codes) y EDC (Error
Detection Codes) que emplean información redundante sobre el sector para poder detectar y
corregir los fallos de lectura. Tanto los códigos ECC y EDC son calculados por la grabadora a la
hora de escribir los sectores.
La protección se basa en emplear unas grabadoras especiales que permitan modificar estos
códigos ECC y EDC, en el caso de la Playstation, los códigos de los 16 primeros sectores del
disco han sido manipulados. Estos sectores contienen ceros en la información correspondiente
al EDC y al ECC. Las grabadoras normales al intentar copiar estos discos, corrigen los códigos
EDC y ECC automáticamente. La Playstation al no encontrar los ceros en estos sectores, supone
que hemos introducido un CD de música y muestra el menú de audio o nos dice que el CD no es
vá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 al
disco de Playstation tenemos que siempre van 150 sectores llenos de ceros (0s) detrás de la pista
del juego. El propósito de esta separación ’fisica’ es el de tener un buffer para ’ayudar’ a los
lectores de CD que no siempre son capaces de pasar directamente de datos a audio o viceversa
sin 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 datos
y audio. En la PlayStation, los pregaps que normalmente encontramos son de 150 sectores (2
segundos) o 300 sectores (4 segundos). Cuando los pregaps separan dos pistas de audio pueden
ser 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 CD


desde 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, Americano
y Europeo y entonces tienen que proteger los juegos para que no se puedan utilizar más que en
el área geográfica para el que fueron distribuidos. El bloqueo regional funciona de la siguiente
manera:
Los primeros cinco sectores (000000-000004) contienen la información del área para el que
se 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 nos
vuelve 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 formato
ISO9660[10]. La Playstation no soporta las extensiones Rock Ridge ni Joliet, esto supone una
serie 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 formato
de 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. Los
ficheros ejecutables compilados para el Emotion Engine están en formato ELF[11] que es el
formato estándar en bastantes sistemas operativos, entre ellos Linux. El código de entrada/salida
que se ejecuta en el IOP suele estar en ficheros binarios separados con extensión IRX también en
formato ELF pero compilados para MIPS-I.
Los juegos de la PS2 los podemos montar en nuestro sistema operativo y acceder al sistema
de ficheros.
En el proceso de arranque, la PS2 lee la tabla de contenidos de CD y busca un fichero llamado
SYSTEM.CNF. Este fichero indica el nombre del ejecutable a cargar. El sistema operativo de la
Playstation 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, comprobando
el 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
# ls
chall.ngh eorps2io.irx mcman.irx padman.irx sles_512.57 data
ioprp254.img mcserv.irx sdrdrv.irx story.ngh default.ngh
libsd.irx mtapman.irx sio2man.irx system.cnf
# file sles_512.57
sles_512.57: ELF 32-bit LSB MIPS-III executable, MIPS,
version 1 (SYSV), statically linked, not stripped
# file mcserv.irx
mcserv.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 SIMS


BOOT2=cdrom0:\SLES_512.57;1
VER=1.02
VMODE=PAL

y es fácil encontrar parches en Internet específicos para cada juego y que desabilita la protección
de 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 otras
caracterísitcas especiales a los juegos. Los programas de este tipo más conocidos son el Action
Replay 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 introducimos
un juego y pulsamos sobre esta opción, el juego cargará siempre que sea una copia original
ya que cada vez que introducimos un juego, la PS2 realiza los tests de sectores erróneos, la
comprobació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 que
a 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. El
método está comentado en detalle en [12].
Este método tiene varios inconvenientes aparte de que podemos romper la bandeja. Estos
inconvenientes vienen de que la tabla de contenidos del nuevo disco introducido no se lee, por lo
tanto la PS2 tiene los datos del disco anterior. Esto se traduce en que el fichero SYSTEM.CNF
de la copia debe estar en la misma posición que tiene en el AR2. Esta posición en el LBA es
la 12231. Por lo tanto debemos parchear la imagen ISO antes de pasarla a CD. Existen varios
programas que se encargan de mover el SYSTEM.CNF a la posición correspondiente y rellenar
el hueco que quede de ceros si es necesario. En [1] podemos encontrar varios programas que
realizan esta función. A partir de la versión 1.3, el AR2 utiliza un método de carga del juego
diferente 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. Cada
versió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 de
la 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 que
se produzca la notificación de inserción del CD a la consola. Estos tipos de chips gozan de las
mismas limitaciones que el CogSwap añadiendo que se pierde la garantía puesto que se tiene que
abrir la PS2 para su instalación.
Se puede encontrar información sobre su instalación en [13], en este mismo sitio se puede
consultar el precio y hacer un pedido via Internet.
Con este chip y el AR2 v1.3 o superior teoricamente es posible cargar cualquier copia de
juego sin necesidad de parchearlo (siempre que el juego no implemente una protección hardware
o 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ía
los 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 es
que, dependiendo del tipo de chip, hay que realizar hasta 40 soldaduras en distintos puntos para
poder 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 es
perfectamente legal en España, por lo que se pueden encontrar en diversas tiendas por unos 40
E, 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 la


PS2
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 los
distintos 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 programa
hace 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 programa
también es capaz de escribir imágenes .cue/.bin generadas por el CDR-Win. Se puede usar el
script 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] para
grabar 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. Para
generar la imagen con nuestro programa, metemos todos los ficheros que van a ir en el CD en un
directorio 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 que
el SYSTEM.CNF esté en la posición adecuada. Normalmente los ficheros se almacenan en la
imagen 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 la
posición donde se encuentra el fichero en la iso usaremos el comando isoinfo que se encuentra
en el mismo paquete que mkisofs.
Normalmente tendremos que generar un fichero vacio para empujar al SYSTEM.CNF a la
posición conveniente. Como ejemplo vamos a ver el proceso de creación de una iso para la demo
starsim. Una vez compilada la demo tenemos un fichero ejecutable, starsim.elf, este fichero es el
que 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 iso
es 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 el
parcheo 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 finalidad
de 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 la
realidad, 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 el
arranque en desde CD, aunque esta sección no se utiliza. El problema es que esta sección ocupa
un sector y por lo tanto el directorio raiz empieza en el sector 23. Como el Action Replay no
tiene este sector de arranque el directorio raiz comienza en el sector 22. Ya que la PS2 no se ha
enterado del cambio de disco y como guarda en caché la posición donde encuentra el directorio
raiz, 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 del
volumen principal que es lo que realmente está en caché y contiene todas las limitaciones del
mé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 el
SYSTEM.CNF se en cuentre en el sector 12231, por lo que funcionarán imágenes sin parchear
siempre 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 hace
inaccesible para usuarios normales, incluso para empresas pequeñas ya que normalemente sobre
un kit pueden trabajar 1 o 2 personas por lo que para un equipo de desarrollo habrá que comprar
varios 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 los
componentes 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 se
ejecuta sobre el hardware de esta PS2. Sony sólo proporciona el hardware y las librerias,así como
asesorí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 y
ejecutar 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 PS2
a modo de programa monitor permitiendo la comunicación con el software que corre en el
PC. ¿Y para que demonios sirve esto? Pues muy fácil, para subir el código que tu compilas
directamente y ejecutarlo sin necesidad de grabar un cd por cada prueba. También tiene
heramientas 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 desarrollo


completo con multitud de herramientas.

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

4.2. Kit de linux


El kit de Linux para PS2[7] permite ejecutar una distribución Linux en la PS2. Esto convierte
a 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 Sony
suele incluir en el kit de desarrollo.

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


disco 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 de
programar la PS2 con este kit. Por ejemplo estos drivers no proporcionan interfaz con el puerto
Firewire, 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 que
tenemos un completo entorno de desarrollo. Aunque los programas o juegos que se desarrollen
sobre 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 de
desarrollo de Sony, ni el kit de Linux. El desarrollo se realiza en un PC mediante el uso de
compiladores 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ódigo
para 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 ha
sido desarrollada a base de ingeniería inversa. La librería proporciona un gran número de
funciones básicas para acceder al hardware de la PS2. Como la PS2 tiene dos CPUs (EE e
IOP), 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 debido
a 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 estaban
desarrollando había que grabarlos en un CD y ejecutarlos con alguno de los métodos vistos
anteriormente. Esto hacía muy engorroso (y caro) el desarrollo. Con el tiempo han ido surgiendo
programas que mediante la conexión de la PS2 al PC permiten enviar los programas compilados
del PC a la PS2 para que esta la ejecute. De esta forma el proceso de desarrollo se ha dinamizado
bastante.
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 con
este 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 Naplink
servidor, que tenemos que tener previamente grabado en un CD, y en el PC ejecutamos el Naplink
cliente. Desde el cliente podremos indicarle a la PS2 el ejecutable a cargar. Existen versiones del
cliente para Windows y para Linux.
Capítulo 5

Instalación del entorno de programación


RAW

En este capítulo vamos a ver como instalar el entorno de desarrollo para empezar a programar
la PS2. El entorno de desarrollo se compone de los compiladores cruzados de C y ensamblador
para 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 la
tarea de acceso al hardware.
El método de instalación descrito es para máquinas Unix, aunque también se puede instalar
en 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 crear
la estructura de directorios que albergará nuestras utilidades y compiladores para la PS2. En este
caso se van a instalar todos los componentes en el directorio /opt/ps2dev. Creamos la estructura
de 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 poner
las variables de entorno necesarias para compilar. Habrá que ejecutar este script antes de empezar
a programar. No es mala idea incluir las variables de entorno en el .bashrc para que estén siempre
cargadas. 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 encontrar
las 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 los
cambios 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ás
manejables:

# 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 genere
có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 que
usaremos 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 ficheros
ps2lib-1.9.tar.gz y ee-newlib-binary-1.81.tar.gz que se pueden encontrar en [24] contienen estas
librerías.
Para instalarlas simplemente tenemos que descompirmirlas en el directorio /opt/ps2dev. Los
directorios 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 intentaremos
compilarla.
La demo contiene un fichero llamado crt0.s. Este fichero lo necesita el ee-ld para poder
funcionar. Muchas demos y librerias lo traen. Vamos a compilarlo y lo ponemos en un sitio
donde 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 del
código ejecutable, el alineamiento de las secciones y algunos parámetros más, ya que los valores
por 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 el
Naplink, si poseemos el cable apropiado o grabando el ejecutable junto con un system.cnf que
tendremos 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