
About
-----

Snes9x for UIQ2 is a port of well known Super Nintendo Entertainment System
/ Super Famicom emulator with the same name. It is actually based on
OpenSnes9xGP, modified Snes9x for GP32 handheld, which had parts of it
adapted to / totally rewritten for GP32 (in C or ASM). As GP32 is ARM CPU
based device (same as UIQ2 phones), these optimizations were used in this
port.


Features
--------

* Zipped ROM support.
* SRAM support. 
* Save state support.
* Game screen rotation and 2 render modes ('centered' and 'fit').
* Selectable frameskip.
* Configurable keys and touchpad.
* Flip-closed mode for SE phones.
* Full sound support (very slow and barely useable).


Problems / limitations
----------------------

* Due to various optimizations emulation accuracy was lost and most games
  have various graphical glitches, some are unplayable at all.
* Some SNES PPU (pucture processing unit) effects cause major slowdowns.
* Enabling sound slows the emulation way too much (it was added only because
  it was already there in Snes9x, and was easy to port).
* SuperFX games eather crash or are totally unplayable (< 1fps).
* No support for SA1.


Configuration
-------------

1. Keys:

Key configuration is exactly the same as in PicodriveN, you can check a
tutorial here:
http://notaz.atspace.com/pico_tut/

There are no default settings.
When you start key configuration mode, black screen with dark-red squares will
appear. Also there will be little 'control' on the right with the function
name in it, and arrows on the corners of it. You can tap on these corners to
select a function. You can also tap on these squares to bind that function to
them. This way you can associate touchpad areas with game-controls or functions.
I also made a small square in every corner of the screen to be used as a virtual
button for some function, like save state. You can bind it as you like. To
bind phone buttons, simply select the function you need, and press a button
you want. To unbind any key or touchpad area, simply push or tap it again.
To configure flip-closed mode, enter configuration mode and close flip.

When finished, select 'done' and press any key. You can also hold 'Power'
button for a while to exit (seems to work on PXXX only).

You need to bind 'pause emu' function to be able exit game when ROM is loaded.
You can also exit game by holding 'power' button (possibly 'end' for motorola
users (?)).

2. Main Settings:

Here you can set the orientation of screen and the drawing mode. The "fit"
option will scale the image so it fully fits in the screen, but some detail
will be lost. "center" displays the game at the center of the screen, but
non-fitting parts are not visible then (better for RPG games with lots of
text, which becomes unreadable in 'fit' mode).

"Use SRAM saves" option enables emulation of batery-backed save RAM some game
cartridges had. RPG games used it alot, but there were some others too, like
Super Mario World. If this is enabled, <ROMname>.srm files are generated when
you pause or exit the emulator, also when you load another ROM.

"Show FPS" shows game frames per second in format XX/YY, where XX is the
number of frames shown per previous second, and YY is the number of frames
emulated, but not necessarily shown. By calculating YY-XX you get the number
of skipped frames per second.

3. Sound settings:

"Enable SPC700 chip" - enables emulation of SPC700, which is main SNES sound
controller chip. It must be enabled when you use sound. Some games rely on it,
so you must leave it enabled for those games even when you disable sound.

"Speed hack" - this disables emulation of complex synchronization between the
main CPU and sound chip and gives good performance increase. Unfortunately
sound breaks in some games (noise is heard) and others dont work at all, so
use only if game shows no problems with it (which is recommended).

Note to PicodriveN users: due to the way this emulator is written, changing
display modes doesn't give (noticeable) perdormance increase.

Note: if you change sound settings AFTER loading a ROM, you may need to reset
game to get sound. This is because most games initialize sound chips on
startup, and this data is lost when sound chips are being enabled/disabled.

4. Gfx:

Here you can disable any grapic layer. This is useful when some game effects
are emulated poorly, for example fog, which should be transparent, but due to
missing features it is displayed opaque and covers the whole screen. In that
case you can disable the fog layer (you will have to find it the correct
option by trying them all) and play through that location.

5. Misc:

"gzip save states" enables gzip (similar to ordinary zip, but a little
different) compression on your save states to save space. The compression
ratio is 50-90%, so it's worth to enable this.

6. Frameskip:

"Auto"  option tries to run the game in it's original speed by skipping next
        frame if the previous was rendered too slow.
"0"     displays every frame, thus game runs very slow.
"1"     skips every other frame. Game should run a smoother with this, but
        may be too slow.
"2"     also makes the game smoother, speed depends on gam itself.
"4","8" should be too fast and may be useful for skiping intros, etc.



Credits
-------

This emulator uses code from these people/projects:

Snes9x team:
Gary Henderson, Jerremy Koot, John Weidman and others (see below)
* The emulator itself!
Homepage: http://www.snes9x.com/

Yoyofr and Laxer3a
* All the work in their OpenSnes9xGP: asm CPU core, new PPU code,
  various tweaks
Homepage: http://yoyofr92.free.fr/

