gp2xpectrum v1.7.1 - un emulador de ZX Spectrum para GP2X

COMENZANDO
----------

Lo primero es decidir donde vas a colocar los juegos de Spectrum. Por defecto estos estarn situados en el directorio roms/spectrum desde el directorio raiz en la SD, pero si quieres colocarlos en otro sitio, no tienes ms que especificarlo en el archivo .ini que acompaa al emulador. Este archivo tiene que tener el mismo nombre que el ejecutable. Si quieres montar el directorio en otro sitio que no sea la SD, puedes hacerlo poniendo la ruta completa, comenzando por "/mnt", por ejemplo para la NAND: /mnt/nand/spectrum/roms . Si quieres que la ruta sea relativa a la posicin del emulador, comienza la ruta con "./", as para colocar los juegos en el subdirectorio games dentro del directorio en que se encuentra el emulador, pon "./games" .

Los juegos de Spectrum, pueden estar en ese directorio o en subsiguientes subdirectorios (solo un nivel)

El emulador tiene la capacidad de crear ese directorio junto con los suplementarios,
/saves y /img


FORMATOS DE LOS JUEGOS
----------------------

Admite formatos .z80, .sp, .tap, .tzx, .sna y .dsk (discos +3) . Los ficheros pueden estar comprimidos en formato BZIP2 o 
ir incluidos dentro de un fichero ZIP (en cuyo caso te dar a escoger si existen varios juegos con extensiones vlidas dentro
del mismo archivo).

Tambien se pueden cargar save states directamente (.sav)


SELECCION DE JUEGOS
-------------------

Usa el stick (ARRIBA/ABAJO), los botones L y R para pasar pgina y pulsa A/X para seleccionar. 

Con START se activa la tool de compresion BZIP2 y todos los juegos del directorio quedaran comprimidos a ese formato
(excepto los que estn comprimidos en formato ZIP)

Con SELECT se vuelve al sistema (o al Tape Browser).


EMULANDO UN JUEGO
-----------------

La emulacin se realiza en principio a una velocidad entre 140/185MHZ dependiendo de las opciones de
frameskip y contienda, con sonido mono o estreo entre 11025 y 44100 HZ.
El emulador soporta sonido mediante el beeper y el chip AY.

Funcin de los botones:

stick, A,B,X,Y,L,R -> programables mediante el teclado virtual. En la emulacin de joystick A se asigna como boton de disparo.

-Vol+ -> ajuste del volumen de sonido

SELECT -> acceso al menu de configuracin

START -> habilita el teclado virtual

funcin PHOTO: si est habilitada, L+ SELECT hace una captura


TECLADO VIRTUAL
---------------

En el teclado virtual se deshabilita la accin de todos los botones (desde el punto de vista del emulador) excepto los botones L, R, Y y X.

Con X pulsamos la tecla seleccionada en el teclado virtual. 

Con START podemos salir del teclado virtual.

Con Y pulsamos la tecla seleccionada (como el X) y al salimos al mismo tiempo (til para mens de inicio).

PROGRAMANDO BOTONES:

 Pulsa SELECT (el selector de tecla parpadear) y acto seguido, pulsa la direccin o botn (A,B,X,Y,L,R) que quieras programar.
 Pulsando de nuevo SELECT, se puede abortar el modo programacin.

FUNCIONES ESPECIALES:

En el teclado virtual, se incluyen 5 funciones especiales:

RESET: al pulsar X aparece un nuevo submenu para elegir el modelo de Spectrum al que resetear. El emulador por defecto arranca con
el modelo 128K, si un juego de tipo .tap o .tzx no carga con este modelo, haz reset con el modelo de 48K. Usa Y en caso de querer
abortar la operacin.

LOAD: Si un juego requiere el modo de 48K, pulsando X sobre esta funcin se pulsar automaticamete LOAD "" para cargar juego (.tap o .tzx)

