diff --git a/AUTHORS b/AUTHORS index 5b6c91be..aee8aed9 100644 --- a/AUTHORS +++ b/AUTHORS @@ -67,8 +67,8 @@ Driver maintenance and refactoring >= 2.0 - These guys concentrated on keeping fceux the premiere linux-portable nes emu -Lukas Sabota - punkrockguy318 at comcast.net (sf:punkrockguy318) -Build system, sdl maintenance, testing, and cleanup +Lukas Sabota - ltsmooth42 at comcast.net (sf:punkrockguy318) +Head SDL developer Soules - gimmedonutnow at gmail dot com (sf:gimmedonutnow) Linux SDL driver maintenance diff --git a/SConstruct b/SConstruct index e51a8d28..8c76d26f 100644 --- a/SConstruct +++ b/SConstruct @@ -1,17 +1,17 @@ import os import sys -# XXX path separator fixed right now opts = Options() opts.AddOptions( BoolOption('FRAMESKIP', 'Enable frameskipping', 1), - BoolOption('OPENGL', 'Enable OpenGL support (SDL only)', 1) + BoolOption('OPENGL', 'Enable OpenGL support', 1), + BoolOption('DEBUG', 'Build with debugging symbols', 0) ) env = Environment(options = opts) # Default compiler flags: -env.Append(CCFLAGS = ['-Wall', '-Wno-write-strings', '-Wno-sign-compare']) +env.Append(CCFLAGS = ['-Wall', '-Wno-write-strings', '-Wno-sign-compare', '-O2']) if os.environ.has_key('PLATFORM'): env.Replace(PLATFORM = os.environ['PLATFORM']) @@ -85,10 +85,6 @@ else: env.Append(LINKFLAGS = "-llua5.1") env = conf.Finish() -# Build for this system's endianness, if not overriden -#if env.has_key('LSB_FIRST'): -# if env['LSB_FIRST']: -# env.Append(CPPDEFINES = ['LSB_FIRST']) if sys.byteorder == 'little' or env['PLATFORM'] == 'win32': env.Append(CPPDEFINES = ['LSB_FIRST']) @@ -98,14 +94,9 @@ if env['FRAMESKIP']: print "base CPPDEFINES:",env['CPPDEFINES'] print "base CCFLAGS:",env['CCFLAGS'] -# Split into release and debug environments: -#release_env = env.Clone(CCFLAGS = ['-O3', '-fomit-frame-pointer'], CPPDEFINES=["NDEBUG"]) -#debug_env = env.Clone(CCFLAGS = ['-O', '-g'], CPPDEFINES=["_DEBUG"]) -# THAT FAILED! Compromise: -#env.Append(CCFLAGS = ['-O3', '-g'], CPPDEFINES = ["_DEBUG"]) +if env['DEBUG']: + env.Append(CPPDEFINES=["_DEBUG"], CCFLAGS = ['-g']) -#SConscript('src/SConscript', build_dir='release', exports={'env':release_env}) -#SConscript('src/SConscript', build_dir='release', exports={'env':debug_env}) Export('env') SConscript('src/SConscript') @@ -114,10 +105,6 @@ exe_suffix = '' if env['PLATFORM'] == 'win32': exe_suffix = '.exe' -#fceux_r_src = 'src/release/fceux' + exe_suffix -#fceux_r_dst = 'bin/fceuxREL' + exe_suffix -#fceux_d_src = 'src/debug/fceux' + exe_suffix -#fceux_d_dst = 'bin/fceuxDBG' + exe_suffix fceux_src = 'src/fceux' + exe_suffix fceux_dst = 'bin/fceux' + exe_suffix diff --git a/attic/ChangeLog b/attic/ChangeLog index 027420b3..359eee9a 100644 --- a/attic/ChangeLog +++ b/attic/ChangeLog @@ -1,512 +1,3 @@ -0.98.12: - - Win32: Fixed the behavior of the sound logging function. - - Fixed a bug that was causing 2xscale/3xscale to be broken - when clipping the leftmost and rightmost 8 columns. - - Added an iNES header correction entry for JustBreed. - - Modified the MMC5 "ELROM" board emulation to not emulate WRAM. - - Corrected various pieces of code that were causing compiler warnings. - - Win32: Scaling settings(x, y, stretch to fill screen) are now respected while - using a special scaler in full screen mode, though if x or y scale is - less than what is needed for a particular scaler, it will be - adjusted. - - Win32: The window will be reblitted when it becomes invalidated while - a game is loaded(such as when you're resizing the window). - - When the PPU is in a "dead" state after starting up, the graphics - buffer is now cleared. Previously, particularly in the Windows port, when - a game was closed, and a new game was loaded, the last image from - the previous game would be displayed for a short time. - - Win32: Blit skipping will now occur when sound is disabled and FCE Ultra is - running behind the desired frame rate. - - Win32: Blit-skipping behavior can now be configured to some extent in the "Timing" configuration - window. - - Win32: Added a "Recent Directories" submenu to the "File" menu. - - Removed some debugging code that shouldn't have been enabled in 0.98.11. - -0.98.11: - - Win32: Special scalers are now also supported in windowed mode. For Scale2x/Scale3x, - the fastest "desktop" bit depth is 16bpp. For hq2x/hq3x, it is 32bpp. - - The shared video blitting code(drivers/common/vidblit.c) can now blit using Scale2x - and Scale3x to any target bit depth(8bpp, 16bpp, 24bpp, and 32bpp) instead of just - 8bpp, as it was before. - HQ2x and HQ3x can now blit to 16bpp, 24bpp(untested), and 32bpp. The 16bpp and - 24bpp targets are done doing post-processing conversion, after HQ2x/HQ3x, which - really does hurt speed. - - Changed a few names in the credits section of the documentation to their - aliases. Names you didn't get to pick to have are so troublesome. :b - I also made various fixes/updates to the documentation. - - Updated the FAQ with some information regard video mode bit depths and speed. - - SDL: Disabled the fast-forward-key speed-limiting code. I thought I had - done this before... - - Fixed a major bug in the movie recording code, and added some code to automatically detect - and fix playback of broken movies from earlier versions. - - Did a little swapping thing with mapper 90 and 209. I moved back Mortal Kombat 3 - to mapper 90, and moved Shin Samurai Spirits 2 to mapper 209. Sorry for any confusion. - Mapper 90 should be considered as having the fancy nametable select mode disabled, with - mapper 209 having it enabled. - - Added support for mapper 160, which turns out to be the same hardware as mapper - 90. Joy. - - Improved mapper 90 emulation. This mapper really needs low-level - emulation for IRQs to work right, though. :/ - - Win32: Fixed the "hide left/right 8 video columns" feature. - - Since FCE Ultra is ending(or has already exceeded? :b) its actively-updated life, - I've gone ahead and added per-game hacks for "Kick Master" and the PAL version - of "Star Wars". See the documentation for more details. - - Minor optimizations to the high-quality sound emulation code. The FIR filter - code is the bottleneck, though, so these changes won't have much of an effect - on overall speed. - - Altered MMC3 IRQ emulation(and the hooks in ppu.c for it). - - Fixed a rather major typo in the VRC7-emulation code. - -0.98.10: - - Reimplemented network play. It now requires a standalone network play server, which - will be released as a later time. For fun, "starmen.net" is running this server, - which is publicly accessible. - I also made various code fixes/improvements to allow for network play, particularly - with the command handling code. - - Reworked much of the VS Unisystem emulation code, partially based on information from - MAME. The following games are now supported: - - Battle City - Castlevania - Clu Clu Land - Dr. Mario - Duck Hunt - Excitebike - Excitebike (Japanese) - Freedom Force - Goonies, The - Gradius - Gumshoe - Hogan's Alley - Ice Climber - Ladies Golf - Mach Rider - Mach Rider (Japanese) - Mighty Bomb Jack (Japanese) - Ninja Jajamaru Kun (Japanese) - Pinball - Pinball (Japanese) - Platoon - RBI Baseball - Slalom - Soccer - Star Luster - Stroke and Match Golf - Stroke and Match Golf - Ladies - Stroke and Match Golf (Japanese) - Super Mario Bros. - Super Sky Kid - Super Xevious - Tetris - TKO Boxing - Top Gun - - Win32-native: Fixed a bug in the debugger's breakpoint list that appeared when - one tried to delete a breakpoint(the control accidentally had auto-sort enabled, - causing a discrepancy between what was displayed and what was contained in internal - data structures). - - The current disk image XOR original disk image is now stored in save states. This - should greatly increase compressability(important for network play), and make - it a little more legal to distribute such save states now. - - Modified the save state format to allow for more precise and larger version numbers. - - Various minor code changes. - - Fixed initialization of the FCEUGameInfo structure, which previously led - to problems with sound output on the SexyAL-using ports(Linux). - - Apparently I added support for mapper 255 a while back. Documentation updated. - - Added iNES header correction information for Armored Scrum Object and Alpha Mission. - - Merged banksw.h into ines.c, fixed some of its prototypes in ines.h. - -0.98.9: - - Win32-native: Fixed the speed throttling used when sound is disabled. In previous - 0.98.x Win32-native releases, emulation was running at 1/2 the speed it should - have been when sound was disabled. - - Win32-native: Moved settings in the "Miscellaneous" configuration window - to where they should have been in the first place, and added "GUI" and "Timing" - configuration windows to accommodate some. - - Win32-native: Fixed the handling of the "Scroll Lock" key used to disable and - enable Family BASIC Keyboard input. - - Updated documentation to handle some slight differences in the Win32-native - port("Win32-native" is what the Win32 port using native APIs, as opposed to something - like GTK+ and SDL, will be referred to in documentation now). I also made - some other minor wording adjustments to the documentation. - - Added an iNES header correction for Dragonball. - -0.98.8: - - Fixed a typo in sound.c that caused only part of the sound registers - to be saved in save states. - - Win32: Switched over to the DirectDraw7 interface, from DirectDraw4's. - The surface Flip() method will now block, which results in somewhat - smoother animation/scrolling, especially when combined with the - auto blit-skip implemented in 0.98.6 when sound is enabled. - - Win32: Undid a change made in the last release that limited the - speed of fast-forwarding when using the tilde key. I really do - need to implement some sort of unified timing/blit skip system... - - Win32: Added an option, disabled by default, to ask for confirmation - before exiting FCE Ultra. - - Win32: Added an option, enabled by default, to disable the system - screen saver while a game is loaded. - - Win32: Added a new video synchronization mode, a "lazy" wait for - vblank/vertical retrace. It calls Sleep(0) in its wait loop. This - still uses all available cpu cycles, but it is much more friendly - to other processes than the old-style wait for vblank. - - Win32: Added support for joystick POV hats. - -0.98.7: - - Fixed a bug in the debugger's disassembler when disassembling - opcode 0xBC. - - Fixed the behavior of the right mouse button with zapper emulation, to - correspond with what it is documented as doing. - - Win32: Added proper support for maximizing the window. - - Win32: Rewrote most of the input and input configuration code. - - Win32: Changed the configurable aspect ratio to something sensical, the current - display's pixel aspect ratio, default of 1:1(square pixels). - - Win32: Made the default full-screen video mode the custom video mode. I should have - done this a long time ago to make custom video mode configuration more straighforward - for users... - - Added some JACK audio code to be used by the SDL build. I'll test it and complete - it later. - -0.98.6: Made several code modifications to work with older versions of gcc. - - Fixed more header file network play #ifdef-age. - - Fixed a typo in cart.h. - - Fixed some funky code in FCEU_memmove(). - - Fixed some source code causing compiler warnings. - - Fixed SexyAL's format conversion code to not rely on deprecated casting semantics. - - Readded the native Win32 code, and made many improvements. The major thing - that needs to be done now with it is to rewrite the input handling code and input - configuration code. - -0.98.5: - Added LL to the 64-bit integer constants in ines.c - - Fixed OpenGL support under Mac OS X. - - Added the ability to hide background and/or sprites with the F4 key. - -0.98.4: - Moved NETWORK #ifdef's to netplay.c to simplify things. - - Fixed gzip file loading code(I think). I'm still a bit unsure about the semantics - of dup() and close(), though. - - Corrected FDS code to try loading the FDS image before loading the BIOS. - - Readded "native" SDL sound code, used for Mac OS X(and maybe BeOS). - -0.98.3: - Removed the wxWindows GUI code. GTK+ 2 code will take its place, - once it is ready. - - Added reset and power commands to the movie format. More commands(such as insert - disk, eject disk, flip dip switch, etc.) will be added simultaneously as work - on network play continues. - - Modified SexyAL OSS code to not adjust the number of fragments to a power of 2. - It works fine on my card, allowing finer-grained buffer size control, - but I'm not sure it will work with all chips. - - Fixed parsing of the "-specialfs" command-line argument. - - Added the hq3x scaler. - - Updated to the latest Scale2x code. I also added the Scale3x scaler. - - Changed the keyboard assignments for toggling full screen to "Alt" + "Enter". - - FCEUI_SaveState() and FCEUI_LoadState() changed. Porters should read - driver.h. - - Miscellaneous changes to accommodate new network play plan. It's not close - to being finished. - - Altered RTI emulation. In Paris Dakar Rally's NMI handler, it does "CLI ; RTI". - Previously, FCE Ultra would generate an interrupt right after RTI occured, due to the - presumed latency that RTI had with the I flag. I changed it so there is no latency, so - no interrupt will occur in this case(interrupts kill this game). The interrupt source - is the "frame IRQ", which it never disables, if anyone cares. - This change does break the "Stars SE" demo, though. Hmm. - - "FCEUGameInfo" is now a pointer, rather than just a statically-allocated structure. - This may cause some null-dereferencing-related crashes, but it should help keep - code a little cleaner(maybe?). - - Played around with the FDS FM code some more. It's still not right. Bah. - - Hacked in support for entering Datach/Barcode World barcodes without a GUI, using the - F8 key and the numeric keys. - - Added code to save/load movies. Movie support will only record/play back the - states of the four emulated gamepads. - - Modified the sound code to use timestamp/timestampbase differently. In addition, - timestampbase is now saved in save states("timestamp" doesn't need to be saved, since - it's reset to 0 at the end of each emulated frame). - -0.98.2: - Fixed a few problems with the SDL command-line build code - for Win32. Also, SDL 1.2.7 seems to have a bug that breaks FCE Ultra's - full-screen/windowed switching capabilities(at least under Win32). - Stupid everything. - - Minor SexyAL changes. - - Updated documentation. - -0.98.1: - - Increased the volume of the FME07 sound channels. - - Fixed a bug in the SexyAL endian conversion code. - - Made the SexyAL chunk conversion loop work. - - Replaced the old OPL2 emulator with a modified version of - Mitsutaka Okazaki's YM2413 emulator for the VRC7 sound emulation. - - Decreased the pitch of the FME 07 expansion sound channels by one octave. - - Decreased volume of output of $5011 in MMC5 emulation code. - - -0.98.0: Some changes I made aren't listed below. Ah well. The magnitude - of the changes was too great... - - - Default sound volume is 100(%), which makes a lot more sense than 75%, but not much. - It's multiplied by 3/4 internally now. - - Added support for the Datach barcode reader(GUI interface only). The emulation code - was adapted from the VirtuaNES source code. - - Reassigned the Datach games to mapper 157, from 16, with CRC32 checks. - - Increased the maximum number of screen snapshots in the snapshots directory - to 99999(from 999). - - Reassigned the following games to mapper 210, using CRC32 checks: - Chibi Maruko Chan - Dream Master - Family Circuit '91 - Famista '92 - Famista '93 - Famista '94 - Heisei Tensai Bakabon - Top Striker - Wagyan Land 2 - Wagyan Land 3 - If you use a hack/translation of one or more of these games, you will of course - need to manually change the mapper number in the header for it to work properly in - FCE Ultra. Family Circuit '91 still may not fit in with the rest of these games, - but it's definitely not a "stock" mapper 19 setup. - - Fixed an OpenGL palette bug when using scanlines(previously, I think it was - setting the palette of the scanlines overlay texture instead of the actual image - texture in some instances). The bug showed up on games that make use of the color - deemphasis bits. - - Rewrote a lot of the PPU background rendering code to be more accurate(and - obfuscated!). This eliminates the X-offset hack I made earlier. - - Removed some of the NSF visualization code, and altered the look of the NSF - display slightly. The NSF waveform visualization code will now take into - account the current volume setting. - - Changed the default key bindings for the standard emulated gamepad - to something more compatible with window managers. I may change it back, but probably - not, since it is easily configurable now. - - Updated the MMC5, VRC6, and FME07 low-quality sound emulation code - with the compatible parts of the high-quality sound emulation code for those chips. - - Adjusted timing of horizontal scroll update(near the beginning of hblank. I made - it occur sooner). I also added a hack to allow X-offset(fine X scroll) changes mid - scanline, however, it is extremely ugly, and may not work correctly for everything - (doing it correctly would probably kill speed). - I mainly did it to fix games like F-1 Race and Mach Rider, and other racing - games that are extremely sensitive to horizontal scrolling timing. - - Some FDS IRQ emulation changes to fix some screen corruption problems - in "Kaettekita Mario Bros". - - Removed zlib(the code, not support). - I also removed support for compiling without zlib(it's small, simple, provides - very useful functions, and may provide critical features for fceu in the future). - - *undone, breaks debugger, FIXME.* Replaced some inline functions with macros in x6502.c. - - Increased the speed of Namco 106 sound emulation in HQ sound mode. - - Many many sound emulation changes and adjustments based on blargg's tests. - The default sound volume is about 150% what it was before, because the sound range - has changed(now -soundvol 100 is like -soundvol 200 on older builds), and the - default "soundvol" setting is 75. 100 clips on some Namco games, and 200 clips - on many games, so I'll probably have the configurable volume range as [0:125]. - What exactly is "%" supposed to mean in this case.... 100% of what?! - - When using low-quality sound emulation mode, total emulation speed is about 10% - less than previous builds. The change in speed for high-quality sound emulation - mode is significantly less. - - Added beginnings of SexyAL to source code tree, removed SDL sound support, and - old OSS code. - - Copied over some autoconf/automake stuff from phamicom. It stills needs a bit - of work... - - Fixed DMC IRQ emulation. Fixes many CodeMasters games. Finally. ^_^ - - Restructured a lot of files, changed the interface between driver and - emulator code slightly. - - * Insert stuff here * - -November 28, 2003 - Snapshot - - Removed the DOS, Linux SVGAlib, and Win32 targets. *GASP* - Win32 support will return(eventually), using SDL + wxWindows. - SDL can use svgalib or GGI anyway, so it shouldn't be a huge loss. - DOS support will only return if someone ports SDL to DOS. ^_^ - It would be nice if SDL could accept modelines. Maybe in SDL 2.0... - - Merged fce.c and svga.c into fceu.c, and fce.h and svga.h into fceu.h. - - Reassigned "Mortal Kombat 3 - Special 56 Peoples" to mapper 209. - - Added emulation of the "Oeka Kids" tablet. - - Added emulation of the Family Trainer. - - Added emulation of the "Ultimate Quiz King" buzzers. - - Added emulation of the Mahjong controller. - - Added emulation of HyperShot controllers. - - Fixed loading of NSFs with load addresses below $8000. - - Cleaned and simplified some of the NES APU code. - - Altered mapper 65 emulation. Fixes Kaiketsu Yanchamaru 3. Does it break anything? - - Wrote a small FAQ file. - - Fixed displaying of garbage and other unpleasantness on the first scanline. I need - to clean up that code, though. - - Fixed color deemphasis emulation when all bits are set. For some - reason, I had commented out the code. Bleh. - - NSF player now writes $C0 to $4017 if the FDS is being used(the FDS - BIOS writes $C0 to $4017). $40 for all other NSFs. - - Added support for iNES mapper 58(nnnesterj). - - Added support for iNES mapper 208. - - Reassigned "Fudou Myouou Den" to mapper 207(CRC32 checks). - - Reassigned "Karnov" to mapper 206(CRC32 checks). - - Fixed the mapper 95 code, which was horribly broken. - - Differentiated between mappers 33 and 48. Added CRC checks to assign - some games to mapper 48. "Flintstones 2" and "Don Doko Don 2" are - the games that need to be assigned to 48. Are there others? - - Replaced usage of TriggerIRQ to X6502_IRQBegin/X6502_IRQEnd combos in - various mapper emulation files. 67, 33/48, 40, 73, 42, 65, 6, 182 - Removed function TriggerIRQ() from x6502.c - - Fixed the sound volume of the VRC7 emulation in high-quality sound mode. - Decreased(slightly) the volume of VRC7 emulation in both high-quality sound modes. - - Decreased the volume of the MMC5 expansion sound channels. - - Decreased the volume of the FME-7/mapper 69 expansion sound channels. - - Added FCEU_gmalloc(), which will call exit() if memory allocation fails, - otherwise it is guaranteed to return a memory block. - This will be used in the mapper code mainly. It should only - be used for small memory chunks. The reasoning is that if 64 some like KB of - RAM or less can't be allocated, for example, it'd probably be best to - exit the emulator ASAP. It also helps to simplify code logic, and - help (me) with modularization. - The behavior of this may change in the future. I still need to think about it. - I should probably save the configuration file regularly(or much better, - use the registry) on the Windows port, though. - - Cleaned up the save-state saving/loading code a bit, and added - support for linked save state structures for better modularity and - less code duplication. - - Merged the iNES and UNIF MMC1, MMC3, and MMC5 code more completely. - I may need to sanify CHR RAM and WRAM allocation for pedanticness, - though. Also worked on Tengen RAMBO-1 emulation, and mapper 90 emulation. - ***THIS MAKES SAVE STATES FOR GAMES THAT USE THESE EXPANSION CHIPS INCOMPATIBLE - WITH PREVIOUS VERSIONS*** - I plan on doing the same thing with other mappers/boards in the future, though. - Always on the quest for 1.0... - November 12, 2003 - 0.97.5 Release Windows: Added limited support for arguments that change configuration diff --git a/attic/ChangeLog.older b/attic/ChangeLog.older new file mode 100644 index 00000000..027420b3 --- /dev/null +++ b/attic/ChangeLog.older @@ -0,0 +1,2183 @@ +0.98.12: + + Win32: Fixed the behavior of the sound logging function. + + Fixed a bug that was causing 2xscale/3xscale to be broken + when clipping the leftmost and rightmost 8 columns. + + Added an iNES header correction entry for JustBreed. + + Modified the MMC5 "ELROM" board emulation to not emulate WRAM. + + Corrected various pieces of code that were causing compiler warnings. + + Win32: Scaling settings(x, y, stretch to fill screen) are now respected while + using a special scaler in full screen mode, though if x or y scale is + less than what is needed for a particular scaler, it will be + adjusted. + + Win32: The window will be reblitted when it becomes invalidated while + a game is loaded(such as when you're resizing the window). + + When the PPU is in a "dead" state after starting up, the graphics + buffer is now cleared. Previously, particularly in the Windows port, when + a game was closed, and a new game was loaded, the last image from + the previous game would be displayed for a short time. + + Win32: Blit skipping will now occur when sound is disabled and FCE Ultra is + running behind the desired frame rate. + + Win32: Blit-skipping behavior can now be configured to some extent in the "Timing" configuration + window. + + Win32: Added a "Recent Directories" submenu to the "File" menu. + + Removed some debugging code that shouldn't have been enabled in 0.98.11. + +0.98.11: + + Win32: Special scalers are now also supported in windowed mode. For Scale2x/Scale3x, + the fastest "desktop" bit depth is 16bpp. For hq2x/hq3x, it is 32bpp. + + The shared video blitting code(drivers/common/vidblit.c) can now blit using Scale2x + and Scale3x to any target bit depth(8bpp, 16bpp, 24bpp, and 32bpp) instead of just + 8bpp, as it was before. + HQ2x and HQ3x can now blit to 16bpp, 24bpp(untested), and 32bpp. The 16bpp and + 24bpp targets are done doing post-processing conversion, after HQ2x/HQ3x, which + really does hurt speed. + + Changed a few names in the credits section of the documentation to their + aliases. Names you didn't get to pick to have are so troublesome. :b + I also made various fixes/updates to the documentation. + + Updated the FAQ with some information regard video mode bit depths and speed. + + SDL: Disabled the fast-forward-key speed-limiting code. I thought I had + done this before... + + Fixed a major bug in the movie recording code, and added some code to automatically detect + and fix playback of broken movies from earlier versions. + + Did a little swapping thing with mapper 90 and 209. I moved back Mortal Kombat 3 + to mapper 90, and moved Shin Samurai Spirits 2 to mapper 209. Sorry for any confusion. + Mapper 90 should be considered as having the fancy nametable select mode disabled, with + mapper 209 having it enabled. + + Added support for mapper 160, which turns out to be the same hardware as mapper + 90. Joy. + + Improved mapper 90 emulation. This mapper really needs low-level + emulation for IRQs to work right, though. :/ + + Win32: Fixed the "hide left/right 8 video columns" feature. + + Since FCE Ultra is ending(or has already exceeded? :b) its actively-updated life, + I've gone ahead and added per-game hacks for "Kick Master" and the PAL version + of "Star Wars". See the documentation for more details. + + Minor optimizations to the high-quality sound emulation code. The FIR filter + code is the bottleneck, though, so these changes won't have much of an effect + on overall speed. + + Altered MMC3 IRQ emulation(and the hooks in ppu.c for it). + + Fixed a rather major typo in the VRC7-emulation code. + +0.98.10: + + Reimplemented network play. It now requires a standalone network play server, which + will be released as a later time. For fun, "starmen.net" is running this server, + which is publicly accessible. + I also made various code fixes/improvements to allow for network play, particularly + with the command handling code. + + Reworked much of the VS Unisystem emulation code, partially based on information from + MAME. The following games are now supported: + + Battle City + Castlevania + Clu Clu Land + Dr. Mario + Duck Hunt + Excitebike + Excitebike (Japanese) + Freedom Force + Goonies, The + Gradius + Gumshoe + Hogan's Alley + Ice Climber + Ladies Golf + Mach Rider + Mach Rider (Japanese) + Mighty Bomb Jack (Japanese) + Ninja Jajamaru Kun (Japanese) + Pinball + Pinball (Japanese) + Platoon + RBI Baseball + Slalom + Soccer + Star Luster + Stroke and Match Golf + Stroke and Match Golf - Ladies + Stroke and Match Golf (Japanese) + Super Mario Bros. + Super Sky Kid + Super Xevious + Tetris + TKO Boxing + Top Gun + + Win32-native: Fixed a bug in the debugger's breakpoint list that appeared when + one tried to delete a breakpoint(the control accidentally had auto-sort enabled, + causing a discrepancy between what was displayed and what was contained in internal + data structures). + + The current disk image XOR original disk image is now stored in save states. This + should greatly increase compressability(important for network play), and make + it a little more legal to distribute such save states now. + + Modified the save state format to allow for more precise and larger version numbers. + + Various minor code changes. + + Fixed initialization of the FCEUGameInfo structure, which previously led + to problems with sound output on the SexyAL-using ports(Linux). + + Apparently I added support for mapper 255 a while back. Documentation updated. + + Added iNES header correction information for Armored Scrum Object and Alpha Mission. + + Merged banksw.h into ines.c, fixed some of its prototypes in ines.h. + +0.98.9: + + Win32-native: Fixed the speed throttling used when sound is disabled. In previous + 0.98.x Win32-native releases, emulation was running at 1/2 the speed it should + have been when sound was disabled. + + Win32-native: Moved settings in the "Miscellaneous" configuration window + to where they should have been in the first place, and added "GUI" and "Timing" + configuration windows to accommodate some. + + Win32-native: Fixed the handling of the "Scroll Lock" key used to disable and + enable Family BASIC Keyboard input. + + Updated documentation to handle some slight differences in the Win32-native + port("Win32-native" is what the Win32 port using native APIs, as opposed to something + like GTK+ and SDL, will be referred to in documentation now). I also made + some other minor wording adjustments to the documentation. + + Added an iNES header correction for Dragonball. + +0.98.8: + + Fixed a typo in sound.c that caused only part of the sound registers + to be saved in save states. + + Win32: Switched over to the DirectDraw7 interface, from DirectDraw4's. + The surface Flip() method will now block, which results in somewhat + smoother animation/scrolling, especially when combined with the + auto blit-skip implemented in 0.98.6 when sound is enabled. + + Win32: Undid a change made in the last release that limited the + speed of fast-forwarding when using the tilde key. I really do + need to implement some sort of unified timing/blit skip system... + + Win32: Added an option, disabled by default, to ask for confirmation + before exiting FCE Ultra. + + Win32: Added an option, enabled by default, to disable the system + screen saver while a game is loaded. + + Win32: Added a new video synchronization mode, a "lazy" wait for + vblank/vertical retrace. It calls Sleep(0) in its wait loop. This + still uses all available cpu cycles, but it is much more friendly + to other processes than the old-style wait for vblank. + + Win32: Added support for joystick POV hats. + +0.98.7: + + Fixed a bug in the debugger's disassembler when disassembling + opcode 0xBC. + + Fixed the behavior of the right mouse button with zapper emulation, to + correspond with what it is documented as doing. + + Win32: Added proper support for maximizing the window. + + Win32: Rewrote most of the input and input configuration code. + + Win32: Changed the configurable aspect ratio to something sensical, the current + display's pixel aspect ratio, default of 1:1(square pixels). + + Win32: Made the default full-screen video mode the custom video mode. I should have + done this a long time ago to make custom video mode configuration more straighforward + for users... + + Added some JACK audio code to be used by the SDL build. I'll test it and complete + it later. + +0.98.6: Made several code modifications to work with older versions of gcc. + + Fixed more header file network play #ifdef-age. + + Fixed a typo in cart.h. + + Fixed some funky code in FCEU_memmove(). + + Fixed some source code causing compiler warnings. + + Fixed SexyAL's format conversion code to not rely on deprecated casting semantics. + + Readded the native Win32 code, and made many improvements. The major thing + that needs to be done now with it is to rewrite the input handling code and input + configuration code. + +0.98.5: + Added LL to the 64-bit integer constants in ines.c + + Fixed OpenGL support under Mac OS X. + + Added the ability to hide background and/or sprites with the F4 key. + +0.98.4: + Moved NETWORK #ifdef's to netplay.c to simplify things. + + Fixed gzip file loading code(I think). I'm still a bit unsure about the semantics + of dup() and close(), though. + + Corrected FDS code to try loading the FDS image before loading the BIOS. + + Readded "native" SDL sound code, used for Mac OS X(and maybe BeOS). + +0.98.3: + Removed the wxWindows GUI code. GTK+ 2 code will take its place, + once it is ready. + + Added reset and power commands to the movie format. More commands(such as insert + disk, eject disk, flip dip switch, etc.) will be added simultaneously as work + on network play continues. + + Modified SexyAL OSS code to not adjust the number of fragments to a power of 2. + It works fine on my card, allowing finer-grained buffer size control, + but I'm not sure it will work with all chips. + + Fixed parsing of the "-specialfs" command-line argument. + + Added the hq3x scaler. + + Updated to the latest Scale2x code. I also added the Scale3x scaler. + + Changed the keyboard assignments for toggling full screen to "Alt" + "Enter". + + FCEUI_SaveState() and FCEUI_LoadState() changed. Porters should read + driver.h. + + Miscellaneous changes to accommodate new network play plan. It's not close + to being finished. + + Altered RTI emulation. In Paris Dakar Rally's NMI handler, it does "CLI ; RTI". + Previously, FCE Ultra would generate an interrupt right after RTI occured, due to the + presumed latency that RTI had with the I flag. I changed it so there is no latency, so + no interrupt will occur in this case(interrupts kill this game). The interrupt source + is the "frame IRQ", which it never disables, if anyone cares. + This change does break the "Stars SE" demo, though. Hmm. + + "FCEUGameInfo" is now a pointer, rather than just a statically-allocated structure. + This may cause some null-dereferencing-related crashes, but it should help keep + code a little cleaner(maybe?). + + Played around with the FDS FM code some more. It's still not right. Bah. + + Hacked in support for entering Datach/Barcode World barcodes without a GUI, using the + F8 key and the numeric keys. + + Added code to save/load movies. Movie support will only record/play back the + states of the four emulated gamepads. + + Modified the sound code to use timestamp/timestampbase differently. In addition, + timestampbase is now saved in save states("timestamp" doesn't need to be saved, since + it's reset to 0 at the end of each emulated frame). + +0.98.2: + Fixed a few problems with the SDL command-line build code + for Win32. Also, SDL 1.2.7 seems to have a bug that breaks FCE Ultra's + full-screen/windowed switching capabilities(at least under Win32). + Stupid everything. + + Minor SexyAL changes. + + Updated documentation. + +0.98.1: + + Increased the volume of the FME07 sound channels. + + Fixed a bug in the SexyAL endian conversion code. + + Made the SexyAL chunk conversion loop work. + + Replaced the old OPL2 emulator with a modified version of + Mitsutaka Okazaki's YM2413 emulator for the VRC7 sound emulation. + + Decreased the pitch of the FME 07 expansion sound channels by one octave. + + Decreased volume of output of $5011 in MMC5 emulation code. + + +0.98.0: Some changes I made aren't listed below. Ah well. The magnitude + of the changes was too great... + + + Default sound volume is 100(%), which makes a lot more sense than 75%, but not much. + It's multiplied by 3/4 internally now. + + Added support for the Datach barcode reader(GUI interface only). The emulation code + was adapted from the VirtuaNES source code. + + Reassigned the Datach games to mapper 157, from 16, with CRC32 checks. + + Increased the maximum number of screen snapshots in the snapshots directory + to 99999(from 999). + + Reassigned the following games to mapper 210, using CRC32 checks: + Chibi Maruko Chan + Dream Master + Family Circuit '91 + Famista '92 + Famista '93 + Famista '94 + Heisei Tensai Bakabon + Top Striker + Wagyan Land 2 + Wagyan Land 3 + If you use a hack/translation of one or more of these games, you will of course + need to manually change the mapper number in the header for it to work properly in + FCE Ultra. Family Circuit '91 still may not fit in with the rest of these games, + but it's definitely not a "stock" mapper 19 setup. + + Fixed an OpenGL palette bug when using scanlines(previously, I think it was + setting the palette of the scanlines overlay texture instead of the actual image + texture in some instances). The bug showed up on games that make use of the color + deemphasis bits. + + Rewrote a lot of the PPU background rendering code to be more accurate(and + obfuscated!). This eliminates the X-offset hack I made earlier. + + Removed some of the NSF visualization code, and altered the look of the NSF + display slightly. The NSF waveform visualization code will now take into + account the current volume setting. + + Changed the default key bindings for the standard emulated gamepad + to something more compatible with window managers. I may change it back, but probably + not, since it is easily configurable now. + + Updated the MMC5, VRC6, and FME07 low-quality sound emulation code + with the compatible parts of the high-quality sound emulation code for those chips. + + Adjusted timing of horizontal scroll update(near the beginning of hblank. I made + it occur sooner). I also added a hack to allow X-offset(fine X scroll) changes mid + scanline, however, it is extremely ugly, and may not work correctly for everything + (doing it correctly would probably kill speed). + I mainly did it to fix games like F-1 Race and Mach Rider, and other racing + games that are extremely sensitive to horizontal scrolling timing. + + Some FDS IRQ emulation changes to fix some screen corruption problems + in "Kaettekita Mario Bros". + + Removed zlib(the code, not support). + I also removed support for compiling without zlib(it's small, simple, provides + very useful functions, and may provide critical features for fceu in the future). + + *undone, breaks debugger, FIXME.* Replaced some inline functions with macros in x6502.c. + + Increased the speed of Namco 106 sound emulation in HQ sound mode. + + Many many sound emulation changes and adjustments based on blargg's tests. + The default sound volume is about 150% what it was before, because the sound range + has changed(now -soundvol 100 is like -soundvol 200 on older builds), and the + default "soundvol" setting is 75. 100 clips on some Namco games, and 200 clips + on many games, so I'll probably have the configurable volume range as [0:125]. + What exactly is "%" supposed to mean in this case.... 100% of what?! + + When using low-quality sound emulation mode, total emulation speed is about 10% + less than previous builds. The change in speed for high-quality sound emulation + mode is significantly less. + + Added beginnings of SexyAL to source code tree, removed SDL sound support, and + old OSS code. + + Copied over some autoconf/automake stuff from phamicom. It stills needs a bit + of work... + + Fixed DMC IRQ emulation. Fixes many CodeMasters games. Finally. ^_^ + + Restructured a lot of files, changed the interface between driver and + emulator code slightly. + + * Insert stuff here * + +November 28, 2003 - Snapshot + + Removed the DOS, Linux SVGAlib, and Win32 targets. *GASP* + Win32 support will return(eventually), using SDL + wxWindows. + SDL can use svgalib or GGI anyway, so it shouldn't be a huge loss. + DOS support will only return if someone ports SDL to DOS. ^_^ + It would be nice if SDL could accept modelines. Maybe in SDL 2.0... + + Merged fce.c and svga.c into fceu.c, and fce.h and svga.h into fceu.h. + + Reassigned "Mortal Kombat 3 - Special 56 Peoples" to mapper 209. + + Added emulation of the "Oeka Kids" tablet. + + Added emulation of the Family Trainer. + + Added emulation of the "Ultimate Quiz King" buzzers. + + Added emulation of the Mahjong controller. + + Added emulation of HyperShot controllers. + + Fixed loading of NSFs with load addresses below $8000. + + Cleaned and simplified some of the NES APU code. + + Altered mapper 65 emulation. Fixes Kaiketsu Yanchamaru 3. Does it break anything? + + Wrote a small FAQ file. + + Fixed displaying of garbage and other unpleasantness on the first scanline. I need + to clean up that code, though. + + Fixed color deemphasis emulation when all bits are set. For some + reason, I had commented out the code. Bleh. + + NSF player now writes $C0 to $4017 if the FDS is being used(the FDS + BIOS writes $C0 to $4017). $40 for all other NSFs. + + Added support for iNES mapper 58(nnnesterj). + + Added support for iNES mapper 208. + + Reassigned "Fudou Myouou Den" to mapper 207(CRC32 checks). + + Reassigned "Karnov" to mapper 206(CRC32 checks). + + Fixed the mapper 95 code, which was horribly broken. + + Differentiated between mappers 33 and 48. Added CRC checks to assign + some games to mapper 48. "Flintstones 2" and "Don Doko Don 2" are + the games that need to be assigned to 48. Are there others? + + Replaced usage of TriggerIRQ to X6502_IRQBegin/X6502_IRQEnd combos in + various mapper emulation files. 67, 33/48, 40, 73, 42, 65, 6, 182 + Removed function TriggerIRQ() from x6502.c + + Fixed the sound volume of the VRC7 emulation in high-quality sound mode. + Decreased(slightly) the volume of VRC7 emulation in both high-quality sound modes. + + Decreased the volume of the MMC5 expansion sound channels. + + Decreased the volume of the FME-7/mapper 69 expansion sound channels. + + Added FCEU_gmalloc(), which will call exit() if memory allocation fails, + otherwise it is guaranteed to return a memory block. + This will be used in the mapper code mainly. It should only + be used for small memory chunks. The reasoning is that if 64 some like KB of + RAM or less can't be allocated, for example, it'd probably be best to + exit the emulator ASAP. It also helps to simplify code logic, and + help (me) with modularization. + The behavior of this may change in the future. I still need to think about it. + I should probably save the configuration file regularly(or much better, + use the registry) on the Windows port, though. + + Cleaned up the save-state saving/loading code a bit, and added + support for linked save state structures for better modularity and + less code duplication. + + Merged the iNES and UNIF MMC1, MMC3, and MMC5 code more completely. + I may need to sanify CHR RAM and WRAM allocation for pedanticness, + though. Also worked on Tengen RAMBO-1 emulation, and mapper 90 emulation. + ***THIS MAKES SAVE STATES FOR GAMES THAT USE THESE EXPANSION CHIPS INCOMPATIBLE + WITH PREVIOUS VERSIONS*** + I plan on doing the same thing with other mappers/boards in the future, though. + Always on the quest for 1.0... + +November 12, 2003 - 0.97.5 Release + + Windows: Added limited support for arguments that change configuration + to be passed to FCE Ultra. Example: fceu -pal 1 c:\streetgangs.nes + It may be useful in frontends. + + Fixed filename generation for automatic IPS patching when a file + with no extension is loaded. Before this change, FCEU would + look for "game..ips" with a file named "game". + + Converted and updated the cheat guide in(to) HTML. + + Added support for iNES mappers 202,203,231 from info from cah4e3. + Fixed support for mappers 60, 200. + + Fixed various major bugs in the breakpoint deletion code. + + UN*X: Added support for OSS(/dev/dsp) devices that don't support mono + sound. + + Increased PPU startup idle time to 2 frames. Fixes that + unlicensed "Earthworm Jim 3" game. Does it break anything? + +November 9, 2003 - 0.97.4 Release + + Fixed another obscure PPU emulation screen corruption bug. + + Added support for Game Genie cheats in the cheat interface. + + Windows: Reworked the cheat interface, merging the cheat search + and cheat list windows into one. + + Windows: Greatly improved the CPU debugger. + The code still needs a lot of cleaning, though. + + Readjusted VRC6 IRQ emulation timing. + + Added support for the UNIF MMC3 board TEROM. The maximum PRG/CHR sizes + may not be correct in this implementation, though. + +November 8, 2003 - 0.97.3 Release + + Added a control to set the highest quality sound mode in Windows. + This change requires that any users who previously set + "high quality sound" to set it again. + + Fixed the volume of high-quality sound mode again. The changes + I made earlier didn't affect all the filter coefficients. + +November 8, 2003 - 0.97.2 Release + + Made a minor optimization to writes to palette memory. + + Altered VRC6 IRQ emulation timing slightly. + + Fixed a weirdo PPU emulation bug that could cause garbage on the right + side of the screen in certain situations. Thanks to FrenziedPanda for + bugging me enough to make me look into the problem and fix it. + I should be on the lookout to see if the fix breaks anything, though. + + Fixed the volume of high-quality sound mode(-soundq 1). It was + at 1/4 the volume it should have been. I compensated by increasing + the precision of the filter coefficients, which increased the sound + quality of that mode slightly without hurting performance. + +November 7, 2003 - 0.97.1 Release + + Fixed mapper 105 emulation. I had begun merging it into the + rest of the MMC1 code for 0.97, but I hadn't finished it. + + Changed things like RdMem(_PC++); to RdMem(_PC); _PC++; + Darn evil global variables. I need to fix them. Screw speed. + + Expanded checks for the global variable "fceuindbg"(used in debug + mode to prevent reads in the debugger from altering any registers). + +November 6, 2003 - 0.97 Release + * Note: I still had much more I had wanted to get done for 0.97, + but I lost even more interest. The Windows port still doesn't + have a way to enable the "highest" sound emulation mode, nor the + low pass filter code, not to mention that the lowpass filter code + isn't complete(I would need to design a high-order FIR filter from an IIR + filter to work properly-have the correct rolloff, among other + things-at finite playback rates). + + Fixed a bug in the IPS patcher. The recorded size wasn't being updated + after a successful realloc() was made, which could lead to corrupted patch + data from some patches. + + Added support for mappers 200, 201 from submitted code. + + Rewrote mapper 15 support to make more sense(well, depending + on your point of view...). + + Fixed 256KB CHR select support for mapper 115. + + Added support for mapper 12 from code from cah4e3. + +October 16, 2003 - Snapshot + + Fixed support for mapper 245(for nonencrypted/non-smynes-screwed up + ROM images only. Fixes "Yong Zhe Dou E Long [...] Dragon Quest 7". + + Added support for mappers 60, 62, 230, 244 from submitted code. + + Modified mapper 90 emulation to allow game-select on reset + for "Final Fight 3". + + Modified mapper 45 emulation to allow "Super 8-in-1" to work. + + Added a low-pass filter, and an option to enable it(CLI ports). + + 0x00 is now written to $4011 in the NSF player code instead of 0x40. + Fixed some other similar sound register init problems that I had fixed + in Festalon but forgot to fix in FCEU. Grrr. + + Removed some unnecessary 64-bit integer usage from FIR sound filtering + code. + + Added a new sound quality mode. Higher than high, it's highest(in + FCE Ultra, for now). Still need to fix the interface to allow + enabling it in the Windows port. + + Added some code for lower-level MMC3 IRQ emulation. It isn't completed + , and will not work properly as-is. I'm still playing around with + it occasionally. + + Fixed the sprite overflow flag(I think I fixed it), that was broken in an earlier + pre-0.97 release. + + Fixed support for iNES mapper 193. + + Command line arguments "-pal" and "-gg" now take extra arguments(1/0) + and are remembered in the configuration file. + +September 27, 2003 - Snapshot + + Added support for iNES mapper 50. + + Modified the UNIF board initialization code. Hopefully, this + new interface will eventually be used with the iNES code. + + Miscellaneous code cleanups. + + /dev/dsp is now set to 8(previously 9) buffers of 128 samples in length + in the SDL code. + + Tried to make the save state code more expandable and modular. + + Moved a lot of the PPU code into ppu.c. + + Added more extensive debugging code to the 6502 emulator, to allow + for memory read/write hooks(including zero page addressing modes). + + Readadjusted DMC timings when PAL emulation is enabled. It looks + like it was correct before I had made the August 2 change. Thanks + to Bananmos for the information. I think. :/ + + Added support for iNES mapper 193 from information from virtuanes. + I think my dump of it is "bad", though. PRG and CHR pages look + like they are in the wrong order(logical vs physical? Who's to say + what's physical?). + +September 1, 2003 - Snapshot + + Fixed some minor initialization issues with iNES mappers 7 and 34. + + Added support for UNIF board NES-GNROM. + + Removed support for save states created with versions of FCE Ultra + less than 0.56. + + Replaced SDL sound buffering code with a lock-free FIFO implementation + written by David Olofson, with a few modifications by myself. + + Fixed a VRC7 NSF bug(it showed up under the reworked driver/file + loading order in the cli code). + + The board in "Rolling Thunder" has "RAMBO 1" on it, not "RAMBO-1". + +August 9, 2003 - Snapshot + + Removed the old plain text documentation and replaced it with + a new document in HTML. It is not completed yet, though. + + Rewrote the SDL-native audio code to be less wacky and more + thread-safe(hopefully). I'm still waiting for a new SDL audio + API... + + Altered the MMC5 IRQ timing. Fixes minor graphical glitches + in Castlevania 3. Does it break anything? + + Removed some debugging code that got into the last snapshot. + +August 5, 2003 - Snapshot + + Added some code in the IPS patcher to allow for expanding the size of files. + + Fixed a double free() bug with a mapper 51 game(in ines.c). + + Added support for "Alien Syndrome" (US release) as iNES mapper 158. + It looks like a derivative of the normal RAMBO-1 board(or is that + the name of the chip?), similar to TKSROM/TLSROM(mapper 118). + + Improved the "native" SDL sound code. It will now call SDL_Delay(), + among other nice things. The code could probably be improved more, + though. + + Added support for decimal components in xscale/yscale in the SDL + port. Set the default xscale for windowed mode to 2.40(to get a + more correct aspect ratio, assuming the display is currently at + a 4:3 aspect ratio). + + Modified args.c to handle floating-point numbers. + +August 2, 2003 - Snapshot. + + Disabled texture wrapping with OpenGL(there were problems at the edges + of the screen with linear interpolation). Bah. Now the edges + are too bright... + + Improved the accuracy of the DMC timing when PAL emulation is enabled. + I still don't think it's totally correct, though. + + Changed the default settings for the SDL code. Full screen + is now 640x480x8bpp by default, xscale and yscale are 2 for both full + screen and windowed, opengl support is enabled, linear interpolation + for OpenGL is enabled, and X-axis stretching is + enabled(in full screen). + + "Scanlines" were enabled in 8bpp to 8bpp blits in + drivers/common/vidblit.c when they shouldn't have been. Fixed. + + Fixed OpenGL code under big-endian platforms. + +August 1, 2003 - Snapshot. + + Various code clean-ups. + + Played around with adding a GTK+ GUI to the SDL code. + + Rewrote part of the hq sound rectangle wave code. + + Replaced the high-quality sound inline assembly filter code with + slightly faster C code. + + Hacked around with GP32 support. I don't know if the GP32 would + be fast enough, though. + + Skipped frames will now have D5 of $2002 set at the beginning + of the frame. Fixes "Bee 52". I must see if it breaks anything. + + Added OpenGL support to the SDL code. + + Removed the PPU drawing inline assembly code, replacing it with a faster + algorithm written in C. + + "Disabling" the 8-sprite limitation will no longer cause + "Bee 52" to break. However, the "Solstice" wizard will still + have the weird thing growing out of his face in the introduction, + since it depends on no more sprites to be rendered. + + Added entry for that Black Bass game for header corrections in + ines.c + + Strip color burst bit(D0 of $2001) is only "emulated" if bg or + sprite rendering are turned on, at the end of the scanline. + Doing it with pixel/tile granularity would require modifying + the sprite graphics data copying routine, which I don't + feel like doing. Fixes that crazy Sayoonara demo by Chris Covell. + I also modified the NES RAM initialization code. + + Adjusted VRC7 IRQ emulation for better Lagrange Point goodness. + + Added support for iNES mapper 91. (VirtuaNES) + +0.96: + Improved RAMBO-1(mapper 64) emulation. "Skull and Crossbones" is + now playable. + +0.95: + + timestamp and timestampbase are no longer saved/loaded to/from + save states. They were causing too many problems I didn't + want to fix, and I never intended them to be saved in save states + when I wrote the code that uses them. + I think the reason they were being saved was that I wanted to make it + possible to add movie support and network play save state loading + (distributing the save state over the network). So if someone in + the future wants to add these features, the issues(primarily with + zapper emulation and sound emulation) with saving the time stamp will + need to be resolved. + + Fixed some crashing bugs when save states are loaded when + high-quality sound emulation is enabled. It is like patching + holes in a swiss-cheese boat. All the holes may be patched, but + it looks ugly. At least it tastes good... + TODO: Look into saving more data in the save states, especially + data that is based off of "timestamp" and "timestampbase". Also + look into validating this data. Right now, corrupt save state data + might cause memory corruption in FCE Ultra. + + Fixed some bugs in the NSF player. + + Cleaned up more code. + + Reduced the usage of TriggerIRQ(). + + Split the palette code into a new file, palette.c, from svga.c + + Low-G-Man(NTSC and PAL versions) are now recognized by CRC32 value, + and WRAM will be disabled if they are loaded. A warning/status message + will also be printed regarding this issue. + + Decreased the volume of the DMC/PCM channel in low-quality sound + emulation. + + Low-quality sound emulation now uses 32-bit integers for much + better speed. + + FCEUI_CRC32() wasn't returning anything. D'oh. Fixed. + + Added somewhat crude support for games that switch background CHR data + mid-scanline (this is needed in games such as Mother, Pirates!, + Business Wars, and Marble Madness). + + Altered NMI, IRQ, and BRK emulation again. Fixes some games, + like Bases Loaded 2 and Dynamite Bowling, and maybe some others. + I had to increase the size of the IRQlow variable for delayed + NMI execution... I also had to add a delay between PPU reset + and the PPU actually doing anything, to fix "Knight Rider". + + Fixed a mapper 90 save state bug. + + /dev/dsp code now searches for /dev/dsp before /dev/dspX (where X is + a non-negative integer). + + SDL joystick axes configuration is now done from the joystick. + + Tweaked various Konami mappers' IRQ counter emulation. + + Added custom SDL throttle code that gives up time slices instead of + using 100% cpu. + + Fixed an issue with sprite priorities on MSB-first platforms. + + Modified powerpad.c to avoid a symbol conflict when compiling on the + Power PC architecture. + +0.94r3: + sound.c: + Fixed a divide-by-zero bug that occurred when a virtual + reset(like by pressing F10) occurred when sound emulation was + disabled. + +0.94r2: + drivers/common/vidblit.c: + Fixed code for 32bpp blur effect. + + drivers/cli/sdl-video.c: + Added error message for unsupported bit depths. + + mappers/simple.c, ines.c: + Used this bug fix pseudo-release as an excuse to add + support for mapper 107. Information taken from virtuanes. + +0.94(fixed release) +--- + Fixed call to InitUNIXDSPSound in svgalib.c + + Added man pages. + +0.94 +--- + Added support for rapid fire A/B buttons on physical joysticks + in SDL/svgalib/DOS code. + + Implemented "high-quality" Namco 106 emulation(used for hq sound mode). + In this case, "high-quality" means sounding more like it should, + not necessarily cleaner. I'm not certain that it's totally correct, + but it's in the right direction. + + RAM cheats should no longer affect Game Genie emulation. I still + need to completely verify this. There may be some sort of race + condition. + + Removed various minor speed hacks in the name of style and + correctness(and to make maintaining FCE Ultra easier for those + people who are not me). :) + + Removed NSF cpu hacks, as I changed code to make them unnecessary. + + Fixed another FDS IRQ emulation bug. "Famicom Grand Prix II" works + now. + + Fixed a memory leak and a heap corruption bug in "file.c". + + Added support for on-the-fly IPS patching. + Place the IPS file in the same directory as the file to load, + and name it filename.ips. + + Examples: Boat.nes - Boat.nes.ips + Boat.zip - Boat.zip.ips + Boat.nes.gz - Boat.nes.gz.ips + Boat - Boat.ips + + Some operating systems and environments will hide file extensions. + Keep this in mind if you are having trouble. + + Patching is supported for all supported formats(iNES, FDS, UNIF, and + NSF), but it will probably only be useful for the iNES format. It + can be used with the FDS format, but be warned that it will permanently + patch your disk image, as the disk image is written back to disk + when the game is unloaded(unless the disk image is in a zip file, in + which case it isn't written back to disk). UNIF files can't be + patched well with the IPS format because they are chunk-based with no + fixed offsets. Support for a UNIF patching format may be added + in the future(probably by someone else.). + + Added more games to the list in ines.c for having battery-backed + WRAM, for header corrections. + + Copied over the 96KHz filter coefficients from Festalon that I forgot + to do in 0.92. Oops. + + +0.93 +--- + + Reduced the volume of the FDS sound channel. + + Fixed a bug in the FDS IRQ emulation code that caused "Lutter" to not work. + + Fixed a bug in unif.c that would cause a crash if a unif file were + loaded without a board name being specified(as could happen + with a corrupted nsf). + + Fixed a bug in general.c relating to relative filenames(running + fce ultra like "./fceu ../big.nes" would work, but "./fceu ../big" + would not work- it crashed). + + + +0.92r2 +--- + Fixed dpcm irq bug that broke Cobra Triangle. + +.92 +--- + + Removed NSF player background, and added some special effects goodies. + + Changed the NSF player to use the emulated gamepad as input instead + of having special NSF-player-only keys. + + Added support for mapper 249(using nonencrypted games), thanks to SARO + for info. SMYNES sucks. + + Updated video blitting library-thing(vidblit.c) with more special + effects, and removed 24bpp support. + + SDL cleanupification. + + Added support for mapper 61. + + nnnesterj: Added support for mapper 57. + + Fixed mapper number for "Golden Game 150 in 1". Changed it to 235 + from 43. + + DDraw back buffer surfaces are now created in system memory if the + hardware blitter can't do stretching. + + Restructured file wrapping code. + + Added new cheat search methods. + + Fixed a major cheat unloading memory bug(and memory leak). + + Emulated that funky nonlinear DAC effect for hi-quality sound. + + More fixes/cleanups to FDS emulation code. + + Tweaked PPU timing a bit. + + Improved network play. + + Holding the enter key down will no longer do fun stuff to the nsf + player. + + Improved NSF player. It should support streaming pcm nsfs now... + + Changed FDS keyboard keys around a bit. F6 is the disk select key, + and F8 is the disk insert/eject key. + F8 to insert VS Unisystem coin, F6 to view/toggle dip switches. + Hopefully people won't complain after blindly hitting the save state + buttons. :) + + Many fixes and improvements to the Windows port. No more cpu-consuming + wait loops(specifically, sound). Added a message window. + + FDS sound emulation improvements. + + FDS disks are now auto-inserted on power on(or was it loading a new + game...). + + Changed the default last rendered scanline to 231. + + ines header corrections are now printed as status messages, not errors. + + Rearranged input updating code. + + Fixed a sprite transfer bug. Fixes PAL version of Rainbow Islands. + + Debugger hooks added. + + Small optimizations in Refreshline and FetchSpriteData to hopefully + offset the slight slowdown in the cpu core. + + MapperHBIRQHook is now called differently(depending on hi/low bg/spr + addresses). + + Added support for unif board UNL-8237. + + Added support for mapper 144(death race). + + Added partial support for mapper 74. + + Fixed a cpu emulation bug in GETIYWR. It would sometimes set "target" + to 0x10000, which was a BAD THING(overflow; now it wraps). + + Tried to add support for mapper 241. Needs special keyboard emulation. + I think. + + Internal RAM is now initialized to something other than 0. Fixes + Minna no Taabou no Nakayoshi Dai Sakusen. + + Reassigned "The Money Game" to mapper 155. It doesn't seem to + respect the WRAM enable/disable bits. Silly game. And + Tatakae!! Rahmen Man. + + Added support for mapper 115(still needs 256KB CHR select), 241, 114,88. + + Attempted to add support for mappers 91, 187. + + Modified frame IRQ to not break so many damn games. + + Fixed sprite hit detection loop. + + Improved support for mappers 80, 90,117,154, 189. + nnnester and virtuanes. + + Reassigned "Devil Man" to mapper 154. + + Removed bogus Trojan header fix in ines.c. + + + +.81-post: +---- + Fixed/Worked around(?) compilation problems on gcc 3.2.x. + +.81: +---- + + More SDL goodies. + + Renamed "Makefile.olinuxsdl" to "Makefile.unixsdl" + + More SDL fixes and cleanups. + + BeOS port is now compiled with the "-no-fpic" flag, which allows + me to use my inline assembly. The executable work fine as far as + I can tell. + + Added "Makefile.beos". gcc doesn't like my inline assembly + used in RefreshLine(),so this port will likely be slightly slower than + other x86 ports. + + Added a check to make sure SIGBUS is not equal to SIGSEGV in + drivers/cli/main.c. Needed for compiling under BeOS. + + Renamed the "PI" member of the X6502 structure due to conflicts with + a defined symbol with some math header files. + + Merged fcelineasm.h into fceline.h + + Fixed(possibly) a possible problem in fcelineasm.h with input register + clobbering. + + More SDL changes. + + Added speed throttling code to the CLI code, and added a command + line switch "-nothrottle". + + Lots of restructuring/rewriting/merging of the MMC3 code. + + Updated DOS code to use the generic CLI wrapper. + + Reads from $4090 and $4092 now return the current envelope setting + in FDS sound emulation. I'm not sure if this is correct... Affects + "Ai Senshi Nicole" and "Bio Miracle Bokutte Upa". + + Added native SDL sound support to the SDL code. the "olinuxsdl" + now uses this code by default instead of the unixdsp sound code. + + Modified MMC3 IRQ counter emulation. I'll need to watch out to see + if it breaks any games. Fixes: MegaMan 3, Gun Nac, Klax(Japanese). + + Changed a few memory reads in x6502.c to use RdRAM instead of RdMem, + resulting in a slight speed increase. + + Cleaned up mapper 250 emulation code. + + Added support for iNES mapper 51(thanks to Kevin Horton for the + information). + + Merged some iNES mappers corresponding to bootleg multicarts + based on MMC3s with mbshare/mmc3.c. + + Added support for iNES mapper 52(thanks to Kevin Horton for the + information). + + Made some hacks to the MMC3 emulation code so that I can add support + for pirate MMC3 multicarts more easily. I should clean it up later. + Moved mapper 44 emulation code to mbshare/mmc3.c. + + Saving screen snapshots will no longer corrupt the frame buffer + for one frame(unless memory couldn't be allocated). + + Fixed screen snapshot saving(it was sort of broken due to the + changes made to the driver<->emulator interface code; status + messages were being saved to the image). FCEUI_SaveSnapshot() + no longer returns a value(the request to save a screen snapshot is + serviced before status information would be written in the next frame). + + nosprites is now set to 0 before RefreshSprite() returns, to prevent + problems if a game turns off the bg and sprites when FetchSpriteData() + for the next scanline is called but then turns on sprites when + the actual scanline is drawn. + + PPU_hook() is now called more often if PPU_hook is non-null. + Made changes to mappers 118, 95, 9, and 10 to compensate. + No games seem to be broken, and I added support for mapper 96 + (though the games aren't very playable because the special controller + isn't emulated). + + Romance of the 3 Kingdoms is now recognized to use 16KB ex-WRAM. + + Added support for mapper 185...sort of. I think this is another + instance of incompatible hardware being lumped onto one mapper number. + Sigh. + + Added support for "Famicom Jump 2" as iNES mapper 153. + If a good(as far as I can tell) dump is loaded, FCE Ultra will + automatically fix the mapper number. + I also made some changes to the mapper 16 IRQ emulation code. + + BRK now sets the I flag. + + Reads from $4015 no longer reset DPCM IRQ. + + Changed emulation of RTI instruction slightly. + + X.IRQlow is now set to 0 in PowerNES(). + + The VS Unisystem bit in the iNES header is no longer looked at( + I was having too many problems with this bit being set when it + shouldn't have been). Now, VS Unisystem emulation is enabled + when a known VS Unisystem game is loaded. I also rewrote the VS + Unisystem detection function. + + iNES mapper 1 now supports pageable CHR RAM if no CHR ROM is present. + Fixes "Family School". + + Mapper 70 no longer has a mirroring control emulated, and I extended + the number of 8KB CHR pages supported to 16. + + Cleaned up iNES MMC5 save RAM loading/saving code and added + support for MMC1 games with 16KB of RAM(the second 8KB are saved), + via CRC32s(currently only Genghis Khan(USA) and Nobunaga's Ambition( + USA and Japan) are recognized). + + Added support for the MMC5 Koei game "Ishin no Arashi", in the iNES + format(I added an entry with its CRC32 value and the number of 8KB + WRAM banks it needs). + + Better iNES mapper 33/48 IRQ counter emulation. + + Added the game "Uchuusen - Cosmo Carrier" to this list. I'm + beginning to hate the iNES format more and more...or maybe + just Fanwen. :) + + Added the mapper 32 game "Major League" to the list of games + that usually need iNES header correction...but in this case, the + iNES header cannot specify that this game needs to have one-screen + mirroring. + + iNES header information is now printed before any header corrections + are made based on a database. + + Fixed a bug in mapper 32 emulation. "Ai Sensei no Oshiete" + works now. + + Tried to add support for iNES mappers 245 and 249. + + Fixed the MMC5 read handler to return the data last on the data + bus instead of 0xFF when a read was made to an unmapped address. + This seems to fix the lockup problems in "Bandit Kings of Ancient + China". + + Reversed "Modified the time at which the "y scroll" register is updated + during hblank." The changes broke Klax. + + Added an unsigned 64-bit base timestamp variable "timestampbase". + Adding this to the 32-bit variable "timestamp" will return + the number of cycles executed since emulation started(in the future + I'll probably change it to since reset or power toggle). + This allowed me to replace "lastn" hack in the MMC1 code with + something better. + + Changed my mind and undid the removal of support for old save states. + + Removed support for old save states and in general I won't + try to support save states made with previous versions. + + MMC1: Writes to $8000-$FFFF with D7 set will now cause + the first MMC1 register to be OR'ed with 0x0C. I'm not sure + if this is correct, but it doesn't seem to break anything + and it fixes Robocop 3. I'll see if anyone reports games + not working in .81 that worked in .80. + + Worked on a generic driver interface wrapper very similar + to the driver interface FCE Ultra used to use(I'm getting + tired of all of the duplicated driver code). Eventually, + the DOS, SVGAlib, and SDL ports will use this wrapper. + + Similar change to the argument parsing code. + + Changed configuration file saving-loading routines and the + configuration structure to allow for linking config structures + to each other). + + Small fix to the emulation of the MMC5 split screen mode. + + Made Linux SDL code compilable again. + + Changes to MMC5 EXRAM emulation(read/write). + + Fixes to the emulation of the MMC5's split screen mode, based on + observations while using CastleVania 3 and a Game Genie(on a real + NES). + + Fixed a bug in ines.c that caused any calls to AddExState() from + a mapper initialization function to be effectively "erased"(ResetExState() + was called after the mapper was initialized). Fixes the VRC7 sound + state saving/loading stuff. + + Finished adding support for the MMC5's split screen mode(this does + not mean that the support is complete, but at least the intro in + "Uchuu Keibitai SDF" works correctly now). + + Worked on adding support for the MMC5's split screen mode. Not + completed. + + Reverted to .80's FDS sound code. + + Modified the time at which the "y scroll" register is updated + during hblank. + + NSF playing code will now disable FDS sound output on song init + (fixes some problems with the Zelda no Densetsu NSF rip). + + Increased the emulated clock speed of the FDS sound emulation code + to give better quality output. + + Modified NMI to occur a few cycles later. Fixes BattleToads...but + it may have broken other games. Also modified the way NMI's are + handled in x6502.c. + + Modified ines.c to memset() GameMemBlock to 0 on virtual power toggle. + Also, trainers are now loaded into their own buffer instead of + directly into emulated WRAM and copied into emulated WRAM on + power toggle; I've been meaning to do this for quite some time. + + Changes to the way the zapper cursor is drawn on the screen. + + FCEUD_WriteSoundData(), FCEUD_BlitScreen(), and FCEUD_UpdateInput() + have been combined into one function: FCEUD_Update(). + + More fixes to the network play code, and a fix to the Windows network + play driver code that fixes(hopefully) a rather evil bug that caused + lockups when the remote stopped network play. + + Added code to set the battery-backed bit in RAM if a game needs it, + based on CRC32. + + Added more games to the list of games that commonly have bad iNES + headers, in ines.c + + Updated docs and usage.h for DOS and Linux regarding the new video + mode and the new refresh rates. + + Linux: Fixed a bug with video mode 6(a few upper scanlines were being + cut off). Increased the refresh rate of video mode 3 to 120hz. + + Increased the refresh rate of video mode 2 to 65 hz in the Linux port. + + Screen snapshots can now be taken while playing an NSF. + + Added a new sexy tweaked vga mode that I created to the Linux svgalib + port. It's 256x224 at a refresh rate of 103hz. Hopefully it won't + blow up anyone's monitor. ;) + DOS port will follow eventually. + + Modified Makefile.base to produce an executable named "fceu" instead + of "fce". + + The plans(cycle-accurate ppu emulation) for .90 were a bit ambitious, + and I still need to make other fixes before then. + + Fixed some minor(usually) bugs with setting 256x240 tweaked VGA mode + in DOS and Linux ports. + +.80: +---- + + Cleaned/fixed a few things in the mapper 19 emulation code. + Family Circuit '91 still doesn't work quite right... I wonder if + it's a bad dump. + + Added input override code to Windows port. + + Added code to fix iNES header information in RAM and suggest + changes to the user. + + Added support for iNES mapper 152(to be used with games set to + mapper 70, that use one-screen mirroring instead of h/v mirroring). + + Blits using the DirectX blitting function(method?) to the primary + surface are now done with the asynchronous flag set(if that + fails, a "normal" blit is tried). + + The DirectX blit buffer(secondary surface that FCE Ultra writes to + directly and then uses the DirectDraw blit function on to blit + to the primary buffer) is now created without specifying it + should be in system memory or video memory, except in the case + when no hardware blitting is available, and then DDraw is explicitly + told to create the surface in system memory. + + Added Family Keyboard support to the DOS port. + + Cleaned up the VRC7 sound emulation code. I need to find a way + to save the current sound state in a save state. + + Found out the real name of the "Space Shadow" gun; it's + called the "Hyper Shot". I'm still not sure who made it, though. + Possibly Bandai did. The interesting thing is that Konami + also made a Famicom accessory(dual square boxy things with two buttons + on each) with the same name(though there might not be a space in the + name). + + Only the upper two bits read from $4016/$4017 are undefined. + Bit5 is always 0, though. Fixed the bug in "input.c". + Silly kevtris' old documents. New kevtris' brain is always good. + + Family Keyboard support for the Windows port. + + Added support for the Family Basic Keyboard to the Linux port, other + ports todo. + Might want to add support for the tape recorder at some time. + Also mapped the "Scroll Lock" key to disable/enable command keys + so that the FBK is more useable. It doesn't disable CTRL C, + though... + + Changed a lot of inlined functions in x6502.c to macros so that + I could test out some optimization ideas. + + DOS code updates for game input override support. + + Small optimzation to opcode $4c, and relative jumps. + + Added some code to ines.c to set controller information in + FCEUGameInfo(returned by FCEUI_LoadGame()) based on crc32 values. + + Updated user documentation and usage.h for DOS and SVGAlib input + command-line changes. + + Added an option to disable the four-score(to Windows and Linux ports + so far). + + Updated Windows interface to support the new Famicom expansion + devices. + + (Re)Added support for the Famicom 4-player device. + + Improved Zapper emulation...sort of. It still needs a lot of work. :/ + + Added *partial* support for the "Space Shadow" gun. + + Added support for the Arkanoid controller(both NES and Famicom style). + + Added code to support the extension Famicom input devices. + + Added PAL scanline start/end drawing settings to Windows port. + + Added pause emulation key(F2) to Windows port. + + In the process of rewriting/fixing up input code stuff. + + Minor bug fix to Power Pad emulation code. + + VS Hogan's Alley and VS Duck Hunt automatically select the zapper + now(though it only works on the SVGAlib port). + + Undid some FDS sound code changes introduced in 0.76 that totally + screwed up sound. Oops. + + Added code to allow different settings for first/last scanline + drawn while in PAL emulation mode, to the Linux and DOS ports. + + Added convenience(it's not necessary, but it reduces redundant and + confusing code in the driver code) function + FCEUI_GetCurrentVidSystem(int *slstart, int *slend). + + Updated file "TODO". + + Changed #include to #include "zlib/unzip.h" + in file.c. + + NSF 6502 player now initialized the stack pointer on reset. + + Worked on de-emphasis emulation code quite a bit. + The deemphasized palette calculated at the end of the frame is now + based on what deemphasis bits were set for the longest during + the screen(sampling interval is a scanline) update loop. + Added a "static" deemphasized palette at $40-$7F in the palette table. + This corresponds to the colors when all of the deemphasis bits are set. + I did this to fix the PAL game "Noah's Ark", without breaking + anything else. The only downside is a slight speed loss(~2% on + my system when sound is disabled), but this is acceptable to me, + at least. + Maybe it's time to write hi/true-color ppu drawing code... + + + Fixed an out of bounds array access in svga.c in SetNESDeemph(). + The variable "lastd" in svga.c was being initialized to the wrong value. + Thanks to "Jarod CANAL" for pointing this out. + + Removed FCEUI_SetFirstRenderedLine or whatever it was called and + the function to set the last line. Replaced with: + void FCEUI_SetRenderedLines(int ntscf, int ntscl, int palf, int pall); + + Changed SetVidSys(int w) to ResetVidSys() in fce.c. Reenabled + PAL/NTSC emulation overrides based on game loaded(really only useful + for NSFs and UNIFs now). + + UNIF loading code now recognizes the chunk "CTRL" and tries + to use it. Only the svgalib code supports overriding of input + settings based on game loaded, now, though... + The user is still going to have to configure powerpad settings + on his/her own. + + Fixed return values of FCEU_fseek() and fixed a problem in unif.c + related to it. + + Changed mechanism for how FCE Ultra tells the driver + code what type of system is being emulated. A structure of + type "FCEUGI" is returned from FCEUI_LoadGame(). + + Fixed a major mapper 64 emulation bug introduced in 0.76. + + Modified BlitVidHi() in drivers/win/video.c to speed it up. + + Added support for loading the iNES-format Game Genie ROM image. + + Removed ggrom.h and added code to load the Game Genie ROM + image from a file. + + Added Windows netplay.c. (new: the user exiting the emulator + while stuck in a blocking recv() or send() loop now works.) + + Fixed a vram address register bug in fce.c that I created when I got + rid of the pair/dpair data types. + + Added new mappers/92.c + + Removed mappers/92.c until I can contact LULU or rewrite it. + + drivers/win changes. Removed netplay.c until I can rewrite it. + + Got rid of pair/dpair data types. + + Got rid of silly "TempArray" thing. + + Began adding GPL headers to files. FCE Ultra is going to be in + a state of legal limbo for the next few days... + + Replaced crc32.c and crc32.h, and added some #ifdef's and #defines + to use the crc32 code in zlib instead if zlib is linked with + FCE Ultra. + + More fixes to sb.c. + + Cleaned up drawing.h and ggrom.h(even though ggrom.h will *probably* + be removed before the next release). + + Redid frameskip code. + + Rewrote necessary pieces of sb.c and sb.h and fixed quite a few + bugs. I still need to test it on various other sound cards, though. + + Rewrote(more like "recreated in my own image") DOS keyboard driver. + Removed unused "keyscan.h" from drivers/svgalib + + Rewrote part of(the parts that Marat wrote - the connection and + closing parts) the Linux TCP/IP network play code. I guess it works, + but I haven't tested it very much. In any case, it's still dangerous + to use network play in FCE Ultra with SVGAlib, since recv() or send() + might block and since the keyboard is in raw mode, you have a problem. + Maybe a future SVGAlib will fix the general problem of lockups if + keyboard_update() isn't called, though it is only partly SVGAlib's + problem... + + Fixed FCEU_fseek() when used with a compressed file in the PKZIP + format that has been loaded. Fixes a UNIF loading problem. + Also added a check to the return value of FCEU_fseek() in unif.c. + + Replaced Marat's 6502 emulation core with my own. + It should be fully functional, but as always, I don't know if + I implemented the undocumented instructions correctly. + Several things are correct in this new core that were not in + Marat's(D flag is no longer cleared by interrupts, for example). + + Altered mapper 16 irq counter emulation slightly. + + Fixed the behavior of the SXA, SYA, and XAS opcodes based on the + documentation I have. I'm not sure what happens when page crossing + occurs with those instructions on a real NES, though. + Also CHANGED(not fixed) emulation of opcode $8B("XAA"). + + Changed some of the M* functions(absolute indexed and maybe some others) + to perform dummy reads. + + Changed some of the macros in m6502.c to inlined functions so + that I can modify and examine them more easily. + +.77: +---- + + Fixed a silly network play bug(in the global network play code) + that caused excessive lag. + + Added a "niceness" setting to the sound configuration dialog. + Removed obsolete information from the dialog. + + Fixed speed throttling code in Windows port when PAL emulation is + disabled/enabled and a new game hasn't been loaded yet. + + Commented out a printf() to debug stuff in fds.c(oops). + + Applied PK's joystick patch to the osdl code. It allows the user + to map axes and it fixes a joystick button mapping configuration saving + bug. + + Added two command line options new to Linux port to DOS port. + Just need to test them... + + Added some stuff to unif.c to allow for boards that can support + CHR RAM instead of CHR ROM(darn Sachen boards...). Fixes UNIF + version of "Q-Boy". + + Added command line option "-snapname" to Linux port. I'll add it + to the Windows port as well, but probably not to the DOS port. + + Added clip option to Linux port. + + Fixed sound logging(in Windows port) so that multiple recording + sessions now work. + + Added an option to clip the leftmost and rightmost 8 columns + of graphics in the Windows port. + + Added a submenu that lists recently opened files, in the Windows + port. + +.76: +---- + + Updated porting.txt. + + Added speed throttling code to Windows port that's used when sound is + disabled(and an option in the "Miscellaneous" + configuration window to disable it). + + Added cheat interface to DOS build. + + A few tweaks to the text cheat interface code in the cheat listing code. + Added a command to quickly toggle the status of the cheat(though a + cheat can still be disabled/enabled by (M)odifying the cheat). + + Support for UNIF UNL-TC-U01-1.5M board added. Same credits as below. + + Rewrote mapper 228 code just for the heck of it(actually, I couldn't + figure out why some(about two) of the games in the Action 52 cart + weren't working in .75(and .76). I traced it back to .71, where an apparent bug in + the undocumented 6502 opcode emulation allowed it to work, which + was later fixed for the .72 release(opcode 0x7C)). I'm thinking + that the dump is bad... + + Added a few crc32 checks to ines.c to check for and report when + a known(by me) bad(hacked or bad dump) game is loaded. + + Added support for the following UNIF boards. Thanks to Quietust + and Kevin Horton for the information. Some problems still exist + with a few games that use these boards, though... + + UNL-Sachen-8259B + UNL-Sachen-8259A + UNL-Sachen-74LS374N + UNL-SA-016-1M + UNL-SA-72007 + UNL-SA-72008 + UNL-SA-0036 + UNL-SA-0037 + + Fixes to some stuff in cart.c(for example, calling setprg32() when + only 16kb of prg data is present now works). + + Added support for iNES mapper 189. + + Tried to add support for the UNIF board "UNL-H2288". Failed. + + Updated "cheat.txt" to fix a few typos and added an example of finding + and adding a cheat using the Linux port's text interface. The actual + section on the Linux cheat interface still needs to be written, however. + + Changed network play code in the Windows port and fixed a bug. + Fixed a similar bug in the Linux netplay code....sort of. + + A few cosmetic changes to the dialogs in the Windows port. + + Fixed sound initialization on the Windows port(it was being initialized + when FCE Ultra started even if it was disabled by the user. Oops.). + + Joystick button configuration code in Windows port changed slightly + to be more useable. + + Changed reference to video mode 5 in the linux port to "1 per 4". + It may not be very meaningful, but it is certainly better + than "TV Emulation". I'll change the Windows port reference later. + + Documented video mode 7(320x240) for the Linux port. Also added + a check for the FBDev driver in order to use this mode instead + of a tweaked vga mode if that driver is being used. + + Added/Fixed cheat interface for Linux port. It's still not perfect, + though. The code is ugly... + + Callback function for FCEUI_ListCheats() now receives + status information(enabled/disabled). + + Callback functions for cheat functions now must return 0 to + stop listing cheats or 1 to continue. + + Fixed a problem(the cheat code was reading in cheats + for address $0000 from cheat files if any blank lines were present). + + SDL port zlib changes(linked dynamically to zlib now). + + More changes to envelope decay + looping on code. No longer + depends on value @ $4017. It now sounds correct based on some + tests I did with SMB3 and a GG, but Goonies 2 doesn't sound right( + based on a sound file sent to me by another person). + + Added support for iNES mapper 140. Thanks to Quietust for the + information. + + I need to figure out how to deal with the problem of so many + bad NSFs that most people consider good... + + Changed envelope decays a bit. Their behavior now depends on bit + 7 of $4017. I don't know if this is right... + + Addition of debug.c for some debugging stuff. + + Updated zlib to 1.1.4. + + Modified code in various files to allow UNIF games to override + current selected video system emulation(NTSC or PAL). Need to + make sure this really works. + + Changed sound.c to prevent desynchronization during network play. + This might slow down sound emulation slightly, especially when + sound emulation is disabled. I really don't care... + + Updating network play code. More info later... + + Moved the sound/video/etc output code in EmLoop() to the top of the + for(;;) loop so that initialization prior to calling EmLoop() will + be the same as initialization done during a call to a FCEUD_* function. + + A few very small changes to sound emulation in fds.c. + + Changed unlink() to remove() in cheat.c and removed the including + of the header file unistd.h. + + Split up the cc=... statement in RefreshLine() to make it easier + to read and not ambiguous(to Borland's C compiler). + + Changed a lot of the function declarations in cheat.c. I'll need + to verify that cheat searching still works ok and that cheats still work + ok. I'll also need to update the Windows(and Linux console) cheat code + to prevent compiler warnings. + + Fixed various minor code problems(not minor if you want to use a + compiler besides gcc). This is an ongoing process... + + Removed bit fields after reading about and thinking about possible + portability problems, though I kept some optimizations in fceline.h + + Minor code simplification in drivers/win/joystick.c(replaced + "case 200 ... 207" and "case 208 ... 215". + + Modified some code to use bit-fields in the graphics rendering code + in fce.c and fceline.h. gcc seems to be able to optimize the new + code to run faster. + + Fixed m6502.c and fce.c to initialize variables on virtual power + toggle. This should fix network play on the Windows port. + I'm also in the process of cleaning up fce.c. + +.75: +---- + Fixed directories configuration stuff in Windows port(corresponds + to .75r2). + + More changes to square wave channel envelope/volume emulation... + Changes described in the large paragraph some lines down have been + abandoned. + + Added a command line switch to set the volume in the dos port. + + Changed Windows sound configuration dialog. Now buffer length is + specified in time, not samples. I also added a volume control. + + Reduced the volume on 8-bit sound output on all ports by 1/2. + + Added a function FCEUI_SetSoundVolume(). Added support for setting + the volume via the command line in the Linux port, other ports coming + soon. + + Changed FCEUD_WriteSoundData() again. No longer has a "Check" + argument. All clipping(ugh) is done internally now. + + Added a directories configuration dialog to the Windows port. I worked + on it too long and I became a zombie, so it might have a few bugs. + That's what guine...err...users are for. ;) Don't expect me to do + anything like this for any other port, though. I don't feel like + doing it on the DOS port, and the Linux and other UNIXy ports shouldn't + really need it. + + Made some changes to the rectangle/square wave channel emulation to + fix the pops in SMB. I have no idea if what I did is correct. To + be honest, I'm not sure I know EXACTLY what I did, but it's something + like this: Writes to $4003/$4007 now reset the duty cycle count + and reload the cycle counter with the current wavelength. Writes to + $4003/$4007 now do not update the amplitude output of the channels; they + will be updated after the cycle counter hits 0(or below). + + More information in iNES informational output. + + Minor changes to mappers/16.c. + + Increased the volume of the VRC6's sawtooth wave channel. + + Added more information to the RAM cheat guide. + + Changed the triangle wave generation code slightly. I decided + to remove support for the higher-frequency triangle waves, as they + are too cpu-costly to create and are probably not very audible on a + real NES anyway. + + Major changes to how sound is mixed. This necessitated a high pass + DC-offset removing filter, and a low-pass filter just to make things + sound better. ^_^ + Note: FCEUD_WriteSoundData() no longer needs to clear the waveform + data referenced by the passed pointer; it's done internally now. + + Fixed JMP ($xxxx) - now handles wrapping like it occurs on a real 6502 + (hopefully; I'm assuming that the same holds true for the NES' cpu). + + Added the ability to load a custom global palette in the DOS port. + + Fixed bug in drivers/common/unixdsp.c(wrong return value if sample + rate was out of range). + + Many sound fixes... - Frequency sweeps, length counter stuff,... + + Changed Windows port to use IDirectInput7 and IDirectInputDevice7 + interfaces. + + Fixed a Game Genie bug in the core emulation code. It only appeared + in the Windows port, though. (Enabling gg emulation, loading a game, + and then disabling gg emulation and loading a new game while in the + gg code entry screen would cause the new loaded game to not work + correctly). + + Modified windows port to use the config saving/loading stuff in + drivers/common/config.c + + Mapper 45 cleanups/fixes. + + Added the ability to load a custom global palette in the Linux port. + Yay. + + Fixed a large number of overcomplicated code and silly bugs in + drivers/common/config.c. This changes the format of the configuration + structure, too. Also added support for saving/loading strings with + automatic memory allocation when strings are loaded. + + Minor change in InitNetplay(). + + Fixed bad type conversions for pointers to functions and fixed + some bad declarations of functions. + + Reenabled zlib support for the sdl build. I need to pay attention + to patches that modify lines than don't fit on my screen. + + Fixed vidblit.c to not emit so many warnings when compiling. + +.74: +---- + + Stop sound in Windows port when user clicks l/m/r mouse buttons + in the non-client area of the window. + + Added "Drag and drop" file open support to Windows port. + + Various code cleanups. + + mappers/33.c optimization. + + Rewrote the function "FCEU_MakeFName()". + + Removed crc32.h from mappers directory. + + Modified some of the window resizing code in the Windows port. + + Added support for waiting for vblank/double buffering to the Windows + port. + + Added/Fixed support for iNES mapper 248. + + After an NSF file is loaded, information about its header is now + displayed. + + Fixed a typo in the Namco 106 extra ram handling code. + + Improved the quality of the Namco 106's extra sound channels. + - Thank Mamiya and Applepie(real name?) for info. + + When an NSF file is being played, FCE Ultra will no longer go through + its scanline rendering loop. This speeds up NSF playback considerably. + + Updated "porting.txt". + + Moved some stuff from DriverInterface() to their own functions. + + Fixed some iNES mapper 18 IRQ counter emulation bugs. "Ninja Jajamaru - + Ginga Dai Sakusen" now works. + + Rewrote large pieces of the mapper 64 code. "Skull and Crossbones" + still doesn't work, though. + + Changed format of iNES header information output, added "ROM CRC32" info. + + Modified the way cycle timing is done slightly. No change + for NTSC emulation, but PAL emulation is a little more accurate. + + Changed the behavior of indirect indexed(I hope I got that right ;)) + instructions to behave more like a real 6502(junk reads are now + performed). + + A few optimizations/cleanups in m6502.c. + +0.73 +---- + + * Fixed several bugs with sprite emulation. Several games(such + as "Trojan" and "VS Duck Hunt") that were broken in .71 and .72 now + work ok. + * Added support for iNES mapper 82. Thanks to those who work on + "unofficial nester". + * Added support for iNES mapper 250(used by "Time Diver Avenger"). + * Fixed the documentation to show that iNES mappers 48, 83, and 232 + are supported. + * Removed various pieces of stale code and fixed a few minor bugs. + * Fixed a triangle wave channel bug(the channel was sometimes enabled + when it shouldn't have been). + * Writing to $4010 with the upper bit clear now acknowledges the DPCM + IRQ. This appears to fix "Stunt Buggies". + * Rewrote pieces of the Zapper emulation code to be cleaner and more + accurate. + * Rewrote the VS Unisystem dip switch drawing code. + * Simplified the setting of VS Unisystem dip switches. The "V" key + now toggles viewing AND editing of dip switches. + +0.72 +---- + + * Various minor bug fixes. + * Various code cleanups and size and speed optimizations. + * Removed some (apparently) unused MMC5 sound emulation code. + * Changed the behavior of $2003 and $4014 to better simulate what occurs + in a real NES. + * Fixed a few bugs in the undocumented 6502 opcode emulation code. + The Game Genie code "NUTANT" for SMB 3 works correctly now, at + least(previously it caused the game to lock up at the end of levels). + * Rewrote large pieces of the 6502 memory fetching code, resulting + in a slight slowdown in the speed of emulation. Benefits include: + Game Genie emulation now works(again) and 6502 emulation is more + accurate. + * Added support for iNES mapper 72. Thanks to rinao for the information. + * Fixed support for iNES mapper 77(used by Napoleon Senki). + * Fixed/Added support for iNES mapper 226. Apparently I made a mistake + in the documentation. Thanks to Mark K. for the information. + * Added support for iNES mapper 227. Thanks to Mark K. for the + information. + * Added support for iNES mapper 234(used by the Maxi-15). Thanks + to Mark K. for the information. Note that many of the Maxi-15 + ROM images on the Internet have corrupt CHR data(graphics), or the + mapper number is set incorrectly(usually to 11). Use a utility to + fix the mapper number. + * Added support for the following UNIF boards(prefixes omitted): + - EKROM (and fixed the reference to "Gemfire" in the documentation). + - HKROM + * Added the ability to enable and disable individual RAM cheats. + * Fixed some problems with the cheat search code(the NES' internal + RAM was being searched differently than any external RAM, which + was being search incorrectly). + +0.71 +---- + + * Fixed a 6502 emulation bug that was causing some Koei games + (ex: Nobunaga's Ambition, Genghis Khan) to not work. + * Extensive PPU/CPU timing adjustments. + * Fixed support for iNES mapper 40. + * Added support for the following UNIF boards(prefixes omitted): + - ETROM + - ELROM + - EWROM + * Fixed a few bugs in the UNIF code. + * Added support for loading and saving cheat files and an interface + to search for/add/delete/list cheats(no interface yet on Linux/DOS). + * Fixed a few minor bugs in the Windows DX code. + * Command line options to control the number of sound fragments + and the fragment size have been added(Linux). + +0.70 +---- + + * Adjusted PPU/CPU timing. + * Removed(until I understand the problem) a hack to get one of the + games in the Caltron 6-in-1 to work. + * Fixed an MMC3 IRQ emulation bug("Project Q" works better now). + * Fixed a problem/misunderstanding regarding the upper scanline. + It can now be displayed again. + * More accurate sprite hit emulation(fixes the title screen of + "Ultimate Stuntman"). + * VRAM bank switching for iNES mapper 4 is now possible(and enabled + for all mapper 4 games without CHR ROM). Fixes "Tenchi o Kurau 2". + * Added support for the Famicom's four-player adapter and the ability + to enable it(it is disabled by default to prevent compatibility + problems). + * Added an option(under miscellaneous configuration) to automatically + open the "File Open" dialog box when FCE Ultra is started. + * Sound sampling rate is now configurable. + * Fixed some bugs in the DirectSound code. + * Joystick button configuration is a little more user friendly(and + stable, hopefully) (Linux). + +0.62 +---- + + * Added support for the Famicom Disk System's extra sound channel. + * Updated the version of Tatsuyuki Satoh's OPL2 emulator used in + FCE Ultra from .36f to .37a. The sound quality in "Lagrange Point" + seems to have improved. + * Added support for iNES mapper 242(used by "Wai Xing Zhan Shi"). + * Fixed a network play bug that could cause desynchronizations + if more than one network play session occured since FCE Ultra + was started. This bug only showed up on the Windows port, though. + * Increased the volume of the noise and triangle sound channels. + * Fixed a save state loading bug. + * Fixed a small memory leak that was being caused by the VRC7 + state loading code. + * Fixed a bug that could cause FCE Ultra to crash if a virtual disk + was being read and the user ejected the virtual disk. + * Various minor bug fixes/code cleanups. + * NTSC color "emulation" can now be enabled again(the code to + enable it was broken in the last version). (Linux) + +0.61 +---- + + * Speed optimizations in sprite rendering code. + * Screen snapshots are now saved in the PNG format instead of the PCX + format. + * Fixed Game Genie emulation(it wasn't working in the last release). + Also added support for Game Genie emulation to the UNIF code. + * Rewrote command line option parsing code. + * Fixed a problem(if FCE Ultra was configured to connect to a remote + host and the remote host was given as an IP address, and the IP + address couldn't be reverse resolved, which is commonly the case + on home LANs, the connection attempt would fail) in the network + play code. I had misinterpreted the Winsock API documentation + when I wrote the code. (Windows) + +0.60 +---- + + * Various speed optimizations. + * Sound is no longer messed up when a JAM/KIL opcode is emulated. + * Fixed an overflow bug that occured when $4014 was written to + during certain(rare) conditions. + * Fixed a few save state bugs. + * Fixed a MMC1 CHR bank switching bug. + * Added emulation of the MMC5's WRAM write-enable/disable registers. + * Fixed a sound frame IRQ emulation bug. "Qix" works now. + * Added UNIF support. Some of the board emulation is still a bit + buggy, though. Look at the documentation for a list of supported + boards. + * Updated the "Palette Notes" section of the documentation. Also + fixed a few other problems with the documentation. + * Added support for loading files in the PKZIP and gzip + compressed file formats via zlib. + * Added the ability to configure the first scanline and the last + scanline to draw to the screen. Enabling PAL emulation no longer + will cause all 239 scanlines to be displayed, though an option + to override these settings for when PAL emulation is enabled may + be in the next version. + * Fixed a bug that would cause the emulated D-pad of virtual gamepads + emulated through the keyboard to be duplicated through "higher" + virtual gamepads(gamepad 1 would affect 2,3,4; gamepad 2 would + affect 3,4; etc.). (Windows) + +0.55 +---- + * Rewrote window resizing code. The window will now resize itself + to a multiple of the NES' screen dimensions nearest to the user + selected dimensions. (Windows) + * Added an option to use buttons instead of axes on physical joysticks + for the emulated D-Pad. This is useful for some digital joysticks. (Windows) + * Fixed a bug that would cause FCE Ultra to crash if sound were + disabled during emulation. (Windows) + * Added the ability to "fast forward" emulation. + * Added an option to allow more than 8 sprites per scanline to be + displayed. + * Added an option to save all extra non-volatile game data + (such as battery-backed RAM) in a directory under FCE Ultra's + base directory(as opposed to the directory the game is located in). + * Added an option to allow the emulator to change to a full screen + video mode once a new game is loaded. (Windows) + * Rewrote pieces of DirectInput joystick handling code. Hopefully + it should increase compatibility. (Windows) + * Added the ability to automatically obtain button numbers when + configuring joysticks, by pressing buttons on the joystick. + * Added the ability to close the current game(decreases CPU usage). (windows) + * Increased the speed of various function calls by passing + arguments to functions through registers instead of through the + stack. + * Added emulation of the MMC5's raw PCM register. + * Added the ability to save/load save states while network play + is occuring. + * Having PAL emulation enabled will no longer override the + NTSC/PAL settings in NSF headers. + * Fixed a bug that got into the .54 release. Extraneous data was + being returned on reads from $2002, which caused problems + with some games(such as "Choujin Sentai Jetman"). + +0.54 +---- + * Fixed a bug that would cause a wrong battery-backed WRAM file + name to be produced if FCE Ultra was passed a file name without + any directory component(such as "fceu SuperBlah.nes"). + * Fixed an iNES mapper 118 emulation bug that got into the code + in a recent code cleanup. "Armadillo" is playable again. + * Fixed a typo(and bug) in the MMC5 emulation code. + * Data returned from emulated reads to "unmapped" areas or + memory locations where bits are undefined should now be correct. + * Fixed emulation of the sprite memory transfer register $4014. + It now takes into account the last value written to $2003 and + starts the transfer to that location in sprite memory(like on + a real NES). + * Added a video configuration dialog box. (Windows) + * Added the ability to configure a custom video mode. Aspects + that are configurable include width, height, bits per pixel, + and size transforming(stretching and scaling). (Windows) + +0.53 +---- + + * Fixed a bug with joysticks that occured on systems with multiple + joysticks. (Windows) + * Added support for iNES mappers 77 and 92(thanks to LULU for the code for both). + * Added partial(timer is non-configurable) support for iNES mapper 105. + * Changed save state format again. Save states made with previous + versions should still be compatible, though this may change in + future versions. + * Small optimization to sprite emulation code. + * Rewrote color-deemphasis code to use integer math instead of + floating-point math. + * Rewrote and restructured input code. (Linux) + * Added command line option "-f8bit" to force 8-bit sound. (Linux) + * Rewrote and restructured input code. Among other new features, + keyboard keys are now somewhat configurable. (Windows) + * Writes to $4003/$4007 will now reset the emulated square wave + duty cycle generator. + * Added emulation of the Power Pad. + * Rewrote joystick device reading code to use the event-driven + interface. This should fix various problems regarding support + for joysticks with many buttons. (linux) + +0.52 +---- + + * Fixed a PCM emulation bug(digitized voices in "Ikari Warriors 2" + and "The Immortal", among others, work now). + * Fixed noise channel's LSFR update frequencies(hopefully). + * Various minor bug fixes. + +0.51 +---- + + * Added support for iNES mappers 86 and 89. + * Reduced byte size of the NSF player's background. + * Adjusted CPU/PPU timing. + * Fixed sound channel frequency calculations for when PAL emulation is enabled. + * Rewrote large pieces of the sound code and got rid of the sound queue. Sound quality should be slightly better now. + * Various minor bug fixes. + + Windows: + + * Fixed an FDS side reset bug when a new game is loaded. + * Screen width/depth/height changes while FCE Ultra is in windowed mode are handled now. + * Changed the configuration file format. + * Added a palette configuration dialog. + * Added the ability to load a custom NES palette. + * Added an option to double 16-bit sound volume. + * Added an option to force 8-bit sound. + * Added an option to use a secondary sound buffer(versus the primary). + * Added an option to wait for vertical blank if sound is disabled. + * Added an option to run while focus is lost. + +0.50 +---- + + * Many bug fixes. + * Sound code partially rewritten to improve quality(near-perfect + raw PCM now) and eliminate the need for a separate thread. + This created a small problem with network play, though, so read + the network play notes section. Also, synchronizing to + vertical blank has been removed. + * Rewrote other pieces of sound code. No more "buzzing" in MegaMan 2, + Codemasters games' intros, etc. + * Added support for the NES Zapper and the VS Unisystem's light + gun. Be sure to read "Light Gun Notes". + * Changed save state format. Save states should now be much + smaller for most games. Most(not all) save states created with + an older version should work. + * Added support for VS Duck Hunt and VS Hogan's Alley. + diff --git a/attic/authors b/attic/authors new file mode 100644 index 00000000..f4220e5a --- /dev/null +++ b/attic/authors @@ -0,0 +1,30 @@ +A list of people who have contributed code to FCE Ultra follows. +Please note that the "Code Contributions" field may not be all inclusive; +the coder may have done more than what is listed. + +Name/Alias Code Contributions Contact Information +------------------------------------------------------------------------------ +Aaron Oneal Many changes to compile http://www.morphgear.com + with MSVC and first frame + skipping code. + +BERO Base FCE code. bero@geocities.co.jp + +CaH4e3 Some mapper code. CaH4e3 at mail dot ru + +\Firebug\ VGA register setting code. ?? + +Joe Nahmias man pages. + +LULU SDL network play code. ?? + +Paul Various code for the official kuliniew@purdue.edu + Kuliniewicz SDL port. + +Quietust VRC7 "translation" code. quietust@ircN.org + +Tatsuyuki OPL2 emulator. ?? + Satoh + +Xodnizel Most of the FCE Ultra code. http://xodnizel.net/ + diff --git a/attic/fceu-svga.6 b/attic/fceu-svga.6 new file mode 100644 index 00000000..a2f7e503 --- /dev/null +++ b/attic/fceu-svga.6 @@ -0,0 +1,135 @@ +.\" 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 FCEU-SVGA 6 "March 27, 2003" +.\" 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 +fceu-svga \- An emulator for the original (8-bit) Nintendo game console. +.SH SYNOPSIS +.B fceu-svga +.RI [ options ] +"filename" +.SH DESCRIPTION +.B FCE Ultra +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 includes TCP/IP based +network playing for head-to-head gaming with your friends! +.PP +The emulator is available in two versions for Linux (there are also versions +for DOS and Windows): an SDL-based version, and one based on SVGALIB. The two +versions are essentially the same \-\- use the SVGALIB version for the Linux +console, and the SDL version for playing in X. +.SH OPTIONS +These are some of the more frequently used options in FCE Ultra SVGALIB. Run +fceu-svga without any options for a larger list, or see the README for the full +list. +.TP +.BI \-gg +Enable Game Genie emulation support. +.TP +.BI "\-cpalette " +Use the custom palette in . +.TP +.BI "\-soundvol " +Sets the sound volume to the given percentage. +.TP +.BI "\-sound " +Set the sound playback sample rate (0 == off). +.TP +.BI "\-connect " +Connect as a client (player 2) to for TCP/IP network play. +.TP +.BI \-server +Be a host server (player 1) for a TCP/IP network game. +.TP +.BI "\-netport " +Use for TCP/IP network play. +.SH KEYBOARD COMMANDS +.B FCE Ultra +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 += +Arrows Cursor Arrows +A Left ALT +B Left CTRL +Select TAB +Start ENTER +.TE +.SS Other Commands +.PP +.TP 15 +.BI +Activate cheat interface. +.TP 15 +.BI +Lock virtual console. +.TP 15 +.BI +Unlock virtual console. +.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 +Save screen snapshot. +.TP 15 +.BI +Reset NES. +.TP 15 +.BI +Toggle power to NES. +.TP 15 +.BR ", " +Quit +.B FCE Ultra. +.SH NOTES +This program needs permisison to the video hardware, this normally requires +root access. One way to accomplish this is by making +.BI "fceu-svga " suid-root. +An easy way to do this is using the +.BR dpkg-statoverride +command. For example, as root on a +.I Debian +system run: +.PP +.B dpkg-statoverride --update --add root games 04755 /usr/games/fceu-svga +.PP +This will ensure that the setuid bit is preserved across package upgrades. +.SH SEE ALSO +.BR dpkg-statoverride "(8), " fceu-sdl (6) +.TP +.I /usr/share/doc/fceu-doc/readme-linux.txt.gz +The +.B FCE Ultra README +for linux, available from the +.I fceu-doc +Debian package. +.TP +.I http://fceultra.sourceforge.net/ +The +.B FCE Ultra +project homepage. +.SH AUTHOR +This manual page was written by Joe Nahmias , +for the Debian GNU/Linux system (but may be used by others). diff --git a/attic/readme b/attic/readme new file mode 100644 index 00000000..ca3c2e5b --- /dev/null +++ b/attic/readme @@ -0,0 +1,32 @@ +FCE Ultra was developed with gcc and GNU make in mind. MSVC will probably +compile the Windows source code with a few modifications, but you'll still +need to make a project file. + +Several pre-made makefiles are provided: + Makefile.beos - BeOS(with SDL and SDL_net) + Makefile.unixsdl - UN*X(FreeBSD/Linux/etc, with SDL) + Makefile.linuxvga - Linux(with svgalib) + Makefile.dos - (MS/PC/DR) DOS + Makefile.win - MS Windows 9x/Me/Xp/2000/etc.(with DirectX). + Makefile.macosx - Mac OS X(with SDL) + +If you want to use Makefile.beos or Makefile.unixsdl for a cpu type other +than 80x86, you will need to remove "-DC80x86" from the defines line +and also remove "-DLSB_FIRST" if your target cpu uses MSB first ordering. +You'll also need to remove/change "-mcpu=xxx". + +For the Windows port, I use MINGW32. http://www.mingw.org + +To compile the DOS port, you'll need to download the DJGPP package. +Any version of gcc >=2.95.3 should compile the code without changes, BUT +the DJGPP versions of gcc have some problems: + gcc 2.95.3 sometimes breaks when compiling the code. gcc 3.0.2 seems to + produce bad code for sound.c. So, I recommend using gcc 3.0.4 for + compiling the DOS version. + +Modifying the "-mcpu=i686" string in the makefiles, to optimize more effectively +for your cpu type, is a good idea. + +Always do a "make -f Makefile. clean" before compiling for a +different platform or if you update via cvs and if you have stale object +files lying around. diff --git a/changelog.txt b/changelog.txt index 3d35e726..61d1e133 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,10 +1,14 @@ ---version 2.0.2 released--- -10-aug-2008 - punkrockguy318 - SDL: Changed default A/B from numpad 2/3 to j/k. +10-aug-2008 - punkrockguy318 - SDL: Cleanup of usage +10-aug-2008 - punkrockguy318 - SDL: --no8lim option renamed to --nospritelim +10-aug-2008 - punkrockguy318 - SDL: --color option renamed to --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 +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 diff --git a/src/driver.h b/src/driver.h index 79731104..e0e07db4 100644 --- a/src/driver.h +++ b/src/driver.h @@ -82,7 +82,7 @@ void FCEUI_UseInputPreset(int preset); //New interface functions //0 to order screen snapshots numerically(0.png), 1 to order them file base-numerically(smb3-0.png). -void FCEUI_SetSnapName(int a); +void FCEUI_SetSnapName(bool a); //0 to keep 8-sprites limitation, 1 to remove it void FCEUI_DisableSpriteLimitation(int a); diff --git a/src/drivers/sdl/config.cpp b/src/drivers/sdl/config.cpp index a288633f..2e547c66 100644 --- a/src/drivers/sdl/config.cpp +++ b/src/drivers/sdl/config.cpp @@ -130,16 +130,14 @@ InitConfig() config->addOption("lowpass", "SDL.LowPass", 0); config->addOption("pal", "SDL.PAL", 0); config->addOption("frameskip", "SDL.Frameskip", 0); - config->addOption("snapname", "SDL.SnapName", 0); config->addOption("clipsides", "SDL.ClipSides", 0); - config->addOption("nothrottle", "SDL.NoThrottle", 0); - config->addOption("no8lim", "SDL.DisableSpriteLimit", 0); + config->addOption("nospritelim", "SDL.DisableSpriteLimit", 1); // color control config->addOption('p', "palette", "SDL.Palette", ""); config->addOption("tint", "SDL.Tint", 56); config->addOption("hue", "SDL.Hue", 72); - config->addOption("color", "SDL.Color", 0); + config->addOption("ntsccolor", "SDL.Color", 0); // scanline settings config->addOption("slstart", "SDL.ScanLineStart", 0); @@ -152,7 +150,7 @@ InitConfig() config->addOption('b', "bpp", "SDL.BitsPerPixel", 32); config->addOption("doublebuf", "SDL.DoubleBuffering", 0); config->addOption("autoscale", "SDL.AutoScale", 1); - config->addOption("keepaspect", "SDL.KeepAspect", 1); + config->addOption("keepratio", "SDL.KeepRatio", 1); config->addOption("xscale", "SDL.XScale", 1.0); config->addOption("yscale", "SDL.YScale", 1.0); config->addOption("xstretch", "SDL.XStretch", 0); @@ -165,26 +163,27 @@ InitConfig() config->addOption("SDL.SpecialFilter", 0); config->addOption("SDL.SpecialFX", 0); - // network play options + // network play options - netplay is broken + /* config->addOption('n', "net", "SDL.NetworkServer", ""); config->addOption('u', "user", "SDL.NetworkUsername", ""); config->addOption('w', "pass", "SDL.NetworkPassword", ""); config->addOption('k', "netkey", "SDL.NetworkGameKey", ""); config->addOption( 0, "port", "SDL.NetworkPort", 4046); config->addOption('l', "players", "SDL.NetworkNumPlayers", 1); - + */ // input configuration options config->addOption("SDL.Input.0", "GamePad.0"); config->addOption("SDL.Input.1", "GamePad.1"); config->addOption("SDL.Input.2", "None"); - // Allow for input configuration + // allow for input configuration config->addOption('i', "inputcfg", "SDL.InputCfg", InputCfg); // video playback config->addOption("playmov", "SDL.Movie", ""); - // lua + // load lua script config->addOption("loadlua", "SDL.LuaScript", ""); // GamePad 0 - 3 @@ -324,8 +323,8 @@ UpdateEMUCore(Config *config) config->getOption("SDL.DisableSpriteLimit", &flag); FCEUI_DisableSpriteLimitation(flag ? 1 : 0); - config->getOption("SDL.DisableSpriteLimit", &flag); - FCEUI_SetSnapName(flag ? 1 : 0); +// config->getOption("SDL.SnapName", &flag); +// FCEUI_SetSnapName(flag ? true : false); config->getOption("SDL.ScanLineStart", &start); config->getOption("SDL.ScanLineEnd", &end); diff --git a/src/drivers/sdl/input.cpp b/src/drivers/sdl/input.cpp index f82df020..b10e17c1 100644 --- a/src/drivers/sdl/input.cpp +++ b/src/drivers/sdl/input.cpp @@ -1195,92 +1195,6 @@ InputCfg(const std::string &text) } -/** - * Specify a FamiCom Expansion device as the 3rd input device. Takes - * a text string describing the device. - */ - -/* -static void -FCExp(char *text) -{ - static char *fccortab[11]={"none","arkanoid","shadow","4player","fkb","hypershot", - "mahjong","quizking","ftrainera","ftrainerb","oekakids"}; - - static int fccortabi[11]={SIFC_NONE,SIFC_ARKANOID,SIFC_SHADOW, - SIFC_4PLAYER,SIFC_FKB,SIFC_HYPERSHOT,SIFC_MAHJONG,SIFC_QUIZKING, - SIFC_FTRAINERA,SIFC_FTRAINERB,SIFC_OEKAKIDS}; - - int y; - for(y = 0; y < 11; y++) { - if(!strcmp(fccortab[y], text)) { - UsrInputType[2] = fccortabi[y]; - } - } -} - -static char *cortab[6]={"none","gamepad","zapper","powerpada","powerpadb","arkanoid"}; -static int cortabi[6]={SI_NONE,SI_GAMEPAD, - SI_ZAPPER,SI_POWERPADA,SI_POWERPADB,SI_ARKANOID}; -*/ -/** - * Set the 1st user-specified input device. Specified as a text - * string. - */ -/* -static void -Input1(char *text) -{ - int y; - - for(y = 0; y < 6; y++) { - if(!strcmp(cortab[y], text)) { - UsrInputType[0] = cortabi[y]; - } - } -} -*/ -/** - * Set the 2nd user-specified input device. Specified as a text - * string. - */ -/* -static void -Input2(char *text) -{ - int y; - - for(y = 0; y < 6; y++) { - if(!strcmp(cortab[y], text)) { - UsrInputType[1] = cortabi[y]; - } - } -} -*/ - -/** GLOBALS **/ -#if 0 -CFGSTRUCT InputConfig[]={ - ACA(UsrInputType), - AC(powerpadsc), - AC(QuizKingButtons), - AC(FTrainerButtons), - AC(HyperShotButtons), - AC(MahjongButtons), - AC(GamePadConfig), - AC(fkbmap), - ENDCFGSTRUCT -}; - -ARGPSTRUCT InputArgs[]={ - {"-inputcfg",0,(void *)InputCfg,0x2000}, - {"-fcexp",0,(void *)FCExp,0x2000}, - {"-input1",0,(void *)Input1,0x2000}, - {"-input2",0,(void *)Input2,0x2000}, - {0,0,0,0} -}; -#endif - /** * Hack to map the new configuration onto the existing button * configuration management. Will probably want to change this in the diff --git a/src/drivers/sdl/sdl-video.cpp b/src/drivers/sdl/sdl-video.cpp index f6680dc8..3cfb9766 100644 --- a/src/drivers/sdl/sdl-video.cpp +++ b/src/drivers/sdl/sdl-video.cpp @@ -220,22 +220,22 @@ InitVideo(FCEUGI *gi) double auto_yscale = GetYScale(yres); double native_ratio = ((double)NWIDTH) / s_tlines; double screen_ratio = ((double)xres) / yres; - int keep_aspect; + int keep_ratio; - g_config->getOption("SDL.KeepAspect", &keep_aspect); + g_config->getOption("SDL.KeepRatio", &keep_ratio); // Try to choose resolution if (screen_ratio < native_ratio) { // The screen is narrower than the original. Maximizing width will not clip auto_xscale = auto_yscale = GetXScale(xres); - if (keep_aspect) + if (keep_ratio) auto_yscale = GetYScale(yres); } else { auto_yscale = auto_xscale = GetYScale(yres); - if (keep_aspect) + if (keep_ratio) auto_xscale = GetXScale(xres); } s_exs = auto_xscale; diff --git a/src/drivers/sdl/sdl.cpp b/src/drivers/sdl/sdl.cpp index 8155d746..31cd8f09 100644 --- a/src/drivers/sdl/sdl.cpp +++ b/src/drivers/sdl/sdl.cpp @@ -35,12 +35,6 @@ #include #endif - -#ifdef OPENGL -int sdlhaveogl; -#endif - - extern int32 g_fpsScale; int CloseGame(void); @@ -54,48 +48,48 @@ static void DriverKill(void); static int DriverInitialize(FCEUGI *gi); int gametype = 0; -char *DriverUsage= -"--pal x Uses PAL timing.\n\ ---gamegenie x, -g x Enables emulated Game Genie if x is nonzero.\n\ ---no8lim x Disables the 8 sprites per scanline limitation, if x is nonzero.\n\ ---nothrottle x Disables artificial speed throttling, if x is nonzero.\n\ ---frameskip x Sets # of frames to skip per emulated frame.\n\ ---(x/y)res x, -(x/y) x Sets horizontal/vertical resolution to x for full screen mode.\n\ ---autoscale x Enables autoscaling in fullscreen if x in nonzero. \n\ ---keepratio x Keeps native NES ratio when autoscaling if x is nonzero. \n\ ---(x/y)scale x Multiplies width/height by x (Real numbers >0 with OpenGL, otherwise integers >0).\n\ ---(x/y)stretch x Stretchess to fill surface on x/y axis (fullscreen, only with OpenGL).\n\ ---bpp x, -b x Sets bits per pixel for SDL surface(and video mode in fs). 8, 16, 32.\n\ ---opengl x Enables OpenGL support if x is nonzero.\n\ ---doublebuf xEnables SDL double-buffering if x is nonzero.\n\ ---fullscreen x, -f x Selects full screen mode if x is nonzero.\n\ ---clipsides x Clips left- and rightmost 8 columns of pixels if x is nonzero.\n\ ---noframe x Hides title bar and window decorations.\n\ ---slstart x Sets the first drawn emulated scanline. Valid values for x are\n\ - 0 through 239.\n\ ---slend x Sets the last drawn emulated scanline. Valid values for x are\n\ - 0 through 239.\n\ ---color x Emulates an NTSC TV's colors, if x is nonzero.\n\ ---hue x Sets parameter for NTSC color emulation.\n\ ---tint x Sets parameter for NTSC color emulation.\n\ ---palette s, -p s Loads a custom global palette from file s.\n\ ---sound x, -s x Enables sound if x is nonzero.\n\ ---soundrate x Sets sound playback rate to x Hz.\n\ ---soundq x Sets sound quality: 0 for low, 1 for high.\n\ ---soundbufsize x Sets sound buffer size to x ms.\n\ ---volume x Sets volume to x%.\n\ ---lowpass x Enables low-pass filter if x is nonzero.\n\ ---soundrecord s Records sound to file s.\n\ ---snapname x Prepends the game's name to (numeric) snapshot filenames, if x is nonzero.\n\ ---inputcfg, -i Configures input device(s) on startup.\n\ +char *DriverUsage="\ +--pal {0|1} Uses PAL timing.\n\ +--gamegenie {0|1} Enables emulated Game Genie.\n\ +--nospritelim {0|1} Disables the 8 sprites per scanline limitation.\n\ +--frameskip x Sets # of frames to skip per emulated frame.\n\ +--xres x Sets horizontal resolution to x for full screen mode.\n\ +--yres x Sets vertical resolution to x for full screen mode.\n\ +--autoscale {0|1} Enables autoscaling in fullscreen if x in nonzero. \n\ +--keepratio {0|1} Keeps native NES ratio when autoscaling. \n\ +--(x/y)scale x Multiplies width/height by x (Real numbers >0 with OpenGL, otherwise integers >0).\n\ +--(x/y)stretch {0|1} Stretches to fill surface on x/y axis (fullscreen, only with OpenGL).\n\ +--bpp {8|16|32} Sets bits per pixel.\n\ +--opengl {0|1} Enables OpenGL support.\n\ +--doublebuf {0|1} Enables SDL double-buffering if x is nonzero.\n\ +--fullscreen {0|1} Enables full screen mode.\n\ +--clipsides {0|1} Clips left and rightmost 8 columns of pixels.\n\ +--noframe {0|1} Hides title bar and window decorations.\n\ +--slstart {0 - 239} Sets the first drawn emulated scanline.\n\ +--slend {0 - 239} Sets the last drawn emulated scanline.\n\ +--ntsccolor {0|1} Emulates an NTSC TV's colors.\n\ +--hue x Sets hue for NTSC color emulation.\n\ +--tint x Sets tint for NTSC color emulation.\n\ +--palette f Loads a custom global palette from file f.\n\ +--sound {0|1} Enables sound.\n\ +--soundrate x Sets sound playback rate to x Hz.\n\ +--soundq {0|1} Enables high sound quality.\n\ +--soundbufsize x Sets sound buffer size to x ms.\n\ +--volume {0 - 100} Sets volume.\n\ +--lowpass {0|1} Enables low-pass filter if x is nonzero.\n\ +--soundrecord f Records sound to file f.\n\ +--inputcfg d Configures input device d on startup (gamepad1, gamepad2).\n\ +--playmov f Plays back a recorded movie from filename f.\n\ +--loadlua f Loads lua script from filename f.\n"; + +/* Moved network options out while netplay is broken. --net s, -n s Connects to server 's' for TCP/IP network play.\n\ --port x, -p x Uses TCP/IP port x for network play.\n\ --user s, -u s Sets the nickname to use in network play.\n\ --pass s, -w s Sets password to use for connecting to the server.\n\ --netkey s, -k s Uses key 's' to create a unique session for the game loaded.\n\ --players x, -l x Sets the number of local players.\n\ ---playmov f Plays back a recorded movie from filename f.\n\ ---loadlua f Loads lua script from filename f\n"; +*/ // global configuration object @@ -106,17 +100,6 @@ static void ShowUsage(char *prog) printf("\nUsage is as follows:\n%s filename\n\n",prog); puts("Options:"); puts(DriverUsage); -// These options are basically not going to work... -#if 0 -puts("\ ---inputx str Select device mapped to virtual input port x(1-2).\n\ - str may be: none, gamepad, zapper, powerpada, powerpadb,\n\ - arkanoid\n\ ---fcexp str Select Famicom expansion port device.\n\ - str may be: none, shadow, arkanoid, 4player, fkb\n\ ---nofs x Disables Four-Score emulation if x is 1.\n\ -"); -#endif } /** @@ -136,51 +119,6 @@ void FCEUD_Message(char *s) fputs(s, stdout); } - -#ifndef WIN32 -/** - * Capture and handle signals sent to FCEU. - */ -static void -SetSignals(void (*t)(int)) -{ - // XXX soules - why do we capture these? Seems unnecessary. - int sigs[11]={SIGINT,SIGTERM,SIGHUP,SIGPIPE,SIGSEGV,SIGFPE,SIGKILL,SIGALRM,SIGABRT,SIGUSR1,SIGUSR2}; - int x; - for(x = 0; x < 11; x++) { - signal(sigs[x], t); - } -} - -static void -CloseStuff(int signum) -{ - // XXX soules - again, not clear why this is necessary - DriverKill(); - printf("\nSignal %d has been caught and dealt with...\n",signum); - switch(signum) { - case SIGINT:printf("How DARE you interrupt me!\n");break; - case SIGTERM:printf("MUST TERMINATE ALL HUMANS\n");break; - case SIGHUP:printf("Reach out and hang-up on someone.\n");break; - case SIGPIPE:printf("The pipe has broken! Better watch out for floods...\n");break; - case SIGSEGV:printf("Iyeeeeeeeee!!! A segmentation fault has occurred. Have a fluffy day.\n");break; - /* So much SIGBUS evil. */ -#ifdef SIGBUS -#if(SIGBUS!=SIGSEGV) - case SIGBUS:printf("I told you to be nice to the driver.\n");break; -#endif -#endif - case SIGFPE:printf("Those darn floating points. Ne'er know when they'll bite!\n");break; - case SIGALRM:printf("Don't throw your clock at the meowing cats!\n");break; - case SIGABRT:printf("Abort, Retry, Ignore, Fail?\n");break; - case SIGUSR1: - case SIGUSR2:printf("Killing your processes is not nice.\n");break; - } - exit(1); -} -#endif - - /** * Loads a game, given a full path/filename. The driver code must be * initialized after the game is loaded, because the emulator code @@ -470,12 +408,7 @@ main(int argc, } #ifdef OPENGL -#ifdef APPLEOPENGL - sdlhaveogl = 1; /* Stupid something... Hack. */ -#else - if(!SDL_GL_LoadLibrary(0)) sdlhaveogl=1; - else sdlhaveogl=0; -#endif +SDL_GL_LoadLibrary(0); #endif // Initialize the configuration system diff --git a/src/fceu.cpp b/src/fceu.cpp index 299c2152..5d3030db 100644 --- a/src/fceu.cpp +++ b/src/fceu.cpp @@ -785,7 +785,7 @@ void FCEUI_SetGameGenie(bool a) FSettings.GameGenie = a; } -void FCEUI_SetSnapName(int a) +void FCEUI_SetSnapName(bool a) { FSettings.SnapName=a; } diff --git a/src/fceu.h b/src/fceu.h index 23983497..3207fdfb 100644 --- a/src/fceu.h +++ b/src/fceu.h @@ -79,8 +79,8 @@ typedef struct { //Usr*SLine[0] is for NTSC, Usr*SLine[1] is for PAL. int UsrFirstSLine[2]; int UsrLastSLine[2]; - - int SnapName; + + bool SnapName; uint32 SndRate; int soundq; int lowpass;