# Stella (emulador)

Stella es un emulador multiplataforma de Atari 2600 VCS, desarrollado bajo licencia GNU GPL. Estela fue desarrollado en principio para Linux por Bradford W. Mott. Tras el lanzamiento de la versión original, múltiples personas se han unido al equipo de desarrollo de Stella adaptándolo a otros sistemas operativos como AcornOS, AmigaOS, DOS, FreeBSD, IRIX, Linux, OS/2, MacOS, Unix, y Windows
El systema Atari 2600 Video Computer System (VCS), creado en 1977, fue el sistema de videojuegos más popular hasta los años 80.

## Características

* Emulación rápida usando código optimizado en C++
* Soporte para sonido de alta calidad usando código derivado de la Biblioteca de sonido emulado TIA de Ron Fries, incluyendo soporte para sonido estéreo.
* Emulación de los mandos (joysticks) de los Atari 2600 por medio del teclado o mandos del ordenador.
* Emulación del teclado de los Atari 2600 por medio del teclado.
* Emulación de un gamepad de los Atari 2600 por medio del ratón.
* Soporte para los controles del Atari 2600 usando el Stelladaptor
* Emulación de los controles de conducción por medio del teclado o mandos del ordenador.
* Emulación de los controles "CBS Booster-Grip" por medio del teclado o mandos del ordenador.
* Soporte para cartuchos usando el estándar de Atari en formatos de 2K y 4K.
* Soporte para cartuchos usando la paginación de 8K, 16K y 32K de Atari.
* Soporte para cartuchos usando la paginación de 8K de Activision (Robot Tank y Decathlon).
* Soporte para cartuchos usando la paginación de 128K de Chris Wilkson's Megacart.
* Soporte para cartuchos usando la paginación de Commavid.
* Soporte para cartuchos usando la paginación de 16K de M-Network's.
* Soporte para cartuchos usando la paginación de 8K de Parker Brothers.
* Soporte para cartuchos usando la paginación de Tigervision con más de 512K de ROM.
* Soporte para cartuchos usando la paginación de UA Limited.
* Soporta "Supercharger" para juegos de una o varias cargas.
* Soporte de ficheros de propiedades para los ajustes asociados a los juegos.
* Soporte por parte del usuario del número de imágenes por segundo (frame rate).
* Soporte de los estándares de televisión NTSC, PAL y PAL60.
* Soporte varias "características indocumentadas" del chip gráfico TIA usado en algunos juegos.
* La emulación TIA soporta el control completo de colisiones

## Estado

Stella es un emulador muy "maduro", soportando la práctica totalidad de juegos del Atari 2600, incluyendo mayores capacidades que las que disponía la consola original, como puede ser el debuger.

## Requerimientos

Estos son los requirimientos necesarios para hacer funcionar Stella en algunos sistemas operativos.
En la última versión el fichero stella.pro, a diferencia de versiones anteriores, no es opcional.

### Generales

* Suficiente RAM para el sistema operativo + 16MB de RAM para la emulación. Se recomienda 32MB.
* 15 bit de color como mínimo. Se recomienda una tarjeta gráfica con 16 bit de color.
* SDL versión 1.2.0 o superior
* Las últimas versiones de las bibliotecas "libpng" y "zlib".
* Se recomienda la utilización de mandos (joysticks) y "gamepads"
* Para la emulación del "paddle", se requiere el ratón o el "Stelladaptor" con los "paddles" originales.
* Alguna imagen ROM.

### Linux/UNIX

La versión de Stella para Linux está diseñada para funcionar en estaciones de trabajo Linux con lo siguiente:
* Kernel Linux 2.4.x, se recomienda un kernel 2.6.x.
* Son necesarios el compilador GNU C++ versión 2.95 y la utilidad make para compilar Stella desde el código fuente. Se recomienda el compilador GNU C++ versión 3.2.x/4.x o posterior.
* Es necesaria una máquina tipo Pentium (Stella puede compilar en otras arquitecturas pero no ha sido probado extensivamente).

### Macintosh