KEYBOARD/JOYSTICKS: Usa esta funcin para mapear los botones y el stick de la gp2x hacia las teclas o diferentes protocolos de joystick del Spectrum.

MKEY: Esta funcin pulsa la secuencia de teclas previamente programada como una pulsacin simultanea y luego borra todas las teclas programadas.
          Para programar teclas, situate en la tecla y luego pulsa el boton A, as hasta 8 teclas.
          Existe una funcin alternativa, pulsando B que lo que hace es simular tambien la pulsacin simultaneas de las teclas solo que en este caso,
          no se borra la programacin (esto tiene uso por ejemplo, en Abu Simbel Profanation donde pulsado las teclas de VICTOR a la vez, se accede 
          a un truco)

TAPE: Aqu accedemos directamente al navegador de cinta (Tape Browser)


MENU DE CONFIGURACION
---------------------

Desde aqui se pueden acceder a distintas opciones:

Load State -> carga el estado de un juego previamente guardado
Save Keyboard & Speed Profile -> guarda el esquema de teclas y las velocidades para el juego actual. As no har falta volver a
	definir los controles o ajustar la velocidad del procesador cada vez que cargues el mismo juego.
Save State -> guarda el estado de un juego.

Full Screen [ON/OFF] -> activa/desactiva el modo de pantalla completa.
Wait VSYNC [ON/OFF] -> activa/desactiva la sincronizacin con el retrazo vertical.
Show FPS [ON/OFF] -> visualiza/oculta los frames por segundo actuales
Battery Icon [ON/OFF] (solo aparece en el modelo de GP2X F100) -> visualiza/oculta el icono de estado de batera (parte superior derecha). En
	modo Full Screen no se visualiza el icono hasta que la batera est a punto de agotarse. Cuando la bateria esta proxima a agotarse,
	el led rojo parpadear tambien en todos los casos.
POKE Manager -> accede al men para seleccionar/programar POKES de Spectrum (modificacin de valores de la memoria, para los novatos)
Photo Mode [Enabled/Disabled] -> Habilita o deshabilita la capacidad de hacer fotos en el emulador (L+SELECT desde la emulacin).
	Las imagenes se almacenan en el directorio /img/
Sleep Mode-> Modo de suspension que apaga el LCD y ralentiza la velocidad de los procesadores. Pulsa L+SELECT para despertar.
New +3 Disk (solo aparece cuando emulamos el modelo +3) -> cambia el disco por uno nuevo formateado
Use SIDE X for +3 Disk -> Selecciona la cara del disco (si es de doble cara)
Save +3 Disk -> Salva el disco actual en el directorio /roms/spectrum/saves con nuevo nombre. Si escribes nuevos datos en el disco, usa esto para
	guardar los cambios
FS [0/1], Contention [on/off] -> activa/desactiva el frameskip y la emulacin de la memoria en contienda. Cada uno de los 4 modos
	disponibles usar una velocidad diferente de procesador, que puede ser variada segn convenga bajarla para aumentar la
	longevidad de las pilas o aumentarla porque un determinado programa demande ms potencia. Para bajar o subir la velocidad
	de un modo, se selecciona y se usan los botones de volumen.
Emulation Speed [25 a 175]% -> Permite aumentar o reducir la velocidad original del Spectrum, lo cual puede ser til para variar la dificultad
	de los 	juegos u observar algn detalle ms lentamente. Mientras est seleccionada esta opcin, los botones de volumen varan esta
	velocidad, no la del procesador.

Sound Mute [OFF/High/Low] -> Permite reducir la ganancia de sonido, pensado especialmente para el modelo F200 de la GP2X.
Sound [OFF/Mono/Stereo Beeper/Stereo ABC AY/Stereo ALL] -> especifica el modo de sonido.
Sound Rate [11025/22050/32000/44100] KHz -> especifica la frecuencia de la calidad de sonido.

