initial fce ultra 0.81 import
authornotaz <notasas@gmail.com>
Sat, 7 Apr 2007 13:46:21 +0000 (13:46 +0000)
committernotaz <notasas@gmail.com>
Sat, 7 Apr 2007 13:46:21 +0000 (13:46 +0000)
git-svn-id: file:///home/notaz/opt/svn/fceu@90 be3aeb3a-fb24-0410-a615-afba39da0efa

322 files changed:
Documentation/AUTHORS [new file with mode: 0644]
Documentation/COPYING [new file with mode: 0644]
Documentation/ChangeLog [new file with mode: 0644]
Documentation/FAQ [new file with mode: 0644]
Documentation/README [new file with mode: 0644]
Documentation/RELEASE-NOTES [new file with mode: 0644]
Documentation/TODO [new file with mode: 0644]
Documentation/cheat.txt [new file with mode: 0644]
Documentation/fcs.txt [new file with mode: 0644]
Documentation/porting.txt [new file with mode: 0644]
Documentation/rel/1.0 [new file with mode: 0644]
Documentation/rel/1.1.dos [new file with mode: 0644]
Documentation/rel/1.1.linux [new file with mode: 0644]
Documentation/rel/1.1.win [new file with mode: 0644]
Documentation/rel/2.0.dos [new file with mode: 0644]
Documentation/rel/2.0.linux [new file with mode: 0644]
Documentation/rel/2.0.win [new file with mode: 0644]
Documentation/rel/2.1.dos [new file with mode: 0644]
Documentation/rel/2.1.linux [new file with mode: 0644]
Documentation/rel/2.1.win [new file with mode: 0644]
Documentation/rel/3.0.dos [new file with mode: 0644]
Documentation/rel/3.0.linux [new file with mode: 0644]
Documentation/rel/3.0.win [new file with mode: 0644]
Documentation/rel/3.1 [new file with mode: 0644]
Documentation/rel/3.2 [new file with mode: 0644]
Documentation/rel/3.3 [new file with mode: 0644]
Documentation/rel/3.4 [new file with mode: 0644]
Documentation/rel/3.5 [new file with mode: 0644]
Documentation/rel/3.6 [new file with mode: 0644]
Documentation/rel/3.7 [new file with mode: 0644]
Documentation/rel/4.0 [new file with mode: 0644]
Documentation/rel/4.1 [new file with mode: 0644]
Documentation/rel/d [new file with mode: 0644]
Documentation/rel/da.sh [new file with mode: 0644]
Documentation/rel/new [new file with mode: 0644]
Documentation/rel/new.dos [new file with mode: 0644]
Documentation/rel/new.linux [new file with mode: 0644]
Documentation/rel/new.win [new file with mode: 0644]
Documentation/rel/readme-dos.txt [new file with mode: 0644]
Documentation/rel/readme-linux.txt [new file with mode: 0644]
Documentation/rel/readme-win.txt [new file with mode: 0644]
Documentation/rel/toc [new file with mode: 0644]
Documentation/rel/top.dos [new file with mode: 0644]
Documentation/rel/top.linux [new file with mode: 0644]
Documentation/rel/top.win [new file with mode: 0644]
Documentation/tech/README.now [new file with mode: 0644]
Documentation/tech/README.sound [new file with mode: 0644]
Documentation/tech/UNIF_current.txt [new file with mode: 0644]
Documentation/tech/cpu/4017.txt [new file with mode: 0644]
Documentation/tech/cpu/6502_cpu.txt [new file with mode: 0644]
Documentation/tech/cpu/NESSOUND.txt [new file with mode: 0644]
Documentation/tech/cpu/dmc.txt [new file with mode: 0644]
Documentation/tech/exp/mmc5-e.txt [new file with mode: 0644]
Documentation/tech/exp/mmc5_bank_switch.txt [new file with mode: 0644]
Documentation/tech/nsfspec.txt [new file with mode: 0644]
Documentation/tech/ppu/loopy1.txt [new file with mode: 0644]
Documentation/tech/ppu/loopy2.txt [new file with mode: 0644]
Documentation/tech/ppu/timing.txt [new file with mode: 0644]
Makefile.base [new file with mode: 0644]
Makefile.beos [new file with mode: 0644]
Makefile.common [new file with mode: 0644]
Makefile.dos [new file with mode: 0644]
Makefile.linuxvga [new file with mode: 0644]
Makefile.unixsdl [new file with mode: 0644]
Makefile.win [new file with mode: 0644]
banksw.h [new file with mode: 0644]
boards/Makefile [new file with mode: 0644]
boards/h2288.c [new file with mode: 0644]
boards/malee.c [new file with mode: 0644]
boards/mapinc.h [new file with mode: 0644]
boards/novel.c [new file with mode: 0644]
boards/sachen.c [new file with mode: 0644]
boards/simple.c [new file with mode: 0644]
boards/super24.c [new file with mode: 0644]
boards/supervision.c [new file with mode: 0644]
cart.c [new file with mode: 0644]
cart.h [new file with mode: 0644]
cheat.c [new file with mode: 0644]
cheat.h [new file with mode: 0644]
crc32.c [new file with mode: 0644]
crc32.h [new file with mode: 0644]
debug.c [new file with mode: 0644]
debug.h [new file with mode: 0644]
drawing.h [new file with mode: 0644]
driver.h [new file with mode: 0644]
drivers/cli/dface.h [new file with mode: 0644]
drivers/cli/dos-joystick.c [new file with mode: 0644]
drivers/cli/dos-joystick.h [new file with mode: 0644]
drivers/cli/dos-keyboard.c [new file with mode: 0644]
drivers/cli/dos-mouse.c [new file with mode: 0644]
drivers/cli/dos-sound.c [new file with mode: 0644]
drivers/cli/dos-sound.h [new file with mode: 0644]
drivers/cli/dos-video.c [new file with mode: 0644]
drivers/cli/dos-video.h [new file with mode: 0644]
drivers/cli/dos.c [new file with mode: 0644]
drivers/cli/dos.h [new file with mode: 0644]
drivers/cli/input.c [new file with mode: 0644]
drivers/cli/keyscan.h [new file with mode: 0644]
drivers/cli/lnx-joystick.c [new file with mode: 0644]
drivers/cli/lnx-joystick.h [new file with mode: 0644]
drivers/cli/main.c [new file with mode: 0644]
drivers/cli/main.h [new file with mode: 0644]
drivers/cli/sdl-joystick.c [new file with mode: 0644]
drivers/cli/sdl-netplay.c [new file with mode: 0644]
drivers/cli/sdl-netplay.h [new file with mode: 0644]
drivers/cli/sdl-sound.c [new file with mode: 0644]
drivers/cli/sdl-video.c [new file with mode: 0644]
drivers/cli/sdl-video.h [new file with mode: 0644]
drivers/cli/sdl.c [new file with mode: 0644]
drivers/cli/sdl.h [new file with mode: 0644]
drivers/cli/svga-video.c [new file with mode: 0644]
drivers/cli/svga-video.h [new file with mode: 0644]
drivers/cli/svgalib.c [new file with mode: 0644]
drivers/cli/svgalib.h [new file with mode: 0644]
drivers/cli/throttle.c [new file with mode: 0644]
drivers/cli/throttle.h [new file with mode: 0644]
drivers/cli/unix-basedir.h [new file with mode: 0644]
drivers/cli/unix-netplay.c [new file with mode: 0644]
drivers/cli/unix-netplay.h [new file with mode: 0644]
drivers/cli/usage.h [new file with mode: 0644]
drivers/cli/vgatweak.c [new file with mode: 0644]
drivers/common/args.c [new file with mode: 0644]
drivers/common/args.h [new file with mode: 0644]
drivers/common/cheat.c [new file with mode: 0644]
drivers/common/cheat.h [new file with mode: 0644]
drivers/common/config.c [new file with mode: 0644]
drivers/common/config.h [new file with mode: 0644]
drivers/common/unixdsp.c [new file with mode: 0644]
drivers/common/unixdsp.h [new file with mode: 0644]
drivers/common/vidblit.c [new file with mode: 0644]
drivers/common/vidblit.h [new file with mode: 0644]
drivers/win/cheat.c [new file with mode: 0644]
drivers/win/cheat.h [new file with mode: 0644]
drivers/win/common.h [new file with mode: 0644]
drivers/win/config.c [new file with mode: 0644]
drivers/win/input.c [new file with mode: 0644]
drivers/win/input.h [new file with mode: 0644]
drivers/win/joystick.c [new file with mode: 0644]
drivers/win/joystick.h [new file with mode: 0644]
drivers/win/keyboard.c [new file with mode: 0644]
drivers/win/keyboard.h [new file with mode: 0644]
drivers/win/keyscan.h [new file with mode: 0644]
drivers/win/main.c [new file with mode: 0644]
drivers/win/netplay.c [new file with mode: 0644]
drivers/win/res.res [new file with mode: 0644]
drivers/win/sound.c [new file with mode: 0644]
drivers/win/throttle.c [new file with mode: 0644]
drivers/win/video.c [new file with mode: 0644]
drivers/win/wave.c [new file with mode: 0644]
drivers/win/window.c [new file with mode: 0644]
endian.c [new file with mode: 0644]
endian.h [new file with mode: 0644]
fce.c [new file with mode: 0644]
fce.h [new file with mode: 0644]
fceline.h [new file with mode: 0644]
fds.c [new file with mode: 0644]
fds.h [new file with mode: 0644]
file.c [new file with mode: 0644]
file.h [new file with mode: 0644]
general.c [new file with mode: 0644]
general.h [new file with mode: 0644]
git.h [new file with mode: 0644]
ines.c [new file with mode: 0644]
ines.h [new file with mode: 0644]
input.c [new file with mode: 0644]
input.h [new file with mode: 0644]
input/Makefile [new file with mode: 0644]
input/arkanoid.c [new file with mode: 0644]
input/cursor.c [new file with mode: 0644]
input/fkb.c [new file with mode: 0644]
input/fkb.h [new file with mode: 0644]
input/powerpad.c [new file with mode: 0644]
input/shadow.c [new file with mode: 0644]
input/share.h [new file with mode: 0644]
input/zapper.c [new file with mode: 0644]
mappers/105.c [new file with mode: 0644]
mappers/112.c [new file with mode: 0644]
mappers/113.c [new file with mode: 0644]
mappers/117.c [new file with mode: 0644]
mappers/15.c [new file with mode: 0644]
mappers/151.c [new file with mode: 0644]
mappers/16.c [new file with mode: 0644]
mappers/17.c [new file with mode: 0644]
mappers/18.c [new file with mode: 0644]
mappers/180.c [new file with mode: 0644]
mappers/182.c [new file with mode: 0644]
mappers/184.c [new file with mode: 0644]
mappers/189.c [new file with mode: 0644]
mappers/19.c [new file with mode: 0644]
mappers/21.c [new file with mode: 0644]
mappers/22.c [new file with mode: 0644]
mappers/225.c [new file with mode: 0644]
mappers/226.c [new file with mode: 0644]
mappers/227.c [new file with mode: 0644]
mappers/228.c [new file with mode: 0644]
mappers/229.c [new file with mode: 0644]
mappers/23.c [new file with mode: 0644]
mappers/232.c [new file with mode: 0644]
mappers/234.c [new file with mode: 0644]
mappers/240.c [new file with mode: 0644]
mappers/242.c [new file with mode: 0644]
mappers/245.c [new file with mode: 0644]
mappers/246.c [new file with mode: 0644]
mappers/248.c [new file with mode: 0644]
mappers/249.c [new file with mode: 0644]
mappers/24and26.c [new file with mode: 0644]
mappers/25.c [new file with mode: 0644]
mappers/32.c [new file with mode: 0644]
mappers/33.c [new file with mode: 0644]
mappers/40.c [new file with mode: 0644]
mappers/41.c [new file with mode: 0644]
mappers/42.c [new file with mode: 0644]
mappers/43.c [new file with mode: 0644]
mappers/46.c [new file with mode: 0644]
mappers/51.c [new file with mode: 0644]
mappers/6.c [new file with mode: 0644]
mappers/64.c [new file with mode: 0644]
mappers/65.c [new file with mode: 0644]
mappers/67.c [new file with mode: 0644]
mappers/68.c [new file with mode: 0644]
mappers/69.c [new file with mode: 0644]
mappers/71.c [new file with mode: 0644]
mappers/72.c [new file with mode: 0644]
mappers/73.c [new file with mode: 0644]
mappers/75.c [new file with mode: 0644]
mappers/76.c [new file with mode: 0644]
mappers/77.c [new file with mode: 0644]
mappers/79.c [new file with mode: 0644]
mappers/8.c [new file with mode: 0644]
mappers/80.c [new file with mode: 0644]
mappers/82.c [new file with mode: 0644]
mappers/83.c [new file with mode: 0644]
mappers/85.c [new file with mode: 0644]
mappers/86.c [new file with mode: 0644]
mappers/88.c [new file with mode: 0644]
mappers/89.c [new file with mode: 0644]
mappers/90.c [new file with mode: 0644]
mappers/92.c [new file with mode: 0644]
mappers/95.c [new file with mode: 0644]
mappers/97.c [new file with mode: 0644]
mappers/99.c [new file with mode: 0644]
mappers/Makefile [new file with mode: 0644]
mappers/fmopl.c [new file with mode: 0644]
mappers/fmopl.h [new file with mode: 0644]
mappers/mapinc.h [new file with mode: 0644]
mappers/mapshare.h [new file with mode: 0644]
mappers/mmc2and4.c [new file with mode: 0644]
mappers/simple.c [new file with mode: 0644]
mappers/vrc7snd.c [new file with mode: 0644]
mbshare/Makefile [new file with mode: 0644]
mbshare/mapinc.h [new file with mode: 0644]
mbshare/mmc1.c [new file with mode: 0644]
mbshare/mmc3.c [new file with mode: 0644]
mbshare/mmc5.c [new file with mode: 0644]
memory.c [new file with mode: 0644]
memory.h [new file with mode: 0644]
netplay.c [new file with mode: 0644]
netplay.h [new file with mode: 0644]
nsf.c [new file with mode: 0644]
nsf.h [new file with mode: 0644]
nsfbgnew.h [new file with mode: 0644]
ops.h [new file with mode: 0644]
palette.h [new file with mode: 0644]
palettes/nsfnew.h [new file with mode: 0644]
palettes/rp2c04001.h [new file with mode: 0644]
palettes/vscv.h [new file with mode: 0644]
palettes/vseb.h [new file with mode: 0644]
palettes/vsgoonies.h [new file with mode: 0644]
palettes/vsgrad.h [new file with mode: 0644]
palettes/vsmar.h [new file with mode: 0644]
palettes/vsplatoon.h [new file with mode: 0644]
palettes/vsslalom.h [new file with mode: 0644]
palettes/vssmb.h [new file with mode: 0644]
sound.c [new file with mode: 0644]
sound.h [new file with mode: 0644]
state.c [new file with mode: 0644]
state.h [new file with mode: 0644]
svga.c [new file with mode: 0644]
svga.h [new file with mode: 0644]
types.h [new file with mode: 0644]
unif.c [new file with mode: 0644]
unif.h [new file with mode: 0644]
version.h [new file with mode: 0644]
video.c [new file with mode: 0644]
video.h [new file with mode: 0644]
x6502.c [new file with mode: 0644]
x6502.h [new file with mode: 0644]
zlib/ChangeLog [new file with mode: 0644]
zlib/Makefile [new file with mode: 0644]
zlib/adler32.c [new file with mode: 0644]
zlib/algorithm.txt [new file with mode: 0644]
zlib/compress.c [new file with mode: 0644]
zlib/crc32.c [new file with mode: 0644]
zlib/deflate.c [new file with mode: 0644]
zlib/deflate.h [new file with mode: 0644]
zlib/descrip.mms [new file with mode: 0644]
zlib/example.c [new file with mode: 0644]
zlib/faq [new file with mode: 0644]
zlib/gzio.c [new file with mode: 0644]
zlib/infblock.c [new file with mode: 0644]
zlib/infblock.h [new file with mode: 0644]
zlib/infcodes.c [new file with mode: 0644]
zlib/infcodes.h [new file with mode: 0644]
zlib/inffast.c [new file with mode: 0644]
zlib/inffast.h [new file with mode: 0644]
zlib/inffixed.h [new file with mode: 0644]
zlib/inflate.c [new file with mode: 0644]
zlib/inftrees.c [new file with mode: 0644]
zlib/inftrees.h [new file with mode: 0644]
zlib/infutil.c [new file with mode: 0644]
zlib/infutil.h [new file with mode: 0644]
zlib/maketree.c [new file with mode: 0644]
zlib/readme [new file with mode: 0644]
zlib/trees.c [new file with mode: 0644]
zlib/trees.h [new file with mode: 0644]
zlib/uncompr.c [new file with mode: 0644]
zlib/unzip.c [new file with mode: 0644]
zlib/unzip.h [new file with mode: 0644]
zlib/zconf.h [new file with mode: 0644]
zlib/zlib.h [new file with mode: 0644]
zlib/zutil.c [new file with mode: 0644]
zlib/zutil.h [new file with mode: 0644]

