Académique Documents
Professionnel Documents
Culture Documents
Nosotros
Indice general
1. Denicion de objetivos y especicaciones 1
1.1. Denicion de objetivos y especicaciones . . . . . . . . . . . . . . . . . 1
1.1.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2. Proyecto a realizar . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.3. Especicacion de la aplicacion . . . . . . . . . . . . . . . . . . 3
1.1.4. Estado actual y antecedentes . . . . . . . . . . . . . . . . . . . 3
1.1.5. Antecedentes bibliogracos disponibles . . . . . . . . . . . . . . 5
1.2. Introduccion a la arquitectura de la PlayStation2 . . . . . . . . . . . . 6
1.2.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.2. La consola de juegos PlayStation 2 . . . . . . . . . . . . . . . . 6
1.2.3. La arquitectura de la PlayStation 2 . . . . . . . . . . . . . . . . 8
1.2.4. El Emotion Engine (EE) . . . . . . . . . . . . . . . . . . . . . 13
1.3. La consola de videojuegos PlayStation2 . . . . . . . . . . . . . . . . . 17
1.3.1. Caractersticas . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.2. Expansion y accesorios . . . . . . . . . . . . . . . . . . . . . . 20
1.3.3. Comparativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3.4. Que le falta a la consola . . . . . . . . . . . . . . . . . . . . . 22
1.3.5. Algunos comentarios sobre la PlayStation2 . . . . . . . . . . . . 25
1.3.6. Curiosidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2. Estudio del hardware: el Emotion Engine 29
2.1. Apendice. El EE a fondo . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.2. Mapa de memoria . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.1.3. El EE Core . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.1.4. El Controlador de interrupciones (Interrupt Controller, INTC) . 40
2.1.5. TIMER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.1.6. El controlador de DMA (DMA Controller, DMAC) . . . . . . . 41
2.1.7. Interfaz del GS (GIF, GS Interface . . . . . . . . . . . . . . . . 43
2.1.8. Unidad de procesamiento de imagenes (IPU, Image Data Processor 45
2.1.9. SIF, Sub-CPU Infertace . . . . . . . . . . . . . . . . . . . . . . 47
3. Desarrollo del proyecto 49
3.1. Desarrollo del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.1.1. Especicacion de las tareas . . . . . . . . . . . . . . . . . . . . 49
3.1.2. Metodo de programacion de la consola . . . . . . . . . . . . . . 50
3.1.3. Programacion de las unidades . . . . . . . . . . . . . . . . . . 52
3.1.4. Distribucion en las unidades . . . . . . . . . . . . . . . . . . . 54
3.2. Implementacion del proyecto . . . . . . . . . . . . . . . . . . . . . . . 54
i
ii
INDICE GENERAL
3.2.1. Decodicacion de sonido . . . . . . . . . . . . . . . . . . . . . 54
3.2.2. Reproduccion de sonido . . . . . . . . . . . . . . . . . . . . . . 58
3.2.3. Modelo graco. Procesamiento de audio . . . . . . . . . . . . . 58
3.2.4. Deteccion de la cadencia de la cancion . . . . . . . . . . . . . . 66
3.2.5. Reimplementacion del plugin graco . . . . . . . . . . . . . . . 67
4. Optimizacion del programa sobre el hardware 89
4.1. Uso de la VU0 como ayuda del MIPS . . . . . . . . . . . . . . . . . . 89
4.1.1. Programacion in line de la VU0 como preprocesador . . . . . . 89
4.2. Secciones de codigo a optimizar . . . . . . . . . . . . . . . . . . . . . 92
4.2.1. Procesamiento de frecuencias a conjuntos de frecuencias . . . . 93
4.2.2. Procesamiento de los conjuntos de frecuencias . . . . . . . . . . 96
4.3. Analisis de la ganancia obtenida . . . . . . . . . . . . . . . . . . . . . 97
5. Formato Ogg Vorbis 99
5.1. Introduccion al formato . . . . . . . . . . . . . . . . . . . . . . . . . . 99
5.2. Funcionamiento general del decodicador . . . . . . . . . . . . . . . . 100
5.2.1. Conguracion del decodicador . . . . . . . . . . . . . . . . . . 100
5.2.2. Pasos de la decodicacion . . . . . . . . . . . . . . . . . . . . 101
5.3. Conguracion del codec y decodicacion del paquete . . . . . . . . . . 103
5.3.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
5.3.2. Decodicacion de la cabecera y conguracion del decodicador . 103
5.3.3. Decodicacion y sntesis de paquetes de audio . . . . . . . . . . 107
5.4. Floor 0: conguracion y decodicacion . . . . . . . . . . . . . . . . . . 112
5.4.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.4.2. Formato Floor 0 . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.5. Floor 1: conguracion y decodicacion . . . . . . . . . . . . . . . . . . 115
5.5.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
5.5.2. Formato Floor 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 115
5.5.3. Decodicacion de la cabecera . . . . . . . . . . . . . . . . . . . 117
5.5.4. Decodicacion del paquete . . . . . . . . . . . . . . . . . . . . 119
5.5.5. Calculo de la curva . . . . . . . . . . . . . . . . . . . . . . . . 120
5.6. Conguracion y decodicacion de los residuos . . . . . . . . . . . . . . 122
5.6.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
5.6.2. Formato de residuos . . . . . . . . . . . . . . . . . . . . . . . . 122
5.6.3. Decodicacion de los residuos . . . . . . . . . . . . . . . . . . 124
5.7. Funciones auxiliares de la implementacion . . . . . . . . . . . . . . . . 129
5.7.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
6. Apendices 133
6.1. Principios de la Informatica Graca . . . . . . . . . . . . . . . . . . . . 133
6.1.1. Transformaciones en 2D . . . . . . . . . . . . . . . . . . . . . . 133
6.1.2. Transformaciones en 3D . . . . . . . . . . . . . . . . . . . . . . 136
6.1.3. Proyecciones de visualizacion . . . . . . . . . . . . . . . . . . . 137
Glosario I
Bibliografa V
Indice de cuadros
1.1. Rendimiento del GS para las distintas primitivas y opciones disponibles . 12
1.2. Principales caractersticas de la consola comparada con las que ofrecen
sus mas directas competidoras en el mercado. . . . . . . . . . . . . . . 23
2.1. Organizacion de la memoria cache. . . . . . . . . . . . . . . . . . . . . 34
2.2. Signicado de las siglas de las etapas del cauce de la FPU. . . . . . . . 39
2.3. Signicado de las siglas de las etapas de los cauces del EECore. . . . . 39
2.4. Interrupciones que es capaz de controlar el modulo INTC. . . . . . . . . 40
2.5. Disponemos de diez canales DMA para realizar transferencias. . . . . . 41
3.1. Antes de especicar la lista de informacion, se debe denir el tipo de
primitiva y las caractersticas que tendra. . . . . . . . . . . . . . . . . . 82
3.2. Registros existentes para especicar informacion asociada a un vertice. . 83
iii
iv
INDICE DE CUADROS
Indice de guras
1.1. Arquitectura interna del Emotion Engine de la PlayStation2 . . . . . . . 2
1.2. Diagrama de dependencia entre las principales tareas . . . . . . . . . . 3
1.3. Onda de audio digitalizada . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4. Plugin de visualizacion ((Iris)) para XMMS . . . . . . . . . . . . . . . . 5
1.5. Esquema de la disposicion de las unidades, junto a las entradas/salidas 10
1.6. Arquitectura del sintetizador graco . . . . . . . . . . . . . . . . . . . 11
1.7. Estructura del EE, a nivel de unidades y buses entre las mismas . . . . 14
1.8. Esquema de memoria de la PlayStation2 . . . . . . . . . . . . . . . . . 16
1.9. Arquitectura de las memorias de la PlayStation2 . . . . . . . . . . . . . 17
1.10. Imagen de una PlayStation2 . . . . . . . . . . . . . . . . . . . . . . . 18
1.11. Imagen de los componentes del kit de linux . . . . . . . . . . . . . . . 20
1.12. PlayStation2 conectada al kit de desarrollo DTL-T10000. . . . . . . . . 24
1.13. Planta de fabricacion de Sony en Nagasaki. . . . . . . . . . . . . . . . 25
1.14. Resultado de un modding por parte de un usuario de PlayStation2. . . . 27
2.1. Cauce de renderizado y asociacion a una unidad funcional de la consola 29
2.2. Reparto de las tareas mas habituales entre el hardware de la consola. . . 30
2.3. Estructura interna del Emotion Engine . . . . . . . . . . . . . . . . . . 31
2.4. Mapa de memoria del Emotion Engine . . . . . . . . . . . . . . . . . . 31
2.5. Estructura interna del EECore . . . . . . . . . . . . . . . . . . . . . . 33
2.6. Organizacion de la cache de datos y la cache de instrucciones. . . . . . 34
2.7. (a) La conexion de la SPR con la CPU y con la memoria externa a
traves de DMA, (b) la CPU y la memoria accediendo concurrentemente
al SPR para grabar y leer datos respectivamente. . . . . . . . . . . . . 35
2.8. Disposicion de distintos tipos de transmision a memoria. . . . . . . . . 36
2.9. Registros que conforman la Unidad de Punto Flotante . . . . . . . . . . 38
2.10. Cauce de la Unidad de Punto Flotante . . . . . . . . . . . . . . . . . . 38
2.11. Etapas de los cauces del EECore. . . . . . . . . . . . . . . . . . . . . . 39
2.12. Ejemplo de transferencia de una region rectangular de entre la memoria
principal y la SPR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.13. Posibles caminos hacia el GIF, seg un la unidad funcional de origen. . . . 43
2.14. Estructura de la Unidad de Procesamiento de Imagenes . . . . . . . . . 45
2.15. Con un n umero reducido de colores se puede conseguir una textura de
gran calidad, como se puede comprobar. Cada textura usa tan solo 4
bits de color. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.16. Proceso de decodicacion de MPEG2 empleando el IPU. . . . . . . . . 46
2.17. Estructura del SIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
v
vi
INDICE DE FIGURAS
2.18. Flujo en una transferencia de datos entre el IOP y la memoria del Emo-
tion Engine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.1. Uso normal de los procesadores que conforman el Emotion Engine . . . 49
3.2. Cable PL2301 USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.3. Esquema para la ejecucion de un programa en las unidades vectoriales . 53
3.4. Criterio a seguir para la distribucion inicial de las tareas . . . . . . . . . 54
3.5. Tareas de las que se compone la decodicacion de Ogg Vorbis . . . . . 55
3.6. Entrelazado de los canales . . . . . . . . . . . . . . . . . . . . . . . . 57
3.7. Un ejemplo de la salida mostrada por top . . . . . . . . . . . . . . . . 57
3.8. Orden de conguracion del dispositivo . . . . . . . . . . . . . . . . . . 59
3.9. Ejemplo de espectograma (abajo) y se nal de origen (arriba) . . . . . . . 59
3.10. Se nal en el dominio en tiempo y en el dominio en frecuencia . . . . . . 60
3.11. La funcion original (a) es distinta de cero en un intervalo T de tiem-
po. Su transformada de Fourier (b) no tiene limitacion por ancho de
banda, pero tiene amplitud en todas sus frecuencias. Si muestreamos
con el intervalo como aparece en (a), la transformada de Fourier (c)
esta denida entre f
c
. La potencia fuera de ese rango se desplaza a
dicho rango. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.12. Reordenacion de un vector (longitud 8 en este caso) por inversion de
bits, (a) entre dos vectores, (b) en un vector . . . . . . . . . . . . . . . 64
3.13. Para poder considerar un espectro de frecuencia sucientemente amplio
con un n umero bastante reducido de barras a representar, necesitamos
denir unas ((bandas de frecuencia)), considerando que cualquier frecuen-
cia contenida en dichas bandas pertenece a un ((conjunto de frecuencia)) 66
3.14. De una onda (rojo) se puede estimar los golpes de ritmo (verde).
Aqu hemos representado todo el buer de 1024 muestras como gol-
pe de ritmo, ya que calculamos la existencia o no de cadencia para cada
uno de ellos, y no para muestras concretas. . . . . . . . . . . . . . . . 68
3.15. Arquitectura de las VU dentro del Emotion Engine . . . . . . . . . . . 71
3.16. Arquitectura de las VU en profundidad . . . . . . . . . . . . . . . . . . 72
3.17. Proceso necesario para obtener el codigo objeto desde el chero ensam-
blador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3.18. Descomposicion en bloques del sintetizador graco. . . . . . . . . . . . 78
3.19. Flujo de datos del sintetizador graco. . . . . . . . . . . . . . . . . . . 80
3.20. Desplazamiento realizado en la cola de vertices como consecuencia de
un vertex kick. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.1. Flujo de datos que sigue la implementacion del clasicador de frecuen-
cias en conjuntos de frecuencias: (a) en el MIPS, (b) el ujo de datos
perteneciente a la implementacion en la VU0. . . . . . . . . . . . . . . 95
4.2. Flujo de datos que sigue la implementacion del procesamiento de con-
juntos de frecuencias: (a) en el MIPS, (b) el ujo de datos perteneciente
a la implementacion en la VU0. . . . . . . . . . . . . . . . . . . . . . . 97
5.1. Componentes del decodicador de Ogg Vorbis . . . . . . . . . . . . . . 99
5.2. Tipo de solapamiento entre ventanas consecutivas. . . . . . . . . . . . 102
5.3. Reconstruccion del oor con dos puntos, y calculo de la diferencia en
Y con respecto a la estimacion inicial. . . . . . . . . . . . . . . . . . . 116
5.4. Realizamos la correccion de la Y anterior y calculamos las nuevas para
32 y 96. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
Figura 1.1: Arquitectura interna del Emotion Engine de la PlayStation2
co de apoyo al procesador MIPS, forman el centro de procesamiento de calculo de la
maquina.
Aparte posee un MIPS I como procesador de gestion de entrada/salida y un pro-
cesador graco totalmente independiente dedicado exclusivamente a la representacion
graca, liberando de dicha tarea al resto de componentes y logrando un procesamiento
paralelo mayor.
1.1.2. Proyecto a realizar
Disponiendo de una variedad de unidades de procesamiento interconectadas para
realizar tareas en paralelo, optamos por intentar aprovechar la mayor cantidad posible
para distribuir la carga de una aplicacion en tiempo real, con lo que deberamos usar
tanto el procesador principal de proposito general como las unidades VLIW, a nadiendo
la ejecucion de todas de forma sincronizada y en paralelo.
La apliacion elegida fue un reproductor con una visualizacion sincronizada del
formato Ogg Vorbis [23] de compresion de audio, por una serie de razones que expon-
dremos a continuacion:
la descompresion de sonido es algo muy habitual hoy en da: consideramos que es
un tema de bastante relevancia en el sentido de ser algo practico, interesante y
sucientemente motivante para tener una vala didactica frente a otras posibles
aplicaciones que llamen menos la atencion del alumnado.
posee unos requisitos de tiempo real bastante importantes: es una aplicacion
de tiempo real crtico, ya que un retraso de menos de un segundo provoca una
interrupcion en el sonido, siendo facil su deteccion durante las pruebas, y una
prioridad ante todo.
se debe generar una salida auditiva: hace uso del dispositivo de sonido, aumen-
tando la vision practica del proyecto al aportar una caracterstica esencial del
mundo multimedia.
hace uso de la unidad graca: no solo necesita el procesamiento de calculo y
la reproduccion del sonido, sino que se necesita profundizar mnimamente en
el funcionamiento de la unidad graca para poder mostrar la evolucion de la
cancion, tambien en tiempo real y de forma sincronizada con la salida de audio.
1.1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES 3
uso del formato ogg vorbis frente a otros formatos de compresion: nos centramos
en el soporte de un formato de compresion libre y sin patentes al contrario que
el resto de formatos de compresion con perdidas de audio, que estan sujetos a
patentes, como es el caso del popular MP3.
1.1.3. Especicacion de la aplicacion
Como hemos esbozado, se trata de realizar una aplicacion que sincroniza la repro-
duccion de audio con la visualizacion de dicho audio. Por tanto, podemos distinguir
tres tareas basicas:
decodicacion del chero ogg vorbis en muestras de audio: realiza todo el
proceso de decodicacion del chero comprimido, transformando las tramas de
ogg vorbis en formato de codicacion por pulsos interpretables por el sistema de
audio.
reproduccion del sonido decodicado: una vez decodicado, hay que enviarlo
a la salida de audio a la correspondiente frecuencia, canales y tipo de dato.
visualizacion del sonido decodicado: con el sonido a reproducir se debe calcu-
lar una serie de propiedades de ese fragmento que sean representables de forma
graca, para crear una imagen que se corresponda con dicho fragmento.
Es inmediato ver la dependencia de las tareas que tenemos a nuestra disposicion.
Si representamos de forma graca dicha dependencia, obtenemos el arbol de la Figura
1.2. Cada tarea se descompondra en subtareas mas detalladas como se mostrara pos-
teriormente en secciones siguientes y en apendices a nal del documento. En este
apartado trabajaremos desde el punto de vista global de la aplicacion, sin profundizar
en los distintos aspectos que la componen.
Figura 1.2: Diagrama de dependencia entre las principales tareas
1.1.4. Estado actual y antecedentes
Ya expusimos la actualidad de este tipo de aplicaciones como uno de los motivos
que nos llevaron a su eleccion. En el uso habitual de cualquier ordenador domestico entra
como tarea la reproduccion de audio. Aunque este proyecto no trata de la compresion
de una se nal de audio, es un hecho de vital relevancia y diaria investigaci on. Es la base
de muchas de las aplicaciones de sonido que existen hoy da, ya que sin los metodos
de codicacion de audio, sera inmanejable la cantidad de informacion que tendra que
4 CAP
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
circular por los distintos buses del sistema, y la ingente cantidad de espacio necesario
para poder almacenarlo.
Supongamos que queremos oir una cancion a una calidad lmite de la audicion
humana. Para ello, necesitamos que este en un formato ((calidad CD)), que no es mas
que 44 100 muestras por segundo, que es el lmite psicoac ustico del odo humano, con
muestras de 16 bits y en dos canales (el estereo basico).
Figura 1.3: Onda de audio digitalizada
Tenemos entonces que, para un segundo, debemos almacenar 44 100 muestras
de 16 bits (2 bytes) por canal. La Figura 1.3 muestra una onda digitalizada a dichos
parametros. Eso hacen 44 100 2 2 176 400 bytes por segundo. Una cancion
normal de 4 minutos, ocupara 176 400 60 4 40, 38 Mbytes. Es evidente que es
necesario encontrar alg un metodo de compresion de sonido. Recordemos que esto era
para una muestra en estereo. Con un Dolby Digital, que tiene seis canales de sonido,
necesitaramos tres veces mas de espacio, lo que implica que para la cancion de 4
minutos, necesitaramos aproximadamente 121, 12 Mbytes.
Hemos expuesto ya el codicador que usaremos, y un esbozo de las razones que
nos han llevado a elegirlo. Este formato, ogg vorbis, comparte gran parte de las ca-
ractersticas de cualquier codicador alternativo de semejante proposito: posee una
codicacion costosa en tiempo, en favor de una descodicacion muy rapida, apta para
una aplicacion de tiempo real, como es el caso. Se trata por tanto de un metodo de los
denominados asimetricos, debido a la distinta complejidad que supone su codicacion y
su descodicacion. Hay otro tipo de algoritmos de compresion, llamados simetricos, en
los que el tiempo de codicacion y descodicacion son similares, aunque no alcanzan
las caractersticas de calidad de los asimetricos. La nalidad de los algoritmos simetri-
cos esta orientada a conferencias en tiempo real, donde se necesita estar codicando y
descodicando de forma constante lo mas rapido posible.
Con nuestra eleccion intentamos dar soporte a un formato de codicacion asimetri-
ca de alta calidad, libre de patentes y con un gran soporte por parte de sus creadores,
tanto a nivel de documentacion como a nivel de implementaciones disponibles para
distintas plataformas.
La otra parte de la aplicacion conforma una demostracion multimedia, algo indis-
pensable hoy da. Relacionado con nuestra aplicacion, encontramos diversas muestras
de lo que pretendemos hacer, principalmente como plugins de visualizacion de los prin-
cipales reproductores multimedia, como bien pueden ser Winamp, Sonique, Windows
Media Player o XMMS [46] entre muchos otros. En este caso, optaremos por el pro-
grama XMMS como modelo a seguir por temas de soporte hacia el programador. En
la gura 1.4 se muestra uno de estos plugins gracos, concretamente el plugin ((Iris)),
disponible en la direccion http://cdelfosse.free.fr/xmms-iris/.
Sin embargo, la parte relativa a la programacion en el hardware de la PlayStation2
1.1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES 5
Figura 1.4: Plugin de visualizacion ((Iris)) para XMMS
esta practicamente indocumentada y sin soporte de ning un tipo. Aunque hay
aplicaciones desarrolladas para la maquina a tratar, ninguna esta destinada al aprendi-
zaje de la programacion, y son poco mas que meros productos nales, creaciones de
gente que ha pasado una dura curva de aprendizaje y por un motivo u otro no dedica
el tiempo necesario a facilitar el camino a nuevos interesados en esta maquina.
De hecho, sin comprar ning un producto externo a la consola propiamente dicha,
la unica forma de programarla es mediante el empleo de un compilador cruzado y unas
bibliotecas mnimas creadas por un grupo de gente sin soporte de Sony de ning un tipo
cuyo pasatiempo es desenmara nar los secretos de la maquina. El principal problema
que se encuentra es el que las propias palabras de uno de sus maximos exponentes
de estas bibliotecas: ((es mas divertido programar que documentar)). Aunque tenemos
un conjunto de bibliotecas para compilar de forma cruzada a la maquina, volvemos a
tener una notable carencia de informacion sobre que o como se hace algo. El principal
metodo de aprendizaje es el ensayo y error, cosa no muy recomendable para nuestro
objetivo ultimo, que es mostrarle al alumno la programacion de una arquitectura
distinta de forma didactica.
Si disponemos de fondos sucientes, podemos adquirir cierto soporte de Sony a
la hora de desarrollar los programas, pues dispone de un kit [14] de desarrollo bajo el
sistema operativo GNU/Linux para la consola, con manuales sobre las principales uni-
dades funcionales includos. Esto supone una ventaja y una desventaja con respecto al
metodo anterior: tenemos mas soporte e informacion para la programacion, si bien al-
gunas unidades quedan ocultas por el sistema operativo y las aplicaciones desarrolladas
solo funcionaran en una PlayStation2 que tenga el kit de Linux instalado.
Un tercer metodo descartado desde el inicio es el que recibe un soporte completo
de Sony, tanto a nivel de herramientas de desarrollo como de informacion, incluyendo
una maquina PlayStation2 especial para desarrollo. El principal inconveniente de este
sistema es la necesidad de estar reconocido como un desarrollador ocial por Sony, cosa
difcil de conseguir, y mas para nuestro proposito.
1.1.5. Antecedentes bibliogracos disponibles
A pesar de su aparicion en el mercado hace varios a nos, su enfoque principalmente
orientado a ser un producto nal de ocio y consumo destinado al entretenimiento
interactivo de los usuarios hace que la documentacion otorgada de forma p ublica sea
mas bien inexistente. Es mas, Sony ha hecho una especie de campa na en cierta forma
elitista en lo que a su programacion se reere. No otorga soporte de ning un tipo
a la programacion de la consola si no hay un contrato por medio. En cierta forma
6 CAP
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
es comprensible, ya que la clase de programadores que quiere Sony para su consola
son parte de estudios de desarrolladores de videojuegos con suciente calidad como
para poder crear un producto de deleite que atraiga mas usuarios a su consola. El
programador ((free-lance)) o el usuario curioso con el suciente conocimiento como
para querer probar a hacer cosas en la maquina por mero placer no son el perl de
programador que le interesa.
Como un esfuerzo de desarrollo sobre la maquina, construdo desde cero sin so-
porte de ning un tipo por Sony, podemos encontrar el gran proyecto de PS2DEV [19].
Han desarrollado una serie de bibliotecas basicas para la programacion de la consola,
as como una peque na serie de tutoriales, codigos de ejemplo, demos y algunas he-
rramientas y proyectos que pueden facilitar el inicio de la gente a la programacion de
la consola sin soporte de Sony. El principal inconveniente es la necesidad de tener un
((mod-chip)) en la consola para poder arrancar los programas.
Dentro del soporte que Sony proporciona a los usuarios que no estan registrados
como un desarrollador ((serio)) de productos para la PlayStation2, sin compa nas que
respalden un producto de calidad, ni publicistas que puedan distribuirlos por el mer-
cado, solo encontramos el ya mencionado kit de Linux. Sony proporciona una serie
de manuales en el soporte digital, basicamente los repertorios de instrucciones de las
unidades y algunas consideraciones de uso. Dentro del sistema, solo se encuentran dis-
ponibles un par de ejemplos con el codigo fuente ligeramente comentado como principal
fuente de informacion, parte de los ejemplos de la biblioteca ps2dev [13].
Para este metodo, s podemos encontrar ciertas referencias introductorias por la
red. Un ejemplo es el peque no tutorial [21] escrito por Sarah Ewen, publicado en
el portal de Sony para el Linux de la PlayStation. Tambien encontramos una breve
introduccion [36] por Rob Louie al uso del kit de linux en la WEB de GameDev [5],
donde se muestra un programa mnimo para proporcionar un cambio de modo graco y
un dibujado de una malla en la pantalla, aunque sea usando unicamente el procesador
principal.
Respecto a la unidad vectorial, encontramos un tutorial bastante interesante de-
nominado Harnesses [45], confeccionado como ayuda para la participacion en el VU
Demo Coding Contest [15], una competicion que realiza Sony cuyo objetivo princi-
pal es confeccionar una demo lo mas impresionante gracamente usando unicamente
la VU1.
1.2. Introduccion a la arquitectura de la PlayStation2
1.2.1. Introduccion
Esta secccion pretende ser una introduccion didactica a la arquitectura de la con-
sola PlayStation 2. Se tratara la arquitectura de forma general para no perder el n
didactico y no aburrir al lector y se profundizara en cada seccion que lo requiera me-
diante los apendices.
1.2.2. La consola de juegos PlayStation 2
Aunque en esta seccion nos centraremos en la arquitectura de la PlayStation 2
y en especial en el microprocesador que hace las veces de corazon de la misma no
conviene olvidar que esta es una plataforma de ocio e interesa ralizar una introduccion
a sus caractersticas para que el lector nunca pierda la perspectiva. Haremos aqu una
muy breve descripcion. En el apedice ((La consola de juegos PlayStation 2)) se puede
1.2. INTRODUCCI
ON A LA ARQUITECTURA DE LA PLAYSTATION2 7
encontrar informacion completa y descriptiva acerca de la consola.
La PlayStation 2 salio al mercado en el a no 2001
1
al despues de la gran espectacion
causada en el mercado internacional. Es una plataforma de ocio mas que una consola,
pues no solo esta orientada a poder jugar con ella, sino que ofrece unas reconociadas
capacidades multimedia. En lo que respecta a los juegos, claramente esta orientada
juegos 3D. Pero esta plataforma tambien permite al usuario reproducir video DVD y
reproducir CDs de audio, lo que la convierte en un centro integral de entretenimiento
domestico.
Debajo de la elegante cubierta exterior oscura
2
de la consola PlayStation 2 hay
una completa central electronica. Es uno de los equipos de juegos mas potentes jamas
creados, la consola PlayStation 2 es realmente potente en el interior de su esbelta
cubierta, para que todos los juegos, los CDs que oigas o los DVDs que veas sean una
experiencia unica. Los detalles pormenorizados de la consola PlayStation 2, se muestran
a continuacion:
El corazon de la PlayStation 2 es el chip Emotion Engine. Este chip, con la ayuda
de la memoria principal y el sintetizador de gracos, permite a PlayStation 2 mover
una cantidad impresionante de polgonos en la pantalla del televisor (que en conjunto
forman los gracos en pantalla). Estas son sus caractersticas principales:
Chip Emotion Engine multimedia personalizado de 128 bits para CPU
Frecuencia de reloj del Sistema: 294 912MHz
Memoria Cache: Instrucciones 16KB, Datos 8KB + 16KB (ScrP)
Memoria Principal: 32MB
Ancho de banda del Bus de memoria: 128 bits DMA
Coprocesador: 2 Unidades paralelas de operaciones vectoriales
Actuacion del Punto Fluctuante: 6,2 GFLOPS
Transformacion Geometrica 3D CG: 66 millones de polgonos por segundo
Descodicador de compresion de imagen: MPEG2
El rendimiento del procesador graco de la PlayStation 2 es excelente. Con el
exclusivo chip del sintetizador de gracos que incorpora, sus gracos cobran vida.
Sintetizador graco
Frecuencia de reloj del Sistema: 147MHz
Memoria interna 4MB DRAM
Velocidad del frame buer: 38,4 Gbytes/seg.
Velocidad de dibujado: 2,4 Gpxeles/s
Con un signicado tan simple como Entrada/Salida, los sistemas E/S de PlayS-
tation 2 aseguran un funcionamiento sin problemas de la consola. Ademas el procesador
de entrada/salida de la PlayStation 2 es la CPU de la PlayStation mejorada, do que
asegura una compatibilidad al 100
N ucleo de la CPU: CPU de PlayStation mejorada
Frecuencia de reloj: 37,5MHz
Memoria IOP: 2MB
Sub Bus: 32-bit
Respecto al sonido la PlayStation 2 presenta una procesador de sonido de hasta
48 canales.
N umero de Voces: 48 canales con sonido surround 3D
Memoria de la seleccion de sonido: 2MB
Frecuencia de Salida: Hasta 48 KHz (calidad DAT)
1
Esto fue al mercado internacional, en realidad se llevaba comercializando en Japon desde su
presentacion el 4 de Mayo del 2000
2
Aunque este mismo a no estan saliendo al mercado versiones de distintos colores
8 CAP
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
En lo que respecta a la capacidad de almacenamiento, la PlayStation 2 incorpora
un DVD con estas caractersticas:
Tama no maximo: Doble capa 9GB
Velocidad del Dispositivo DVD-ROM: velocidad aproximada de 4X. CD-ROM:
velocidad aproximada de 24X.
La PlayStation 2 tambien incorpora varias interfaces que la dotan de gran versa-
tilidad, son las siguientes:
Tipos de interfaz
Serial Bus Universal (USB) x 2
Puerto de mando x 2, ranura para MEMORY CARD x 2
Salida
Optica Digital
Adaptador de red
En la pagina ocial de Sony [7] podemos encontrar ademas de estas caractersticas
un completo catalogo de complementos de la consola
1.2.3. La arquitectura de la PlayStation 2
La PlayStation 2 esta dise nada para conseguir unas altas prestaciones, sobre todo
en lo referente a juegos 3D. Es esta caracterstica la que va a condicionar toda la
arquitectura. Las caractersticas del cauce general de renderizacion 3D son las que
marcan la arquitectura de la PS2. A diferencia de un PC, donde hay un procesador
principal, un bus de sistema mediente el que se accede a la memoria principal y una
cache mas o menos pequea n, el EE se compone de vaios procesadores con peque nas
cache e interconectados por rapidos buses.
Por su diferente arquitectura, la losofa de programacion de una maquita y otra
deben ser radicalmetne distintas. Haciendo una a analoga, programar un PC sera tener
((unos grandes cubos de agua conectados con unos tubitos peque nos)) y programar la
PS2 sera tener ((unos cuencos conectados por amplios canales)).
El dise no de la arquitectura de la PS2 se rige por unos puntos principales (que
podemos llamar restricciones) que establecio el equipo de desarrollo de Sony y que
debemos tener en cuenta a la hora de comprender correctamente la arquitecura [27].
Esta orinetada al entretenimiento domestico. Esto siginica que las especicacio-
nes de la maquina no pueden cambiar a lo largo de su vida y si cambian tiene que
ser de una forma tranparente al desarollador y al usuario. A efectos practicas esto
nos asegura que cualquier aplicacion que hagamos basada en el Emotion Engine
va a funcionar alla donde haya un EE. Esto nos ofrece un angulo de vision muy
interesante desde el putno de vista comercial y de la investigacion.
Potencia para sintetizar emociones. Los gracos 3D de alta calidad requieren ua
gran potencia de calculo. Ademas, los juegos de calidad no solamente tienen unos
buenos gracos, sino que tambien manejan una pesada logica y una simulacion
de fenomenos fsicos considerable en aras de conseguir realismo. La consola tiene
que dise narse para soortar estos calculos.
Rapido renderizado. Para conseguir un buen frame rate en juegos 3D se necesita,
entre otras cosas, poder realizar un renderizado rapido. La PS2 usa un sintetizador
graco (GS) con DRAM embebida lo que consigue que el ancho de bandea entre
la memoria y el procesador se expanda. De esta manera se consiguen eliminar
los cuellos de botella que se generaban al hacer el rellenado de pxeles en la
1.2. INTRODUCCI
ON A LA ARQUITECTURA DE LA PLAYSTATION2 9
renderizacion
3
Simultaneidad de calculos geometricos. La consola proveera al desarrollador de
la posibilidad de simultanear calculos geometricos.
Descompresion de datos bajo demanda. Una buena solucion para abaratar el
coste de la consola es usar memorias de baja capacidad y baja velocidad. Para
conseguir un buen ancho de banda con esta con esta memoria se pueden usar
dartos comprimidos y descomprimirlos con circuitos especializados en tiempo real.
Esto es ideal para texturas de alta resolucion.
Control de stall y memoria FIFO. Una enorme cantidad de datos intermedos
(display lists) se transeren constantemente desde el motor geometrico hasta
el motor de renderizado. Para controlar este ujo de datos sin imponer carga
al procesador se provee de un mecanismo de memoria FIFO. Este mecanismo
permite sincronizar las transferencas de datos desde el motor geometrico hasta
la memooria y desde la memoria hasta el motor de renderizado usando la memoria
como un buer.
Procesadores especcos. Los video juegos usan cadena de procesamiento comu-
nes comom el procesamiento de imagenes. Ademas, de la carga de los procesos
por s misma, el overehead debido a los cambios de contexto producen una pesada
carga para la CPU. Por esta razon se usaran subprocesadores a peque na escala
para ejecutar esas cadenas de procesamiento comunes para compartir tiempo de
procesamiento de la CPU.
Transferencia inteligente de datos. El procesamiento distribudo incrementando
el n umero de subprocesadores requiere mecanismos de sincronizacion y arbitraje.
Para no sobrecargar la CPU con estas, tareas todas las intrucciones (programas)
se transeren junto con los datos usando un controlador de DMA
4
.
Buer de camino de datos. En un sistema UMA (Unied Memory Arquitecture)
5
con varios subprocesadores las competiciones por accesos al bus crean cuellos
de botella. Por ello se a naden a cada subprocesador unos buers de peque na
capacidad (caches) donde se almacenan temporalmetne los resultados del pro-
cesamiento y desde all se hace, de una vez y colectivamente, la transferencia a
memoria usando DMA. De esta manera se centralizan los accesos al bus en el
DMAC
6
y la eciencia de las transmisiones se puede mejorar.
Si se quiere sintetizar emociones es necesario realizar una cantidad enorme de
calculos.
Estas altas prestaciones se cosiguen con un esmerado dise no que busca la
maxima paralelizacion de componentes. Principalmente, la arquitectura de la PlaySta-
tion 2, tal y como podemos ver en el esquema se compone de 4 partes, a saber:
De las partes que hemos podido ver en la Figura 1.5, la principal es el Emotion
Engine (EE). Ahora procedemos a describir los elementos destacados.
3
Que era el principal problema del renderizado en el a no 2000
4
mas adelante veremos que este es la piedra angular para sacarle partido al EE
5
arquitectura de memoria unicada
6
Direct Memoy Access Controler
10 CAP
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
Figura 1.5: Esquema de la disposicion de las unidades, junto a las entradas/salidas
Emotion Engine (EE)
Este es el verdadero corazon de la consola. Se trata de un procesador con varios
procesadores integrados e interconectados entre si por un bus de 128 bits de alta
velocidad. Este procesador controla la PS2 y es el que la dota de toda su fuerza. Por
su principal importancia lo trataremos en la siguiente seccion.
El Procesador de Entrada/Salida (IOP)
Para controlar todos los dispositivos de I/O (mandos, DVD, puertos USB...) y
liberar al EE de esta tarea, Sony opta por usar un procesador dedicado. Aprovechando
su bajo coste y dando un golpe de efecto comercial usa como procesador de I/O
el mismo procesador que gobernaba la PlayStation (PS)
7
. As Sony se asegura una
compatibilidad del 100 %, minimiza costes y hace a un mas atractiva al usuario nal
poseedor de una PS la PS2; ya que el usuario podra seguir usando los ttuos que
posea y puede comprar nuevos ttulos a bajo precio debido al salto de tecnologa.
Sony no se quedo ah y mejoro el procesador. El IOP contiene un procesador MIPS
r3000 de 32 bits [24] y tiene dos tareas distintas. De un lado ejecuta lso juegos de
la PS, de otro realiza el control y la lectura de todos los perifericos y puertos de la
consola. As, el DVD-ROM, el HD, el puerto USB, el puerto IEEE 1394 (Firewire) y
el bus PCMCIA son controlados por este procesador. As se facilita la conexion de la
consola a m ultiples perifericos presentes y futuros tales como teclados, ratones, camaras
digitales, impresoras, joysticks, etc. Con respecto al procesador original de la PS esta
version mejorada incorpora el IEEE 1394, una cache mejorada y una nueva arquitectura
DMA que permite un incremento de rendimiento de hasta 4 veces en la transferencia
de datos [2].
El IOP tiene una memoria SDRAM que se encuentra totalmente separada de los
32 MB que tiene de memoria principal el EE de una capacidad de 2 MB. Dependiendo
de su modo de ejecucion, PS o PS2, el IOP funciona a 33 o 36 MHz respectivamente,
7
La llamaremos PS y no como erroneamente se hace en otros artculos PSOne pues PSOne es una
version de la PS original con un nuevo aspecto externo y una nueva organizacion del PCB que diculta
la instalacion de chips. La consola sigue siendo la misma
1.2. INTRODUCCI
ON A LA ARQUITECTURA DE LA PLAYSTATION2 11
como se analiza en el artculo publicado sobre la posible aplicacion de la consola a nes
didacticos [53].
El Sintetizador Graco (Graphics Synthesizer, GS)
El GS es el procesador graco de la PS2 y se encarga de dibujar el mundo 3D por
pantala. Para ello traduce las display lists (listas de datos) que le enva el EE.
Es un procesador graco de muy alto rendimiento que consigue su potencialidad
rgacias a unso buses muy anchos con los que se consigue un gran ancho de banda, a
16 motores de pxeles que operan en paralelo y a una DRAM de 4 MB embebida en el
chip. En la Figura 1.6 mostramos un esquema general de la arquitectura del GS.
Figura 1.6: Arquitectura del sintetizador graco
Los motores de pxeles operan en paralelo a 150 MHz. Al contrario que en un
sistema de video tradicional con una memoria externa y unos accesos a memoria a traves
de un bus de sistema, el GS tiene la memoria embebida conectada directamente a los
motores de pxeles con un bus de 2560 bits con lo que se consiguen unas transferencas
12 CAP
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
de 48 GB/s lo que ayuda a mejorar las tareas de renderizado y da mejor rendimiento
que un sistema de video tradicional.
Cuando se transmite al frame buer se consigue un ancho de banda de 38.4 GB/s
(1024 bits x 150 MHz x 2) y cuando se transmite al texture buer se alcanza una veloci-
dad de 9.6 GB/s (512 bits x 150MHz). Como vemos en la gura hay una conguracion
de doble puerto para acceder simultaneamente a las dos zonas de memoria. Sin entrar,
por ahora, en mas detalles y despues de haber destacado los elementos distintivos de
la arquitectura del GS vamos a comentar a ttulo descriptivo las capacidades del GS.
Mas a delante, si procede, trataremos el GS en mas profundidad.
El GS procesa 16 pxeles (32 bit por pxel) por ciclo sin texturas y 8 pxeles
por ciclo con texturas. La tasa de escritura de pxeles maxima es de 2.4 Gpxeles/s
sin texturas y de 1.2 Gpxeles/s con texturas. La Tabla 1.1 muestra una tabla donde
podemos ver cuantos polgonos es capaz de procesar el GS en distintas condiciones de
funcionamiento.
Cuadro 1.1: Rendimiento del GS para las distintas primitivas y opciones disponibles
El GS contiene tambien un modulo encargado de su salida que es el PCRTC.
Este modulo puede generar la salida seg un el estandar VESA (hasta 135 MHz como
1.2. INTRODUCCI
ON A LA ARQUITECTURA DE LA PLAYSTATION2 13
maximo), NTSC o PAL.
Por ultimo a nadir que no todos los monitores pueden conectarse con la PS2. Solo
aquello que tenga la sincronizacion en verde. De todas formas Sony proporciona una
WEB [6] donde podemos encontrar un listado actualizado de monitores probados.
Una puntualizacion. En su dise no, la PS2 no esta hecha para conectarse a un
monitor de alta denicion; de ah que no se requiera excesivo espacio de almacenamiento
para texturas de alta denicion, ya que Sony considera que no tiene mucho sentido ver
texturas de alta denicion televisor con las limitaciones que este tiene.
El Procesador de Sonido (SP) [53]
El procesador de sonido esta formado por 2 DSPs conectados a 2 MB de memoria
integrada y es capaz de manejar hasta 48 canales simultaneamente a una frecuencia
de reloj de hasta 48 KHz, ademas de decodicar Dolby, AC3 y DTS.
1.2.4. El Emotion Engine (EE)
Introduccion
El Emotion Engine es el corazon de la Playstation2, se trata de una CPU RISC de
128-bits desarrollada por Sony y por Toshiba
8
. Esta basado en la arquitectura MIPS III
aunque implementa un subconjunto de instrucciones de la arquitectura MIPS-IV. La
CPU funciona con una velocidad de reloj de 294.912 MHz. Para el proceso masivo de
informacion multimedia a altas velocidades, tanto el bus de datos, como la memoria
cache y los registros son de 128-bits. El Emotion Engine ha sido la primera CPU
desarrollada completamente de 128-bits. La capacidad de calculo en punto otante
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 otante (VU0, VU1), un circuito decodicador de MPEG-2 y controladores
DMA de alto rendimiento. Son tres los componentes que pueden realizar operaciones
en punto otante en paralelo:
1. Coprocesador 1 FPU con 1 FMAC1 y 1 FDIV
2. Coprocesador 2 VU0 con 4 FMAC y 1 FDIV
3. Unidad de proceso vectorial con 5 FMAC y 2 FDIV
El rendimiento combinado de todos estos elementos permite calculos fsicos com-
plicados, y todo tipo de transformaciones geometricas 3D. Ademas de procesar los
datos a 128-bits, es posible procesar y transferir vol umenes masivos de datos multime-
dia. 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 salio al mercado la PS2. Con la incorporacion del decodifcador
MPEG-2 en un chip, es posible procesar en paralelo datos gracos 3D de alta resolucion
y imagenes DVD de alta calidad. Con una capacidad de calculo en punto otante de 6.2
GFLOPS/seg, el rendimiento de esta CPU alcanza el de algunos supercomputadores.
Cuando se aplica al procesamiento de transformaciones de perspectiva y geometricas,
que son las que se usan normalmente para el calculo de gracos en 3D, el rendimiento
8
En el desarrollo de CELL, el procesador para la PlayStation3 participa tambien IBM
14 CAP
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
llega a 66 millones de polgonos por segundo, lo que es con el rendimiento de las es-
taciones gracas usadas en la produccion de pelculas de animacion contemporaneas a
la consola.
Sobre la implementacion [10]
El EE esta implementado con tecnologa CMOS de 0,25 micras con una longitud
de puerta de 0,18 micras. Es un dado de 15,02mm 15,04 mm con 13,5 millones de
transistores, funciona a unos 300 MHz y consume 18 watios. Podemos encontrar una
descripcion detallada de la metodologa de dise no seguida en [16] [20] [18] [17].
Estructura principal
El EE se compone de 3 procesadores independientes que pueden trabajar en para-
lelo. El principal es un procesador basado en la arquitectura MIPS-III y MIPS-IV de 64
bits, el r5900. Este procesador funciona junto a un coprocesador de punto otante al
que esta directamente conectado mediante un bus de 128 bits. Los otros dos procesa-
dores son dos unidades vectoriales denominadas VU0 y VU1. La idea de la arquitectura
es que la VU0 se use junto con el MIPS r5900 para simular el juego y los procesos fsicos
de este, en tanto que el VU1 se use para simular el mundo 3D. De ah la estructura de
interconexion que tienen los 3 procesadores. En la Figura 1.7 podemos ver la estructura
general del EE.
Figura 1.7: Estructura del EE, a nivel de unidades y buses entre las mismas
El EE Core esta formado por el MIPS r5900 y por la FPU. Su mision es la del
procesador principal, es decir, realiza el control del videojuego teniendo en cuenta las
entradas del usuario
9
. Es un procesador superescalar de 64 bits basado en la arquitectura
MIPS-III e incorpora instrucciones de la arquitectura MIPS-IV, ademas de un repertorio
9
Es el que ejecuta el n ucleo de Linux
1.2. INTRODUCCI
ON A LA ARQUITECTURA DE LA PLAYSTATION2 15
de instrucciones multimedia SIMD de 128 bits y que es capaz de emitir 2 instrucciones
por ciclo. El r5900 tiene dos unidades de enteros de 64 bits que pueden usarse de
forma combinada para operaciones multimedia, una unidad load/store de 128 bits y
una unidad de prediccion de saltos.
El r5900 puede usar como coprocesadores a la FPU (cop1) y a la VU0 (cop2) y
para ello existen instrucciones especcas. As, en los programas que se ejecurataran en
el procesador principal pueden ir mezcladas intrucciones para ejecutarse en el VU0, en
el FPU y en el r5900. La FPU contiene una unidad FDIV y otra FMAC (multiplicacion
y acumulacion) para realizar operaciones de 32 bits en coma otante.
Las unidades vectoriales son dos exactamente iguales salvo por el tama no de
sus memorias (que es mayor en el VU1) y por una unidad adiconal que incorpora el
VU1. Como la idea de la arquitectura es que la VU1 trabaje de forma independiente
(generando el mundo 3D) y en paralelo con el EECore y la VU0 (mientras generan la
simulacion del juego) su memoria es mayor que la de la VU0.
Las dos unidades vectoriales tiene una arquitectura SIMD-VLIW y permiten ope-
raciones con matrices 4x4 y correciones de perspectiva. Cada unidad vectorial contiene
4 unidades FMAC de un ciclo y una unidad FDIV de 7 ciclos. Ademas, la VU1 tiene un
modulo adicional para realizar operaciones elementales usadas comunmente en opera-
ciones con geometra 3D. Este modulo se denomina EFU(Elementary Function Unit).
La VU1 tiene adicionalmente otra FMAC y otra FDIV.
Dentro de cada VU se consigue paralelismo local dividiendo estas en dos unidades
funcionales que pueden operar independientemente y en paralelo, una mitad inferior y
otra superior.
En modulo INTC que vemos en la imagen es el interrupt controller, se encarga
de gestionar las interrupciones que lleguen al EECore para minimizar los cambios de
contexto. Mas adelante veremos que operaciones que en otros procesadores causaran
einterrupciones en las unidades vectoriales solo causan cambios de bits en los registros
de estados; sinedo responsabilidad del programador comprobar dihcos registros.
El modulo TIMER contiene 4 contadores de 16 bits que se usan con proposito
general para los programas.
Las se nales de reloj que rigen el sistema que son 150 MHz para los buses y 294.912
MHz para los procesadores del EE. El IOP, recordemos, trabaja a una frecuencia 37.5
MHz cuando es el procesador de entrada/salida del EE y a 33 MHz cuando trabaja
como si fuera una PlayStation. El GS trabaja a 147 MHz [7] [17].
El EE cuenta con un controlador de DMA (DMAC, DMA Controller) de 10 ca-
nales que se encarga de realizar todas las transferencias entre los distintos elementos,
descargando as al EECore de esta tarea. El DMAC puede realizar transferencias de
datos que se encuentran en zonas de memoria discontinuas. Estra caracterstica se de-
be principalmente a que la labor principal de EE es la producion de display lists que
seran interpretadas por el GS y estas no tienen por que estar siempre en posiciones
de memoria consecutivas. Para realizar estas transferencias el DMAC una una lista de
punteros enlazada.
El modulo IPU (Image Data Processor) implementa la descompresion por hardware
de imagenes 2D seg une l estandar MPEG2 o un subconjunto de el. Tambien realiza
VQ (Vector Quantization). El IPU decodica los macrobloques, pero la compensacion
d e movimiento la tinee que realizar el EE por software con ayuda de las instrucciones
mltimedia. Para una completa informacion a cerca del funcionamiento del estandar
MPEG se puede consultar [34].
El modulo SIF (Sub-Processor Interface) es una interfaz entre el EE y el IOP que
contiene una memoria FIFO bidireccional para intercambiar datos entre los procesadores
16 CAP
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
sin sobrecargar el bus.
El GIF (GS Interface) es la interfaz con el GS, recibe los datos de tres cami-
nos distintos posibles (PATH1:Entre el VU1 y el GIF, PATH2:Entre el VIF y el GIF,
PATH3:Entre memoria principal y el GIF) y arbitra la preferencia entre ellos. Ademas,
el GIF da el formato adecuado a los datos para que el GS los pueda interpretar ade-
cuadamente (GIFTag) y se los enva.
En el apendice ((El EE a fondo)) podemos encontrar informacion en profundidad
sobre el EE; as mismo, en el apendice ((Las VUs a fondo)) podemos hacer lo mismo
sobre las unidades vectoriales.
Arquitectura de memoria
Para conseguir una mayor eciencia en las transacciones de datos, cada procesador
cuenta con sus peque nas memorias internas. En la Figura 1.8 se muestra la arquitectura
de memoria de la PS2.
Figura 1.8: Esquema de memoria de la PlayStation2
La memoria principal del EE esta formada por 2 modulos de 16 MBs de memoria
RDRAM a 400 MHz que alcanza una velocidad de transferencia pico de 3.2 GB/s.
Todos los modulos del EE pueden acceder a esta memoria a rtaves de una arquitectura
UMA (Unied Memory Architecture). Teoricamente, el procesamiento multimedia de
se nales de audio y video de alta resolucion requiere un ancho de banda muy superior.
Este ancho de banda se consigue mediante el uso en cada procesador de peque nas
memorias dedicadas que se utilizan como buers para agilizar las transferencais de
datos entre los diferentes procesadores del EE.
Estas memorias son, como vemos en la Figura 1.9, una memoria interna muy
rapida y con unas propiedades especiales denominada Scratchpad RAM (SPR) de 16
KB en el r5900 y dos memorias caches de dos vas asociativas por conjuntos, una de
1.3. LA CONSOLA DE VIDEOJUEGOS PLAYSTATION2 17
dats de 8 KB y otra de instrucciones de 16 KBs. La cache de datos cuenta con un
mecanismo de escreitura write back.
Figura 1.9: Arquitectura de las memorias de la PlayStation2
La VU0 puede acceder tambien a la SPR para compartir datos y cuenta ademas
con una cache de datos de 4 KB y otra de instrucciones de 4 KB.
El SP (Sound Processor) cuenta con una memoria embebida de 2 MB y el GS con
orta memoria embebida VRAM de 4 MB como vimos antes. El IOP posee tambien 2
MB de memoria independiente.
Los accesos a memoria se hacen a traves del DMAC. Existen tres modos de acesos
diferente. En los juegos, el proceso principal es la generacion de display lists y estas
se calculan con los datos que se acaban de leer de memoria, se envan al GS y no se
vuelven a utilizar. En este tipoo de aplicaciones multimedia donde el ujo de datos es
claramente unidireccional, el uso de caches disminue el rendimiento del sistema. Por
eso existe un modo de transferencia de memoria que salta la cache (UnCached Mode).
Esta tambien el modo de transferencia estandar usando la cache, lo que es ideal para
datos temporales. El ultimo mode que provee el EE es el denominado UCA (UnCached
Accelerated) que acelera la lectura de datos adyacentes mientras escribe asincrona-
mente interponiendo un buer de proposito especial denominado UCAB (UnCached
Accelerated Buer).
1.3. La consola de videojuegos PlayStation2
El 13 de Septiembre de 1999, Sony Computer Entertaiment anuncion el lanza-
miento de la nueva generacion de consolas sucesoras de la PlayStation, de la que por
aquellos entonces se haban vendido mas de 50 millones
10
. Se anunciaba que la consola
iba a mejorar innitamente a su predecesora.
Ken Kuratagi fue el principal desarrollador del motor de la consola y podemos
encontrar varios artculos suyos en la bibliografa.
Fueron muchos los rumores que salieron sobre la consola y su comercializacion. Se
llego incluso a decir que la importacion estaba congelada en China porque el porderoso
hardware de la consola poda tener aplicaciones belicas y comenzo a especularse con
posibles adquisiciones masivas de los gobiernos de consolas. Hubo tambien rumores a
cerca de discremancias enrte los ingenieros y la directiva de Sony sobre las potencia-
lidades de la consola de la que se hicieron eco varios periodicos. Todos estos rumores
10
Actualmente se han vendido mas de 73 millones de unidades
18 CAP
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
Figura 1.10: Imagen de una PlayStation2
claramente beneciaban a Sony pues la consola fue ganando cada vez mas en especta-
cion. Por n, el 4 de Mayo de 2000 la consola PlayStation2, que se puede en la Figura
1.10, salio a la venta en Japon. Solo la primera semana se vendieron mas de 1 mill on
de unidades. Haba continuos problemas de estocaje.
Para el resto del mundo la consola se hizo esperar y no fue hasta el a no 2001
cuando pudimos adquirirla en Espa na. Las caractersticas tecnicas de la consola son
impresionantes. Esta consola ha sido dise nada desde el pricipio con un claro objetivo:
Juegos 3D. Es por eso que todo el hardware esta orientado a que se puedan ejecutar
este tipo de juegos con las maximas prestaciones posibles. La PS2 es la evolucion de la
primera consola desarrollada por Sony, la Playstation (PSX). La PSX fue de las primeras
consolas cuyos juegos se distribuian en soporte CDROM. Uno de los golpes de efecto
comerciales mejor pensados de Sony es la compatibilidad absoluta de las dos consolas.
As, el consumidor puede reutilizar todos sus juegos de PSX en la PS2. Incluso algunos
juegos se mejoran ya que se hace un suaizado de polgonos. Los juegos de la PS2 se
distribuyen en DVD aunque tambien es capaz de reproducir los juegos de la PSX en
CDROM. Gracias a la gran capacidad de los DVDs, los juegos de la PS2 estan repletos
de videos, m usica y sonido en 3D. Ademas de juegos, la PS2 puede reproducir CDs de
audio y pelculas en DVD por tanto es una completa plataforma de entretenimiento.
El panel frontal contiene, ademas 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, aunque siguiendo con la poltica de compatibi-
lidad tambien 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 television, para television
de alta defnicion y salidas de sonido surround, DTS y Dolby Digital 5.1.
1.3. LA CONSOLA DE VIDEOJUEGOS PLAYSTATION2 19
Los mandos estandar, Dual Shock 2, tienen 15 botones; todos son analogicos,
excepto Analog, Start y Select.
El mando consta de:
4 botones ordenados como cursores direccionales (arriba-izquierda).
Botones Analog, Start y Select (medio)
4 botones de accion de distintos colores (arriba derecha)
11
4 botones de accion, L1 , L2 (frente-izquierda) y R1, R2 (frente-derecha)
2 joysticks analogicos con force-feedback
12
(arriba-izquierda y arriba-derecha)
1.3.1. Caractersticas
En la siguiente lista vamos a morstrar las caractersticas principales de la consola
dadas por el fabricante:
Dimensiones: 301 mm (altura) x 182 mm (anchura) x 78 mm (profundidad)
Peso: 2,4 kg
Formatos compatibles: CD-ROM / DVD-ROM PlayStation 2 CD-ROM PlaySta-
tion CD audio, video DVD, Dolby Digital (AC-3), DTS
Unidad Central de Procesamiento (CPU): Emotion Engine de 128 bits
Frecuencia de reloj del sistema: 294,912 Mhz Memoria principal: Direct RDRAM
Tama no de la memoria: 32 MB
Gracos: Graphics Synthesizer (Sintetizador graco) Frecuencia de reloj: 147,456
MHz VRAM cache integrada: 4 MB
Sonido: SPU2
N
o
de voces: 48 canales. Dos posibles frecuencias selecionables 44 y 48 KHz
Memoria de sonido: 2 MB
IOP: Procesador I/O
N ucleo CPU: PlayStation CPU mejorado
Frecuencia de reloj: 33,868 MHz o 36,864 MHz (seleccionable) Memoria IOP: 2
MB
Dispositivo de disco CD-ROM y DVD-ROM: Velocidad CD-ROM: 24x DVD-
ROM: 4x
Sintetizador de gracos: 147,456 MHz 75 millones de polgonos/s max.
Interfaces:
11
Con formas, muy importantes pues son el distintivo comercial de la consola
12
Tecnologa de retroalimentacion de joystck
20 CAP
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
Conector DIGITAL OUT (OPTICAL)
Conector para Bus Serie
Universal (USB) Conector para i.S400 i.LINK Puerto de mando (2)
Ranura de MEMORY CARD (2)
Conector AV MULTI OUT
Perifericos incluidos: Mando analogico DUALSHOCK2
1.3.2. Expansion y accesorios
Las posibilidades de expansion en s de la consola son limitadas pues esto ira en
contra de la poltica de dise no de mantener la compatibilidad. Las posibles mejoras
del reproductor de DVD que es lo que es mas susceptible de mejorar con el tiempo
se resuelven a base de nuevas versiones de la consola que actualizan el rmware o
bien cambian la disposicion de la PCB o introducen mnimos cambios que para nada
cambian ning un requerimiento. La salida de nuevas versiones de la consola dicultan
tambien el uso de modchips para las mismas.
Los modchip son unos chips que modican las funciones de la BIOS de la consola
y permiten principalmente ejecutar backups de los juegos originales y algunos repro-
ductores multimedia mejorados que permiten reproducir DivX y otros codecs similares.
La principal ampliacion que se le puede hacer a la consola es el kit de Linux. El
kit de Linux para PS2 [14] permite ejecutar una distribucion Linux en la PS2.
Figura 1.11: Imagen de los componentes del kit de linux
Esto convierte a la consola en un ordenador de sobremesa plenamente funcional.
El kit de Linux mostrado en la Figura 1.11 contiene:
un disco duro interno de 40 GB
un teclado usb
1.3. LA CONSOLA DE VIDEOJUEGOS PLAYSTATION2 21
un raton usb
una tarjeta de red 10/100 Base-T
dos discos DVD
El primero contiene el entorno de ejecucion (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 distribucion que se puede instalar en el disco duro. La distrubucion es una modicion
de la RedHat
13
. 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 podran ejecutarse en
una PS2 que tenga el kit. Nosotros hemos empleado el kit de linux en el desarrollo de
nuestro proyecto.
De todos los dispositivos que el Kit de Linux trae sellados y etiquetados por Sony,
el unico que no puede ser estandar por sus especiales caractersticas es la tarjeta de red.
Respecto al teclado y al raton valen cualesquiera con tal de que sean usb. Respecto
al HD, en principio (pese a las negativas de Sony) funciona cualquiera que sea ATA.
En la interfaz que tiene solo se puede colocar un disco duro. Estos conocimiento son
interesantes de cara a la construccion de un cluster de PS2 como el que existe en la
Universidad de Illinois en Urbana-Champaign, mostrado en la Figura ??. Es un cluster
de Computo cientco basado en PS2. Con el exploran el uso de PS2 en Computo
Cientco y Visualizacion de Alta Resolucion. El cluster lo constituyen 70 PS2
14
.
Lo demas son accesorios que la consola tiene y que tienen su utilidad para los
juegos [7]. Sony, ademas de los juegos, tambien ha hehco compatibles los perifericos de
la PlayStation con la PlayStation2. Pero tambien ha desarrollado perifericos exclusivos
para la nueva consola:
MANDO ANAL
OGICO DUALSHOCK2:
Sony Computer Entertainment ha desarrollado un nuevo
mando analogico DUALSHOCK, de aspecto exactamente
igual al del mando analogico DUALSHOCK original, pero
dotado con controles analogicos sensibles a la presion (ex-
cepto los botones ((START)) y ((SELECT))), para mejorar el
control de lo que ocurre en la pantalla y hacer la experiencia
de juego interactivo a un mas atractiva.
MEMORY CARD (TARJETA DE MEMORIA) [8MB] para PlayStation 2:
La nueva memory card (tarjeta de memoria) cuenta con una
capacidad de almacenamiento de datos de 8MB y con una
tasa de transferencia hasta 250 veces mas rapida que la me-
mory card (tarjeta de memoria) de PlayStation. Para mejorar
la seguridad de los datos en las posibles aplicaciones futuras
en red, la memory card (tarjeta de memoria) incorpora el
sistema de autenticacion y cifrado ((MagicGate)).
13
Hay otra distribucion llamada BlackRhino que esta basada en Debian
14
Sony Linux Kit + MPI, PBS, Maui Scheduler
22 CAP
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
MULTITAP:
Con el multitap, redise nado para PlayStation 2, los videojue-
gos siguen siendo una actividad social, con grupos de amigos
api nados delante del televisor intentando conseguir el gol mas
artstico, el partido perfecto, o, simplemente, buscando el pu-
ro disfrute de una experiencia compartida.
FANATEC SPEEDSTER 2:
El Speedster2 presenta una combinacion de volante y peda-
les compatible con la lista siempre creciente de ttulos para
PlayStation y PlayStation2 de juegos de conduccion, entre
otros Gran Turismo 3: A-spec, Ridge Racer V y Formula One
2001. El Speedster2 incluye todos los botones standard de
una PlayStation as como el sistema de vibracion que le pro-
porcionan dos motores duales integrados en el mismo volante.
BOLSA PLAYSTATION2:
La bolsa ocial de PlayStation2, facilita la movilidad y pro-
teccion de esta consola. Ademas de un amplio espacio para
la PlayStation2 y accesorios, cuenta con un compartimento
con capacidad para guardar 5 DVDs. Este accesorio puede
parecer una tontera pero es una muestra clara de la implica-
cion de Sony en sacar adelante su producto y de dar soporte
original hasta en el mas mnimo detalle.
PORTA CDS PLAYSTATION2:
Este estuche cuenta con espacio para guardar 12 CDs y un
bolsillo especial para la tarjeta de memoria. Resistente por
fuera y acolchado por dentro, este porta CDs ocial de Sony
resulta un accesorio casi indispensable para cualquier usuario
de PlayStation2. Podemos hacer el mismo comentario que
antes.
Pese a la dicultad para su programacion la PS2 salio al mercado con mas de 30
ttulos disponibles. Los principales desarrolladores de juegos han desarrollado y estan
desarrollando juegos para la PS2. Acclaim, Activision, Capcom, Crave, Eidos, Elec-
tronic Arts, From Software, Infogrames, Interplay, Kemco, Koei, Konami, LucasArts,
Microids, Midas, Midway, NAMCO, Squaresoft, Rage Games, Rockstar, SCI, Swing,
Take2, Tecmo, THQ, Titus Interactive, Ubisoft y Virgin Interactive, entre otros.
1.3.3. Comparativa
La Tabla 1.2 muestra algunas consolas disponibles en el mercado en el a no de
presentacion de la PS2 y las consolas mas recientes. Los datos proporcionados por Sony
y Microsoft no son realistas, son los datos maximos, mientras que los de Nintendo y
Sega estan medidos en un juego real.
1.3.4. Que le falta a la consola
La verdad es que nos encontramos ante una maquina impresionante que nos ofrece
unas capacidades asombrosas. Sin embargo, no todo es tan maravilloso. Este monstruo
es un coloso muy difcil de gobernar. Sony no provee de unas herramientas adecuadas
1.3. LA CONSOLA DE VIDEOJUEGOS PLAYSTATION2 23
DC PS2 GAMECUBE XBOX
compa na SEGA SONY NINTENDO MICROSOFT
s. operativo Windows CE propio propio Windows
2000
procesador Hitachi SH4
Risc
Emotion En-
gine
Gekko IBM Pentium III
velocidad 200 Mhz. 300 Mhz. 405 Mhz. 733 Mhz.
procesador graco Power VR
100 Mhz.
Sony GS 150
Mhz.
ATI 200
Mhz.
V-25 300
Mhz.
polgonos por se-
gundo
3 millones 20 millones 20 millones 100 millones
resolucion maxi-
ma en pantalla
640x480 1280x1024 1280x1024 1920x1080
ancho de banda 0,8 gi-
gas/seg.
3,2 gi-
gas/seg.
3,2 gi-
gas/seg.
6,4 gi-
gas/seg.
memoria total 26 megas 38 megas 38 megas 64 megas
tarjeta de memo-
ria
2 megas 8 megas 8 megas 8 megas
canales de sonido 64 48 64 256
audio 3D disponi-
ble
NO NO S
I S
I
sonido AC3 dispo-
nible (DVD)
NO NO NO S
I
modem incorpora-
do
S
I / 33.6
Kbps
NO / 56
Kbps
NO / 56
Kbps cable-
modem
NO / 56
Kbps Ether-
net 100Mb
conexion en red NO NO NO S
I
almacenamiento GD-ROM
(1,2 gigas)
DVD 4x (4,7
gigas)
formato pro-
pio (1,5 gi-
gas)
DVD 5x (9,4
gigas)
puertos para man-
dos de control
4 2 4 4
DVD-video NO S
I NO S
I
disco duro NO S
I NO S
I (8gigas)
Cuadro 1.2: Principales caractersticas de la consola comparada con las que ofrecen sus
mas directas competidoras en el mercado.
24 CAP
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
de desarrollo y aventurarse en la empresa de programar un juego para PlayStation2,
ademas de ser una empresa intelectualmente muy costosa tambien lo es economica-
mente. Primero hay que inscribirse como desarrollardor ocial de Sony y rmar por los
ttulos que se vayan a publicar. Despues hay que comprar el kit de desarrollo que da
Sony que se denomina Sony Computer Entertainment Development Kit DTL-T10000,
como se muestra Figura 1.12. El coste por unidad es de aproximadamente 20 000
dolares americanos, lo que es un coste muy signicativo que lo hace prohibitivo para
usuarios particulares y peque nas e intrepidas empresas que quieran aventurarse en este
mundo, ademas, un solo kit de desarrollo se hace insuciente para un equipo serio y
completo de desarrollo de un juego.
Figura 1.12: PlayStation2 conectada al kit de desarrollo DTL-T10000.
El KIT contiene dos PS2 de desarrollo:
La PS2 TEST, es igual que una PS2 normal pero puede leer CD-R sin necesidad
de modchips.
La PS2 TOOL, es bastante mas grande que una PS2 normal debido al aumento
de los componentes con respecto a esta, entre las diferencias, destacan:
1. 128 MB de memoria principal
2. Disco duro
3. Tarjeta de red
Sony proporciona a los desarrolladores esta maquina de tal forma que compilan su
codigo y se ejecuta sobre el hardware de esta PS2. Sony solo proporciona el hardware y
las librerias,as como asesora y ejemplos. La escasa documentacion de la consola hace
que sea muy dicil programar esta. El paradigma de programacionde esta consola es
totalmetne diferente a programar un PC y se requieren unos desarrolladores con amplios
conocimientos de arquitecturas de computadores (y en particular de la aruiqtectuar de
la PS2) para ser capaz de sacar el rendimiento real de la consola. Una prueba clara de
ello es seg un los datos de los analisis de rendimiento ociales de Sony a fecha de 2003,
entre todos los juegos analizados todos anteriores a esa fecha, solo se haca un uso
del 2 % de la VU0 y solo el 56 % de la VU1.
Existen una serie de entornos de desarrollo comerciales pero estos suponen un
desembolso economico adicional y no necesariamente una mejora signicativa. Entre
ellos los dos mas conocidos:
1.3. LA CONSOLA DE VIDEOJUEGOS PLAYSTATION2 25
1. ProDG de Snsys. Tienen diferentes modulos, incluido uno muy interesante llama-
do proview que permite mediante el uso del interfaz rewire conectar una PS2
modelo DTL-H Test Unit a un pc. Snsys proporciona con el proview los archivos
de una iso que corre en esta PS2 a modo de programa monitor permitiendo la
comunicacion con el software que corre en el PC. Con este sistema se consigue
porder compilar en el PC y ejecutar directamente en la PS2 sin necesidad de estar
continuamente generando CDs por cada prueba. Tambien tiene heramientas de
debug que redirigen la salida al pc para facilitar el desarrollo.
2. CodeWarrior de Metrowerks. Al igual que Snsys nos proporciona un entorno de
desarrollo completo con multitud de herramientas.
Hace poco ha salido un compilador denominado VectorEE de Codeplay [3] que
aparenta ser la mejor herramienta de desarrollo ya que permite compilar directamente
codigo C y promete paralelizar el solo el codigo en las distintas unidades vectoriales del
EE. No tenemos datos sobre sus resultados.
Para adquirir cualquiera de estas plataformas de desarrollo propietarias hay que
ser desarrollador ocal de Sony.
Otro gran inconveniente de desarrollar para esta consola es que una vez que ten-
gamos desarrollado el software nos lo tiene que grabar Sony por los especiales sistemas
anticopia que posee la consola, con los gastos adicionales que ello conlleva. Todos los
discos los graba Sony en una fabrica en Salzburg, Austria. Prometen que no existen las
listas de espera para grabar las copias.
La Figura 1.13 muestra el interior de la fabrica situada Nagasaki, en la que se
puede ver la fabricacion del Emotion Engine y del Sintetizador Graco.
Figura 1.13: Planta de fabricacion de Sony en Nagasaki.
1.3.5. Algunos comentarios sobre la PlayStation2
((PlayStation 2 esta trazando una ruta hacia el futuro del entretenimien-
to digital en red. Al igual que PlayStation puso los videojuegos al alcance
26 CAP
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
de un mercado de masas sin precedentes, la combinacion de impresionantes
gracos digitales, magnco sonido y vdeo DVD de PlayStation 2, abrira las
puertas a una nueva forma de entretenimiento en el hogar)).
Ken Kutaragi,
presidente y director ejecutivo de SCE Inc.
((Yo me quede tan impresionado como vosotros. En cuanto la vi (la con-
sola PlayStation 2), pense: esto va rapidsimo! No puedo seguir este ritmo,
es alucinante. Lo que han logrado con PlayStation 2 se sit ua sencillamente
mas alla de toda posibilidad de comprension)).
((Acababa de terminar esta pelcula (La guerra de las galaxias Episo-
dio I: La amenaza fantasma) que es, bueno, tecnologicamente de lo mas
avanzado Y en eso estabamos, sintiendonos extremadamente satisfechos de
nosotros mismos, cuando pusieron este juguetito en la mesa, y resulto ser
todava mas potente que lo que habamos hecho. Lo que a nosotros nos
costo a nos alcanzar, estara dentro de un a no a disposicion de todo el mun-
do. Es impresionante)).
George Lucas,
director y guionista de cine
((Creo que, cuando se combine la potencia deI hardware de PS2 con
la de la imaginacion y de la narracion, el resultado nal sera fantastico, y
superara nuestras mas descabelladas fantasas)).
Phil Harrison,
vicepresidente de SCE America
((Los gracos en tiempo real de PlayStation 2 no tienen limitaciones.
Por eso eleg el color negro, porque representa la innidad del universo. El
azul representa inteligencia y vida)).
Teeiyu Goto,
legendario dise nador de PlayStation 2
((La herramienta necesaria para descubrir las nuevas, innitas y emoti-
vas experiencias que PlayStation 2 nos reserva es la imaginacion. No hay
metodo correcto ni erroneo. No hay resultado predecible. Cada viaje es
activo y unico, y depende solo de la imaginacion del usuario)).
David Patton,
director de marketing europeo de SCE Europe
((PlayStation 2 esta lista para revolucionar el sector del entretenimiento
de la misma manera que PlayStation revoluciono el sector de los juegos.
Namco considera que PlayStation 2 es la plataforma mas viable para la
explotacion de sus capacidades de desarrollo de software; Ridge Racer V y
Tekken Tag Tournament estaran disponibles en el da del lanzamiento, y
hay otros apasionantes proyectos en curso)).
Yashuhiko Asada,
director general de Namco
1.3.6. Curiosidades
Una prueba mas de que la consola PS2 esta en auge pese a sus ya 4 a nos de
mercado es que ha entrado tambien en ella la ebre del modding. Esto signica que
existe toda una comunidad interesada en realizarle mejoras. Podemos encontrar mas
1.3. LA CONSOLA DE VIDEOJUEGOS PLAYSTATION2 27
informacion sobre esto en [9]. La Figura 1.14 muestra los lmites de la imaginacion por
parte de los usuarios de Sony, que no temen destrozar la consola para variar el dise no
original.
Figura 1.14: Resultado de un modding por parte de un usuario de PlayStation2.
28 CAP
ITULO 1. DEFINICI
ON DE OBJETIVOS Y ESPECIFICACIONES
Captulo 2
Estudio del hardware: el
Emotion Engine
En este captulo realizaremos un estudio a fondo del centro de procesamiento
principal de la consola: el Emotion Engine, centro neuralgico de la potencia de com-
putacion de la que se ha dotado. Veremos los aspectos mas relevantes de las unidades
que conforman este n ucleo computacional.
2.1. Apendice. El EE a fondo
2.1.1. Introduccion
El Emotion Engine esta dise nado para hacer funcionar a la perfeccion juegos 3D.
Para ello, en vez de empe narse los ingenieros en mejorar estructuras de procesadores
de proposito general decidieron hacer un procesador especco para lograr mejor ren-
dimiento. La principal carga de procesamiento de un juego 3D es el renderizado de
las imagenes. En la Figura 2.1 veremos el esquema normal del cauce de renderizado y
como la estrcutura de la consola se adapta perfectamente a este cauce:
Figura 2.1: Cauce de renderizado y asociacion a una unidad funcional de la consola
Este cauce marca la arquitectura de la consola y explica la topologa de los buses.
El cauce de renderizado es un cauce de datos multimedia en una unica direccion y
que se puede realizar concurrentemente con la arquitectura de la PS2. La PS2 es una
29
30 CAP
ON DEL PROYECTO 55
Figura 3.5: Tareas de las que se compone la decodicacion de Ogg Vorbis
56 CAP
ON DEL PROYECTO 57
Figura 3.6: Entrelazado de los canales
ov clear: con esta funcion cerramos el chero y limpiamos los buers auxiliares
de la decodicacion.
Una vez probado el ejemplo y viendo que compila, tan solo queda cerciorarse
de que el procesador MIPS sera lo sucientemente potente como para decodicar el
chero. Para ello nos basta mirar el uso de la CPU por parte del programa de ejemplo
comentado, para hacernos una idea de los recursos computacionales que emplea en
la decodicacion. Como ya hemos comentado varias veces, el procesador central es
unico encargado de ejecutar el sitema operativo. Por tanto, toda la informacion que el
sistema operativo sea capaz de proporcionar sobre los procesadores que usa se referiran
unicamente a dicho procesador. Esto nos supone una ventaja para lo que pretendemos
realizar a continuacion, ya que podemos emplear una utilidad cualquiera que muestre el
uso de CPU por proceso para saber de forma aproximada que porcentaje del procesador
esta siendo usado por cada una de las tareas. Para esta labor nosotros usaremos el
afamado programa top. Este programa genera una tabla en la que muestra una lista de
procesos activos, ordenados seg un su ocupacion de CPU. Se puede encontar en http:
//www.groupsys.com/top/, y la Figura 3.7 muestra un ejemplo de su salida. Nuestra
aplicacion de ejemplo ocupa aproximadamente el 23 % de los recursos computacionales
del procesador, lo que supone una carga sucientemente baja para no tener que realizar
a priori ninguna optimizacion del codigo proporcionado por Xiph.
Figura 3.7: Un ejemplo de la salida mostrada por top
58 CAP
ON DEL PROYECTO 59
Figura 3.8: Orden de conguracion del dispositivo
Con espectrograma nos referimos al analisis espectral de la se nal, dividiendo frag-
mentos del sonido en trozos en los que analizaremos las frecuencias presentes, para
realizar un estudio estadstico de las frecuencias principales que estan presentes en ca-
da trozo. La Figura 3.9 muestra una se nal representada mediante su onda y su espectro
en frecuencias en la parte inferior.
Figura 3.9: Ejemplo de espectograma (abajo) y se nal de origen (arriba)
Lo primero que debemos hacer para poder contabilizar las frecuencias de la cancion
es un cambio de dominio. La onda que obtenemos al decodicar esta en el dominio
60 CAP
ON DEL PROYECTO 61
H(f) =
_
+
h(t)e
2ift
dt
h(t) =
_
+
H(f)e
2ift
dt
(3.1)
Transformada de Fourier sobre un conjunto de datos discretos
En la mayora de las ocasiones, la funcion h(t) esta muestreada a intervalos espa-
ciados en el tiempo. Si usamos para denotar el intervalo de tiempo entre muestras
consecutivas, la secuencia de valores muestreados se muestra en la ecuacion (3.2). El
inverso de se denomina tasa de muestreo.
h
n
= h(n) n = . . . , 3, 2, 1, 0, 1, 2, 3, . . . (3.2)
Como sabemos, para cualquier existe una frecuencia especial, f
c
, denominada
frecuencia crtica de Nyquist, dada por la expresion
f
c
1
2
(3.3)
Esta frecuencia es importante por dos razones. Una de ellas es por el teorema de
muestreo, que viene a determinar la frecuencia mnima a la que hay que muestrear una
se nal para poder ser reconstruda sin error. La otra razon ocurre cuando se muestrea
una se nal sin cumplir el teorema anterior. El efecto obtenido es que toda la densidad de
potencial espectral que cae fuera del rango f
c
< f < f
c
se desplaza de forma erronea
a ese rango. Cualquier componente en frecuencia fuera de dicho rango es transladado
a ese rango al muestrear. La unica opcion contra este efecto es conocer el rango de la
funcion a muestrear y muestrear a la suciente velocidad para proporcionar al menos
dos puntos por ciclo de la frecuencia mas alta presente.
Transformada Discreta de Fourier
Podemos estimar la transformada de Fourier desde un n umero nito de puntos
muestreados de la curva original. Supongamos que tenemos N muestras, como expre-
samos en
h
k
h(t
k
), t
k
k, k = 0, 1, 2, . . . , N 1 (3.4)
Con N valores de entrada, solo obtendremos N valores independientes a la salida,
por lo que en lugar de calcular H(f) en todo el rango de f entre f
c
y f
c
, calcularemos
el valor de H(f) para dichos puntos concretos, como mostramos en
f
n
n
N
, n =
N
2
, . . . ,
N
2
(3.5)
Una vez aproximada la integral por una suma discreta, obtenemos la relacion (3.6),
llamada transformada discreta de Fourier, a la que denotaremos como H
n
. Como puede
apreciarse, no depende de ning un parametro dimensional, como era la escala temporal
.
H
n
N1
k=0
h
k
e
2ikn/N
(3.6)
62 CAP
k=0
h
k
W
kn
(3.9)
Tenemos un vector de h
k
multiplicado por una matriz cuyo (n, k)-esimo elemento
es la constante W elevado a la nk potencia. Dicha multiplicacion produce un vector
3.2. IMPLEMENTACI
ON DEL PROYECTO 63
cuyas componentes son las H
n
. Esta multiplicacion requiere N
2
multiplicaciones com-
plejas, y un menor n umero de operaciones para generar las potencias de W necesarias.
Por tanto, parece que la transformada discreta de Fourier es de (N
2
). Sin embargo, se
puede calcular en (Nlog
2
N) con el algoritmo llamado transformada rapida de Fourier
(FFT).
En 1942, Danielson y Lanczos probaron que una transformada discreta de longitud
N puede ser reescrita como la suma de dos transformadas discretas de Fourier, cada
una de longitud N/2. Una tiene los puntos pares y otra los puntos impares de la original.
La prueba es La demostracion es la siguiente:
F
k
=
N1
j=0
e
2ijk/N
f
j
=
N/21
j=0
e
2i(2j)k/N
f
2j
+
N/21
j=0
e
2i(2j+1)k/N
f
2j+1
=
N/21
j=0
e
2ijk/(N/2)
f
2j
+W
k
N/21
j=0
e
2ijk/(N/2)
f
2j+1
= F
e
k
+W
k
F
o
k
(3.10)
Lo bueno de este lema es que puede usarse recursivamente. Habiendo reducido el
proglema de calcular F
k
al de calcular F
e
k
y F
o
k
, podemos hacer la misma reduccion
para F
e
k
, transformandolo en su N/4 entrada impar y N/4 entrada par. As, podemos
denir F
ee
k
y F
eo
k
como la transformada discreta de Fourier de los puntos que son
los par-par y par-impar en las sucesivas subdivisiones de los datos. Por razones de
sencillez, supondremos simpre que N es una potencia de 2. As, podremos aplicar esta
subdivision hasta que tengamos transformaciones de logitud 1. La transformada en ese
caso es simplemente la operacion identidad que copia una entrada en una salida. Para
cada patron de log
2
N de e y o, hay una transformada de un punto que es simplemente
uno de los n umeros de entrada f
n
F
eoeeoeooee
k
= f
n
para alg un n (3.11)
El siguiente paso es determinar que valor de n corresponde a que patron de e y o en
la ecuacion 3.11. La solucion es invertir la secuencia de e y o, y sustituir e = 0 y o = 1,
y el n umero formado sera el valor en binario de n. Supongamos que cogemos el vector
original de valores f
j
y lo reordenamos en su orden inverso de bits, como muestra la
Figura (3.12), obteniendo un vector ordenados seg un el inverso de j. Sobre este vector,
la aplicacion recursiva del lema de Danielson-Lanczos es extraordinariamente sencilla.
Podemos combinar parejas adjacentes de puntos para obtener transformaciones de
dos puntos, y combinamos parejas adjacentes de parejas para obtener transformadas
de cuatro puntos, y as hasta la primera y segunda mitad de todo el conjunto de
datos se combine en la transformada nal. Cada combinacion conlleva un orden de N
operaciones, y son log
2
N combinaciones, lo que hace un total de Nlog
2
N.
64 CAP
ON DEL PROYECTO 65
Familiaridad con la API de OpenGL: poseemos cierta experiencia con el sistema
de programacion graco OpenGL, lo que repercute en una gran sencillez a la
hora de desarrollar un prototipo graco en el que mostrar un avance del efecto
producido por el algoritmo de caracterizacion de sonido.
Independencia del hardware y la programacion nativa de la consola: este punto
quizas sea el mas importante. Nos referimos a la posibilidad de desarrollar el
algoritmo que generara a su salida una serie de propiedades que usaremos para
representar gracamente un patron que identique las caractersticas del sonido
sin tener que lidiar de momento con el hardware de dibujo de la consola, esto
es, el sintetizador graco. Con esto conseguimos comprobar que resultado se
obtiene en el algoritmo, y desligar completamente los errores de programacion
del mismo a los errores de programacion relativos al apartado graco. Dado
nuestra inexperiencia con este hardware especco, hemos sido realistas al pensar
que el n umero de errores de programacion en este apartado seran numerosos y
su desarrollo sera lento, pues supone la etapa de aprendizaje mas dura a priori.
Por todo esto, preferimos aislar todo lo posible los errores de otras fuentes para
evitar errores en cadena.
Como comentamos en la itroduccion a la FFT, tener un n umero de muestras
N potencia de dos facilita mucho la aplicacion de las propiedades de recursividad,
lo que hace que sea mas eciente de implementar. La implementacion usada en el
XMMS hace uso de esta propiedad, como era logico suponer. El tama no concreto para
dicha implementacion es de 512. Los valores de salida deben ser tratados para poder
clasicarlos en los conjuntos de datos que usaremos nosotros a modo de barras.
Lo primero que necesitamos hacer es convertir los datos de salida de la FFT
para nuestro uso. Aplicando ese algoritmo obtenemos una salida en frecuencia, que
debemos adaptar a nuestros intereses. El primer paso consiste en escalar el rango de
valores que obtenemos de la FFT a un rango que nosotros podamos manipular. Primero
describiremos el efecto que pretendemos obtener, antes de entrar en los detalles del
procesamiento de calculo.
La intencion inicial es obtener un graco de bandas en el que quede representado
el espectro de la se nal. Como disponemos de un n umero bastante limitado de barras
para representar un espectro sucientemente amplio de frecuencias, debemos agrupar
valores de frecuencias en conjuntos. Iremos contabilizando el n umero de apariciones
en cada ((conjunto de frecuencia)) para un determinado fragmento de tiempo. Este
valor contabilizado ya supone una medicion en bruto que nos es util a la hora de
denir un espectro de bandas. Teniendo una medida sobre la aparicion de cada banda
de frecuencias considerada, podemos representar proporcionalmente a dicha medida
cada una de las bandas. As, como muestra la Figura 3.13, podramos dibujar una
altura diferente a una primitiva (en este caso un triangulo), proporcional al valor de
dicho conjunto. Si notamos a las frecuencias como f, podemos expresar las bandas de
frecuencia como
=
f
k
, k cte (3.12)
siendo k el valor que determina el ancho de cada ((banda de frecuencia)).
El rango completo de valores obtenido por la FFT es demasiado grande para
poder clasicarlo directamente en ((bandas de frecuencia)). Tengamos en mente que
aproximadamente el 80 % de los valores pertenecen al primer 15 % del rango de abscisas.
Si hicieramos una division lineal, en las primeras barras concentraramos casi todos los
valores, provocando una saturacion en ellas y una carencia de valores en las restantes.
66 CAP
, siendo > N.
Por tanto, para todo [0, 1], una salida cualquiera de la FFT tras la norma-
lizacion, le corresponde un ((conjunto de frecuencia))
ON DEL PROYECTO 67
Gracias a la utilizacion de un historico adaptativo con el que ir comparando la evo-
luci on de la cancion evitamos la necesidad de denir empricamente una cota superior
de energa para la que determinaramos que se produce un golpe de intensidad, con el
consiguiente problema producido por la saturacion posible en los pasajes muy energi-
cos. Al ser dinamico, evitamos la posible saturacion, ya que aislamos la componente
media de energa.
Nosotros emplearemos un algoritmo de deteccion de cadencia descrito por Frederic
Patin, en concreto el algoritmo mas simple de los que describe en su artculo [42],
aplicando las optimizaciones pertinentes. Basicamente se trata de calcular la energa
del buer que consideramos como sonido en cada momento, un buer de longitud 1024
muestras. Sean y los buers de los canales derecho e izquierdo, podemos calcular
la energa como
=
stereo
=
=
i
0
k=i
0
([k]
2
+[k]
2
) (3.13)
Calculamos la energa local media con el buer del historico de energa E.
Deseamos registrar un historico de energa de aproximadamente un segundo de du-
racion. Supondremos que la m usica esta muestreada en calidad CD, lo que conlleva
unas 44100 muestras por segundo. Como hemos dicho, cada buer que decodicamos
de audio contiene 1024 muestras, lo que implica que necesitamos 44100/1024 43
valores. Por tanto, calculamos la energa local media haciendo
=
1
43
43
i=0
(E[i])
2
(3.14)
Tras calcular , desplazamos el buer E un lugar a la derecha para dejar espacio
a la nueva muestra, desechando el valor antiguo. Apilamos pues la nueva energa
en E[0]. Ahora solo debemos comprobar si se produce o no un golpe de ritmo. Para
ello, solo resta comparar con , donde es una constante umbral de sensibilidad.
Este valor ajusta la sensibilidad global del algoritmo a la deteccion de golpe de ritmo.
Cuanto mayor sea , mas variacion de la energa se requiere para detectar el cambio
como ritmo. Empricamente se demuestra que un valor = 1, 3 es acertado en la
mayora de los casos. Si obtenemos que > , podemos decir que hemos detectado
un golpe de ritmo. En la Figura 3.14 hemos representado un fragmento de una cancion
en su representacion de onda, y las cadencias detectadas.
3.2.5. Reimplementacion del plugin graco
Antes de comenzar la programacion de las unidades vectoriales vamos a migrar el
prototipo a la consola. Para ello no tenemos mas que eliminar toda la parte a nadida
para la representacion. Teniendo una version de prototipo minimizada en la consola,
comenzamos a construir la base sobre la que implementaremos la aplicacion nal. Todo
el desarrollo independiente del hardware de la maquina se ha acabado, y solo resta la
parte que implica una programacion del hardware.
Como hemos dicho, el primer paso es formar la base sobre la que integrar el
programa en C para el MIPS con el programa en ensamblador para las VU. Tras realizar
algunas pruebas para encontrar que programa de ejemplo contena una estructura y
unos requisitos mas parecidos para nuestro proposito, descartamos las demos de la VU
Demo Coding Contest [15], ya que suponan demasiadas limitaciones en cuanto a lo
68 CAP
ON DEL PROYECTO 69
fragmentos, indicando la nalidad de dichas lneas. Se omiten las partes de declaracion
de variables y semejante tipo de codigo, que pueden encontrarse en los cheros fuente
asociados y no requieren de ninguna explicacion.
Lo primero que debemos hacer es abrir cada una de las unidades que vamos a
usar. Para ello hacemos uso de las llamadas que proporciona la biblioteca libps2dev, y
abrimos el sintetizador graco (GS) y las dos unidades vectoriales (VU0 y VU1).
// abrimos el GS, VU0 y VU1
g fd gs = ps2 gs open(1);
g vpu0 = ps2 vpu open(0);
g vpu1 = ps2 vpu open(1);
// pasamos a modo graco
ps2 gs vc graphicsmode();
Tras esto, lo que hacemos es cargar en memoria el codigo objeto del programa a
ejecutar en la unidad vectorial. En nuestro caso, dicho chero se llama basic.elf.
// cargamos el programa de la VU1
vfd = vpuobj open("basic.elf", O DATA PS2MEM);
if (vfd == NULL) {
perror("vpuobj_open");
release();
exit(1);
}
Ahora realizamos una serie de pasos referidos al apartado graco. Primero con-
guramos el sintetizador graco con una serie de parametros que determinan el modo
de vdeo a generar. Como sabemos, la consola es apaz de generar distintos modos
de vdeo, tanto a resolucion (640x480,800x600. . .) como a formato (PAL, NTSC,
VGA. . .). Despues conguraremos el doublebuer, y crearemos cada uno de los buers
de pantalla a utilizar.
// reseteamos el GS
ps2 gs reset(0, g inter, g out mode, g mode, g resolution,
g refresh rate);
next2k = ps2 gs set dbu(&g db, g psm, gp>width, gp>height,
(g zbits == 0) ? 0 : PS2 GS ZGREATER,
g zpsm, 1);
// denimos los dos buers
*( u64 *)&g db.clear0.rgbaq = PS2 GS SETREG RGBAQ(0x00, 0x00, 0x00, 0x80,
0x3f800000);
*( u64 *)&g db.clear1.rgbaq = PS2 GS SETREG RGBAQ(0x00, 0x00, 0x00, 0x80,
0x3f800000);
Una vez denido lo anterior, limpiamos el buer y esperamos la sincronizacion con
el procesador principal, para continuar cuando la entidad graca este lista. Tras esto,
comenzamos la visualizacion graca.
// clear back buer
ps2 gs put drawenv(&g db.giftag1);
70 CAP
ON DEL PROYECTO 71
Introduccion a las unidades vectoriales
Llega por n el turno de la unidad vectorial. Las unidades vectoriales poseen dos
cauces de instrucciones, ya que son capaces de ejecutar dos instrucciones por ciclo de
forma simultanea. Sin embargo, ambos cauces no son simetricos, es decir, no todas las
instrucciones se pueden ejecutar en ambos. Hay algunas instrucciones que solamente
se pueden ejecutar en uno de ellos.
Figura 3.15: Arquitectura de las VU dentro del Emotion Engine
Como se aprecia en el esquema, las diferencias principales en la arquitectura de
las unidades VU0 y VU1 radican en la capacidad de la memoria de datos y la memoria
de programa, as como la carencia de una Unidad de Funciones Elementales (EFU) por
parte de la VU0. La otra caracterstica principal que hace que sean tan diferenciadas en
cuanto a uso viene determinada por las conexiones a las unidades circundantes. Como
se puede apreciar en la Figura 3.15, la VU0 esta unida directamente al EE, siendo lo que
se denomina su COP2 (su segundo coprocesador de calculo). Por contra, la memoria
de la unidad VU1 esta conectada al GIF (el interface hacia el sintetizador graco), y
los registros de la VU1 estan ((mapeados)) a la memoria de la unidad VU0. Una vision
mas detallada de una unidad vectorial puede contemplarse en la Figura 3.16.
FMAC: realiza suma, resta, multiplicacion y suma-producto sobre n umeros o-
tantes. Hay cuatro unidades para realizar ecientemente la operacion sobre vec-
tores de puntos en el plano (x, y, z, w).
FDIV: realiza division y raz cuadrada en aritmetica otante. El resultado se
almacena en el registro Q.
LSU: controla la carga/almacenamiento de la memoria de la VU. Debe realizar-
se de 128 en 128 bits, aunque las componentes del vector (x, y, z, w) pueden
enmascararse para no ser alteradas.
IALU: realiza computos sobre los n umeros enteros de 16 bits.
72 CAP
ON DEL PROYECTO 73
Micro modo (VU0/VU1) Macro modo
Operacion Opera como un procesador indepen-
diente
Opera como coprocesador del MIPS
Codigo de ope-
racion
Instrucciones LIW de 64 bits Instrucciones MIPS COP2 de 32 bits
Conjunto de ins-
trucciones
Instrucciones superiores + inferio-
res (pueden especicarse simultanea-
mente), EFU (solo la VU1), de con-
trol de unidades externas (solo la
VU1)
Instrucciones superiores, inferiores
(solo una parte), instrucciones
COP2 de transferencia (VCALLMS,
VCALLMSR)
N umero total de
instrucciones
127 instrucciones 90 instrucciones
EFU Se puede usar como opcion (solo
VU1)
No hay soporte
Registros 32 registros otantes de 128 bits, 16
registros enteros, registros especia-
les: ACC, I, Q, R {,P}
32 registros otantes de 128 bits, 16
registros enteros, registros especia-
les: ACC, I, Q, R y 16 registros de
control
Generacion de codigo objeto para la VU
Hemos mencionado que las unidades vectoriales disponen de dos unidades de ejecu-
cion, tal y como mostraba la Figura 3.16. Esto implica la emision de dos instrucciones
por ciclo, por lo que a la hora de programar se deben especicar concurrentemente
ambas instrucciones.
A continuacion mostraremos un ejemplo de la forma de programacion de estas
unidades, extrada del manual proporcionado por Sony para las unidades vectoriales
[30].
MULAw.x ACCx, VF16x, VF14w LQI VF17, (VI04++)
MSUBw.x VF16x, VF01x, VF14w LQI VF18, (VI05++)
MULAw.y ACCy, VF16y, VF14w LQI VF19, (VI04++)
MSUBw.y VF16y, VF01y, VF14w LQI VF20, (VI05++)
MULA.xyzw ACC, VF01, VF17 RNEXT VF16z
Cada columna de instrucciones corresponde a una unidad de ejecucion. Como
vemos, se especican en parejas. Cuando se debe esperar a la nalizacion de un cauce
para poder seguir computando, se emplea la instruccion NOP para rellenar el cauce que
ha de permanecer ocioso.
Como se puede intuir, este metodo de programacion dista mucho de ser comodo,
y es bastante propenso a errores y supone una gran dicultad a la hora de generar
mantenible y legible, ya que hay que tener en cuenta dos cauces distintos de codigo al
mismo tiempo. Tambien es difcil de editar debido a la naturaleza de los editores, ya
que la insercion de una instruccion en una columna supondra tener que modicar la
otra columna por completo de forma manual para dejarla intacta si no se desea rellenar
con una instruccion de NOP el hueco nuevo formado.
Como Sony es consciente de todo esto, y sabe ademas que una de las propiedades
necesarias para la difusion de su consola es la acogida de los programadores, se en-
cargo de programar un preprocesador para la unidad vectorial, que es lo que nosotros
usaremos. Se trata de VCL [31], cuya nalidad es la de procesar un chero ensambla-
dor secuencial con ciertas directivas especiales, y convertirlo en un chero ensamblador
con dos cauces de instrucciones en paralelo, optimizando fuertemente el codigo, a un
cuando es de cierta complejidad. A continuacion presentamos un extracto de un codi-
go ensamblador correspondiente a VCL, para apreciar la diferencia en complejidad de
74 CAP
ON DEL PROYECTO 75
Mis valores, Mis valores1: representan un conjunto de valores que se usaran
posteriormente para los calculos. La anchura de las barras y la deteccion de la
cadencia forman parte de estos valores, entre otros.
Mis barras1, Mis barras2: corresponden a dos vectores de valores, cada uno
de ellos de longitud N, siendo N el n umero de barras a dibujar. Cada valor i-
esimo representa al ((conjunto de frecuencia))
i
, ponderado por una constante
s de escalado, determinada por la representacion graca de la consola.
El trozo de codigo que reeja todo lo anteriormente expuesto es:
.data
.DmaPackVif 0
.include "vumacros.h"
.global My dma start
.global My matrix
.global My cube start
.global My dma next
.global Mis valores
.global Mis valores1
.global Mis barras1
.global Mis barras2
Seguidamente denimos el inicio del codigo a ejecutar, My dma start. Como se
puede observar, basicamente es la inclusion del codigo vsm obtenido del programa
basic.vcl, encapsulado en una trama DMA.
My dma start:
.align 0
DMAcnt *
MPG 0, *
.include "basic.vsm"
.EndMPG
.EndDmaData
La siguiente seccion comienza precedida del smbolo global denido anteriormente
como My dma next, que no hemos tenido a bien de denir con anterioridad. El nombre
en realidad es simplemente herencia del original, aparecido en el codigo de ejemplo.
Como puede observarse, es una mera denicion adicional para My cube start. Se-
guidamente se dene lo que s es importante en esta seccion de codigo: el smbolo
My matrix. Este smbolo global tampoco ha sido explicado con anterioridad. Repre-
senta la matriz de transformacion de vista entre el mundo 3D y su proyeccion asociada
2D. Mas informacion sobre las transformaciones de vista se explican en el apendice
de visionado graco. Como podemos observar atentamente en la sentencia unpack, el
cuarto argumento es un 0. Este argumento determina la posicion que ocupa el valor
inmediatamente asignado dentro de la memoria de datos de la VU. En este caso, la
primera la de la matriz (recordemos que una direccion de memoria corresponde a un
cuarteto (x, y, z, w) de valores) estara en la posicion de memoria 0. La macro fwzyx
sirve para especicar un cuarteto de valores en coma otante en el orden (w, z, y, x).
Hay que tener esto en cuenta cuando se intenta observar la matriz usada.
76 CAP
ON DEL PROYECTO 77
.EndDmaData
DMAend
Una vez comentada la estructura de cheros necesaria para la generacion del
codigo objeto, podremos comprender los pasos que se muestran en la Figura 3.17, que
ilustra la generacion de un chero objeto para ser cargado en la unidad vectorial.
Figura 3.17: Proceso necesario para obtener el codigo objeto desde el chero ensam-
blador.
Introduccion al sintetizador graco
Antes de explicar la programacion del sintetizador graco que necesitamos para
mostrar nuestro graco de barras por pantalla, haremos una breve introduccion al
sintetizador graco con la nalidad de entender un poco que conforma y como funciona
dicha unidad. Si se desea una informacion mas detallada y exahustiva, remitimos como
siempre al manual [29]. La Figura 3.18 muestra un esquema de su estructura interna.
Ahora comentaremos brevemente que es cada bloque denotado en dicho esquema,
para poder identicarlos.
Host I/F: es el interface encargado de transferir datos con el procesador. La
transferencia del buer y de la informacion de dibujado pasan por este interface.
Setup/Rasterizing (preprocesamiento): se encarga de generar las formas que se
dibujaran como puntos basandose en la informacion recibida sobre los vertices,
calculando a su vez su valor RGBA, valor Z y niebla para cada pixel.
Pixel Pipeline: realiza procesos como texturizacion, niebla, transparencias, y
determina el color nal con el que se debe dibujar basandose en la informacion
calculada en el Rasterizing. Puede procesar hasta dieciseis pixels concurrente-
mente.
Memory I/F: es el modulo encargado de leer y escribir en la memoria local
del sintetizador graco. Escribe los valores RGBA+Z del pixel a dibujar al nal
78 CAP
ON DEL PROYECTO 79
de la operacion de dibujado, lee de memoria los valores de los pixels del frame
buer que se usan para las transparencias, y lee los valores RGBA de la imagen
representada.
Local Memory: se trata de la memoria local del sintetizador graco, compuesta
por 320Mbit, que contiene el frame buer, Z buer, las texturas y el CLUT (Color
Look Up Table o paleta de colores). Dispone de un puerto de lectura de 1024
bits y un puerto de escritura de 1024 bits para dibujar y acceder al frame buer
y al Z buer, y un puerto de 512 bits para leer la textura.
PCRTC: muestra el contenido del frame buer en el formato especicado.
Un detalle muy a tener en cuenta con el sintetizador graco para evitar problemas
mas adelante es el sistema de coordenadas que emplea. Es distinto al ((standard)) en
bibliotecas y sistemas de representacion habituales, lo que puede llegar a crear una
confusion si no se ha tenido en cuenta.
Sistema de Coordenadas de Mundo: usa una representacion de 16 bits de coma
ja, es decir 12 bits para la parte entera y 4 bits para la parte decimal, permitiendo
un rango de 0 a 4095,9375. Es decir, la parte de mundo que quedara plasmada
en la pantalla es la que corresponde a la ventana denida por este rango, tanto
horizontal como vertical. Por ejemplo, el punto central de la pantalla sera el
punto (2048, 2048). Hay que tener cuidado con esto cuando se quiera visualizar
algo.
Sistema de Coordenadas de Dispositivo: el punto de origen se sit ua en la esquina
superior izquierda del rectangulo de visualizacion.
La Figura 3.19 representa el ujo de dibujado necesario para convertir la infor-
macion que recibe del procesador (((host))) en datos representables gracamente por
pantalla. Los pasos que se siguen son:
Setup (Preprocesamiento): tanto el gradiente como los valores iniciales del al-
goritmo digital diferencial (DDA) necesarios para dibujar primitivas se calculan
basandose en la informacion de vertices que recibe desde el ((host)). Si la primi-
tiva graca es un triangulo, el gradiente del valor RGBA, el valor Z, el valor de
textura, y el valor de niebla en las tres aristas y en el scan line se calculan.
Rasterizing (DDA): los pixels correspondientes a una primitiva se calculan usan-
do el DDA. De forma concurrente se generan 8 o 16 pixels. El valor RGBA, valor
Z, de textura y la niebla para cada pixel se calculan del gradiente obtenido en la
etapa de preprocesamiento anterior.
Texture Mapping: la textura se aplican sobre los pixel. El color del pixel se
determina aplicando la funcion de textura al valor RGBA de la textura ledo de
la memoria, y al RGBA calculado por el DDA.
Antialiasing: el valor alfa se sustituye por la cobertura de pixel calculada por el
DDA (la cobertura del pixel se reere a la proporcion de pixel ocupada por el
lado de la primitiva teorica). Los lados se suavizan cuando las transparencias se
implementan usando este valor alfa.
Fogging: el valor RGB y el valor de niebla obtenidos del bloque de aplicacion de
textura se mezclan en concordancia con el valor de niebla del punto calculado
por el DDA.
80 CAP
ON DEL PROYECTO 81
Pixel Test: pintar un punto o no queda determinado por sus valores XYZ y
RGBA. Se realizan cuatro comprobaciones para determinarlo (recorte, prueba
de transparencia, transparencia destino y comprobacion de profundidad), que se
realizan una a una.
Alpha-blending: la mezcla del color RGB de un pixel y el valor RGB del frame
en memoria se implementa seg un el valor alfa del pixel o el valor alfa del frame
en memoria.
Formatting: se convierte el formato de los valores del pixel al formato usado en
el frame buer. Se suavizan o truncan los colores si es necesario.
Memory I/F: la lectura/escritura sobre la memoria se realiza a memoria local
en el chip. Las operaciones principales son: escribir pixels (RGBA,Z) en memoria
tras una operacion de pixel, leer valores de pixels al frame buer desde memoria,
y leer valores RGBA de memoria para representarlos.
Environment Register: conforman una serie de registros que contienen infor-
macion necesaria para el dibujado.
El hardware de la consola permite dibujar primitivas gracas directamente. Tiene
un hardware sucientemente complejo como para permitir que trabajemos en un nivel
de abstraccion superior a puntos en la pantalla. Mostraremos las distintas opciones que
soporta el sintetizador graco, con una breve descripcion aclarativa.
Punto (point):
Un punto suelto, dibujado con la informacion de
un vertice.
Lnea (line):
Una lnea independiente que une dos puntos,
dibujado con la informacion de dos puntos.
Lneas encadenadas (linestrip):
Sucesion de lneas que comparten el punto nal
como inicial de la siguiente, de forma encade-
nada. La primera necesita informacion de dos
puntos, y el resto solo de uno mas.
Triangulo (triangle):
Un triangulo independiente, formado con la in-
formacion de tres vertices.
Triangulos encadenados (trianglestrip):
Una sucesion de triangulos que comparten un la-
do con el triangulo siguiente. El primer triangulo
necesita informacion de tres vertices, y el resto
solo necesita un vertice por triangulo.
82 CAP
ON DEL PROYECTO 83
Elemento Registro Vertex
Kick
Drawing
Kick
Coordenadas XYZ2 S S
Coordenadas y coecientes de niebla XYZF2 S S
Coordenadas XYZ3 S No
Coordenadas y coecientes de niebla XYZF3 S No
Color y parametro Q de las coordenadas
de textura
RGBAQ No No
Parametros ST de las coordenadas de
textura
ST No No
Coordenadas UV del texel UV No No
Coeciente de niebla FOG No No
Cuadro 3.2: Registros existentes para especicar informacion asociada a un vertice.
Figura 3.20: Desplazamiento realizado en la cola de vertices como consecuencia de un
vertex kick.
3. Vertex Kick: si los registros usados tenan la funcion vertex kick la informacion
concerniente al vertice especicada hasta ese momento se sit ua en la cola de
vertices, y la cola avanza una posicion. A este proceso se le conoce como vertex
kick. La Figura 3.20 muestra una ilustracion de lo que supone este proceso.
4. Comenzar el dibujado (drawing kick): cuando toda la informacion necesaria
esta en la cola de vertices, el dibujado comienza.
Programa de la VU1: basic.vcl
En esta seccion detallaremos el codigo que compone el programa de la VU1, para
entender que hacemos en dicha unidad. Como hemos venido haciendo, explicaremos
fragmentos de codigo, relevando detalles signicativos del mismo.
Lo primero que haremos sera denir las constantes que referenciaran a las zonas
de memoria de datos que usamos en la VU1. Como ya vimos, escribamos algunos datos
tales como matrices o las barras en la memoria de datos de la VU1. Aqu denimos
84 CAP
ON DEL PROYECTO 85
unos punteros a dichos atributos para cargarlos posteriormente. Como podemos obser-
var, en la variable GifTag hemos almacenado el GIF, y la variable iKick apunta a la
primera direccion de memoria posterior al GIF libre. Es decir, tras los cuatro colores
que denieramos en su momento. En esa posicion guardamos el GIF mediante la ins-
truccion de almacenamiento (sq en este caso). Tal y como rezan los comentarios del
codigo, nos limitamos posteriormente a cargar la informacion que rellenamos en otro
chero de datos.
START0:
xtop iBase
lq GifTag, 0(iBase) ; carga el tag GIF
iaddiu iVert in, iBase, 1 ; puntero al vertice
iaddiu iColor in, iVert in, 1 ; puntero al color
iaddiu iKick, iColor in, 4 ; puntero a memoria libre para grabar
; nuestro tag GIF
sq GifTag, 0(iKick) ; graba el GIF
lq vert in, (iVert in) ; carga vertice
lqi color, (iColor in++) ; carga color 1
lqi color2, (iColor in++) ; carga color 2
lqi color3, (iColor in++) ; carga color 3
lq color4, (iColor in) ; carga color 4
Prosiguiendo los calculos que se realizan una unica vez por fotograma, nos encon-
tramos el paso de coordenadas de mundo a coordenadas de ((dispositivo)). El proceso
consiste en multiplicar la matriz de transformacion por el vector que contiene las coor-
denadas del punto, y normalizar seg un la coordenada W. Para ello usamos la macro
vec x mat para hacer T /, y en lugar de dividir por W, multiplicara por el inverso.
Recordemos que el registro otante vf00, al igual que el entero vi00 contiene valores
constantes en el, que no se pueden modicar. Por tanto, vf00 contiene el cuarteto
(0, 0, 0, 1) siempre. Aqu se usa la coordenada w, es decir, el 1. Estamos calculando
el inverso, ya que dividimos 1 por el valor. Con este valor (que resulta ser 1/W),
normalizamos el resultado obtenido en el producto anterior.
; calcula la transformacion de geometria y normaliza por W,
; guardando el resultado en oatScreenVec
vec x mat trans vert, vert in, Transform
div q, vf00[w], trans vert[w]
mulq oatScreenVec, trans vert, q
Como el vertice de referencia que usamos es el centro de la pantalla, y queremos
pintar barras ordenadas en frecuencia, lo mas sencillo para simplicar el bucle futuro
es movernos unicamente en una direccion, en lugar de tener que hacerlo en ambas.
Por tanto, lo que hacemos es desplazar la posicion de origen a uno de los lados, para
que el bucle solo tenga que ir desplazando en el contrario. En este caso, decidimos
mover el origen a la izquierda (unos 240 pixels), por lo que pintaremos de izquierda
a derecha las barras. Denimos el n umero de iteraciones que hara el bucle en 15, ya
que pintaremos cuatro barras por vuelta y canal, lo que hace un total de 60 barras por
canal. En iBarras e iBarras2 mantendremos el puntero a los datos del canal derecho
e izquierdo respectivamente.
86 CAP
ON DEL PROYECTO 87
El dibujo de las primitivas se realiza en esta parte. Lo que
hacemos es calcular la posicion de cada vertice relativa a la
posicion de referencia debidamente desplazada seg un la ca-
dencia anterior. As, denimos los seis vertices que conforman
nuestra primitiva, cada uno de ellos con la correspondiente
informacion relativa al color. La distribucion de los seis verti-
ces se muestra en la gura de la derecha. Como se aprecia,
tras grabar el valor del vertice o color, incrementamos los
respectivos punteros. Disponemos de dos colores por canal,
que generaran un gradiente. Los vertices de la base (1, 2 y
6) usan uno, y los del techo (3, 4 y 5) usan el otro.
; crear primitivas
; vertice 1
move oatX1Y1, oatScreenVec
ftoi4 ScreenVec, oatX1Y1
sq ScreenVec, 0(iXYZF2 out) ; graba XYZF2
iaddiu iXYZF2 out, iXYZF2 out, 2
; color
ftoi0 screenCol, color
sq screenCol, 0(iRGBAQ out)
iaddiu iRGBAQ out, iRGBAQ out, 2
Proporcionada la informacion relativa a los seis vertices que forman nuestra pri-
mitiva, podemos enviarla a la cola de vertices para que sea dibujada. Antes de eso,
desharemos el desplazamiento que realizamos para separar las barras verticalmente,
como efecto especial para representar la cadencia de la cancion. La instruccion xgkick
manda la informacion de los vertices al sintetizador graco. Adelantamos el puntero a
una zona libre, y escribimos el nuevo GIF para denir el canal que resta.
; deshace la subida para el beat detection
add.y oatScreenVec, oatScreenVec, MiValor2
; manda el GIF al GS y mueve el puntero a una posicion libre
xgkick iKick
iaddiu iKick, iKick, 25
sq GifTag, 0(iKick) ; graba el tag GIF
Una vez hemos terminado de pintar la barra de un canal, dibujaremos la barra del
canal restante antes de pasar a dibujar la siguiente barra. Iniciamos punteros de color y
posicion, desplazamos esta vez hacia abajo seg un la cadencia determine, y cargamos el
valor de esta barra, contenido en barrasOrig2.x. A partir de aqu, volvemos a hacer lo
mismo de antes: comenzamos a denir los seis vertices que conformaran el rectangulo.
iaddiu iRGBAQ out, iKick, 1 ; puntero para grabar los RGBAQ
iaddiu iXYZF2 out, iKick, 2 ; puntero para grabar los XYZF2
add.y oatScreenVec, oatScreenVec, MiValor2
add.y MiValor, vf00, barrasOrig2[x]
; crear primitivas
; vertice 1
move oatX1Y1, oatScreenVec
ftoi4 ScreenVec, oatX1Y1
sq ScreenVec, 0(iXYZF2 out) ; graba XYZF2
88 CAP
ITULO 4. OPTIMIZACI
ITULO 4. OPTIMIZACI
ODIGO A OPTIMIZAR 93
SIMD (una instruccion, m ultiples datos) sobre un conjunto de valores de entrada, la
PCM en este caso concreto. Es un proceso con una proyeccion hacia la VU0 valida.
El calculo de los conjuntos de frecuencias se basa en realizar un peque no n umero de
operaciones de gran complejidad computacional sobre cada uno de los valores obtenidos
por la FFT. Tambien presenta una clara estructura SIMD, y su proyeccion en la VU0
es bastante inmediata. El procesamiento de los conjuntos de frecuencias realiza una
serie de operaciones ponderadas con un historico para cada conjunto. Es claramente
un proceso SIMD.
El algoritmo que empleamos en la FFT se supone optimizado para una arquitec-
tura general, ya que como hemos comentado, esta extrado de una aplicacion real, y
se requiere una velocidad de computo aceptable para no generar cuellos de botella en
el funcionamiento de dicha aplicacion. Por contra, nuestros algoritmos de clasicacion
en conjuntos de frecuencias y procesamiento de los conjuntos de frecuencias no han
sido optimizados ni si quiera para una arquitectura generica, y presentan al menos la
misma complejidad computacional que el calculo de la FFT optimizado, convirtiendose
ambos procesos en una de las principales ocupaciones de la CPU. Por tanto, aunque
optimizar la FFT supondra una mejora notable, optimizar uno cualquiera de los otros
dos procesos supondra la misma mejora como mnimo, ya que la complejidad computa-
cional es semejante, y hay que tener en cuenta que el codigo de los mismos ni siquiera
esta optimizado, por lo que se hara una doble mejora. Tambien repercute el hecho
de que la implementacion de la FFT es mas compleja y posee un cauce menos lineal
que paralelizar, ya que requiere de inversion de bits y distintas conversiones internas
para funcionar. Sin embargo, el otro par de procesos no requieren procesamientos in-
ternos aparte del computacional, simplicando el ujo de operacion a un simple ujo
de computo, sin ramicaciones condicionales o incondicionales siquiera.
4.2.1. Procesamiento de frecuencias a conjuntos de frecuencias
El codigo original de procesamiento posterior a la FFT es uno de los cuellos de
botella que presenta nuestra aplicacion en el procesador MIPS. El calculo que se realiza
es, para cada uno de los valores de salida que proporciona la FFT en cada canal, calcular
la banda de frecuencia , e incrementar el conjunto de frecuencia
en uno. Siendo
OUT SIZE la longitud del vector de salida de la FFT mas uno, N BAR el n umero de
conjuntos de frecuencia disponibles, 1024 el valor umbral hasta el que recogeremos
las frecuencias en bandas de frecuencias, y siendo barras el vector que representa los
conjuntos de frecuencia, podemos escribir el algoritmo como sigue:
for (i=0; i<OUT SIZE1; i++)
{
//dest[0][i] = ((int)sqrt(tmp out[0][i+1]))>>8;
//d = (int) (((dest[0][i])/1024.0)*N BAR);
// === (1/(2^8)/1024)*N BAR = (1/(2^8)/1024)*64 = 0.00024414
d = (int)(sqrt(tmp out[0][i+1])*0.00024414);
barras[0][d]++;
d = (int)(sqrt(tmp out[1][i+1])*0.00024414);
barras[1][d]++;
}
Como podemos observar, simplicamos todos los computos de escalado en una
constante para evitar operaciones innecesarias. Nos queda para cada canal un producto
94 CAP
ITULO 4. OPTIMIZACI
ODIGO A OPTIMIZAR 95
vwaitq
vaddq.z vf7z, vf2z, Q
vsqrt Q, vf4w # sqrt
vwaitq
vaddq.w vf7w, vf2w, Q
vmul vf7, vf7, vf1 # resultados * 0.00024414
sqc2 vf7, 0x00( %1) # graba
" : :
"r" (salidaASM),
"r" (salida2ASM),
"r" (entradaASM),
"r" (entrada2ASM),
"r" (alfaASM),
"r" (c00ASM));
La Figura 4.1 muestra el ujo de datos y operaciones que realiza cada una de las
implementaciones a lo largo del tiempo, as como el n umero de veces que debe realizarla.
Aunque puede que a simple vista no se perciba, hay que recordar que la instruccion de
la raz cuadrada en la VU0 es mucho mas rapida que la del MIPS, ademas de que, como
se indica, la multiplicacion opera cuatro n umeros al mismo tiempo. Es una lastima que
la instruccion de calculo de la raz cuadrada solo pueda operar con un valor de
entrada a la vez, lo que hace necesaria la secuencializacion del calculo de las races,
como se comprueba en el diagrama del ujo.
Figura 4.1: Flujo de datos que sigue la implementacion del clasicador de frecuencias
en conjuntos de frecuencias: (a) en el MIPS, (b) el ujo de datos perteneciente a la
implementacion en la VU0.
96 CAP
ITULO 4. OPTIMIZACI
ITULO 4. OPTIMIZACI
ON DE ERROR
106 CAP
ON DE ERROR
Mapeado Los mapeados se usan para congurar pipelines especcos para la codi-
cacion multicanal de audio con varias aplicaciones de mapeado de canal. Vorbis I usa
un tipo unico de mapeado, con los mapeados de canales PCM implcitos.
1. [vorbis mapping count] uint6 +1
2. para cada [i] de los [vorbis mapping count] mapeados:
leer el tipo: un uint16 (no hay razon para almacenarlo)
si (tipo ,= 0) trama indecodicable
si no, (tipo = 0)
a) bandera booleana 1 bit
b) si esta activa [vorbis mapping submaps] uint4 +1
si no esta activa [vorbis mapping submaps] 1
c) bandera booleana 1 bit
d) si esta activa se usa mapeado de canales por polos cuadrados:
[vorbis mapping coupling steps] uint8 +1
para cada [j] de los [vorbis mapping coupling steps] pasos:
1) [vorbis mapping magnitude]
[j]
lee ilog([audio channels])
bits como entero sin signo
2) [vorbis mapping angle]
[j]
lee ilog([audio channels])
bits como entero sin signo
3) los pasos anteriores indican el canal que representara la mag-
nitud y el canal que representara el angulo, respectivamente.
Si ambos son iguales o el de magnitud o angulo es mayor que
[audio channels]1, la trama es indecodicable
e) lee 2 bits; si es distinto de cero, la trama es indecodicable
f ) si ([vorbis mapping submaps] > 1) para cada [j] de los
[audio channels] canales:
1) [vorbis mapping mux]
[j]
uint4
2) si ([vorbis mapping mux]
[j]
> max(submap)) condicion de
error: trama indecodicable
g) para cada submapa [j] de los [vorbis mapping submaps], lee el
n umero de oor y residuos a usar para decodicarlo:
lee y descarta 8 bits (la conguracion tiempo-dominio no usada)
5.3. CONFIGURACI
2
))
5.3. CONFIGURACI
2
+
2
))
9. ventana
[right window start]...[n]1
0
Una condicion de n-de-paquete hasta este momento debera ser considerado un
error y descartar el paquete entero de la trama. Si ocurre pasado este punto, se puede
considerar un hecho posible.
Decodicacion del oor
Asumimos desde ahora que la decodicacion usa el modo [mode number] del vec-
tor de conguracion [vorbis mode configurations] y el mapeado [vorbis mode mapping]
tomado del vector de conguraciones de mapeado [vorbis mapping configurations].
Las curvas oor se decodican una por una, en el orden de los canales.
para cada oor [i] de [vorbis mapping mux]
1. [submap number] [vorbis mapping mux]
[i]
2. [floor number] [vorbis submap floor]
[submap number]
3. si ([vorbis floor types]
[floor number]
= 0) decodica el oor para el
canal [i] seg un el algoritmo del oor 0
si no, si ([vorbis floor types]
[floor number]
= 1) decodica el oor
para el canal [i] seg un el algoritmo del oor 1
4. guarda la informacion decodicada del canal para la sntesis posterior
5. si (oor decodicado = no usado) [no residue]
[i]
verdad
si no, (oor decodicado ,= no usado) [no residue]
[i]
falso
Una condicion de n-de-paquete durante la decodicacion debera resultar en una deco-
dicacion de todo ceros en los canales de salida, y saltando la fase de suma/solapamiento.
Propagacion de los vectores no nulos
Un resultado posible de la decodicacion del oor es que un vector especco
este marcado como no usado, lo que indica que ese vector nal sera un vector lleno
de ceros (lo que implica un oor de cero). El vector de residuos de ese vector no
esta codicado en la trama, evitando una complicacion. Si algunos vectores se usan y
otros no, el emparejamiento de canales puede producir una mezcla de un vector nulo y
otro no nulo para producir dos vectores no nulos.
para cada [i] en el intervalo 0 . . .[vorbis mapping coupling steps]1
1. si (([no residue] de [vorbis mapping magnitude]
[i]
|
[no residue] de [vorbis mapping angle]
[i]
) = falso) ambos tienen
que ponerse a falso
110 CAP
ON Y DECODIFICACI
ON 113
[floor0 rate]: uint16
[floor0 bark map size]: uint16
[floor0 amplitude bits]: uint6
[floor0 amplitude offset]: uint8
[floor0 number of books]: uint4 y a nadir 1 al valor
si [floor0 order], [floor0 rate], [floor0 bark map size], [floor0 amplitude bits],
[floor0 amplitude offset] o [floor0 number of books] son menores de
0, la trama no se puede decodicar
array [floor0 book list]: lista de [floor0 number of books] uint8
Una situacion de n-de-trama en alguno de estos bits convierte a la trama en
indecodicable. Ademas, si alg un elemento del array [floor0 book list] es mayor
que el maximo codebook de esa trama es una condicion de error y hace tambien
indecodicable a la trama.
Decodicacion del paquete
Para generar la curva oor0 de un paquete hay primero que decodicar la amplitud
de la curva y los floor0 order coecientes LSP de la trama, y entonces calcular la
curva oor, que se dene como la respuesta en frecuencia del ltro LSP decodicado.
La decodicacion del paquete se hace de la siguiente forma:
[amplitude]: uint de [floor0 amplitude bits] bits
si ([amplitude] > 0)
1. [coefficients] es vector vaco de 0 elementos
2. [booknumber] leer un uint de ilog ([floor0 number of books])
bits
3. si ([booknumber] > mayor n umero de decodicacion del codebook))
paquete indecodicable
4. [lastval] = 0
5. vector [temp vector] leer vector de la trama usando [booknumber]
como n umero del codebook en el contexto VQ
6. a nade el valor escalar last a cada escalar de vector [temp vector]
7. concatena [temp vector] al nal del vector [coefficients]
8. si (longitud de [coefficients] < [floor0 order]) continuar por el
paso 4
9. n
Ahora veremos algunas propiedades de la decodicacion:
Un valor [amplitude] de 0 hara que se devuelva un codigo indicando que este
canal no se usa en este frame (la salida del canal sera una sucesion de ceros).
Muchas de las etapas siguientes de decodicacion no se realizan para un canal
no usado.
114 CAP
_
[floor0 bark map size] 1,
_
bark(
[floor0 rate] i
2 [n]
)
[floor0 bark map size]
bark(,5 [floor0 rate])
_
Esto se usa para sintetizar la curva LSP en una escala Bark en el eje de frecuencias,
y luego mapearla en un eje de frecuencias lineal. El trozo siguiente calcula el calculo
de la curva LSP de salida [output] en una escala logartmica (dB) de amplitud.
1. [i] 0
2. si ([coefficients] es impar) calcular [p] y [q] seg un:
p = (1 cos
2
())
[floor0 order]3
2
j=0
4(cos([coefficients]
2j+1
) cos())
2
q = ,25
[floor0 order]2
2
j=0
4(cos([coefficients]
2j
) cos())
2
5.5. FLOOR 1: CONFIGURACI
ON Y DECODIFICACI
ON 115
3. sino ([coefficients] es par) calcular [p] y [q] seg un:
p =
(1 cos())
2
[floor0 order]2
2
j=0
4(cos([coefficients]
2j+1
) cos())
2
q =
(1 +cos())
2
[floor0 order]2
2
j=0
4(cos([coefficients]
2j
) cos())
2
4. calcular [linear floor value] de acuerdo con:
e
[amplitude] floor0 amplitude offset
(2
[floor0 amplitude bits]
1)
2
p +q
5.5. Floor 1: conguracion y decodicacion
5.5.1. Introduccion
Este metodo usa una representacion de funcion a trozos lineales para codicar una
curva envolvente del espectro. La representacion dibuja esta curva de forma mecanica
en un eje lineal de frecuencia y un eje logartmico (en dB) de amplitud. El algoritmo
empleado para representarla es similar al algoritmo de Bresenham.
5.5.2. Formato Floor 1
Modelo
La curva espectral queda representada como una serie de segmentos de lnea. La
sntesis construye una curva oor usando prediccion iterativa en un proceso aproxima-
damente equivalente a la siguente descripcion simplicada:
el primer segmento (caso base) es una lnea completa desde x 0, y 0 hasta x 1,
y 1, donde en el caso base x 0 = 0 y x 1 = [n], el rango completo del oor
espectral a calcular.
el paso de induccion elige un punto x new en un segmento logico existente y
produce una y new en ese punto, para el valor y en x new, y la diferencia deco-
dicada del paquete del ujo de datos.
el calculo del oor produce dos nuevos segmentos de lnea, uno desde (x 0,y 0)
hasta (x new,y new) y otro desde (x new,y new) hasta (x 1,y 1). Este paso
se realiza incluso si y new no supone ning un cambio al valor de la amplitud en
x new, de forma que renamientos posteriores tambien usaran x new como valor
del extremo.
el paso de induccion se repite, usando una lista de valores de x especicada en
la cabecera del codec en la iniciacion del oor 1. El calculo se completa en el
ultimo valor de la lista de valores para x.
116 CAP
ON Y DECODIFICACI
ON 117
Figura 5.5: Proseguimos renando la curva con los valores asociados, corrigiendo cuan-
do es necesario.
Se usa un algoritmo mas eciente con un comportamiento de redondeo a entero
cuidadosamente denido para la decodicacion real, como se vera mas adelante. El
algoritmo real parte el calculo de los valores de Y y el trazado de la curva en dos pasos
con modicaciones sobre el algoritmo anterior, para eliminar la acumulacion del error
producido por el redondeo/truncado de enteros.
Figura 5.6: Cuando todos los valores se han calculado, tenemos la reconstruccion de la
curva original.
5.5.3. Decodicacion de la cabecera
En la cabecera del paquete se almacena una lista de los valores X del oor en
formato entre (usado en orden de lista durante la decodicacion del paquete y la
sntesis). Esta lista se parte en dos trozos, cada uno de los cuales se asigna a una clase
de particion. Las posiciones 0 y [n] de X son implcitas y no pertenecen a ninguna
particion explcita o clase de particion.
Una clase de particion consiste en un ancho de representacion del vector (el n umero
de valores Y que la particion codica a la vez), un valor de subclase que representa
el n umero de books entropicos alternativos que puede usar la clase de particion para
representar los valores Y, la lista de [subclass] books y un book principal usado
para codicar que books fueron elegidos para la representacion de un paquete dado. El
mecanismo de principal/sublcase esta pensado para ser usado como una representacion
118 CAP
ON Y DECODIFICACI
ON 119
5.5.4. Decodicacion del paquete
La decodicacion comienza comprobando el ag [nonzero]:
1. [nonzero] 1 bit como booleano
Si [nonzero] no esta activado, indica que este canal no contiene energa de audio
en ese frame. La decodicacion inmediatamente devuelve un estado indicando que esta
curva oor (y por tanto este canal) no se usa en el frame. (Devolver un estado de no
usado es distinto de decodicar un oor en el que todos los puntos estan situados en
la amplitud mnima, que suele ser aproximadamente 140dB).
Suponiendo que [nonzero] esta activado, la decodicacion es:
1. [range] 256, 128, 86, 64
([floor1 multiplier]1)
2. [floor1 Y]
[0]
leer ilog([range]-1) bits como entero sin signo
3. [floor1 Y]
[1]
leer ilog([range]-1) bits como entero sin signo
4. [offset] 2
5. itera [i] en el intervalo 0 . . . [floor1 partitions] 1
a) [class] [floor1 partition class]
[i]
b) [cdim] [floor1 partition class]
[class]
c) [cbits] [floor1 class subclasses]
[class]
d) [csub] 2
[cbits]1
e) [cval] 0
f ) si ([cbits] > 0)
[cval] lee del paquete usando el codebook
[floor1 class masterbooks]
[class]
en contexto escalar
g) itera [j] en el intervalo 0 . . . [cdim] 1
[book] [floor1 subclass books]
([class],[cval][csub])
si ([book] ,< 0)
[floor1 Y]
([j]+[offset])
lee del paquete usando el codebook [book]
en contexto escalar
si no, [book] < 0
[floor1 Y]
([j]+[offset])
0
h) [offset] [offset] + [cdim]
6. n
Una condicion n-de-paquete durante la decodicacion de la curva debera ser
considerada una ocurrencia puntual. Si se alcanza un n-de-paquete en alguna de las
operaciones de lectura anteriores, la decodicacion del oor devolvera un estado de no
usada como si el bit [nonzero] no hubiera estado activo al inicio de la decodicacion.
El vector [floor1 Y] contiene los valores de la decodicacion del paquete necesarios
para la sintetizacion de la oor1.
120 CAP
ON Y DECODIFICACI
ON 121
[floor1 final Y]
[i]
[predicted] (([val] 1) /
Z
2)
si no, ([val] es par)
[floor1 final Y]
[i]
[predicted] + ([val] /
Z
2)
si no, ([val] = 0)
[floor1 step2 flag]
[i]
no activada
[floor1 final Y]
[i]
[predicted]
3. [floor1 step2 flag]
[0]
activada
4. [floor1 step2 flag]
[1]
activada
5. [floor1 final Y]
[0]
[floor1 Y]
[0]
6. [floor1 final Y]
[1]
[floor1 Y]
[1]
7. n
Sntesis de la curva
La sntesis de la curva devuelve un vector [floor] de longitud [n] (donde
[n] viene dada desde el proceso de decodicacion que llama a la decodicacion del
oor). La sntesis de la curva del oor 1 hace uso de los vectores [floor1 X list],
[floor1 final Y y [floor1 step2 flag], as como de los valores de [floor1 multiplier]
y [floor1 values].
La decodicacion comienza ordenando los elementos de los vectores [floor1 X list],
[floor1 final Y] y [floor1 step2 flag] en tres vectores nuevos, [floor1 X list],
[floor1 final Y] y [floor1 step2 flag] de acuerdo a los valores ordenados de
forma ascendente en [floor1 X list]. Por tanto, ordenamos los valores de [floor1 X list]
y aplicamos la misma permutacion a los elementos de los otros dos vectores, para que
se siga correspondiendo elemento a elemento de forma correcta.
Tras esto, calcular la curva nal es solo un paso:
1. [hx] 0
2. [lx] 0
3. [ly] [floor1 final Y]
[0]
[floor1 multiplier]
4. itera [i] en el intervalo 1 . . . [floor1 values] 1
a) si ([floor1 step2 flag]
activa )
[hy] [floor1 final Y]
[i]
[floor1 multiplier]
[hx] [floor1 X list]
[i]
render line([lx],[hx],[ly],[hy],[floor])
[lx] [hx]
[ly] [hy]
b) si ([hx] < [n])
render line([hx],[hy],[n],[hy],[floor])
c) si ([hx] > [n])
truncar [floor] a [n] elementos
5. para cada elemento [v] del vector [floor], cambiar su
valor por el de [floor1 inverse dB static table]
[v]
6. n
122 CAP
ON 129
5.7. Funciones auxiliares de la implementacion
5.7.1. Introduccion
Cuando hemos explicado los distintos algoritmos que implementan el calculo de
elementos necesarios para la decodicacion de la onda, hemos hecho referencia a cier-
tas funciones que, si bien aparecen en los procesos de decodicacion, son totalmente
independientes de estos y no conllevan mas que calculos generales. La intencion de
este texto es determinar que hace cada una de las funciones referenciadas en distintas
partes del documento.
ilog (x)
Esta funcion devuelve el bit activo mas signicativo del complemento a dos del
valor x. Los valores de x menores de cero devuelven cero por denicion.
1. [return value] 0
2. si ([x] ,= 0)
[return value]++
[x] 1
repetir paso 2
3. n
float32 unpack (x)
Su nalidad es traducir la representacion binaria de un valor otante empaquetado
que usa un codebook en la representacion de otante que emplea el decodicador.
Aqu se implementa para un oat32 nativo a la arquitectura del host.
1. [mantissa] [x] 0x1fffff, resultado sin signo
2. [sign] [x] 0x80000000, resultado sin signo
3. [exponent] ([x] 0x7fe00000) 21, resultado sin signo
4. si ([mantissa] ,= 0) [mantissa] -[mantissa]
5. devuelve [mantissa] (2
[exponent]788
)
lookup1 values (codebook entries, codebook dimensions)
Se usa para calcular la longitud correcta de un ndice de la tabla de lookup de tipo
1 para un codebook VQ. Los valores de esta lista estan permutados para construir la
tabla de b usqueda de tama no codebook entries] de vectores VQ.
El valor que devuelve la funcion se dene como el mayor valor entero para el cual
[return value]
[codebook dimensions]
[codebook entries].
low neighbor (v, x)
Devuelve la posicion n del mayor elemento de [v] para el que n < [x], y [v]
n
< [v]
[x]
130 CAP
ON 131
8. [v] [x] [y]
9. itera [x] en el intervalo [x0]+1 . . .[x1]1
a) [err] [err] + [ady]
b) si ([err] [adx])
[err] [err] [adx]
[y] [y] + [sy]
si no, ([err] < [adx])
[y] [y] + [base]
10. [v] [x] [y]
11. n
132 CAP
(x
, y
= x +d
x
, y
= y +d
y
(6.1)
Para simplicar la expresion, deniremos los siguientes vectores columna
P =
_
x
y
_
, P
=
_
x
_
, T =
_
d
x
d
y
_
(6.2)
Ahora podemos reescribir la expresion (6.1)
P
= P +T (6.3)
Como mencionamos en la introduccion, todo se limita a trasladar los vertices que
conforman una gura. Supongamos que tenemos un segmento de recta que queremos
trasladar. Habra que trasladar todos los puntos que conforman la recta, pero como
133
134 CAP
ITULO 6. AP
ENDICES
podemos comprobar facilmente, basta trasladar los puntos que forman el segmento
para trasladar el segmento completo.
La rotacion sobre un angulo desde el origen se dene matematicamente como
x
= xcos ysen , y
_
=
_
cos sen
sen cos
_
_
x
y
_
o bien P
= R P, (6.5)
donde R es la matriz de rotacion de la ecuacion (6.5). Los angulos positivos se miden
en sentido contrario a las agujas del reloj, desde el eje x al eje y.
Coordenadas homogeneas
Hemos obtenido la expresion para trasladar y rotar puntos en un espacio bidi-
mensional, pero nos encontramos ante la situacion de que no realizan las mismas
operaciones, como se puede apreciar. Tenemos que
P
= T +P, P
= R P (6.6)
Lo recomendable sera poder combinar de forma consistente las transformaciones
entre s, para lo cual necesitamos tratarlas de forma semejante. Si expresamos los
puntos en coordenadas homogeneas, ambas pueden tratarse como multiplicaciones.
En coordenadas homogeneas, a nadimos una tercera coordenada al punto. En lu-
gar de disponer de parejas de puntos (x, y), cada punto se representa por una tripleta
(x, y, W). Denimos que (x, y, W) y (x
, y
, W
1
_
_
=
_
_
1 0 d
x
0 1 d
y
0 0 1
_
_
_
_
x
y
1
_
_
(6.7)
Si consideramos la matriz de traslacion empleada como T, podemos reescribir la
expresion (6.7) como
P
= T P (6.8)
6.1. PRINCIPIOS DE LA INFORM
ATICA GR
AFICA 135
Figura 6.1: El espacio de coordenadas XY W, con el plano W = 1 y el punto
P(X, Y, W) proyectado en el.
Las ecuaciones de rotacion (6.5) se escriben ahora como
_
_
x
1
_
_
=
_
_
cos sen 0
sen cos 0
0 0 1
_
_
_
_
x
y
1
_
_
(6.9)
Sea
R() =
_
_
cos sen 0
sen cos 0
0 0 1
_
_
(6.10)
Sustituyendo en la ecuacion (6.9) lo denido en (6.10) tenemos
P
= R() P (6.11)
Composicion de transformaciones 2D
La nalidad de la composicion es poder combinar las distintas transformaciones
de forma comoda y util para poder obtener los resultados que se deseen. La idea
de componer las operaciones es la de simplicar calculos, ya que en lugar de aplicar
varias transformaciones consecutivas a un conjunto de puntos, basta aplicar una unica
transformacion, la transformacion resultante, al conjunto de puntos.
Combinando la traslacion con la rotacion podemos salvar la limitacion que hemos
impuesto en la rotacion: podemos girar desde un punto P
1
arbitrario, en lugar de estar
limitados a rotar desde el origen. Los unicos pasos que hay que dar son:
1. Realizar una trasladacion que convierta a P
1
en el origen
2. Rotar los puntos deseados seg un los angulos deseados
3. Deshacer la traslacion realizada en el punto primero
Si denimos el punto P1(x
1
, y
1
) como punto sobre el que realizar la rotacion,
podemos denir la secuencia de pasos ilustrados como
136 CAP
ITULO 6. AP
ENDICES
T(x
1
, y
1
) R() T(x
1
, y
1
) =
_
_
1 0 x
1
0 1 y
1
0 0 1
_
_
_
_
cos sen 0
sen cos 0
0 0 1
_
_
_
_
1 0 x
1
0 1 y
1
0 0 1
_
_
=
_
_
cos sen x
1
(1 cos) +y
1
sen
sen cos y
1
(1 cos) x
1
sen
0 0 1
_
_
(6.12)
6.1.2. Transformaciones en 3D
Como hemos visto, las transformaciones en 2D se representaban por matrices
3 3 usando coordenadas homogeneas. De igual forma, las transformaciones en el
espacio tridimensional se representaran por matrices 44, debido al uso de coordenadas
homogeneas para representar un punto de un espacio tridimensional, aportando una
coordenada mas, igual que suceda en el espacio bidimensional. Por tanto, en lugar de
representar un punto por una tripleta (x, y, z), usaremos una cuadrupla (x, y, z, W) para
representar un punto en coordenadas homogeneas. Igual que suceda con las tripletas
en el espacio bidimensional, representan al mismo punto aquellas cuadr uplas que eran
m ultiplo una de otra, sin ser dicho m ultiplo el cero. De la misma forma, la cuadrupla
(0, 0, 0, 0) no es valida. La representacion cartesiana es (x/W, y/W, z/W, 1), de forma
similar a lo dado en espacio 2D. Normalmente el sistema de coordenadas empleado en
espacios matematicos 3D es el llamado de la mano derecha, y es el que se muestra en
la Figura 6.2.
Figura 6.2: Sistema de coordenadas de la mano derecha.
La traslacion en el espacio tridimensional es una simple extension de todo lo
descrito en el espacio bidimensional. Por ello, es facil comprobar que la expresion que
rige la traslacion en coordenadas homogeneas expresada en forma matricial es similar
a la planteada en (6.8), pero teniendo en cuenta que
T(d
x
, d
y
, d
z
) =
_
_
1 0 0 d
x
0 1 0 d
y
0 0 1 d
z
0 0 0 1
_
_
(6.13)
La rotacion denida en el espacio bidimensional corresponde a la rotacion sobre
6.1. PRINCIPIOS DE LA INFORM
ATICA GR
AFICA 137
el eje z en el espacio tridimensional, que es
R
z
() =
_
_
cos sen 0 0
sen cos 0 0
0 0 1 0
0 0 0 1
_
_
(6.14)
De forma sencilla se puede obtener la expresion asociada a la rotacion respecto a
los dos ejes restantes, que son
R
x
() =
_
_
1 0 0 0
0 cos sen 0
0 sen cos 0
0 0 0 1
_
_
(6.15)
R
y
() =
_
_
cos 0 sen 0
0 1 0 0
sen 0 cos 0
0 0 0 1
_
_
(6.16)
La composicion de traslacion y rotacion generara una matriz cuya matriz superior
izquierda de 33 proporciona la rotacion, y la ultima columna proporciona la traslacion.
Por tanto, esta matriz sera de la forma
M =
_
_
r
11
r
12
r
13
t
x
r
21
r
22
r
23
t
y
r
31
r
32
r
33
t
z
0 0 0 1
_
_
(6.17)
6.1.3. Proyecciones de visualizacion
Normalmente, la proyeccion se realiza desde puntos pertenecientes a un sistema
de coordenadas de dimension n, a puntos de un sistema de coordenadas de dimension
menor que n. En el contexto al que nos referimos nosotros, simplmente haremos pro-
yecciones desde un espacio 3D a uno 2D. Por tanto, nosotros nos limitaremos a trazar
rayos desde los puntos del espacio 3D, y calcular los puntos de interseccion con un
plano arbitrario al que llamaremos plano de proyeccion. La Figura 6.3 representa los
dos tipos de proyeccion.
Figura 6.3: Tipos de proyecciones: paralela, conservando angulos y distancias, y pers-
pectiva, conservando solo angulos.
138 CAP
ITULO 6. AP
ENDICES
Proyeccion paralela
La proyeccion paralela mas difundida es la llamada proyeccion ortograca, consis-
tente en proyectar cada punto con un proyector paralelo al eje i-esimo en un plano de
visualizacion contenedor de los otros dos ejes. Por ejemplo, la proyeccion ortograca
del eje Z en el plano XY consiste en anular la coordenada z, es decir, convertir el
punto P(x, y, z, W) en P
(x, y, 0, W).
Proyeccion de perspectiva
Todos los proyectores convergen en un punto llamado centro de proyeccion (COP).
Para los calculos sucesivos, supondremos que el plano de proyeccion es perpendicular
al eje Z, a una distancia d del centro de proyeccion, tal y como muestra la Figura 6.4.
Figura 6.4: Calculo de la proyeccion en perspectiva P
del punto P.
Usando semejanza de triangulos podemos decir que
x
=
x
z/d
, y
=
y
z/d
(6.18)
Usando coordenadas homogeneas podemos reescribir la expresion (6.18) como
_
_
X
Y
Z
W
_
_
= M
per
_
x
y
z
1
_
_
(6.19)
siendo
M
per
=
_
_
1 0 0 0
0 1 0 0
0 0 1 0
0 0 1/d 0
_
_
(6.20)
Sustituyendo terminos de (6.20) en (6.19) y simplicando, podemos escribir que
_
_
X
Y
Z
W
_
_
=
_
_
x
y
z
z/d
_
_
(6.21)
Si dividimos la expresion (6.22) por W para obtener las coordenadas cartesianas
equivalentes, obtenemos
6.1. PRINCIPIOS DE LA INFORM
ATICA GR
AFICA 139
_
_
x
1
_
_
=
_
_
x
z/d
y
z/d
d
1
_
_
(6.22)
Por tanto, en (6.22) obtenemos la relacion entre el punto proyectado P
y el punto
original P, cumpliendo la restriccion que jamos con respecto a z.
En la Figura 6.5 podemos ver el resultado practico de esta transformacion de P
en P
, que dependa o no de P
z
, y como la proyeccion de dos objetos distintos con
distinto tipo de proyeccion puede resultar identica.
Figura 6.5: Proyeccion perspectiva y proyeccion paralela, y objetos reales que producen
dicha proyeccion.
140 CAP
ITULO 6. AP
ENDICES
CAP
ITULO 6. AP
ENDICES
Glosario
A
AC-3 El sistema de codicacion usado por Dolby Digital. Ambos termino, AC-3
y Dolby Digital, se suelen usar indistintamente, pag. 58.
B
BIOS Acronimo de Basic Input/Output System, se reere al software que se
ejecuta al inicio, que permite controlar pantalla, teclado, unidades de
disco, comunicacion serie y demas, sin acceder a ning un programa del
disco duro. Normalmente se encuentra en la ROM de la placa., pag. 51.
C
codec De ((coder/decoder)) (codicador/descodicador), tecnologa que permite
la compresion y decompresion de datos. Pueden implementarse tanto en
software como en hardware, o en una combinacion de ambos., pag. 54.
compilador cruzado Se usa este termino para referirse a un compilador que genera
codigo objeto de una maquina distinta de la que ejecuta el compilador.
Sirve para generar el codigo objeto de una arquitectura desde otra distinta
en la que se encuentran todas las herramientas de desarrollo., pag. 5.
D
doublebuer Termino referido al uso de dos buers para la representacion visual
en pantalla, de forma que se muestra uno de ellos miestras se dibuja el
siguiente fotograma en el otro. Una vez dibujado, se intercambian los
buers, y se muestra el recien dibujado mientras se comienza a dibujar
en el anteriormente mostrado. Esta tecnica evita el parpadeo propio de
la escena dibujada, ya que evita que se aprecie el dibujado progresivo de
la misma., pag. 69.
DTS Acronimo de Digital Theatre Sound, se trata de un formato que hace que
las pistas de audio se aproximen mas a la grabacion original que otras
pistas comprimidas. En conjuncion con el benecio multidismensional de
la tecnologa de sonido envolvente, la calidad del audio de las pistas
y m usicas en formato DTS mejoran dramaticamente el contenido. Mas
informacion en su web: http://www.dtsonline.com/, pag. 58.
I
II GLOSARIO
F
FPGA Acronimo de Field Programable Gate Array, se trata de una malla de
puertas en la que la red logica puede programarse en el dispositivo tras
su creacion. Esta compuesta por puertas o tablas de consulta en RAM,
ip-ops y cableado de interconexion programable., pag. 1.
free-lance Se dice de la persona que trabaja por su cuenta, haciendo creaciones
propias sin formar parte de la plantilla de ninguna empresa., pag. 6.
M
MIPS Acronimo de Microprocessor without Interlocked Pipeline Stages, es un
procesador RISC desarrollado por la MIPS Computer Systems Inc. (http:
//www.mips.com/), pag. 1.
mod-chip Nombre com un con el que se conoce a los circuitos que se implantan en
las consolas para alterar la funcionalidad de la misma, como puede ser
el bloqueo de codigo de region o el bloqueo por proteccion anti-copia.,
pag. 6.
O
OpenGL OpenGL es el principal entorno de desarrollo graco 2D y 3D portable.
No esta sujeto a ning un sistema operativo y reeja el pensamiento y
talento de desarrolladores software de diferentes trasfondos gracos. Mas
informacion en su web: http://www.opengl.org/, pag. 64.
P
PIC Microcontrolador fabricado por Microchip (http://www.microchip.com/),
normalmente usados como peque nas unidades de procesamiento en cir-
cuitos simples de control., pag. 1.
R
redonda es una nota que tiene una duracion de cuatro tiempos. Su simbolo es un
ovalo sin llenar, y sin barra, de ahi su nombre. Su silencio asociado es
una barra horizontal que ((cuelga)) de la segunda linea del pentagrama.,
pag. 66.
RISC Acronimo de Reduced Instruction Set Computer, es un microprocesador
dise nado para realizar un n umero reducido de tipos de instrucciones para
poder operar a una velocidad mayor, dada la simplicidad de la circuitera
necesaria., pag. 1.
S
SIMD Acronimo de Single-Instruction Stream Multiple-Data Stream, se reere
a un tipo de arquitectura esencial en el mundo del calculo paralelo de los
ordenadores. La idea basica consiste en procesar un conjunto de datos de
forma simultanea, aprovechando que se ha de realizar la misma operacion.
GLOSARIO III
La habilidad de procesar vectores y matrices en tiempo mnimo ha creado
una demanda muy importante en areas como prediccion metereologica o
investigacion de las radiaciones de cancer. El poder de esta arquitectura
se puede contemplar cuando el n umero de procesadores coincide con el
n umero de elementos a procesar. En ese caso, la suma y multiplicacion
de los elementos se puede realizar de forma simultanea. Incluso cuando
el tama no de un vector es mayor al n umero de procesadores disponibles,
la ganancia comparada con el algoritmo secuencia es enorme., pag. 93.
streaming Tecnica para transferir datos de manera que pueden ser procesados con-
forme llegan, de forma contnua. La tecnologa de ((streaming)) estan
tomando relevancia debido al crecimiento de internet, ya que muchos
usuarios no tienen a un un acceso lo sucientemente rapido como pa-
ra poder acceder a cheros multimedia grandes de forma rapida. Con
((streaming)), el cliente puede comenzar su reproduccion antes de recibir
el chero completo., pag. 56.
V
VLIW Acronimo de Very Long Instruction Word, describe una arquitectura de
procesamiento en la que el compilador o el preprocesador dividen la ins-
truccion de programa en operaciones basicas que pueden ser realizadas
por el procesador en paralelo., pag. 1.
X
x86 Se reere a cualquier procesador de la familia Intel 80x86, o a cualquier
procesador compatible, como Cyrix o AMD., pag. 1.
IV GLOSARIO
Bibliografa
[1] 4Front Technologies. http://www.opensound.com/.
[2] Ars Technica. The PC Enthusiasts resource. http://www.arstechnica.com.
[3] Compilador Vector EE. http://www.codeplay.com.
[4] The Enterprise Linux Resource. http://www.linux.com/.
[5] GameDev.net all your game development needs. http://gamedev.net/.
[6] Lista de monitores con los que funciona la PS2. http://playstation2-linux.
com/sog.php.
[7] Pagina ocial de Sony para PlayStation. http://es.playstation.com.
[8] Proyecto ps2stu. http://playstation2-linux.com/projects/ps2stuff/.
[9] PS2RealityCompilador Vector EE. http://www.ps2reality.net.
[10] Sony Computer Ent. Atsushi Kunimatsu; Nobuhiro Ide; Toshinori Sato; Yukio En-
do; Horoaki Murakami; Masaaki Oka; Masakasu Suzuoki. Vector Unit Architecture
for emotion systhesis.
[11] Richard Boulton. Implementacion de la FFT usada en el XMMS. http://cvs.
xmms.org/cvsweb.cgi/xmms/xmms/fft.c, http://cvs.xmms.org/cvsweb.
cgi/xmms/xmms/fft.h.
[12] Karsten Scheibler y Jonathan Leto Dragan Stancevics. Linux Assembly! http:
//linuxassembly.org/.
[13] Sony Computer Entertaintment. Biblioteca de desarrollo de la ps2 bajo linux.
/usr/docu/Playstation2/libps2dev/.
[14] Sony Computer Entertaintment. Pagina de la Comunidad Linux de la PS2. http:
//playstation2-linux.com/.
[15] Sony Computer Entertaintment. VU Demo Coding Contest. http://
playstation2-linux.com/projects/vudemocontest/.
[16] H. Tago et al. Importance of CAD tools and methodologies in high speed CPU
desing.
[17] N. Kojima et al. Clock desing of 300 MHz 128 bit 2-Way superscalar micropro-
cessor.
V
VI BIBLIOGRAF
IA
[18] N. Kojima et al. Repeater insertion method and its application to the 300 MHz
128 bit 2-Way superscalar microprocessor.
[19] Oobles et al. PS2DEV network. http://ps2dev.org/.
[20] T. Kamei et al. 300 Mhz Desing methodology of VU for emotion synthesis.
[21] Sarah Ewen. Coding for the Playstation2. http://playstation2-linux.com/
coding-on-playstation2.php.
[22] Feiner y Hughes Foley, van Dam. Computer Graphics: Principles and Practice.
Addison Wesley, 1997.
[23] Xiph.org Foundation. Pagina ocial de Ogg Vorbis. http://www.vorbis.com/.
[24] MIPS Technologies Inc. MIPS32. Architecture for Programmers. Volume I: Intro-
duction to the MIPS32 Architecture, 2002. Document number: MD00082.
[25] Sony Computer Entertainment Inc. EE Core Instruction Set Manual. 2001.
[26] Sony Computer Entertainment Inc. EE Core Users Manual. 2001.
[27] Sony Computer Entertainment Inc. EE Overview. 2001.
[28] Sony Computer Entertainment Inc. EE Users Manual. 2001.
[29] Sony Computer Entertainment Inc. GS Users Manual. 2001.
[30] Sony Computer Entertainment Inc. VU Users Manual. 2001.
[31] Sony Computer Entertainment Inc. Linux (for Playstation2) VCL Preprocesor.
http://playstation2-linux.com/projects/vcl/, 2002.
[32] Inc. Integrated Device Technology. IDT MIPS Microprocessor Family Software
Reference Manual. http://members.rogers.com/jenova0/MIPS.pdf, 1996.
[33] Tom Davis y Mason Woo Jackie Neider. OpenGL Programming Guide. Addison-
Wesley Publishing Company, http://fly.cc.fer.hr/~unreal/theredbook/,
1993.
[34] Fernado Rodrguez Leon. El estandar MPEG. http://atc.ugr.es/~jesus.
[35] El liceo digital. Introduccion a la M usica. http://www.liceodigital.com/
tercero/musica3/lamusic3.htm.
[36] Rob Louie. Playstation 2 Game Programming Part 1. http://gamedev.net/
reference/programming/features/ps2gp1/.
[37] Francisco J. Fernandez Baldomero y Antonio Francisco Diaz Garcia
Mancia Anguita Lopez. Asignatura de Arquitectura de Computadores
II. http://www-etsi2.ugr.es/planes/ingenieria/quinto/arquitectura_
de_computadores_ii.phtml.
[38] Sony Computer Ent. Masaaki Oka; Masakasu Suzuoki. Designing and program-
ming the Emotion Engine.
BIBLIOGRAF
IA VII
[39] Roberto Francisco Arroyo Moreno. Formato de compresion de audio Ogg Vor-
bis. http://atc.ugr.es/~jesus/asignaturas/ae/descargas/trabajos/
2002-2003/vorbis.pdf.
[40] Napalm. Pagina ocila de Naplink. http://naplink.napalm-x.com/.
[41] University of Texas at Austin. What do we need to know about the phy-
sics of singing? http://www.utexas.edu/cofa/music/voice/texassings/
soundstuff.htm.
[42] Frederic Patin. Beat Detection Algorithms. http://www.gamedev.net/
reference/articles/article1952.asp.
[43] Jes us Gonzalez Pe nalver. Asignatura de Arquitecturas Especializadas. http:
//atc.ugr.es/~jesus/asignaturas/ae/.
[44] Bharata B. Rao. Inline assembly for x86 in Linux. http://www-106.ibm.com/
developerworks/linux/library/l-ia.html?dwzone=linux, 2001.
[45] Paul Smith. VU microcoding tutorials. http://paulsmith.is-a-geek.net/
vututs/index.html.
[46] XMMS Team. Pagina ocial de XMMS. http://www.xmms.org/.
[47] 4Front Technologies. OSS Programmers guide v1.1. http://www.opensound.
com/pguide/oss.pdf.
[48] Kh. Brandenburg y B. Edler Th. Sporer. The use of multirate lter banks for
coding of high quality digital audio. http://www.iocon.com/resource/docs/
ps/eusipco_corrected.ps, 1992.
[49] Je Tranter. Linux Multimedia Guide. OReilly, http://www.oreilly.com/
catalog/multilinux/, 1996.
[50] Brennan Underwood. Brennans Guide to Inline Assembly. http://www.
delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html, 1996.
[51] Christian Vincenot. An introduction to Linux sound systems and APIs. http:
//desktops.linux.com/desktops/04/08/09/1513255.shtml?tid=25.
[52] Teukolsky William T. Vetterling y Brian P. Flannery William H.Press, Saul A.
Numerical Recipes in C. The Art of Scientic Computing. http://www.library.
cornell.edu/nr/bookcpdf.html.
[53] Rafael Garca; Jes us Gonzalez; Julio Ortega; Macia Anguita y Alberto Prieto. Uso
de la consola Sony PlayStation2 como herramienta de Docencia de Aquitectura
de Computadores.
[54] Konstantin Boldyshev y Francois-Rene Rideau. Linux Assembly HOWTO. http:
//www.tldp.org/HOWTO/Assembly-HOWTO/, 2002.
[55] Julio Ortega Lopera y Jes us Gonzalez Pe nalver. Asignatura de Arquitectura de
Computadores I. http://atc.ugr.es/~jesus/asignaturas/aci/.
[56] Matteo Frigo y Steven G. Johnson. Fast Fourier Transform in the West. http:
//www.fftw.org/.