notaz
* UIQ port, minor code changes.
Homepage: http://notaz.atspace.com/
E-mail: notasas(atsymbol)gmail.com


Additional thanks
-----------------

* Peter van Sebille for ECompXL and his various open-source Symbian projects
  to learn from.
* Mark and Jean-loup for zlib library.
* The development team behind "Symbian GCC Improvement Project"
  (http://www.inf.u-szeged.hu/symbian-gcc/) for their updated compile tools.


Changelog
---------

0.40
  * Rewrote the spc700 core in ARM asm, gives noticeable sound performance
    increase.
  + Added sound "speed hack" option, which increases performance, but doesn't
    work in some games (hangs or adds noises, so must be disabled there).
  + Re-added C4 emulation (needed for Megaman/Rockman).
  * Fixed a crash which sometimes happened just after pausing the game or when
    exiting emulator (introduced in 0.32).

0.32
  + Added ability to disable graphic layers to overcome a problem when a layer
    with broken transparency covers the whole screen.
  + Video fix for asian A1000s.
  * Very minor sound performance optimization which nobody will notice.

0.311
  * Fixed a PPU sprite problem (introduced in 0.31), which was seen in Robotrek
    and probably some other games.

0.31
  + Fix for A1000s problem. The application launcher in these phones has weird
    behaviour: it first tries <appname>.exe, and then <appname>.app, so it
    was trying to start the emulation engine exe instead of the launcher
    and failing silently.
  * Sprites are now drawn in reverse order. Sprites which overlap with each
    other are now drawn correctly in more games then before.
  + Added an option to gzip save states to save space.
  - Removed the c CPU core, it was not used but compiled into binary.
    This saves a lot of memory.
  - Removed SA1 code as it is not working anyway.
  + The emulator now pauses whenever it is loosing focus, so it will now pause
    when alarm/ponecall/battery low/... windows come up.
  - Removed 'pause on phonecall' feature, as it is no longer needed.
  * Fixed Pxxx jog up/down which were not working in game.

0.30
  Initial release.


Legal / Disclaimer
------------------
  Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.

  (c) Copyright 1996 - 2002 Gary Henderson and Jerremy Koot

  (c) Copyright 2001 - 2004 John Weidman

  (c) Copyright 2002 - 2004 Brad Jorsch,
                            funkyass,
                            Joel Yliluoma,
                            Kris Bleakley,
                            Matthew Kendora,
                            Nach,
                            Peter Bortas and
                            zones

  C4 x86 assembler and some C emulation code
  (c) Copyright 2000 - 2003 zsKnight,
                            _Demo_, and Nach

  C4 C++ code
  (c) Copyright 2003 Brad Jorsch

  DSP-1 emulator code
  (c) Copyright 1998 - 2004 Ivar , _Demo_, Gary Henderson,
                            John Weidman, neviksti,
                            Kris Bleakley, Andreas Naive

  DSP-2 emulator code
  (c) Copyright 2003 Kris Bleakley, John Weidman, neviksti, Matthew Kendora, and
                     Lord Nightmare

  OBC1 emulator code
  (c) Copyright 2001 - 2004 zsKnight, pagefault and
                            Kris Bleakley
  Ported from x86 assembler to C by sanmaiwashi

  SPC7110 and RTC C++ emulator code
  (c) Copyright 2002 Matthew Kendora with research by
                     zsKnight, John Weidman, and Dark Force

  S-DD1 C emulator code
  (c) Copyright 2003 Brad Jorsch with research by
                     Andreas Naive and John Weidman
 
  S-RTC C emulator code
  (c) Copyright 2001 John Weidman
  
  ST010 C++ emulator code
  (c) Copyright 2003 Feather, Kris Bleakley, John Weidman and Matthew Kendora

  Super FX x86 assembler emulator code 
  (c) Copyright 1998 - 2003 zsKnight, _Demo_, and pagefault 

  Super FX C emulator code 
  (c) Copyright 1997 - 1999 Ivar, Gary Henderson and John Weidman

  SH assembler code partly based on x86 assembler code
  (c) Copyright 2002 - 2004 Marcus Comstedt


  Permission to use, copy, modify and distribute Snes9x in both binary and
  source form, for non-commercial purposes, is hereby granted without fee,
  providing that this license information and copyright notice appear with
  all copies and any derived work.
 
  This software is provided 'as-is', without any express or implied
  warranty. In no event shall the authors be held liable for any damages
  arising from the use of this software.
 
  Snes9x is freeware for PERSONAL USE only. Commercial users should
  seek permission of the copyright holders first. Commercial use includes
  charging money for Snes9x or software derived from Snes9x.
 
  The copyright holders request that bug fixes and improvements to the code
  should be forwarded to them so everyone can benefit from the modifications
  in future versions.
 
  Super NES and Super Nintendo Entertainment System are trademarks of
  Nintendo Co., Limited and its subsidiary companies.
