
              __________
             /         /\           __            _____
            /     ____/  \         /  \          /\    \
           /     /___ \   \    ___/    \___    _/__\    \____
          /         /\ \  /   /            \  /\             \
         /         /  \_\/   /              \/  \             \
        /     ____/    \    /____        ____\   \____      ___\
       /     /____\___ /    \   /        \   /   /   /\     \  /
      /              /\      \_/          \_/\  /   /  \     \/
     /              /  \      /____________\  \/___/    \_____\
    /______________/    \     \            /       \    /     /
    \              \    /      \          / -==#==- \  /     /
     \              \  /        \________/   v1.03   \/_____/
      \______________\/                     -==#==-

                                          by James Sutherland
                                               Copyright 1997


NOTE: I'm after a nice loading screen for E++.  If you are interested
      in making one, drop me a line.

INTRODUCTION
------------

E++ is a program which can emulate the hardware of other computer systems.
It is easily extendible and designed to be very portable between different
platforms.

E++ is now full release software.  This means that the functionality is
complete, and there are no serious (known) bugs left.  Note that this 
doesn't mean that new features won't be added, just that new stuff 
shouldn't start breaking old stuff.  The front end is still alpha,
and is non-functional (looks pretty, though).


RUNNING E++
-----------

NOTE: YOU MUST UNZIP THE E++ ARCHIVE WITH THE -d OPTION, SO THAT THE
DIRECTORY STRUCTURE REMAINS INTACT!

To launch E++, simply run the executable from a DOS prompt, with the
following format:

    EPP [options] [machine] [machine options]

The options currently available are:

    -nojoy              Tell EPP not to use the PC joystick.  Instead
                        the cursor keys and ctrl will act as a joystick.

    -synch              Synchronize the screen update with the vertical
                        refresh of your monitor.  This is much smoother,
                        but won't degrade nicely, and is a bit too fast.

The machines available are:

    invaders            Space Invaders arcade machine
    spectrum            Sinclair ZX Spectrum
    phoenix             Phoenix arcade machine
    pleiads             Pleiads arcade machine
    lrescue             Lunar Rescue arcade machine
    centipede           Centipede arcade machine

If you don't specify a machine, then the emulator will start up the
front end, which allows you to select the emulator you want.  Use
the cursor keys to select the desired machine, then use the number
keys to alter settings.  Enter starts the selected machine, and ESC
exits to DOS.

You can exit the emulator with ESC.

Note that you MUST have VESA 2 support for your graphics card.  If your
card doesn't support VESA 2 natively, you might find a driver on the
disks which came with the card, on the manufacturer's web site, the
chipset manufacturer's web site or at Scitech's site (www.scitech.com).
Your VESA 2 support must include Linear Framebuffer mode.  I use
S3VBE20, which supports most S3-based cards.

E++ can now run without detecting a sound card.  The first time you
start it, the emulator will ask you to select a sound card.  This
setting will be saved and you won't be asked again (if you need to
change your selection, then delete the audio.cfg file).

If you get problems running the emulator, then check the Epplog.txt file
for error messages.  If you still can't solve the problem, then feel
free to contact me (see below).  Also, check the release notes 
(history.txt) since they contain additional information which might
be relevant.


KEYS
----

You can use the following keys in all emulations:

F1:  Reset the emulated system

F11: Toggle a framerate display on and off.  Note that you might see the
     framerate flicker between the correct value and one below it.  This
     is just a slight inaccuracy in the timing, and nothing to worry 
     about.  You may also find that the framerate display doesn't
     clear straight away (eg on the Spectrum, it remains until the border
     changes).


MACHINE NOTES
-------------

Spectrum
========

You can optionally supply a snapshot file (.SNA format) on the command 
line, which the emulator will load on startup (eg: EPP spectrum jetset.sna).

The keys are mapped as you would expect, with left and right shift as
Caps- and Symbol-shift.  Additionally, you can use a Joystick (Kempston
emulation).

Invaders
========

Use joystick left, right and fire.  3 inserts a coin and 1 and 2 are the
start buttons.

You have to get the Invaders ROMs from somewhere (read them from your
Space Invaders board).  The files should be named invaders.e - h and
go in the Roms directory.  Please don't ask me for these files.

You need sound samples to run the game (it won't work without them).  The
files are included with the emulator, and are standard wav files (despite
the names).

I'm not sure about the overlays, but they look about right.

Phoenix
=======

Usual controls.

You need the Phoenix ROMs.  These go in the Roms directory, and should
be named phoenix.??, where ?? are numbers.

There is no sound support yet, but otherwise it should be 100%.

Pleiads
=======

The ROMs names are pleiades.?? (note the e).  This is maintain 
compatibility with MAME.

Colours are almost certainly wrong.  If you have any screenshots, or
can get the colour PROMs for me, then please contact me.

Lunar Rescue
============

ROMs are lrescue.1 - lrescue.6.  The overlays should be correct (I
trusted MAME for these).

Centipede
=========

ROMs are centipede.???, where ??? is 211, 212 and 307-310.

The graphics library chops off the bottom 8 pixels of the screen, but 
otherwise should be 100% (can someone verify colours, though?).

You can use either the joystick or mouse to control Centipede -
both are active at the same time.  Could someone check the speed
which you move when using the mouse, though, because you can't
move as fast as with the joystick - is this correct?


BUGS
----

This is what I know about, please report any others.

- Some (Spectrum) games may not run.  I know that at least one function of 
  the Speccy hardware isn't supported, and this may cause problems.  The 
  only game I have problems with is Commando, but your mileage may vary.
  Let me know.

- The current DOS graphics library mean that std error output is not
  displayed.  You can check the log file for most errors, now, though.

- I need to sort out the UFO sample for the Invaders game class.  You
  can tell the problem under Lunar Rescue.


TODO
----

- Fix the above.

- I'm still not happy with the speed of the Speccy when a lot is going
  on at one on the screen.  I need to change the way the dirty buffer
  works for this.

- Start emulating more platforms.

- Add 6809 and 68000 cores.

- Port to X11 and/or SVGAlib.

- Optimize, optimize, optimize.

- Add CPU tracing.

- Add assembler cores for x86.  Maybe.

- Sort out ROM handling (maybe use a librarian-type thing).

- Stop trying to write C++ like it's Java.


CONCEPT
-------

This project started because I wanted to start writing arcade game
emulators, but didn't like the way MAME does it (it's probably my problem
rather that MAME, but I've used Object Oriented languages so much
recently that I have difficulty thinking procedurally).

The emulator uses OO extensively (and exclusively).  A hierarchy of classes
define processors, video hardware and audio hardware as well as 
abstracting the hardware of the host machine, so that porting is easy.


FEEDBACK
--------

I could really use reports on how well it runs under different setups,
especially NT (I suspect it might have problems) and straight DOS, with
different memory managers.

Please enclose the contents of the log file with any problem reports.

You can contact me at: james@guybrush.demon.co.uk


CREDITS AND THANKS
------------------

Thanks must go to the following:

Those on the MUL8R list, and those who contributed to MAME, without
whose help, I wouldn't have got as far as I have.  Particularly
Nicola Salmoria, Jeff Mitchell and Chris Hardy for their help 
with Phoenix and Centipede.

Neil Beresford for help which is to come.  We may get a good graphics 
library yet...

Marat Fayzullin for his CPU cores.

Ron Fries for his Pokey emulator, which worked first time when I
added it to Centipede.