diff --git a/Documentation/AUTHORS b/Documentation/AUTHORS
new file mode 100644 (file)
index 0000000..c34fcae
--- /dev/null
@@ -0,0 +1,25 @@
+A list of people who have contributed code to FCE Ultra follows.
+Please note that the "Code Contributions" field may not be all inclusive;
+the coder may have done more than what is listed.
+
+Name/Alias     Code Contributions              Contact Information
+------------------------------------------------------------------------------
+Aaron Oneal    Many changes to compile         support@pocketgb.com
+               with MSVC and first frame
+               skipping code.
+
+Ben Parnell    Most of the FCE Ultra code.     xodnizel@users.sourceforge.net
+
+BERO           Base FCE code.                  bero@geocities.co.jp
+
+\Firebug\      VGA register setting code.      ??
+
+LULU           SDL network play code.          ??
+
+Paul           Various code for the official   kuliniew@purdue.edu
+ Kuliniewicz   SDL port.
+
+Quietust       VRC7 "translation" code.        quietust@ircN.org
+
+Tatsuyuki      OPL2 emulator.                  ??
+ Satoh
diff --git a/Documentation/COPYING b/Documentation/COPYING
new file mode 100644 (file)
index 0000000..afd5a94
--- /dev/null
@@ -0,0 +1,341 @@
+
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Documentation/ChangeLog b/Documentation/ChangeLog
new file mode 100644 (file)
index 0000000..9712202
--- /dev/null
@@ -0,0 +1,823 @@
+.81:
+----
+
+       More SDL goodies.
+
+       Renamed "Makefile.olinuxsdl" to "Makefile.unixsdl"
+
+       More SDL fixes and cleanups.
+
+       BeOS port is now compiled with the "-no-fpic" flag, which allows
+       me to use my inline assembly.  The executable work fine as far as
+       I can tell.
+
+       Added "Makefile.beos".  gcc doesn't like my inline assembly
+       used in RefreshLine(),so this port will likely be slightly slower than
+       other x86 ports.
+
+       Added a check to make sure SIGBUS is not equal to SIGSEGV in
+       drivers/cli/main.c.  Needed for compiling under BeOS.
+
+       Renamed the "PI" member of the X6502 structure due to conflicts with
+       a defined symbol with some math header files.
+
+       Merged fcelineasm.h into fceline.h
+
+       Fixed(possibly) a possible problem in fcelineasm.h with input register
+       clobbering.
+
+       More SDL changes.
+
+       Added speed throttling code to the CLI code, and added a command
+       line switch "-nothrottle".
+
+       Lots of restructuring/rewriting/merging of the MMC3 code.
+
+       Updated DOS code to use the generic CLI wrapper.
+
+       Reads from $4090 and $4092 now return the current envelope setting
+       in FDS sound emulation.  I'm not sure if this is correct...  Affects
+       "Ai Senshi Nicole" and "Bio Miracle Bokutte Upa".
+
+       Added native SDL sound support to the SDL code.  the "olinuxsdl"
+       now uses this code by default instead of the unixdsp sound code.
+
+        Modified MMC3 IRQ counter emulation.  I'll need to watch out to see
+        if it breaks any games.  Fixes:  MegaMan 3, Gun Nac, Klax(Japanese).
+
+       Changed a few memory reads in x6502.c to use RdRAM instead of RdMem,
+       resulting in a slight speed increase.
+
+       Cleaned up mapper 250 emulation code.
+
+       Added support for iNES mapper 51(thanks to Kevin Horton for the
+       information).
+
+       Merged some iNES mappers corresponding to bootleg multicarts
+       based on MMC3s with mbshare/mmc3.c.
+
+       Added support for iNES mapper 52(thanks to Kevin Horton for the
+        information).
+
+       Made some hacks to the MMC3 emulation code so that I can add support
+       for pirate MMC3 multicarts more easily.  I should clean it up later.
+       Moved mapper 44 emulation code to mbshare/mmc3.c.
+
+       Saving screen snapshots will no longer corrupt the frame buffer
+       for one frame(unless memory couldn't be allocated).
+
+       Fixed screen snapshot saving(it was sort of broken due to the
+       changes made to the driver<->emulator interface code; status
+       messages were being saved to the image).  FCEUI_SaveSnapshot()
+       no longer returns a value(the request to save a screen snapshot is
+       serviced before status information would be written in the next frame).
+
+       nosprites is now set to 0 before RefreshSprite() returns, to prevent
+       problems if a game turns off the bg and sprites when FetchSpriteData()
+       for the next scanline is called but then turns on sprites when
+       the actual scanline is drawn.
+
+       PPU_hook() is now called more often if PPU_hook is non-null.
+       Made changes to mappers 118, 95, 9, and 10 to compensate.
+       No games seem to be broken, and I added support for mapper 96
+       (though the games aren't very playable because the special controller
+       isn't emulated).
+
+       Romance of the 3 Kingdoms is now recognized to use 16KB ex-WRAM.
+
+       Added support for mapper 185...sort of.  I think this is another
+       instance of incompatible hardware being lumped onto one mapper number.
+       Sigh.
+
+       Added support for "Famicom Jump 2" as iNES mapper 153.
+       If a good(as far as I can tell) dump is loaded, FCE Ultra will
+       automatically fix the mapper number.
+       I also made some changes to the mapper 16 IRQ emulation code.
+
+       BRK now sets the I flag.
+
+       Reads from $4015 no longer reset DPCM IRQ.
+
+       Changed emulation of RTI instruction slightly.
+
+       X.IRQlow is now set to 0 in PowerNES().
+
+       The VS Unisystem bit in the iNES header is no longer looked at(
+       I was having too many problems with this bit being set when it
+       shouldn't have been).  Now, VS Unisystem emulation is enabled
+       when a known VS Unisystem game is loaded.  I also rewrote the VS 
+       Unisystem detection function.
+
+       iNES mapper 1 now supports pageable CHR RAM if no CHR ROM is present.
+       Fixes "Family School".
+
+       Mapper 70 no longer has a mirroring control emulated, and I extended
+       the number of 8KB CHR pages supported to 16.
+
+       Cleaned up iNES MMC5 save RAM loading/saving code and added
+       support for MMC1 games with 16KB of RAM(the second 8KB are saved),
+       via CRC32s(currently only Genghis Khan(USA) and Nobunaga's Ambition(
+       USA and Japan) are recognized).
+
+       Added support for the MMC5 Koei game "Ishin no Arashi", in the iNES
+       format(I added an entry with its CRC32 value and the number of 8KB
+       WRAM banks it needs). 
+
+       Better iNES mapper 33/48 IRQ counter emulation.
+
+       Added the game "Uchuusen - Cosmo Carrier" to this list.  I'm
+       beginning to hate the iNES format more and more...or maybe
+       just Fanwen. :)
+
+       Added the mapper 32 game "Major League" to the list of games
+       that usually need iNES header correction...but in this case, the
+       iNES header cannot specify that this game needs to have one-screen
+       mirroring.
+
+       iNES header information is now printed before any header corrections
+       are made based on a database.
+
+       Fixed a bug in mapper 32 emulation.  "Ai Sensei no Oshiete"
+       works now.
+
+       Tried to add support for iNES mappers 245 and 249.
+
+       Fixed the MMC5 read handler to return the data last on the data
+       bus instead of 0xFF when a read was made to an unmapped address.
+       This seems to fix the lockup problems in "Bandit Kings of Ancient
+       China".
+
+       Reversed "Modified the time at which the "y scroll" register is updated
+        during hblank."  The changes broke Klax.
+
+       Added an unsigned 64-bit base timestamp variable "timestampbase".
+       Adding this to the 32-bit variable "timestamp" will return
+       the number of cycles executed since emulation started(in the future
+       I'll probably change it to since reset or power toggle).
+       This allowed me to replace "lastn" hack in the MMC1 code with
+       something better.
+
+       Changed my mind and undid the removal of support for old save states.
+
+       Removed support for old save states and in general I won't
+       try to support save states made with previous versions.
+
+       MMC1:  Writes to $8000-$FFFF with D7 set will now cause
+       the first MMC1 register to be OR'ed with 0x0C.  I'm not sure
+       if this is correct, but it doesn't seem to break anything
+       and it fixes Robocop 3.  I'll see if anyone reports games
+       not working in .81 that worked in .80.
+       
+       Worked on a generic driver interface wrapper very similar
+       to the driver interface FCE Ultra used to use(I'm getting
+       tired of all of the duplicated driver code).  Eventually,
+       the DOS, SVGAlib, and SDL ports will use this wrapper.
+
+       Similar change to the argument parsing code.
+
+       Changed configuration file saving-loading routines and the
+       configuration structure to allow for linking config structures
+       to each other).
+
+       Small fix to the emulation of the MMC5 split screen mode.
+
+       Made Linux SDL code compilable again.
+
+       Changes to MMC5 EXRAM emulation(read/write).
+
+       Fixes to the emulation of the MMC5's split screen mode, based on
+       observations while using CastleVania 3 and a Game Genie(on a real
+       NES).
+
+       Fixed a bug in ines.c that caused any calls to AddExState() from
+       a mapper initialization function to be effectively "erased"(ResetExState()
+       was called after the mapper was initialized).  Fixes the VRC7 sound 
+       state saving/loading stuff.
+
+       Finished adding support for the MMC5's split screen mode(this does
+       not mean that the support is complete, but at least the intro in
+       "Uchuu Keibitai SDF" works correctly now).
+
+       Worked on adding support for the MMC5's split screen mode.  Not
+       completed.
+
+       Reverted to .80's FDS sound code.
+
+       Modified the time at which the "y scroll" register is updated
+       during hblank.
+
+       NSF playing code will now disable FDS sound output on song init
+       (fixes some problems with the Zelda no Densetsu NSF rip).
+
+       Increased the emulated clock speed of the FDS sound emulation code
+       to give better quality output.
+
+       Modified NMI to occur a few cycles later.  Fixes BattleToads...but
+       it may have broken other games.  Also modified the way NMI's are
+       handled in x6502.c.
+
+       Modified ines.c to memset() GameMemBlock to 0 on virtual power toggle.
+       Also, trainers are now loaded into their own buffer instead of
+       directly into emulated WRAM and copied into emulated WRAM on
+       power toggle; I've been meaning to do this for quite some time.
+
+       Changes to the way the zapper cursor is drawn on the screen.
+
+       FCEUD_WriteSoundData(), FCEUD_BlitScreen(), and FCEUD_UpdateInput()
+       have been combined into one function: FCEUD_Update().
+
+       More fixes to the network play code, and a fix to the Windows network
+       play driver code that fixes(hopefully) a rather evil bug that caused
+       lockups when the remote stopped network play.
+
+       Added code to set the battery-backed bit in RAM if a game needs it,
+       based on CRC32.
+
+       Added more games to the list of games that commonly have bad iNES
+       headers, in ines.c
+
+       Updated docs and usage.h for DOS and Linux regarding the new video
+       mode and the new refresh rates.
+
+       Linux:  Fixed a bug with video mode 6(a few upper scanlines were being
+       cut off).  Increased the refresh rate of video mode 3 to 120hz.
+
+       Increased the refresh rate of video mode 2 to 65 hz in the Linux port.
+
+       Screen snapshots can now be taken while playing an NSF.
+       
+       Added a new sexy tweaked vga mode that I created to the Linux svgalib 
+       port.  It's 256x224 at a refresh rate of 103hz.  Hopefully it won't
+       blow up anyone's monitor. ;)
+       DOS port will follow eventually.
+
+       Modified Makefile.base to produce an executable named "fceu" instead
+       of "fce".
+
+       The plans(cycle-accurate ppu emulation) for .90 were a bit ambitious, 
+       and I still need to make other fixes before then.
+
+       Fixed some minor(usually) bugs with setting 256x240 tweaked VGA mode
+       in DOS and Linux ports.
+
+.80:
+----
+
+       Cleaned/fixed a few things in the mapper 19 emulation code.
+       Family Circuit '91 still doesn't work quite right...  I wonder if
+       it's a bad dump.
+
+       Added input override code to Windows port.
+
+       Added code to fix iNES header information in RAM and suggest
+       changes to the user.
+
+       Added support for iNES mapper 152(to be used with games set to 
+       mapper 70, that use one-screen mirroring instead of h/v mirroring).
+
+       Blits using the DirectX blitting function(method?) to the primary
+       surface are now done with the asynchronous flag set(if that
+       fails, a "normal" blit is tried).
+       
+       The DirectX blit buffer(secondary surface that FCE Ultra writes to
+       directly and then uses the DirectDraw blit function on to blit
+       to the primary buffer) is now created without specifying it
+       should be in system memory or video memory, except in the case
+       when no hardware blitting is available, and then DDraw is explicitly
+       told to create the surface in system memory.
+
+       Added Family Keyboard support to the DOS port.
+
+       Cleaned up the VRC7 sound emulation code.  I need to find a way
+       to save the current sound state in a save state.
+
+       Found out the real name of the "Space Shadow" gun; it's
+       called the "Hyper Shot".  I'm still not sure who made it, though.
+       Possibly Bandai did.  The interesting thing is that Konami
+       also made a Famicom accessory(dual square boxy things with two buttons
+       on each) with the same name(though there might not be a space in the
+       name).
+
+       Only the upper two bits read from $4016/$4017 are undefined.
+        Bit5 is always 0, though.  Fixed the bug in "input.c".
+       Silly kevtris' old documents.  New kevtris' brain is always good.
+
+       Family Keyboard support for the Windows port.
+
+       Added support for the Family Basic Keyboard to the Linux port, other
+       ports todo.
+       Might want to add support for the tape recorder at some time.
+       Also mapped the "Scroll Lock" key to disable/enable command keys
+       so that the FBK is more useable.  It doesn't disable CTRL C, 
+       though...
+
+       Changed a lot of inlined functions in x6502.c to macros so that
+       I could test out some optimization ideas.
+
+       DOS code updates for game input override support.
+
+       Small optimzation to opcode $4c, and relative jumps.
+
+       Added some code to ines.c to set controller information in 
+       FCEUGameInfo(returned by FCEUI_LoadGame()) based on crc32 values.
+
+       Updated user documentation and usage.h for DOS and SVGAlib input 
+       command-line changes.
+
+       Added an option to disable the four-score(to Windows and Linux ports
+       so far).
+
+       Updated Windows interface to support the new Famicom expansion
+       devices.
+
+       (Re)Added support for the Famicom 4-player device.
+
+       Improved Zapper emulation...sort of.  It still needs a lot of work. :/
+
+       Added *partial* support for the "Space Shadow" gun.
+
+       Added support for the Arkanoid controller(both NES and Famicom style).  
+
+       Added code to support the extension Famicom input devices.
+
+       Added PAL scanline start/end drawing settings to Windows port.
+
+       Added pause emulation key(F2) to Windows port.
+       
+       In the process of rewriting/fixing up input code stuff.
+
+       Minor bug fix to Power Pad emulation code.
+
+       VS Hogan's Alley and VS Duck Hunt automatically select the zapper
+       now(though it only works on the SVGAlib port).
+
+       Undid some FDS sound code changes introduced in 0.76 that totally
+       screwed up sound.  Oops.
+
+       Added code to allow different settings for first/last scanline
+       drawn while in PAL emulation mode, to the Linux and DOS ports.
+
+       Added convenience(it's not necessary, but it reduces redundant and
+       confusing code in the driver code) function 
+       FCEUI_GetCurrentVidSystem(int *slstart, int *slend).
+
+       Updated file "TODO".
+
+       Changed #include <unzip.h> to #include "zlib/unzip.h"
+       in file.c.
+
+       NSF 6502 player now initialized the stack pointer on reset.
+
+       Worked on de-emphasis emulation code quite a bit.  
+       The deemphasized palette calculated at the end of the frame is now
+       based on what deemphasis bits were set for the longest during
+       the screen(sampling interval is a scanline) update loop.
+       Added a "static" deemphasized palette at $40-$7F in the palette table.
+       This corresponds to the colors when all of the deemphasis bits are set.
+       I did this to fix the PAL game "Noah's Ark", without breaking
+       anything else.  The only downside is a slight speed loss(~2% on
+       my system when sound is disabled), but this is acceptable to me,
+       at least.
+       Maybe it's time to write hi/true-color ppu drawing code...
+
+
+       Fixed an out of bounds array access in svga.c in SetNESDeemph().
+       The variable "lastd" in svga.c was being initialized to the wrong value.
+       Thanks to "Jarod CANAL" for pointing this out.
+
+       Removed FCEUI_SetFirstRenderedLine or whatever it was called and
+       the function to set the last line.  Replaced with:
+        void FCEUI_SetRenderedLines(int ntscf, int ntscl, int palf, int pall);
+
+       Changed SetVidSys(int w) to ResetVidSys() in fce.c.  Reenabled
+       PAL/NTSC emulation overrides based on game loaded(really only useful
+       for NSFs and UNIFs now).  
+
+       UNIF loading code now recognizes the chunk "CTRL" and tries
+       to use it.  Only the svgalib code supports overriding of input
+       settings based on game loaded, now, though...
+       The user is still going to have to configure powerpad settings
+       on his/her own.
+
+       Fixed return values of FCEU_fseek() and fixed a problem in unif.c
+       related to it.
+
+       Changed mechanism for how FCE Ultra tells the driver
+       code what type of system is being emulated.  A structure of
+       type "FCEUGI" is returned from FCEUI_LoadGame().
+
+       Fixed a major mapper 64 emulation bug introduced in 0.76.
+
+       Modified BlitVidHi() in drivers/win/video.c to speed it up.
+
+       Added support for loading the iNES-format Game Genie ROM image.
+
+       Removed ggrom.h and added code to load the Game Genie ROM
+       image from a file.
+
+       Added Windows netplay.c.  (new: the user exiting the emulator
+       while stuck in a blocking recv() or send() loop now works.)
+
+       Fixed a vram address register bug in fce.c that I created when I got 
+       rid of the pair/dpair data types.
+
+       Added new mappers/92.c
+
+       Removed mappers/92.c until I can contact LULU or rewrite it.
+
+       drivers/win changes.  Removed netplay.c until I can rewrite it.
+
+       Got rid of pair/dpair data types.
+
+       Got rid of silly "TempArray" thing.
+
+       Began adding GPL headers to files.  FCE Ultra is going to be in
+       a state of legal limbo for the next few days...
+
+       Replaced crc32.c and crc32.h, and added some #ifdef's and #defines
+       to use the crc32 code in zlib instead if zlib is linked with
+       FCE Ultra.
+
+       More fixes to sb.c.
+
+       Cleaned up drawing.h and ggrom.h(even though ggrom.h will *probably*
+       be removed before the next release).
+
+       Redid frameskip code.
+
+       Rewrote necessary pieces of sb.c and sb.h and fixed quite a few
+       bugs.  I still need to test it on various other sound cards, though.
+
+       Rewrote(more like "recreated in my own image") DOS keyboard driver.
+       Removed unused "keyscan.h" from drivers/svgalib
+
+       Rewrote part of(the parts that Marat wrote - the connection and
+       closing parts) the Linux TCP/IP network play code.  I guess it works, 
+       but I haven't tested it very much.  In any case, it's still dangerous
+       to use network play in FCE Ultra with SVGAlib, since recv() or send() 
+       might block and since the keyboard is in raw mode, you have a problem.
+       Maybe a future SVGAlib will fix the general problem of lockups if
+       keyboard_update() isn't called, though it is only partly SVGAlib's 
+       problem...
+
+       Fixed FCEU_fseek() when used with a compressed file in the PKZIP
+       format that has been loaded.  Fixes a UNIF loading problem.
+       Also added a check to the return value of FCEU_fseek() in unif.c.
+
+       Replaced Marat's 6502 emulation core with my own.  
+       It should be fully functional, but as always, I don't know if
+       I implemented the undocumented instructions correctly.
+       Several things are correct in this new core that were not in
+       Marat's(D flag is no longer cleared by interrupts, for example).
+
+       Altered mapper 16 irq counter emulation slightly.
+
+       Fixed the behavior of the SXA, SYA, and XAS opcodes based on the
+       documentation I have.  I'm not sure what happens when page crossing
+       occurs with those instructions on a real NES, though.
+       Also CHANGED(not fixed) emulation of opcode $8B("XAA").
+
+       Changed some of the M* functions(absolute indexed and maybe some others)
+       to perform dummy reads.
+
+       Changed some of the macros in m6502.c to inlined functions so
+       that I can modify and examine them more easily.
+
+.77:
+----
+
+       Fixed a silly network play bug(in the global network play code)
+       that caused excessive lag.
+
+       Added a "niceness" setting to the sound configuration dialog.
+       Removed obsolete information from the dialog.
+
+       Fixed speed throttling code in Windows port when PAL emulation is
+       disabled/enabled and a new game hasn't been loaded yet.
+
+       Commented out a printf() to debug stuff in fds.c(oops).
+
+       Applied PK's joystick patch to the osdl code.  It allows the user
+       to map axes and it fixes a joystick button mapping configuration saving
+       bug.
+
+       Added two command line options new to Linux port to DOS port.
+       Just need to test them...
+
+       Added some stuff to unif.c to allow for boards that can support
+       CHR RAM instead of CHR ROM(darn Sachen boards...).  Fixes UNIF
+       version of "Q-Boy". 
+
+       Added command line option "-snapname" to Linux port.  I'll add it
+       to the Windows port as well, but probably not to the DOS port.
+
+       Added clip option to Linux port.
+
+       Fixed sound logging(in Windows port) so that multiple recording
+       sessions now work.
+
+       Added an option to clip the leftmost and rightmost 8 columns
+       of graphics in the Windows port.
+
+       Added a submenu that lists recently opened files, in the Windows
+       port.
+               
+.76:
+----   
+
+       Updated porting.txt.
+
+       Added speed throttling code to Windows port that's used when sound is
+       disabled(and an option in the "Miscellaneous" 
+       configuration window to disable it).
+
+       Added cheat interface to DOS build.  
+
+       A few tweaks to the text cheat interface code in the cheat listing code.
+       Added a command to quickly toggle the status of the cheat(though a 
+       cheat can still be disabled/enabled by (M)odifying the cheat).
+
+       Support for UNIF UNL-TC-U01-1.5M board added. Same credits as below.
+
+       Rewrote mapper 228 code just for the heck of it(actually, I couldn't
+       figure out why some(about two) of the games in the Action 52 cart 
+       weren't working in .75(and .76).  I traced it back to .71, where an apparent bug in
+       the undocumented 6502 opcode emulation allowed it to work, which
+       was later fixed for the .72 release(opcode 0x7C)).  I'm thinking        
+       that the dump is bad...
+
+       Added a few crc32 checks to ines.c to check for and report when
+       a known(by me) bad(hacked or bad dump) game is loaded.
+
+       Added support for the following UNIF boards.  Thanks to Quietust
+       and Kevin Horton for the information.  Some problems still exist
+       with a few games that use these boards, though...
+
+               UNL-Sachen-8259B
+               UNL-Sachen-8259A
+               UNL-Sachen-74LS374N
+               UNL-SA-016-1M
+               UNL-SA-72007
+               UNL-SA-72008
+               UNL-SA-0036
+               UNL-SA-0037
+
+       Fixes to some stuff in cart.c(for example, calling setprg32() when 
+       only 16kb of prg data is present now works).
+
+       Added support for iNES mapper 189.
+
+       Tried to add support for the UNIF board "UNL-H2288".  Failed.
+
+       Updated "cheat.txt" to fix a few typos and added an example of finding
+       and adding a cheat using the Linux port's text interface.  The actual
+       section on the Linux cheat interface still needs to be written, however.
+
+       Changed network play code in the Windows port and fixed a bug.
+       Fixed a similar bug in the Linux netplay code....sort of.
+
+       A few cosmetic changes to the dialogs in the Windows port.
+
+       Fixed sound initialization on the Windows port(it was being initialized
+       when FCE Ultra started even if it was disabled by the user.  Oops.).
+
+       Joystick button configuration code in Windows port changed slightly
+       to be more useable.
+
+       Changed reference to video mode 5 in the linux port to "1 per 4".
+       It may not be very meaningful, but it is certainly better
+       than "TV Emulation".  I'll change the Windows port reference later.
+
+       Documented video mode 7(320x240) for the Linux port.  Also added
+       a check for the FBDev driver in order to use this mode instead
+       of a tweaked vga mode if that driver is being used.
+
+       Added/Fixed cheat interface for Linux port.  It's still not perfect,
+       though.  The code is ugly...
+
+       Callback function for FCEUI_ListCheats() now receives
+       status information(enabled/disabled).
+
+       Callback functions for cheat functions now must return 0 to
+       stop listing cheats or 1 to continue.  
+
+       Fixed a problem(the cheat code was reading in cheats
+       for address $0000 from cheat files if any blank lines were present).
+
+       SDL port zlib changes(linked dynamically to zlib now).
+
+       More changes to envelope decay + looping on code.  No longer
+       depends on value @ $4017.  It now sounds correct based on some
+       tests I did with SMB3 and a GG, but Goonies 2 doesn't sound right(
+       based on a sound file sent to me by another person).
+
+       Added support for iNES mapper 140.  Thanks to Quietust for the
+       information.
+
+       I need to figure out how to deal with the problem of so many
+       bad NSFs that most people consider good...
+
+       Changed envelope decays a bit.  Their behavior now depends on bit
+       7 of $4017.  I don't know if this is right...
+
+       Addition of debug.c for some debugging stuff.
+
+       Updated zlib to 1.1.4.
+
+       Modified code in various files to allow UNIF games to override
+       current selected video system emulation(NTSC or PAL).  Need to
+       make sure this really works.
+
+       Changed sound.c to prevent desynchronization during network play.
+       This might slow down sound emulation slightly, especially when
+       sound emulation is disabled.  I really don't care...
+
+       Updating network play code.  More info later...
+
+       Moved the sound/video/etc output code in EmLoop() to the top of the
+       for(;;) loop so that initialization prior to calling EmLoop() will
+       be the same as initialization done during a call to a FCEUD_* function.
+
+       A few very small changes to sound emulation in fds.c.
+
+       Changed unlink() to remove() in cheat.c and removed the including
+       of the header file unistd.h.
+
+       Split up the cc=... statement in RefreshLine() to make it easier
+       to read and not ambiguous(to Borland's C compiler).
+
+       Changed a lot of the function declarations in cheat.c.  I'll need
+       to verify that cheat searching still works ok and that cheats still work
+       ok.  I'll also need to update the Windows(and Linux console) cheat code
+       to prevent compiler warnings.
+
+       Fixed various minor code problems(not minor if you want to use a
+       compiler besides gcc).   This is an ongoing process...  
+
+       Removed bit fields after reading about and thinking about possible
+       portability problems, though I kept some optimizations in fceline.h
+
+       Minor code simplification in drivers/win/joystick.c(replaced
+       "case 200 ... 207" and "case 208 ... 215".
+
+       Modified some code to use bit-fields in the graphics rendering code 
+       in fce.c and fceline.h.  gcc seems to be able to optimize the new
+       code to run faster.
+
+       Fixed m6502.c and fce.c to initialize variables on virtual power
+       toggle.  This should fix network play on the Windows port.
+       I'm also in the process of cleaning up fce.c. 
+
+.75:
+----
+       Fixed directories configuration stuff in Windows port(corresponds
+       to .75r2).
+
+       More changes to square wave channel envelope/volume emulation...
+       Changes described in the large paragraph some lines down have been
+       abandoned.
+
+       Added a command line switch to set the volume in the dos port.
+
+       Changed Windows sound configuration dialog.  Now buffer length is
+       specified in time, not samples.  I also added a volume control.
+
+       Reduced the volume on 8-bit sound output on all ports by 1/2.
+
+       Added a function FCEUI_SetSoundVolume().  Added support for setting
+       the volume via the command line in the Linux port, other ports coming
+       soon.
+
+       Changed FCEUD_WriteSoundData() again.  No longer has a "Check"
+       argument.  All clipping(ugh) is done internally now.
+
+       Added a directories configuration dialog to the Windows port.  I worked
+       on it too long and I became a zombie, so it might have a few bugs.
+       That's what guine...err...users are for. ;)  Don't expect me to do
+       anything like this for any other port, though.  I don't feel like
+       doing it on the DOS port, and the Linux and other UNIXy ports shouldn't
+       really need it.
+
+       Made some changes to the rectangle/square wave channel emulation to
+       fix the pops in SMB.  I have no idea if what I did is correct.  To
+       be honest, I'm not sure I know EXACTLY what I did, but it's something
+       like this:  Writes to $4003/$4007 now reset the duty cycle count
+       and reload the cycle counter with the current wavelength.  Writes to
+       $4003/$4007 now do not update the amplitude output of the channels; they
+       will be updated after the cycle counter hits 0(or below).
+
+       More information in iNES informational output.
+       
+       Minor changes to mappers/16.c.
+
+       Increased the volume of the VRC6's sawtooth wave channel.
+
+       Added more information to the RAM cheat guide.
+
+       Changed the triangle wave generation code slightly.  I decided
+       to remove support for the higher-frequency triangle waves, as they
+       are too cpu-costly to create and are probably not very audible on a 
+       real NES anyway.
+
+       Major changes to how sound is mixed.  This necessitated a high pass
+       DC-offset removing filter, and a low-pass filter just to make things
+       sound better. ^_^ 
+       Note:  FCEUD_WriteSoundData() no longer needs to clear the waveform
+       data referenced by the passed pointer; it's done internally now.
+
+       Fixed JMP ($xxxx) - now handles wrapping like it occurs on a real 6502
+       (hopefully; I'm assuming that the same holds true for the NES' cpu).
+
+       Added the ability to load a custom global palette in the DOS port.
+
+       Fixed bug in drivers/common/unixdsp.c(wrong return value if sample
+       rate was out of range).
+
+       Many sound fixes...     - Frequency sweeps, length counter stuff,...
+
+       Changed Windows port to use IDirectInput7 and IDirectInputDevice7
+       interfaces.
+
+       Fixed a Game Genie bug in the core emulation code.  It only appeared 
+       in the Windows port, though.  (Enabling gg emulation, loading a game,
+       and then disabling gg emulation and loading a new game while in the
+       gg code entry screen would cause the new loaded game to not work
+       correctly).
+
+       Modified windows port to use the config saving/loading stuff in
+       drivers/common/config.c
+
+       Mapper 45 cleanups/fixes.
+
+       Added the ability to load a custom global palette in the Linux port.
+       Yay.
+
+       Fixed a large number of overcomplicated code and silly bugs in
+       drivers/common/config.c.  This changes the format of the configuration
+       structure, too.  Also added support for saving/loading strings with
+       automatic memory allocation when strings are loaded.
+
+       Minor change in InitNetplay().
+
+       Fixed bad type conversions for pointers to functions and fixed
+       some bad declarations of functions.
+
+       Reenabled zlib support for the sdl build.  I need to pay attention
+       to patches that modify lines than don't fit on my screen.
+
+       Fixed vidblit.c to not emit so many warnings when compiling.
+
+.74:
+----
+
+       Stop sound in Windows port when user clicks l/m/r mouse buttons
+       in the non-client area of the window.
+
+       Added "Drag and drop" file open support to Windows port.
+
+       Various code cleanups.
+
+       mappers/33.c optimization.
+
+       Rewrote the function "FCEU_MakeFName()".
+
+       Removed crc32.h from mappers directory.
+
+       Modified some of the window resizing code in the Windows port.
+
+       Added support for waiting for vblank/double buffering to the Windows
+       port.
+
+       Added/Fixed support for iNES mapper 248.
+
+       After an NSF file is loaded, information about its header is now
+       displayed.
+
+       Fixed a typo in the Namco 106 extra ram handling code. 
+
+       Improved the quality of the Namco 106's extra sound channels. 
+       - Thank Mamiya and Applepie(real name?) for info.
+
+       When an NSF file is being played, FCE Ultra will no longer go through
+       its scanline rendering loop.  This speeds up NSF playback considerably. 
+
+       Updated "porting.txt".
+
+       Moved some stuff from DriverInterface() to their own functions.
+
+       Fixed some iNES mapper 18 IRQ counter emulation bugs.  "Ninja Jajamaru -
+       Ginga Dai Sakusen" now works.
+
+       Rewrote large pieces of the mapper 64 code.  "Skull and Crossbones" 
+       still doesn't work, though.
+
+       Changed format of iNES header information output, added "ROM CRC32" info.       
+
+       Modified the way cycle timing is done slightly.  No change
+        for NTSC emulation, but PAL emulation is a little more accurate.
+
+       Changed the behavior of indirect indexed(I hope I got that right ;))
+       instructions to behave more like a real 6502(junk reads are now 
+       performed).
+
+       A few optimizations/cleanups in m6502.c.
diff --git a/Documentation/FAQ b/Documentation/FAQ
new file mode 100644 (file)
index 0000000..0ce51b5
--- /dev/null
@@ -0,0 +1,45 @@
+FCE Ultra General User's FAQ
+ preliminary version
+------------------
+
+
+Q: Why doesn't the NSF <insert name here> work(correctly) on FCE Ultra?
+A: Some NSF rips are bad.  Some read from addresses that are not specified
+   in the NSF specifications, expecting certain values to be returned.
+   Others execute undocumented instructions that have no affect on
+   less-accurate software NSF players, but will cause problems on NSF players 
+   that emulate these instructions.  Also, the playback rate specified
+   in the NSF header is currently ignored, though I haven't encountered
+   any problems in doing this.
+
+
+Q: Why doesn't the game <insert name here> work(correctly) on FCE Ultra?
+A: Many factors can make a game not work on FCE Ultra:
+
+       - If the ROM image is in the iNES format(typically files that have 
+         the extension "nes"), its header may be incorrect.  This 
+         incorrectness may also be because of garbage in the 
+         header.  Certain utilities used to put text in the reserved 
+         bytes of the iNES header, then those reserved bytes were 
+         later assigned functions.  FCE Ultra recognizes and 
+         automatically removes(from the ROM image in RAM, not on the 
+         storage medium) SOME header junk.
+
+         If the game has graphical errors while scrolling, chances are
+         the mirroring is set incorrectly in the header.  
+         
+         You can try to edit the header with a utility(in the NES 
+         utilities section at http://zophar.net ) or a hex editor.
+
+       - The on-cart hardware the game uses may not be emulated 
+         correctly.
+
+       - Limitations of the ROM image format may prevent a game from
+         being emulated correctly without special code to recognize that
+         game.  This occurs quite often with many Koei MMC5(iNES mapper 5) 
+         and MMC1(iNES mapper 1) games in the iNES format.  FCE Ultra identifies
+         and emulates some of these games based on the ROM CRC32 value.
+
+       - The ROM image may be encrypted.  The author of SMYNES seems to
+         have done this intentionally to block other emulators from 
+         playing "SMYNES only" games. 
diff --git a/Documentation/README b/Documentation/README
new file mode 100644 (file)
index 0000000..71e5c8b
--- /dev/null
@@ -0,0 +1,31 @@
+FCE Ultra was developed with gcc and GNU make in mind.  MSVC will probably
+compile the Windows source code with a few modifications, but you'll still 
+need to make a project file.
+
+Several pre-made makefiles are provided:
+       Makefile.beos           - BeOS(with SDL and SDL_net)
+       Makefile.unixsdl        - UN*X(FreeBSD/Linux/etc, with SDL)
+       Makefile.linuxvga       - Linux(with svgalib)
+       Makefile.dos            - (MS/PC/DR) DOS
+       Makefile.win            - MS Windows 9x/Me/Xp/2000/etc.(with DirectX).
+
+If you want to use Makefile.beos or Makefile.unixsdl for a cpu type other
+than 80x86, you will need to remove "-DC80x86" from the defines line
+and also remove "-DLSB_FIRST" if your target cpu uses MSB first ordering.
+You'll also need to remove/change "-mcpu=xxx".
+
+For the Windows port, I use MINGW32.  http://www.mingw.org
+
+To compile the DOS port, you'll need to download the DJGPP package.
+Any version of gcc >=2.95.3 should compile the code without changes, BUT
+the DJGPP versions of gcc have some problems:
+  gcc 2.95.3 sometimes breaks when compiling the code.  gcc 3.0.2 seems to 
+  produce bad code for sound.c.  So, I recommend using gcc 3.0.4 for
+  compiling the DOS version.
+
+Modifying the "-mcpu=i686" string in the makefiles, to optimize more effectively
+for your cpu type, is a good idea.
+
+Always do a "make -f Makefile.<platform> clean" before compiling for a 
+different platform or if you update via cvs and if you have stale object 
+files lying around.
diff --git a/Documentation/RELEASE-NOTES b/Documentation/RELEASE-NOTES
new file mode 100644 (file)
index 0000000..64d343c
--- /dev/null
@@ -0,0 +1,36 @@
+----June 29, 2001:
+ -Added the source code for zlib.  The makefile in the zlib directory should
+  be included by the platform makefile(such as Makefile.win) or zlib should
+  be linked in some other way.  If you use the zlib that comes with this
+  source distribution, you'll need to set up your compiler to recognize
+  the zlib subdirectory as a global include directory(like "-Izlib" with gcc).
+ -Changed the expected behavior of FCEUD_BlitScreen().  Added two new functions,
+  FCEUI_SetFirstRenderedLine() and FCEUI_SetLastRenderedLine().  See
+  porting.txt for details.
+
+
+----May 25, 2001:
+ -A few deobfuscations of the code(more will come in the future).
+ -Defined some macros to declare functions using different(faster) calling
+  conventions.  After redeclaring memory map emulation functions,
+  there was a somewhat significant speed increase.  Using the new calling conventions
+  for PPU_hook and MapIRQHook type functions resulted in a more significant
+  speed increase.
+ -Some of the driver<->emulator interface code has changed.  Much more
+  will change in the future.
+ -Added some stuff in types.h to (possibly) help people with compiling
+  FCE Ultra with MSVC++.
+
+----May 5, 2001:
+ -Optimized RAM reading/writing emulation in fce.c a little.
+ -Moved the UNIF board emulation code to the "boards" subdir.  UNIF support
+  isn't even near being done, though.  Not a high priority either.
+
+----April 16, 2001:
+ -Much of the driver interface code was restructured/rewritten, especially the
+  input-related code.  
+ -All driver functions called by the emulator are now prefixed with "FCEUD_".
+  (I may do something similar with the names of the driver interface functions).
+ -The core emulation code has been updated slightly since the Windows .53
+  release, but the changes are so minor that another binary release is not
+  necessary.
diff --git a/Documentation/TODO b/Documentation/TODO
new file mode 100644 (file)
index 0000000..95b8b77
--- /dev/null
@@ -0,0 +1,60 @@
+*** First, things that are not on the TODO list(Don't bug me about these
+       things if you're an idiot.  I don't like listening to idiots.
+       If you are not an idiot, and you can make decent arguments for why
+       these should be on the TODO list, then you can bug me.).
+
+ Remappable command keys:  Too much work would be involved, demand isn't
+  very high, and I don't need this feature.  Maybe in the distant future, if
+  input devices have changed significantly and if FCE Ultra is still around.
+
+ High-level Game Genie support(like the RAM cheats):  This would be fairly
+  simple to do, after doing the RAM cheat stuff, but I think that FCE Ultra
+  already has too many ways to "cheat" and that this would just be code bloat.
+
+
+*** General Features:
+
+ Windows Port:
+  Support for command-line options(so that one crazy guy will quit bugging
+  me).
+
+ SDL Port:
+  Make the code better.
+  Add a GTK+ interface using GLADE.
+
+ Figure out a good way to add "turbo" button support and then do it.
+
+ Make default svgalib video mode a non-tweaked VGA mode.
+
+ Finish the software video blitting "library", add support for 2xsai, eagle,
+ interpolation, etc. effects.
+
+ Rewrite network play code.  Add security features(such as only allowing
+ connections from a specified ip address).
+
+
+*** Emulation:
+
+ Fix DPCM playback and IRQ at end of playback.
+
+ Improve the sound filters.  They work, but not very well.
+
+ Fix frame IRQ(if it even exists...) and $4017.
+
+ Fix some 6502 emulation bugs(undocumented opcodes might not be implemented 
+ correctly and I'm not sure if the IRQ flag latency is implemented correctly).
+
+ Fix MMC3 IRQ emulation.  Check if this fixes the PAL version of "Star Wars".
+
+ Figure out correct timing for when the PPU refresh address register is
+ updated by the PPU(for the next scanline).
+
+ Vertical blank period might be too short?  Or maybe something is wrong 
+ with my mapper 16 IRQ emulation code. Probably the latter.  
+ See SD Gundam Knight 3 or SD GK 2.
+
+ Sound frame count stuff on PAL games(is it correct?).
+ Fix FDS sound emulation.
+
+ Fix Zapper emulation(Chiller still doesn't always work correctly).
diff --git a/Documentation/cheat.txt b/Documentation/cheat.txt
new file mode 100644 (file)
index 0000000..55b1129
--- /dev/null
@@ -0,0 +1,249 @@
+FCE Ultra Cheat Guide
+ version .4
+---------------------------
+
+Table of Contents:
+
+ 1:  Introduction
+  1.0) Introduction
+  1.1) Cheat Files
+
+ 2:  The Windows Interface
+  2.0) The Main Cheat Window
+  2.1) The Add Cheat Window
+   2.1.1) The Cheat Search Interface
+
+ 3:  The DOS/Linux Interface - UNFINISHED(read "The Windows Interface" for now)
+  3.0) The Main Cheat Menu
+   3.0.1) The Cheat List
+  3.1) The Add Cheat Menu
+   3.1.1) The Cheat Search Interface
+
+ 4:  Finding Cheats
+  4.0) "Mega Man 3" Windows Example
+  4.1) "Over Horizon" DOS/Linux Example
+  4.2) Hints
+
+/******** Section 1.0:   */
+
+ FCE Ultra allows cheating by the periodic "patching" of arbitrary addresses
+ in the 6502's memory space with arbitrary values.  Currently, only RAM
+ patching is allowed(trying to patch an address where ROM is will silently
+ fail).
+
+ The patches are all applied a short time before the emulated
+ vertical blanking period.  This detail shouldn't concern most people, though.
+ However, this does mean that cheating with games that use
+ bank-switched RAM may be problematic.  Fortunately, such games are not very
+ common(in relation to the total number of NES and Famicom games).
+
+/******** Section 1.1:   */
+
+ Cheats are stored in the "cheats" subdirectory under the base FCE Ultra
+ directory.  The files are in a simple plain-text format.  Each line represents
+ a one-byte memory patch.  The format is:
+
+       Address(hex):Value(hex):Description
+       
+  Example:
+
+       040e:05:Infinite super power.
+
+ A colon(:) can be prefixed to the beginning of a line to disable that cheat.
+       
+
+/******** Section 2.0   */
+
+ All addresses listed in the Cheats and Add Cheat windows are in a
+ 16-bit hexadecimal format and all values in these windows are in an
+ unsigned 8-bit decimal format(the range for values is 0 through 255).
+
+
+ The main Cheats window contains the list of cheats for the currently
+ loaded game, places to view and edit the attributes of the selected cheat,
+ a button to delete the selected cheat, a button to open the Add Cheat
+ window, and a button to close the Cheats window.
+
+/******** Section 2.1   */
+
+ To the left in the Add Cheat window are text edit boxes for inputting
+ attributes of a cheat and a button to add that cheat.  To the right is
+ the cheat searching interface.
+
+ /******* Section 2.1.1 */
+ The cheat search interface consists of several components:  a list of
+ addresses and associated data for a search, several command buttons,
+ and the search paramters.
+
+ The list of addresses is in the format of:
+  "Address:Original Value:Current Value".
+
+ The address is the location in the 6502's address space, the original
+ value is the value that was stored at this address when the search was
+ reset, and the current value is the value that is currently stored at
+ that address.  Selecting an item in this list will automatically cause
+ the "Address" field in the "Add Cheat" box to be updated with the
+ selected address.
+
+ The "Reset Search" button resets the search process; all valid addresses
+ are displayed in the cheat list and the data values at those addresses noted.
+
+ The "Do Search" buttons performs a search based on the search parameters
+ and removes any non-matching addresses from the address list.
+
+ The "Set Original to Current" button sets the remembered original values
+ to the current values.  It is like the "Reset Search" button, but it does
+ not affect which addresses are shown in the address list.  This command is
+ especially useful when used in conjunction with the "O!=C" search filter.
+
+ The "Unhide Excluded" button shows all addresses that are excluded as a
+ result of any previous searches.  It is like the "Reset Search" button
+ except that it does not affect the remembered original values.
+
+ The numbers assigned the names "V1" and "V2" have different meanings based
+ on which filter is selected.  A list of the names of the filters and detailed
+ information on what they do follows("original value" corresponds to the value
+ remembered for a given addres and "current value" is the value currently
+ at that address. Also, if a value is not explicitly said to be shown
+ under a certain condition, then it is obviously excluded.):
+
+  "O==V1 && C==V2":
+                 Show the address if the original value is equal to "V1" AND
+                 the current value is equal to "V2".
+
+  "O==V1 && |O-C|==V2":
+                 Show the address if the original value is equal to "V1" AND
+                 the difference between the current value and the original
+                 value is equal to "V2".
+
+  "|O-C|==V2":
+                 Show the address if the difference between the current value
+                 and the original value is equal to "V2".
+  "O!=C":
+                 Show the address if the original value does not equal the
+                 current value.
+
+/******** Section 4.0   */
+
+ This example will give Mega Man unlimited energy.
+ Immediately after entering the Top Man stage, make your way to the
+ "Add Cheat" window.  Push "Reset Search".
+ Go back to playing and move right until the first enemy appears.  Allow
+ yourself to be hit twice.  Each hit does "2" damage, so you've lost 4 energy
+ bars.  Go to the "Add Cheat" window again and select the third filter
+ ("|O-C|==V2") and enter the value 4 next to "V2".  Then push "Do Search".
+
+ Several addresses will appear in the address list.  You can try to find
+ the address you want through trial and error, or you can narrow the results
+ down further.  We will do the latter.
+
+ Go back to playing MM3 and get hit one more time and make your way back
+ to the "Add Cheat" window.  Your damage is now "6".  You can probably
+ see which address that contains your life(it is 00A2).  If now, change
+ V2 to 6 and push "Do Search" again.  This should leave only 00A2.
+
+ Select that entry in the address list.  Shift your attention to the "Add
+ Cheat" box to the left.  Type in a meaningful name and the desired value(156;
+ it was the value when you had no damage, so it's safe to assume it's the
+ maximum value you can use).  Push the "Add" button and a confirmation box
+ will come up.  The cheat has been added.
+
+
+/******** Section 4.1   */
+
+ This example will give you infinite lives in the NTSC(Japanese) version
+ of "Over Horizon".
+
+ Start a new game.  Notice that when you press "Start" during gameplay,
+ the number of lives you have left is indicated.  With no cheating, you
+ start with 3 lives(2 lives left).
+
+ Activate the cheat interface immediately after starting a new game.
+ Select the "New Cheats" menu and "Reset Search".
+
+ I'll assume that the number of lives left shown in the game is the same number
+ that's stored in RAM.  Now, "Do Search".  You're going to use the first search
+ filter.  For V1, enter the value 2.  For V2, enter the same value.  This, 
+ coupled with the fact that you just reset the search, will allow you to search 
+ for a value "absolutely"(as opposed to changes in the value).  
+
+ Now, "Show Results".  When I did it, I received 11 results:
+
+        1) $0000:002:002
+        2) $001c:002:002
+        3) $001e:002:002
+        4) $009d:002:002
+        5) $00b9:002:002
+        6) $00e3:002:002
+        7) $0405:002:002
+        8) $0406:002:002
+        9) $0695:002:002
+       10) $07d5:002:002       
+       11) $07f8:002:002
+
+ You really can't do much yet(unless you want to spend time doing trial
+ and error cheat additions).  Return to the game.
+
+ After losing a life, go back to the cheat interface, to the "New Cheats"
+ menu, and "Show Results".  Here are my results:
+
+        1) $0000:002:002
+        2) $001c:002:002
+        3) $001e:002:002
+        4) $009d:002:002
+        5) $00b9:002:041
+        6) $00e3:002:002
+        7) $0405:002:001
+        8) $0406:002:002
+        9) $0695:002:002
+       10) $07d5:002:001
+       11) $07f8:002:002
+
+ Notice that two addresses seem to hold the number of lives($0405 and
+ $07d5).  You can lose another life and go "Show Results" again, and you
+ should see that $07d5 is the address that holds the number of lives.
+
+ Now that you know the address that holds the number of lives, you can
+ add a cheat.  You can either type in the number from the cheat results list
+ corresponding to the address you want to add a cheat for, or you can
+ remember the address and select "Add Cheat" from the "New Cheats" menu.
+ Do the former.
+
+ Now you will need to enter a name for the cheat.  I suggest something short,
+ but descriptive.  "Infinite lives" will work fine.  Next, a prompt for
+ the address will show up.  Since you selected an item from the list, you
+ can press enter to use the associated address($07d5).  Next, you will
+ need to enter a value.  It doesn't need to be large(in fact, it probably
+ shouldn't be; abnormally high numbers can cause some games to misbehave).
+ I suggest a value of 2.  After this, you should get a prompt that looks like
+ this:
+
+   Add cheat "Infinite lives" for address $07d5 with value 002?(Y/N)[N]:
+
+ Answer "Y".  You now have infinite lives.
+
+/******** Section 4.2   */
+
+ Games store player information in many different ways.  For example,
+ if you have "3" lives in Super Wacky Dodgeball 1989, the game might store
+ it in memory as 2, 3, or 4, or perhaps a different number all together.
+ Also, say that you have 69 life points out of 200 in Mole Mashers.  The
+ game might store how many life points you have, or how much damage you have
+ taken. Relative value searches are very valuable because you probably 
+ don't know the way that the game stores its player data.
+
+ Some games, especially RPGs, deal with individual numbers greater than
+ 8-bits in size.  Most that I've seen seem to store the multiple-byte data
+ least significant byte(lower byte of number) first in memory, though 
+ conceivably, it could be stored most significant byte first, or the component 
+ bytes of the number could be non-contiguous, though the latter is very unlikely.
+ For example, say I have 5304 experience points in Boring Quest for the 
+ Overused Plot Device.  To split the number into two eight bit decimal numbers,
+ take 5304 %(modulus) 256.  This will give a number that is the lower 8 bits.
+ Next, take 5304 / 256.  The integral component of your answer will be the 
+ upper 8 bits(or the next 8 bits, if the number is or can be larger than 16 
+ bits) of 5304.  Now you will need to search for these numbers.  Fortunately, 
+ most(all?) RPGs seem to store large numbers exactly as they are shown in the
+ game.
diff --git a/Documentation/fcs.txt b/Documentation/fcs.txt
new file mode 100644 (file)
index 0000000..d269301
--- /dev/null
@@ -0,0 +1,143 @@
+FCE Ultra Save State Format
+(preliminary document - AKA *very incomplete*)
+---------------------------------------
+
+FCE Ultra's save state format is now designed to be as forward and backwards
+compatible as possible.  This is achieved through the (over)use of chunks.
+All multiple-byte variables are stored LSB(least significant byte)-first.
+Data types:
+
+       (u)int8 - (un)signed 8 bit variable(also referred to as "byte")
+       (u)int16 - (un)signed 16 bit variable
+       (u)int32 - (un)signed 32 bit variable
+
+-- Main File Header:
+
+The main file header is 16-bytes in length.  The first three bytes contain
+the string "FCS".  The next byte contains the version of FCE Ultra that saved
+this save state.  This document only applies to version "53"(.53) and higher.
+After the version byte, the size of the entire file in bytes(minus the 16 byte
+main file header) is stored.  The rest of the header is currently unused
+and should be nulled out.  Graphical example of relevant parts:
+
+       FCS <uint8 version> <uint32 totalsize>
+
+-- Section Chunks:
+
+Sections chunk headers are 5-bytes in length.  The first byte defines what 
+section it  is, the next four bytes define the total size of the section
+(including the section chunk header).
+
+       <uint8 section> <uint32 size>
+
+Section definitions:
+
+       1       -       "CPU"
+       2       -       "CPUC"
+       3       -       "PPU"
+       4       -       "CTLR"
+       5       -       "SND"
+       16      -       "EXTRA"
+
+-- Subsection Chunks
+
+Subsection chunks are stored within section chunks.  They contain the actual
+state data.  Each subsection chunk is composed of an 8-byte header and the data.
+The header contains a description(a name) and the size of the data contained 
+in the chunk:
+               <uint8 description[4]> <uint32 size>
+
+The name is a four-byte string.  It does not need to be null-terminated.
+If the string is less than four bytes in length, the remaining unused bytes
+must be null.
+
+-- Subsection Chunk Description Definitions
+
+Note that not all subsection chunk description definitions listed below
+are guaranteed to be in the section chunk.  It's just a list of what CAN
+be in a section chunk.  This especially applies to the "EXTRA" subsection.
+
+---- Section "CPU"
+
+       Name:   Type:           Description:
+       
+       PC      uint16          Program Counter
+       A       uint8           Accumulator
+       P       uint8           Processor status register
+       X       uint8           X register
+       Y       uint8           Y register
+       S       uint8           Stack pointer
+       RAM     uint8[0x800]    2KB work RAM
+
+---- Section "CPUC" (emulator specific)
+
+        Name:   Type:           Description:
+
+       JAMM    uint8           Non-zero value if CPU in a "jammed" state
+       IRQL    uint8           Non-zero value if IRQs are to be generated constantly
+       ICoa    int32           Temporary cycle counter
+       ICou    int32           Cycle counter
+
+---- Section "PPU"
+
+        Name:   Type:           Description:
+
+       NTAR    uint8[0x800]    2 KB of name/attribute table RAM
+       PRAM    uint8[32]       32 bytes of palette index RAM
+       SPRA    uint8[0x100]    256 bytes of sprite RAM
+       PPU     uint8[4]        Last values written to $2000 and $2001, the PPU
+                               status register, and the last value written to
+                               $2003.
+       XOFF    uint8           Tile X-offset.
+       VTOG    uint8           Toggle used by $2005 and $2006.
+       RADD    uint16          PPU Address Register(address written to/read from
+                               when $2007 is accessed).
+       TADD    uint16          PPU Address Register
+       VBUF    uint8           VRAM Read Buffer
+       PGEN    uint8           PPU "general" latch.  See Ki's document.
+
+---- Section "CTLR" (somewhat emulator specific)
+
+        Name:   Type:           Description:
+
+       J1RB    uint8           Bit to be returned when first joystick is read.
+       J2RB    uint8           Bit to be returned when second joystick is read.
+
+---- Section "SND" (somewhat emulator specific)
+
+       <to be written>
+
+---- Section "EXTRA" (varying emulator specificness)
+
+       For iNES-format games(incomplete):
+
+        Name:   Type:           Description:
+
+       WRAM    uint8[0x2000]   8KB of WRAM at $6000-$7fff
+       MEXR    uint8[0x8000]   (very emulator specific)
+       CHRR    uint8[0x2000]   8KB of CHR RAM at $0000-$1fff(in PPU address space).
+       EXNR    uint8[0x800]    Extra 2KB of name/attribute table RAM.
+       MPBY    uint8[32]       (very emulator specific)
+       MIRR    uint8           Current mirroring:
+                                       0 = "Horizontal"
+                                       1 = "Vertical"
+                                       $10 = Mirror from $2000
+                                       $11 = Mirror from $2400
+       IRQC    uint32          Generic IRQ counter
+       IQL1    uint32          Generic IRQ latch
+       IQL2    uint32          Generic IRQ latch
+       IRQA    uint8           Generic IRQ on/off register.
+       PBL     uint8[4]        List of 4 8KB ROM banks paged in at $8000-$FFFF
+       CBL     uint8[8]        List of 8 1KB VROM banks page in at $0000-$1FFF(PPU).
+
+       For FDS games(incomplete):
+
+        Name:   Type:           Description:
+
+        DDT<x>  uint8[65500]    Disk data for side x(0-3).
+       FDSR    uint8[0x8000]   32 KB of work RAM
+       CHRR    uint8[0x2000]   8 KB of CHR RAM
+        IRQC    uint32          IRQ counter
+        IQL1    uint32          IRQ latch
+        IRQA    uint8           IRQ on/off.
+
diff --git a/Documentation/porting.txt b/Documentation/porting.txt
new file mode 100644 (file)
index 0000000..72fefca
--- /dev/null
@@ -0,0 +1,229 @@
+*Incomplete*
+
+
+***Driver-supplied functions:
+       These functions will only be called after the driver code calls
+       FCEUI_LoadGame() or FCEUI_Emulate().
+
+void FCEUD_Update(uint8 *XBuf, int32 *Buffer, int Count);
+       Called by FCE Ultra on every emulated frame.  This function should 
+       perform the following three things(in any order):
+
+       1.
+         Update the data pointed to by the pointers passed to
+         FCEUI_SetInput() and FCEUI_SetInputFC().
+       2.
+          Copy contents of XBuf over to video memory(or whatever needs to be 
+         done to make the contents of XBuf visible on screen).
+          Each line is 256 pixels(and bytes) in width, and there can be 240
+          lines.  The pitch for each line is 272 bytes.
+         XBuf will be 0 if the symbol FRAMESKIP is defined and this frame
+         was skipped.
+       3.
+          Write the contents of "Buffer" to the sound device.  "Count" is the
+          number of samples to write.  Only the lower 16-bits of each
+          sample are used, so each 32-bit sample in "Buffer" can be converted to
+          signed 16-bit by dropping the upper 16 bits.
+         When sound was disabled for the frame, "Count" will be 0.
+
+void FCEUD_SetPalette(uint8 index, uint8 r, uint8 g, uint8 b);
+       Set palette entry "index" to specified RGB values(value: min=0, max=255).
+
+void FCEUD_GetPalette(uint8 index, uint8 *r, uint8 *g, uint8 *b);
+       Get palette entry "index" data.
+
+void FCEUD_PrintError(char *s);
+       Print/Display an error message string pointed to by "s".
+
+int FCEUD_NetworkConnect(void);
+       Initialize a network connection.  Return 0 if an error occurs.
+
+int FCEUD_NetworkRecvData(uint8 *data, uint32 len, int block);
+       Receive "len" bytes of data to "data".  If block is 0 and "len" amount
+       of data is not available, return -1.  If block is 1, wait until the
+       requested amount of data is available.
+       Return 0 on failure.
+
+int FCEUD_NetworkSendData(uint8 *data, uint32 len);
+       Send "len" bytes of "data".  Return 0 on failure.
+
+void FCEUD_NetworkClose(void);
+       Close the network connection.
+
+
+***FCE Ultra functions(called by the driver code):
+       The FCEUI_* functions may only be called before FCEUI_Emulate() is 
+       called or after it returns and before it is called again, or after the
+       following functions are called and before they return:
+               FCEUD_Update();
+       Calling the FCEUI_* functions at any other time may result in 
+       undefined behavior.
+       
+void FCEUI_SetInput(int port, int type, void *ptr, int attrib);
+void FCEUI_SetInputFC(int type, void *ptr, int attrib);
+void FCEUI_DisableFourScore(int s);
+
+void FCEUI_SetSnapName(int a);
+
+void FCEUI_DisableSpriteLimitation(int a);
+       Disables the 8-sprite-per-scanline limitation of the NES if "a"
+       is nonzero.  The default behavior is the limitation is enabled.
+
+void FCEUI_SaveExtraDataUnderBase(int a);
+       If "a" is nonzero, save extra non-volatile game data(battery-backed
+       RAM) under FCE Ultra's base directory.  Otherwise, the behavior is
+       to save it under the same directory the game is located in(this is
+       the default behavior).
+
+FCEUGI *FCEUI_LoadGame(char *name);
+       Loads a new file.  "name" is the full path of the file to load.
+       Returns 0 on failure, or a pointer to data type "FCEUGI":
+       See file "git.h" for more details on this structure.
+
+int FCEUI_Initialize(void);
+       Allocates and initializes memory.  Should only be called once, before
+       any calls to other FCEU functions.
+       
+void FCEUI_SetBaseDirectory(void);
+        Specifies the base FCE Ultra directory.  This should be called
+        immediately after FCEUI_Initialize() and any time afterwards.
+
+void FCEUI_SetDirOverride(int which, char *n);
+
+        FCEUIOD_CHEATS  - Cheats
+        FCEUIOD_MISC    - Miscellaneous stuff(custom game palettes)
+        FCEUIOD_NV      - Non-volatile game data(battery backed RAM)
+        FCEUIOD_SNAPS   - Screen snapshots
+        FCEUIOD_STATE   - Save states
+
+void FCEUI_Emulate(void);
+       Enters the emulation loop.  This loop will be exited when FCEUI_CloseGame()
+       is called.  This function obviously shouldn't be called if FCEUI_LoadGame()
+       wasn't called or FCEUI_CloseGame() was called after FCEUI_LoadGame().
+
+void FCEUI_CloseGame(void);
+       Closes the loaded game and frees all memory used to load it.
+       Also causes FCEUI_Emulate() to return.
+
+void FCEUI_SetRenderedLines(int ntscf, int ntscl, int palf, int pall);
+        Sets the first(minimum is 0) and last(NOT the last scanline plus one; 
+       maximum is 239) scanlines of background data to draw, for both NTSC 
+       emulation mode and PAL emulation mode.
+
+       Defaults are as if this function were called with the variables set
+       up as follows:
+               ntscf=8, ntscl=239, palf=0, pall=239
+               
+void FCEUI_SetNetworkPlay(int type);
+       Sets status of network play according to "type".  If type is 0,
+       then network play is disabled.  If type is 1, then we are server.  
+       If type is 2, then we are a client.
+
+void FCEUI_SelectState(int w);
+       Selects the state "slot" to save to and load from.
+
+void FCEUI_SaveState(void);
+       Saves the current virtual NES state from the "slot" selected by 
+       FCEUI_SelectState().
+
+void FCEUI_LoadState(void);
+        Loads the current virtual NES state from the "slot" selected by
+        FCEUI_SelectState().
+
+void FCEUI_SaveSnapshot(void);
+       Saves a screen snapshot.  
+
+void FCEUI_DispMessage(char *msg);
+       Displays a short, one-line message using FCE Ultra's built-in
+       functions and ASCII font data.
+
+int32 FCEUI_GetDesiredFPS(void);
+       Returns the desired FPS based on whether NTSC or PAL emulation is
+       enabled, shifted left by 24 bits(this is necessary because the real
+       FPS value is not a whole integer).  This function should only be 
+       necessary if sound emulation is disabled.  
+
+int FCEUI_GetCurrentVidSystem(int *slstart, int *slend);
+       Convenience function(not strictly necessary, but reduces excessive code
+       duplication); returns currently emulated video system
+       (0=NTSC, 1=PAL).  It will also set the variables pointed to by slstart
+       and slend to the first and last scanlines to be rendered, respectively,
+       if slstart and slend are not 0.
+
+int FCEUI_AddCheat(char *name, uint16 addr, uint8 val);
+       Adds a RAM cheat with the specified name to patch the address "addr"
+       with the value "val".
+
+int FCEUI_DelCheat(uint32 which);
+       Deletes the specified(by number) cheat.
+
+void FCEUI_ListCheats(void (*callb)(char *name, uint16 a, uint8 v));
+       Causes FCE Ultra to go through the list of all cheats loaded for
+       the current game and call callb() for each cheat with the cheat 
+       information.
+
+int FCEUI_GetCheat(uint32 which, char **name, int32 *a, int32 *v, int *s);
+       Gets information on the cheat referenced by "which".
+
+int FCEUI_SetCheat(uint32 which, char *name, int32 a, int32 v, int s);
+       Sets information for the cheat referenced by "which".
+
+void FCEUI_CheatSearchBegin(void);
+       Begins the cheat search process.  Current RAM values are copied
+       to a buffer to later be processed by the other cheat search functions.
+
+void FCEUI_CheatSearchEnd(int type, int v1, int v2);
+       Searches the buffer using the search method specified by "type"
+       and the parameters "v1" and "v2".
+
+int32 FCEUI_CheatSearchGetCount(void);
+       Returns the number of matches from the cheat search.    
+
+void FCEUI_CheatSearchGet(void (*callb)(uint16 a, int last, int current));
+
+void FCEUI_CheatSearchGetRange(int first, int last, void (*callb)(uint16 a, int last, int current));
+       Like FCEUI_CheatSearchGet(), but you can specify the first and last
+       matches to get.
+
+void FCEUI_CheatSearchShowExcluded(void);
+       Undos any exclusions of valid addresses done by FCEUI_CheatSearchEnd().
+
+void FCEUI_CheatSearchSetCurrentAsOriginal(void);
+       Copies the current values in RAM into the cheat search buffer.
+
+***Recognized defined symbols:
+
+The following defined symbols affect the way FCE Ultra is compiled:
+
+       C80x86
+       - Include 80x86 inline assembly in AT&T syntax.
+
+       FRAMESKIP
+       - Include frame skipping code.
+
+       NETWORK
+       - Include network play code.
+
+       FPS
+       - Compile code that prints out a number when FCE Ultra exits 
+         that represents the average fps.
+       
+       ZLIB
+       - Compile support for compressed PKZIP-style files AND gzip compressed
+         files.  "unzip.c" will need to be compiled and linked in by you if 
+         this is defined(it's in the zlib subdirectory).
+
+       LSB_FIRST
+       - Compile code to expect that variables that are greater than 8 bits
+         in size are stored Least Significant Byte First in memory.
+
+       PSS_STYLE x
+       - Sets the path separator style to the integer 'x'.  Valid styles are:
+         1: Only "/" - For UNIX platforms.
+         2: Both "/" and "\" - For Windows and MSDOS platforms.
+         3: Only "\" - For ???.
+         4: Only ":" - For Macintoshes and Apple IIs ^_^.
+
+
+
+
diff --git a/Documentation/rel/1.0 b/Documentation/rel/1.0
new file mode 100644 (file)
index 0000000..d791845
--- /dev/null
@@ -0,0 +1,178 @@
+/******************************************************************************/
+/*  1.0)       What FCE Ultra is:                                            */
+/******************************************************************************/
+
+        FCE Ultra is an NTSC and PAL Famicom/NES emulator for various 
+        platforms. It is based upon Bero's original FCE source code.  Current
+       features include good PPU, CPU, pAPU, expansion chip, and joystick
+       emulation.  Also a feature unique to this emulator(at the current
+        time) is authentic Game Genie emulation.  Save states and snapshot
+       features also have been implemented.  The VS Unisystem is emulated
+        as well.  FCE Ultra supports iNES format ROM images, UNIF format ROM
+       images, headerless and FWNES style FDS disk images, and NSF files.
+
+        FCE Ultra currently supports the following iNES mappers(many partially):
+
+Number:         Description:                    Game Examples:
+--------------------------------------------------------------------------------
+  0             No Mapper                       Donkey Kong, Mario Bros
+  1             Nintendo MMC1                   MegaMan 2, Final Fantasy
+  2             Simple 16KB PRG Switch          MegaMan 1, Archon, 1944
+  3             Simple 8KB CHR Switch           Spy Hunter, Gradius
+  4             Nintendo MMC3                   Recca, TMNT 2, Final Fantasy 3
+  5             Nintendo MMC5                   Castlevania 3, Just Breed, Uchuu Keibitai SDF
+  6             FFE F4 Series(hacked)           Saint Seiya, Ganbare Goemon
+  7             AOROM                           Battle Toads, Lion King
+  8             FFE F3 Series(hacked)           Doraemon Kaitakuhen
+  9             Nintendo MMC2                   Punchout!
+ 10             Nintendo MMC4                   Fire Emblem, Fire Emblem Gaiden
+ 11             Color Dreams                    Crystal Mines, Bible Adventures
+ 13             CPROM                           Videomation
+ 15             Multi-cart(pirate)              100-in-1: Contra Function 16
+ 16             Bandai                          Dragon Ball Z, Gundam Knight
+ 17             FFE F8 Series(hacked)           Parodius, Last Armageddon
+ 18             Jaleco SS806                    Pizza Pop, Plazma Ball
+ 19             Namco 106                       Splatter House, Mappy Kids                
+ 21             Konami VRC4 2A                  WaiWai World 2, Ganbare Goemon Gaiden 2
+ 22             Konami VRC4 1B                  Twinbee 3
+ 23             Konami VRC2B                    WaiWai World, Getsufuu Maden
+ 24             Konami VRC6                     Akumajo Densetsu(Dracula 3)
+ 25             Konami VRC4                     Gradius 2, Bio Miracle: Boku tte Upa
+ 26             Konami VRC6 A0-A1 Inverse       Esper Dream 2, Madara
+ 32             Irem G-101                      Image Fight 2, Perman
+ 33             Taito TC0190/TC0350             Don Doko Don 1&2
+ 34             NINA-001 and BNROM             Impossible Mission 2, Deadly Towers, Bug Honey
+ 40             (pirate)                        Super Mario Bros. 2
+ 41             Caltron 6-in-1                  Caltron 6-in-1
+ 42            (pirate)                        "Mario Baby"
+ 43            Multi-cart(pirate)              Golden Game 150 in 1
+ 44            Multi-cart(pirate)              Super HiK 7 in 1        
+ 45            Multi-cart(pirate)              Super 1000000 in 1
+ 46            Game Station                    Rumble Station
+ 47            NES-QJ                          Nintendo World Cup/Super Spike V.B.
+ 48            Taito TC190V                    Flintstones
+ 49             Multi-cart(pirate)              Super HiK 4 in 1
+ 51            Multi-cart(pirate)              11 in 1 Ball Games
+ 52            Multi-cart(pirate)              Mario Party 7 in 1
+ 64             Tengen RAMBO-1                  Shinobi, Klax
+ 65             Irem H-3001                     Daiku no Gensan 2
+ 66             GNROM                           SMB + Duck Hunt
+ 67             Sunsoft Mapper "3"              Fantasy Zone 2
+ 68             Sunsoft Mapper "4"              After Burner 2, Nantetta Baseball 
+ 69             Sunsoft FME-7                   Batman: ROTJ, Gimmick!
+ 70            ??                              Kamen Rider Club
+ 71             Camerica                        Fire Hawk, Linus Spacehead
+ 72            Jaleco ??                       Pinball Quest
+ 73             Konami VRC3                     Salamander
+ 75             Jaleco SS8805/Konami VRC1       Tetsuwan Atom, King Kong 2
+ 76             Namco 109                       Megami Tenshi 1
+ 77             Irem ??                         Napoleon Senki
+ 78             Irem 74HC161/32                 Holy Diver
+ 79             NINA-06                                F15 City War, Krazy Kreatures
+ 80             Taito X-005                     Minelvation Saga
+ 82            Taito ??                        Kyuukyoku Harikiri Stadium - Heisei Gannen Ban                  
+ 83            Multi-cart(pirate)              Dragon Ball Party
+ 85             Konami VRC7                     Lagrange Point
+ 86            Jaleco ??                       More Pro Baseball
+ 87            ??                              Argus
+ 89            Sunsoft ??                      Mito Koumon
+ 90            Pirate                          Super Mario World, Mortal Kombat
+ 92             Jaleco ??                       MOERO Pro Soccer, MOERO Pro Yakyuu '88
+ 93            ??                              Fantasy Zone
+ 94            ??                              Senjou no Ookami
+ 95            Namco ??                        Dragon Buster
+ 97            ??                              Kaiketsu Yanchamaru
+ 99             VS System 8KB CHR Switch        VS SMB, VS Excite Bike
+105             NES-EVENT                       Nintendo World Championships
+112             Asder                          Sango Fighter, Hwang Di
+113            MB-91                           Deathbots
+118            MMC3-TLSROM/TKSROM Board        Ys 3, Goal! 2, NES Play Action Football
+119             MMC3-TQROM Board                High Speed, Pin*Bot
+140            Jaleco ??                       Bio Senshi Dan
+151             Konami VS System Expansion      VS The Goonies, VS Gradius
+152            ??                              Arkanoid 2, Saint Seiya Ougon Densetsu
+153             Bandai ??                       Famicom Jump 2
+180             ??                              Crazy Climber
+182            ??                              Super Donkey Kong
+184            ??                              Wing of Madoola, The
+189             Micro Genius TXC ??             Thunder Warrior
+225             Multi-cart(pirate)              58-in-1/110-in-1/52 Games
+226             Multi-cart(pirate)              76-in-1
+227            Multi-cart(pirate)              1200-in-1
+228             Action 52                       Action 52, Cheetahmen 2
+229             Multi-cart(pirate)              31-in-1
+232            BIC-48                          Quattro Arcade, Quattro Sports
+234            Multi-cart ??                   Maxi-15
+240             ??                              Gen Ke Le Zhuan, Shen Huo Le Zhuan
+242            ??                              Wai Xing Zhan Shi
+246            ??                              Fong Shen Ban
+248            ??                              Bao Qing Tian
+250            ??                              Time Diver Avenger
+
+       FCE Ultra currently supports the following UNIF boards(minus the 
+        prefixes HVC-, NES-, BTL-, and BMC-, as they are currently ignored):
+        
+Group: Name:                   Game Examples:
+--------------------------------------------------------------------------------
+Bootleg:
+        MARIO1-MALEE2          Super Mario Bros. Malee 2
+        NovelDiamond9999999in1 Novel Diamond 999999 in 1
+       Super24in1SC03          Super 24 in 1
+        Supervision16in1       Supervision 16-in-1
+
+Unlicensed:
+        Sachen-8259A           Super Cartridge Version 1
+        Sachen-8259B           Silver Eagle
+        Sachen-74LS374N                Auto Upturn
+        SA-016-1M              Master Chu and the Drunkard Hu
+        SA-72007               Sidewinder
+        SA-72008               Jovial Race
+        SA-0036                        Mahjong 16
+        SA-0037                        Mahjong Trap
+       TC-U01-1.5M             Challenge of the Dragon
+
+MMC1:
+       SAROM                   Dragon Warrior
+       SBROM                   Dance Aerobics
+       SCROM                   Orb 3D
+       SEROM                   Boulderdash
+       SGROM                   Defender of the Crown
+       SKROM                   Dungeon Magic
+       SLROM                   Castlevania 2
+       SL1ROM                  Sky Shark
+       SNROM                   Shingen the Ruler
+       SOROM                   Nobunaga's Ambition
+
+MMC3:
+       TFROM                   Legacy of the Wizard
+       TGROM                   Megaman 4
+       TKROM                   Kirby's Adventure
+       TKSROM                  Ys 3
+       TLROM                   Super Spike V'Ball
+       TLSROM                  Goal! 2
+       TR1ROM                  Gauntlet
+       TQROM                   Pinbot
+       TSROM                   Super Mario Bros. 3
+       TVROM                   Rad Racer 2
+
+MMC5:
+       EKROM                   Gemfire
+       ELROM                   Castlevania 3
+       ETROM                   Nobunaga's Ambition 2
+       EWROM                   Romance of the Three Kingdoms 2
+
+MMC6:
+       HKROM                   Star Tropics
+
+Nintendo
+discrete
+logic:
+        CNROM                  Gotcha
+        CPROM                  Videomation
+        MHROM
+        NROM-128               Mario Bros.
+        NROM-256               Super Mario Bros.
+        RROM-128
+        UNROM                  Megaman
+
+
diff --git a/Documentation/rel/1.1.dos b/Documentation/rel/1.1.dos
new file mode 100644 (file)
index 0000000..003a7d8
--- /dev/null
@@ -0,0 +1,22 @@
+/******************************************************************************/
+/*  1.1)        System requirements:                                          */
+/******************************************************************************/
+
+        Minimum system requirements:
+
+        Pentium 60 MHz
+        8 MB RAM
+        400 KB free disk space
+        Linux 2.0.36
+        VGA adapter
+
+        Recommended system specifications(at least):
+
+        Pentium 233 MHz
+        16 MB RAM
+        5 MB free disk space
+        Windows 9x/Me/2000/XP(long filename support)
+       VGA adapter
+        Sound Blaster Pro or newer sound card(or compatible)
+
+
diff --git a/Documentation/rel/1.1.linux b/Documentation/rel/1.1.linux
new file mode 100644 (file)
index 0000000..b84d391
--- /dev/null
@@ -0,0 +1,22 @@
+/******************************************************************************/
+/*  1.1)        System requirements:                                          */
+/******************************************************************************/
+
+        Minimum system requirements:
+
+        Pentium 60 MHz
+        8 MB RAM
+        400 KB free disk space
+        Linux 2.0.36
+        VGA adapter
+
+        Recommended system specifications(at least):
+
+        Pentium 233 MHz
+        16 MB RAM
+        5 MB free disk space
+        Linux 2.2.x
+        SVGA adapter with 512 KB of RAM
+        Sound device capable of handling a sample rate of about 44100 hz.
+
+
diff --git a/Documentation/rel/1.1.win b/Documentation/rel/1.1.win
new file mode 100644 (file)
index 0000000..af57dc7
--- /dev/null
@@ -0,0 +1,26 @@
+/******************************************************************************/
+/*  1.1)       System requirements:                                          */
+/******************************************************************************/
+
+        Minimum system specifications:
+
+        Pentium 60 MHz
+        8 MB RAM
+        400 KB free disk space
+       Windows 95
+       DirectX 7.0
+        Video adapter
+
+        Recommended minimum system specifications:
+
+        Pentium 233 MHz
+        16 MB RAM
+        5 MB free disk space
+       Windows 98SE
+        Video adapter with 2D acceleration abilities
+       DirectX 8.0
+       Joystick
+       Mouse
+        Sound device capable of handling a sample rate of 44100 hz.
+
+
diff --git a/Documentation/rel/2.0.dos b/Documentation/rel/2.0.dos
new file mode 100644 (file)
index 0000000..c837350
--- /dev/null
@@ -0,0 +1,93 @@
+/******************************************************************************/
+/*  2.0) Starting FCE Ultra                                                   */
+/******************************************************************************/
+
+        Start FCE Ultra using the following format:
+
+        fceu <arguments> romimage.nes
+
+        <arguments> can be one or more of the following:
+
+        -vmode x        Select video mode(all are 8 bpp).
+                         1 = 256x240 @ 72 hz   <Default>
+                         2 = 256x256 @ 65 hz
+                         3 = 256x256(with scanlines) @ 120 hz
+                         6 = 256x224(with scanlines) @ 120 hz
+                         8 = 256x224 @ 103 hz
+       -vsync x        Wait for the screen's vertical retrace before updating 
+                       the screen.  This *may* cause sound distortion.
+                        0 = Disabled.  <Default>
+                        1 = Enabled.
+        -cpalette x     Load a custom global palette from file x.
+                        The filename x is saved in the configuration file,
+                        not the data from the file.  Note that you should
+                        probably use an absolute("C:\nes\test.pal") filename
+                        rather than a relative("test.pal") filename.  If x is 0,
+                       the default (built in) global palette will be used.
+        -ntsccol        Emulate an NTSC's TV's colors based on user-supplied
+                        hue and tint values.
+                         0 = Disabled.
+                         1 = Enabled.
+        -sound   x      Sound.         <Default=44100>
+                         0 = Disabled.
+                         Otherwise, x = playback rate in samples per second.
+        -soundvol x     Sound volume. x is an integral percentage value.
+                        The default value is, obviously, 100.
+                        Setting it higher will increase the likelihood that
+                        sound clipping will occur.  This shouldn't be noticeable
+                       if the volume is reasonable(200% or lower; perhaps even
+                        higher for many games).
+        -f8bit x        Force 8-bit sound.  Enabling this will decrease
+                        sound quality noticeably without increasing
+                        performance noticeably.  Only use when 16-bit sound
+                        is problematic.
+                         0 = Disabled. <Default>
+                         1 = Enabled.
+       -nothrottle x   Disables speed throttling used when sound is disabled
+                       if x is non-zero.  The default value of x is 0.
+        -joy x          Joystick mapped to virtual joystick x.
+                         0 = Disabled, reset configuration.
+        -inputx str     Select device mapped to virtual NES-style input port
+                        x(1-2).
+                        The default for both virtual input ports is "gamepad".
+                         str may be: none, gamepad, zapper, powerpada,
+                                     powerpadb, arkanoid
+        -fcexp str      Select Famicom expansion port device.  If you select
+                        a device other than "none", you should enable the
+                        "gamepad" on both NES-style virtual input ports.
+                        The default is "none".
+                         str may be: none, shadow, arkanoid, 4player, fkb
+        -nofs x         Disables Four-Score emulation if x is 1.  Default is 0.
+                        Note that Four-Score emulation will only be active
+                        if "gamepad" is mapped to one or both virtual input
+                        ports.
+       -gg             Enable Game Genie emulation.
+        -pal            Emulate a PAL NES.
+        -no8lim x       Disables the 8 sprites per scanline limitation.
+                         0 = Limitation enabled.       <Default>
+                         1 = Limitation disabled.
+        -subase x       Save extra game data files(such as battery-backed RAM)
+                        under the base directory if enabled.
+                         0 = Disabled. <Default>
+                         1 = Enabled.
+        -snapname x     Selects what type of file name screen snapshots will
+                        have.
+                         0 = Numeric(0.png)     <Default>
+                         1 = File base and numeric(mario-0.png)
+        -clipsides x    Clip leftmost and rightmost 8 columns of pixels of
+                        video output.
+                         0 = Disabled.  <Default>
+                         1 = Enabled.
+        -slstart x      Set the first drawn emulated scanline for NTSC emulation
+                        mode.  Valid values for x are 0 through 239.
+                        The default value is 8.
+        -slend x        Set the last drawn emulated scanline for NTSC emulation
+                        mode. Valid values for x are 0 through 239.
+                        The default value is 239.
+        -slstartp x     Set the first drawn emulated scanline for PAL emulation
+                       mode.  Valid values for x are 0 through 239.  
+                       The default value is 0.
+        -slendp x       Set the last drawn emulated scanline for PAL emulation
+                       mode. Valid values for x are 0 through 239.
+                       The default value is 239.
+
diff --git a/Documentation/rel/2.0.linux b/Documentation/rel/2.0.linux
new file mode 100644 (file)
index 0000000..bace00f
--- /dev/null
@@ -0,0 +1,109 @@
+/******************************************************************************/
+/*  2.0) Starting FCE Ultra                                                   */
+/******************************************************************************/
+
+        Start FCE Ultra using the following format:
+
+        ./fceu <arguments> romimage.nes
+
+        <arguments> can be one or more of the following:
+
+        -vmode x        Select video mode(all are 8 bpp).
+                         1 = 256x240 @ 72 hz   <Default>
+                         2 = 256x256 @ 65 hz
+                         3 = 256x256(with scanlines) @ 120 hz
+                         4 = 640x480(with scanlines)
+                         5 = 640x480("1 per 4")
+                         6 = 256x224(with scanlines) @ 120 hz
+                        7 = 320x240
+                        8 = 256x224 @ 103 hz
+       -vsync x        Wait for the screen's vertical retrace before updating 
+                       the screen.  If you have sound enabled and enable this,
+                       you may have to increase the number of sound fragments
+                       from the default of 8, to reduce buffer underruns.
+                       Buffer underruns will not be preventable if the 
+                       current video refresh rate is < ~60 hz (or < ~50 hz 
+                       if PAL emulation is enabled).
+                        0 = Disabled.  <Default>
+                        1 = Enabled.
+       -cpalette x     Load a custom global palette from file x.  
+                       The filename x is saved in the configuration file,
+                       not the data from the file.  Note that you should
+                       probably use an absolute("/home/jp/test.pal") filename
+                       rather than a relative("test.pal") filename.  If x is 0,
+                       the default (built in) global palette will be used.
+        -ntsccol        Emulate an NTSC's TV's colors based on user-supplied
+                        hue and tint values.
+                         0 = Disabled. <Default>
+                         1 = Enabled.
+        -sound   x      Sound.          <Default=48000>
+                         0 = Disabled.
+                         Otherwise, x = playback rate in samples per second.
+       -soundvol x     Sound volume. x is an integral percentage value.
+                       The default value is, obviously, 100.
+                       Setting it higher will increase the likelihood that
+                       sound clipping will occur.  This shouldn't be noticeable
+                       if the volume is reasonable(200% or lower; perhaps even
+                       higher for many games).
+       -sfragsize x    Set sound fragment size to 2^x(2 to the power of x)
+                       SAMPLES.  The default value is 7.
+       -snfrags x      Set number of sound fragments to x.  The default value
+                       is 8.
+        -f8bit x        Force 8-bit sound.  Enabling this will decrease
+                        sound quality noticeably without increasing
+                        performance noticeably.  Only use when 16-bit sound
+                        is problematic.
+                         0 = Disabled. <Default>
+                         1 = Enabled.
+        -nothrottle x   Disables speed throttling used when sound is disabled
+                        if x is non-zero.  The default value of x is 0.
+       -joyx y         Joystick mapped to virtual joystick x(1-4).
+                        0 = Disabled, reset configuration.     <Default>
+                        Otherwise, y(1-inf) = joystick number.
+        -inputx str     Select device mapped to virtual NES-style input port 
+                       x(1-2).
+                       The default for both virtual input ports is "gamepad".
+                         str may be: none, gamepad, zapper, powerpada, 
+                                    powerpadb, arkanoid
+       -fcexp str      Select Famicom expansion port device.  If you select
+                       a device other than "none", you should enable the
+                       "gamepad" on both NES-style virtual input ports.
+                       The default is "none".
+                        str may be: none, shadow, arkanoid, 4player, fkb
+       -nofs x         Disables Four-Score emulation if x is 1.  Default is 0.
+                       Note that Four-Score emulation will only be active
+                       if "gamepad" is mapped to one or both virtual input
+                       ports.
+       -gg             Enable Game Genie emulation.
+        -pal            Emulate a PAL NES.
+        -no8lim x       Disables the 8 sprites per scanline limitation.
+                         0 = Limitation enabled.       <Default>
+                         1 = Limitation disabled.
+        -subase x       Save extra game data files(such as battery-backed RAM)
+                        under the base directory if enabled.
+                         0 = Disabled. <Default>
+                         1 = Enabled.
+       -snapname x     Selects what type of file name screen snapshots will 
+                       have.
+                        0 = Numeric(0.png)     <Default>
+                        1 = File base and numeric(mario-0.png)
+       -clipsides x    Clip leftmost and rightmost 8 columns of pixels of 
+                       video output.
+                        0 = Disabled.  <Default>
+                        1 = Enabled.
+        -slstart x      Set the first drawn emulated scanline for NTSC emulation
+                        mode.  Valid values for x are 0 through 239.
+                        The default value is 8.
+        -slend x        Set the last drawn emulated scanline for NTSC emulation
+                        mode. Valid values for x are 0 through 239.
+                        The default value is 239.
+        -slstartp x     Set the first drawn emulated scanline for PAL emulation
+                        mode.  Valid values for x are 0 through 239.
+                        The default value is 0.
+        -slendp x       Set the last drawn emulated scanline for PAL emulation
+                        mode. Valid values for x are 0 through 239.
+                        The default value is 239.
+        -connect   s    Connect to server 's' for TCP/IP network play.
+        -server         Be a host/server for TCP/IP network play.
+       -netport x      Use TCP/IP port x for network play.  The default
+                       port is 4046.
diff --git a/Documentation/rel/2.0.win b/Documentation/rel/2.0.win
new file mode 100644 (file)
index 0000000..15bc082
--- /dev/null
@@ -0,0 +1,8 @@
+/******************************************************************************/
+/*  2.0)        Starting FCE Ultra                                            */
+/******************************************************************************/
+
+        FCE Ultra can be started by running the executable "fceu.exe".
+        I do not recommend running it from a DOS "box".
+
+
diff --git a/Documentation/rel/2.1.dos b/Documentation/rel/2.1.dos
new file mode 100644 (file)
index 0000000..31f5995
--- /dev/null
@@ -0,0 +1,59 @@
+/******************************************************************************/
+/*  2.1)        General Keyoard Key Mapping:                                  */
+/******************************************************************************/
+
+        Default Key Mapping:
+
+        For emulated Family BASIC Keyboard:
+         Enable/Disable Keyboard Input         Scroll Lock
+               (enabling emulated keyboard input will disable
+                commands keys)
+         All emulated keys are mapped to the closest open key on the PC
+         keyboard, with a few exceptions.  The emulated "@" key is
+         mapped to the "`"(grave) key, and the emulated "kana" key
+         is mapped to the "Insert" key(in the 3x2 key block above the
+         cursor keys).
+
+         For emulated game pads:
+          Left Control             B
+          Left Alt                 A
+          Enter/Return             Start
+          Tab                      Select
+          Cursor Down              Down
+          Cursor Up                Up
+          Cursor Left              Left
+          Cursor Right             Right
+
+         For emulated power pads(keys correspond to button locations on
+         side "B"):
+          O P [ ]
+          K L ; '
+          M , . /
+
+         For FDS games:
+          I                        Insert disk.
+          E                        Eject disk.
+          S                        Select disk/disk side.
+        
+        For VS Unisystem games:
+         C                        Insert coin.
+         V                        Show/Hide dip switches.
+           1-8                      Toggle dip switches(when dip switches 
+                                   are shown).
+
+         T                        Select tint to adjust.
+         H                        Select hue to adjust.
+         +/-                      Increase/decrease tint or hue.
+
+         0-9                      Select save state.
+         Caps Lock                Select virtual joystick.
+
+         F2                       Activate cheat interface.
+
+         F5/F7                    Save/Load state.
+         F9                       Save screen snapshot.
+         F10                      Reset.
+        F11                      Power off/on.
+         ESC/F12                  Exit.
+
+
diff --git a/Documentation/rel/2.1.linux b/Documentation/rel/2.1.linux
new file mode 100644 (file)
index 0000000..85915f3
--- /dev/null
@@ -0,0 +1,62 @@
+/******************************************************************************/
+/*  2.1)        General Keyoard Key Mapping:                                  */
+/******************************************************************************/
+
+        Default Key Mapping:
+
+         For emulated Family BASIC Keyboard:
+          Enable/Disable Keyboard Input         Scroll Lock
+                (enabling emulated keyboard input will disable
+                 commands keys)
+          All emulated keys are mapped to the closest open key on the PC
+          keyboard, with a few exceptions.  The emulated "@" key is
+          mapped to the "`"(grave) key, and the emulated "kana" key
+          is mapped to the "Insert" key(in the 3x2 key block above the
+          cursor keys).
+
+         For emulated game pads:
+          Left Control             B
+          Left Alt                 A
+          Enter/Return             Start
+          Tab                      Select
+          Cursor Down              Down
+          Cursor Up                Up
+          Cursor Left              Left
+          Cursor Right             Right
+
+         For emulated power pads(keys correspond to button locations on
+         side "B"):
+          O P [ ]
+          K L ; '
+          M , . /
+
+         For FDS games:
+          I                        Insert disk.
+          E                        Eject disk.
+          S                        Select disk/disk side.
+        
+         For VS Unisystem games:
+          C                        Insert coin.
+          V                        Show/Hide dip switches.
+           1-8                      Toggle dip switches(when dip switches
+                                    are shown).
+
+         T                        Select tint to adjust.
+         H                        Select hue to adjust.
+         +/-                      Increase/decrease tint or hue.
+
+         0-9                      Select save state.
+         Caps Lock                Select virtual joystick.
+
+        F2                       Activate cheat interface.
+
+         F3                       Lock virtual console.
+         F4                       Unlock virtual console.
+
+         F5/F7                    Save/Load state.
+         F9                       Save screen snapshot.
+         F10                      Reset.
+        F11                      Power off/on.
+         ESC/F12                  Exit.
+
+
diff --git a/Documentation/rel/2.1.win b/Documentation/rel/2.1.win
new file mode 100644 (file)
index 0000000..4676385
--- /dev/null
@@ -0,0 +1,125 @@
+/******************************************************************************/
+/*  2.1)        Using FCE Ultra:                                              */
+/******************************************************************************/
+
+        After starting FCE Ultra, you'll probably want to load a game.  Do
+        this by going to File/Open.
+
+        Menu descriptions:
+
+        File
+         Open           - Loads a new game.                
+         Save State     - Saves the current NES state.
+         Load State     - Loads a saved NES state.
+         Log Sound As   - Logs sound to a file.  It will not work if sound
+                          is disabled.                               
+         Exit           - Exit the emulator.
+
+        NES
+         Reset          - Resets the virtual NES.
+         Power          - Power cycles the virtual NES.
+         Cheats         - Activates the cheat interface.  See "cheat.txt" for
+                          more details.
+
+        Config
+         Hide Menu      - Hides the menu.
+         Game Genie     - If checked, enable Game Genie emulation.
+                          Game Genie emulation will only begin or end when a new
+                          game is loaded.
+         PAL Emulation  - If checked, enable PAL emulation.  Changes take effect
+                          immediately, though I recommend resetting the virtual
+                          NES afterward PAL emulation is enabled or disabled.  
+         Directories    - Configure the directories that FCE Ultra will store
+                          its files in.
+         Input          - Enter input configuration dialog.
+                          Note that not all virtual devices are configurable.
+         Miscellaneous  - Enter miscellaneous configuration dialog.
+         Network Play   - Enter network play configuration dialog.
+         Palette        - Enter palette configuration dialog.
+         Sound          - Enter sound configuration dialog.
+          Sound enabled:
+                Sound emulation and output are enabled when this is checked.
+          Force 8-bit sound:
+                Forces 8-bit sound output.  Use only when absolutely
+                necessary(very rare).                        
+          Sample rate:
+                Specifies how many sound samples will be played back per
+                second.  Unless you know what you are doing, you probably
+                don't need to change this setting.
+          Use secondary sound buffer:
+                Uses a secondary sound buffer.  This option may be required
+                for sound to work with certain sound cards/devices.
+                Selecting "with global focus" will cause sound to be played
+                while FCE Ultra has lost window focus, but you will probably
+                also want to select "Active While Focus Lost" in the Config
+                menu as well, otherwise you will just get repeating sound
+                when FCE Ultra loses focus.
+          Length of sound buffer:
+                Specifies what length of sound(in milliseconds) should be
+                buffered by FCE Ultra.  DirectSound and the Windows kernel
+                may or may not cause a little more latency than what you
+                might expect(usually not any more than a few milliseconds),
+                depending on your setup.
+                Use larger values if you have sound problems such as popping
+                or gaps, though.  Larger values will increase the latency of
+                the sound, however.  Finally, larger values are ideal for
+                background music listening.
+          Volume:
+                Specifies the volume of FCE Ultra's sound output.  Setting
+                the volume too high MIGHT cause noticeable clipping on some
+                sounds(loud drums, for example), but don't let that possibility
+                stop you from experimenting.
+
+         Video          - Enter video configuration dialog.
+
+        Default Key Mapping:
+
+         For emulated Family BASIC Keyboard:
+          Enable/Disable Keyboard Input         Scroll Lock
+                (enabling emulated keyboard input will disable
+                 commands keys)
+          All emulated keys are mapped to the closest open key on the PC
+          keyboard, with a few exceptions.  The emulated "@" key is
+          mapped to the "`"(grave) key, and the emulated "kana" key
+          is mapped to the "Insert" key(in the 3x2 key block above the
+          cursor keys).
+
+         For emulated game pads:
+          Left Control             B
+          Left Alt                 A
+          Enter/Return             Start
+          Tab                      Select
+          Cursor Down              Down
+          Cursor Up                Up
+          Cursor Left              Left
+          Cursor Right             Right
+        
+         For emulated power pads(keys correspond to button locations on
+         side "B"):
+          O P [ ]
+          K L ; '
+          M , . /
+
+         For FDS games:
+          I                        Insert disk.
+          E                        Eject disk.
+          S                        Select disk/disk side.
+
+         For VS Unisystem games:
+          C                        Insert coin.
+          V                        Show/Hide dip switches.
+           1-8                      Toggle dip switches(when dip switches
+                                    are shown).
+
+         0-9                      Select save state.
+      
+         F5/F7                    Save/Load state.
+         F9                       Save screen snapshot.
+
+         F3                       Hide/Show menu.
+         F4                       Toggle between windowed/full screen modes.
+         F10                      Reset.
+         F11                      Power off/on.
+         F12                      Exit.
+
+
diff --git a/Documentation/rel/3.0.dos b/Documentation/rel/3.0.dos
new file mode 100644 (file)
index 0000000..73aa6ad
--- /dev/null
@@ -0,0 +1,19 @@
+/******************************************************************************/
+/*  3.0)        Platform Specific Notes                                       */
+/******************************************************************************/
+
+        FCE Ultra's base directory is the directory in which the executable
+        is located.
+
+        Sound Blaster sound output requires that the 'BLASTER' environment
+        variable is set.  To set it(permanently), add the following line
+        to your autoexec.bat file:
+
+        set BLASTER=A240 I5 D1 H7
+
+        Where 240(hexadecimal) is the Sound Blaster's base I/O address, 5
+        is the IRQ number, 1 is the 8-bit DMA channel, and 7 is the 16-bit
+       DMA channel(if applicable).  
+                       *DO NOT GUESS THE SETTINGS*  
+       Invalid settings can result in very bad things happening.
+
diff --git a/Documentation/rel/3.0.linux b/Documentation/rel/3.0.linux
new file mode 100644 (file)
index 0000000..faa5407
--- /dev/null
@@ -0,0 +1,37 @@
+/******************************************************************************/
+/*  3.0)        Platform Specific Notes                                       */
+/******************************************************************************/
+
+        1.  FCE Ultra uses SVGAlib, so you'll obviously need to have it
+        installed.
+
+        2.  Be careful when using the non-VGA video modes(such as 640x480).
+        SVGAlib doesn't always handle virtual terminal switching well when
+        one of these modes is being used.  Also, since FCE Ultra enables a
+        a linear frame buffer for these modes, heed this warning from
+        the SVGAlib documentation:
+
+               Furthermore, some cards (Cirrus) just enable  this  buffer
+               at  a  fixed hardware address.  For Cirrus it is mapped at
+               14MB so you should never used it if  you  have  more  than
+               14MB  of  memory (But how does an application know?).  The
+               Mach32 support for this is smarter. It makes this  feature
+               only available when it is safe to be used.
+
+        3.  FCE Ultra must be run as root in order to get access to the
+        VGA hardware.  SVGAlib will drop root privileges if you are running
+        the program as a normal user and the suid root bit is set and the
+        executable is owned by root. Example:
+                chown root fceu ; chmod 4755 fceu
+        Make sure you have the latest stable release of SVGAlib, though.
+
+        4.  FCE Ultra will save all data(state saves/screen snapshots) in
+        ~/.fceultra, so make sure your "HOME" environment variable is set
+        correctly.
+
+        If you believe FCE Ultra is too slow, you can try the following:
+         * Kill some of the other processes.
+         * Disable sound emulation.
+        * Raise the priority of FCE Ultra with the 'nice' command. 
+          Ex:  nice -n -20 ./fceu
+
diff --git a/Documentation/rel/3.0.win b/Documentation/rel/3.0.win
new file mode 100644 (file)
index 0000000..1fb9dd2
--- /dev/null
@@ -0,0 +1,11 @@
+/******************************************************************************/
+/*  3.0)       Platform Specific Notes                                       */
+/******************************************************************************/
+
+        Your desktop color depth must be 16bpp, 24bpp, or 32bpp for FCE Ultra
+        to run properly in windowed mode.
+
+       FCE Ultra's base directory is the directory in which the executable
+       is located.
+
+
diff --git a/Documentation/rel/3.1 b/Documentation/rel/3.1
new file mode 100644 (file)
index 0000000..68b3afc
--- /dev/null
@@ -0,0 +1,20 @@
+/******************************************************************************/
+/*  3.1)        Network Play Notes                                            */
+/******************************************************************************/
+
+        In TCP/IP network play, the server will be player one, and the
+        client will be player 2.
+
+        Zapper emulation and power pad emulation currently do not work with
+        network play.
+
+        Having Game Genie or PAL emulation enabled on only one side
+        will cause problems.
+
+        Both players MUST use the same ROM/disk image and SRAM
+        file(if applicable).
+
+       When using FDS or VS Unisystem games with network play, only player
+       1 will be able to insert disk, eject disk, insert coins, toggle dip
+       switches, etc.
+
diff --git a/Documentation/rel/3.2 b/Documentation/rel/3.2
new file mode 100644 (file)
index 0000000..725374f
--- /dev/null
@@ -0,0 +1,28 @@
+/******************************************************************************/
+/*  3.2)       VS Unisystem Notes                                            */
+/******************************************************************************/
+
+        FCE Ultra currently only supports VS Unisystem ROM images in the
+        iNES format. 
+
+        ROM Images:
+
+         * VS Unisystem games that are about 49,000 bytes in size most likely
+           use mapper 99.
+         * Other VS Unisystem games will use other mappers.  Here is a short
+           list of games and the mappers they use:
+
+               CastleVania - 2
+               Dr. Mario   - 1
+               Goonies     - 151
+               Gradius     - 151
+              Ice Climber - 99
+               Platoon     - 68
+
+        Palette(s):
+
+         * The colors in many VS Unisystem games may be incorrect.  This
+           is due to each game having its own PPU, and thus using a
+           different palette than games that use a different PPU.
+
+
diff --git a/Documentation/rel/3.3 b/Documentation/rel/3.3
new file mode 100644 (file)
index 0000000..5cf33f1
--- /dev/null
@@ -0,0 +1,18 @@
+/******************************************************************************/
+/*  3.3)        Famicom Disk System Notes                                     */
+/******************************************************************************/
+
+       You will need the FDS BIOS ROM image in the base FCE Ultra directory.
+       It must be named "disksys.rom".  I will not give this file to you, so
+       don't ask.
+
+       Two types of FDS disk images are supported:  disk images with the 
+       FWNES-style header, and disk images with no header.
+
+       You should make backups of all of your FDS games you use with FCE 
+       Ultra.  This is because FCE Ultra will write the disk image back to 
+       the storage medium, and the disk image in RAM might have been corrupted
+        because of inaccurate emulation(this case is not likely to occur, but 
+       it could occur).
+
+
diff --git a/Documentation/rel/3.4 b/Documentation/rel/3.4
new file mode 100644 (file)
index 0000000..4d014dd
--- /dev/null
@@ -0,0 +1,23 @@
+/******************************************************************************/
+/*  3.4)        Light Gun Notes                                               */
+/******************************************************************************/
+
+       Currently, the NES Zapper and the light gun used with the VS
+       Unisystem(I will call both the same name, Zapper) are supported.
+       Most(all?) NES games expect the Zapper to be plugged into port 2.
+       and most(all?) VS Unisystem games expect the Zapper to be plugged 
+       into port(?) 1.
+
+       The LEFT mouse button is the emulated trigger button for the
+       Zapper.  The RIGHT mouse button is also emulated as the trigger,
+       but as long as you have the RIGHT mouse button held down, no color
+       detection will take place, which is effectively like pulling the
+       trigger while the Zapper is pointed away from the television screen.
+       Note that you must hold the RIGHT button down for a short
+       time(greater than just a fast click, shorter than a second).
+       
+       Zapper emulation currently does NOT work with network play, so
+       don't even try it. I may add support in the future if enough
+       people want it or if I want it.
+
+
diff --git a/Documentation/rel/3.5 b/Documentation/rel/3.5
new file mode 100644 (file)
index 0000000..474c4c9
--- /dev/null
@@ -0,0 +1,35 @@
+/******************************************************************************/
+/*  3.5)        Palette Notes                                                 */
+/******************************************************************************/
+
+       Palettes files are expected to contain 64 8-bit RGB triplets(each in
+       that order; red comes first in the triplet in the file, then green, 
+       then blue).  Each 8-bit value represents brightness for that particular
+       color.  0 is minimum, 255 is maximum.
+
+       Palettes can be set on a per-game basis.  To do this, put a palette
+       file in the "gameinfo" directory with the same base filename
+       as the game you wish to associate with and the extension "pal".  
+       Examples:
+
+               File name:              Palette file name:
+                BigBad.nes              BigBad.pal
+                BigBad.zip              BigBad.pal
+                BigBad.Better.nes       BigBad.Better.pal
+
+
+        With so many ways to choose a palette, figuring out which one will
+        be active may be difficult.  Here's a list of what palettes will
+        be used, in order from highest priority to least priority(if a condition
+        doesn't exist for a higher priority palette, the emulator will
+        continue down its list of palettes).
+
+        NSF Palette(for NSFs only)
+         Palette loaded from the "gameinfo" directory.
+          NTSC Color Emulation(only for NTSC NES games).
+           VS Unisystem palette(if the game is a VS Unisystem game and a palette
+           is available).
+            Custom global palette.
+             Default NES palette.
+
+
diff --git a/Documentation/rel/3.6 b/Documentation/rel/3.6
new file mode 100644 (file)
index 0000000..0c0ff57
--- /dev/null
@@ -0,0 +1,19 @@
+/******************************************************************************/
+/*  3.6)        Compressed File Notes                                         */
+/******************************************************************************/
+
+        FCE Ultra can load data from both PKZIP-format files and
+        gzip-format files.  Only one type of (de)compression algorithm is
+        supported:  "deflate"; this seems to be the most popular compression
+        algorithm, though.
+
+        A compressed FDS disk image will only be saved back to disk if it
+        uses the gzip format.
+
+        All files in a PKZIP format file will be scanned for the
+        followings extensions:  .nes, .fds, .nsf, .unf, .nez, .unif
+        The first compressed file to have one of these extensions will be
+        loaded. If no compressed file has one of these extensions, the
+        first compressed file will be loaded.
+
+
diff --git a/Documentation/rel/3.7 b/Documentation/rel/3.7
new file mode 100644 (file)
index 0000000..483a030
--- /dev/null
@@ -0,0 +1,15 @@
+/******************************************************************************/
+/*  3.7)        Game Genie Notes                                             */
+/******************************************************************************/
+
+       The Game Genie ROM image is loaded from the file "gg.rom" in the
+       base directory the first time Game Genie emulation is enabled and
+       a ROM image is loaded since the time FCE Ultra has run.
+
+       The ROM image may either be the 24592 byte iNES-format image, or
+       the 4352 raw ROM image.
+
+       Remember that enabling/disabling Game Genie emulation will not take
+       effect until a new game is loaded(this statement shouldn't concern
+       any of the "run once" command-line driven ports).
+
diff --git a/Documentation/rel/4.0 b/Documentation/rel/4.0
new file mode 100644 (file)
index 0000000..d22245c
--- /dev/null
@@ -0,0 +1,12 @@
+/******************************************************************************/
+/*  4.0)        Contacting the author                                         */
+/******************************************************************************/
+
+        I can be reached via email at xodnizel@users.sourceforge.net.
+        Bero can be reached via email at 9bero9@geocities.co.jp
+         (Note that Bero can not and will not answer any questions
+          regarding the operation of FCE Ultra, so please don't ask him.
+          If you understand this, remove the 9's from the email address
+         provided to get his real email address.)
+
+
diff --git a/Documentation/rel/4.1 b/Documentation/rel/4.1
new file mode 100644 (file)
index 0000000..e177ee2
--- /dev/null
@@ -0,0 +1,36 @@
+/******************************************************************************/
+/*  4.1)        Credits                                                       */
+/******************************************************************************/
+
+\Firebug\       -       High-level mapper information.
+Bero            -       Original FCE source code.
+Brad Taylor    -       NES sound channel guide.
+Chris Hickman  -       Archaic Ruins.
+Donald Moore    -       DC PasoFami NES packs.
+Fredrik Olson  -       NES four-player adapter information.
+Gilles Vollant -       PKZIP file loading functions.
+goroh           -       Various documents.
+Jeff Tamer      -       Insaniacal fun.
+Jeremy Chadwick -       General NES information.
+Justin Smith    -       Giving me obscure ROM images in the "dark ages of
+                        NES emulation".
+Kevin Horton    -       Low level NES information and sound information.
+Ki             -       Various technical information.
+Mark Knibbs     -       Various NES information.
+Marat Fayzullin -       General NES information.
+Matthew Conte   -       Sound information.
+N. Andou       -       Awesome NES/SNES emulators, at the time...
+nori           -       FDS sound information.
+Quietust        -       VRC7 sound translation code by The Quietust
+                        (quietust@ircN.org).
+                       Ideas and corrections.
+R. Hoelscher   -       Famicom four-player adapter information.
+Rob Mocca       -       DC PasoFami NES packs, testing.
+Sean Whalen    -       Node99.
+Tatsuyuki Satoh -       OPL2 emulator
+TheRedEye      -       ROM images, testing.
+
+
+Info-ZIP       -       ZLIB
+
+...and everyone else who has helped me.
diff --git a/Documentation/rel/d b/Documentation/rel/d
new file mode 100644 (file)
index 0000000..028eaef
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+./da.sh linux
+./da.sh win
+./da.sh dos
diff --git a/Documentation/rel/da.sh b/Documentation/rel/da.sh
new file mode 100644 (file)
index 0000000..a0e5e3a
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+cat top.$1 new new.$1 toc 1.0 1.1.$1 2.0.$1 2.1.$1 3.0.$1 3.1 3.2 3.3 3.4 3.5 3.6 3.7 4.0 4.1 > readme-$1.txt
diff --git a/Documentation/rel/new b/Documentation/rel/new
new file mode 100644 (file)
index 0000000..c18f25f
--- /dev/null
@@ -0,0 +1,56 @@
+       *  Screen snapshots can now be taken while playing an NSF.
+       *  Saving screen snapshots will no longer corrupt the frame buffer.
+       *  Added many more games to the list of games that usually are found
+          with bad iNES headers.
+       *  Fixed more network play bugs.  It should now work correctly(how
+          many times have I said or implied that...).
+       *  The NSF player will now disable the FDS sound channel on song
+          initialization(fixes a problem with the Zelda no Densetsu
+          rip).
+       *  Reads from $4090 and $4092 while emulating the FDS will now return
+          the current envelope settings.  Affects "Ai Senshi Nicole" 
+          and "Bio Miracle Bokutte Upa", at least.
+       *  Merged a lot of pirate MMC3 multicart emulation code with the main
+          MMC3 emulation code.
+       *  Added support for the MMC5's split-screen mode.  This fixes the
+          introduction in "Uchuu Keibitai SDF".
+       *  Writes to $8000-$FFFF with D7 set during MMC1 emulation will
+          cause the MMC1 mode register to be OR'd with $C.  This fixes
+          "Robocop 3".
+       *  Replaced an MMC1 hack that I used to get "Bill and Ted's Excellent
+          Video Game Adventure" to work with something more accurate.
+       *  Fixed the MMC5 read handler to return the data last on the data
+          bus instead of $FF when a read occured to an unmapped address.
+          This fixes the lockup problem in "Bandit Kings of Ancient China"
+          and possibly other games.
+       *  Added support for the game "Ishin no Arashi" in the iNES format
+          (I added an entry with its CRC32 value and the number of 8KB
+           WRAM banks it needs into the MMC5 WRAM size table).
+       *  Added support for MMC1 games in the iNES format with 16KB of RAM
+           via CRC32 comparisons(currently only Genghis Khan(USA), Romance
+          of the 3 Kingdoms(USA), and Nobunaga's Ambition(USA and Japan) are 
+           recognized).
+       *  iNES mapper 1 now supports pageable CHR RAM if CHR ROM is not
+          present.  Fixes "Family School".
+       *  Added support for iNES mappers 51 and 52.  Thanks to Kevin Horton
+          for the information.
+       *  Modified MMC3(iNES mapper 4/118/119) IRQ counter emulation.  Fixes
+          problems in "MegaMan 3", "Gun Nac", and the Japanese version of
+          "Klax", but it *might* cause problems with other games.
+       *  Fixed an iNES mapper 32 emulation bug.  "Ai Sensei no Oshiete"
+          works now.
+       *  Fixed iNES mapper 33/48 IRQ emulation.
+       *  Fixed iNES mapper 16 IRQ emulation.
+       *  Added support for "Famicom Jump 2" as iNES mapper 153.
+           If a good(as far as I can tell) dump is loaded, FCE Ultra will
+           automatically fix the mapper number.
+       *  The VS Unisystem bit in iNES headers is no longer recognized.
+          Too many games have this bit set when it shouldn't be set.
+          Now VS Unisystem games are recognized by CRC32 value.
+       *  Reads from $4015 no longer reset DMC IRQ.  This fixes the
+          title screen of "Romancia".
+       *  PPU NMI now occurs a few cycles later.  Fixes the "BattleToads"
+          lockup problem.
+       *  BRK emulation now sets the I flag.
+       *  Changed a few zero-page address mode functions to read directly
+          from emulated RAM.
diff --git a/Documentation/rel/new.dos b/Documentation/rel/new.dos
new file mode 100644 (file)
index 0000000..9a69443
--- /dev/null
@@ -0,0 +1,5 @@
+       *  Added a new video mode(256x224 at a refresh rate of 103 Hz).
+       *  Increased the refresh rate of video mode 2 to 65 Hz.
+       *  Increased the refresh rate of video mode 3 to 120 Hz.
+       *  Added speed throttling used when sound is disabled, and a
+          command-line switch to control it.
diff --git a/Documentation/rel/new.linux b/Documentation/rel/new.linux
new file mode 100644 (file)
index 0000000..abaee9f
--- /dev/null
@@ -0,0 +1,6 @@
+        *  Added a new video mode(256x224 at a refresh rate of 103 Hz).
+        *  Increased the refresh rate of video mode 2 to 65 Hz.
+        *  Increased the refresh rate of video mode 3 to 120 Hz.
+        *  Added speed throttling used when sound is disabled, and a
+           command-line switch to control it.
+
diff --git a/Documentation/rel/new.win b/Documentation/rel/new.win
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Documentation/rel/readme-dos.txt b/Documentation/rel/readme-dos.txt
new file mode 100644 (file)
index 0000000..150c566
--- /dev/null
@@ -0,0 +1,646 @@
+                                   FCE Ultra
+                                     0.81
+
+                         http://fceultra.sourceforge.net/
+
+
+What is new:
+
+       *  Screen snapshots can now be taken while playing an NSF.
+       *  Saving screen snapshots will no longer corrupt the frame buffer.
+       *  Added many more games to the list of games that usually are found
+          with bad iNES headers.
+       *  The NSF player will now disable the FDS sound channel on song
+          initialization(fixes a problem with the Zelda no Densetsu
+          rip).
+       *  Reads from $4090 and $4092 while emulating the FDS will now return
+          the current envelope settings.  Affects "Ai Senshi Nicole" 
+          and "Bio Miracle Bokutte Upa", at least.
+       *  Merged a lot of pirate MMC3 multicart emulation code with the main
+          MMC3 emulation code.
+       *  Added support for the MMC5's split-screen mode.  This fixes the
+          introduction in "Uchuu Keibitai SDF".
+       *  Writes to $8000-$FFFF with D7 set during MMC1 emulation will
+          cause the MMC1 mode register to be OR'd with $C.  This fixes
+          "Robocop 3".
+       *  Replaced an MMC1 hack that I used to get "Bill and Ted's Excellent
+          Video Game Adventure" to work with something more accurate.
+       *  Fixed the MMC5 read handler to return the data last on the data
+          bus instead of $FF when a read occured to an unmapped address.
+          This fixes the lockup problem in "Bandit Kings of Ancient China"
+          and possibly other games.
+       *  Added support for the game "Ishin no Arashi" in the iNES format
+          (I added an entry with its CRC32 value and the number of 8KB
+           WRAM banks it needs into the MMC5 WRAM size table).
+       *  Added support for MMC1 games in the iNES format with 16KB of RAM
+           via CRC32 comparisons(currently only Genghis Khan(USA), Romance
+          of the 3 Kingdoms(USA), and Nobunaga's Ambition(USA and Japan) are 
+           recognized).
+       *  iNES mapper 1 now supports pageable CHR RAM if CHR ROM is not
+          present.  Fixes "Family School".
+       *  Added support for iNES mappers 51 and 52.  Thanks to Kevin Horton
+          for the information.
+       *  Modified MMC3(iNES mapper 4/118/119) IRQ counter emulation.  Fixes
+          problems in "MegaMan 3", "Gun Nac", and the Japanese version of
+          "Klax", but it *might* cause problems with other games.
+       *  Fixed an iNES mapper 32 emulation bug.  "Ai Sensei no Oshiete"
+          works now.
+       *  Fixed iNES mapper 33/48 IRQ emulation.
+       *  Fixed iNES mapper 16 IRQ emulation.
+       *  Added support for "Famicom Jump 2" as iNES mapper 153.
+           If a good(as far as I can tell) dump is loaded, FCE Ultra will
+           automatically fix the mapper number.
+       *  The VS Unisystem bit in iNES headers is no longer recognized.
+          Too many games have this bit set when it shouldn't be set.
+          Now VS Unisystem games are recognized by CRC32 value.
+       *  Reads from $4015 no longer reset DMC IRQ.  This fixes the
+          title screen of "Romancia".
+       *  PPU NMI now occurs a few cycles later.  Fixes the "BattleToads"
+          lockup problem.
+       *  BRK emulation now sets the I flag.
+       *  Changed a few zero-page address mode functions to read directly
+          from emulated RAM.
+       *  Added a new video mode(256x224 at a refresh rate of 103 Hz).
+       *  Increased the refresh rate of video mode 2 to 65 Hz.
+       *  Increased the refresh rate of video mode 3 to 120 Hz.
+       *  Added speed throttling used when sound is disabled, and a
+          command-line switch to control it.
+
+
+Contents:
+
+  1.  Basic information
+        1.0 What FCE Ultra is.
+        1.1 System requirements.
+  2.  How to use
+        2.0 Starting FCE Ultra
+        2.1 Using FCE Ultra
+  3.  Notes
+        3.0 Platform Specific Notes
+        3.2 VS Unisystem Notes
+        3.3 Famicom Disk System Notes
+        3.4 Light Gun Notes
+        3.5 Palette Notes
+        3.6 Compressed File Notes
+       3.7 Game Genie Notes
+  4.  Extra
+        4.0 Contacting the author
+        4.1 Credits
+
+/******************************************************************************/
+/*  1.0)       What FCE Ultra is:                                            */
+/******************************************************************************/
+
+        FCE Ultra is an NTSC and PAL Famicom/NES emulator for various 
+        platforms. It is based upon Bero's original FCE source code.  Current
+       features include good PPU, CPU, pAPU, expansion chip, and joystick
+       emulation.  Also a feature unique to this emulator(at the current
+        time) is authentic Game Genie emulation.  Save states and snapshot
+       features also have been implemented.  The VS Unisystem is emulated
+        as well.  FCE Ultra supports iNES format ROM images, UNIF format ROM
+       images, headerless and FWNES style FDS disk images, and NSF files.
+
+        FCE Ultra currently supports the following iNES mappers(many partially):
+
+Number:         Description:                    Game Examples:
+--------------------------------------------------------------------------------
+  0             No Mapper                       Donkey Kong, Mario Bros
+  1             Nintendo MMC1                   MegaMan 2, Final Fantasy
+  2             Simple 16KB PRG Switch          MegaMan 1, Archon, 1944
+  3             Simple 8KB CHR Switch           Spy Hunter, Gradius
+  4             Nintendo MMC3                   Recca, TMNT 2, Final Fantasy 3
+  5             Nintendo MMC5                   Castlevania 3, Just Breed, Uchuu Keibitai SDF
+  6             FFE F4 Series(hacked)           Saint Seiya, Ganbare Goemon
+  7             AOROM                           Battle Toads, Lion King
+  8             FFE F3 Series(hacked)           Doraemon Kaitakuhen
+  9             Nintendo MMC2                   Punchout!
+ 10             Nintendo MMC4                   Fire Emblem, Fire Emblem Gaiden
+ 11             Color Dreams                    Crystal Mines, Bible Adventures
+ 13             CPROM                           Videomation
+ 15             Multi-cart(pirate)              100-in-1: Contra Function 16
+ 16             Bandai                          Dragon Ball Z, Gundam Knight
+ 17             FFE F8 Series(hacked)           Parodius, Last Armageddon
+ 18             Jaleco SS806                    Pizza Pop, Plazma Ball
+ 19             Namco 106                       Splatter House, Mappy Kids                
+ 21             Konami VRC4 2A                  WaiWai World 2, Ganbare Goemon Gaiden 2
+ 22             Konami VRC4 1B                  Twinbee 3
+ 23             Konami VRC2B                    WaiWai World, Getsufuu Maden
+ 24             Konami VRC6                     Akumajo Densetsu(Dracula 3)
+ 25             Konami VRC4                     Gradius 2, Bio Miracle: Boku tte Upa
+ 26             Konami VRC6 A0-A1 Inverse       Esper Dream 2, Madara
+ 32             Irem G-101                      Image Fight 2, Perman
+ 33             Taito TC0190/TC0350             Don Doko Don 1&2
+ 34             NINA-001 and BNROM             Impossible Mission 2, Deadly Towers, Bug Honey
+ 40             (pirate)                        Super Mario Bros. 2
+ 41             Caltron 6-in-1                  Caltron 6-in-1
+ 42            (pirate)                        "Mario Baby"
+ 43            Multi-cart(pirate)              Golden Game 150 in 1
+ 44            Multi-cart(pirate)              Super HiK 7 in 1        
+ 45            Multi-cart(pirate)              Super 1000000 in 1
+ 46            Game Station                    Rumble Station
+ 47            NES-QJ                          Nintendo World Cup/Super Spike V.B.
+ 48            Taito TC190V                    Flintstones
+ 49             Multi-cart(pirate)              Super HiK 4 in 1
+ 51            Multi-cart(pirate)              11 in 1 Ball Games
+ 52            Multi-cart(pirate)              Mario Party 7 in 1
+ 64             Tengen RAMBO-1                  Shinobi, Klax
+ 65             Irem H-3001                     Daiku no Gensan 2
+ 66             GNROM                           SMB + Duck Hunt
+ 67             Sunsoft Mapper "3"              Fantasy Zone 2
+ 68             Sunsoft Mapper "4"              After Burner 2, Nantetta Baseball 
+ 69             Sunsoft FME-7                   Batman: ROTJ, Gimmick!
+ 70            ??                              Kamen Rider Club
+ 71             Camerica                        Fire Hawk, Linus Spacehead
+ 72            Jaleco ??                       Pinball Quest
+ 73             Konami VRC3                     Salamander
+ 75             Jaleco SS8805/Konami VRC1       Tetsuwan Atom, King Kong 2
+ 76             Namco 109                       Megami Tenshi 1
+ 77             Irem ??                         Napoleon Senki
+ 78             Irem 74HC161/32                 Holy Diver
+ 79             NINA-06                                F15 City War, Krazy Kreatures
+ 80             Taito X-005                     Minelvation Saga
+ 82            Taito ??                        Kyuukyoku Harikiri Stadium - Heisei Gannen Ban                  
+ 83            Multi-cart(pirate)              Dragon Ball Party
+ 85             Konami VRC7                     Lagrange Point
+ 86            Jaleco ??                       More Pro Baseball
+ 87            ??                              Argus
+ 89            Sunsoft ??                      Mito Koumon
+ 90            Pirate                          Super Mario World, Mortal Kombat
+ 92             Jaleco ??                       MOERO Pro Soccer, MOERO Pro Yakyuu '88
+ 93            ??                              Fantasy Zone
+ 94            ??                              Senjou no Ookami
+ 95            Namco ??                        Dragon Buster
+ 97            ??                              Kaiketsu Yanchamaru
+ 99             VS System 8KB CHR Switch        VS SMB, VS Excite Bike
+105             NES-EVENT                       Nintendo World Championships
+112             Asder                          Sango Fighter, Hwang Di
+113            MB-91                           Deathbots
+118            MMC3-TLSROM/TKSROM Board        Ys 3, Goal! 2, NES Play Action Football
+119             MMC3-TQROM Board                High Speed, Pin*Bot
+140            Jaleco ??                       Bio Senshi Dan
+151             Konami VS System Expansion      VS The Goonies, VS Gradius
+152            ??                              Arkanoid 2, Saint Seiya Ougon Densetsu
+153             Bandai ??                       Famicom Jump 2
+180             ??                              Crazy Climber
+182            ??                              Super Donkey Kong
+184            ??                              Wing of Madoola, The
+189             Micro Genius TXC ??             Thunder Warrior
+225             Multi-cart(pirate)              58-in-1/110-in-1/52 Games
+226             Multi-cart(pirate)              76-in-1
+227            Multi-cart(pirate)              1200-in-1
+228             Action 52                       Action 52, Cheetahmen 2
+229             Multi-cart(pirate)              31-in-1
+232            BIC-48                          Quattro Arcade, Quattro Sports
+234            Multi-cart ??                   Maxi-15
+240             ??                              Gen Ke Le Zhuan, Shen Huo Le Zhuan
+242            ??                              Wai Xing Zhan Shi
+246            ??                              Fong Shen Ban
+248            ??                              Bao Qing Tian
+250            ??                              Time Diver Avenger
+
+       FCE Ultra currently supports the following UNIF boards(minus the 
+        prefixes HVC-, NES-, BTL-, and BMC-, as they are currently ignored):
+        
+Group: Name:                   Game Examples:
+--------------------------------------------------------------------------------
+Bootleg:
+        MARIO1-MALEE2          Super Mario Bros. Malee 2
+        NovelDiamond9999999in1 Novel Diamond 999999 in 1
+       Super24in1SC03          Super 24 in 1
+        Supervision16in1       Supervision 16-in-1
+
+Unlicensed:
+        Sachen-8259A           Super Cartridge Version 1
+        Sachen-8259B           Silver Eagle
+        Sachen-74LS374N                Auto Upturn
+        SA-016-1M              Master Chu and the Drunkard Hu
+        SA-72007               Sidewinder
+        SA-72008               Jovial Race
+        SA-0036                        Mahjong 16
+        SA-0037                        Mahjong Trap
+       TC-U01-1.5M             Challenge of the Dragon
+
+MMC1:
+       SAROM                   Dragon Warrior
+       SBROM                   Dance Aerobics
+       SCROM                   Orb 3D
+       SEROM                   Boulderdash
+       SGROM                   Defender of the Crown
+       SKROM                   Dungeon Magic
+       SLROM                   Castlevania 2
+       SL1ROM                  Sky Shark
+       SNROM                   Shingen the Ruler
+       SOROM                   Nobunaga's Ambition
+
+MMC3:
+       TFROM                   Legacy of the Wizard
+       TGROM                   Megaman 4
+       TKROM                   Kirby's Adventure
+       TKSROM                  Ys 3
+       TLROM                   Super Spike V'Ball
+       TLSROM                  Goal! 2
+       TR1ROM                  Gauntlet
+       TQROM                   Pinbot
+       TSROM                   Super Mario Bros. 3
+       TVROM                   Rad Racer 2
+
+MMC5:
+       EKROM                   Gemfire
+       ELROM                   Castlevania 3
+       ETROM                   Nobunaga's Ambition 2
+       EWROM                   Romance of the Three Kingdoms 2
+
+MMC6:
+       HKROM                   Star Tropics
+
+Nintendo
+discrete
+logic:
+        CNROM                  Gotcha
+        CPROM                  Videomation
+        MHROM
+        NROM-128               Mario Bros.
+        NROM-256               Super Mario Bros.
+        RROM-128
+        UNROM                  Megaman
+
+
+/******************************************************************************/
+/*  1.1)        System requirements:                                          */
+/******************************************************************************/
+
+        Minimum system requirements:
+
+        Pentium 60 MHz
+        8 MB RAM
+        400 KB free disk space
+        Linux 2.0.36
+        VGA adapter
+
+        Recommended system specifications(at least):
+
+        Pentium 233 MHz
+        16 MB RAM
+        5 MB free disk space
+        Windows 9x/Me/2000/XP(long filename support)
+       VGA adapter
+        Sound Blaster Pro or newer sound card(or compatible)
+
+
+/******************************************************************************/
+/*  2.0) Starting FCE Ultra                                                   */
+/******************************************************************************/
+
+        Start FCE Ultra using the following format:
+
+        fceu <arguments> romimage.nes
+
+        <arguments> can be one or more of the following:
+
+        -vmode x        Select video mode(all are 8 bpp).
+                         1 = 256x240 @ 72 hz   <Default>
+                         2 = 256x256 @ 65 hz
+                         3 = 256x256(with scanlines) @ 120 hz
+                         6 = 256x224(with scanlines) @ 120 hz
+                         8 = 256x224 @ 103 hz
+       -vsync x        Wait for the screen's vertical retrace before updating 
+                       the screen.  This *may* cause sound distortion.
+                        0 = Disabled.  <Default>
+                        1 = Enabled.
+        -cpalette x     Load a custom global palette from file x.
+                        The filename x is saved in the configuration file,
+                        not the data from the file.  Note that you should
+                        probably use an absolute("C:\nes\test.pal") filename
+                        rather than a relative("test.pal") filename.  If x is 0,
+                       the default (built in) global palette will be used.
+        -ntsccol        Emulate an NTSC's TV's colors based on user-supplied
+                        hue and tint values.
+                         0 = Disabled.
+                         1 = Enabled.
+        -sound   x      Sound.         <Default=44100>
+                         0 = Disabled.
+                         Otherwise, x = playback rate in samples per second.
+        -soundvol x     Sound volume. x is an integral percentage value.
+                        The default value is, obviously, 100.
+                        Setting it higher will increase the likelihood that
+                        sound clipping will occur.  This shouldn't be noticeable
+                       if the volume is reasonable(200% or lower; perhaps even
+                        higher for many games).
+        -f8bit x        Force 8-bit sound.  Enabling this will decrease
+                        sound quality noticeably without increasing
+                        performance noticeably.  Only use when 16-bit sound
+                        is problematic.
+                         0 = Disabled. <Default>
+                         1 = Enabled.
+       -nothrottle x   Disables speed throttling used when sound is disabled
+                       if x is non-zero.  The default value of x is 0.
+        -joy x          Joystick mapped to virtual joystick x.
+                         0 = Disabled, reset configuration.
+        -inputx str     Select device mapped to virtual NES-style input port
+                        x(1-2).
+                        The default for both virtual input ports is "gamepad".
+                         str may be: none, gamepad, zapper, powerpada,
+                                     powerpadb, arkanoid
+        -fcexp str      Select Famicom expansion port device.  If you select
+                        a device other than "none", you should enable the
+                        "gamepad" on both NES-style virtual input ports.
+                        The default is "none".
+                         str may be: none, shadow, arkanoid, 4player, fkb
+        -nofs x         Disables Four-Score emulation if x is 1.  Default is 0.
+                        Note that Four-Score emulation will only be active
+                        if "gamepad" is mapped to one or both virtual input
+                        ports.
+       -gg             Enable Game Genie emulation.
+        -pal            Emulate a PAL NES.
+        -no8lim x       Disables the 8 sprites per scanline limitation.
+                         0 = Limitation enabled.       <Default>
+                         1 = Limitation disabled.
+        -subase x       Save extra game data files(such as battery-backed RAM)
+                        under the base directory if enabled.
+                         0 = Disabled. <Default>
+                         1 = Enabled.
+        -snapname x     Selects what type of file name screen snapshots will
+                        have.
+                         0 = Numeric(0.png)     <Default>
+                         1 = File base and numeric(mario-0.png)
+        -clipsides x    Clip leftmost and rightmost 8 columns of pixels of
+                        video output.
+                         0 = Disabled.  <Default>
+                         1 = Enabled.
+        -slstart x      Set the first drawn emulated scanline for NTSC emulation
+                        mode.  Valid values for x are 0 through 239.
+                        The default value is 8.
+        -slend x        Set the last drawn emulated scanline for NTSC emulation
+                        mode. Valid values for x are 0 through 239.
+                        The default value is 239.
+        -slstartp x     Set the first drawn emulated scanline for PAL emulation
+                       mode.  Valid values for x are 0 through 239.  
+                       The default value is 0.
+        -slendp x       Set the last drawn emulated scanline for PAL emulation
+                       mode. Valid values for x are 0 through 239.
+                       The default value is 239.
+
+/******************************************************************************/
+/*  2.1)        General Keyoard Key Mapping:                                  */
+/******************************************************************************/
+
+        Default Key Mapping:
+
+        For emulated Family BASIC Keyboard:
+         Enable/Disable Keyboard Input         Scroll Lock
+               (enabling emulated keyboard input will disable
+                commands keys)
+         All emulated keys are mapped to the closest open key on the PC
+         keyboard, with a few exceptions.  The emulated "@" key is
+         mapped to the "`"(grave) key, and the emulated "kana" key
+         is mapped to the "Insert" key(in the 3x2 key block above the
+         cursor keys).
+
+         For emulated game pads:
+          Left Control             B
+          Left Alt                 A
+          Enter/Return             Start
+          Tab                      Select
+          Cursor Down              Down
+          Cursor Up                Up
+          Cursor Left              Left
+          Cursor Right             Right
+
+         For emulated power pads(keys correspond to button locations on
+         side "B"):
+          O P [ ]
+          K L ; '
+          M , . /
+
+         For FDS games:
+          I                        Insert disk.
+          E                        Eject disk.
+          S                        Select disk/disk side.
+        
+        For VS Unisystem games:
+         C                        Insert coin.
+         V                        Show/Hide dip switches.
+           1-8                      Toggle dip switches(when dip switches 
+                                   are shown).
+
+         T                        Select tint to adjust.
+         H                        Select hue to adjust.
+         +/-                      Increase/decrease tint or hue.
+
+         0-9                      Select save state.
+         Caps Lock                Select virtual joystick.
+
+         F2                       Activate cheat interface.
+
+         F5/F7                    Save/Load state.
+         F9                       Save screen snapshot.
+         F10                      Reset.
+        F11                      Power off/on.
+         ESC/F12                  Exit.
+
+
+/******************************************************************************/
+/*  3.0)        Platform Specific Notes                                       */
+/******************************************************************************/
+
+        FCE Ultra's base directory is the directory in which the executable
+        is located.
+
+        Sound Blaster sound output requires that the 'BLASTER' environment
+        variable is set.  To set it(permanently), add the following line
+        to your autoexec.bat file:
+
+        set BLASTER=A240 I5 D1 H7
+
+        Where 240(hexadecimal) is the Sound Blaster's base I/O address, 5
+        is the IRQ number, 1 is the 8-bit DMA channel, and 7 is the 16-bit
+       DMA channel(if applicable).  
+                       *DO NOT GUESS THE SETTINGS*  
+       Invalid settings can result in very bad things happening.
+
+/******************************************************************************/
+/*  3.2)       VS Unisystem Notes                                            */
+/******************************************************************************/
+
+        FCE Ultra currently only supports VS Unisystem ROM images in the
+        iNES format. 
+
+        ROM Images:
+
+         * VS Unisystem games that are about 49,000 bytes in size most likely
+           use mapper 99.
+         * Other VS Unisystem games will use other mappers.  Here is a short
+           list of games and the mappers they use:
+
+               CastleVania - 2
+               Dr. Mario   - 1
+               Goonies     - 151
+               Gradius     - 151
+              Ice Climber - 99
+               Platoon     - 68
+
+        Palette(s):
+
+         * The colors in many VS Unisystem games may be incorrect.  This
+           is due to each game having its own PPU, and thus using a
+           different palette than games that use a different PPU.
+
+
+/******************************************************************************/
+/*  3.3)        Famicom Disk System Notes                                     */
+/******************************************************************************/
+
+       You will need the FDS BIOS ROM image in the base FCE Ultra directory.
+       It must be named "disksys.rom".  I will not give this file to you, so
+       don't ask.
+
+       Two types of FDS disk images are supported:  disk images with the 
+       FWNES-style header, and disk images with no header.
+
+       You should make backups of all of your FDS games you use with FCE 
+       Ultra.  This is because FCE Ultra will write the disk image back to 
+       the storage medium, and the disk image in RAM might have been corrupted
+        because of inaccurate emulation(this case is not likely to occur, but 
+       it could occur).
+
+
+/******************************************************************************/
+/*  3.4)        Light Gun Notes                                               */
+/******************************************************************************/
+
+       Currently, the NES Zapper and the light gun used with the VS
+       Unisystem(I will call both the same name, Zapper) are supported.
+       Most(all?) NES games expect the Zapper to be plugged into port 2.
+       and most(all?) VS Unisystem games expect the Zapper to be plugged 
+       into port(?) 1.
+
+       The LEFT mouse button is the emulated trigger button for the
+       Zapper.  The RIGHT mouse button is also emulated as the trigger,
+       but as long as you have the RIGHT mouse button held down, no color
+       detection will take place, which is effectively like pulling the
+       trigger while the Zapper is pointed away from the television screen.
+       Note that you must hold the RIGHT button down for a short
+       time(greater than just a fast click, shorter than a second).
+       
+       Zapper emulation currently does NOT work with network play, so
+       don't even try it. I may add support in the future if enough
+       people want it or if I want it.
+
+
+/******************************************************************************/
+/*  3.5)        Palette Notes                                                 */
+/******************************************************************************/
+
+       Palettes files are expected to contain 64 8-bit RGB triplets(each in
+       that order; red comes first in the triplet in the file, then green, 
+       then blue).  Each 8-bit value represents brightness for that particular
+       color.  0 is minimum, 255 is maximum.
+
+       Palettes can be set on a per-game basis.  To do this, put a palette
+       file in the "gameinfo" directory with the same base filename
+       as the game you wish to associate with and the extension "pal".  
+       Examples:
+
+               File name:              Palette file name:
+                BigBad.nes              BigBad.pal
+                BigBad.zip              BigBad.pal
+                BigBad.Better.nes       BigBad.Better.pal
+
+
+        With so many ways to choose a palette, figuring out which one will
+        be active may be difficult.  Here's a list of what palettes will
+        be used, in order from highest priority to least priority(if a condition
+        doesn't exist for a higher priority palette, the emulator will
+        continue down its list of palettes).
+
+        NSF Palette(for NSFs only)
+         Palette loaded from the "gameinfo" directory.
+          NTSC Color Emulation(only for NTSC NES games).
+           VS Unisystem palette(if the game is a VS Unisystem game and a palette
+           is available).
+            Custom global palette.
+             Default NES palette.
+
+
+/******************************************************************************/
+/*  3.6)        Compressed File Notes                                         */
+/******************************************************************************/
+
+        FCE Ultra can load data from both PKZIP-format files and
+        gzip-format files.  Only one type of (de)compression algorithm is
+        supported:  "deflate"; this seems to be the most popular compression
+        algorithm, though.
+
+        A compressed FDS disk image will only be saved back to disk if it
+        uses the gzip format.
+
+        All files in a PKZIP format file will be scanned for the
+        followings extensions:  .nes, .fds, .nsf, .unf, .nez, .unif
+        The first compressed file to have one of these extensions will be
+        loaded. If no compressed file has one of these extensions, the
+        first compressed file will be loaded.
+
+
+/******************************************************************************/
+/*  3.7)        Game Genie Notes                                             */
+/******************************************************************************/
+
+       The Game Genie ROM image is loaded from the file "gg.rom" in the
+       base directory the first time Game Genie emulation is enabled and
+       a ROM image is loaded since the time FCE Ultra has run.
+
+       The ROM image may either be the 24592 byte iNES-format image, or
+       the 4352 raw ROM image.
+
+       Remember that enabling/disabling Game Genie emulation will not take
+       effect until a new game is loaded(this statement shouldn't concern
+       any of the "run once" command-line driven ports).
+
+/******************************************************************************/
+/*  4.0)        Contacting the author                                         */
+/******************************************************************************/
+
+        I can be reached via email at xodnizel@users.sourceforge.net.
+        Bero can be reached via email at 9bero9@geocities.co.jp
+         (Note that Bero can not and will not answer any questions
+          regarding the operation of FCE Ultra, so please don't ask him.
+          If you understand this, remove the 9's from the email address
+         provided to get his real email address.)
+
+
+/******************************************************************************/
+/*  4.1)        Credits                                                       */
+/******************************************************************************/
+
+\Firebug\       -       High-level mapper information.
+Bero            -       Original FCE source code.
+Brad Taylor    -       NES sound channel guide.
+Chris Hickman  -       Archaic Ruins.
+Donald Moore    -       DC PasoFami NES packs.
+Fredrik Olson  -       NES four-player adapter information.
+Gilles Vollant -       PKZIP file loading functions.
+goroh           -       Various documents.
+Jeff Tamer      -       Insaniacal fun.
+Jeremy Chadwick -       General NES information.
+Justin Smith    -       Giving me obscure ROM images in the "dark ages of
+                        NES emulation".
+Kevin Horton    -       Low level NES information and sound information.
+Ki             -       Various technical information.
+Mark Knibbs     -       Various NES information.
+Marat Fayzullin -       General NES information.
+Matthew Conte   -       Sound information.
+N. Andou       -       Awesome NES/SNES emulators, at the time...
+nori           -       FDS sound information.
+Quietust        -       VRC7 sound translation code by The Quietust
+                        (quietust@ircN.org).
+                       Ideas and corrections.
+R. Hoelscher   -       Famicom four-player adapter information.
+Rob Mocca       -       DC PasoFami NES packs, testing.
+Sean Whalen    -       Node99.
+Tatsuyuki Satoh -       OPL2 emulator
+TheRedEye      -       ROM images, testing.
+
+
+Info-ZIP       -       ZLIB
+
+...and everyone else who has helped me.
diff --git a/Documentation/rel/readme-linux.txt b/Documentation/rel/readme-linux.txt
new file mode 100644 (file)
index 0000000..880e919
--- /dev/null
@@ -0,0 +1,707 @@
+                                   FCE Ultra
+                                     0.81
+
+                         http://fceultra.sourceforge.net/
+
+
+What is new:
+
+       *  Screen snapshots can now be taken while playing an NSF.
+       *  Saving screen snapshots will no longer corrupt the frame buffer.
+       *  Added many more games to the list of games that usually are found
+          with bad iNES headers.
+       *  Fixed more network play bugs.  It should now work correctly(how
+          many times have I said or implied that...).
+       *  The NSF player will now disable the FDS sound channel on song
+          initialization(fixes a problem with the Zelda no Densetsu
+          rip).
+       *  Reads from $4090 and $4092 while emulating the FDS will now return
+          the current envelope settings.  Affects "Ai Senshi Nicole" 
+          and "Bio Miracle Bokutte Upa", at least.
+       *  Merged a lot of pirate MMC3 multicart emulation code with the main
+          MMC3 emulation code.
+       *  Added support for the MMC5's split-screen mode.  This fixes the
+          introduction in "Uchuu Keibitai SDF".
+       *  Writes to $8000-$FFFF with D7 set during MMC1 emulation will
+          cause the MMC1 mode register to be OR'd with $C.  This fixes
+          "Robocop 3".
+       *  Replaced an MMC1 hack that I used to get "Bill and Ted's Excellent
+          Video Game Adventure" to work with something more accurate.
+       *  Fixed the MMC5 read handler to return the data last on the data
+          bus instead of $FF when a read occured to an unmapped address.
+          This fixes the lockup problem in "Bandit Kings of Ancient China"
+          and possibly other games.
+       *  Added support for the game "Ishin no Arashi" in the iNES format
+          (I added an entry with its CRC32 value and the number of 8KB
+           WRAM banks it needs into the MMC5 WRAM size table).
+       *  Added support for MMC1 games in the iNES format with 16KB of RAM
+           via CRC32 comparisons(currently only Genghis Khan(USA), Romance
+          of the 3 Kingdoms(USA), and Nobunaga's Ambition(USA and Japan) are 
+           recognized).
+       *  iNES mapper 1 now supports pageable CHR RAM if CHR ROM is not
+          present.  Fixes "Family School".
+       *  Added support for iNES mappers 51 and 52.  Thanks to Kevin Horton
+          for the information.
+       *  Modified MMC3(iNES mapper 4/118/119) IRQ counter emulation.  Fixes
+          problems in "MegaMan 3", "Gun Nac", and the Japanese version of
+          "Klax", but it *might* cause problems with other games.
+       *  Fixed an iNES mapper 32 emulation bug.  "Ai Sensei no Oshiete"
+          works now.
+       *  Fixed iNES mapper 33/48 IRQ emulation.
+       *  Fixed iNES mapper 16 IRQ emulation.
+       *  Added support for "Famicom Jump 2" as iNES mapper 153.
+           If a good(as far as I can tell) dump is loaded, FCE Ultra will
+           automatically fix the mapper number.
+       *  The VS Unisystem bit in iNES headers is no longer recognized.
+          Too many games have this bit set when it shouldn't be set.
+          Now VS Unisystem games are recognized by CRC32 value.
+       *  Reads from $4015 no longer reset DMC IRQ.  This fixes the
+          title screen of "Romancia".
+       *  PPU NMI now occurs a few cycles later.  Fixes the "BattleToads"
+          lockup problem.
+       *  BRK emulation now sets the I flag.
+       *  Changed a few zero-page address mode functions to read directly
+          from emulated RAM.
+        *  Added a new video mode(256x224 at a refresh rate of 103 Hz).
+        *  Increased the refresh rate of video mode 2 to 65 Hz.
+        *  Increased the refresh rate of video mode 3 to 120 Hz.
+        *  Added speed throttling used when sound is disabled, and a
+           command-line switch to control it.
+
+
+
+Contents:
+
+  1.  Basic information
+        1.0 What FCE Ultra is.
+        1.1 System requirements.
+  2.  How to use
+        2.0 Starting FCE Ultra
+        2.1 Using FCE Ultra
+  3.  Notes
+        3.0 Platform Specific Notes
+        3.1 Network Play Notes
+        3.2 VS Unisystem Notes
+        3.3 Famicom Disk System Notes
+        3.4 Light Gun Notes
+        3.5 Palette Notes
+        3.6 Compressed File Notes
+       3.7 Game Genie Notes
+  4.  Extra
+        4.0 Contacting the author
+        4.1 Credits
+
+/******************************************************************************/
+/*  1.0)       What FCE Ultra is:                                            */
+/******************************************************************************/
+
+        FCE Ultra is an NTSC and PAL Famicom/NES emulator for various 
+        platforms. It is based upon Bero's original FCE source code.  Current
+       features include good PPU, CPU, pAPU, expansion chip, and joystick
+       emulation.  Also a feature unique to this emulator(at the current
+        time) is authentic Game Genie emulation.  Save states and snapshot
+       features also have been implemented.  The VS Unisystem is emulated
+        as well.  FCE Ultra supports iNES format ROM images, UNIF format ROM
+       images, headerless and FWNES style FDS disk images, and NSF files.
+
+        FCE Ultra currently supports the following iNES mappers(many partially):
+
+Number:         Description:                    Game Examples:
+--------------------------------------------------------------------------------
+  0             No Mapper                       Donkey Kong, Mario Bros
+  1             Nintendo MMC1                   MegaMan 2, Final Fantasy
+  2             Simple 16KB PRG Switch          MegaMan 1, Archon, 1944
+  3             Simple 8KB CHR Switch           Spy Hunter, Gradius
+  4             Nintendo MMC3                   Recca, TMNT 2, Final Fantasy 3
+  5             Nintendo MMC5                   Castlevania 3, Just Breed, Uchuu Keibitai SDF
+  6             FFE F4 Series(hacked)           Saint Seiya, Ganbare Goemon
+  7             AOROM                           Battle Toads, Lion King
+  8             FFE F3 Series(hacked)           Doraemon Kaitakuhen
+  9             Nintendo MMC2                   Punchout!
+ 10             Nintendo MMC4                   Fire Emblem, Fire Emblem Gaiden
+ 11             Color Dreams                    Crystal Mines, Bible Adventures
+ 13             CPROM                           Videomation
+ 15             Multi-cart(pirate)              100-in-1: Contra Function 16
+ 16             Bandai                          Dragon Ball Z, Gundam Knight
+ 17             FFE F8 Series(hacked)           Parodius, Last Armageddon
+ 18             Jaleco SS806                    Pizza Pop, Plazma Ball
+ 19             Namco 106                       Splatter House, Mappy Kids                
+ 21             Konami VRC4 2A                  WaiWai World 2, Ganbare Goemon Gaiden 2
+ 22             Konami VRC4 1B                  Twinbee 3
+ 23             Konami VRC2B                    WaiWai World, Getsufuu Maden
+ 24             Konami VRC6                     Akumajo Densetsu(Dracula 3)
+ 25             Konami VRC4                     Gradius 2, Bio Miracle: Boku tte Upa
+ 26             Konami VRC6 A0-A1 Inverse       Esper Dream 2, Madara
+ 32             Irem G-101                      Image Fight 2, Perman
+ 33             Taito TC0190/TC0350             Don Doko Don 1&2
+ 34             NINA-001 and BNROM             Impossible Mission 2, Deadly Towers, Bug Honey
+ 40             (pirate)                        Super Mario Bros. 2
+ 41             Caltron 6-in-1                  Caltron 6-in-1
+ 42            (pirate)                        "Mario Baby"
+ 43            Multi-cart(pirate)              Golden Game 150 in 1
+ 44            Multi-cart(pirate)              Super HiK 7 in 1        
+ 45            Multi-cart(pirate)              Super 1000000 in 1
+ 46            Game Station                    Rumble Station
+ 47            NES-QJ                          Nintendo World Cup/Super Spike V.B.
+ 48            Taito TC190V                    Flintstones
+ 49             Multi-cart(pirate)              Super HiK 4 in 1
+ 51            Multi-cart(pirate)              11 in 1 Ball Games
+ 52            Multi-cart(pirate)              Mario Party 7 in 1
+ 64             Tengen RAMBO-1                  Shinobi, Klax
+ 65             Irem H-3001                     Daiku no Gensan 2
+ 66             GNROM                           SMB + Duck Hunt
+ 67             Sunsoft Mapper "3"              Fantasy Zone 2
+ 68             Sunsoft Mapper "4"              After Burner 2, Nantetta Baseball 
+ 69             Sunsoft FME-7                   Batman: ROTJ, Gimmick!
+ 70            ??                              Kamen Rider Club
+ 71             Camerica                        Fire Hawk, Linus Spacehead
+ 72            Jaleco ??                       Pinball Quest
+ 73             Konami VRC3                     Salamander
+ 75             Jaleco SS8805/Konami VRC1       Tetsuwan Atom, King Kong 2
+ 76             Namco 109                       Megami Tenshi 1
+ 77             Irem ??                         Napoleon Senki
+ 78             Irem 74HC161/32                 Holy Diver
+ 79             NINA-06                                F15 City War, Krazy Kreatures
+ 80             Taito X-005                     Minelvation Saga
+ 82            Taito ??                        Kyuukyoku Harikiri Stadium - Heisei Gannen Ban                  
+ 83            Multi-cart(pirate)              Dragon Ball Party
+ 85             Konami VRC7                     Lagrange Point
+ 86            Jaleco ??                       More Pro Baseball
+ 87            ??                              Argus
+ 89            Sunsoft ??                      Mito Koumon
+ 90            Pirate                          Super Mario World, Mortal Kombat
+ 92             Jaleco ??                       MOERO Pro Soccer, MOERO Pro Yakyuu '88
+ 93            ??                              Fantasy Zone
+ 94            ??                              Senjou no Ookami
+ 95            Namco ??                        Dragon Buster
+ 97            ??                              Kaiketsu Yanchamaru
+ 99             VS System 8KB CHR Switch        VS SMB, VS Excite Bike
+105             NES-EVENT                       Nintendo World Championships
+112             Asder                          Sango Fighter, Hwang Di
+113            MB-91                           Deathbots
+118            MMC3-TLSROM/TKSROM Board        Ys 3, Goal! 2, NES Play Action Football
+119             MMC3-TQROM Board                High Speed, Pin*Bot
+140            Jaleco ??                       Bio Senshi Dan
+151             Konami VS System Expansion      VS The Goonies, VS Gradius
+152            ??                              Arkanoid 2, Saint Seiya Ougon Densetsu
+153             Bandai ??                       Famicom Jump 2
+180             ??                              Crazy Climber
+182            ??                              Super Donkey Kong
+184            ??                              Wing of Madoola, The
+189             Micro Genius TXC ??             Thunder Warrior
+225             Multi-cart(pirate)              58-in-1/110-in-1/52 Games
+226             Multi-cart(pirate)              76-in-1
+227            Multi-cart(pirate)              1200-in-1
+228             Action 52                       Action 52, Cheetahmen 2
+229             Multi-cart(pirate)              31-in-1
+232            BIC-48                          Quattro Arcade, Quattro Sports
+234            Multi-cart ??                   Maxi-15
+240             ??                              Gen Ke Le Zhuan, Shen Huo Le Zhuan
+242            ??                              Wai Xing Zhan Shi
+246            ??                              Fong Shen Ban
+248            ??                              Bao Qing Tian
+250            ??                              Time Diver Avenger
+
+       FCE Ultra currently supports the following UNIF boards(minus the 
+        prefixes HVC-, NES-, BTL-, and BMC-, as they are currently ignored):
+        
+Group: Name:                   Game Examples:
+--------------------------------------------------------------------------------
+Bootleg:
+        MARIO1-MALEE2          Super Mario Bros. Malee 2
+        NovelDiamond9999999in1 Novel Diamond 999999 in 1
+       Super24in1SC03          Super 24 in 1
+        Supervision16in1       Supervision 16-in-1
+
+Unlicensed:
+        Sachen-8259A           Super Cartridge Version 1
+        Sachen-8259B           Silver Eagle
+        Sachen-74LS374N                Auto Upturn
+        SA-016-1M              Master Chu and the Drunkard Hu
+        SA-72007               Sidewinder
+        SA-72008               Jovial Race
+        SA-0036                        Mahjong 16
+        SA-0037                        Mahjong Trap
+       TC-U01-1.5M             Challenge of the Dragon
+
+MMC1:
+       SAROM                   Dragon Warrior
+       SBROM                   Dance Aerobics
+       SCROM                   Orb 3D
+       SEROM                   Boulderdash
+       SGROM                   Defender of the Crown
+       SKROM                   Dungeon Magic
+       SLROM                   Castlevania 2
+       SL1ROM                  Sky Shark
+       SNROM                   Shingen the Ruler
+       SOROM                   Nobunaga's Ambition
+
+MMC3:
+       TFROM                   Legacy of the Wizard
+       TGROM                   Megaman 4
+       TKROM                   Kirby's Adventure
+       TKSROM                  Ys 3
+       TLROM                   Super Spike V'Ball
+       TLSROM                  Goal! 2
+       TR1ROM                  Gauntlet
+       TQROM                   Pinbot
+       TSROM                   Super Mario Bros. 3
+       TVROM                   Rad Racer 2
+
+MMC5:
+       EKROM                   Gemfire
+       ELROM                   Castlevania 3
+       ETROM                   Nobunaga's Ambition 2
+       EWROM                   Romance of the Three Kingdoms 2
+
+MMC6:
+       HKROM                   Star Tropics
+
+Nintendo
+discrete
+logic:
+        CNROM                  Gotcha
+        CPROM                  Videomation
+        MHROM
+        NROM-128               Mario Bros.
+        NROM-256               Super Mario Bros.
+        RROM-128
+        UNROM                  Megaman
+
+
+/******************************************************************************/
+/*  1.1)        System requirements:                                          */
+/******************************************************************************/
+
+        Minimum system requirements:
+
+        Pentium 60 MHz
+        8 MB RAM
+        400 KB free disk space
+        Linux 2.0.36
+        VGA adapter
+
+        Recommended system specifications(at least):
+
+        Pentium 233 MHz
+        16 MB RAM
+        5 MB free disk space
+        Linux 2.2.x
+        SVGA adapter with 512 KB of RAM
+        Sound device capable of handling a sample rate of about 44100 hz.
+
+
+/******************************************************************************/
+/*  2.0) Starting FCE Ultra                                                   */
+/******************************************************************************/
+
+        Start FCE Ultra using the following format:
+
+        ./fceu <arguments> romimage.nes
+
+        <arguments> can be one or more of the following:
+
+        -vmode x        Select video mode(all are 8 bpp).
+                         1 = 256x240 @ 72 hz   <Default>
+                         2 = 256x256 @ 65 hz
+                         3 = 256x256(with scanlines) @ 120 hz
+                         4 = 640x480(with scanlines)
+                         5 = 640x480("1 per 4")
+                         6 = 256x224(with scanlines) @ 120 hz
+                        7 = 320x240
+                        8 = 256x224 @ 103 hz
+       -vsync x        Wait for the screen's vertical retrace before updating 
+                       the screen.  If you have sound enabled and enable this,
+                       you may have to increase the number of sound fragments
+                       from the default of 8, to reduce buffer underruns.
+                       Buffer underruns will not be preventable if the 
+                       current video refresh rate is < ~60 hz (or < ~50 hz 
+                       if PAL emulation is enabled).
+                        0 = Disabled.  <Default>
+                        1 = Enabled.
+       -cpalette x     Load a custom global palette from file x.  
+                       The filename x is saved in the configuration file,
+                       not the data from the file.  Note that you should
+                       probably use an absolute("/home/jp/test.pal") filename
+                       rather than a relative("test.pal") filename.  If x is 0,
+                       the default (built in) global palette will be used.
+        -ntsccol        Emulate an NTSC's TV's colors based on user-supplied
+                        hue and tint values.
+                         0 = Disabled. <Default>
+                         1 = Enabled.
+        -sound   x      Sound.          <Default=48000>
+                         0 = Disabled.
+                         Otherwise, x = playback rate in samples per second.
+       -soundvol x     Sound volume. x is an integral percentage value.
+                       The default value is, obviously, 100.
+                       Setting it higher will increase the likelihood that
+                       sound clipping will occur.  This shouldn't be noticeable
+                       if the volume is reasonable(200% or lower; perhaps even
+                       higher for many games).
+       -sfragsize x    Set sound fragment size to 2^x(2 to the power of x)
+                       SAMPLES.  The default value is 7.
+       -snfrags x      Set number of sound fragments to x.  The default value
+                       is 8.
+        -f8bit x        Force 8-bit sound.  Enabling this will decrease
+                        sound quality noticeably without increasing
+                        performance noticeably.  Only use when 16-bit sound
+                        is problematic.
+                         0 = Disabled. <Default>
+                         1 = Enabled.
+        -nothrottle x   Disables speed throttling used when sound is disabled
+                        if x is non-zero.  The default value of x is 0.
+       -joyx y         Joystick mapped to virtual joystick x(1-4).
+                        0 = Disabled, reset configuration.     <Default>
+                        Otherwise, y(1-inf) = joystick number.
+        -inputx str     Select device mapped to virtual NES-style input port 
+                       x(1-2).
+                       The default for both virtual input ports is "gamepad".
+                         str may be: none, gamepad, zapper, powerpada, 
+                                    powerpadb, arkanoid
+       -fcexp str      Select Famicom expansion port device.  If you select
+                       a device other than "none", you should enable the
+                       "gamepad" on both NES-style virtual input ports.
+                       The default is "none".
+                        str may be: none, shadow, arkanoid, 4player, fkb
+       -nofs x         Disables Four-Score emulation if x is 1.  Default is 0.
+                       Note that Four-Score emulation will only be active
+                       if "gamepad" is mapped to one or both virtual input
+                       ports.
+       -gg             Enable Game Genie emulation.
+        -pal            Emulate a PAL NES.
+        -no8lim x       Disables the 8 sprites per scanline limitation.
+                         0 = Limitation enabled.       <Default>
+                         1 = Limitation disabled.
+        -subase x       Save extra game data files(such as battery-backed RAM)
+                        under the base directory if enabled.
+                         0 = Disabled. <Default>
+                         1 = Enabled.
+       -snapname x     Selects what type of file name screen snapshots will 
+                       have.
+                        0 = Numeric(0.png)     <Default>
+                        1 = File base and numeric(mario-0.png)
+       -clipsides x    Clip leftmost and rightmost 8 columns of pixels of 
+                       video output.
+                        0 = Disabled.  <Default>
+                        1 = Enabled.
+        -slstart x      Set the first drawn emulated scanline for NTSC emulation
+                        mode.  Valid values for x are 0 through 239.
+                        The default value is 8.
+        -slend x        Set the last drawn emulated scanline for NTSC emulation
+                        mode. Valid values for x are 0 through 239.
+                        The default value is 239.
+        -slstartp x     Set the first drawn emulated scanline for PAL emulation
+                        mode.  Valid values for x are 0 through 239.
+                        The default value is 0.
+        -slendp x       Set the last drawn emulated scanline for PAL emulation
+                        mode. Valid values for x are 0 through 239.
+                        The default value is 239.
+        -connect   s    Connect to server 's' for TCP/IP network play.
+        -server         Be a host/server for TCP/IP network play.
+       -netport x      Use TCP/IP port x for network play.  The default
+                       port is 4046.
+/******************************************************************************/
+/*  2.1)        General Keyoard Key Mapping:                                  */
+/******************************************************************************/
+
+        Default Key Mapping:
+
+         For emulated Family BASIC Keyboard:
+          Enable/Disable Keyboard Input         Scroll Lock
+                (enabling emulated keyboard input will disable
+                 commands keys)
+          All emulated keys are mapped to the closest open key on the PC
+          keyboard, with a few exceptions.  The emulated "@" key is
+          mapped to the "`"(grave) key, and the emulated "kana" key
+          is mapped to the "Insert" key(in the 3x2 key block above the
+          cursor keys).
+
+         For emulated game pads:
+          Left Control             B
+          Left Alt                 A
+          Enter/Return             Start
+          Tab                      Select
+          Cursor Down              Down
+          Cursor Up                Up
+          Cursor Left              Left
+          Cursor Right             Right
+
+         For emulated power pads(keys correspond to button locations on
+         side "B"):
+          O P [ ]
+          K L ; '
+          M , . /
+
+         For FDS games:
+          I                        Insert disk.
+          E                        Eject disk.
+          S                        Select disk/disk side.
+        
+         For VS Unisystem games:
+          C                        Insert coin.
+          V                        Show/Hide dip switches.
+           1-8                      Toggle dip switches(when dip switches
+                                    are shown).
+
+         T                        Select tint to adjust.
+         H                        Select hue to adjust.
+         +/-                      Increase/decrease tint or hue.
+
+         0-9                      Select save state.
+         Caps Lock                Select virtual joystick.
+
+        F2                       Activate cheat interface.
+
+         F3                       Lock virtual console.
+         F4                       Unlock virtual console.
+
+         F5/F7                    Save/Load state.
+         F9                       Save screen snapshot.
+         F10                      Reset.
+        F11                      Power off/on.
+         ESC/F12                  Exit.
+
+
+/******************************************************************************/
+/*  3.0)        Platform Specific Notes                                       */
+/******************************************************************************/
+
+        1.  FCE Ultra uses SVGAlib, so you'll obviously need to have it
+        installed.
+
+        2.  Be careful when using the non-VGA video modes(such as 640x480).
+        SVGAlib doesn't always handle virtual terminal switching well when
+        one of these modes is being used.  Also, since FCE Ultra enables a
+        a linear frame buffer for these modes, heed this warning from
+        the SVGAlib documentation:
+
+               Furthermore, some cards (Cirrus) just enable  this  buffer
+               at  a  fixed hardware address.  For Cirrus it is mapped at
+               14MB so you should never used it if  you  have  more  than
+               14MB  of  memory (But how does an application know?).  The
+               Mach32 support for this is smarter. It makes this  feature
+               only available when it is safe to be used.
+
+        3.  FCE Ultra must be run as root in order to get access to the
+        VGA hardware.  SVGAlib will drop root privileges if you are running
+        the program as a normal user and the suid root bit is set and the
+        executable is owned by root. Example:
+                chown root fceu ; chmod 4755 fceu
+        Make sure you have the latest stable release of SVGAlib, though.
+
+        4.  FCE Ultra will save all data(state saves/screen snapshots) in
+        ~/.fceultra, so make sure your "HOME" environment variable is set
+        correctly.
+
+        If you believe FCE Ultra is too slow, you can try the following:
+         * Kill some of the other processes.
+         * Disable sound emulation.
+        * Raise the priority of FCE Ultra with the 'nice' command. 
+          Ex:  nice -n -20 ./fceu
+
+/******************************************************************************/
+/*  3.1)        Network Play Notes                                            */
+/******************************************************************************/
+
+        In TCP/IP network play, the server will be player one, and the
+        client will be player 2.
+
+        Zapper emulation and power pad emulation currently do not work with
+        network play.
+
+        Having Game Genie or PAL emulation enabled on only one side
+        will cause problems.
+
+        Both players MUST use the same ROM/disk image and SRAM
+        file(if applicable).
+
+       When using FDS or VS Unisystem games with network play, only player
+       1 will be able to insert disk, eject disk, insert coins, toggle dip
+       switches, etc.
+
+/******************************************************************************/
+/*  3.2)       VS Unisystem Notes                                            */
+/******************************************************************************/
+
+        FCE Ultra currently only supports VS Unisystem ROM images in the
+        iNES format. 
+
+        ROM Images:
+
+         * VS Unisystem games that are about 49,000 bytes in size most likely
+           use mapper 99.
+         * Other VS Unisystem games will use other mappers.  Here is a short
+           list of games and the mappers they use:
+
+               CastleVania - 2
+               Dr. Mario   - 1
+               Goonies     - 151
+               Gradius     - 151
+              Ice Climber - 99
+               Platoon     - 68
+
+        Palette(s):
+
+         * The colors in many VS Unisystem games may be incorrect.  This
+           is due to each game having its own PPU, and thus using a
+           different palette than games that use a different PPU.
+
+
+/******************************************************************************/
+/*  3.3)        Famicom Disk System Notes                                     */
+/******************************************************************************/
+
+       You will need the FDS BIOS ROM image in the base FCE Ultra directory.
+       It must be named "disksys.rom".  I will not give this file to you, so
+       don't ask.
+
+       Two types of FDS disk images are supported:  disk images with the 
+       FWNES-style header, and disk images with no header.
+
+       You should make backups of all of your FDS games you use with FCE 
+       Ultra.  This is because FCE Ultra will write the disk image back to 
+       the storage medium, and the disk image in RAM might have been corrupted
+        because of inaccurate emulation(this case is not likely to occur, but 
+       it could occur).
+
+
+/******************************************************************************/
+/*  3.4)        Light Gun Notes                                               */
+/******************************************************************************/
+
+       Currently, the NES Zapper and the light gun used with the VS
+       Unisystem(I will call both the same name, Zapper) are supported.
+       Most(all?) NES games expect the Zapper to be plugged into port 2.
+       and most(all?) VS Unisystem games expect the Zapper to be plugged 
+       into port(?) 1.
+
+       The LEFT mouse button is the emulated trigger button for the
+       Zapper.  The RIGHT mouse button is also emulated as the trigger,
+       but as long as you have the RIGHT mouse button held down, no color
+       detection will take place, which is effectively like pulling the
+       trigger while the Zapper is pointed away from the television screen.
+       Note that you must hold the RIGHT button down for a short
+       time(greater than just a fast click, shorter than a second).
+       
+       Zapper emulation currently does NOT work with network play, so
+       don't even try it. I may add support in the future if enough
+       people want it or if I want it.
+
+
+/******************************************************************************/
+/*  3.5)        Palette Notes                                                 */
+/******************************************************************************/
+
+       Palettes files are expected to contain 64 8-bit RGB triplets(each in
+       that order; red comes first in the triplet in the file, then green, 
+       then blue).  Each 8-bit value represents brightness for that particular
+       color.  0 is minimum, 255 is maximum.
+
+       Palettes can be set on a per-game basis.  To do this, put a palette
+       file in the "gameinfo" directory with the same base filename
+       as the game you wish to associate with and the extension "pal".  
+       Examples:
+
+               File name:              Palette file name:
+                BigBad.nes              BigBad.pal
+                BigBad.zip              BigBad.pal
+                BigBad.Better.nes       BigBad.Better.pal
+
+
+        With so many ways to choose a palette, figuring out which one will
+        be active may be difficult.  Here's a list of what palettes will
+        be used, in order from highest priority to least priority(if a condition
+        doesn't exist for a higher priority palette, the emulator will
+        continue down its list of palettes).
+
+        NSF Palette(for NSFs only)
+         Palette loaded from the "gameinfo" directory.
+          NTSC Color Emulation(only for NTSC NES games).
+           VS Unisystem palette(if the game is a VS Unisystem game and a palette
+           is available).
+            Custom global palette.
+             Default NES palette.
+
+
+/******************************************************************************/
+/*  3.6)        Compressed File Notes                                         */
+/******************************************************************************/
+
+        FCE Ultra can load data from both PKZIP-format files and
+        gzip-format files.  Only one type of (de)compression algorithm is
+        supported:  "deflate"; this seems to be the most popular compression
+        algorithm, though.
+
+        A compressed FDS disk image will only be saved back to disk if it
+        uses the gzip format.
+
+        All files in a PKZIP format file will be scanned for the
+        followings extensions:  .nes, .fds, .nsf, .unf, .nez, .unif
+        The first compressed file to have one of these extensions will be
+        loaded. If no compressed file has one of these extensions, the
+        first compressed file will be loaded.
+
+
+/******************************************************************************/
+/*  3.7)        Game Genie Notes                                             */
+/******************************************************************************/
+
+       The Game Genie ROM image is loaded from the file "gg.rom" in the
+       base directory the first time Game Genie emulation is enabled and
+       a ROM image is loaded since the time FCE Ultra has run.
+
+       The ROM image may either be the 24592 byte iNES-format image, or
+       the 4352 raw ROM image.
+
+       Remember that enabling/disabling Game Genie emulation will not take
+       effect until a new game is loaded(this statement shouldn't concern
+       any of the "run once" command-line driven ports).
+
+/******************************************************************************/
+/*  4.0)        Contacting the author                                         */
+/******************************************************************************/
+
+        I can be reached via email at xodnizel@users.sourceforge.net.
+        Bero can be reached via email at 9bero9@geocities.co.jp
+         (Note that Bero can not and will not answer any questions
+          regarding the operation of FCE Ultra, so please don't ask him.
+          If you understand this, remove the 9's from the email address
+         provided to get his real email address.)
+
+
+/******************************************************************************/
+/*  4.1)        Credits                                                       */
+/******************************************************************************/
+
+\Firebug\       -       High-level mapper information.
+Bero            -       Original FCE source code.
+Brad Taylor    -       NES sound channel guide.
+Chris Hickman  -       Archaic Ruins.
+Donald Moore    -       DC PasoFami NES packs.
+Fredrik Olson  -       NES four-player adapter information.
+Gilles Vollant -       PKZIP file loading functions.
+goroh           -       Various documents.
+Jeff Tamer      -       Insaniacal fun.
+Jeremy Chadwick -       General NES information.
+Justin Smith    -       Giving me obscure ROM images in the "dark ages of
+                        NES emulation".
+Kevin Horton    -       Low level NES information and sound information.
+Ki             -       Various technical information.
+Mark Knibbs     -       Various NES information.
+Marat Fayzullin -       General NES information.
+Matthew Conte   -       Sound information.
+N. Andou       -       Awesome NES/SNES emulators, at the time...
+nori           -       FDS sound information.
+Quietust        -       VRC7 sound translation code by The Quietust
+                        (quietust@ircN.org).
+                       Ideas and corrections.
+R. Hoelscher   -       Famicom four-player adapter information.
+Rob Mocca       -       DC PasoFami NES packs, testing.
+Sean Whalen    -       Node99.
+Tatsuyuki Satoh -       OPL2 emulator
+TheRedEye      -       ROM images, testing.
+
+
+Info-ZIP       -       ZLIB
+
+...and everyone else who has helped me.
diff --git a/Documentation/rel/readme-win.txt b/Documentation/rel/readme-win.txt
new file mode 100644 (file)
index 0000000..8c4425d
--- /dev/null
@@ -0,0 +1,641 @@
+                                   FCE Ultra
+                                     0.81
+
+                         http://fceultra.sourceforge.net/
+
+
+What is new:
+
+       *  Screen snapshots can now be taken while playing an NSF.
+       *  Saving screen snapshots will no longer corrupt the frame buffer.
+       *  Added many more games to the list of games that usually are found
+          with bad iNES headers.
+       *  Fixed more network play bugs.  It should now work correctly(how
+          many times have I said or implied that...).
+       *  The NSF player will now disable the FDS sound channel on song
+          initialization(fixes a problem with the Zelda no Densetsu
+          rip).
+       *  Reads from $4090 and $4092 while emulating the FDS will now return
+          the current envelope settings.  Affects "Ai Senshi Nicole" 
+          and "Bio Miracle Bokutte Upa", at least.
+       *  Merged a lot of pirate MMC3 multicart emulation code with the main
+          MMC3 emulation code.
+       *  Added support for the MMC5's split-screen mode.  This fixes the
+          introduction in "Uchuu Keibitai SDF".
+       *  Writes to $8000-$FFFF with D7 set during MMC1 emulation will
+          cause the MMC1 mode register to be OR'd with $C.  This fixes
+          "Robocop 3".
+       *  Replaced an MMC1 hack that I used to get "Bill and Ted's Excellent
+          Video Game Adventure" to work with something more accurate.
+       *  Fixed the MMC5 read handler to return the data last on the data
+          bus instead of $FF when a read occured to an unmapped address.
+          This fixes the lockup problem in "Bandit Kings of Ancient China"
+          and possibly other games.
+       *  Added support for the game "Ishin no Arashi" in the iNES format
+          (I added an entry with its CRC32 value and the number of 8KB
+           WRAM banks it needs into the MMC5 WRAM size table).
+       *  Added support for MMC1 games in the iNES format with 16KB of RAM
+           via CRC32 comparisons(currently only Genghis Khan(USA), Romance
+          of the 3 Kingdoms(USA), and Nobunaga's Ambition(USA and Japan) are 
+           recognized).
+       *  iNES mapper 1 now supports pageable CHR RAM if CHR ROM is not
+          present.  Fixes "Family School".
+       *  Added support for iNES mappers 51 and 52.  Thanks to Kevin Horton
+          for the information.
+       *  Modified MMC3(iNES mapper 4/118/119) IRQ counter emulation.  Fixes
+          problems in "MegaMan 3", "Gun Nac", and the Japanese version of
+          "Klax", but it *might* cause problems with other games.
+       *  Fixed an iNES mapper 32 emulation bug.  "Ai Sensei no Oshiete"
+          works now.
+       *  Fixed iNES mapper 33/48 IRQ emulation.
+       *  Fixed iNES mapper 16 IRQ emulation.
+       *  Added support for "Famicom Jump 2" as iNES mapper 153.
+           If a good(as far as I can tell) dump is loaded, FCE Ultra will
+           automatically fix the mapper number.
+       *  The VS Unisystem bit in iNES headers is no longer recognized.
+          Too many games have this bit set when it shouldn't be set.
+          Now VS Unisystem games are recognized by CRC32 value.
+       *  Reads from $4015 no longer reset DMC IRQ.  This fixes the
+          title screen of "Romancia".
+       *  PPU NMI now occurs a few cycles later.  Fixes the "BattleToads"
+          lockup problem.
+       *  BRK emulation now sets the I flag.
+       *  Changed a few zero-page address mode functions to read directly
+          from emulated RAM.
+
+
+Contents:
+
+  1.  Basic information
+        1.0 What FCE Ultra is.
+        1.1 System requirements.
+  2.  How to use
+        2.0 Starting FCE Ultra
+        2.1 Using FCE Ultra
+  3.  Notes
+        3.0 Platform Specific Notes
+        3.1 Network Play Notes
+        3.2 VS Unisystem Notes
+        3.3 Famicom Disk System Notes
+        3.4 Light Gun Notes
+        3.5 Palette Notes
+        3.6 Compressed File Notes
+       3.7 Game Genie Notes
+  4.  Extra
+        4.0 Contacting the author
+        4.1 Credits
+
+/******************************************************************************/
+/*  1.0)       What FCE Ultra is:                                            */
+/******************************************************************************/
+
+        FCE Ultra is an NTSC and PAL Famicom/NES emulator for various 
+        platforms. It is based upon Bero's original FCE source code.  Current
+       features include good PPU, CPU, pAPU, expansion chip, and joystick
+       emulation.  Also a feature unique to this emulator(at the current
+        time) is authentic Game Genie emulation.  Save states and snapshot
+       features also have been implemented.  The VS Unisystem is emulated
+        as well.  FCE Ultra supports iNES format ROM images, UNIF format ROM
+       images, headerless and FWNES style FDS disk images, and NSF files.
+
+        FCE Ultra currently supports the following iNES mappers(many partially):
+
+Number:         Description:                    Game Examples:
+--------------------------------------------------------------------------------
+  0             No Mapper                       Donkey Kong, Mario Bros
+  1             Nintendo MMC1                   MegaMan 2, Final Fantasy
+  2             Simple 16KB PRG Switch          MegaMan 1, Archon, 1944
+  3             Simple 8KB CHR Switch           Spy Hunter, Gradius
+  4             Nintendo MMC3                   Recca, TMNT 2, Final Fantasy 3
+  5             Nintendo MMC5                   Castlevania 3, Just Breed, Uchuu Keibitai SDF
+  6             FFE F4 Series(hacked)           Saint Seiya, Ganbare Goemon
+  7             AOROM                           Battle Toads, Lion King
+  8             FFE F3 Series(hacked)           Doraemon Kaitakuhen
+  9             Nintendo MMC2                   Punchout!
+ 10             Nintendo MMC4                   Fire Emblem, Fire Emblem Gaiden
+ 11             Color Dreams                    Crystal Mines, Bible Adventures
+ 13             CPROM                           Videomation
+ 15             Multi-cart(pirate)              100-in-1: Contra Function 16
+ 16             Bandai                          Dragon Ball Z, Gundam Knight
+ 17             FFE F8 Series(hacked)           Parodius, Last Armageddon
+ 18             Jaleco SS806                    Pizza Pop, Plazma Ball
+ 19             Namco 106                       Splatter House, Mappy Kids                
+ 21             Konami VRC4 2A                  WaiWai World 2, Ganbare Goemon Gaiden 2
+ 22             Konami VRC4 1B                  Twinbee 3
+ 23             Konami VRC2B                    WaiWai World, Getsufuu Maden
+ 24             Konami VRC6                     Akumajo Densetsu(Dracula 3)
+ 25             Konami VRC4                     Gradius 2, Bio Miracle: Boku tte Upa
+ 26             Konami VRC6 A0-A1 Inverse       Esper Dream 2, Madara
+ 32             Irem G-101                      Image Fight 2, Perman
+ 33             Taito TC0190/TC0350             Don Doko Don 1&2
+ 34             NINA-001 and BNROM             Impossible Mission 2, Deadly Towers, Bug Honey
+ 40             (pirate)                        Super Mario Bros. 2
+ 41             Caltron 6-in-1                  Caltron 6-in-1
+ 42            (pirate)                        "Mario Baby"
+ 43            Multi-cart(pirate)              Golden Game 150 in 1
+ 44            Multi-cart(pirate)              Super HiK 7 in 1        
+ 45            Multi-cart(pirate)              Super 1000000 in 1
+ 46            Game Station                    Rumble Station
+ 47            NES-QJ                          Nintendo World Cup/Super Spike V.B.
+ 48            Taito TC190V                    Flintstones
+ 49             Multi-cart(pirate)              Super HiK 4 in 1
+ 51            Multi-cart(pirate)              11 in 1 Ball Games
+ 52            Multi-cart(pirate)              Mario Party 7 in 1
+ 64             Tengen RAMBO-1                  Shinobi, Klax
+ 65             Irem H-3001                     Daiku no Gensan 2
+ 66             GNROM                           SMB + Duck Hunt
+ 67             Sunsoft Mapper "3"              Fantasy Zone 2
+ 68             Sunsoft Mapper "4"              After Burner 2, Nantetta Baseball 
+ 69             Sunsoft FME-7                   Batman: ROTJ, Gimmick!
+ 70            ??                              Kamen Rider Club
+ 71             Camerica                        Fire Hawk, Linus Spacehead
+ 72            Jaleco ??                       Pinball Quest
+ 73             Konami VRC3                     Salamander
+ 75             Jaleco SS8805/Konami VRC1       Tetsuwan Atom, King Kong 2
+ 76             Namco 109                       Megami Tenshi 1
+ 77             Irem ??                         Napoleon Senki
+ 78             Irem 74HC161/32                 Holy Diver
+ 79             NINA-06                                F15 City War, Krazy Kreatures
+ 80             Taito X-005                     Minelvation Saga
+ 82            Taito ??                        Kyuukyoku Harikiri Stadium - Heisei Gannen Ban                  
+ 83            Multi-cart(pirate)              Dragon Ball Party
+ 85             Konami VRC7                     Lagrange Point
+ 86            Jaleco ??                       More Pro Baseball
+ 87            ??                              Argus
+ 89            Sunsoft ??                      Mito Koumon
+ 90            Pirate                          Super Mario World, Mortal Kombat
+ 92             Jaleco ??                       MOERO Pro Soccer, MOERO Pro Yakyuu '88
+ 93            ??                              Fantasy Zone
+ 94            ??                              Senjou no Ookami
+ 95            Namco ??                        Dragon Buster
+ 97            ??                              Kaiketsu Yanchamaru
+ 99             VS System 8KB CHR Switch        VS SMB, VS Excite Bike
+105             NES-EVENT                       Nintendo World Championships
+112             Asder                          Sango Fighter, Hwang Di
+113            MB-91                           Deathbots
+118            MMC3-TLSROM/TKSROM Board        Ys 3, Goal! 2, NES Play Action Football
+119             MMC3-TQROM Board                High Speed, Pin*Bot
+140            Jaleco ??                       Bio Senshi Dan
+151             Konami VS System Expansion      VS The Goonies, VS Gradius
+152            ??                              Arkanoid 2, Saint Seiya Ougon Densetsu
+153             Bandai ??                       Famicom Jump 2
+180             ??                              Crazy Climber
+182            ??                              Super Donkey Kong
+184            ??                              Wing of Madoola, The
+189             Micro Genius TXC ??             Thunder Warrior
+225             Multi-cart(pirate)              58-in-1/110-in-1/52 Games
+226             Multi-cart(pirate)              76-in-1
+227            Multi-cart(pirate)              1200-in-1
+228             Action 52                       Action 52, Cheetahmen 2
+229             Multi-cart(pirate)              31-in-1
+232            BIC-48                          Quattro Arcade, Quattro Sports
+234            Multi-cart ??                   Maxi-15
+240             ??                              Gen Ke Le Zhuan, Shen Huo Le Zhuan
+242            ??                              Wai Xing Zhan Shi
+246            ??                              Fong Shen Ban
+248            ??                              Bao Qing Tian
+250            ??                              Time Diver Avenger
+
+       FCE Ultra currently supports the following UNIF boards(minus the 
+        prefixes HVC-, NES-, BTL-, and BMC-, as they are currently ignored):
+        
+Group: Name:                   Game Examples:
+--------------------------------------------------------------------------------
+Bootleg:
+        MARIO1-MALEE2          Super Mario Bros. Malee 2
+        NovelDiamond9999999in1 Novel Diamond 999999 in 1
+       Super24in1SC03          Super 24 in 1
+        Supervision16in1       Supervision 16-in-1
+
+Unlicensed:
+        Sachen-8259A           Super Cartridge Version 1
+        Sachen-8259B           Silver Eagle
+        Sachen-74LS374N                Auto Upturn
+        SA-016-1M              Master Chu and the Drunkard Hu
+        SA-72007               Sidewinder
+        SA-72008               Jovial Race
+        SA-0036                        Mahjong 16
+        SA-0037                        Mahjong Trap
+       TC-U01-1.5M             Challenge of the Dragon
+
+MMC1:
+       SAROM                   Dragon Warrior
+       SBROM                   Dance Aerobics
+       SCROM                   Orb 3D
+       SEROM                   Boulderdash
+       SGROM                   Defender of the Crown
+       SKROM                   Dungeon Magic
+       SLROM                   Castlevania 2
+       SL1ROM                  Sky Shark
+       SNROM                   Shingen the Ruler
+       SOROM                   Nobunaga's Ambition
+
+MMC3:
+       TFROM                   Legacy of the Wizard
+       TGROM                   Megaman 4
+       TKROM                   Kirby's Adventure
+       TKSROM                  Ys 3
+       TLROM                   Super Spike V'Ball
+       TLSROM                  Goal! 2
+       TR1ROM                  Gauntlet
+       TQROM                   Pinbot
+       TSROM                   Super Mario Bros. 3
+       TVROM                   Rad Racer 2
+
+MMC5:
+       EKROM                   Gemfire
+       ELROM                   Castlevania 3
+       ETROM                   Nobunaga's Ambition 2
+       EWROM                   Romance of the Three Kingdoms 2
+
+MMC6:
+       HKROM                   Star Tropics
+
+Nintendo
+discrete
+logic:
+        CNROM                  Gotcha
+        CPROM                  Videomation
+        MHROM
+        NROM-128               Mario Bros.
+        NROM-256               Super Mario Bros.
+        RROM-128
+        UNROM                  Megaman
+
+
+/******************************************************************************/
+/*  1.1)       System requirements:                                          */
+/******************************************************************************/
+
+        Minimum system specifications:
+
+        Pentium 60 MHz
+        8 MB RAM
+        400 KB free disk space
+       Windows 95
+       DirectX 7.0
+        Video adapter
+
+        Recommended minimum system specifications:
+
+        Pentium 233 MHz
+        16 MB RAM
+        5 MB free disk space
+       Windows 98SE
+        Video adapter with 2D acceleration abilities
+       DirectX 8.0
+       Joystick
+       Mouse
+        Sound device capable of handling a sample rate of 44100 hz.
+
+
+/******************************************************************************/
+/*  2.0)        Starting FCE Ultra                                            */
+/******************************************************************************/
+
+        FCE Ultra can be started by running the executable "fceu.exe".
+        I do not recommend running it from a DOS "box".
+
+
+/******************************************************************************/
+/*  2.1)        Using FCE Ultra:                                              */
+/******************************************************************************/
+
+        After starting FCE Ultra, you'll probably want to load a game.  Do
+        this by going to File/Open.
+
+        Menu descriptions:
+
+        File
+         Open           - Loads a new game.                
+         Save State     - Saves the current NES state.
+         Load State     - Loads a saved NES state.
+         Log Sound As   - Logs sound to a file.  It will not work if sound
+                          is disabled.                               
+         Exit           - Exit the emulator.
+
+        NES
+         Reset          - Resets the virtual NES.
+         Power          - Power cycles the virtual NES.
+         Cheats         - Activates the cheat interface.  See "cheat.txt" for
+                          more details.
+
+        Config
+         Hide Menu      - Hides the menu.
+         Game Genie     - If checked, enable Game Genie emulation.
+                          Game Genie emulation will only begin or end when a new
+                          game is loaded.
+         PAL Emulation  - If checked, enable PAL emulation.  Changes take effect
+                          immediately, though I recommend resetting the virtual
+                          NES afterward PAL emulation is enabled or disabled.  
+         Directories    - Configure the directories that FCE Ultra will store
+                          its files in.
+         Input          - Enter input configuration dialog.
+                          Note that not all virtual devices are configurable.
+         Miscellaneous  - Enter miscellaneous configuration dialog.
+         Network Play   - Enter network play configuration dialog.
+         Palette        - Enter palette configuration dialog.
+         Sound          - Enter sound configuration dialog.
+          Sound enabled:
+                Sound emulation and output are enabled when this is checked.
+          Force 8-bit sound:
+                Forces 8-bit sound output.  Use only when absolutely
+                necessary(very rare).                        
+          Sample rate:
+                Specifies how many sound samples will be played back per
+                second.  Unless you know what you are doing, you probably
+                don't need to change this setting.
+          Use secondary sound buffer:
+                Uses a secondary sound buffer.  This option may be required
+                for sound to work with certain sound cards/devices.
+                Selecting "with global focus" will cause sound to be played
+                while FCE Ultra has lost window focus, but you will probably
+                also want to select "Active While Focus Lost" in the Config
+                menu as well, otherwise you will just get repeating sound
+                when FCE Ultra loses focus.
+          Length of sound buffer:
+                Specifies what length of sound(in milliseconds) should be
+                buffered by FCE Ultra.  DirectSound and the Windows kernel
+                may or may not cause a little more latency than what you
+                might expect(usually not any more than a few milliseconds),
+                depending on your setup.
+                Use larger values if you have sound problems such as popping
+                or gaps, though.  Larger values will increase the latency of
+                the sound, however.  Finally, larger values are ideal for
+                background music listening.
+          Volume:
+                Specifies the volume of FCE Ultra's sound output.  Setting
+                the volume too high MIGHT cause noticeable clipping on some
+                sounds(loud drums, for example), but don't let that possibility
+                stop you from experimenting.
+
+         Video          - Enter video configuration dialog.
+
+        Default Key Mapping:
+
+         For emulated Family BASIC Keyboard:
+          Enable/Disable Keyboard Input         Scroll Lock
+                (enabling emulated keyboard input will disable
+                 commands keys)
+          All emulated keys are mapped to the closest open key on the PC
+          keyboard, with a few exceptions.  The emulated "@" key is
+          mapped to the "`"(grave) key, and the emulated "kana" key
+          is mapped to the "Insert" key(in the 3x2 key block above the
+          cursor keys).
+
+         For emulated game pads:
+          Left Control             B
+          Left Alt                 A
+          Enter/Return             Start
+          Tab                      Select
+          Cursor Down              Down
+          Cursor Up                Up
+          Cursor Left              Left
+          Cursor Right             Right
+        
+         For emulated power pads(keys correspond to button locations on
+         side "B"):
+          O P [ ]
+          K L ; '
+          M , . /
+
+         For FDS games:
+          I                        Insert disk.
+          E                        Eject disk.
+          S                        Select disk/disk side.
+
+         For VS Unisystem games:
+          C                        Insert coin.
+          V                        Show/Hide dip switches.
+           1-8                      Toggle dip switches(when dip switches
+                                    are shown).
+
+         0-9                      Select save state.
+      
+         F5/F7                    Save/Load state.
+         F9                       Save screen snapshot.
+
+         F3                       Hide/Show menu.
+         F4                       Toggle between windowed/full screen modes.
+         F10                      Reset.
+         F11                      Power off/on.
+         F12                      Exit.
+
+
+/******************************************************************************/
+/*  3.0)       Platform Specific Notes                                       */
+/******************************************************************************/
+
+        Your desktop color depth must be 16bpp, 24bpp, or 32bpp for FCE Ultra
+        to run properly in windowed mode.
+
+       FCE Ultra's base directory is the directory in which the executable
+       is located.
+
+
+/******************************************************************************/
+/*  3.1)        Network Play Notes                                            */
+/******************************************************************************/
+
+        In TCP/IP network play, the server will be player one, and the
+        client will be player 2.
+
+        Zapper emulation and power pad emulation currently do not work with
+        network play.
+
+        Having Game Genie or PAL emulation enabled on only one side
+        will cause problems.
+
+        Both players MUST use the same ROM/disk image and SRAM
+        file(if applicable).
+
+       When using FDS or VS Unisystem games with network play, only player
+       1 will be able to insert disk, eject disk, insert coins, toggle dip
+       switches, etc.
+
+/******************************************************************************/
+/*  3.2)       VS Unisystem Notes                                            */
+/******************************************************************************/
+
+        FCE Ultra currently only supports VS Unisystem ROM images in the
+        iNES format. 
+
+        ROM Images:
+
+         * VS Unisystem games that are about 49,000 bytes in size most likely
+           use mapper 99.
+         * Other VS Unisystem games will use other mappers.  Here is a short
+           list of games and the mappers they use:
+
+               CastleVania - 2
+               Dr. Mario   - 1
+               Goonies     - 151
+               Gradius     - 151
+              Ice Climber - 99
+               Platoon     - 68
+
+        Palette(s):
+
+         * The colors in many VS Unisystem games may be incorrect.  This
+           is due to each game having its own PPU, and thus using a
+           different palette than games that use a different PPU.
+
+
+/******************************************************************************/
+/*  3.3)        Famicom Disk System Notes                                     */
+/******************************************************************************/
+
+       You will need the FDS BIOS ROM image in the base FCE Ultra directory.
+       It must be named "disksys.rom".  I will not give this file to you, so
+       don't ask.
+
+       Two types of FDS disk images are supported:  disk images with the 
+       FWNES-style header, and disk images with no header.
+
+       You should make backups of all of your FDS games you use with FCE 
+       Ultra.  This is because FCE Ultra will write the disk image back to 
+       the storage medium, and the disk image in RAM might have been corrupted
+        because of inaccurate emulation(this case is not likely to occur, but 
+       it could occur).
+
+
+/******************************************************************************/
+/*  3.4)        Light Gun Notes                                               */
+/******************************************************************************/
+
+       Currently, the NES Zapper and the light gun used with the VS
+       Unisystem(I will call both the same name, Zapper) are supported.
+       Most(all?) NES games expect the Zapper to be plugged into port 2.
+       and most(all?) VS Unisystem games expect the Zapper to be plugged 
+       into port(?) 1.
+
+       The LEFT mouse button is the emulated trigger button for the
+       Zapper.  The RIGHT mouse button is also emulated as the trigger,
+       but as long as you have the RIGHT mouse button held down, no color
+       detection will take place, which is effectively like pulling the
+       trigger while the Zapper is pointed away from the television screen.
+       Note that you must hold the RIGHT button down for a short
+       time(greater than just a fast click, shorter than a second).
+       
+       Zapper emulation currently does NOT work with network play, so
+       don't even try it. I may add support in the future if enough
+       people want it or if I want it.
+
+
+/******************************************************************************/
+/*  3.5)        Palette Notes                                                 */
+/******************************************************************************/
+
+       Palettes files are expected to contain 64 8-bit RGB triplets(each in
+       that order; red comes first in the triplet in the file, then green, 
+       then blue).  Each 8-bit value represents brightness for that particular
+       color.  0 is minimum, 255 is maximum.
+
+       Palettes can be set on a per-game basis.  To do this, put a palette
+       file in the "gameinfo" directory with the same base filename
+       as the game you wish to associate with and the extension "pal".  
+       Examples:
+
+               File name:              Palette file name:
+                BigBad.nes              BigBad.pal
+                BigBad.zip              BigBad.pal
+                BigBad.Better.nes       BigBad.Better.pal
+
+
+        With so many ways to choose a palette, figuring out which one will
+        be active may be difficult.  Here's a list of what palettes will
+        be used, in order from highest priority to least priority(if a condition
+        doesn't exist for a higher priority palette, the emulator will
+        continue down its list of palettes).
+
+        NSF Palette(for NSFs only)
+         Palette loaded from the "gameinfo" directory.
+          NTSC Color Emulation(only for NTSC NES games).
+           VS Unisystem palette(if the game is a VS Unisystem game and a palette
+           is available).
+            Custom global palette.
+             Default NES palette.
+
+
+/******************************************************************************/
+/*  3.6)        Compressed File Notes                                         */
+/******************************************************************************/
+
+        FCE Ultra can load data from both PKZIP-format files and
+        gzip-format files.  Only one type of (de)compression algorithm is
+        supported:  "deflate"; this seems to be the most popular compression
+        algorithm, though.
+
+        A compressed FDS disk image will only be saved back to disk if it
+        uses the gzip format.
+
+        All files in a PKZIP format file will be scanned for the
+        followings extensions:  .nes, .fds, .nsf, .unf, .nez, .unif
+        The first compressed file to have one of these extensions will be
+        loaded. If no compressed file has one of these extensions, the
+        first compressed file will be loaded.
+
+
+/******************************************************************************/
+/*  3.7)        Game Genie Notes                                             */
+/******************************************************************************/
+
+       The Game Genie ROM image is loaded from the file "gg.rom" in the
+       base directory the first time Game Genie emulation is enabled and
+       a ROM image is loaded since the time FCE Ultra has run.
+
+       The ROM image may either be the 24592 byte iNES-format image, or
+       the 4352 raw ROM image.
+
+       Remember that enabling/disabling Game Genie emulation will not take
+       effect until a new game is loaded(this statement shouldn't concern
+       any of the "run once" command-line driven ports).
+
+/******************************************************************************/
+/*  4.0)        Contacting the author                                         */
+/******************************************************************************/
+
+        I can be reached via email at xodnizel@users.sourceforge.net.
+        Bero can be reached via email at 9bero9@geocities.co.jp
+         (Note that Bero can not and will not answer any questions
+          regarding the operation of FCE Ultra, so please don't ask him.
+          If you understand this, remove the 9's from the email address
+         provided to get his real email address.)
+
+
+/******************************************************************************/
+/*  4.1)        Credits                                                       */
+/******************************************************************************/
+
+\Firebug\       -       High-level mapper information.
+Bero            -       Original FCE source code.
+Brad Taylor    -       NES sound channel guide.
+Chris Hickman  -       Archaic Ruins.
+Donald Moore    -       DC PasoFami NES packs.
+Fredrik Olson  -       NES four-player adapter information.
+Gilles Vollant -       PKZIP file loading functions.
+goroh           -       Various documents.
+Jeff Tamer      -       Insaniacal fun.
+Jeremy Chadwick -       General NES information.
+Justin Smith    -       Giving me obscure ROM images in the "dark ages of
+                        NES emulation".
+Kevin Horton    -       Low level NES information and sound information.
+Ki             -       Various technical information.
+Mark Knibbs     -       Various NES information.
+Marat Fayzullin -       General NES information.
+Matthew Conte   -       Sound information.
+N. Andou       -       Awesome NES/SNES emulators, at the time...
+nori           -       FDS sound information.
+Quietust        -       VRC7 sound translation code by The Quietust
+                        (quietust@ircN.org).
+                       Ideas and corrections.
+R. Hoelscher   -       Famicom four-player adapter information.
+Rob Mocca       -       DC PasoFami NES packs, testing.
+Sean Whalen    -       Node99.
+Tatsuyuki Satoh -       OPL2 emulator
+TheRedEye      -       ROM images, testing.
+
+
+Info-ZIP       -       ZLIB
+
+...and everyone else who has helped me.
diff --git a/Documentation/rel/toc b/Documentation/rel/toc
new file mode 100644 (file)
index 0000000..5abafb3
--- /dev/null
@@ -0,0 +1,23 @@
+
+
+Contents:
+
+  1.  Basic information
+        1.0 What FCE Ultra is.
+        1.1 System requirements.
+  2.  How to use
+        2.0 Starting FCE Ultra
+        2.1 Using FCE Ultra
+  3.  Notes
+        3.0 Platform Specific Notes
+        3.1 Network Play Notes
+        3.2 VS Unisystem Notes
+        3.3 Famicom Disk System Notes
+        3.4 Light Gun Notes
+        3.5 Palette Notes
+        3.6 Compressed File Notes
+       3.7 Game Genie Notes
+  4.  Extra
+        4.0 Contacting the author
+        4.1 Credits
+
diff --git a/Documentation/rel/top.dos b/Documentation/rel/top.dos
new file mode 100644 (file)
index 0000000..372f204
--- /dev/null
@@ -0,0 +1,8 @@
+                                   FCE Ultra
+                                     0.81
+
+                         http://fceultra.sourceforge.net/
+
+
+What is new:
+
diff --git a/Documentation/rel/top.linux b/Documentation/rel/top.linux
new file mode 100644 (file)
index 0000000..372f204
--- /dev/null
@@ -0,0 +1,8 @@
+                                   FCE Ultra
+                                     0.81
+
+                         http://fceultra.sourceforge.net/
+
+
+What is new:
+
diff --git a/Documentation/rel/top.win b/Documentation/rel/top.win
new file mode 100644 (file)
index 0000000..372f204
--- /dev/null
@@ -0,0 +1,8 @@
+                                   FCE Ultra
+                                     0.81
+
+                         http://fceultra.sourceforge.net/
+
+
+What is new:
+
diff --git a/Documentation/tech/README.now b/Documentation/tech/README.now
new file mode 100644 (file)
index 0000000..4575e0c
--- /dev/null
@@ -0,0 +1,6 @@
+Many(possibly all) of these documents contain flaws or are incomplete, so
+don't pull out your hair if there are inconsistencies between the documents,
+what's in FCE Ultra, and what you observe.  That's not to say that FCE Ultra
+doesn't have its share of (emulation) flaws, though...
+
+For many more NES-related documents, try http://nesdev.parodius.com
diff --git a/Documentation/tech/README.sound b/Documentation/tech/README.sound
new file mode 100644 (file)
index 0000000..cce9504
--- /dev/null
@@ -0,0 +1,2 @@
+Sound information is in the "cpu" subdirectory, due to the intimate
+relationship between the sound circuitry and the cpu.
diff --git a/Documentation/tech/UNIF_current.txt b/Documentation/tech/UNIF_current.txt
new file mode 100644 (file)
index 0000000..31e17c8
--- /dev/null
@@ -0,0 +1,302 @@
+****************************************************************************
+                   UNIF file format specifications
+                 (Universal NES Image) file format
+
+        Created by Tennessee Carmel-Veilleux (veilleux@ameth.org)
+                    REV 7b, November 28th, 2000
+
+***********THIS IS AN OPEN STANDARD. IT IS OPEN TO SUGGESTIONS**************
+
+Overview 
+-------- 
+The UNIF format is a portable, flexible REPLACEMENT of the NES standard
+(Designed by Marat Fayzullin). It is a chunked file format in the lines of
+the Amiga IFF (LBM), Microsoft RIFF (WAV) and Autodesk 3D studio mesh
+files (3DS). The goal of having a chunked definition is to provide
+flexibility and ease of implementation, as data is described in blocks
+with type IDs referring to them and header information to provide a 
+selective data reading. The format uses symetric data conversion for
+numerical compatibility between the different platforms' byte ordering.
+The ordering used is the 6502 Byte order (Intel), so that no more
+bickering arrises from people who do not appreciate Network Byte Ordering 
+(Motorola). 
+
+***
+The extension suggested for use with this format is .UNF (.UNIF under Operating
+systems which support longer extensions). 
+***
+
+Byte ordering
+-------------
+Byte ordering used throughout the file for DWORDs and WORDs is 6502 Byte
+order. The 6502 byte order is LSB, least significant byte first
+(Little-endian):
+
+ 3 2 1 0 <- Byte order for MSB (Network Byte order, m68k, PowerPC)
+ 0 1 2 3 <- Byte order for LSB (80x86, 6502, Z80)
+
+Care must be taken to convert the WORDs and DWORDs if you are using a
+non-LSB platform (Mac, Amiga, some others).
+
+File format
+-----------
+00h-1Fh : Header
+20h-EOF : Chunks
+
+I can not think of an easier format to describe :)
+
+Header
+------
+The 4-byte header contains the string "UNIF" , NON null-terminated, case
+as written. This is for identification purposes, a little like .NES' "NES^Z"
+It is followed by Revision number and reserved bytes.
+
+Format: 00h-03h: "UNIF" tag identifier
+        04h-07h: DWORD -> Revision number, currently 4
+        08h-1Fh: Reserved for future usage
+
+Sample structure:
+
+structure UNIF_header [
+   char identification[4]; /* MUST be "UNIF" */
+   dword revision; /* Revision number */
+   byte expansion[24];
+];
+
+Chunks
+------
+Each chunks is composed of 3 distinct elements:
+        00h-03h: Chunk ID string
+        04h-07h: DWORD -> Block Length of Data
+        08h-?? : Data
+
+All the chunks are written sequentially in the file. If you do not understand
+a chunk by its ID, simply jump over it using the data length information.
+*** ALL THE CHUNKS ARE OPTIONAL ***
+That means that there are NO mandatory chunks, and you support only the
+ONES YOU WISH, passing over the others while you are interpreting the
+file.
+
+Sample structure:
+
+structure UNIF_chunk [
+   char chunk_ID[4]; /* Chunk identification string. Can also be considered a
+                        number. ASCII format */
+   dword length; /* Data length, in little-endian format */
+];
+
+The different chunks:
+---------------------
+*****