La versión de Stella para Mac ha sido diseñada para funcionar el Power Macintosh con:
* Mac OSX 10.1 o superior
* Procesador G4 PPC/Intel de 500 MHz o superior (Stella puede funcioonar en procesadores G3, aunque todavía esté en desarrollo.
* Una tarjeta de video con soporte OpenGL. El render por software está disponible, pero en OSX 10.4 es un substandard comparado con OpenGL.

### Windows

La versión de Stella para Windows ha sido diseñada para funcionar ee Windows 98/ME/2000/XP con:
* Es necesario el compilador Visual C++ 7 o MinGW para compilar Stella desde el código fuente.
* Es necesaria una máquina tipo Pentium. Se recomiendo una tarjeta de video con aceleración OpenGL.
* Para el soporte del "Stelladaptor" es necesario SDL versión 1.2.8 o superior (o la SDL.dll correspondiente)

## Utilización

A partir de la versión 2.0, Stella dispone de una interfaz gráfica en todos los sistemas. Esto hace innecesaria la utilización de la línea de comandos, aunque esta exista y se pueda utilizar.
Si ejecutas Stella sin especificar una imagen ROM, se inicia el "ROM Launcher", donde podremos escoger la ROM que deseemos.

### Sintaxis

Stella se puede utilizar desde la línea de comandos (si tu sistema operativo tiene línea de comandos). Si utilizas este modo, se desabilitará el Cargador de ROMs (ROM launcher).
El formato para utilizar estella desde la línea de comando es:
stella [optiones ...] fichero.bin
Opciones ('0' o 'false' indican falso, '1' o 'true' indican verdadero, el resto se explican en su contexto):
| Argumento | Descripción |
| -video <soft|gl> | Usar render usando el software SDL o OpenGL |
| -gl_filter <nearest|linear> | Solo en modo OpenGL. Usa los filtros GL_NEAREST o GL_LINEAR. GL_NEAREST da como resultado una imagen escalada y "pixelada", mientras que GL_LINEAR introduce "blurring". |
| -gl_aspect <number> | Solo en modo OpenGL. Especifica la Relación de aspecto (aspect ratio) de la ventana. En la televisión normal es de 4:3, pero puedes especificar 1.3333. La mayoría de los modos de video no usan "pixels" cuadrados, por lo que tienen diferentes valores. He encontrado en los modos 1.6 o 1.7 el aspecto real. |
| -gl_fsmax <0|1> | Solo en modo OpenGL. Usa la resolución actual del escritorio cuando se cambia al modo de pantalla completa OpenGL (si esto es posible). Si no está soportado, utiliza la máxima resolución posible. |
| -gl_lib <filename> | Solo en modo OpenGL. Especifica la biblioteca OpenGL a utilizar (úsala solo si sabes lo que estas haciendo). |
| -zoom <size> | Hace la ventana tantas veces (size) más grande que la normal. |
| -fullscreen <0|1> | Juego a pantalla completa. |
| -center <0|1> | Centra el juego (si es posible). |
| -grabmouse <0|1> | Elimina el puntero del ratón en la ventana de juego. |
| -palette <original|standard|z26> | Ajusta la paleta a las versiones de Stella anteriores a la 1.4, o a la versión del emulador z26. |
| -framerate <number> | Muestra el número dado de imágenes (frames) por segundo, Stella determina este basándose en el formato de la ROM. |
| -ppblend <number> | Ajusta la mezcla de colores (blending) para el efecto fósforo. Activado puede tomar los valores (1-100), por defecto es 77. |
| -sound <1|0> | Activa o desactiva el sonido |
| -channels <1|2> | Activa el sonido mono o stereo. |
| -fragsize <number> | Especifica el tamaño de los fragmentos de sonido a usar. Linux/Mac parece que funcionan con 512, Windows necesita 2048. |
| -freq <number> | Ajusta la frecuencia de salida del sonido (0 - 48000). Por defecto es 31400. |
| -tiafreq <number> | Ajusta la frecuencia de generación del sonido (0 - 48000). Por defecto es 31400. |
| -volume <number> | Ajusta el volumen (0 - 100). |
| -clipvol <1|0> | Recorte de volumen (volume clipping), (elimina el "popping"). |
| -cheat <code> | Úsa el truco (cheat) especificado (mirar la sección de Trucos para una descripción). |
| -showinfo <0|1> | Muestra información del juego mientras Stella funciona. |
| -paddle <0|1|2|3> | Indica que "paddle" emula el ratón (por defecto el "paddle" 0). |
| -sa1 <left|right> | El Stelladaptor 1 emula el puerto de mando (joystick) especificado. |
| -sa2 <left|right> | El Stelladaptor 2 emula el puerto de mando (joystick) especificado. |
| -joymouse <0|1> | Indica si el mando (joystick) emula el ratón en la interfaz gráfica (por defecto está deshabilitado). |
| -p1speed <number> | Velocidad del movimiento del ratón emulando el "paddle" 1 (0-100). |
| -p2speed <number> | Velocidad del movimiento del ratón emulando el "paddle" 2 (0-100). |
| -p3speed <number> | Velocidad del movimiento del ratón emulando el "paddle" 3 (0-100). |
| -p4speed <number> | Velocidad del movimiento del ratón emulando el "paddle" 4 (0-100). |
| -pthresh <number> | Modifica el umbral del "paddle" para eliminar temblores. |
| -tiadefaults <1|0> | Usa la colocación por defecto de TIA, en vez de los valores óptimos. Los valores por defecto dan una apariencia a la imagen que no es el de un sistema 2600 real (en la mayoría de los casos). |
| -accurate <1|0> | Solo en Linux, puede desaparecer en futuras versiones. Usa esta opción si estas utilizando un kernel de la rama 2.4. |
| -ssdir <path> | El directorio donde se guardan las capturas de pantalla. |
| -ssname <romname|md5sum> | La forma de nombrar a las capturas de pantalla. Con la opción 'romname' se usa el nombre de fichero que aparece en stella.pro, mientras que 'md5sum' utiliza la suma MD5 de la rom. |
| -sssingle <0|1> | Genera una sola captura de pantalla en vez de muchas. |
| -listrominfo | Imprime el contenido del fichero stella.pro, una ROM por línea, y sale de Stella. |
| -help | Imprime el mensaje de ayuda describiendo las opciones, y sale de Stella. |
Si se incluye el soporte para desarrolladores en Stella, los siguientes argumentos de línea de comandos estarán disponibles. Nos se distinguen mayúsculas y minúsculas en los argumentos.
| Argumento | Descripción |
| -break <address> | Coloca un "punto de ruptura" en la dirección espeficicada. |
| -debugheight <number> | Ajusta la altura del depurador en líneas de texto (Todavía no funciona al 100%) |
| -debug | Inicia Stela en modo de depuración. |
| -holdreset | Inicia el emulador con el interruptor de Reset pulsado. |
| -holdselect | Inicia el emulador con el interruptor de Select pulsado. |
| -holdbutton0 | Inicia el emulador con el interruptor izquierdo del mando (joystick) pulsado. |
| -pro <props file> | Usa el fichero de propiedades dado en vez de usar 'stella.pro'. |
| -type <type> | Ajusta la propiedad "Cartridge. Type". Mirar las Propiedades de los juegos para la lista de tipos válidos. |
| -ld <A|B> | Ajusta la propiedad "Console.LeftDifficulty". |
| -rd <A|B> | Ajusta la propiedad "Console.RightDifficulty". |
| -tv <Color|BlackAndWhite> | Ajusta la propiedad "Console.TelevisionType". |
| -lc <type> | Ajusta la propiedad "Controller. Left", pudiendo ser of Booster-Grip, Driving, Keyboard, Paddles, o Joystick. |
| -rc <type> | Ajusta la propiedad "Controller. Right", pudiendo ser of Booster-Grip, Driving, Keyboard, Paddles, o Joystick. |
| -bc <type> | Ajusta las propiedades "Controller. Left" y "Controller. Right", pudiendo ser of Booster-Grip, Driving, Keyboard, Paddles, o Joystick. |
| -format <NTSC|PAL> | Ajusta la propiedad "Display. Format". |
| -xstart <number> | Ajusta la propiedad "Display.XStart" (0 - 80). |
| -ystart <number> | Ajusta la propiedad "Display.YStart" (0 - 64). |
| -width <number> | Ajusta la propiedad "Display. Width" (80 - 160). |
| -height <number> | Ajusta la propiedad "Display. Height" (100 - 256). |
| -pp <Yes|No> | Ajusta la propiedad "Display. Phosphor". |
| -hmove <Yes|No> | Ajusta la propiedad "Emulation.HmoveBlanks". |

## El equipo

| Stephen Anthony | Autor de la adaptación de Stella a la biblioteca SDL y de mejoras del núcleo; actualmente mantiene las versiones de Linux y Windows |
| Joe D'Andrea | Mantenedor de la versión de Solaris de Stella |
| Doodle | Actualmente mantiene la versión de OS/2 de Stella |
| Mark Grebe | Autor/Mantenedor de la versión de Stela para OSX |
| Erik "Voch" Kovach | Mantenedor del fichero de propiedades de juego'stella.pro' |
| Kostas Nakos | Autor/Mantenedor de la versión de Stela para WinCE |
| Bradford Mott | Gestor del proyecto y desarrollador del núcleo de emulación, autor original de Stella. |
| Darrell Spice Jr. | Autor original de la versión de OS/2 de Stella |
| Eckhard Stolberg | Desarrollador del núcleo de emulación |
| David Voswinkel | Autor/Mantenedor de la versión de Stela para PSP |
| Brian Watson | Desarrollador del núcleo de emulación y soporte a la depuración |
| Alex Zaballa | Autor/Mantenedor de la versión de Stela para GP2X |

## Agradecimientos

La práctica totalidad de la información reflejada ha sido extraída de la página oficial de Stella.