pax_global_header 0000666 0000000 0000000 00000000064 12304671341 0014513 g ustar 00root root 0000000 0000000 52 comment=d9efbd74dddcdc012adbe0ef408abc63eff70864
fceux-2.2.2+dfsg0/ 0000775 0000000 0000000 00000000000 12304671341 0013627 5 ustar 00root root 0000000 0000000 fceux-2.2.2+dfsg0/Authors 0000664 0000000 0000000 00000005172 12304671341 0015204 0 ustar 00root root 0000000 0000000 Authors
=======
A list of people who have contributed code to FCE Ultra, or have had their code
placed in FCE Ultra by others.
Pre-2.0 FCE / FCE Ultra Contributors
------------------------------------
_These authors contributed exclusively to pre-2.0 versions,
but much of their code remains in 2.0 builds_
* BERO - bero at geocities.co.jp - Base FCE code.
* Xodnizel - Most of the base FCE Ultra code
* Aaron Oneal - http://www.morphgear.com - Many changes to compile with MSVC and first frame skipping code
* Joe Nahmias - Man pages
* Paul Kuliniewicz - kuliniew at purdue.edu - Various code for the original SDL port.
* Quietust - quietust at ircN dot org - VRC7 "translation" code.
* Ben Parnell - Windows debugging tools
* Parasyte & bbitmaster - Enhanced Windows debugging tools
* blip & nitsuja - Rerecording support
FCEUX >= 2.0 Contributors
-------------------------
* SP - document thyself (sf:rheiny) - Enhanced Windows debugging tools
* zeromus - mgambrell at gmail dot com (sf:zeromus) - Core architecture refactoring and merging - Windows driver maintenance
* adelikat - document thyself (sf:adelikat) - UI cleanup, project management, Win32 features & maintenance, TAS tools, documentation
* CaH4e3 - CaH4e3 at mail dot ru (sf: cah4e3) - Mappers
* Luke Gustafson - (sf:???) - Windows TAS and movie recording enhancements
* qfox - (sf:qfox) - lua scripting fucntions, luabot, basicbot (no longer implemented), various lua scripts
* _mz - document thyself (mauzus) - Windows driver maintenance and cleanup
* UncombedCoconut - UncombedCoconut at gmail dot com (sf:jeblanchard) - Build system and cross-compilation support - Driver maintenance and refactoring
* DWEdit - Debugger additions
* AnS - ansstuff at yandex dot ru (sf:ansstuff) - Win32 features & maintenance, TAS Editor, debugging tools, documentation
FCEUX (>=2.0) Linux/SDL Developers
----------------------------------
_These guys concentrated on keeping fceux the premiere linux/portable nes emu._
* Lukas Sabota - ltsmooth42 at gmail dot com (sf:punkrockguy318) - Head FceuX-SDL developer - GTK GUI, complete overhaul of SDL port, build scripts; maintainence; docs
* Shinydoofy - sf:shinydoofy - SDL maintenence
* Soules - gimmedonutnow at gmail dot com (sf:gimmedonutnow) - Linux SDL driver maintenance
* radsaq - radsaq at gmail dot com (sf:radsaq) - Build system, testing, and random cleanups
* Bryan Cain - sf:plombo - Patch to embed SDL in the GTK+ GUI, miscellaneous other SDL and GTK+ contributions
Included components:
--------------------
* Mitsutaka Okazaki - YM2413 emulator.
* Andrea Mazzoleni - Scale2x/Scale3x scalers
* Gilles Vollant - unzip.c PKZIP fileio
fceux-2.2.2+dfsg0/COPYING 0000664 0000000 0000000 00000043254 12304671341 0014672 0 ustar 00root root 0000000 0000000 GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser 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.
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.)
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.
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.
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
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.
Copyright (C)
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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.
, 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 Lesser General
Public License instead of this License.
fceux-2.2.2+dfsg0/INSTALL 0000664 0000000 0000000 00000000620 12304671341 0014656 0 ustar 00root root 0000000 0000000 To compile and install FCEUX for SDL, follow the instructions in the README-SDL.md file.
Users of Microsoft Visual Studio can use the solution files within the vc directory.
These solution files will compile FCEUX and some included libraries for full functionality.
CMake has been depreciated in favor of scons. However, if you wish to use it you can find the old cmake build files in the ~attic.
fceux-2.2.2+dfsg0/NewPPUtests.txt 0000664 0000000 0000000 00000002515 12304671341 0016574 0 ustar 00root root 0000000 0000000 NewPPU tests
Bad
Nightshade (U) - flickering
Good
3-D Battles of World Runner, The (U)
8 Eyes
10 Yard fight
Advanced Dungeons and Dragons - Pool of Radiance
Adventures of Bayou Billy
Adventures of Lolo 1
Adventures of Lolo 2
Advenutres of Lolo 3
Akira
Akumajou secial - Boku Dracula-kun
Archon
Astyanax
Barbie
Bart vs the Space Mutants
Baseball
Batman - Return of the Joker
Battletoads
Battletoads & Double Dragon
Bee 52
Bible Adventures
Castlevania
Castlevania II: Simon's Quest
Castlevania III: Dracula's Curse
Championship Pool
Chessmaster
Circus Charlie
Contra (U)
Contra (J)
Dragon Warrior
Dragon Warrior III
Dragon Warrior IV
Double Dragon
Double Dragon 2
Double Dragon 3
Donky Kong Classics
Doki Doki panic
Dragon's Lair - [FIXED] Black screen for level 1 (music plays)
Duck Tales
Duck Tales
Earthworm Jim 2
Excitebike
Eggerland
Final Fantasy
Friday the 13th
Gauntlet
Gauntlet II
Legend of Zelda
Metroid
Mike Tyson's Punch-out!!/Punch-out!!
Power Blade
RBI Baseball
Rygar
Super C
Super Mario Bros 2 JPN
Super Mario Bros 2 USA
Super Mario Bros 3
Tecmobowl
Tecmo NBA Basketball (U)
Tecmo Super Bowl (U) [!] - [FIXED] Intro screen messed up, menus out of whack, Team selection screen bad, pre game screen, field is messed up.
TMNT
Transformers
Zanac
Zelda II: The Adventure of Link
fceux-2.2.2+dfsg0/README-SDL 0000664 0000000 0000000 00000012723 12304671341 0015134 0 ustar 00root root 0000000 0000000 FCEUX SDL 2.2.1 SDL README
==========================
By Lukas Sabota (sf: punkrockguy318)
http://www.fceux.com
Last Modified: March 10, 2013
Table of Contents
-----------------
1. Requirements
2. Installation
3. Compile-time options
4. GUI
5. LUA Scripting
5. FAQ
6. Contact
1 - Requirements
----------------
* libsdl1.2 - It is strongly recommended that you upgrade to the latest
version of sdl (1.2.15 at the time of writing).
* scons - Required to build fceux.
* libgtk2.0 (optional) - version >= 2.24 recommended
* libgtk3.0 (optional) - this compiles as of fceux 2.2.0
* liblua5.1 (optional)
* minizip (optional) - you may chose to use the version of minizip on your system by enabling SYSTEM_MINIZIP in the SConstruct
* c++ compiler -- you may use g++ from gcc or clang++ from llvm.
2 - Installation
----------------
Fceux can be compiled and built using the scons build system. To compile, run:
scons
After a sucessful compilation, the fceux binary will be generated to
./src/fceux . You can install fceux to your system with the following command:
scons install
You can optionally define a prefix:
scons --prefix=/usr/local install
You can choose to install the lua scripts (located in output/luaScripts) to a directory of your choosing:
cp -R output/luaScripts /usr/local/some/directory/that/i/will/find/later
If you would like to clean the temporary scons files to perform a 'make clean' like function, you can do the following:
scons -c && rm -rf .scon*
3 - Compile-time options
------------------------
You can enable and disable certain features of fceux at build time.
To edit these options, edit the "BoolOptions" following the "opts.AddVariables" method
at the head of the "SConstruct" file in this source directory. The
default options will be fine for most users, but power users may want to
tweak some of these options.
4 - GUI
-------
You can enable the GTK GUI by setting GTK to 1 in the SConstruct build file.
GfceuX is deprecatiated in favor of the new GTK GUI. You can disable the GTK GUI at
run-time by passing the --nogui option, or disable it at build-time by setting
GTK to 0 in the SConstruct file. If you prefer GTK3 to GTK2, you can set the
GTK3 BoolVariable to 1 in the SConstruct.
5 - LUA Scripting
-----------------
FCEUX provides a LUA 5.1 engine that allows for in-game scripting capabilities. LUA can be enabled or disabled at build time by adjusting the "LUA" BoolVariable in the SConstruct file.
A collection of LUA scripts are provided with the source distribuition in the output directory:
$source_directory/output/luaScripts
You should be able to run most of the scripts in this directory out of the box. However, some of the the lua scripts require functionality from the "auxlib.lua" library. This file can be copied from "./bin/auxlib.lua" or "./src/auxlib.lua". You will need to place this file in the LUA library search path if a script bombs out looking for auxlib.lua. If the script bombs out, the console output will let you know what the search path are (/usr/local/lib/lua/5.1/ on my particular system). You can simply copy the auxlib to a preferred location to utilize the functions in the auxiliary lua library.
In addition, some of the lua scripts require functionality from the "iup" GUI library. You can obtain binaries and source for "iup" upstream (http://www.tecgraf.puc-rio.br/iup/), but I would recommend obtaining packages from your Linux distribution if you are able, as it can be difficult to compile or get the binaries working correctly on a given system.
You will need to add the location that the libiup*.so files to the LUA_CPATH. This can be done with the following command (please note that the location where iup is installed with vary based on how you installed iup):
export LUA_CPATH="/path/to/iup/lib/lib?51.so;"
For example, if libiuplua51.so is located in '/usr/lib', you can run the following command before executing fceux to place the library in the search path:
export LUA_CPATH="/usr/lib/lib?51.so;"
Finally, if any scripts complaints about "attempt to index global 'iup' (a nil value)", this means that "iup" needs to be explicitly loaded into the script. You can add the following line to the head of script to manually load "iup":
require("iuplua")
The latest version of iup (3.5 at the time of writing) is recomended.
6 - FAQ
-------
* Q. Im having issues with my sound!
* A. First of all, for the best sound quality be sure you are using SDL 1.2.14 or later. Versions 1.2.13 and earlier are known to have problems with fceux! Next, try different SDL audio drivers to see if this makes any difference. You can do this by using this command before running fceux:
export SDL_AUDIODRIVER=driver
where driver is either: 'pulse' for pulseaudio;' alsa' for ALSA; 'dsp' for OSS; 'esd' for ESD; see SDL documentation for details (http://www.libsdl.org/docs/html/sdlenvvars.html)
There are sound options that you can tweak at runtime through command line switches:
* -soundq x internal sound quality hack value (0 off)
* -soundrate x sound rate (sane values: 28000 48000
* -soundbuffersize x (in ms) sane values (30, 50, 100, 120)
Running fceux through esddsp is known to fix some audio issues with pulseaudio on some older Ubuntu versions.
7 - Contact
-----------
If you have an issue with fceux, report it in the sourceforge bug tracker (see fceux.com). If you would like to contact the author of this readme personally, e-mail LTsmooth42 gmail com. You can also check us out at #fceu on irc.freenode.net.
fceux-2.2.2+dfsg0/SConstruct 0000664 0000000 0000000 00000022556 12304671341 0015673 0 ustar 00root root 0000000 0000000 #
# SConstruct - build script for the SDL port of fceux
#
# You can adjust the BoolVariables below to include/exclude features
# at compile-time. You may also use arguments to specify the parameters.
# ie: scons RELEASE=1 GTK3=1
#
# Use "scons" to compile and "scons install" to install.
#
import os
import sys
import platform
opts = Variables(None, ARGUMENTS)
opts.AddVariables(
BoolVariable('DEBUG', 'Build with debugging symbols', 0),
BoolVariable('RELEASE', 'Set to 1 to build for release', 1),
BoolVariable('FRAMESKIP', 'Enable frameskipping', 1),
BoolVariable('OPENGL', 'Enable OpenGL support', 1),
BoolVariable('LUA', 'Enable Lua support', 1),
BoolVariable('GTK', 'Enable GTK2 GUI (SDL only)', 1),
BoolVariable('GTK3', 'Enable GTK3 GUI (SDL only)', 0),
BoolVariable('NEWPPU', 'Enable new PPU core', 1),
BoolVariable('CREATE_AVI', 'Enable avi creation support (SDL only)', 1),
BoolVariable('LOGO', 'Enable a logoscreen when creating avis (SDL only)', 1),
BoolVariable('SYSTEM_LUA','Use system lua instead of static lua provided with fceux', 1),
BoolVariable('SYSTEM_MINIZIP', 'Use system minizip instead of static minizip provided with fceux', 0),
BoolVariable('LSB_FIRST', 'Least signficant byte first (non-PPC)', 1),
BoolVariable('CLANG', 'Compile with llvm-clang instead of gcc', 0),
BoolVariable('SDL2', 'Compile using SDL2 instead of SDL 1.2 (experimental/non-functional)', 0)
)
AddOption('--prefix', dest='prefix', type='string', nargs=1, action='store', metavar='DIR', help='installation prefix')
prefix = GetOption('prefix')
env = Environment(options = opts)
if env['RELEASE']:
env.Append(CPPDEFINES=["PUBLIC_RELEASE"])
env['DEBUG'] = 0
# LSB_FIRST must be off for PPC to compile
if platform.system == "ppc":
env['LSB_FIRST'] = 0
# Default compiler flags:
env.Append(CCFLAGS = ['-Wall', '-Wno-write-strings', '-Wno-sign-compare'])
if os.environ.has_key('PLATFORM'):
env.Replace(PLATFORM = os.environ['PLATFORM'])
if os.environ.has_key('CC'):
env.Replace(CC = os.environ['CC'])
if os.environ.has_key('CXX'):
env.Replace(CXX = os.environ['CXX'])
if os.environ.has_key('WINDRES'):
env.Replace(WINDRES = os.environ['WINDRES'])
if os.environ.has_key('CFLAGS'):
env.Append(CCFLAGS = os.environ['CFLAGS'].split())
if os.environ.has_key('CXXFLAGS'):
env.Append(CXXFLAGS = os.environ['CXXFLAGS'].split())
if os.environ.has_key('CPPFLAGS'):
env.Append(CPPFLAGS = os.environ['CPPFLAGS'].split())
if os.environ.has_key('LDFLAGS'):
env.Append(LINKFLAGS = os.environ['LDFLAGS'].split())
print "platform: ", env['PLATFORM']
# compile with clang
if env['CLANG']:
env.Replace(CC='clang')
env.Replace(CXX='clang++')
# special flags for cygwin
# we have to do this here so that the function and lib checks will go through mingw
if env['PLATFORM'] == 'cygwin':
env.Append(CCFLAGS = " -mno-cygwin")
env.Append(LINKFLAGS = " -mno-cygwin")
env['LIBS'] = ['wsock32'];
if env['PLATFORM'] == 'win32':
env.Append(CPPPATH = [".", "drivers/win/", "drivers/common/", "drivers/", "drivers/win/zlib", "drivers/win/directx", "drivers/win/lua/include"])
env.Append(CPPDEFINES = ["PSS_STYLE=2", "WIN32", "_USE_SHARED_MEMORY_", "NETWORK", "FCEUDEF_DEBUGGER", "NOMINMAX", "NEED_MINGW_HACKS", "_WIN32_IE=0x0600"])
env.Append(LIBS = ["rpcrt4", "comctl32", "vfw32", "winmm", "ws2_32", "comdlg32", "ole32", "gdi32", "htmlhelp"])
else:
conf = Configure(env)
# If libdw is available, compile in backward-cpp support
if conf.CheckLib('dw'):
conf.env.Append(CCFLAGS = "-DBACKWARD_HAS_DW=1")
conf.env.Append(LINKFLAGS = "-ldw")
if conf.CheckFunc('asprintf'):
conf.env.Append(CCFLAGS = "-DHAVE_ASPRINTF")
if env['SYSTEM_MINIZIP']:
assert conf.CheckLibWithHeader('minizip', 'minizip/unzip.h', 'C', 'unzOpen;', 1), "please install: libminizip"
assert conf.CheckLibWithHeader('z', 'zlib.h', 'c', 'inflate;', 1), "please install: zlib"
env.Append(CPPDEFINES=["_SYSTEM_MINIZIP"])
else:
assert conf.CheckLibWithHeader('z', 'zlib.h', 'c', 'inflate;', 1), "please install: zlib"
if env['SDL2']:
if not conf.CheckLib('SDL2'):
print 'Did not find libSDL2 or SDL2.lib, exiting!'
Exit(1)
env.Append(CPPDEFINES=["_SDL2"])
env.ParseConfig('pkg-config sdl2 --cflags --libs')
else:
if not conf.CheckLib('SDL'):
print 'Did not find libSDL or SDL.lib, exiting!'
Exit(1)
env.ParseConfig('sdl-config --cflags --libs')
if env['GTK']:
if not conf.CheckLib('gtk-x11-2.0'):
print 'Could not find libgtk-2.0, exiting!'
Exit(1)
# Add compiler and linker flags from pkg-config
config_string = 'pkg-config --cflags --libs gtk+-2.0'
if env['PLATFORM'] == 'darwin':
config_string = 'PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig/ ' + config_string
env.ParseConfig(config_string)
env.Append(CPPDEFINES=["_GTK2"])
env.Append(CCFLAGS = ["-D_GTK"])
if env['GTK3']:
# Add compiler and linker flags from pkg-config
config_string = 'pkg-config --cflags --libs gtk+-3.0'
if env['PLATFORM'] == 'darwin':
config_string = 'PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig/ ' + config_string
env.ParseConfig(config_string)
env.Append(CPPDEFINES=["_GTK3"])
env.Append(CCFLAGS = ["-D_GTK"])
### Lua platform defines
### Applies to all files even though only lua needs it, but should be ok
if env['LUA']:
env.Append(CPPDEFINES=["_S9XLUA_H"])
if env['PLATFORM'] == 'darwin':
# Define LUA_USE_MACOSX otherwise we can't bind external libs from lua
env.Append(CCFLAGS = ["-DLUA_USE_MACOSX"])
if env['PLATFORM'] == 'posix':
# If we're POSIX, we use LUA_USE_LINUX since that combines usual lua posix defines with dlfcn calls for dynamic library loading.
# Should work on any *nix
env.Append(CCFLAGS = ["-DLUA_USE_LINUX"])
lua_available = False
if conf.CheckLib('lua5.1'):
env.Append(LINKFLAGS = ["-ldl", "-llua5.1"])
env.Append(CCFLAGS = ["-I/usr/include/lua5.1"])
lua_available = True
elif conf.CheckLib('lua'):
env.Append(LINKFLAGS = ["-ldl", "-llua"])
env.Append(CCFLAGS = ["-I/usr/include/lua"])
lua_available = True
if lua_available == False:
print 'Could not find liblua, exiting!'
Exit(1)
# "--as-needed" no longer available on OSX (probably BSD as well? TODO: test)
if env['PLATFORM'] != 'darwin':
env.Append(LINKFLAGS=['-Wl,--as-needed'])
### Search for gd if we're not in Windows
if env['PLATFORM'] != 'win32' and env['PLATFORM'] != 'cygwin' and env['CREATE_AVI'] and env['LOGO']:
gd = conf.CheckLib('gd', autoadd=1)
if gd == 0:
env['LOGO'] = 0
print 'Did not find libgd, you won\'t be able to create a logo screen for your avis.'
if env['OPENGL'] and conf.CheckLibWithHeader('GL', 'GL/gl.h', 'c', autoadd=1):
conf.env.Append(CCFLAGS = "-DOPENGL")
conf.env.Append(CPPDEFINES = ['PSS_STYLE=1'])
env = conf.Finish()
if sys.byteorder == 'little' or env['PLATFORM'] == 'win32':
env.Append(CPPDEFINES = ['LSB_FIRST'])
if env['FRAMESKIP']:
env.Append(CPPDEFINES = ['FRAMESKIP'])
print "base CPPDEFINES:",env['CPPDEFINES']
print "base CCFLAGS:",env['CCFLAGS']
if env['DEBUG']:
env.Append(CPPDEFINES=["_DEBUG"], CCFLAGS = ['-g', '-O0'])
else:
env.Append(CCFLAGS = ['-O2'])
if env['PLATFORM'] != 'win32' and env['PLATFORM'] != 'cygwin' and env['CREATE_AVI']:
env.Append(CPPDEFINES=["CREATE_AVI"])
else:
env['CREATE_AVI']=0;
Export('env')
fceux = SConscript('src/SConscript')
env.Program(target="fceux-net-server", source=["fceux-server/server.cpp", "fceux-server/md5.cpp", "fceux-server/throttle.cpp"])
# Installation rules
if prefix == None:
prefix = "/usr/local"
exe_suffix = ''
if env['PLATFORM'] == 'win32':
exe_suffix = '.exe'
fceux_src = 'src/fceux' + exe_suffix
fceux_dst = 'bin/fceux' + exe_suffix
fceux_net_server_src = 'fceux-net-server' + exe_suffix
fceux_net_server_dst = 'bin/fceux-net-server' + exe_suffix
auxlib_src = 'src/auxlib.lua'
auxlib_dst = 'bin/auxlib.lua'
auxlib_inst_dst = prefix + '/share/fceux/auxlib.lua'
fceux_h_src = 'output/fceux.chm'
fceux_h_dst = 'bin/fceux.chm'
env.Command(fceux_h_dst, fceux_h_src, [Copy(fceux_h_dst, fceux_h_src)])
env.Command(fceux_dst, fceux_src, [Copy(fceux_dst, fceux_src)])
env.Command(fceux_net_server_dst, fceux_net_server_src, [Copy(fceux_net_server_dst, fceux_net_server_src)])
env.Command(auxlib_dst, auxlib_src, [Copy(auxlib_dst, auxlib_src)])
man_src = 'documentation/fceux.6'
man_net_src = 'documentation/fceux-net-server.6'
man_dst = prefix + '/share/man/man6/fceux.6'
man_net_dst = prefix + '/share/man/man6/fceux-net-server.6'
share_src = 'output/'
share_dst = prefix + '/share/fceux/'
image_src = 'fceux.png'
image_dst = prefix + '/share/pixmaps'
desktop_src = 'fceux.desktop'
desktop_dst = prefix + '/share/applications/'
env.Install(prefix + "/bin/", fceux)
env.Install(prefix + "/bin/", "fceux-net-server")
# TODO: Where to put auxlib on "scons install?"
env.Alias('install', env.Command(auxlib_inst_dst, auxlib_src, [Copy(auxlib_inst_dst, auxlib_src)]))
env.Alias('install', env.Command(share_dst, share_src, [Copy(share_dst, share_src)]))
env.Alias('install', env.Command(man_dst, man_src, [Copy(man_dst, man_src)]))
env.Alias('install', env.Command(man_net_dst, man_net_src, [Copy(man_net_dst, man_net_src)]))
env.Alias('install', env.Command(image_dst, image_src, [Copy(image_dst, image_src)]))
env.Alias('install', env.Command(desktop_dst, desktop_src, [Copy(desktop_dst, desktop_src)]))
env.Alias('install', (prefix + "/bin/"))
fceux-2.2.2+dfsg0/STYLE-GUIDELINES-SDL 0000664 0000000 0000000 00000001765 12304671341 0016531 0 ustar 00root root 0000000 0000000 FceuX-SDL Style Guidelines
=========================
Background
----------
While having style guidelines specific to a directory in a sourcetree is slightly riddiculous, fceuX has a unique elaborate history of the code. I (prg318) have ressurected the majority of the SDL port code and tried to keep some aspects of the style consistant (although not many aspects were that consistent to begin with due to the amount of different people who have contributed to this codebase). Much of the SDL code is compliant to these guidelines so please use this guidelines when going forth and making contributions in src/drivers/sdl.
Tabs
----
Hard tabs only! Please! src/drivers/sdl/* entirely consists of hard tabbed code. Please continue to use this convention. Consult the documentation of your text editor documentation for instructions on how to this with your editor.
Return Statements
-----------------
Please use the "return 0;" style return statements instead of the "return(0);" style return statements.
fceux-2.2.2+dfsg0/TODO-SDL 0000664 0000000 0000000 00000004242 12304671341 0014741 0 ustar 00root root 0000000 0000000 Priorities
==========
* SDL 2.0 RC is released - SDL2.0 compatibility is a goal
* Backwards-cpp still has an issue with clang++; look into this
* Users are reporting crashing issues with hotkey dialog (probably because its a mess!). A huge chunk of the hotkey code should be rewritten (GUI and hotkey structs - or lack there-of)
* GTK File menu quit element has "CTRL-Q" accelerator. This causes confusion with there being another SDL Hotkey for quit. This should be addressed.
* Quit was mapped to '0' to prevent users from accidently quitting. Perhaps a default quit combo could be used.
Features
========
* SDL.Vsync
* lets wait on this -- theres no simple way to use the OS default in SDL unless we just dont touch it, which might be the best thing to do here.
GTK
===
* Better on-the-fly video resizing with window resize / video config
* Smarter video config (disable widgets that are not used when openGL is enabled)
* Options to investigate:
* bpp
* scanlines
* GUI Cheat editor
SDL 2.0
=======
* segfaults when opening a second game
* segfaults on fullscreen entry
* has not been tested in a while
BUGS
====
* F1 from terminal-less gui fceux process hangs fceux (since input is required from console in cheat editor)
OS X
====
* Single window mode does not work (the XWINDOWID hack does not work in Apples X11 server, so this may never get fixed).
* It is possible to use GTK to build native OS X menus: http://developer.gnome.org/gtk3/3.4/GtkApplication.html . It would be awesome to do this and hide the main GTK window if the top bar is available
* Zapper input is taken from GTK window instead of X11 window (a workaround could be implemented to resolve with with some #ifdef APPLE etc)
* Not an "official" target, but testing should be done before release on OS X
* DMG Static binary download for Intel OS X
* Include needful libaries
* Adjust scons to produce static binary/libraries with an option
* http://www.scons.org/wiki/StaticallyLink
DOCS
====
* Be sure to include details about new scons features for package maintainers so that the manpage, luascripts, and auxlib will be included in future packages
* Docs REALLY need a cleanup/rewrite
fceux-2.2.2+dfsg0/changelog.txt 0000664 0000000 0000000 00000223511 12304671341 0016323 0 ustar 00root root 0000000 0000000
23-Sep-2013 - AnS - Tracer: do not clear window log when stopping the logging
22-Sep-2013 - AnS - Tracer: the dialog window can be resized
21-Sep-2013 - AnS - Debugger: newly created Bookmarks inherit existing symbolic name by default
20-Sep-2013 - AnS - Debugger, Tracer: clicking on Symbolic names works as well as clicking on addresses
17-Sep-2013 - zeromus - fixed "Single Instance Mode"
16-Sep-2013 - AnS - PPU Viewer: added "Mask unused graphics" and "Invert the mask" checkboxes; fixed window layout when using big fonts
15-Sep-2013 - feos - Lua: added tobitstring(), memory.readword(int address1 [, int address2]), memory.readwordsigned(int address1 [, int address2]) functions
15-Sep-2013 - CaH4e3 - mapper 002 - workaround for "Top Gun" issue #621, needs testing if this broke something else; mapper 012 - added hardware dip for language select; UNIF PEC-586 - fixed render finally, added 512K cartridges suppport, TODO: PEC keyboard
13-Sep-2013 - AnS - debuggerFontSize and hexeditorFontSize can be specified in fceux.cfg
13-Sep-2013 - AnS - Debugger: "Symbolic Debug" state is now saved in global fceux.cfg instead of different .deb files
12-Sep-2013 - AnS - Tracer: added mouse wheel support
12-Sep-2013 - AnS - Tracer: clicking any address select the address; double-clicking any address brings Debugger at the address
12-Sep-2013 - AnS - Tracer: added Symbolic Debug naming by right-clicking any address
10-Sep-2013 - feos - Hexeditor: Symbolic Debug naming by right-clicking address
10-Sep-2013 - AnS - Debugger: added Symbolic Debug naming by right-clicking any address
05-Sep-2013 - AnS - Debugger: fixed Cycles counter reset when loading an earlier savestate
15-Aug-2013 - CaH4e3 - fixed bandai mapper emulation
04-Aug-2013 - AnS - Hexeditor: added "Highlighting" submenu and "Highlight Activity" feature
04-Aug-2013 - AnS - Taseditor: an experiment with somewhat different colors for HotChanges
04-Aug-2013 - AnS - Auto-disable "Game Genie ROM" feature when no "gg.rom" file is found
16-Jul-2013 - AnS - Debugger: highlight PC pointer line when a breakpoint is hit
05-Jul-2013 - AnS - RAM Search: added "Hex Editor" button and right-click
04-Jul-2013 - AnS - Debugger: added CDL data column in place of left panel. It helps to distinguish executed branches of code from not logged code
04-Jul-2013 - AnS - Debugger: clever autoscrolling when stepping/seeking to PC. It maintains relative position of the ">" pointer inside the Disassembly window
03-Jul-2013 - AnS - RAM Watch: fixed epic bug when contents of old .wch file mixed with the newly saved data because of "r+b" mode (changed it to "w+b")
03-Jul-2013 - AnS - Taseditor: Greenzone: always keep Greenzone.lagLog in touch with history.currentSnapshot.laglog (fixes workflow with "Auto-adjust" disabled)
03-Jul-2013 - AnS - Tracer: only output "from $XXXX" when the subroutine was called by JSR (fixes possible errors in those cases when the subroutine was called using stack magic)
03-Jul-2013 - AnS - Debugger: do not reload ram.nl every time automatically
21-Jun-2013 - CaH4e3 - PPU Viewer: when CDLogger is on, display unused graphics in a dim palette
15-Jun-2013 - AnS - Movie recording: fixed bug when emulator allowed recording commands outside the range of FM2 specs
15-Jun-2013 - AnS - Movie recording: added ability to record "Insert coin" command (for VS games)
15-Jun-2013 - AnS - Movie recording: remember last Author name when creating a new movie
08-Jun-2013 - AnS - A couple of fixes which deal with "multiple ROMs in a single archive" case. The loading procedure now takes into account actual ROM name when loading ROM from an archive containing multiple files. This affects PAL/NTSC detection (in case there were ROMs of different regions inside a single zip). Also, "auto-resume play" now loads actual ROM on startup (instead of prompting a list of archived files to choose). Also, NL files (symbolic debug) are named correctly when debugging a ROM from such an archive, etc.
08-Jun-2013 - AnS - Hexeditor: fixed bugs when saving files while working with ROMs in archives
27-May-2013 - AnS - Hexeditor: specify Data bank condition when adding a Breakpoint by context menu
26-May-2013 - AnS - Debugger: added 'T' condition (checks the bank of the data accessed)
26-May-2013 - AnS - Win32: fixed storing and loading .deb files when working with archived ROMs
26-May-2013 - AnS - new Lua functions: debugger.hitbreakpoint(), debugger.getcyclescount(), debugger.getinstructionscount(), debugger.resetcyclescount(), debugger.resetinstructionscount()
26-May-2013 - AnS - Win32: when no script is currently running, Shift+L loads the most recent Lua script
26-May-2013 - CaH4e3 - fixed mapper 183
14-May-2013 - CaH4e3 - fixed mapper 253
13-May-2013 - CaH4e3 - mapper 43
09-May-2013 - AnS - Video config: changed "Disable hardware acceleration" option to a drop-down list with 3 options: a) No hardware acceleration; b) Create surface in RAM; c) Hardware acceleration. Because it appears that some video cards still blur textures even when stored in RAM.
29-Apr-2013 - AnS - added checking if archive file has any files in it, because new 7z.dll confuses FDS files with archives (it recognizes the first "F" as a signature of an archive)
19-Apr-2013 - AnS - Video config: added "Square pixels" option
19-Apr-2013 - AnS - Video config: added aspect ratio fields for customizing "TV Aspect" ratio, by default it's 4:3
17-Apr-2013 - AnS - "Auto-resume old play session" now also works with NSFs
17-Apr-2013 - zeromus - properly savestate NSF
17-Apr-2013 - zeromus - add missing mmc5 savestate variables
16-Apr-2013 - AnS - Tracer: added "Log Cycles count" and "Log Instructions count" options
13-Apr-2013 - AnS - Debugger: scrolling up/down by whole instructions
12-Apr-2013 - gocha - Lua: fix wrong frequency calculation in sound.get()
07-Apr-2013 - AnS - Taseditor: comply with Lua movie.rerecordcounting() setting
01-Apr-2013 - CaH4e3 - mapper 154 - fixed
26-Mar-2013 - CaH4e3 - mapper 53 - supported ines format of SUPERVISION UNIF board; UNIF 8157 - fix according to hw; UNIF T-262 - fix according to hw
24-Mar-2013 - CaH4e3 - UNIF DANCE2000 - now emulated properly
20-Mar-2013 - gocha - link to lua51.dll instead of static linking
19-Mar-2013 - zeromus - bring some improvements to newppu from bizhawk, and fix vtoggle5/6 back to vtoggle
19-Mar-2013 - zeromus - fix mapper 28
17-Mar-2013 - AnS - Replay: removed redundant window update when using "Browse" (fixes #585)
17-Mar-2013 - CaH4e3 - UNIF DSOUNDV1 - removed due to duplicate of 178 mapper; mapper 178 - added more features of 8/16M carts with 32K SRAM; UNIF 09-034A - added support for a new SMB2j Lite version
14-Mar-2013 - AnS - Debugger: ported "smart scrolling" from an obscure version of FCEUXD 1.1
14-Mar-2013 - CaH4e3 - palette ram reading fix for old ppu
---r2869 - FCEUX 2.2.1 Released---
---March 10 2013---
10-Mar-2013 - prg - SDL: added option to use system minizip
10-Mar-2013 - prg - updated to use minizip v1.2.7
10-Mar-2013 - CaH4e3 - CDLogger: improved CHR logging, now it also logs the data when using Old PPU
02-Mar-2013 - AnS - Hexeditor: fixed ROM coloring when using CDLogger data
28-Feb-2013 - AnS - PPU/PAL/Input type changing is now disabled when a movie is playing
28-Feb-2013 - AnS - Cheats: update the window when ROM is changed
28-Feb-2013 - AnS - show the number of active cheats when a ROM is loaded
27-Feb-2013 - CaH4e3 - CDLogger: added "Auto-load .CDL when opening the window" option
27-Feb-2013 - CaH4e3 - MMC5 refixed
24-Feb-2013 - AnS - CDLogger: added "Auto-save .CDL when closing ROMs" and "Auto-resume logging when loading ROMs" options
23-Feb-2013 - AnS - Hexeditor: show symbolic names in the window caption
18-Feb-2013 - CaH4e3 - various mapper improvements; UNIF MALISB - Mali Splash Bomb dump; mapper 19 - Dream Master mirror fix
18-Feb-2013 - CaH4e3 - fixed mapper 69 low quality sound issue
11-Feb-2013 - AnS - fixed possible crash when saving the ROM in Hex Editor
11-Feb-2013 - AnS - Moved "Config->Game Genie" to "Config->Enable->Game Genie ROM"
03-Feb-2013 - AnS - win32: speed up screen blitting
02-Feb-2013 - AnS - Added "TV Aspect (4:3)" to Video Config
21-Jan-2013 - AnS - Taseditor: fixed Bookmarks List height on Windows 7
21-Jan-2013 - AnS - Taseditor: fixed bug with adding new item to History Log
20-Jan-2013 - AnS - Taseditor: changed the logic by which the Piano Roll follows Playback cursor, now it doesn't follow it while seeking
15-Jan-2013 - AnS - Lua: removed "shadow pixels" from gui.text(), made gui.parsecolor() function available for users
10-Jan-2013 - AnS - Taseditor: Config->Project file saving options
01-Jan-2013 - zeromus - NameTableViewer: do something reasonable if a 4-screen, table2, table3 mirror mode is chosen when the corresponding nametable ram is not available on the cart (instead of crashing)
31-Dec-2012 - CaH4e3 - fixed mappers 24, 26, 115
29-Dec-2012 - AnS - Taseditor: Changed "Compact save" dialog, added 4 options of Greenzone saving
29-Dec-2012 - AnS - Cheats: added "Add from CHT file..." button
29-Dec-2012 - AnS - win32: force the entire client area to be invalidated at the beginning of WM_PAINT; this fixes the rare bug with DIRECTDRAWCLIPPER sometimes calculating wrong region (was noticed on some video cards)
27-Dec-2012 - AnS - Play movie dialog shows New PPU in red if the required setting does not match
27-Dec-2012 - thezlomus - RAM Search: added "Search ROM" checkbox
19-Dec-2012 - AnS - win32: remodel "Video config" dialog
19-Dec-2012 - AnS - win32: fixed restoring maximized window after switching from fullscreen
18-Dec-2012 - CaH4e3 - fixed mapper 018 and 198
15-Dec-2012 - AnS - win32: added Config->Enable->Auto-resume old play session
13-Dec-2012 - AnS - win32: added Emulation Speed->Set custom speed for FrameAdvance
13-Dec-2012 - AnS - win32: added NES->Emulation Speed->Set FrameAdvance Delay
13-Dec-2012 - AnS - win32: added NES->Emulation Speed->Set Custom Speed
12-Dec-2012 - CaH4e3 - finish with mapper to boards conversion
07-Dec-2012 - CaH4e3 - Tracer: fixed RAM-located code logging when CDLogger options are enabled
05-Dec-2012 - AnS - fixed zapper and mouse positioning in fullscreen
04-Dec-2012 - AnS - speed up HUD text drawing
04-Dec-2012 - AnS - Taseditor: speed up consecutive Recordings (when combining)
03-Dec-2012 - AnS - Taseditor: fixed accelerators when editing Notes
03-Dec-2012 - AnS - fixed "X" button in the "Enter New Input" dialog (Hotkey Mapping); changed "Cancel" button to "OK"
03-Dec-2012 - CaH4e3 - fixed mapper 99
29-Nov-2012 - zeromus - fix "you ling xing dong" by assigning to mapper 192
---r2768 - FCEUX 2.2.0 Released---
---November 27 2012---
24-Nov-2012 - AnS - when the New PPU is on, it displays "(NewPPU)" in the window caption
20-Nov-2012 - AnS - Taseditor: added "Ungreenzone" item to context menu; added "Config->Enable Greenzoning"
13-Nov-2012 - AnS - Taseditor: changed fm3 format to version 3
10-Nov-2012 - AnS - win32 hotkeys mapping: added the condition that both commands must have the same EMUCMDFLAG_TASEDITOR, or else they are not considered conflicting
10-Nov-2012 - AnS - win32 hotkeys: disallow unwanted hits of e.g. F1 after pressing Shift+F1 and quickly releasing Shift
05-Nov-2012 - zeromus - support mapper 028
05-Nov-2012 - AnS - Taseditor: fixed lag adjustments when dealing with previously unknown lag state
30-Oct-2012 - zeromus - default stack pointer to $FD instead of $FF
29-Oct-2012 - CaH4e3 - mapper 252 added
29-Oct-2012 - AnS - Taseditor: update RAM Search and RAM Watch when jumping causes game state to change
21-Oct-2012 - CaH4e3 - sync mappers with fceu-mm
30-Sep-2012 - AnS - added "(Europe)" and "(PAL)" strings to region detection
28-Sep-2012 - AnS - Hexeditor: Ctrl+F opens Find dialog
28-Sep-2012 - AnS - Hexeditor: display 0x5000-0x5FFF contents
28-Sep-2012 - AnS - Tracer: fixed crash when logging undefined opcodes
26-Sep-2012 - AnS - Debugger: "Name" button in Bookmarks, total revamp of Bookmarks
26-Sep-2012 - AnS - Debugger: single click on any address copies this address to the "Seek To" field and "Bookmark Add" field
26-Sep-2012 - AnS - Fixed replay engine bug that doubles the last input of the movie
26-Sep-2012 - AnS - Tracer: "RTS" instructions now output the subroutine address/name
23-Sep-2012 - AnS - Lua: clear previous frame drawings at the beginning of every frame
23-Sep-2012 - AnS - Debugger: fixed mouseover when using Symbolic debug; mouseover works for the disassembly window too
23-Sep-2012 - CaH4e3 - CDLogger: Now can log VROM access (CHR banks of the ROM) when NewPPU is enabled
22-Sep-2012 - AnS - Tracer: added "Symbolic trace", "Log current Frame number", "Log emulator messages", "Log breakpoint hits" options
11-Sep-2012 - AnS - new Lua function: emu.setlagflag()
11-Sep-2012 - AnS - Debugger: deleting a breakpoint leaves selection in the Breakpoints list
06-Sep-2012 - AnS - added "Use Custom Palette" checkbox to Palette config
06-Sep-2012 - AnS - Debugger: special strings (NMI/IRQ/etc) can be also used in "Seek To" field and Bookmarks
01-Sep-2012 - AnS - fixed movie savestates logic, loading post-movie savestates is not allowed in read-only
31-Aug-2012 - zeromus - update mapper 156 from fceu-mm sources
30-Aug-2012 - AnS - fixed savestates filenaming bug when working with a movie
29-Aug-2012 - AnS - added "Force Grayscale" checkbox to Palette config
26-Aug-2012 - AnS - Taseditor: History Log highlights items related to current item
25-Aug-2012 - AnS - Taseditor: fixed AdjustLag feature and changed fm3 version to v2
22-Aug-2012 - AnS - added "Clear" button to Message Log
20-Aug-2012 - AnS - "Switch fullscreen by double-click" option in GUI config
20-Aug-2012 - AnS - "Hide mouse cursor" and "Use console BG color for empty areas" options
20-Aug-2012 - AnS - total revamp of Video config stuff, Best Fit also works for fullscreen mode
19-Aug-2012 - AnS - win32: "Maintain aspect ratio (best fit)" option in Video config
12-Aug-2012 - AnS - Debugger: "Display ROM offsets" option
12-Aug-2012 - AnS - Debugger: double-click breakpoint also adds current bank number to breakpoint condition
12-Aug-2012 - AnS - Added FPS display to Win32 port (Config->Display->FPS)
10-Aug-2012 - prg - gtk: reset video on video dialog close
10-Aug-2012 - prg - gtk: add gui option for showfps
10-Aug-2012 - prg - sdl: add runtime option for controling drawing fps (SDL.ShowFPS)
10-Aug-2012 - prg - core: move showfps from build option to runtime option
10-Aug-2012 - prg - sdl: fix and enable SHOWFPS build option (TODO: make runtime option)
10-Aug-2012 - AnS - Debugger: "Address Bookmark Add" field follows disassembly window scrolling position
08-Aug-2012 - AnS - Taseditor: frame counter display is auto-on when Taseditor launches
08-Aug-2012 - AnS - Debugger: improved stack display
08-Aug-2012 - AnS - Debugger: doubleclick on the disassembly prompts "Add Execute breakpoint" dialog
08-Aug-2012 - AnS - Debugger: fixed RAM peek by a rightclick on left pane
08-Aug-2012 - AnS - Debugger: ">" points at current line in disassembly
08-Aug-2012 - AnS - Debugger: show the number of breakpoints (enabled and total) above the breakpoints list
06-Aug-2012 - CaH4e3 - fixed bug when loading UNF games (#525 )
06-Aug-2012 - AnS - Tracer also updates its window when user pauses the game, not just when Debugger snaps
06-Aug-2012 - AnS - Tracer: added "Use Stack Pointer for code tabbing" option and added "To the left from disassembly text" option
05-Aug-2012 - AnS - Debugger: .DEB file now also stores the state of "Break on Bad Opcode" and "Break when exceed" checkboxes/editfields
05-Aug-2012 - AnS - Debugger: added "CPU cycles" and "Instructions" counters (request #527) and added "Break when exceed" breakpoints
05-Aug-2012 - AnS - Debugger: window layout cleanup
06-Aug-2012 - prg - gtk: added hotkey gui config
04-Aug-2012 - prg - all: updated FSF address
04-Aug-2012 - prg - sdl: added SDL.Input.EnableOppositeDirectional option. allows/disallows simultaneous right+left / up+down.
03-Aug-2012 - AnS - Debugger: highlighting breakpoint item in BPs list when it's triggered
03-Aug-2012 - AnS - Debugger: allow Frame Advancing when Debugger is in breakpoint state
03-Aug-2012 - AnS - Debugger: don't update Debugger window at the beginning of Step command (it will update at at the end of Step) - fixes #528
25-Jul-2012 - AnS - Taseditor: auto-starting Note editing when creating Marker by double-click
19-Jul-2012 - AnS - Taseditor: Lua registermanual allows changing the "Run function" button caption; Markers are always restored when deploying Bookmarks
01-Jul-2012 - AnS - new hotkey "Run Manual Lua function"
24-Jun-2012 - AnS - Taseditor: drawing selected_slot border in Branches Tree
24-Jun-2012 - zeromus - add ability for CNROM games to choose whether they have bus conflicts (fixes Colorful Dragon (Unl) (Sachen), since it flakes out if bus conflicts are emulated)
23-Jun-2012 - zeromus - add m116 from fceu-mm; fix mapper 178 big PRG support
20-Jun-2012 - zeromus - fix savestate engine to throw errors when a buggy SFORMAT is passed to AddExState, and fix those errors in m015 and m253
19-Jun-2012 - AnS - added TASEDITOR type of hotkeys
19-Jun-2012 - AnS - Taseditor: 2 new hotkeys: "Switch Auto-restoring" (Ctrl+Spacebar), "Switch current Multitracking mode" (W)
16-Jun-2012 - AnS - Taseditor: drawing patterns with Alt held; no more row_last_clicked
15-Jun-2012 - AnS - Taseditor: added "rewatch from Selection to Playback" feature for Ctrl+middle click action
14-Jun-2012 - AnS - Taseditor: combining consecutive AdjustLag operations
13-Jun-2012 - AnS - Taseditor: truncated Greenzone is drawn by pale colors, not just white
12-Jun-2012 - AnS - Taseditor: "Auto-adjust Input due to lag" checkbox
11-Jun-2012 - AnS - Taseditor: green arrow doesn't disappear when Playback cursor goes through it
11-Jun-2012 - AnS - Taseditor: changed icons column in Piano Roll, now can show both Bookmark and arrow
09-Jun-2012 - zeromus - win32-support funny languages for opening roms, through drag&drop, at least
06-Jun-2012 - AnS - Taseditor: small fix for Branches Tree - among bookmarks with equal jump_frame the cursor must be pointing at current branch
06-Jun-2012 - zeromus - support mapper 176. mapper 176 no longer maps to BMCFK23C. BMCFK23C is still accessible through crc or unif? test case would be welcome. it is unclear to me why mapper 176 control was removed from 176.cpp and given to BMCFK23C
06-Jun-2012 - AnS - Taseditor: autosave works only when project has a filename
26-May-2012 - AnS - Taseditor: Ctrl+Space accelerator = toggle "Auto-restore last position" checkbox; remapped "Restore Playback" hotkey to Spacebar; "Restore Playback" also pauses seeking; mid-click = "Restore Playback" when possible
08-May-2012 - AnS - Taseditor: changed "lost_position" logic
01-May-2012 - AnS - Lua functions emu.pause() and emu.unpause() don't yield and don't reset emulator speed anymore
30-Apr-2012 - AnS - Taseditor: Ctrl + mid click = run to Selection cursor; Shift + mid click = run to nearest Marker
26-Apr-2012 - AnS - Taseditor: fixed filename logic when user creates project from an fm2 or a corrupted fm3
23-Apr-2012 - AnS - Taseditor: menus overhaul
19-Apr-2012 - AnS - RAM Watch: fixed loading Data Size and Data Type from a .wch, now corrupted .wch won't crash
17-Apr-2012 - zeromus - fix bug in mapper 164 savestates which caused wram to be lost, also make mapper 164 sram work
17-Apr-2012 - AnS - Taseditor: gradual History Log autocompression when idle
14-Apr-2012 - zeromus - add hash database entry for Rasaaru Ishii no Childs Quest (J), whose extant roms specify both the wrong mapper and the wrong mirroring
14-Apr-2012 - zeromus - change mapper 12 (mmc3 variant) to specify MMC3A chip version
14-Apr-2012 - AnS - Taseditor: rightclicks in Branches Tree
14-Apr-2012 - AnS - "Play Movie" dialog doesn't search in fceux root folder anymore
10-Apr-2012 - AnS - bold items in some context menus
10-Apr-2012 - zeromus - fix mapper 115 (actually to fix mapper 248 for Bao Qing Tian)
09-Apr-2012 - zeromus - remove vram protection from mapper 227
09-Apr-2012 - AnS - Taseditor: all GUI buttons fire off at mousedown; disabled Spacebar and enabled Middle mouse button on GUI buttons
09-Apr-2012 - AnS - Taseditor: clicks in Branches Tree
07-Apr-2012 - AnS - Taseditor: version data in fm3
07-Apr-2012 - AnS - Taseditor: much better way of calculating Branches Tree; hinting full timelines; miniarrow showing current Playback cursor position in Branches Tree; "Bookmark#" modtype, undo/redo works for Bookmarks
07-Apr-2012 - AnS - Taseditor: applying PAL and PPU flags when loading projects
05-Apr-2012 - zeromus - fix mapper 242 (dragon quest 8 UNL)
26-Mar-2012 - AnS - Taseditor: Alt+Wheel = jump across gaps in Input/Markers
25-Mar-2012 - AnS - returned default mapping of Frame Advance hotkey to Backslash
25-Mar-2012 - AnS - Taseditor: BookmarksList clicks apply on buttonup only
22-Mar-2012 - AnS - Config->Combine consecutive Recordings/Draws
18-Mar-2012 - AnS - new hotkey "Cancel Seeking (TAS Editor)" (Esc)
18-Mar-2012 - AnS - Taseditor: Config->Autopause at the end of Movie
17-Mar-2012 - CaH4e3 - varous bugfixes, xstring trimming functions logic bugs, etc
17-Mar-2012 - AnS - Taseditor: showing row_last_clicked when Shift or Alt is held
17-Mar-2012 - AnS - Taseditor: no more "allow keys in Piano Roll"; new accelerators: Ctrl + arrows, Shift + arrows, Home/End/Page Up/Page Down, Ctrl + Home/End, Shift + Home/End
17-Mar-2012 - AnS - Taseditor: selection by dragging from Frame#
17-Mar-2012 - AnS - Taseditor: set/pick Markers by doubleclick, throw Markers away
14-Mar-2012 - AnS - Taseditor: drawing input; holding Shift when drawing
14-Mar-2012 - AnS - Taseditor: fixed known WinXP bug with scrollbar arrows
14-Mar-2012 - AnS - Taseditor: moving Markers by drag'n'drop, "Marker Drag" and "Marker Swap" operations
14-Mar-2012 - AnS - Taseditor: dragging blue arrow (moving Playback cursor)
14-Mar-2012 - AnS - Taseditor: observing Piano Roll by dragging cursor outside
11-Mar-2012 - AnS - Taseditor: double-tapping Shift/Ctrl scrolls Piano Roll to respective cursor
09-Mar-2012 - AnS - Taseditor: Config->Deselect on doubleclick
09-Mar-2012 - AnS - Taseditor: checking ROM checksum when saving/loading projects
09-Mar-2012 - AnS - Taseditor: TAS Editor can have mouse wheel input even when keyboard focus is on FCEUX window
09-Mar-2012 - AnS - disabled FCEUX context menu when TAS Editor is engaged
06-mar-2012 - prg - fceux no longer segfaults when opening gamepadconfig with GTK < 2.24 - a message is printed to the console
06-mar-2012 - prg - supports loading of configuration files in $FCEUXDIR/cfg.d/*
01-Mar-2012 - AnS - Taseditor: changing history size doesn't reset history
28-feb-2012 - AnS - Taseditor: "Deselect" option in menus
26-feb-2012 - AnS - Small save/load state speedup, noticeable only in TAS Editor or lua bots
21-feb-2012 - AnS - Taseditor: header lights on mouseover
21-feb-2012 - AnS - Taseditor: registering click at buttondown; Alt+click on input = set pattern
20-feb-2012 - AnS - Taseditor: Right button + wheel = Playback rewind/forward; Shift/Ctrl + wheel = jump via Markers with Playback/Selection cursor
20-feb-2012 - AnS - Taseditor: middle button pauses/unpauses emulation
18-feb-2012 - AnS - PATTERNS menu, loading data from "tools\taseditor_patterns.txt"
18-feb-2012 - AnS - "Use pattern" checkbox in Recorder; Config->ColumnSet Pattern skips Lag
18-feb-2012 - AnS - Taseditor: "Frame#" lights when Alt key is being held, not entering menu by Alt
18-feb-2012 - AnS - Changed some checkboxes to radiobuttons in FCEUX menu
13-feb-2012 - AnS - Taseditor: when clicking text fields, Piano Roll scrolls to corresponding Marker, not to cursor
13-feb-2012 - AnS - Replay dialog speedup, now movie is not loaded into memory when checking md5
06-feb-2012 - AnS - new Lua scripts: SoundDisplay.lua, TrackNoise.lua
06-feb-2012 - AnS - refined Recording, now can safely record commands (Power, Reset, Insert, Switch)
02-feb-2012 - AnS - uploaded HelpNDoc3 project file
02-feb-2012 - AnS - added Lua scripts demonstrating some TAS Editor library functions
02-feb-2012 - AnS - new Lua function in TAS Editor library: getsuperimpose()
02-feb-2012 - AnS - new Lua function in Joypad library: getimmediate()
30-jan-2012 - AnS - Taseditor: 9 new Lua functions in TAS Editor library
30-jan-2012 - AnS - Taseditor: Added "Restore Playback (TAS Editor)" hotkey (Enter by default)
30-jan-2012 - AnS - Taseditor: Help->Show Tooltips
30-jan-2012 - AnS - Taseditor: quicksave/quickload hotkeys save/load current branch
23-jan-2012 - prg - sdl: pause will now show/ungrab cursor in fullscreen. this can be disabled with the SDL.NoFullscreenCursor option
12-jan-2012 - AnS - Tasedit: File->New Project, INPUT_TYPE_1P
12-jan-2012 - AnS - Tasedit: resizing TAS Editor window
08-jan-2012 - prg - sdl: switched advance one frame key from "\" to "`"
08-jan-2012 - AnS - changed default mapping of Frame Advance to Tilde
08-jan-2012 - AnS - fixed recording bug where "length" tag appeared in fm2s
08-jan-2012 - AnS - Tasedit: Lua panel; 5 new Lua functions
08-jan-2012 - AnS - Tasedit: refactoring; Config->Silent autosave
04-jan-2012 - AnS - Tasedit: colored marker captions; pale yellow and bright yellow when "Bind Markers" is off/on
27-dec-2011 - AnS - Tasedit: "About" window
27-dec-2011 - AnS - Tasedit: searching Markers with similar Notes ("Similar" and "More" buttons)
26-dec-2011 - AnS - Tasedit: Find Note dialog (Ctrl-F)
26-dec-2011 - AnS - new Lua functions (TAS Editor library)
19-dec-2011 - AnS - Tasedit: listview header lights
19-dec-2011 - AnS - Tasedit: Recording checkbox instead of radiobutton; Config->Use Input keys for ColumnSet
19-dec-2011 - AnS - Tasedit: Export dialog: "Convert Marker Notes to Movie Subtitles"
16-dec-2011 - AnS - Tasedit: new accelerators: Ctrl-PgUp/Ctrl-PgDn/Shift-PgUp/Shift-PgDn; Config->Allow keyboard controls in Listview
16-dec-2011 - AnS - Tasedit: View->Display Branch Tooltips
16-dec-2011 - AnS - Tasedit: Markers notes; View->Follow Marker Note context
16-dec-2011 - AnS - changed ".tas" extension to ".fm3"
10-dec-2011 - AnS - loading TAS Editor projects by drag-n-drop
10-dec-2011 - AnS - Tasedit: File->Save Compact dialog
09-dec-2011 - AnS - Replaying TAS Editor project files in FCEUX (win32 and SDL)
07-dec-2011 - AnS - disabled changing PPU/PAL/input_type when Taseditor is engaged
07-dec-2011 - AnS - Tasedit: File->Recent projects
07-dec-2011 - AnS - enhanced Reload hotkey (Ctrl-F1), now it loads last ROM or last TAS Editor project
05-dec-2011 - AnS - Tasedit: Import input, Export to FM2
04-dec-2011 - AnS - Tasedit: branches autofind best parent, "Set Marker"/"Remove marker" in context menu, checking clipboard at selection.init() and retrieving info
29-nov-2011 - AnS - Tasedit: MsgBox about not working with movies starting from savestate
26-nov-2011 - aquanull - win32: fixed graphic-tearing WITH vertical sync enabled in windowed mode. It used to wait for V-Blank too early so that the V-Blank would end too soon before the blitting could be finished.
26-nov-2011 - AnS - Fixed crash when using machine with no sound card
26-nov-2011 - zeromus - Fixed wrong default palette entry
25-nov-2011 - zeromus - add nestopia palette files
25-nov-2011 - AnS - Tasedit: selection << and >>, Turbo Seek checkbox, PasteInsert, Config->Superimpose affects copy/paste, Editing info texts
23-nov-2011 - zeromus - fix [3441099] printf bug in SwapSaveState()
21-nov-2011 - AnS - Tasedit: multitrack recording, "Superimpose" checkbox, Config->Use 1P keys for all single recordings, Config->Combine consecutive Recordings
19-nov-2011 - AnS - Tasedit: selection strobe, soft reset and power switch messages, messages when saving/loading Branches
17-nov-2011 - AnS - Tasedit: selection history, undo/redo, Reselect Clipboard, saving/loading selection history to .tas
17-nov-2011 - AnS - Tasedit: input hotchanges
14-nov-2011 - zeromus - straighten out bandai m159/m016 handling and add valid null-EEPROM emulation to get those games booting.
12-nov-2011 - adelikat - win32 - cheat search - slight GUI tweak
12-nov-2011 - AnS - Tasedit: project autosaving
10-nov-2011 - AnS - Tasedit: Branches show saved screenshot on mouseover (alpha-fade popup window)
7-nov-2011 - AnS - Tasedit: Drawing Branches Tree (using GDI), animations, transitions, mouseover
04-nov-2011 - prg318 - gtk: added option for frameskipping and made label case consistent in gui
1-nov-2011 - zeromus - debugger - fix mysterious out of bounds condition while editing breakpoints
31-oct-2011 - zeromus - add winapi lua library
31-oct-2011 - zeromus - fix newppu bug; chr ram was not getting initialized to anything
28-oct-2011 - AnS - Switching Tasedit Bg input on/off when Tasedit gets/loses focus
27-oct-2011 - AnS - "Toggle Rerecord Display" hotkey (M), "Play Movie From Beginning" hotkey also works in Tasedit
27-oct-2011 - AnS - Tasedit: Bookmarks/Branches
23-oct-2011 - prg318 - sdl: fix a bug where alt key would get "stuck" when alt tabbing to window
21-oct-2011 - AnS - Tasedit: gradual greenzone cleaning
19-oct-2011 - prg318 - scons: "scons install" now installs auxlib and manpage
19-oct-2011 - prg318 - scons: added --prefix option to build system and improved "install" target
18-oct-2011 - prg318 - sdl: new hotkeys added - statestatenext savestateprev - useful for scrolling through savestates on a gamepad. mapped to pgup and pgdown by default
18-oct-2011 - prg318 - gtk: new video option for double buffering and ClipSides
18-oct-2011 - prg318 - sdl: GTK3 support is now functional. Set GTK3 to 1 in the SConstruct to try it out.
18-oct-2011 - prg318 - no longer use depreciated gtk2 functions
18-oct-2011 - prg318 - getSDLKey tool added to assist in remapping hotkeys
17-oct-2011 - prg318 - some segfaults fixed, also fixed some build errors
17-oct-2011 - prg318 - sdl netplay fixed
15-oct-2011 - zeromus - don't lose cheat compare value when toggle cheat enables through UI
14-oct-2011 - AnS - added rewind hotkey (~), works only in Taseditor
14-oct-2011 - AnS - Tasedit: execute lua functions when jumping inside greenzone
13-oct-2011 - AnS - Tasedit: major refactoring
9-oct-2011 - AnS - Tasedit: input history, undo, redo; greenzone reduces only from the point where actual differences were found
07-oct-2011 - prg318 - sdl: fixed some issues with --nogui . "--nogui" no longer requires an argument and can be used like this "$ fceux --nogui rom.nes"
07-oct-2011 - prg318 - gtk: support mouseclicks (ie zapper)
03-oct-2011 - AnS - Tasedit: Clone Frame(s)
02-oct-2011 - AnS - Tasedit: Markers
30-sept-2011 - AnS - logging all display messages to Message Log
30-sept-2011 - AnS - Tasedit: special method of inserting frames; progressbar updating when loading/saving large projects; moved "Follow cursor" checkbox from View menu to main TASEdit window
30-sept-2011 - AnS - Tasedit: View->Show dot in empty cells; ClearFrames (Del), Cut operation clears frames instead of deleting; checking unsaved project on Exit and Open project
28-sept-2011 - CaH4e3 - resetexstate crash fix
27-sept-2011 - AnS - Fixed old bug with "Play Movie From Beginning"
26-sept-2011 - AnS - added support for "Enable HUD recording" option to SDL version
25-sept-2011 - AnS - Tasedit: progressbar; holding "<" and ">" buttons
25-sept-2011 - zeromus - newppu-fix bug in scroll reg logic causing mis-scrolls in p'radikus conflict
24-sept-2011 - CaH4e3 - latest mapper changes; code/data logger now can log data access from the RAM code; the new button to save unused data to the code/data logger
24-sept-2011 - AnS - Tasedit: changed control scheme to single click instead of double click
23-sept-2011 - AnS - File->AVI/Wav->Enable HUD recording
23-sept-2011 - AnS - moved "Display movie status icon" from Config->Movie options to Config->Display
23-sept-2011 - AnS - Config->Display->Rerecord counter; no more TweakCount
23-sept-2011 - AnS - Config->Movie options->Always suggest Read-Only replay (for Replay dialog)
22-sept-2011 - AnS - deleted "Lag Counter Reset" hotkey; added "Open TAS Edit" hotkey
22-sept-2011 - AnS - fixed long "savestate" messages containing path
22-sept-2011 - AnS - Tasedit: auto clear "Disable speed throttling" and "Run in background", auto set "Set high-priority thread" when entering TASEdit; FCEUX runs in bg when TASEdit has focus; Config->"Mute Turbo" check
19-sept-2011 - AnS - Tasedit: accelerator table; Config->"Set greenzone capacity"; pauseframe is shown by flashing color
18-sept-2011 - zeromus - datalatch mapper-fix bug where wramless games would be able to do something mysterious to unmapped host emulator memory
17-sept-2011 - AnS - Tasedit: forced read-only behaviour when seeking or holding turbo
17-sept-2011 - AnS - Tasedit: "Auto-restore last position" checkbox in playback controls
17-sept-2011 - AnS - Tasedit: fixed item drawing method, no more flicker and slowdowns
12-sept-2011 - prg318 - sdl: rename InputType to CurInputType due to variable of same name in src/movie.h
12-sept-2011 - AnS - Tasedit: rewrote project save/load functions, various bugfixes
6-sept-2011 - AnS - Tasedit: red lines for lag frames
6-sept-2011 - AnS - fixed bug when trying to open Replay dialog without having ROM loaded
3-sept-2011 - AnS - Tasedit: tweaks and bugfixes
3-sept-2011 - CaH4e3 - fixed bus conflict emulation, no kage no densetsu bug anymore
31-Aug-2011 - AnS - Tasedit: Added 4 pads support; also now current frame is shown by blue line; minor cleanups
30-Aug-2011 - mart0258 - Ram Search updates list when emulator is paused (on Power, or when resetting search)
25-Aug-2011 - zeromus - win32: fix context menus to use rightclicks in context menus correctly
19-Aug-2011 - CaH4e3 - PAL/NTSC noise fixed
18-Jul-2011 - zeromus - slightly improve hud text rendering wrapping
16-Jul-2011 - adelikat - Add Button Count lua script written by Brandon Evans
15-Jul-2011 - prg318 - sdl: patch to resolve 'XKeysymToString' complication errors on debian sid and osx (thanks antonio ospite!)
6-Jul-2011 - plombo - sdl: fixed --nogui option and removed SDL.NoGUI from fceux.cfg
5-Jul-2011 - FatRatKnight - Lua console now gets the proper file path when selecting a file from the recent menu.
---r2206 - FCEUX 2.1.5 Released---
---June 21 2011---
16-Jun-2011 - zeromus - win32: poll hotkeys while no rom is loaded
1-jun-2011 - prg318 - sdl - print usage when --help is passed even if SDL fails
plombo - added stock icons to menu items
plombo - added new gamepad configuration dialog
19-mar-2011 - prg318 - gtk - added hard reset option (renamed reset->soft reset)
18-mar-2011 - prg318 - sdl - removed GTK_LITE; --nogui made it obsolete
12-feb-2010 - mart0258 - Fix input selection for Famicom Expansion port
25-jan-2010 - prg318 - gtk - filechooser now remembers last file opened
25-jan-2010 - prg318 - gtk - fixed xscale/yscale spinbuttons not changing config
24-jan-2010 - prg318 - gtk - game window integrated into sdl window (thanks bryan!)
11-nov-2010 - mart0258 - TasEdit - Invalidate greenzone when re-recording earlier portions of a movie.
09-oct-2010 - zeromus - fix bug in new ppu that made some intensify bits not get applied to output (fixes flashing siren screen in werefolf
09-oct-2010 - gocha - win32 - Ram Watch - fix the multiple selection of watches
09-oct-2010 - gocha - Win32 - Ram Search - multiple selection of addresses, fix restoration of the selection range
09-oct-2010 - gocha - Win32 - Ram Search - fix restoration of the selection range
01-oct-2010 - qeed - Fix many segfaults related to file handling
22-sept-2010 - adelikat - win32 - Hex Editor - ask before removing all bookmarks
04-sept-2010 - adelikat - Win32 - Ramwatch - fix displaying of 2 byte values
26-aug-2010 - mart0258 - Win32 - fix crash when re-opening debugging window
20-aug-2010 - adelikat - Win32 - Display movie name at the top of the main window
09-july-2010 - mart0258 - TasEdit - cleanup; prevent crash when truncating while turbo
13-june-2010 - adelikat - Win32 - avi capture commandline argument and related parameters
12-june-2010 - adelikat - Save Turbo frame skip amount to config so that it can be customized by user
12-june-2010 - adelikat - Lua - fix speed.mode() so that normal turns off turbo
12-june-2010 - CaH4e3 - Fix Young Indiana Jones Chronicals
10-june-2010 - Deign - Fix Ram Search to only display valid RAM addresses (0000-07FF and 6000-7FFF)
10-june-2010 - zeromus - add luasocket to built in lua library
09-june-2010 - adelikat - Movies - Fixed read-only loadstate error logic & messages
07-june-2010 - mart0258 - Movie loading now faster - TAS savestates moved from class MovieRecord to class MovieData
07-june-2010 - adelikat - Lua - new function: gui.screenshotas()
07-june-2010 - Deign/adelikat - Win32 - Added a SavestateAs Menu item
06-june-2010 - FatRatKnight - Added a return value to gui.text: The X position where the function would paint the next character.
02-june-2010 - adelikat - Win32 - Movie Options Dialog - Fix so Full Savestate Load checkbox is updated on load
---r1984 - FCEUX 2.1.4a Released---
---June 1 2010---
01-june-2010 - zeromus - fix crash bug in fcm convert
01-june-2010 - adelikat - fix logic error in read-only loadstate of movies, should not improperly report savestate after movie errors
---r1977 - FCEUX 2.1.4 Released---
---May 31 2010---
29-may-2010 - Cah4e3 - Added zapper autodetection for Gotcha!
28-may-2010 - adelikat - Added lua function movie.getfilename() which returns the current movie filename without the path included
27-may-2010 - ugetab - Win32 - Debugger - Made debugger able to break on and distinguish Stack reads/writes
24-may-2010 - adelikat - Win32 - Memwatch - ignore spaces at the beginnign of an address in the address boxes
24-may-2010 - mart0258 - Disable auto-savestates during turbo
24-may-2010 - mart0258 - Prevent .zip files containing no recognized files from causing crash
23-may-2010 - adelikat - Win32 - Replay dialog - fix bug that was causing it to always report savestate movies as soft-reset
23-may-2010 - adelikat - Fix PlayMovieFromBeginning when using a movie that starts from savestate
23-may-2010 - cah4e3 - mapper 19 savestate fix mirroring for "Dream Master (J)" corrected to "four-screen" by CRC check
23-may-2010 - ugetab - Win32 - Fixed bug involving pausing emulation outside of the debugger, then trying to use the debugger commands, and having teh CPU registers become corrupted.
22-may-2010 - ugetab - Win32 - Made cheat menu's Pause When Active effect immediate.
22-may-2010 - ugetab - Win32 - Enabled multi-select for Cheat menu to allow multiple toggles and deletes.
20-may-2010 - ugetab - Added NTSC 2x scalar option with some CFG config options of it's own
20-may-2010 - Cah4e3 - Win32 - CDLogger - fixed bug preventing correct interrupt vectors from logging
19-may-2010 - ugetab/adelikat - Win32 - Added single-instance mode, which makes starting a second copy of FCEUX load the file into the first, then exit.Mode off by default, togglable under Config -> GUI
18-may-2010 - adelikat - Movie + loadstate errors are handled more gracefully now, more informative error messages and the movie doesn't have to stop
18-may-2010 - adelikat - Implemented a "full savestate-movie load" mode similar to the implementation in VBA-rr & SNES9x-rr. In this mode loading a savestate in read+write doesn't truncate the movie to its frame count immediately. Instead it waits until input is recording into the movie (next frame). For win32 this feature is togglable in movie options and the context menu. For SDL this is off by default and a toggle will need to be added.
17-may-2010 - adelikat - Made gamepad 2 off by default.
17-may-2010 - adelikat - Movies - fully implemented "bulletproof" read-only
17-may-2010 - zeromus - Movie loading (& movie-savestate saving/loading) should now be faster due to the use of a emufile class instead of std::ostream for dumping
16-may-2010 - ugetab - Added player 3 and 4 to autohold notification window. Made FCEU_DispMessage able to display to different screen locations to do it. Made sure to update SDL with the change. Hope SDL still compiles ok.
15-may-2010 - ugetab - Win32 - Added option for palette selection as color for LUA colors. Included an LUA script to display all choices with the value used to pick displayed color.
14-may-2010 - adelikat - Win32 - Replay dialog, when selecting a movie in a relative path (.\movies for example), the recent movies list stores an absolute path instead.
14-may-2010 - adelikat - Win32 - When recording a movie, add it to recent movies
14-may-2010 - adelikat - Win32 - Replay dialog shows PAL flag & New PPU flag
14-may-2010 - adelikat - New PPU flag in movie headers (doesn't change an emulators PPU state when loading a movie)
13-may-2010 - adelikat - input display overhaul - a more desmume style system which shows both keys held the previous frame and immiately held keys that will be put in on the next frame
12-may-2010 - ugetab - Win32 - Added rudamentry Between-Frames input display code for adelikat to customize.
12-may-2010 - adelikat - Input Display - displays a silver color when input is from a movie rather than the user
12-may-2010 - ugetab - Win32 - With special scaler in window mode, it's possible to resize to anything above the minimum.
12-may-2010 - adelikat - Movies now have a "finished" option. If a playback stops the movie isn't cleared from memory, and can be replayed or a state loaded. Similar functionality as DeSmuME and GENS rerecording
11-may-2010 - adelikat - Loadstate updates input display
11-may-2010 - ugetab - Win32 - Added Ram Search hotkeys for the first 6 search types in the list.
10-may-2010 - ugetab - Added gui.getpixel() which gets any gui.pixel() set pixel colors, and possibly other functions. Added emu.getscreenpixel() which gets the RGB and Palette of any pixel on the screen.
08-may-2010 - ugetab - Added savestate.object() which is savestate.create() with intuitive numbering under windows
08-may-2010 - ugetab - Added emu.addgamegenie() and emu.delgamegenie() LUA functions.
07-may-2010 - ugetab - Win32 - Added context menu to Cheat Dialog Cheat Listbox, populated list with Toggle Cheat, Poke Cheat Value, and Goto In Hex Editor
07-may-2010 - ugetab - Win32 - Made enabling/disabling cheats no longer deselect the selected cheat.
06-may-2010 - ugetab - win32 - Add Cheat buttons for Ram Search and Ram Watch
06-may-2010 - ugetab - win32 - Hex editor - Made the Hex Editor display the Frozen, Bookmarked, etc. status of the selected address, and made the Frozen color override the Bookmarked color.
04-may-2010 - ugetab - Win32 - Added "Goto" command for hex editor.
28-april-2010 - ugetab - Added microphone support option. When enabled, Port 2 Start activates the Microphone. Movies also support this.
25-april-2010 - FatRatKnight - Fixed a potential desync that plays out an extra frame without an update to the frame count involving heavy lua use, joypad.get, and a loadstate.
23-april-2010 - ugetab - Win32 - Added Tools>GUI option to partially disable visual themes, so the emulator can be made to look like it did in 2.1.1 and earlier releases.
20-april-2010 - adelikat - New lua functions movie.ispoweron() and movie.isfromsavestate()
20-april-2010 - adelikat - Win32 - Drag & Drop - if dropping a .fcm with no ROM loaded, prompt for one (same functionality that was added to .fm2 files)
08-april-2010 - ugetab - Win32 - Added conditional debugging option 'K', for bank PC is on
07-april-2010 - adelikat - fix bug that caused zapper.read() to crash when movie playback ends
---r1767 - FCEUX 2.1.3 Released---
---April 7 2010---
07-april-2010 - sgrunt - Lua - gui.text now has out of bounds checking
07-april-2010 - adelikat - Win32 - Lua console - filename updates when lua scripts are dragged to emulator or recent filenames invoked
07-april-2010 - adelikat - Lua no longer unpauses the emulator when a script is loaded
30-march-2010 - ugetab - Win32 - Closing minimized windows no longer moves them the next time they get opened
28-march-2010 - adelikat - lua - fixed zapper.read() to read movie data if a movie is playing. Also changed the struct values to x,y,fire. This breaks lua scripts that used it previous, sorry.
04-march-2010 - prockguy - added menu buttons for loading nsf files
03-march-2010 - adelikat - Win32 - If .fm2 drag & dropped with no ROM load, the open ROM dialog will appear
03-march-2010 - prockguy - fceux - now prints the name of the mapper on rom load
03-march-2010 - prockguy - SDL - VS unisystem keys now configable
03-march-2010 - prcokguy - SDL - changed default hotkeys and keys to match w32
03-march-2010 - prockguy - SDL - fixed dpad/joyhat support
01-march-2010 - adelikat - Movie file format header now has a FDS flag
01-march-2010 - adelikat - win32 - cheats dialog - toggling a cheat in the cheats list now updates the active cheats count
01-march-2010 - adelikat - win32 - a disable movie messages menu item
25-feb-2010 - prockguy - unix netplay is now functional; gtk network gui created
24-feb-2010 - prockguy - GTK - added basic movie controls
24-feb-2010 - prockguy - GTK - added file filters; added Load FDS function
24-feb-2010 - prockguy - GTK - added palette config dialog
23-feb-2010 - prockguy - GTK - added UI elemnts for x/y scale; added lowpass UI option
23-feb-2010 - prockguy - GTK - added GUI for color/tint/hue
23-feb-2010 - prockguy - GTK - implemented sound mixer dialog (for square1, 2, triangle, etc)
22-feb-2010 - prockguy - SDL - ported to SDL 1.3; compatibility maintained with 1.2
18-feb-2010 - prockguy - GTK - a lot of options added to GTK gui; relatively stable; added GUI for gamepad config and sound config.
02-feb-2010 - ugetab - Win32 - Added window positions bounds checks. Accounts for -32000 positions & less out-of-range too
08-jan-2010 - rheiny - Win32 - Trace Logger - Trace logger now logs the values of the stack pointer register
31-dec-2009 - prg318 - added gtk gui
08-dec-2009 - Zeromus - Fix Name Table Viewer - Fix for use with New PPU
08-dec-2009 - - mart0258 - FDS - show name of missing bios file in error message
07-dec-2009 - qeed - NewPPU - fixed sprite hit before 255 and for non transparent hits only, thanks to dwedit for providing the fix
06-dec-2009 - Zeromus - SDL - disallow --inputcfg gamepad0 and gamepad5
??-???-2009 - CaH4e3 - fixed mappers 82, 25, 21, and 18. Games such as SD Kiji Blader, Ganbare Goemon Gaiden, and Ganbare Goemon Gaiden 2, Jajamaru Gekimadden are now playable
17-nov-2009 - adelikat - Win32 - Cheats - Pause while active checkbox installed
17-nov-2009 - adelikat - Win32 - Fix debug window so it doesn't crash if unminimized with no game loaded.
13-nov-2009 - mart0258 - Win32 - TASEdit - Added interface functionality (save/load, running TASEdit mid-movie, etc.)
13-nov-2009 - adelikat - made savestate compression togglable
13-nov-2009 - adelikat - made savestate backups togglable
08-nov-2009 - gocha - Win32 - Lua console - added a menu
08-nov-2009 - gocha - change gui.line, gui.box, joypad.get to function like GENS rerecording
08-nov-2009 - gocha - New lua functions: gui.parsecolor, joypad.getup, joypad.getdown, emu.emulating.
08-nov-2009 - CaH4e3 - Fixes for mappers 253 & 226 - fixes games such as Fire Emblem (J) and Fire Emblem Gaiden (J)
08-nov-2009 - CaH4e3 - Fix crashing on game loading for any battery backed roms with mappers from MapInitTab (fixes Esper Dream 2 - Aratanaru Tatakai (J)
04-nov-2009 - adelikat - win32 - debugger - added an auto-load feature
---r1527 - FCEUX 2.1.2 Released---
---November 3, 2009---
02-nov-2009 - qeed - fixed mapper 226, 76-in-1 seems to work now, also super 42 also seems to work with this fix, but people with save states with this game should make a new one. Since the the save state format for this game was changed a little.
31-oct-2009 - adelikat - win32 - Memwatch - Save Changes prompt - Selecting yes will do quicksave first, save as 2nd (instead of always defaulting to save as)
19-oct-2009 - qeed - Mapper 253 mostly implemented, known game [ES-1064] Qi Long Zhu (C) is mostly playable (some minor graphic glitches). Thanks to VirtualNESEX for reverse engineering this, gil for giving me the mapper src for implementation reference, and Dead_Body for figuring out this game had to use chr-ram
10-oct-2009 - qeed - fixed dragon's lair the mapper 4 europe version in new PPU
10-oct-2009 - zeromus - fixed Tecmo Super Bowl in new PPU
08-oct-2009 - ugetab - win32 - fixed a debugger crash error, Unif/FDS filename issue, and enabled debugger bank display
01-oct-2009 - gocha - win32 - movie play dialog displays movie time based on ~60.1 (~50.1 PAL) instead of 60 & 50
26-sept-2009 - qeed - fixed action 52 game that was broken in fceux >2.0.3
16-sept-2009 - ugetab - win32 - Restored DPCM Logging when Code/Data Logger is active
sept-2009 - FatRatKnight - Finally got in that "invert" value for joypad.set. This value simply inverts the player input. Actually, any string will invert it, since we have not used strings for anything else in joypad.set.
15-sept-2009 - FatRatKnight - Reworked how input is taken from lua, and generally everything related to joypad.set and what it affects. Now setting stuff to false will: Prevent user control for exactly one frame, and allow more than one false button as a time. Yeah, bug fixes. Hopefully runs a little faster now.
22-aug-2009 - adelikat - Win32 - Map Hotkeys Dialog - Fixed but where "X" and Alt+F4 would not close dialog
22-aug-2009 - adelikat - Win32 - Added a Save Config File menu item
12-aug-2009 - adelikat - Win32 - Added a menu item to toggle to New PPU
10-aug-2009 - adelikat - fixed bug that caused new movies be created in /movie instead of /movies
08-aug-2009 - qeed - mappers - fixed mapper irq count, dragon ball z 3
should be playable again.
07-aug-2009 - ugetab - win32 - imported NSF features from FCEU-XDSP-NSF
05-aug-2009 - adelikat - win32 - fixed an erroneous assumption made in 2.1.1 that caused the recent roms menu to be grayed out even when there were recent roms (however, it uncovered an underlying bug in the recent menu saving that needs to be fixed at some point).
---r1375 - FCEUX 2.1.1---
---July 29, 2009---
01-july-2009 - adelikat - win32 - texthooker - drag & drop for table files
01-july-2009 - adelikat - win32 - drag & drop for cheat (.cht) files
25-jun-2009 - qeed - sound/ppu - fixed the noise value, it seems that the noise logic was shifting the values to the left by 1 when reloading, but this doesnt work for PAL since one of the PAL reload value is odd, so fix the logic and used the old tables. Revert a stupid CPU ignore logic in PPU. Sorry about that.
25-jun-2009 - adelikat - Win32 - CD Logger - Drag and Drop for .cdl files
24-jun-2009 - qeed - sound/ppu - reverted to old noise table value since this seems to get correct sound for double
dragon 2. Also added experimental $2004 reading support to play micro machines with (little) shakes, and fixed some
timing in the new PPU.
24-jun-2009 - adelikat - win32 - memory watch - option to bind to main window, if checked it gives GENS dialog style control, where there is no extra task bar item, and it minimizes when FCEUX is minimized
24-jun-2009 - adelikat - win32 - palette commandline options
24-jun-2009 - adelikat - win32 - Sound Dialog - cleanup, when sound is off, all controls are grayed out
24-jun-2009 - adelikat - win32 - Hex Editor - Drag & Drop for .tbl files
24-jun-2009 - adelikat - win32 - Drag & Drop for .fcm, it converts and then loads the converted movie automatically
24-jun-2009 - adelikat - win32 - Drag & Drop support for palette files
23-jun-2009 - adelikat - win32 - Drag & Drop support for savestates
22-jun-2009 - qeed - Revert IRQ inhibit fix, since this seems to break Dragon
Warrior 4, added palette reading cases for the new PPU.
21-jun-2009 - adelikat - win32 - memwatch - save menu item is grayed if file hasn't changed
20-jun-2009 - adelikat - win32 - memwatch - fixed a regression I made in 2.0.1 that broke the Save As menu item
17-jun-2009 - qeed - Sound core fix, updated with the correct values for the noise and DMC table,
and also fixed the IRQ inhibit behavior for register $4017. Also fixed the CPU
unofficial opcode ATX, ORing with correct constant $FF instead of $EE, as tested
by blargg's. These fixes passes the IRQ flags test from blargg, and also one more
opcode test from blargg's cpu.nes test.
16-jun-2009 - adelikat - sound core fix - square 1 & square 2 volume controls no longer backwards
11-jun-2009 - zeromus - sound core fix, length counters for APU now correct variables
11-jun-2009 - adelikat - Win32 - Hex Editor - changed ROM values again dsiplay as red, saved in the config as RomFreezeColor
06-jun-2009 - rheiny - Fixed reported issue 2746924 (md5_asciistr() doesn't produce correct string)
23-may-2009 - adelikat - win32 - hex editor - freeze/unfreeze ram addresses now causes the colors to update immediately, but only with groups of addresses highlighted at once (single ones still don't yet update)
23-may-2009 - adelikat - win32 - context menu - Save Movie As... menu item (for when a movie is loaded in read+write mode)
23-may-2009 - adelikat - win32 - added opton to remove a recent item to the roms, lua, and movie recent menus
23-may-2009 - adelikat - win32 - Added a remove recent item function and hooked it up to memwatch recent menu, now if a bad recent item is clicked, the user has a choice to remove it from the list
23-may-2009 - adelikat - win32 - Load Last Movie context menu item added
23-may-2009 - adelikat - win32 - Recent Movie Menu added
22-may-2009 - adelikat - win32 - "Disable screen saver" gui option now also diables the monitor powersave
22-may-2009 - adelikat - win32 - Debugger - Step type functions now update other dialogs such as ppu, nametable, code/data, trace logger, etc.
22-may-2009 - adelikat - win32 - Hex Editor - Save Rom As... menu option enabled and implemented
22-may-2009 - adelikat - win32 - Window caption shows the name of the ROM loaded
22-may-2009 - adelikat - win32 - Hex Editor - allowed the user to customize the color scheme by use of RGB values stored in the .cfg file
21-may-2009 - adelikat - win32 - reverted fixedFontHeight to 13 instead of 14. Gave the option of adjusting the height by modifying RowHeightBorder in the .cfg file
21-may-2009 - adelikat - win32 - made fullscreen toggle (Alt+Enter) remappable
15-may-2009 - shinydoofy - sdl - added --subtitles
10-may-2009 - shinydoofy - sdl - fixed Four Score movie playback
02-may-2009 - adelikat - win32 - stop movie at frame x feature - fixed off by 1 error
23-apr-2009 - shinydoofy - sdl - added --ripsubs for converting fm2 movie subtitles to an srt file
15-apr-2009 - shinydoofy - sdl - Lua is optional again, fixed the real issue
14-apr-2009 - punkrockguy - sdl - LUA is NO longer optional, so the SConscripts have been updated to reflect that change. This fixes the mysterious non-working input issue.
12-apr-2009 - shinydoofy - sdl - implemented saving/loading a savestate from a specific file on Alt+S/L
11-apr-2009 - shinydoofy - sdl - implemented starting an FM2 movie on Alt+R
11-apr-2009 - adelikat - made default save slot 0 instead of 1, Win32 - remember last slot used
11-apr-2009 - shinydoofy - sdl - added --pauseframe to pause movie playback on frame x
11-apr-2009 - shinydoofy - sdl - dropped UTFConverter.c from SDL build and added hotkey Q for toggling read-only/read+write movie playback
--version 2.1.0a released----
04-apr-2009 - shinydoofy - fixed fcm->fm2 code once again (this time for good, hopefully). Thanks to Bisqwit!
04-apr-2009 - shinydoofy - Reverted UTF8<->UTF32 code changes to fix up the win32 build for now
---version 2.1.0 released---
29-mar-2009 - adelikat - Win32 - reverted acmlm's /dll folder change
28-mar-2009 - shinydoofy - sdl - added hotkey Del to toggle mute avi capturing
28-mar-2009 - shinydoofy - sdl - fix fm2 playback and fcm->fm2 conversion crash at the cost of ugly 0x00 bytes behind the author's comment line
28-mar-2009 - adelikat - Lua - added FCEU.poweron() and FCEU.softreset()
27-mar-2009 - shinydoofy - sdl - added --no-config
23-mar-2009 - adelikat - Win32 - blocked "hotkey explosion" by rshift on some laptops
22-mar-2009 - shinydoofy - sdl - added hotkey I and --inputdisplay {0|1|2|4} for toggling input display.
22-mar-2009 - shinydoofy - sdl - added commandline options for sound channels' volumes
22-mar-2009 - shinydoofy - sdl - updated window title
19-mar-2009 - adelikat - Win32 - make Video - windowed mode - disable hardware accel the default setting. Made high quality sound the default setting.
16-mar-2009 - adelikat - Win32 - GUI Dialog - added an option to disable the context menu
15-mar-2009 - adelikat - Lua - added movie.rerecordcount(), movie.length(), movie.getname(), movie.playbeginning(), FCEU.getreadonly(), FCEU.setreadonly()
14-mar-2009 - adelikat - Lua - added movie.active() - returns a bool value based on whether a movie is currently loaded
14-mar-2009 - adelikat - Fixed Joypad.set, it uses 3 values instead of 2 now. True will take control of a button and make it on, False will take control and make it off, and Nil will not take control (allowing the user to press the button)
14-mar-2009 - adelikat - Fix major crash issue where NROM game savestates were writing erroneous information if a non NROM game was loaded prior
13-mar-2009 - adelikat - Closing game / Opening new game resets the frame counter
13-mar-2009 - adelikat - Win32 - Debugger - Scanlines and PPU Pixels are displayed even in vblank (lines 240-261)
12-mar-2009 - shinydoofy - sdl - fixed compilation error and reactivated the mouse pointer in the SDL window
12-mar-2009 - adelikat - Win32 - Trace Logger - fixed bug where user can't scroll the log window while it is auto-updating
11-mar-2009 - adelikat - Win32 - Trace Logger - changed message about F2 pause (left over from FCEUXDSP) to display the current hotkey mapping
11-mar-2009 - adelikat - Added frame counter to savestates
08-mar-2009 - adelikat - Lua - added input.get() function
08-mar-2009 - adelikat - Lua - memory.readbyte will recognize frozen addresses
08-mar-2009 - adelikat - Lua - added FCEU.lagged() function
08-mar-2009 - adelikat - Lua - added zapper.read() function
07-mar-2009 - adelikat - Lua - added FCEU.lagcount() function
04-mar-2009 - adelikat - win32 - Fix bug so that Escape can now be assigned as a hotkey
03-mar-2009 - adelikat - win32 - Fix Directory Overrides so to allow users to have no override. Also fixes directory override reset bug
02-mar-2009 - adelikat - win32 - Drag & Drop for Memwatch dialog (.txt files)
01-mar-2009 - adelikat - win32 - Drag & Drop Lua files
25-feb-2009 - adelikat - win32 - Memwatch - added cancel to save changes? message box
22-feb-2009 - adelikat - win32 - Lua - made speedmode("turbo") turn on turbo (which employs frameskipping) rather than max speed
22-feb-2009 - adelikat - Increased lua gui.text height (and DrawTextTransWH() height)
21-feb-2009 - adelikat - win32 - Lua - Added -lua commandline argment, loads a lua script on startup
21-feb-2009 - adelikat - win32 - Debugger - Added pixel display after scanline display - Thanks to DWEdit for this patch
21-feb-2009 - adelikat - win32 - Debugger - Added Run Line, Run 128 Lines buttons - Thanks to DWEdit for this patch
21-feb-2009 - adelikat - win32 - Message Log - remembers X,Y position
19-feb-2009 - adelikat - win32 - Memory Watch - fixed recent file menu - no longer crashes when attempting to load a non existent recent file
07-feb-2009 - adelikat - win32 - Fix bug in screenshot numbering that caused numbering to not reset when changing ROMs
06-feb-2009 - adelikat - win32 - Hex editor - remembers window size
06-feb-2009 - adelikat - Win32 - sound config dialog - added sliders for individual sound channel volume control
06-feb-2009 - zeromus - Force processor affinity, fixes throttling problem on AMD dualcore machines
06-feb-2009 - adelikat - Sound channels now have individual volume control
01-jan-2009 - adelikat - Win32 - Timing - "disable throttling when sound is off" now only affects FCEUX when sound is off
26-dec-2008 - adelikat - Metadata - remember window position
24-dec-2008 - adelikat - auto-save fixes, prevent loading an auto-save from previous session. Win32 - added flags for enabling auto-save menu item.
24-dec-2008 - adelikat - added undo/redo savestate hotkey. Win32 - made undo/redo default key mapping Ctrl+Z
24-dec-2008 - adelikat - win32 - added Last ROM used context menu item when no game loaded
24-dec-2008 - shinydoofy - sdl - added option to mute FCEUX for avi capturing, check the docs for more detail
23-dec-2008 - adelikat - Win32 - Undo/redo loadstate and Undo/redo savestate context menu items added
23-dec-2008 - adelikat - undo/redo loadstate and undo/redo savestate implemented
22-dec-2008 - adelikat - backupSavestate system added.
22-dec-2008 - shinydoofy - sdl - added Shift+M for toggling automatic movie backups for SDL
22-dec-2008 - adelikat - Movie auto-backup feature implemented
22-dec-2008 - adelikat - win32 - moved movie related menu items to a movie options dialog box
22-dec-2008 - adelikat - Win32 - context menu item "create backup" for backing up movie files
21-dec-2008 - adelikat - Win32 - Name Table Viewer - Refresh value default to 15, Refresh value stored in config file
21-dec-2008 - adelikat - Win32 - PPU Viewer - Refresh value default to 15, Refresh value stored in config file
19-dec-2008 - adelikat - Loadbackup function added, Win32 - Undo Loadstate context menu item
19-dec-2008 - adelikat - Backup savestate is made before loading a state
18-dec-2008 - adelikat - win32 - turbo bypasses sound better if muteturbo is checked
18-dec-2008 - shinydoofy - sdl - fixed compiling errors for SDL due to r1037
18-dec-2008 - adelikat - win32 - fullscreen mode fixed (both enters and returns to fullscreen just fine)
16-dec-2008 - adelikat - win32 - debugger - added "Restore original window size" button
16-dec-2008 - adelikat - win32 - debugger - fixed SF2073113 - Debugger now has a minimum valid size
15-dec-2008 - adelikat - win32 - cheats - number of active cheats listed, freezing ram addresses in hex editor automatically updates cheats dialog
15-dec-2008 - adelikat - win32 - hexeditor - added minimize & maximize buttons
14-dec-2008 - adelikat - win32 - memwatch - frozen addresses will display as blue
14-dec-2008 - adelikat - win32 - hexeditor - prevent the user from freezing more than 256 addresses at once
14-dec-2008 - adelikat - win32 - memwatch - collapsable to 1 column
08-dec-2008 - adelikat - win32 - stop lua menu item gray if no lua script is running
08-dec-2008 - adelikat - win32 - fix bug where no sound + mute turbo caused chirps when toggling
08-dec-2008 - adelikat - win32 - sound dialog - disabling sound disabled sound options
08-dec-2008 - adelikat - win32 - opening a rom runs closerom first, fixes bug where new sav file was not getting loaded
07-dec-2008 - adelikat - win32 - turbo now employs frame skip
30-nov-2008 - punkrockguy - commit 1000
30-nov-2008 - punkrockguy - fixed gcc compile error
30-nov-2008 - punkrockguy - moved around some hotkeys to be consistent with docs
30-nov-2008 - punkrockguy - major update to sdl documentation
24-nov-2008 - qfox - win32 - fixed two position checks for memwatch and debugger that could cause these windows to "disappear" (moved far out of reach).
24-nov-2008 - adelikat - win32 - right click context menus installed
24-nov-2008 - adelikat - win32 - added lots of mappable hotkey items as Menu items
23-nov-2008 - adelikat - Win32 - fixed some errors in my AVI directory override code
23-nov-2008 - shinydoofy - movie subs now have a toggle button in the SDL build (F10 by default)
23-nov-2008 - adelikat - movie subtitle system installed
22-nov-2008 - adelikat - Win32 - added help menu item to TASEdit and Hex Editor, Minor TASEdit clean up
22-nov-2008 - adelikat - Win32 - fixed so that turbo works with VBlank sync settings
21-nov-2008 - qfox - Lua - added joypad.write and joypad.get for naming consistency. Added plane display toggle for lua: FCEU.fceu_setrenderplanes(sprites, background) which accepts two boolean args and toggles the drawing of those planes from Lua. Changed movie.framecount() to always return a number, even when no movie is playing. Should return the same number as in view; the number of frames since last reset, if no movie is playing.
17-nov-2008 - adelikat - added Open Cheats hotkey (currently a windows only function)
16-nov-2008 - adelikat - Win32 - menu items that are hotkey mappable show the current hotkey mapping
15-nov-2008 - adelikat - Win32 - memwatch - implemented RamChange() - monitors the behavior of ram addresses
15-nov-2008 - adelikat - Win32 - re-enabled sound buffer time
15-nov-2008 - adelikat - Clip Left and Right sides taken into account when drawing on screen (record/play/pause, lag & frame counters, messages, etc)
15-nov-2008 - adelikat - win32 - Implemented Drap & Drop for movie files
14-nov-2008 - adelikat - win32 Hex Editor - Dump Rom & Dump PPU to file Dialog - uses ROM to build default filename
14-nov-2008 - adelikat - Win32 Memwatch - Save as dialog - uses ROM name to build default memwatch filename if there is no last used memwatch filename
14-nov-2008 - adelikat - Win32 Text Hooker fixes - Init error checking reinstated, save .tht file no longer crashes, Dialog updates as ROM plays, Remembers window position, fix bug where canceling save as produces an error message, Save As produces default filename based on loaded ROM
14-nov-2008 - adelikat - fixed but when aspect correction and special scaling 3x are set, video was getting resized incorrectly
14-nov-2008 - adelikat - fixed a bug introduced in previous commit, frame display toggle now works when no movie is present
12-nov-2008 - adelikat - allowed frame counter to display even with no movie present
11-nov-2008 - punkrockguy - sdl - savestate slots now mappable [2175167]
10-nov-2008 - adelikat - win32 - removed accel keys from main window
10-nov-2008 - adelikat - Win32 - added Open & Close ROM mappable hotkeys, removed accel functions
10-nov-2008 - punkrockguy - improved the sdl sound code; drasticaly improves quality of sound.
09-nov-2008 - adelikat - minor memory watch menu clean up, removed Ctrl+W hotkey for close (and placed Alt+F4 on the menu name)
08-nov-2008 - zeromus - big endian wasnt compiling. fix issues.
02-nov-2008 - shinydoofy - added --fcmconvert for SDL
02-nov-2008 - zeromus - emulua - add rom.readbyte and rom.readbytesigned
---version 2.0.3 released---
02-nov-2008 - zeromus - fix fcm conversion, recording, and playback of reset and power commands
25-oct-2008 - shinydoofy - added support for AVI creation for SDL, see documentation/Videolog.txt for more
19-oct-2008 - shinydoofy - toggle lag frame counter for SDL, default hotkey F8
19-oct-2008 - shinydoofy - toggle skipping of lag frames for SDL, default hotkey F6
19-oct-2008 - shinydoofy - [ 2179829 ] user ability to toggle "bind savestates to movie" added for SDL, default hotkey F2
19-oct-2008 - adelikat - win32 - added a toggle for binding savestates to movies
18-oct-2008 - adelikat - win32 - added -cfg (config file) command line argument
08-oct-2008 - zeromus - SF [ 2073113 ] Child windows inside debugging window get invalid sizes
08-oct-2008 - zeromus - SF [ 2153843 ] Lua ignores second joypad.set()
24-sep-2008 - punkrockguy318 - made the input config window more usable
24-sep-2008 - punkrockguy318 - --inputcfg can now be used without a filename
24-sep-2008 - punkrockguy318 - [ 2085437 ] should fix issues with missing author field crashing fceux
24-sep-2008 - punkrockguy318 - [ 2047057 ] added uninstall script for gfceux
24-sep-2008 - punkrockguy318 - [ 2062823 ] fixed ppc build errors and added LSB_FIRST option to build scripts
24-sep-2008 - punkrockguy318 - [ 2057006 ] --newppu option added to sdl, disabled by default
24-sep-2008 - punkrockguy318 - [ 2057008 ] lua is now optional, thanks shinydoofy for a patch. also fixed some build issues.
22-sep-2008 - punkrockguy318 - [ 2008437 ] fixed an issue where flawed movie would crash fceux on every startup
21-aug-2008 - punkrockguy318 - sdl - fixed issue where windowed mode would always be set to 32 bpp
18-aug-2008 - zeromus - windows - SF [ 2058942 ] Load state as... does not use the savestate override dir (fixed; now, it does)
18-aug-2008 - zeromus - windows - permit user optionally to proceed through the movie savestate mismatch error condition, in case he knows what he is doing.
18-aug-2008 - zeromus - fix a bug in the savestate recovery code which prevent aborted savestate loads from recovering emulator state correctly.
18-aug-2008 - zeromus - windows - bind a menu option for display framecounter
17-aug-2008 - zeromus - windows - fix problem where replay dialog couldnt work when the process current directory had changed to something other than emulator base directory
17-aug-2008 - zeromus - windows - autoload the only useful rom or movie from an archive, in cases where there is only one
17-aug-2008 - zeromus - gracefully handle non-convertible broken utf-8 text without crashing
17-aug-2008 - zeromus - windows - don't read every archive file when scanning for replay dialog. scan them, and only look for *.fm2
17-aug-2008 - zeromus - debugger - fix issue where keyboard keys get stuck when switching between debugger window and main window
15-aug-2008 - adelikat - fixed an oversight on my part. Sound config dialog will now look to see if Mute Turbo should be checked
---version 2.0.2 released---
14-aug-2008 - punkrockguy318 - SDL: prevent frame advance from crashing emulator
14-aug-2008 - punkrockguy318 - SDL build scripts now look for lua5.1 and lua (distributions package lua differently)
14-aug-2008 - zeromus - restore savestate error recovery functionality. This should have the side effect of guaranteeing that ( SF [ 2040761 ] Wrong savestate bug - crashes FCEUX) is resolved.
14-aug-2008 - zeromus - SF [ 2047001 ] Low speeds crash FCEUX
14-aug-2008 - zeromus - SF [ 2050371 ] FCM>FM2 converter should release file handle
13-aug-2008 - zeromus - restore ungzipping (and unzipping in sdl) capability which was lost when archive support was added
13-aug-2008 - zeromus - add FORBID breakpoints - regions which block breakpoints from happening if they contain the PC
13-aug-2008 - punkrockguy318 - SDL: fixed --input(1-4) options. input1 and 2 are regular inputs, input3 and 4 are famicom expansion inputs
12-aug-2008 - zeromus - fix SDL configfile woes. configfile now goes to ~/.fceux/fceux.cfg
12-aug-2008 - zeromus - SF [ 2047986 ] palflag 1 in .fm2 files crashes fceux
12-aug-2008 - adelikat - movie replay dialog displays fractions of a second
12-aug-2008 - punkrockguy318 - SDL: fixed segfault when opening .fcm files
12-aug-2008 - punkrockguy318 - SDL: Saner sound defaults for less choppy sound
12-aug-2008 - punkrockguy318 - SF [ 2047050 ] SDL: "--special" option fixed for special video scaling filters
12-aug-2008 - zeromus - SF [ 2046984 ] Player 3 inputs when not used
12-aug-2008 - zeromus - print a special message when trying to open an FCM reminding user to convert. (finishes SF [ 2011832 ] Opening non movie file crashes FCEUX)
12-aug-2008 - zeromus - SF [ 2046985 ] SRAM not wiped on power cycle (during movies)
11-aug-2008 - zeromus - restore IPS patching capability which was lost when archive support was added
11-aug-2008 - zeromus - SF [ 2011550 ] Buffer overflow (change vsprintf to vsnprintf)
11-aug-2008 - zeromus - SF [ 2047004 ] Moviefilenames without extension don't automatically get fm2
10-aug-2008 - zeromus - upgrade to cah4e3's latest mapper 163&164 code to fix a crash in a game
10-aug-2008 - zeromus - remove cnrom chr rom size limit for homebrew roms
10-aug-2008 - punkrockguy318 - SDL: cleaned up the SConsruct
10-aug-2008 - punkrockguy318 - SDL: fixed issue where fceu would lock up when file dialogs were opened during fullscreen
10-aug-2008 - punkrockguy318 - SDL: fixed bug where fceux would close when file dialogs were closed
10-aug-2008 - punkrockguy318 - SDL: File open dialog is now used to movie playback
10-aug-2008 - punkrockguy318 - SDL: File open wrapper now takes a titlebar argument
10-aug-2008 - punkrockguy318 - SDL: Cleanup of usage
10-aug-2008 - punkrockguy318 - SDL: rename options --no8lim -> --nospritelim and --color -> --ntsccolor
10-aug-2008 - punkrockguy318 - SDL: Screenshots now always prepend the game name.
10-aug-2008 - punkrockguy318 - SDL: Changed default A/B from numpad 2 and 3 to j and k.
10-aug-2008 - punkrockguy318 - SDL: Enable frameskip by default
10-aug-2008 - punkrockguy318 - SDL: Fixed a bug that would crash fceux if the emulation speed was overincreased
10-aug-2008 - punkrockguy318 - SDL: New default hotkeys to more closely match win32 defaults
10-aug-2008 - punkrockguy318 - SDL: Added lua script loading hotkey (f3). Non win32 SDL requires zenity for this to function.
10-aug-2008 - punkrockguy318 - SDL: Build script cleanup; also added option for DEBUG builds.
10-aug-2008 - zeromus - SF [ 2030405 ] Avi recording: no sound b0rks format
10-aug-2008 - zeromus - SF [ 2037878 ] Convert .fcm doesn't do special characters
09-aug-2008 - zeromus - SF [ 2040463 ] Add an "author" text field in the record movie dialog
09-aug-2008 - zeromus - re-enable support for old-format savestates.
09-aug-2008 - zeromus - SF [ 2041944 ] Savestates remember Lua painting
09-aug-2008 - zeromus - support loading movies from archives
08-aug-2008 - adelikat - added input display to the FCEUX main menu
08-aug-2008 - adelikat - fixed the (null) in the default lua directory listing
08-aug-2008 - adelikat - added shift+L as default hotkey for reload lua script
08-aug-2008 - adelikat - removed accel ctrl+x (prevented cut from working in accel dialogs)
08-aug-2008 - zeromus - fiddle with nametable viewer to display correct NT,CHR,ATTR data in more cases (specifically, including some exotic mmc5 cases).
08-aug-2008 - zeromus - fix a new bug in windows build which caused fourscore emulation to fail in some cases
07-aug-2008 - zeromus - add an option to pick a constant color to draw in place of BG when BG rendering is disabled (look for gNoBGFillColor in config; 255 means to use palette[0])
07-aug-2008 - adelikat - added a mute turbo option in sound config
07-aug-2008 - adelikat - new toggle - frame adv. - lag skip (menu item + hotkey mapping + saved in config)
07-aug-2008 - adelikat - put in -32000 protection on all dialogs that remember x,y
06-aug-2008 - adelikat - change config filename from fceu98.cfg to fceux.cfg
06-aug-2008 - zeromus - add lagcounter and lagflag to savestate
06-aug-2008 - zeromus - SF [ 2040448 ] View Slots bug - does not include new savestate naming
06-aug-2008 - zeromus - restore the debugger snap functionality
06-aug-2008 - zeromus - add memory.readbyterange to emulua
06-aug-2008 - zeromus - auto-fill .fcs extension in save state as dialog
06-aug-2008 - zeromus - mmc5 - 64KB WRAM games now work correctly
06-aug-2008 - zeromus - mmc5 - use of chr A regs for BG in sprite 8x8 mode is fixed
06-aug-2008 - zeromus - debugger - debugger window is now resizeable
---version 2.0.1 released---
04-aug-2008 - reorganize display toggle options in the menu
04-aug-2008 - adelikat - autofire fix
04-aug-2008 - zeromus - homebrew mmc5 games now have 64KB of exwram instead of only 8KB
04-aug-2008 - zeromus - fix crash related to player2 in lua scripts
03-aug-2008 - qfox - fixed player2 in lua scripts
---version 2.0.0 released---
fceux-2.2.2+dfsg0/debian-crossbuild.sh 0000775 0000000 0000000 00000000317 12304671341 0017560 0 ustar 00root root 0000000 0000000 #!/bin/sh
if [ -f /usr/bin/i586-mingw32msvc-windres ]; then HOST=i586-mingw32msvc
else HOST=i586-mingw32
fi
PLATFORM=win32 CC=${HOST}-gcc CXX=${HOST}-g++ WRC=${HOST}-windres WINDRES=${HOST}-windres scons $@
fceux-2.2.2+dfsg0/debian/ 0000775 0000000 0000000 00000000000 12304671341 0015051 5 ustar 00root root 0000000 0000000 fceux-2.2.2+dfsg0/debian/dfsg_cleanup.sh 0000775 0000000 0000000 00000000750 12304671341 0020044 0 ustar 00root root 0000000 0000000 #!/bin/sh
# Script to remove non-DFSG-free elements from fceux upstream tarball
# License: GPL-2+
set -e
extentions="bz2 chm dll exe gz lib zip"
for ext in ${extentions}; do
find . -name *.${ext} -print | \
while read i; do
echo "Removing '${i}'..."
rm "${i}"
done
done
dirs="~attic src/drivers/win/directx vc"
for d in ${dirs}; do
if [ -e "./${d}" ]; then
echo "Removing './${d}'..."
rm -rf "./${d}"
fi
done
# vim: si ts=4 sw=4 et:
fceux-2.2.2+dfsg0/documentation/ 0000775 0000000 0000000 00000000000 12304671341 0016500 5 ustar 00root root 0000000 0000000 fceux-2.2.2+dfsg0/documentation/TODO-PROJECT 0000664 0000000 0000000 00000002514 12304671341 0020276 0 ustar 00root root 0000000 0000000 Items to be completed before 2.0 release
FASTAPASS / FP_FASTAPASS / Are these archaic? They suck - ??
Separate frameskip/pause from EmulationPaused - zeromus
Make ALL Debugging code conditional - zeromus
Doxygen integration - DONE
* website integration
Linux build - soules
* clean-up of input device code
Windows build - zeromus
* verify rerecording
* verify debugging
* verify avi writing
Commandline parsing - lukas
* verify in windows - zeromus
Configfile parsing - lukas
* verify in windows - zeromus
Do we really need vc7 project? Cah4e3? - zeromus
Source code docs cleaning - zeromus
Homepage docs - zeromus
What is the proper gnu way to do CREDITS from the homepage? e.g. Marat Fayzullin - General NES information
Freenode registration - lukas
* homepage update
Default hotkey philosophy (there are different philosophies from XD and TAS) - ALL
Netplay - FUTURE STUFF
Move server code into tree - DONE
Ensure netplay compiles
verify netplay
----done-----
Investigate OSX build [ http://www.lamer0.com/ ] - zeromus [posted on blog...]
Move to scons - DONE
Merge garnet and sf repos - DONE
* Ensure gnome frontend is in repo - DONE
* Move to sourceforge SVN - DONE
--strategic--
Politics:
* aboutbox credits
* AUTHORS
Release:
* Press Release - ??
* Homepage updates
- eliminate old news, add new links
fceux-2.2.2+dfsg0/documentation/Videolog.txt 0000664 0000000 0000000 00000007503 12304671341 0021016 0 ustar 00root root 0000000 0000000 Since SVN revision 931, FCEUX features a new option to create avi files from a recorded movie and it is relatively easy to use if you know the bare basics of mencoder.
Call "scons CREATE_AVI=1" to activate it. You will, however, most likely need mencoder to use it.
You get the raw video data via stdin and the audio data from a fifo file. Let's say you want the video to be in the best quality available, no matter how long it takes or how big the avi file might get. In order to get the NES's original video resolution and a good sound quality, you might need to set some settings beforehand or just pass them along while calling mencoder.
Here's an example:
./fceux \
--xscale 1 --yscale 1 --special 0 \
--pal 0 \
--sound 1 --soundq 1 --soundrate 48000 --mute 1 \
--nospritelim 1 \
--no-config 1 \
--videolog "mencoder - -o myfirstencodedrun.avi \
-ovc x264 -x264encopts qp=0 \
-oac pcm \
-noskip -nocache -mc 0 -aspect 4/3
NESVSETTINGS" \
--playmov mymovie.fm2 myROM.nes
Now let's see what is done and why we did it:
First of all, we started fceux with "./fceux" and gave it some options:
"--xscale" and "--yscale" determine how much bigger the video in comparison to its regular size. It's no point to use anything other than 1 here because you can always see your video on fullscreen or at least scale it, can't you? As a nice addon, it saves time to create the avi file and also saves valuable space on your hard disk.
"--special" would usually do something fancy to your picture when you're playing a ROM, but again, it's mostly pointless to use for an avi.
"--pal 0" lets the game run at ~60Hz. Set this so 1 if you are using a PAL ROM.
"--sound 1" activates sound.
"--soundq 1" activates high quality sound.
"--soundrate 48000" sets the sound rate to 48kHz.
"--mute 1" mutes FCEUX while still passing the sound to mencoder. This way you can capture a movie and still listen to your music without having the NES sounds in the background.
"--nospritelim" deactivates the NES's 8 sprites per scanlines limit.
"--no-config 1" is used not to destroy your settings when creating an avi movie.
"--videolog" calls mencoder:
"-" states that we're getting the video stream from stdin.
"-o" determines the name of the produced avi file.
"-ovc x264" sets the video codec to be x264 and is highly recommended for quality reasons. However, if you using a version of x264 from Sep 28th 2008 or newer, mplayer will not be able to decode this again properly. Until this is fixed this mplayer, you might want to replace "-ovc x264 -x264encopts qp=0" with "-ovc lavc -lavcopts vcodec=ffv1:format=bgr32:coder=1:vstrict=-1". Watch out, though, as this needs *way* more space than x264 does.
"-x264encopts qp=0" tells the x264 codec to use a quantizer of 0, which results in lossless video quality.
"-oac pcm" saves the audio data uncompressed (this might turn out really big).
"-noskip" makes sure that no frame is dropped during capturing.
"-nocache" is responsible for immediate encoding and not using any cache.
"-mc 0" makes sure that the sound does not go out of sync.
"-aspect 4/3" sets the avi's aspect ratio so you can see it in fullscreen and have no borders to the left and right.
"NESVSETTINGS" takes care of proper recognition of the audio and video data from FCEUX.
"&> mencoder.log" lets mencoders log its output into a file called "mencoder.log" in your current working directory.
"--playmov" reads which movie file we want to load (here it's mymovie.fm2).
Lastly, we load our desired ROM (in this case it's "myROM.nes").
To go for faster encoding and thus less quality, change "-ovc x264 -x264encopts qp=0" to "-ovc xvid -xvidencopts bitrate=200" and "-oac pcm" to "-oac mp3lame -lameopts mode=3:preset=60" to create a 200 kbps xvid video with 60 kbps of mono mp3 audio.
Good luck! :)
fceux-2.2.2+dfsg0/documentation/cheat.html 0000664 0000000 0000000 00000027403 12304671341 0020460 0 ustar 00root root 0000000 0000000
FCE Ultra Cheat Guide
FCE Ultra Cheat Guide
Last updated November 12, 2003
Valid as of FCE Ultra 0.97.4
Table of Contents:
Introduction
FCE Ultra allows cheating by the periodic "patching" of arbitrary addresses
in the 6502's memory space with arbitrary values, as well as read substitution.
"Read substitution" is the method that would be used on a real NES/Famicom,
such as done by the Game Genie and Pro Action Replay. It is required
to support GG and PAR codes, but since it is relatively slow when done
in emulation, it is not the preferred method when a RAM patch will
suffice. Also, in FCE Ultra, read substitution will not work properly with
zero-page addressing modes(instructions that operate on RAM at $0000 through
$00FF).
The RAM 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).
Cheat Files
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 as follows(text in brackets []
represents optional parameters):
[S][C][:]Address(hex):Value(hex):[Compare value:]Description
Example:
040e:05:Infinite super power.
A colon(:) near the beginning of the line is used to disable the cheat.
"S" denotes a cheat that is a read-substitute-style cheat(such as with Game
Genie cheats), and a "C" denotes that the cheat has a compare value.
The Windows Interface
All addresses listed in the cheats window are in unsigned
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 cheats window contains the list of cheats for the currently loaded game
on the right side. Existing cheats can be selected, edited, and updated
using the "Update" button.
Cheat Search Interface
The cheat search interface consists of several components: a list of
addresses and associated data for a search, several command buttons,
and the search parameters.
Each entry in the list 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 cheat information box on the right side of the
window 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.
The following cheat methods/filters automatically perform the function
of the "Set Original to Current" button after "Do Search" is pressed.
"Value decreased."
Show the address if the value has decreased.
"Value increased."
Show the address if the value has increased.
Examples
"Mega Man 3" Windows Example
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 not, 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 right. 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 new entry will
appear in the cheats list. The cheat has been added.
"Over Horizon" Text Interface Example
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.
Tips
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.
fceux-2.2.2+dfsg0/documentation/faq 0000664 0000000 0000000 00000006500 12304671341 0017173 0 ustar 00root root 0000000 0000000 FCE Ultra General User's FAQ
preliminary version
Last updated on: Friday 13th, 2003
------------------
Q: Why do some games make a popping sound(Rad Racer 2, Final Fantasy 3)?
A: These games do a very crude drum imitation by causing a large jump in
the output level for a short period of time via the register at $4011.
The analog filters on a real NES and Famicom make it sound rather decent.
I have not completely emulated these filters. Enabling high-quality
sound emulation will also make these pseudo-drums sound better. See
the next question for more information.
Q: Why do some games' digitized sounds sound too loud?
Why do the drums in Crystalis and other games sound fuzzy?
A: The NES' digital to analog converter is faulty, in that it does not output
sound linearly. This effect is most noteable when a games messes with
register $4011, which is added with the triangle wave channel and the noise
channel outputs. When $4011 is set to a large value, the volume
of the triangle wave channel and the noise channel drop significantly. More
Importantly, when digitized sounds are being played and the digitized sample
stream is at a high value, less changes will be noticeable. In other words,
the byte sequence "00 01 00" would be much more audible than the sequence
"7e 7f 7e". This non-linearity is only emulated when high-quality sound
emulation is enabled.
Q: Why doesn't the NSF 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 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.
fceux-2.2.2+dfsg0/documentation/fceux-net-server.6 0000664 0000000 0000000 00000004521 12304671341 0021773 0 ustar 00root root 0000000 0000000 .\" Hey, EMACS: -*- nroff -*-
.\" (C) Copyright 2012 Joe Nahmias
.\"
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH FCEUX-NET-SERVER 6 "October 12, 2012"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
.\" .nh disable hyphenation
.\" .hy enable hyphenation
.\" .ad l left justify
.\" .ad b justify to both left and right margins
.\" .nf disable filling
.\" .fi enable filling
.\" .br insert line break
.\" .sp insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
fceux-net-server \- FCE Ultra game server
.SH SYNOPSIS
.B fceux-net-server
.RI [ options ]
.SH DESCRIPTION
This manual page documents briefly the
.B fceux-net-server
command.
.PP
\fBfceux-net-server\fP is the game server for multiplayer use of the FCE Ultra
family of NES emulators. This server will first look in
\fI/etc/fceux-server.conf\fP for options. If that file does not exist, it will
use the defaults given here. Any argument given directly will override any
default values.
.SH OPTIONS
These programs follow the usual GNU command line syntax, with long
options starting with two dashes (`-').
A summary of options is included below.
.TP
.B \-h, \-\-help
Displays a help message.
.TP
.B \-v, \-\-version
Displays the version number and quits.
.TP
.B \-p, \-\-port
Starts server on given port (default = \fI4046\fP).
.TP
.B \-w, \-\-password
Specifies a password for entry.
.TP
.B \-m, \-\-maxclients
Specifies the maximum number of clients allowed to access the
server (default = \fI100\fP).
.TP
.B \-t, \-\-timeout
Specifies the number of seconds before the server times out (default = \fI5\fP).
.TP
.B \-f, \-\-framedivisor
Specifies frame divisor, which controls the number of updates sent to client;
calculated as: 60 / framedivisor = updates per second (default = \fI1\fP).
.TP
.B \-c, \-\-configfile
Loads the given configuration file (default = \fI/etc/fceux\-server.conf\fP).
.SH SEE ALSO
.BR fceux (6),
The
.B FCEUX
project homepage
.RI < http://fceux.com/ >.
.SH AUTHOR
This manual page was written by Joe Nahmias
for the Debian GNU/Linux system (but may be used by others).
fceux-2.2.2+dfsg0/documentation/fceux.6 0000664 0000000 0000000 00000017724 12304671341 0017714 0 ustar 00root root 0000000 0000000 .\" t Hey, EMACS: -*- nroff -*-
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH FCEUX 6 "June 24, 2012"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
.\" .nh disable hyphenation
.\" .hy enable hyphenation
.\" .ad l left justify
.\" .ad b justify to both left and right margins
.\" .nf disable filling
.\" .fi enable filling
.\" .br insert line break
.\" .sp insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
fceux \- An emulator for the original (8-bit) Nintendo / Famicom game console.
.SH SYNOPSIS
.B fceux
.RI [ options ]
"filename"
.SH DESCRIPTION
.B FCEUX
is an emulator for the original (8-bit) Nintendo Entertainment System (NES).
It has a robust color palette rendering engine that is fully customizable,
along with excellent sound and joystick support, and even supports movie
recording and playback.
.SH OPTIONS
.SS Misc. Options
.TP
.B \--no-config {0|1}
Use default config file and do not save to it, when enabled.
.TP
.B \-g {0|1}, \--gamegenie {0|1}
Enable or disable emulated Game Genie.
.TP
.B \--nogui {0|1}
Enable or disable the GTK GUI.
.TP
.B \--loadlua FILE
Loads lua script from filename FILE.
.SS Emulation Options
.TP
.B \--pal {0|1}
Enable or disable PAL mode.
.SS Input Options
.TP
.B \-i DEV, \--inputcfg DEV
Configures input device DEV on startup.
Devices: gamepad powerpad hypershot quizking
.TP
.B \--input{1|2} DEV
Set which input device to emulate for input 1 or 2.
Devices: gamepad zapper powerpad.0 powerpad.1 arkanoid
.TP
.B \--input{3|4} DEV
Set the famicom expansion device to emulate for input 3 or 4.
Devices: quizking hypershot mahjong toprider ftrainer familykeyboard
oekakids arkanoid shadow bworld 4player
.TP
.B \--inputdisplay {0|1}
Enable or disable input display.
.TP
.B \--fourscore {0|1}
Enable or disable fourscore emulation.
.SS Graphics Options
.TP
.B \--newppu {0|1}
Enable or disable the new PPU core. (WARNING: May break savestates)
.TP
.B \--frameskip NUM
Set NUM of frames to skip per emulated frame.
.TP
.B \--clipsides {0|1}
Enable or disable clipping of the leftmost and rightmost 8 columns of
the video output.
.TP
.B \--slstart SCANLINE
Set the first scanline to be rendered.
.TP
.B \--slend SCANLINE
Set the last scanline to be rendered.
.TP
.B \--nospritelim {0|1}
When set to 0, this disables the normal 8 sprites per scanline limitation.
When set to 1, this enables the normal 8 sprites per scanline limitation.
NOTE: Yes, this option is 'backwards'.
.TP
.B \-x XRES, \--xres XRES
Set horizontal resolution for full screen mode.
.TP
.B \-y YRES, \--yres YRES
Set vertical resolution for full screen mode.
.TP
.B \--doublebuf {0|1}
Enable or disable double buffering.
.TP
.B \--autoscale {0|1}
Enable or disable autoscaling in fullscreen.
.TP
.B \--keepratio {0|1}
Keep native NES aspect ratio when autoscaling.
.TP
.B \--{x|y}scale VAL
Multiply width/height by VAL.
(Real numbers > 0 with OpenGL, otherwise integers > 0).
.TP
.B \--{x|y}stretch {0|1}
Stretch to fill surface on x/y axis (OpenGL only).
.TP
.B \-b {8|16|24|32}, \--bpp {8|16|24|32}
Set bits per pixel.
.TP
.B \--opengl {0|1}
Enable or disable OpenGL support.
.TP
.B \--openglip {0|1}
Enable or disable OpenGL linear interpolation.
.TP
.B \-f {0|1}, \--fullscreen {0|1}
Enable or disable full-screen mode.
.TP
.B \--noframe {0|1}
Hide title bar and window decorations.
.TP
.B \--special {1-4}
Use special video scaling filters.
(1 = hq2x 2 = Scale2x 3 = NTSC 2x 4 = hq3x 5 = Scale3x)
.TP
.B \-p FILE, \--palette FILE
Use the custom palette in FILE.
.TP
.B \--ntsccolor {0|1}
Enable or disable NTSC NES colors.
.TP
.B \--tint VAL
Set the NTSC tint.
.TP
.B \--hue VAL
Set the NTSC hue.
.SS Sound Options
.TP
.B \-s {0|1}, \--sound {0|1}
Enable or disable sound.
.TP
.B \--soundrate RATE
Set the sound playback sample rate (0 == off?).
.TP
.B \--soundq {0|1|2}
Set sound quality. (0 = Low 1 = High 2 = Very High)
.TP
.B \--soundbufsize MS
Set sound buffer size to MS milliseconds.
.TP
.B \--volume {0-256}
Sets the sound volume to the given value, where 256 is max volume.
.TP
.B \--trianglevol {0-256}
Sets the sound volume of the triangle wave to the given value, where 256 is max volume.
.TP
.B \--square1vol {0-256}
Sets the sound volume of square wave 1 to the given value, where 256 is max volume.
.TP
.B \--square2vol {0-256}
Sets the sound volume of square wave 2 to the given value, where 256 is max volume.
.TP
.B \--noisevol {0-256}
Sets the sound volume of the noise generator to the given value, where 256 is max volume.
.TP
.B \--lowpass {0|1}
Enables or disables lowpass filtering of the sound.
.TP
.B \--soundrecord FILE
Record sound to file FILE.
.SS Movie Options
.TP
.B \--playmov FILE
Play back a recorded FCM/FM2 movie from filename FILE.
.TP
.B \--pauseframe FRAME
Pause movie playback at frame FRAME.
.TP
.B \--moviemsg {0|1}
Enable or disable movie messages.
.TP
.B \--fcmconvert FILE
Convert fcm movie file FILE to fm2.
.TP
.B \--ripsubs FILE
Convert movie's subtitles to srt.
.TP
.B \--subtitles {0|1}
Enable or disable subtitle display.
.SS Networking Options
.TP
.B \-n SRV, \--net SRV
Connect to server SRV for TCP/IP network play.
.TP
.B \--port PORT
Use TCP/IP port PORT for network play.
.TP
.B \-u NICK, \--user NICK
Set the nickname to use in network play.
.TP
.B \-w PASS, \--pass PASS
Set password to use for connecting to the server.
.TP
.B \-k NETKEY, \--netkey NETKEY
Use string NETKEY to create a unique session for the game loaded.
.TP
.B \--players NUM
Set the number of local players.
.TP
.B \--rp2mic {0|1}
If enabled, replace Port 2 Start with microphone (Famicom).
.TP
.B \--videolog c
Calls mencoder to grab the video and audio streams to encode them. Check the documentation for more on this.?
.TP
.B \--mute {0|1}
Mutes FCEUX while still passing the audio stream to mencoder.
.TP
.SH KEYBOARD COMMANDS
.B FCEUX
has a number of commands available within the emulator.
It also includes default keyboard bindings when emulating game pads or power pads.
.SS Gamepad Keyboard Bindings
.TS
center box;
cb | cb, c | ci.
NES Gamepad Keyboard
=
Up Keypad Up
Down Keypad Down
Left Keypad Left
Right Keypad Right
A F
B D
Select S
Start Enter
.TE
.SS Other Commands
.PP
.TP 15
.BI
Toggle full-screen mode.
.TP 15
.BI
Cheat menu (command-line only).
.TP 15
.BI
Toggle savestate binding to movies.
.TP 15
.BI
Load LUA script.
.TP 15
.BI
Toggles background rendering.
.TP 15
.BI
Save game state into current slot (set using number keys).
.TP 15
.BI
Restore game state from current slot (set using number keys).
.TP 15
.BI
Toggle movie subtitles.
.TP 15
.BI
Reset NES.
.TP 15
.BI
Save screen snapshot.
.TP 15
.BI Shift +
Beging recording video.
.TP 15
.BI Shift +
Load recorded video.
.TP 15
.BI 0-9
Select save state slot.
.TP 15
.BI Page Up/Page Down
Select next/previous state.
.TP 15
.BI \-
Decrease emulation speed.
.TP 15
.BI =
Increase emulation speed.
.TP 15
.BI Tab
Hold for turbo emulation speed.
.TP 15
.BI Pause
Pause emulation.
.TP 15
.BI \e
Advance a single frame.
.TP 15
.BI .
Toggle movie frame counter.
.TP 15
.BI ,
Toggle input display.
.TP 15
.BI q
Toggle movie read-only.
.TP 15
.BI '
Advance a single frame.
.TP 15
.BI /
Lag counter display.
.TP 15
.BI Delete
Frame advance lag skip display.
.TP 15
.BR
Quit
.B FCEUX.
.SS VS Unisystem Commands
.PP
.TP 15
.BI
Insert coin.
.TP 15
.BI
Show/Hide dip switches.
.TP 15
.BI 1-8
Toggle dip switches (when dip switches are shown).
.SS Famicom Disk System Commands
.PP
.TP 15
.BI
Select disk and disk side.
.TP 15
.BI
Eject or insert disk.
.TP
.I http://fceux.com/
The
.B FCEUX
project homepage.
.SH AUTHOR
This manual page was written by Joe Nahmias ,
Lukas Sabota and Alexander Toresson
for the Debian GNU/Linux system
(but may be used by others).
fceux-2.2.2+dfsg0/documentation/fcs.txt 0000664 0000000 0000000 00000011541 12304671341 0020016 0 ustar 00root root 0000000 0000000 FCE Ultra Save State Format
Updated: Mar 9, 2003
---------------------------------------
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. Example of relevant parts:
FCS
-- 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).
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:
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)
NREG uint16 Noise LFSR.
P17 uint8 Last byte written to $4017.
PBIN uint8 DMC bit index.
PAIN uint32 DMC address index(from $8000).
PSIN uint32 DMC length counter(how many bytes left
to fetch).
---- Section "EXTRA" (varying emulator specificness)
For iNES-format games(incomplete, and doesn't apply to every game):
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 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.
WAVE uint8[64] Carrier waveform data.
MWAV uint8[32] Modulator waveform data.
AMPL uint8[2] Amplitude data.
fceux-2.2.2+dfsg0/documentation/fm2.txt 0000664 0000000 0000000 00000011135 12304671341 0017726 0 ustar 00root root 0000000 0000000 FM2 is ascii plain text.
It consists of several key-value pairs followed by an inputlog section.
The inputlog section can be identified by its starting with a | (pipe).
The inputlog section terminates at eof.
Newlines may be \r\n or \n
Key-value pairs consist of a key identifier, followed by a space separator, followed by the value text.
Value text is always terminated by a newline, which the value text will not include.
The value text is parsed differently depending on the type of the key.
The key-value pairs may be in any order, except that the first key must be version.
Integer keys (also used for booleans, with a 1 or 0) will have a value that is a simple integer not to exceed 32bits
- version (required) - the version of the movie file format; for now it is always 3
- emuVersion (required) - the version of the emulator used to produce the movie
- rerecordCount (optional) - the rerecord count
- palFlag (bool) (optional) - true if the movie uses pal timing
- fourscore (bool) (*note C) - true if a fourscore was used
- port0, port1 (*note C) - indicates the types of input devices. Supported values are:
SI_GAMEPAD = 1,
SI_ZAPPER = 2
- port2 (required) - indicates the type of the FCExp port device which was attached. Supported values are:
SIFC_NONE = 0
String keys have values that consist of the remainder of the key-value pair line. As a consequence, string values cannot contain newlines.
- romFilename (required) - the name of the file used to record the movie
- comment (optional) - simply a memo.
by convention, the first token in the comment value is the subject of the comment.
by convention, subsequent comments with the same subject will have their ordering preserved and may be used to approximate multiline comments.
by convention, the author of the movie should be stored in comment(s) with a subject of: author
Hex string keys (used for binary blobs) will have a value that is like 0x0123456789ABCDEF...
- romChecksum (required) - the MD5 hash of the rom which was used to record the movie
- savestate (optional) - a fcs savestate blob, in case a movie was recorded from savestate
GUID keys have a value which is in the standard guid format: 452DE2C3-EF43-2FA9-77AC-0677FC51543B
- guid (required) a unique identifier for a movie, generated when the movie is created, which is used when loading a savestate to make sure it belongs to the current movie.
The inputlog section consists of lines beginning and ending with a | (pipe).
The fields are as follows, except as noted in note C.
|c|port0|port1|port2|
field c is a variable length decimal integer which is a bitfield corresponding to miscellaneous input states which are valid at the start of the frame.
Current values for this are
MOVIECMD_RESET = 1
the format of port0, port1, port2 depends on which types of devices were attached.
SI_GAMEPAD:
the field consists of eight characters which constitute a bitfield.
any character other than ' ' or '.' means that the button was pressed.
by convention, the following mnemonics will be used in a column to remind us of which button corresponds to which column:
RLDUTSBA (Right,Left,Down,Up,sTart,Select,B,A)
This seemingly arbitrary ordering is actually the reverse of the originally-desired order, which was screwed up in the first release of FCEUX. So we have preserved it for compatibility's sake.
SI_ZAPPER:
XXX YYY B Q Z
XXX: %03d, the x position of the mouse
YYY: %03d, the y position of the mouse
B: %1d, 1 if the mouse button is pressed; 0 if not
Q: %1d, an internal value used by the emulator's zapper code (this is most unfortunate..)
Z: %d, a variable-length decimal integer; an internal value used by the emulator's zapper code (this is even more unfortunate..)
SIFC_NONE:
this field must always be empty.
* Notes *
A. There is no key-value pair that indicates the length of the movie. This must be read by scanning the inputlog and counting the number of lines.
B. All movies start from power-on, unless a savestate key-value is present.
C.
If a fourscore is used, then port0 and port1 are irrelevant and ignored.
The input types must all be gamepads, and the inputlog will be in the following format:
{player1 player2 player3 player4}
|c|RLDUTSBA|RLDUTSBA|RLDUTSBA|RLDUTSBA|port2|
If a fourscore is not used, then port0 and port1 are required.
D. The emulator uses these framerate constants
- NTSC: 1008307711 /256/65536 = 60.099822938442230224609375
- PAL : 838977920 /256/65536 = 50.00698089599609375
E. The author of this format is curious about what people think of it. Please let him know! fceux-2.2.2+dfsg0/documentation/porting.txt 0000664 0000000 0000000 00000023635 12304671341 0020734 0 ustar 00root root 0000000 0000000 FCE Ultra Porting Guide
Updated: October 4, 2003
*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".
void FCEUD_Message(char *s);
Display a status message string.
int FCEUD_NetworkConnect(void);
Initialize a network connection. Return 0 if an error occurs.
int FCEUD_GetDataFromClients(uint8 *data);
/* Sends 5 bytes of data to all clients. */
int FCEUD_SendDataToClients(uint8 *data);
/* Sends 1 byte of data to server, and maybe a command. */
int FCEUD_SendDataToServer(uint8 v, uint8 cmd);
/* Gets 5 bytes of data from the server. This function must block. */
int FCEUD_GetDataFromServer(uint8 *data);
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);
"port" can be either 0 or 1, and corresponds to the physical
ports on the front of a NES.
"type" may be:
SI_NONE - No input on this port.
SI_GAMEPAD - Standard NES gamepad
SI_ZAPPER - "Zapper" light gun.
SI_POWERPAD - Power-pad mat.
SI_ARKANOID - Arkanoid controller.
void FCEUI_SetInputFC(int type, void *ptr, int attrib);
Special Famicom devices.
"type" may be:
SIFC_NONE - No input here.
SIFC_ARKANOID - Arkanoid controller.
SIFC_SHADOW - "Space Shadow" gun.
SIFC_4PLAYER - Famicom 4-player adapter
SIFC_FKB - Family Keyboard
void FCEUI_DisableFourScore(int s);
Disables four-score emulation if s is nonzero.
void FCEUI_SetSnapName(int a);
0 to order screen snapshots numerically(0.png), 1 to order them file
base-numerically(smb3-0.png).
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_ResetNES(void);
void FCEUI_PowerNES(void);
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=231, 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.
void FCEUI_GetNTSCTH(int *tint, int *hue);
void FCEUI_SetNTSCTH(int n, int tint, int hue);
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.
void FCEUI_MemDump(uint16 a, int32 len, void (*callb)(uint16 a, uint8 v));
Callback to dump memory.
void FCEUI_DumpMem(char *fname, uint32 start, uint32 end);
Dump memory to filename fname.
void FCEUI_MemPoke(uint16 a, uint8 v, int hl);
Write a byte to specified address. Set hl to 1 to attempt to store
it to ROM("high-level" write).
void FCEUI_NMI(void);
Triggers(queues) an NMI.
void FCEUI_IRQ(void);
Triggers(queues) an IRQ.
void FCEUI_Disassemble(uint16 a, int (*callb)(uint16 a, char *s));
Text disassembly.
void FCEUI_GetIVectors(uint16 *reset, uint16 *irq, uint16 *nmi);
Get current interrupt vectors.
***Recognized defined symbols:
The following defined symbols affect the way FCE Ultra is compiled:
C80x86
- Include 80x86 inline assembly in AT&T syntax, if available. Also
use special 80x86-specific C constructs if the compiler is compatible.
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 Apple IIs ^_^.
fceux-2.2.2+dfsg0/documentation/protocol.txt 0000664 0000000 0000000 00000006175 12304671341 0021113 0 ustar 00root root 0000000 0000000 FCE Ultra 0.91+ network play protocol.
Description v 0.0.1
--------------------------------------
In FCE Ultra, all data is sent to the server, and then the server
distributes, every emulated frame(60hz on NTSC), the collated data to the
clients.
The server should not block when it is receiving UDP data from the clients.
If no UDP data is available, then just go on.
The clients MUST block until the input data packet comes on every emulated
frame.
Packets from the server to the client are sent out over both TCP and UDP.
Duplicate packets should be discarded. Out-of-order packets can either
be cached, or discarded(what I recommend, as caching code gets a little
complex and wouldn't yield any benefit from what I've observed).
In the case of client->server UDP communications, the server should just use
the data from the UDP packet that has the highest packet number count, and
the server should then set its internal incoming packet counter to that
number(to prevent out-of-order packets from totally screwing up user input).
The "magic number"(used with UDP packets) is meant to reduce the chance of a hostile remote host
from disrupting the network play, without resorting to using extreme amounts
of network bandwidth. The server generates the magic number, and it is best
if the magic number is as random as possible.
UDP packets received with an incorrect magic number should be discarded, of
course.
Initialization, server->client:
uint32 Local UDP port(what the server is listening on).
uint32 Player number(0-3) for client.
uint32 Magic number(for UDP).
Initialization, client->server
uint32 Local UDP port(that the client is listening on).
Structure of UDP packet data:
uint32 CRC32 - Includes magic number, packet counter, and
data. For reference, CRC32 is calculated
with the zlib function crc32().
uint32 Magic number
uint32 Packet counter(linear, starts at 0).
uint8[variable] Data.
Structure of tcp packet data:
uint32 Packet counter(" ").
uint8[variable] Data.
Data format of server->client communications:
uint8[4] Controller data
uint8 Command byte. 0 if no command. Otherwise(in decimal):
1 Select FDS disk side.
2 Insert/eject FDS disk.
10 Toggle VS Unisystem dip switch editing.
11 ... 18 Toggle VS Unisystem dip switches.
19 Insert VS Unisystem coin.
30 Reset NES.
31 Power toggle NES.
40 Save state(not implemented correctly).
41 Load state(not implemented correctly).
42 ... 50 Select save state slot(minus 42).
Special message communications occurs if the "Packet counter" is
0xFFFFFFFF(only with TCP):
uint32 Length of text data, minus the null character(the null
character is sent, though).
uint8[variable] Text data. Convert all characters <32 to space, and
then display the text message(it's one line) as is.
Structure of client->server communication:
uint8 Controller data(for this client).
Over tcp channel, a text message can be sent. It is one line,
null terminated(remember the data and parse it and display it and
distribute it to the clients once the null byte is received).
Maximum size of message(including the null byte) should be 256 bytes.
fceux-2.2.2+dfsg0/documentation/snes9x-lua.html 0000664 0000000 0000000 00000056433 12304671341 0021411 0 ustar 00root root 0000000 0000000
Snes9x Lua Library
This is the API from DeHackEd's version of Lua in ZSnes. At the time of writing, FCUE's Lua was based on this API.
Basics
Your code will be run alongside the emulator's main loop. You code should
probably look roughly like this:
-- initialization goes here
while condition do
-- Code executed once per frame
snes9x.frameadvance()
end
-- Cleanup goes here
When Lua execution starts, the emulator will be automatically unpaused if it
is currently paused. If so, it will automatically be paused when the script
exits, voluntarily or otherwise. This allows you to have a script execute
some work on your behalf and then when it exits the emulator will be paused,
ready for the player to continue use.
Base library
Handy little things that are not put into a class. Mostly binary operations right now.
int AND(int arg1, int arg2, ..., int argn)
Since Lua lacks binary operators and since binary will come up with memory manipulation,
I offer this function. Output is the binary AND of all its parameters together.
Minimum 1 argument, all integers.
At a binary level, the AND of two binary bits is 1 if both inputs are 1, and the output
is 0 in any other case. Commonly used to test if a bit is set by ANDing with a number
with only the desired position set to 1.
int OR(int arg1, int arg2, ..., int argn)
The OR of two bits is 1 if either of the inputs is 1, and 0 if both inputs are 0.
Typically used to force a single bit to 1, regardless of its current state.
int XOR(int arg1, int arg2, ..., int argn)
XOR flips bits. An even number of 1s yields a zero and an odd number of 1s yields a 1.
Commonly used to toggle a bit by XORing.
int BIT(int which)
Returns a number with only the given bit set. which is in the range from 0 to 15 since the
SNES is a 16 bit system. BIT(15) == 32768
... Actually this system will accept a range of 0 to 30, but none of the memory access functions will
accept it, so you're on your own for those. 31 is not allowed for now due to signedness risking wreaking havoc.
Basic master emulator control.
snes9x.speedmode(string mode)
Selects the speed mode snes9x should run at while Lua is in control of frame advance. It must be set to one of the following:
In modes other than normal, pause will have no effect.
snes9x.frameadvance()
Snes9x executes one frame. This function pauses until the execution finishes. General system slowdown
when running at normal speed (ie. sleeping for 1/60 seconds) also occurs here when not in high speed mode.
Warning: Due to the way the code is written, the times this function may be called is restricted. Norably,
it must not be called within a coroutine or under a [x]pcall(). You can use coroutines for
your own purposes, but they must not call this function themselves. Furthermore, this function cannot be called from any
"registered" callback function. An error will occur if you do.
snes9x.message(string msg)
Displays the indicated string on the user's screen. snes9x.speedmode("normal") is probably the only way this is of any use,
lest the message not be displayed at all
snes9x.pause()
v0.05+ only
Pauses the emulator. This function blocks until the user unpauses.
This function is allowed to be called from outside a frame boundary (ie. when it is not allowed to call
snes9x.frameadvance). In this case, the function does not wait for the pause because you can't pause
midway through a frame. Your code will continue to execute and the emulator will be paused at the end
of the current frame. If you are at a frame boundary, this function acts a lot like snes9x.frameadvance()
plus the whole pause thing.
It might be smart to reset the speed mode to "normal" if it is not already so.
snes9x.wait()
v0.06+ only
Skips emulation of the next frame. If your script needs to wait for something to happen before proceeding (eg.
input from another application) then you should call this. Otherwise the GUI might jam up and your
application will not appear to be responding and need termination. It is expected that this function
will pause the script for 1/60 of a second without actually running the emulator itself, though it tends to be
OS-dependent right now.
If you're not sufficiently confused yet, think of this as pausing for one frame.
If you need to do a large amount of calculations -- so much that you risk setting off the rampant script
warning, just call this function every once in a while.
Might want to avoid using this if you don't need to. If the emulator is running at normal speed, paused
and the user presses frame-advance, they might be confused when nothing happens.
Memory access and manipulation.
int memory.readbyte(int address)
int memory.readword(int address)
Reads a number of bits (8 or 16) and returns the memory contents. The address must be a fully qualified
memory address. The RAM range is 0x7e0000 through 0x7fffff, but you may use any memory address, including
the ROM data itself.
int memory.readbytesigned(int address)
int memory.readwordsigned(int address)
v0.04+ only
Same as its counterparts, except numbers will be treated as signed. Numbers larger than 127 for bytes and
32767 for words will be translated into the correct negative numbers. For reference, an alternate formula
is to subtract 256 for bytes and 65536 for words from any number equal to or larger than half that number.
For example, a byte at 250 becomes 250-256 = -6.
memory.writebyte(int address, int value)
memory.writebyte(int address, int value)
Writes a number of bits (8 or 16) to the indicated memory address. The address MUST be in the range of
0x7e0000 through 0x7fffff.
memory.register(int address, function func)
When the given memory address is written to (range must be 0x7e0000 to 0x7fffff), the given function will be
called. The execution of the CPU will be paused mid-frame to call the given function.
Only one function can be registered with a memory address. 16 bit writes will only trigger the lower address
listener. There is no distinction between 8 and 16 bit writes. func may be nil in order to
delete a function from listening.
Code called may not call snes9x.frameadvance() or any savestate save/load functions, and any button
manipulation results are undefined. Those actions are only meaningful at frame boundaries.
Access to the gamepads. Note that Lua makes some joysticks do strange things.
Setting joypad inputs causes the user input for that frame to be ignored, but
only for that one frame.
Joypads are numbered 1 to 5.
Joypad buttons are selected by use of a table with special keys. The table
has keys start, select, up, down, left, right, A, B, X, Y, L, R. Note the
case is sensetive. Buttons that are pressed are set to a non-nil value
(use of the integer 1 is just a convention). Note that "false" is valid,
but discouraged as testing for logical true will fail.
Currently reading input from a movie file is not possible, but
a movie will record button presses from Lua.
table joypad.read(int which)
Returns a table indicating which buttons are pressed by the user.
This is probably the only way to get input to the script by the user.
This is always user input, even if the joypads have been set by joypad.set.
joypad.set(int which, table buttons)
Sets the buttons to be pressed. These choices will be made in place of
what the user is pressing during the next frame advance; they are then
discarded, so this must be called once every frame, even if you just want to
keep the same buttons pressed for several frames.
Control over the savestate process. Savestate objects are opaque structures
that represent non-player accessible states (except for the functions that
return "official" savesates). Such an object is garbage collectable, in which
case the savestate is no longer usable. Recycling of existing savestate objects
is highly recommended for disk space concerns lest the garbage collector
grow lazy.
Each object is basically a savestate file. Anonymous savestates are saved to
your temp directory.
object savestate.create(int userslot=nil)
Creates a savestate object for use. If the userslot argument
is given, the state will be accessible via the associated
F-key (F1 through F12 are 1 through 12). If not specified or
nil, an anonymous savestate is created that only Lua can access.
Each call to savestate.create() (without parameters) returns
a unique savestate. As such, if you discard the contents of a variable
containing an important savestate, you've just shot yourself in the foot.
An object may be used freely once created, saved over and loaded whenever.
It is an error to load an anonymous (non-player accessbile) state that
has not been saved yet, since it's empty.
Each savestate uses about 120 KB of disk space and the random filename generator
has its limits with regards to how many filenames it can generate. Don't go too
overboard. If you need more than 1000 savestates, maybe you should rethink
your tehcnique. (The actual windows limit is about 32768, Linux is higher).
savestate.save(object state)
Saves the current state to the given object. Causes an error if something goes horribly
wrong, or if called within any "registered" callback function.
savestate.load(object state)
Loads the given state. Throws an error for all the same bad things that might happen.
function savestate.registersave(function save)
v0.06+ only
Registers a function to be called on a savestate event. This includes both calls to
savestate.save() and users pressing buttons. The function will be called without
parameters.
The function called is permitted to return any number of string and number values.
Lua lets you do this by simply writing return 1, 2, 3, "four and five", 6.2, integerVar
These variables must be numeric or string. They will be saved into the savestate itself
and returned back to the application via savestate.registerload() should the state ever be loaded
again later.
Only one function can be registered. Registering a second function will cause the first function
to be returned back by savestate.registersave() before being discarded.
Savestates created with this mechanism are likely to break some savestate features in other emulators.
Don't be surprised if savestates from this version don't work on others if you enable all those
fancy features. Compatible savestates are created if there is no registered save function, or if
the save function returns no parameters at all.
function savestate.registerload(function load)
v0.06+ only
The companion to savestate.registersave, this function registers a function to be called during
a load. The function will be passed parameters -- exactly those returned by the function
registered for a save. If the savestate contains no saved data for your script, the function
will be called without parameters.
Concept code:
function saveState() .... end
function loadState(arg1, arg2, ...) ... end
savestate.registersave(saveState)
savestate.registerload(loadState)
-- Behind the scenes
local saved_variables
-- User presses savestate
saved_variables = { saveState() } -- All return values saved
-- Time passes
-- ...
-- User presses loadstate
loadState(unpack(saved_variables))
Access to movie information.
int movie.framecount()
Returns the current frame count, or nil if no movie is running.
string movie.mode()
Returns "record", "playback", or nil, depending on the current movie.
movie.rerecordcounting(boolean counting)
Select whether rerecording should be counted. If set to false, you can do
all the brute force work you want without inflating the rerecord count.
This will automatically be set to true after a script finishes running, so
don't worry about messing up the rerecord count for the player.
movie.stop()
Stops movie recording/playback. I'm not sure why you'd want to do that, but you can.
0.03+ only
The ability to draw on the surface of the screen is a long sought feature. The surface is 256x239 pixels
(256x224 most of the time though) with (0,0) being in the top-left corner of the screen.
The SNES uses a 16 bit colour system. Red and blue both use 5 bits (0 through 31) while green uses
6 bits (0 through 63), in place of the usual 0 to 255 range. If you want to construct your own exact colours,
multiply your red value by 2048, your green value by 32 and leave your blue value untouched. Add these all
together to get a valid colour. Bright red would be 31*2048 = 63488, for example.
Some strings are accepted. HTML style encoding such as "#00ff00" for green is accepted. Some simple strings such
as "red", "green", "blue", "white" and "black" are also accepted.
The transparent colour is 1 (a VERY dark blue, which is probably not worth using in place of black) or the string
"clear". Remove drawn elements using this colour.
Output is delayed by a frame. The graphics are drawn on a separate buffer and then overlayed on the image
during the next refresh, which means allowing for a frame to execute. Also, the buffer is cleared after drawing,
so if you want to keep something on screen, you must keep drawing it on each frame.
It is an error to draw outside the drawing area. gdoverlay is the only exception to this rule - images will
be clipped to the visible area.
r,g,b = gui.getpixel(int x, int y)
Returns the pixel on the indicated coordinate. (0,0) is the top-left corner and (255, 223) is the typical bottom-right corner,
though (255,238) is allowed. The return value range is (0,0,0) to (31,63,31). You get the actual screen surface before
any damage is done by your drawing. Well, unless you call snes9x.wait() in which case your damage is applied and the SNES
hardware doesn't get a chance to draw a new frame. :)
gui.drawpixel(int x, int y, type colour)
Draw a single pixel on the screen.
gui.drawline(int x1, int y1, int x2, int y2, type colour)
Draw a line between the two indicated positions.
gui.drawbox(int x1, int y1, int x2, int y2, type colour)
Draw a box going through the indicated opposite corners.
gui.text(int x, int y, string message)
Write text on the screen at the indicated position.
The coordinates determine the top-left corner of the box that the text fits in.
The font is the same one as the snes9x messages, and you can't control colours or anything. :(
The minimum y value is 9 for the font's height and each letter will take around 8 pixels of width.
Text that exceeds the viewing area will be cut short, so ensuring your text will fit would be wise.
string gui.gdscreenshot()
0.04+ only
Takes a screen shot of the image and returns it in the form of a string which can be imported by
the gd library using the gd.createFromGdStr() function.
This function is provided so as to allow snes9x to not carry a copy of the gd library itself. If you
want raw RGB32 access, skip the first 11 bytes (header) and then read pixels as Alpha (always 0), Red,
Green, Blue, left to right then top to bottom, range is 0-255 for all colours.
Warning: Storing screen shots in memory is not recommended. Memory usage will blow up pretty quick.
One screen shot string eats around 230 KB of RAM.
gui.gdoverlay(int x=0, int y=0, string gdimage)
0.04+ only
Overlays the given image on top of the screen with the top-left corner in the given screen location.
Transparency is not fully supported -- a pixel must be 100% transparent to actually leave
a hole in the overlayed image or else it will be treated as opaque.
Naturally, the format for input is the gd file format, version 1. The image MUST be truecolour.
The image will be clipped to fit into the screen area.
gui.transparency(int strength)
0.04+ only
Transparency mode. A value of 0 means opaque; a value of 4 means invisible (useful option that one).
As for 1 through 3, I'll let you figure those out.
All image drawing (including gui.gdoverlay) will have the given transparency level applied from that point
on. Note that drawing on the same point over and over will NOT build up to a higher opacity level.
function gui.register(function func)
0.04+ only
Register a function to be called between a frame being prepared for displaying on your screen and
it actually happening. Used when that 1 frame delay for rendering is a pain in the butt.
This function is not necessarily complicated to use, but it's not recommended to users
new to the whole scripting thing.
You may pass nil as the parameter to kill off a registered function. The old function (if any) will be
returned.
string function gui.popup(string message, [string type = "ok"])
v0.05+ only
Pops up a dialog to the user with a message, and returns after the user acknowledges the dialog.
type may be any of "ok", "yesno", "yesnocancel". The return value will be "yes", "no" or "cancel"
as the case may be. "ok" is a waste of effort.
Linux users might want to install xmessage to perform the work. Otherwise the dialog will
appear on the shell and that's less noticable.