Fast Loading [ON/OFF] -> activa/desactiva el modo rpido de carga.
Flash Loading [ON/OFF] -> activa/desactiva la carga instantnea de bloques estandar de cinta.
Edge Loading [ON/OFF] -> activa/desactiva la deteccin de bordes que sirve para acelerar las carga de bloques no estandar de cinta.
Auto Tape Play/Stop [ON/OFF] -> activa/desactiva el autoarranque/parada de la cinta.
Tape Browser -> Acceder al navegador de cinta.

Exit from Game -> Sale del juego a la pantalla de seleccin de juegos.
Return to Game -> retorna al juego (pulsando Y se hace la misma operacin).


Tape Browser
------------

Al entrar en esta opcin, si tenemos una cinta metida, podremos ver la estructura de bloques de la cinta, en la cual el
	bloque actual aparecer precedido de un asterisco.
Moviendo el joystick arriba y abajo podemos movernos por los bloques.
Si pulsamos A/X cuando estamos en el bloque actual, pararemos o arrancaremos la cinta de forma manual.
Si pulsamos A/X cuando estemos sobre otro bloque que no es el actual, dicho bloque pasar a ser el actual.
Con START podemos cargar otra cinta diferente (o incluso un snapshot).
Con SELECT saldremos del Tape Browser.


POKE Manager
------------

Al entrar en este men, se carga el fichero .pok correspondiente al juego (si hay alguno creado) y se nos presentan 5 opciones de POKES que 
se utilizan con X y pueden ser editados pulsando A. Al salir, se guarda el archivo .pok (si procede) en el directorio /saves/

POKE TITLE EDITOR:

Editor de nombre que permite hasta 29 caracteres usando un teclado virtual. Pulsando Ent en el teclado, se accede a la edicin de valores

POKE VALUE EDITOR:

Permite la edicin de hasta 10 pokes que posteriormente, seran fijados al pulsar X en el POKE Manager. Los pokes por debajo de 16384, son ignorados 


Extensiones de juego y su utilizacin
-------------------------------------

.TAP, .TZX -> Utilizar el loader de 128k, y si no funciona probar a ir al modo de 48K (mediante RESET en el teclado virtual) y teclear
	LOAD "" (pulsar LOAD en el teclado virtual)
.Z80, .SNA -> carga directamente
.DSK -> Utiliza el Loader del +3


Agradecimientos (de Hermes)
---------------

En primer lugar, a rlyeh por su trabajo tanto en el campo de gp32 como en el gp2x y por proporcionarme las herramientas y el cdigo base para crear ste emulador

Por supuesto, mi sincero agradecimiento a todas las personas que de una forma u otra, han contribuido con su trabajo a que ste emulador sea posible.

No puedo tampoco dejar de agradecer a la gente de los foros gp32spain, su apoyo entusiasta y el mimo con que me tratan.

Espero que os guste ste emulador: va por vosotros ;)


Crditos
--------

 Este emulador es el resultado del trabajo de muchas personas, las cuales debemos mencionar.

* Los principales autores del emulador son:
  - Hermes/PS2R: Realiz el port original para GP2X a partir del emulador fzx32 para GP32
  - Metalbrain: Mltiples mejoras, principalmente en la CPU, temporizaciones y precisin de emulacin de la pantalla.
  - Seleuco: Mltiples mejoras, principalmente en el sonido y soporte de cinta.
* Las siguientes personas han contribuido con parches:
  - kounch: Parche para escalado del TV-out.
  - GnoStiC: Parche para soportar joysticks USB.
* Se utiliza cdigo genrico para GP2X de:
  - rlyeh: su minimal library se utilizaba en versiones antiguas y la actual micro lib se ha podido crear en parte gracias a su trabajo.
  - Squidge: MMU hack.
  - Puck2099: Biblioteca de joysticks USB.
  - notaz: cdigo para limpiar la cach de memoria superior.
* Por ltimo, pero no menos importante, GP2Xpectrum ha usado cdigo de otros muchos proyectos de cdigo abierto, cuyos
	autores nombraremos tambin:
  - rlyeh (de nuevo): creador del emulador fzx32 para GP32.
  - Santiago Romero: creador del emulador ASpectrum, en el cual se bas principalmente el fzx32.
  - Philip Kendall, Darren Salt, Witold Filipczyk, Fredrick Meunier y Matan Ziv-Av: creadores del emulador FUSE, del cual se usa la
  	parte del sonido (y algunos cachitos de CPU) y su librera asociada libspectrum (la cual se usa para el soporte de TZX).
  - James McKay: Creador del emulador X128.
  - Ulrich Doewich: Creador de Caprice, emulador de Amstrad CPC, del cual se obtuvo el cdigo para la unidad de disco del +3.
  - Sergey Bulba: Creador de la utilidad AY2SNA.
  - Julian R Seward: Creador de BZIP.
  - Dieter Baron and Thomas Klausner: Creadores de LIBZIP.

* Cualquiera que se nos haya olvidado: Contacta con nosotros y te aadiremos sin falta!


Historia
--------

V1.0 by Hermes/PS2R (2006/02/05)
- Versin inicial

V1.1 by Hermes/PS2R (2006/02/06)
- Corregido Bug que hacia que Commandos corrompiera la pantalla
- Arreglado problema al subir/bajar volumen (ahora es mas gradual)
- Aadido temporizador para limitar el numero de frames maximos a la tasa del Spectrum.
- Posibilidad de salvar el perfil de teclado/joystick que estemos usando en un juego en el men de configuraciones (luego se recupera automaticamente al cargarlo).

V1.2 by Metalbrain (2006/09/05)
- Aadidos cambios de kounch en la minimal lib para permitir el TV-Out
- Cambiado el mapeado del teclado por defecto, que pasa a ser:
arriba 		> Q
abajo		> A
izquierda	> O
derecha		> P
A		> SPC
B		> M
X		> ENTER
Y		> 0
L		> CAPS SHIFT
R		> SYMBOL SHIFT
- L y R pueden asignarse a cualquier tecla, en lugar de quedarse fijos a CAPS y SYMB
- Se puede asignar una ruta para los juegos diferente a /roms/spectrum especificandola en
un archivo .ini que est junto al ejecutable y tenga el mismo nombre que este.
- Corregido bug al cargar algunos archivos .z80 con un bloque sin compresin.
- L y R avanzan pgina en la lista de juegos (-25 y +25)
- Aumentado el mximo nmero de juegos en la lista de 512 a 10240
- Corregida la temporizacin de las instrucciones con repeticin (LDIR,LDDR,CPIR,CPDR,INDR,INIR,OTIR,OTDR)
- Activada la emulacin de memoria contenida
- Aadida la opcin de visualizar 50 frames por segundo (No Frameskip) en lugar de 25
(Frameskip 1), para permitir ver algunos efectos. Cuando no se hace frameskip, la
velocidad de proceso sube a 175 MHz.

V1.3 by Metalbrain (2006/12/02)
- Aplicado el hack de Squidge, gracias a Kounch y Puck2099. Esto permite bajar la velocidad
del procesador a 120MHz (frameskip 1) y 166MHz (sin frameskip). En versiones anteriores,
subir a 175MHz en realidad no era suficiente, por lo que se ejecutaba ms lento de lo que
debera cuando estaba sin Frameskip, y por eso se han podido bajar menos megaherzios en ese
modo.
- Aadido soporte para Joystick USB, por cortesa de GnoStiC.
- Corregido el comportamiento de los flags para INI/INIR/IND/INDR/OUTI/OUTD/OTDR/OTIR
- Corregido un pequeo bug con la velocidad: estaba arrancando siempre a 166MHz,
independientemente de lo que dijera su configuracin.
- Corregido un bug que haca que a veces ignorara el archivo .ini .
- Los saltos de lnea (y todo lo que vaya despus de la primera lnea) en el archivo .ini ahora se ignoran.
- Corregido bug al cargar algunos archivos .z80 con versin 1.45 .
- Corregido un bug en la instruccin DAA
- Corregido el comportamiento de los flags para BIT, CPI, SBC y SCF

V1.4 by Metalbrain (2007/06/19)
- Corregida la temporizacin de algunas instrucciones.
- Aadida contienda del bus en instrucciones IN y OUT
- Cambiada la emulacin de memoria en contienda por un modelo ms preciso. La emulacin de la memoria en
contienda es opcional.
- Velocidad subida a 145/175MHz cuando la emulacin de memoria en contienda est activa, y se queda en 130/160MHz
cuando no lo est.
- La velocidad se puede cambiar en el men usando VOL+/-, y se puede guardar para cada juego individual junto con
su perfil de teclado. El rango permitido oscila entre 100 y 220 MHz.
- Corregido un bug en la asignacin de los botones L y R desde un archivo .key
- Ahora en el teclado virtual el botn Y sirve pare pulsar una tecla y quitar el teclado virtual (til para menus).
- Pequeos cambios al men de configuracin:
 La opcin por defecto es ahora Return (volver)
 Load Game State y Save Game State han sido separadas para reducir la posibilidad de equivocaciones
- El volumen se pone al 70% al salir, en lugar del 0% como antes, para que los juegos que no fijan el volumen no
se queden mudos tras ejecutar GP2Xpectrum.

V1.5 by Metalbrain & Seleuco (2008/01/20)
- Corregido un bug que impeda que se asignase una tecla al botn Y usando el teclado virtual.
- El teclado virtual ya no har que se muestren todos los frames cuando tenemos el frameskip 
a 1 (lo que reduca la velocidad a la mitad).
- Estaba aplicando la emulacin de contienda en un sitio donde no deba cuando se seleccionaba
no emularla. Ahora sin contienda ser menos preciso, pero se ha reducido la velocidad por defecto
a 125MHz/155MHz.
- Corregido un bug que haca que la contienda no se aplicase a los puertos la mayor parte de
las veces.
- Corregido bug en la temporizacin de HALT, que estaba usando 8 estados en lugar de 4.
- Mejorada la emulacin de bus flotante, ahora pasa el test floatspy y otros similares.
- Mejorada la emulacin de interrupciones, incluyendo el efecto de EI sobre ellas.
- Pequeas optimizaciones.
- Reescrito totalmente el cdigo de dibujar la pantalla, ahora el borde est completamente
emulado (se ven las letras del Sentinel), y los efectos visuales de muchas demos son finalmente
perfectos (Overscan, Shock y similares). Pero todava falla alguna que otra demo, como MDA.
- En el modelo F200, no se muestrea el estado de la batera, evitando as la ralentizacin
brutal que se produca en este modelo. (Gracias a headoverheels)
- Corregido la emulacin del sonido. Fixes del speaker (Sonidos polifonicos) y AY. Reescrito el codigo
de acceso al DSP. Menos problemtico y produce menos underrun.
- Aadido sonido stereo para el speaker y el AY.
- Selector de modo de sonido en el menu de configuracin: Sin sonido, Mono, Stereo beeper, Stereo AY, Stereo Todo.
- Selector de frecuencia: 44100,32000,22050,11025KHz
- Selector de mute: Off,Low, High. Reduce la ganacia del sonido. Ideal para la F200... :)
- Selector de velocidad de emulacin: de -75% a + 75 %. Aumenta o reduce la velocidad original
del Spectrum. Para jugar a toda pastilla al ManicMiner :)
- Selector de FPS: Muestra los FPS.
- Selector de VSYNC: Activa el VSYNC.
- Corregido bug que no guardaba la configuracin si no estabamos en la ruta por defecto.

Nota: El sonido stereo consume mas recursos. Si oyes petardeos prueba a subir la velocidad
del procesador o elige otra configuracin de sonido.

V1.5.1 by Seleuco (2008/01/22)
- Corregido un bug que haca que no existiese configuracin por defecto si no se encuentra
el archivo .cfg, impidiendo la ejecucin del emulador en los modelos F200.

V1.6 - No existe 1.6!
(Realmente, era una versin previa a la 1.5, pero como un topic en gp32spain causo la confusin, decidimos saltarla)

V1.7 by Seleuco & Metalbrain (2008/02/24)
- Soporte completo para el formato TZX. Reescrito totalmente el soporte de cintas tanto TZX como TAP.
- Se emula correctamente el sonido de la cinta
- Opcin el el menu de "fast loading". Desactiva el sonido de la cinta, la velocidad de emulacin, y la contienda.
- Opcin en el menu de "flash loading". Aplica flashloading si puede. Intercepta rutinas de carga de la rom y realiza 
la carga instantanea de los bloques.
- Opcin en el menu de "edge loading". Intercepta rutinas de carga tanto de la rom, como de los juegos y las acelera 
en tiempo de ejecucin.
- Opcin en el menu de "Tape Auto Play/Stop". Para o arranca la cinta automaticamente si detecta intentos de lectura a 
travs del puerto del MIC. Imprescindible para los tap si no se hace "flash loading".
- Se indica si la cinta esta en marcha con el icono "tape" en el la pantalla. Si esta en amarillo la reproducin es normal. 
Si esta en verde, la reproduccin esta en modo acelerado porque se ha podido detectar un cargador y se esta aplicando 
"edge loading". Cuando se para la cinta aparece un stop durante 3 segundos.
- Auto "full screen off-on" si se reproduce una cinta.
- Aadido un Tape browser, que permite ver los bloques de la cinta, parar-arrancar la cinta de manera manual, seleccionar 
bloques y cambiar de cinta sin resetear.
- Se Permite selecionar dentro de un zip el tzx o fichero a cargar.
- Las pantalla de seleccin de programas se hace mas grande para que quepa mas. Tambn se trunca el nombre del fichero de manera 
que podamos ver la extensin.
- Se aade reset para el modelo +2A .
- Corregido un bug al cargar archivos .z80 grabados en modo +2A/+3 (la ROM no se seleccionaba bien).
- Para mejorar el rendimiento, no se comprueba el nivel de las pilas cuando el icono est inactivo, y cuando est activo
se muestrea a menor frecuencia.
- Reemplazado el texto "ROM LIST" por "PROGRAM LIST", y "+3 disc" por "+3 disk".
- Actualizada documentacin.
- Compilado con profiling activado.
Notas:
- Para reproducir una cinta como en el Spectrum original solo tenenemos que desactivar el "fast loading", "flash loading" y 
"edge loading".
- Aunque se active el "edge loading", eso no quiere decir que se aplique siempre, sino solamente cuando se detecta un cargador.
El algoritmo aplica una mascara sobre los cargadores mas comunes para acelerarlos pero existen cargadores (los menos) que no 
son detectados.
- Si una cinta no se carga, puede que el "edge loading" haya detectado erronamente un cargador, con lo que deberiamos 
desactivar el "edge loading" e intentar de nuevo.
- De igual manera el "flash loading" puede fallar, con lo que podemos desactivarlo.
- La manera mas compatible de cargar una cinta es sin "flash loading" ni "edge loading", aunque es recomendable dejarlas activadas 
por defecto y unicamente desactivarlas si tenenmos problemas con alguna cinta.

V1.7.1 by Seleuco & Metalbrain (2008/03/10)
- Corregido el bug que haca que el LOAD del teclado virtual fallase la mayora de las veces.
- Aadido un hack para cargar el archivo .ini que indica la ruta de los programas de forma ms compatible con gmenu2x.
- Mejorado el edge loading, detecta mas cargadores, bucles de espera DJNZ y bucles de espera en posiciones relativas.
- Sustituida la minimal lib de rlyeh por la micro lib de Seleuco. Ms pequea, ms rpida y GPL.
- Aadidos copyrights al cdigo fuente. Si crees que falta el tuyo, contacta con nosotros.
