Mednafen 0.9.16 WIP is released. Mednafen is a multi-game-system emulator, for various platforms, including emulation of the following systems:Atari Lynx,Famicom,GameBoy (Color),GameBoy Advance,Neo Geo Pocket (Color),
NES(both NTSC and PAL),PC Engine/TurboGrafx 16 (CD) and SuperGrafx,PC-FX,WonderSwan (Color).
Mednafen 0.9.16 WIP changelog:
-- 0.9.16-WIP: -- December 31, 2010: PCE: Re-enabled the VDC wait-state-limiting kludge, with some tweaks, to prevent hypothetical emulator crashes. PCE: Added a FIFO to buffer the CD subchannel data. Fixes CD+G playback, which was broken when VRAM access wait stating was implemented. Adjusted a few setting descriptive texts, for the automatically-generated documentation. December 29, 2010: Added setting aliases, allowing old setting names to be used in the settings file(though the new setting name will be saved back to the setting file, not the old name) and on the command line. Currently, settings renamed since December 15, 2010 have old setting name aliases. (Note: This of course doesn't apply to the numerous removed settings since 0.9.15). Renamed settings: frameskip -> video.frameskip glvsync -> video.glvsync (Might want to rename this to video.opengl.vsync or video.driver.opengl.vsync in the future) fs -> video.fs vdriver -> video.driver December 26, 2010: Added "gama" atom to recorded QuickTime files. Added setting "qtrecord.vcodec", and added support for the QuickTime PNG codec. Possible values for this setting are "raw", "cscd", and "png", with the default being "cscd". Added "ftyp" atom writing to the beginning of QuickTime files created. Class-ified PNG writing code, and fixed a bug from when the filesys.fname_* settings were added that broke screen snapshots. Wrote new MS WAV file recording code to replace the old code that relied on libsndfile. This allows sound recording to function even when Mednafen is compiled without libsndfile. December 25, 2010: Fixed various problems with the QuickTime writing code. VLC and the official Apple QuickTime player can now play the files Mednafen produces(though not necessarily the video component in the Apple QuickTime player). open() in the FileWrapper class is now passed with flag O_BINARY if it's defined. Fixes QT recording on MS Windows. Creation and modification timestamps in QuickTime files produced are now filled with the time of recording start, rather than being left at 0. Adjusted the QuickTime matrix calculation used for aspect ratio correction. Added settings "qtrecord.w_double_threshold" and "qtrecord.h_double_threshold". Users on slower systems, or those who are transcoding via full-featured software after recording, may want to set these to 0. December 24, 2010: Mednafen is now compiled with largefile support enabled on 32-bit platforms(Win32 kind of included, its largefile support is...DIFFERENT), though it is currently only necessary for QuickTime movie recording. Added experimental QuickTime movie recording support via the -qtrecord command-line switch. Video data is encoded via the CamStudio codec(this may cause problems for Apple's QuickTime player software, as this codec is typically not used in QuickTime containers AFAIK), audio data is raw. A few auxillary atoms were left out, and may or may not need to be implemented in the future. MPlayer, ffmpeg, and Youtube seem to be able to handle the files produced, though MPlayer has occasional random A/V sync issues(at least for me). The version of VLC I have installed can play the video, but aspect ratio correction and audio playback are broken. Removed the custom MMM-format recording and playback. Added lcm_width and lcm_height members to the MDFNGI struct, to aid in video recording(and perhaps other uses in the future). December 19, 2010: Added "%%" specifier to filesys.fname_* parser. Fixed a couple of deadlock bugs in the signal handler, though the probability of them having been encountered during normal Mednafen use is very low. sigaction() will now be used instead of signal(), if available. Fixed strerror_r() usage(AGAIN, hopefully corectly this time) on non-glibc platforms. December 18, 2010: Renamed settings: nethost -> netplay.host netport -> netplay.port netpassword -> netplay.password netlocalplayers -> netplay.localplayers netnick -> netplay.nick netgamekey -> netplay.gamekey netmerge -> netplay.merge netsmallfont -> netplay.smallfont Updated QuickLZ from 1.2.0 to 1.3.1. (1.4.1 seems to have some kind of a performance regression, at least how it's used in Mednafen), and changed the default value for the "srwcompressor" setting from "minilzo" to "quicklz". December 17, 2010: Renamed settings: sounddriver -> sound.driver sounddevice -> sound.device soundrate -> sound.rate soundvol -> sound.volume soundbufsize -> sound.buffer_time Added filesys.fname_movie, filesys.fname_state, filesys.fname_sav, and filesys.fname_snap settings. These settings contain a format string, and through manipulation of this format string, the previous functionality of "dfmd5", filesys.*_samedir, and "snapname" settings can be obtained. For example, remove the "%M" specifier to simulate setting the "dfmd5" setting to 0. Available specifiers: %b - Mednafen base directory (no trailing slash) %z - Path separator %d - Loaded file base directory("/games/nintendo/megaman.nes" -> "/games/nintendo") %f - File base("/games/nintendo/megaman.nes" -> "megaman") %F - Same as %f, but replaced with emulation module's short name with recognized multi-CD CD sets. %m - MD5 hash of the currently loaded game. %M - Empty for first evaluation per full path construction, then filled with the game's MD5 hash(or the game set's MD5 hash ID for multi-CD CD sets) followed by a period. %e - Loaded file extension("/games/nintendo/megaman.nes" -> ".nes") %s - Current emulation module's short name. %p - Special parameter(usually a number/numeric counter). %x - Default extension for the file type the path will be used for(extension is WITHOUT the period). %X - A merging of %p and %x(replaces the last character of %x with %p). If the constructed path is relative, it will be appended to the Mednafen base directory and value of the filesys.*_path settings automatically. If the constructed path is absolute, this appending will not occur. Removed setting dfmd5. December 16, 2010: Removed the filesys.*_samedir settings, as they're largely unnecessary, can cause file corruption in certain cases, and generally cause filesystem clutter. Removed the "snapname" setting(it's now hardcoded-on, effectively), and altered the snapshot naming template to produce filenames that will be sorted correctly when in a list(IE in a file browser). NES: Added hashes of alternate VS SMB and VS The Goonies ROM images into the internal VS Unisystem database. NES: Cleaned up palette-handling code, and updated the VS System palettes. December 15, 2010: NES: Added rudimentary bus conflict emulation to mapper 3, to fix corrupt graphics in Cybernoid. Removed the "pce.colormap", "pce_fast.colormap", "nes.cpalette", and "gba.colormap" settings. Custom palettes will automatically be loaded if they're named "pce.pal", "pce_fast.pal", "nes.pal", and "gba.pal" respectively, under the "palettes" directory under the Mednafen base directory. All of these systems can now use custom per-game palettes by name a palette file as "Mega Man 4.db45eb9413964295adb8d1da961807cc.pal". Using the form that includes the MD5 hash is preferred, to prevent conflicts between games on different systems with the same filenames, and conflicts with the custom palette for all games on an emulated system. Renamed path_snap, path_sav, path_state, path_movie, path_cheat, path_palette, path_firmware to filesys.path_*, changed the interpretation of the path so that if the path is relative, it is relative to the Mednafen base directory, and filled in the default values for these settings as the Mednafen default directories("sav", "mcs", "mcm", "snaps", etc.). Changed the directory used for custom NES palettes from "gameinfo" to "palettes", since that was the only thing the directory was being used for. Changed MDFN_Thread and MDFN_Mutex structs to forward declarations. December 13, 2010: Fixed a rather insidious bug with the 64-bit little-endian decoding function(bug was due to a misunderstanding of implicit type promotion rules). This fixes some (potential) issues with MMM playback, and RTC clock corruption when loading the GameBoy MBC3 mapper's RTC data from a sav file. Added MasterClock and MasterCycles fields to the MMM format. This change is incompatible with previously-recorded MMM movies. Added MasterCycles setting on the remaining systems. December 12, 2010: PCE: Implemented mid-frame synching and input updating(at this point, it only happens twice per frame, IE only once "in the middle"), although it can be extended to more points very easily in the future if the need should arise. This should reduce input latency by up to 8ms in cases not improved by the previous change(below), and allows "Takeda Shingen" to be playable. Mid-frame sync required a lot of code refactoring and kludging, Mednafen was definitely not designed nor written with this feature in mind, so it's possible some things may be broken now when using the PCE module/emulation; for example, rewinding while movie recording is active might corrupt the movie. Also, mid-frame syncing isn't done while netplay is active, so "Takeda Shingen" will remain unplayable in netplay. PCE: Altered frame end timing slightly to reduce input lag on some games by 1 frame. SNES: Reduced input latency by 1 frame(~16.67ms). If the MEDNAFEN_HOME environment variable is either unset or empty, and the HOME environment variable is unset, and getuid() and getpwuid() are available, the home directory used in consructing Mednafen's base directory will now be obtained from the system password file via getpwuid(). Rewrote most of the speed throttling and frameskip determination code to be cleaner, and made a few minor tweaks to the algorithms. December 9, 2010: Being in the input configuration process will now disable all emulated device input during the process, and until 300ms after it ends. December 8, 2010: PCE: Rewrote the HES VDC initialization HuC6280 assembly code to work correctly with the new VDC emulation accuracy improvements. Fixed a bug that would prevent exiting if physical CD-ROM reading hung, and the exit key was assigned to a joystick button or a mouse button. Fixed an old kludge/bug that caused keyboard input latency for emulated devices(IE not command keys) to be 1 frame(16.7 ms usually) higher than it should have been. PCE: Improved VRAM DMA emulation accuracy, improved wait state emulation accuracy, added kludgy emulation of a CPU VRAM-access dead zone tied to HSYNC(fixes "Star Breaker" locking up when leaving a town), and improved VDC horizontal timing register emulation. -- 0.9.15-WIP: -- November 12, 2010: SNES: Reworked a floating-point compare to work correctly with x87 FPU math on gcc(and probably most 32-bit x86 compilers). TODO: Audit code to find and correct any other instances of similar problematic floating-point code. November 11, 2010: MasterCycles field of EmulateSpecStruct is now assigned in more emulated systems. November 10, 2010: Genesis: Converted the "md.region" and "md.reported_region" settings to enum types, to allow for automatic document generation for the various values for these settings. Genesis: Fixed various issues that were preventing emulation from working properly on big-endian systems. SNES: Updated the PowerPC code in libco with "blargg_libco_ppc64-5". November 9, 2010: VB: Fixed an endian-related bug with joystick input state decoding. VB: Made the VIP emulation code big-endian-compatible. VB, PC-FX: Made the V810 core's "fast" mode work on big-endian platforms. Genesis: Fixed a major problem with illegal instruction handling; executing a long string of illegal instructions will no longer lock up Mednafen. Thanks to Zombie for pointing out the lockup problem. November 8, 2010: Fixed(hopefully) OpenGL pixel shader initialization error detection. Fixed "supereagle" special scaler crashing when the source surface was large. VB: Added setting "vb.sidebyside.separation", which controls the number of pixels between the L/R view(pixel count is pre-scaling by xscale(fs)), with a default value of 0. Previously, the effective separation for the sidebyside was 16, so if you want to replicate the behavior of previous versions, set this setting's value to 16. November 7, 2010: NGP, SMS, NES: const-ified some const data. NGP, PC-FX, NES, WonderSwan: Fixed various initialization issues(they're not a problem now, but it's done for future-proofing). WonderSwan: Fixed internal EEPROM initialization to not persist across game loadings(this doesn't apply to Mednafen... yet ;)). TODO: Evaluate removing persistence across power events. MDFND_DestroyMutex() now actually frees the memory for the mutex wrapper. Fixed a few initialization and deinitialization bugs in cdrom/cdromif.cpp (thanks to Rakashazi for pointing them out) -- 0.9.14-WIP: -- November 6, 2010: Corrected the last updated dates in the auto-generated documentation files. VB: Uncommented out important save state code that was commented out for debugging purposes(and was accidentally left that way). -- 0.9.13-WIP: -- November 5, 2010: PCE: The timestamp displayed in the debugger is now counted from when a virtual power off->on occurred, rather than the start of the Mednafen video frame. However, the displayed value wrap when it reaches 2^32 due to limitations in the debugger code(TODO: fix in the future). PCE: Fixed default mouse L/R button assignments(they were reversed). (You'll need to delete the Mednafen configuration file for the new defaults to take effect, or reconfigure the mouse in Mednafen, with the correct L/R button assignment) PCE: Fixed a bug that caused the debugger to corrupt Arcade Card state in certain common situations while the debugger was open or breakpoints were enabled. PCE, PCE_FAST: Reworked and fixed the ADPCM code to closer match a real system(based on hardware tests). Previously, ADPCM playback IRQ generation was sooooo wrong. These changes finally fix the broken battle voices in "Langrisser", yay. October 17, 2010: Fixed 2xSaI family filters to not crash; the 2xSaI filter source image data is now from a temporary video buffer created from the original source video buffer, but with padding on all sides to handle 2xSaI's lack of source video buffer coordinate bounds checking. October 14, 2010: Re-disabled physical CD unreadable sector testing code, as it causes too long of a delay at startup. A different solution will need to be found. October 4, 2010: PCE: Optimized debugger PC and opcode breakpoint testing during emulation. October 3, 2010: PCE: Fixed CD register reads with side effects when the debugger is open, and changed PCE_InDebug from bool to uint32, to allow for ++/-- pairs instead of = true, = false, to handle potential recursion. September 30, 2010: PCE_FAST: Fixed a emulator crash in the case that a game didn't initialize MPRs properly. PCE_FAST: Made a small optimization to the HuC6280 core. PCE_FAST: Rewrote a bit of HES playback code so it works at a lower-level, allowing the removal/privatization of some HuC6280 state setting functions. September 29, 2010: PCE_FAST: Fixed a reversed-tile issue with BG drawing on big-endian platforms(thanks to Rakashazi for pointing it out). PCE_FAST: Added 16bpp rendering support. NES: Added 16bpp rendering support. Added 16bpp support to MDFN_Surface and MDFN_PixelFormat. However, most internal components in Mednafen currently can't handle 16bpp, emulation modules included. September 25, 2010: Altered the text for the "sound" setting to better match what it actually does. September 19, 2010: The destination blit rectangle in the video output code now has the lowermost bits of the X and Y coordinates cleared, as a quick kludge to fix potential issues with the VB emulation's "hli" and "vli" video modes. A cleaner solution may be prudent in the future. VB: Added setting "vb.liprescale". Optimized the "hli" video mode drawing code slightly. September 18, 2010: VB: Added setting "vb.3dreverse". VB: Renamed "pbarrier" 3dmode to "vli". VB: Added 3dmode "hli". September 16, 2010: When -force_module is used with an unknown/invalid system, Mednafen will print an error stating so, rather than stating that the file format is unrecognized. If the system is recognized, but the system only supports CDs and the file being loaded is not a CD image, a message will be printed to that effect. September 13, 2010: PCE_FAST: HDS is now used in calculating the screen viewable area position, fixing the "Final Blaster" intro sequence. September 12, 2010: Fixed a significant memory leak in the video output code(the leak would increase every time fullscreen is toggled while Mednafen is running). PCE_FAST: Fixed a benign(in Mednafen as it is now) memory leak. PCE_FAST, PCE: IsSGX variable is now explicitly initialized to 0 correctly. Updated the AX_CFLAGS_GCC_OPTION autoconf macro. PCE_FAST: Renamed various identifiers in the HuC6280 emulator code to avoid conflicting with C reserved identifier conventions. PCE_FAST: Removed unused VDC debug code. NES: An error while attempting to open the file specified by setting "nes.cpalette" will no longer cause Mednafen to crash. SCSI CD: Refactoring and code cleanups. Added various command error condition checks, and corrected various error codes(NEC uses a few nonstandard ASC values). (INCOMPLETE) Specific command fixes for PCE CD: Command 0xD8: If the command is executed with the same address as when it was previously executed, and the previous execution was < 190ms ago, then the new execution is ignored(this occurs regardless if the previous command was ignored). This is more of a kludge than a proper fix, and it is intended to fix the silent CD-DA problem with "Steam Heart's". Specific command fixes for PC-FX: MODE SENSE and MODE SELECT: Added support for block descriptor(incomplete), and the DBD bit for MODE SENSE. Added support for all the mode pages present on a PC-FX(though most don't actually do anything in emulation yet, as I do not know their function or their function is irrelevant at the current level of CD emulation accuracy). Command 0x25: Corrected returned data when PMI bit is set. Command 0x42: Fixed the relative address returned when the address results are expressed as LBA. Command 0xD8: Proper support for play bit. Command 0xD9: Improved play mode evaluation, and play mode 0x1 is no longer erroneously interpreted as loop mode(only 0x4 is). Command 0xDD: The control/adr field is now returned in the data. Command 0xDE: Added emulation of returned data mode 0x03(there was a dummy stub before, to get the PhotoCD player to work). September 11, 2010: Changed hqxx's sole supported pixel format to match the new OpenGL texture pixel format used(in the future, changing its hardcoded pixel format based on an #ifdef MSB_FIRST may be warranted). WonderSwan: Re-enabled(and fixed) debugger's graphics viewer. PCE_FAST: Reduced fb_height from 256 to 242. September 10, 2010: If Mednafen is running with an OpenGL implementation of OpenGL >= 1.2, and is on an x86 or x86_64 platform, it will now upload texture data in GL_BGRA GL_UNSIGNED_INT_8_8_8_8_REV format rather than GL_RGBA GL_UNSIGNED_BYTE. This may need to be tweaked for older video cards. Would it have killed the OpenGL developers to have included a means of querying the fastest formats for texture uploading? September 8, 2010: todo: make sure tblur works right with surface->pitch32 != gameinfo->fb_width and player Converted MDFNGI pitch(in bytes) to fb_width(in pixels). Fixes for incorrectly using MDFNGameInfo->fb_width instead of the surface's pitch: gb gba lynx(was hardcoded) nes ngp pce_fast(was hardcoded) player wswan mmrecord.cpp tblur.cpp Reduction of fb_width to minimum acceptible for the module(the driver-side can still round up to a power of 2 when creating the MDFN_Surface, of course): gb gba lynx ngp pce_fast(required a bit of work in vdc.cpp to eliminate non-visible-area surface rendering) vb wswan September 5, 2010: PC-FX: Implemented an optimization to the FX VCE layer mixing priority evaluation code, that will also allow further optimization in the future. September 4, 2010: NES: Replaced "femms" inline assembly generated when compiling for x86_64 with "emms", as not all x86_64 processors are made by AMD. August 24, 2010: PC-FX: Track numbers in READ TOC(10) are now returned in hex instead of BCD(fixes BIOS handling of discs with a large number of tracks; no PC-FX games are like this, but it may be useful for playing audio CDs or audio portions of PCE CD). The bug was present in 0.8.x, but due to a design decision/bug elsewhere, it didn't cause the BIOS to be unable to play the CD-DA tracks. August 22, 2010: Re-enabled raw MMC command usage for reading physical discs(it had been disabled for debugging purposes). PC-FX: A PhotoCD disc will now automatically be detected as being handled by the PC-FX module. L-EC correction code is now called external to cdromfile.cpp, and with PC-FX/PCE CD emulation, will generate a SCSI error if it fails. August 20, 2010: SNES: Applied a patch from Jonas Quinn to fix a Cx4 emulation bug. VB: Mednafen will no longer automatically recognize files with the ".bin" extension as Virtual Boy games, as the extension conflicts with Sega Genesis/Megadrive. If you have any such files, they will need to be renamed to have an extension of ".vb" or ".vboy". VB: Files with the extension ".vboy" are now automatically recognized as Virtual Boy games. VB: Altered timer emulation to fix digital sound and voice playback in "Virtual Bowling". The change has the possibility of causing regressions with other games, but none were detected in very quick and not thorough testing. August 14, 2010: Cleaned up git.h slightly. -- 0.9.12-WIP: -- August 13, 2010: Updated internal copy of "libmpcdec" library from 1.2.5 to 1.2.6. Updated internal copy of "trio" library to 1.14(I believe the previous version was a pull from CVS between the 1.10 and 1.11 releases). August 12, 2010: PCE_FAST: Added setting "pce.correct_aspect", default value of 1. When disabled(value of 0), no aspect correction will take place(other than in the 10MHz dot clock mode to halve its width), and overscan color will be used to fill in the empty space when in 5MHz/10MHz dot clock modes. PCE_FAST: Corrected aspect ratio when playing HES files. PC-FX, VB: Fixed CPU operand order for FPU subops in the disassembler. VB: Hooked up more debugger functionality. PC-FX, VB: Fixed V810 read/write breakpoints in "fast" V810 emulation mode. August 9, 2010: Mednafen's now compiled with -Wempty-body and -Wignored-qualifiers. NES: Removed a typoed semicolon in sound.cpp. August 8, 2010: Added "math.h" header order inclusion check to "types.h", and fixed a few instances of incorrect #include order. Fixed C68K code generator dependency when building on/for a platform that has an extension for executables(AKA MS Windows). Fixed a structure initialization problem in the input setting generation code that could cause crashing under certain circumstances. Fixed Makefile.am to actually link against SDL(somehow it was working anyway on Linux, probably through an indirect linkage through SDL_net). August 5, 2010: Debugger settings *.debugger.disfontsize and *.debugger.memcharenc are now automatically generated, the latter based on the system's DebuggerInfoStruct. Renamed *.debugger.memcharset settings to *.debugger.memcharenc PC-FX: Added settings "pcfx.input.port1.multitap" and "pcfx.input.port2.multitap". These settings shouldn't be enabled by average users. August 4, 2010: PC-FX: Added RAINBOW buffer data to save states. Added a variable to save states whose absence was breaking save states made in the middle of a CD-ROM transfer. Switched to using the internal copy of Tremor to decode Ogg Vorbis files during CD emulation preferentially over libsndfile, as libsndfile has an unacceptably slow seek implementation for Ogg Vorbis. August 3, 2010: PC-FX: Added emulation of the 2 gamepad switches. Fixed a bug that caused a crash if input type of "none" was selected for a virtual input port. Input device state is now saved in save states(missing a call before). Fixed mouse emulation(previously, cursor movement was totally broken). Disabled various debug printf statements. Removed "bios.fastboot" setting and the HuEXE loading code(both of which have been broken for a while). The fastboot code likely won't return(it'd be better as an external patch to the BIOS ROM image), and the HuEXE loading may return when PIO emulation is added(requiring the use of the PC-FXGA BIOS most likely). August 2, 2010: PC-FX: Fixed the horizontal position of the VDC layers vs KING BG and RAINBOW layers when VDC is in 7MHz dot clock mode. PC-FX: Disabled a few unknown memory address read/write debug printf()s. August 1, 2010: PC-FX: Writing 0 to D0 of KING register 0x40 while a RAINBOW transfer is in process will now abort it. Fixes background flickering in "Tonari no Princess Rolfee". PC-FX, VB: Values written to system registers EIPSW, FEPSW, EIPC, and FEPC by instruction "ldsr" are now masked properly. PC-FX: Added emulation of the TIMER TIREQ bit. PC-FX: Interrupt controller level/priority register writes are now ignored unless all 7 bits in the interrupt mask register are set. This matches tests done on a real system(done by writing the priority registers, and then reading back the values; wouldn't catch the case of there being shadow registers, however, given that this ignoring behavior is documented in the hardware documentation, this seems highly unlikely). This *finally* fixes the PC-FX BIOS PhotoCD player! PC-FX: Fixed interrupt controller register value masks. July 31, 2010: PCE: Removed a (mostly benign) debug addition left in the extended SF2 mapper size calculation code. July 30, 2010: NES: Removed/Disabled some debug(not debugger :b) code. NES: Fixed the FDS written-disk shadow copy code. Previously, the FDS loading code was updating the MD5 hash improperly, causing the filename of the shadow copy to be different when it was written than it was when a shadow copy was to be opened. NES: Altered FDS IRQ emulation to fix "Druid". NES: Fixed a bug that caused the entire file pathname to be evaluated when determining system type, now only the filename is examined. NES: Added strings "(Europe)", "(Germany)", "(USA)", and "(Japan)" to the filename scanning code for system determination. NES: Prettified the NES filter.cpp debug printf()s a little. PCE: Fixed HES player screen dimensions. PCE: Removed debug printf on bad opcode execution. PCE: HES playback code now initializes the VDC horizontal and vertical timing registers before calling the song initialization routine. Interestingly, this seems to have broken the Cosmic Fantasy IV HES, but that it even sort-of worked in the first place was probably a fluke given the quality of the rip... PCE: Altered HuC6270 reset code to reset the horizontal and vertical timing registers to 0(which is closer to the real system than setting them to 0xFF, but real reset values are unknown, though they might just be 0). PCE: When in LFO(FM) mode, excessive playback frequency for channel 0(carrier) is handled more gracefully(but still not "correct", as it would be too CPU intensive). PCE: Rolled the LFO counter into the normal channel counter. On a real system, the LFO counter(pre-divider) and the normal channel counter may be resetable independently, however, rolling them into one shouldn't cause any audible differences and simplifies the code(and fixes a bug due to how it was implemented before in that if the modulator channel's volume was in the audible range, the waveform would have been distorted for larger LFO pre-divider reload values). July 25, 2010: Fixed Ogg Vorbis playback when libsndfile doesn't support it(I'd accidentally inverted the ov_open() success test during the change to AudioReader()). PCE: PSG channel numbering in the debugger's memory editor is now from 0 instead of 1. July 24, 2010: Fixed libsndfile linkage with mingw32 target(it was broken when we added --with(out)-libsndfile configure option). July 22, 2010: PCE: The 2MiB of arcade card RAM is now defined as an array that's allocated along with the ArcadeCard object, rather than a pointer that's manually allocated off the heap. PCE: Added support for HES files that load data into banks 0x80-0x87. PCE: Fixed HES controls(song increment/decrement) to not lose responsiveness if the frame is being skipped. July 21, 2010: PCE: Added a setting to select the PSG revision, "pce.psgrevision". PCE, PCE_FAST, PC-FX: Added revision selection functionality(only supporting HuC6280 and HuC6280A revisions currently) to the PSG emulation code, and altered the volume table slightly to mimic the PCE's actual volume reduction limits. Also, hooked up the PSG register setting code for the debugger. July 17, 2010: PCE: Fixed inconsistencies in how an emulated "power toggle" affects timestamps, correcting a failed assert in the CD-ROM emulation code if the user tries to reset/power in the debugger under certain conditions. (TODO: Make similar fixes to PC-FX emulation code) PCE, PCE_FAST, PC-FX: Revamped and refactored PCE PSG core code to implement new details obtained through tests on a real SuperGrafx(HuC6280A) and on a PC Engine(HuC6280). However, the emulation is closer to the HuC6280A revision. It may be necessary in the future to run tests on a PC-FX to determine what differences, if any, are in its PSG core vs the HuC6280A's sound core. July 10, 2010: PC-FX, PCE: SCSI CD-ROM emulation code cleanup and minor tweaks. July 7, 2010: PCE: Improved mouse emulation greatly; previously, emulation of two buttons was missing. The two newly-emulated buttons "Select" and "Run" are mapped to keyboard keys "Tab" and "Enter" by default. However, the L/R mapping may be backwards, and there are still problems with using the mouse with at least one game("Lemmings"). July 5, 2010: Fixed a temporal blur code bug that was causing an unblurred section of the screen on PCE games. Renamed the July 3, 2010: PCE: Adjusted DMA timing again to fix an extremely long delay at the beginning of Takeda Shingen(TODO: make sure the delay doesn't exist on a real PCE). The core CD reading functions now always put CD-DA data in the buffer in little-endian form. Separated and refactored the audio format decoding code out of cdromfile.cpp into audioreader.cpp July 2, 2010: PCE_FAST: Scrapped the old arcade card code in favor of the modularized code from the "pce" emulation module. PCE: Moved arcade_card.* to hw_misc/arcade_card/arcade_card.*, and made its save state section names more verbose. July 1, 2010: PCE_FAST: Corrected the aspect ratio. PCE_FAST: Scrapped the old PSG code in favor of the new modularized PSG code already being used by the regular "pce" module. June 27, 2010: PCE: Fixed PRAM poking in the debugger to not allow unused bits to be set. June 26, 2010: GBA: Including a line containing "rtc" in the save-game "type" file(refer to the GBA module documentation) will now enable realtime clock emulation for that game. June 22, 2010: SNES: Hooked up backup memory loading. Fixed the "autosave" option to work instead of causing a crash on exit. June 21, 2010: The IPS patch loading code now checks for file read errors, and is no longer tolerant of IPS patches that end without an "EOF" patch/chunk header. Removed support for automatically patching with compressed IPS patches, as it causes a problem with at least one patch that has semi-hidden PKZIP-format data in it that was confusing the file loader. June 20, 2010: SNES: Hooked up multitap and mouse input emulation code(you'll need to manually enable multitap by setting "snes.input.port2.multitap" to "1" because it can cause problems if it's enabled by default. SNES: Updated to bsnes v0.59(for SA-1 and SuperFX save state support). June 17, 2010: NES: Added cart WRAM to mapper 18 emulation to fix "Jajamaru Gekimaden". PCE: Altered VRAM-to-VRAM DMA operation to fix Ankoku Densetsu/Legendary Axe II(and without breaking Langrisser), though stage 5 in LAII/AD may still randomly have graphics corruption in certain conditions. June 11, 2010: PC-FX: Fixed a bug that caused only half of the VDC BG tiles to be displayed in the debugger's graphics viewer. Fixed segfault on 0-entry setting enum lists. Wrote some simple PHP scripts to automatically generate portions of the individual emulation module documentation based on templates and the settings definition file produced by -dump_settings_def. Added a command-line option "-dump_settings_def", which will dump definition data for all possible settings in Mednafen. June 8, 2010: PCE: Adjusted VDC VDW start timing to fix vibrating screen in World Court Tennis. June 7, 2010: PCE: Fixed "pce.h_overscan" setting to actually work right. PCE: Fixed screenshot width. June 6, 2010: Finally got rid of the old FSettings global, moving SndRate to SoundRate of EmulateSpecStruct. Video frames are now recorded before temporal blur effect is applied(rationale: external movie encoders will have a wider variety of filters, whose quality and parameters are not constrained by being able to run in realtime). June 5, 2010: CDPLAY: Fixed a crash if playback when past the last audio track, and the last audio track was not the last track of the disc. PCE: Added more missing data to save states. June 2, 2010 PCE: Altered vblank IRQ start timing to fix occasional massively-glitchy frames in Street Fighter II. PCE: Fixed a bug that could cause a crash(due to an incorrect parameter to memcpy()) if trying to load a large ROM image(>= 2MiB) that was not padded to the Street Fighter II mapper size. PCE: Fixed missing intialization of many VDC variables on reset. PCE: Added support for a hypothetical extended Street Fighter II mapper. June 1, 2010: Revamped CD-ROM system determination code. PCE: Altered VDC BXR/BYR latch timing again to fix Seiya Monogatari, and probably breaking another game in exchange though. :/ PC-FX: Fixed a problem caused by V810 optimization changes that broke CD ROM emulation in save states. Fixed loading of game cheats when loading a CD game(PCE CD, PC-FX). May 31, 2010: PCE: Added a few missing variables to save states. May 29, 2010: Fixed a bug that could cause crashing on invalid save states(or with a state variable name >= 128 chars in length). NES: Added a few missing sound variables to save states, and added a missing CPU state variable to save states that could cause netplay desync(unlikely, but still possible). PCE_FAST: Fixed broken frameskip behavior in regards to sprite overflow IRQs(which caused netplay desyncs). PCE_FAST: Added missing variables to save states(whose absence caused netplay desyncs). May 26, 2010: Made an optimization to the V810 emulation code in order to improve performance on RISC CPUs(TODO: Make sure this didn't break anything). Fixed compiling when the configure script was passed "--disable-debugger". May 25, 2010: Added support for compiling without libcdio and without libsndfile, by passing --without-libcdio and --without-libsndfile to the configure script, respectively. Compiling without either is not recommended for general use of course, but may be of use to porters(especially compiling without libcdio). May 23, 2010: Lynx: Fixed a few pieces of poorly-formed(and possibly undefined) code in the UART emulation code. Fixed an incorrect object creation bug in cdrom/pcecd.cpp SMS: Fixed a couple of strict aliasing violations. GBA: Fixed code causing gcc to issue warnings(listed here in the ChangeLog in the case I broke something, I'll know what did it) in the BIOS emulation code. May 22, 2010: Moved MDFN_Rect typedef from types.h to video.h. Removed an extraneous semicolon after an if statement in the V810 save state code. Fixed a few code constructs causing compiler warnings. Added various macros(to force no inlining, force arbitrary alignment, etc.) to allow for an easier time getting the code to compile on non-gcc-compatible compilers. May 21, 2010: NES: Fixed a bug that could cause Mednafen to crash if the game crashed or intentionally executed off the end of the 16-bit address space without an immediate absolute branch afterwards. VB: Hooked up settings "vb.disable_parallax", "vb.default_color", "vb.anaglyph.preset", "vb.anaglyph.lcolor", "vb.anaglyph.rcolor", and "vb.input.instant_read_hack" to a SettingChanged() notification function so that those settings can be changed during emulation runtime. "vb.cpu_emulation" and "vb.3dmode" are not hooked up, and can not be due to current Mednafen architectural limitations(and even if those weren't present, "vb.cpu_emulation" would still require a virtual power toggle). May 15, 2010: Began work on expanding the information in the setting definition structures, so that the documentation on settings can eventually be mostly auto-generated. Altered the help screen accessible via command-line option "-help" to not display any settings. There are far too many settings to list all at once. Perhaps we'll add additional command-line options in the future to list settings according to a simple filter. May 14, 2010: PC-FX: Added setting "pcfx.disable_bram". Only set this to 1 if you know what you're doing, as it's enabling an illegal/broken state. PCE: Added setting "pce.disable_bram_cd" and "pce.disable_bram_hucard". Only set "pce.disable_bram_cd" to 1 if you know what you're doing, as it's enabling an illegal/broken state. pce.disable_bram_hucard is more useful, as it will make HuCard game run as if they're on a plain-Jane PC Engine/TurboGrafx without CD-style backup memory. May 13, 2010: NES: Moved read/write handler installation from the Power function to the Init function for input emulation, PPU emulation, and VS Unisystem emulation. NES: Corrected the power-up state(values) of internal RAM. NES: Fixed mapper 99 emulation(hopefully, I'm unable to test it currently). Fixed #include order(for config.h, basically) in many files. May 7, 2010: Added a new fullscreen stretch mode that preserves the aspect ratio(at least in the same way that keeping xscalefs == yscalefs does), courtesy of donb04. May 6, 2010: NES: Fixed PPU rendering code to use the real pitch of the output surface, rather than the requested pitch as specified in the MDFNGameInfo struct. This should fix garbled video with "overlay" vdriver in some circumstances. NES: Fixed clear color during PPU startup/reset, such that the screen will no longer be briefly green after a reset using the "overlay" vdriver. NES: Added a (slow) kludge so that the output image is not totally wrong when NTSC blitter is enabled while using the "overlay" vdriver. April 30, 2010: Altered the strerror_r() implementation detection preprocessor code to hopefully work correctly on non-GNU platforms. April 29, 2010: GBA: Fixed a small bug that totally broke GSF loading. PCE_FAST: Added padding to memory mapped into the HuC6280 virtual address space to avoid potential emulator crashes if a game crashes. VB: Implemented more of the debugger. April 27, 2010: Added 2xSaI, Super 2xSai, and Super Eagle scaling filters courtesy of a code submission from "donb04". Fixed fatal bugs in the IPS patching code(the bugs were introduced from the refactoring of the file loading code). Genesis: Removed various debug calls to exit() so that games crashing should no longer cause Mednafen to crash/exit. Genesis: Fixed interlaced mode to not be totally broken. April 23, 2010: VB: Fixed brightness calculation bug that resulted in very dark images instead of completely black images. April 12, 2010: SMS: Encapsulated in a namespace. SMS: Added missing state to save states to fix netplay and movie desynchs. April 11, 2010: VB: Null-terminated the anaglyph preset list. April 11, 2010: VB: Changed nominal width in pbarrier 3dmode to 768. Removed stale build files. April 7, 2010: Removed unused PulseAudio option from configure.ac. Genesis: Encapsulated more code in a namespace. April 6, 2010: PCE_FAST: Changed "inc" instructions to the equivalent "add" forms in inline assembly for better performance. April 5, 2010: Replaced MDFN_FastU32MemsetM8() with code that doesn't violate strict aliasing(at least when an array with 32-bit elements is passed...which is not exactly the case in every place it's called), and with inline assembly for x86 and x86_64. April 4, 2010: VB: Fixed graphics output when "vdriver" is set to "overlay", and "vb.3dmode" is set to "anaglyph". Fixed command-line argument "-force_module" handling. PC-FX: Renamed setting "pcfx.adpcm.restrict_range" to "pcfx.adpcm.emulate_buggy_codec", since it now does more than effectively restrict the range, thanks to David Michel's analysis of an official PC-FX ADPCM encoder. April 3, 2010: Settings are now sorted before being saved to disk. Invalid/Unknown settings are now saved back to the configuration file on exit rather than being discarded. PCE: Fixed input port definitions so that Tsushin Keyboard can only be enabled on input port 1(which reduces the number of input mapping settings automatically generated by about 400). PCE: Multitap emulation is now automatically disabled when Tsushin Keyboard is selected on input port 1(TODO: document this fact). NES: Fixed a few memory leaks in filter.cpp. March 30, 2010: VB: Added a hack, enabled by default, that will return the current pad state when reading from SDR, rather than the latched state, to reduce latency by 20milliseconds in some games. Perhaps remove this option when everyone has 240Hz monitors and we don't have much emulator and PC-caused latency. ;) VB: Fixed input automatic reading code to read 16 bits, not 32. Stupid typos. VB: Changed VB_SetEvent() to take the timestamp of the next event, rather than the number of cycles until the next event. The input code was erroneously calling it with a timestamp before this change, so this change should fix potential input lag issues. March 29, 2010: Factored some cheat management function calls out of individual emulation module code. March 26, 2010: Added support for "enum" setting type. Added support for recognizing integer settings expressed as hexadecimal, with a 0x prefix. March 19, 2010: PCE: Added (untested) emulation of Arcade Card register 0x1AE5, based on information from FluBBa. PC-FX, VB: Fixed "DIV" and "DIVU" instruction emulation when the destination register is "r30". March 18, 2010: VB: Began adding Virtual Boy emulation. March 17, 2010(FIXME/TODO these changelogs): Reorganized sufficiently-abstracted chip hardware emulation into directories hw_cpu, hw_sound, and hw_video. PC-FX: Fixed V810system register "PIR" value. March 16, 2010: PC-FX: Scrapped the old PC-FX-specific VDC code, in favor of the new abstracted VDC code originally written for the new more accurate PC Engine emulation. Removed KING KRAM mode masks(they were pretty much disabled, anyway, and only served to bloat the code). Moved the KRAM arrays to the end of the king_t struct, so that commonly-used variables don't require 1MB+ offsets. Added page setting cache pointers to speed up rainbow and DMA operations slightly. The V810 event handler and memory+IO read/write functions are now accessed via pointers(small speed penalty, unfortunately). Minor V810 optimizations. FINALLY fixed the ADPCM decoding algorithm for the most part(I'm still unsure about loss of precision in interpolation mode, though), removing that ugly hack that ran a DC-bias removal filter on the ADPCM predictors themselves. However, it turns out PC-FX games are somewhat glitchy, so the following settings have been added(implemented as hacks that can improve sound quality over that of an actual PC-FX): pcfx.adpcm.restrict_range (Default: Disabled) Hack that restrict ADPCM predictor to 50% normal range. Can improve sound in some games whose ADPCM was encoded improperly(for example, in Miraculum FMV), but will make sound worse in other games(for example, Nirgends). pcfx.adpcm.suppress_channel_reset_clicks (Default: Enabled) Hack to suppress clicks caused by forced channel resets. This will MURDER those nasty clicks that occur when games reset the ADPCM predictor values when they are off-center. It shouldn't harm anything(except in pathological cases, and even then, only minimally), thus it is enabled by default. However, people developing new code for the PC-FX may wish to disable it for testing their programs. March 7, 2010: PC-FX, PCE CD: Fixed SCSI commands 0xD8 and 0xD9 to work properly when passed a track value of last_track + 1(leadout in this cae). PC-FX: V810 event handling revamp. March 5, 2010: PC-FX: Added untested V810 bitstring search instructions. PC-FX: Fixed the FPU precision degradation flag when an overflow exception occurred(it was never being set, even in cases where it should have). PC-FX: Fixed CY and S flags when an FPU overflow exception occurred(they were erroneously being set in EIPSW, due to V810_Exp() being called before SetFlag()). March 4, 2010: PC-FX: The result of an FPU operation that overflows is now written to the output register(instead of discarded). Additionally, to get the correct value on overflows required hacking the SoftFloat code to "wrap" the exponent on overflows, instead of transforming the value into an infinity. March 3, 2010: PC-FX: Fixed the value returned on reads from the "PIR" V810 system register. PC-FX: Fixed the exception generated when an invalid FP instruction is executed. PC-FX: Scrapped most of the old V810 FPU emulation code, and switched from glibc's FPU emulation code to using "SoftFloat". SoftFloat has a well-defined interface(even if it does pollute the namespace with globals :b), documentation, and has a license that will allow the V810 code to eventually be backported to RealityBoy. The new V810 emulation code also has much more accurate FPU flag calculation and exception handling. February 27, 2010: PC-FX: Fixed TRNC.SW and CVT.SW to set the FIV flag instead of the FRO flag in the event the result is too large to fit in an integer register. PC-FX: Fixed unused variable warnings in the V810 emulator. PC-FX: Fixed lastop variable in V810 emulation code after a bitstring instruction is executed. Fixed bitstring handling so that the emulator won't malfunction if an unhandled/illegal bitstring instruction is executed. February 15, 2010: PCE: Reworked HES playback code to be lower-level. PCE_FAST: Copied more CPU state to local variables in the execution loop. PCE_FAST: Added a "Page1" pointer that ZP and stack accessess now go through, instead of directly to RAM(for the case the game changes what RAM is mapped into $2000-$3FFF). Note that this doesn't have any write protection mechanism, so if a game maps in ROM and then writes to ZP or stack, the ROM data will be trashed. FIXME. February 10, 2010: PCE: Added VCE and VPC registers to the debugger. February 8, 2010: PCE_FAST: Optimized the SuperGrafx VPC mixing code a bit. February 5, 2010: PCE_FAST: Refactored the HuC6280 cycle counting code to reduce CPU usage, and made a simple event system to reduce CPU usage further by factoring timer updates out of the per-instruction execution loop. PCE_FAST: Increased the maximum overclock value accepted to "100", for testing purposes. TODO: Decrease this to a sane value (or not, if 100 will work correctly even with PCE CD emulation) for 0.9.0 final. January 27, 2010: PCE: Removed a bit of preprocessor abuse in the HuC6280 CPU core, and altered the HuC6280 CPU core emulator to not have dependencies on the main PC Engine emulation code. PCE: Fixed CPU reset while in step mode(and a few other related problems) by altering the semantics of the debugger step mode with a pending IRQ. (TODO: This needs to be documented in detail later when my thoughts are more collected) January 25, 2010: Fixed a bug that would cause the emulator to crash if any opcode breakpoints triggered when the debugger screen was disabled and no other breakpoints were active. January 24, 2010: PCE: Encapsulated HuC6280 emulation in a class, and fixed(mostly) the debugger-related code. January 22, 2010: Changed save state format to save variable/array names somewhat like PASCAL strings in the file(maximum 255 bytes per name), instead of a fixed-width field. On save state loading, each of the section definition arrays are now parsed and copied into a std::map, before the data in each section is loaded, changing variable name search algorithmic complexity in the actual loading code from O(n^2) to O(log n)(ignoring any overhead that loading into the std::map incurs). January 20, 2010: Fixed a couple of remotely-exploitable(if connected to a malicious server) stack manipulation bugs in the network play code. January 18, 2010: PCE: Removed settings "pce.ocmultiplier" and "pce.cdspeed", as they break games and cause code obfuscation(especially the overclocking option). They will still be available in the PCE_FAST module, though(with no plans to remove them from it). PCE: Fixed the SF2 bank mask value to prevent invalid memory accesses. PCE: Altered multitap emulation slightly to fix input in "Strip Fighter". PCE: Fixed a bug that was causing CPU cycles to be lost as far as the VCE is concerned due to failing to synchronize the VCE emulation before the timestamp was reset. PCE: Fixed a similar bug with lost cycles in timer emulation. (TODO: Maybe refactor the forced synchronization code so that it's all in one spot instead of scattered about). PCE: Reverted VDC wait states to multiples of the 7MHz CPU clock instead of the 21MHz master clock, as after thinking about it more, I highly doubt the wait states are done with 21MHz granularity. January 17, 2010: PCE: Altered VRAM DMA so that it will only run outside of VDW(or inside if in burst mode), and only when SAT DMA is not in progress. Fixes status bar glitches in Langrisser. PCE: Removed VRAM DMA running shadow variables to fix "Fushigi no Yume no Alice"(setting SOUR to the value of DMA_SOUR, LENR to the value of DMA_LENR, etc. works too, but I prefer the solution that uses the least number of extra registers/variables; to see which way is correct, though, we would need to try to write LENR/SOUR/DESR while VRAM DMA is in progress on a real PC Engine). PCE: Adjusted horizontal line timing slightly to fix a broken scanline in Aoi Blink. PCE: Removed various debug print statements. PCE: Dot clock mode changes will now reset the VCE's clock divider. This is done, in combination with VDC wait states being in 21MHz master cycles, to synchronize the VDC with the CPU when in 7MHz dot clock(and not possibly be in an unsynchronized state dependent on when the dot clock change occurred). This may not be what happens on the real system, but it *shouldn't* hurt anything(commercial games at least), and it should make it easier to get scanline timing right for emulating raster effects without glitches when in 7MHz dot clock. PCE: VDC wait states are now done in terms of 21MHz master cycles(TODO: confirm this is how it is on a real PCE or not). January 16, 2010: PCE: Added a lot of missing VDC variables to save states. PCE: Adjusted horizontal line timing slightly to fix a jittery problem with Shin Megami Tensei. January 15, 2010: PCE: Fixed arcade card state loading(it wasn't saving and loading the ACRAMUsed variable, causing the actual RAM contents to not be loaded unless the arcade card RAM was written to before the state was loaded). PCE: Fixed the end of VRAM DMA code to actually commit any pending reads/writes(fixes an assert() failure in Crest of Wolf). January 14, 2010: PCE: Added a semi-hack to fix VRAM and screen corruption in Asuka 120%'s split-resolution screen. January 10, 2010: PCE: Mostly figured out the Tsushin Keyboard layout, and mapped the best keys on a standard western "Windows key"-style keyboard I could think of to the emulated keyboard. It turns out the keyboard is very similar to later(?) PC-88 keyboards(I used source code from "M88 - PC8801 Series Emulator" as a guide to some of the more exotic keys I was having trouble with). January 9, 2010: PCE_FAST: Fixed CD BIOS loader to look in the "firmware" directory with non-absolute paths. PCE_FAST: Changed the default setting for "pce_fast.cdbios" from a warning string to "syscard3.pce". PCE_FAST: Fixed CD emulation crash. January 8, 2010: Added very basic support for threading functions on the driver side(which right now are just basic wrappers around SDL's threading support). This was done to get the SDL dependency out of the new multi-threaded CD-ROM reading code. January 7, 2010: PCE: Fixed graphics rendering to use the actual pitch of the MDFN_Surface, instead of the hard-coded requested pitch/framebuffer width in EmulatedPCE. Fixed a compilation problem with MINGW in src/cdrom/lec.h SNES, MMPlay, PCE_FAST: Fixed sound emulation to use driver-side supplied buffer. PCE, PC-FX: lastts is now initialized in the PCE_PSG constructor. WonderSwan: EEPROM is now initialized to 0 on startup(it wasn't being initialized at all before). Fixed a bug in the overlay blitting code that was causing graphics corruption on some PCE games(it was essentially assuming the source width was always a multiple of 2). This bug made apparent another bug(reading beyond the source rect width, and possibly beyond the buffer in the worst-case. FIXME.). Overloaded the Open() method of the MDFNFILE class to allow for passing a "std::string" type for the path argument. PCE: Fixed the base path used in CD BIOS loading. PCE: Fixed loading of CD BIOS ROM images with 512-byte headers(broken in the HuCLoadCD->HuCLoad merge). SNES: Fixed compilation with (at least old) mingw32. byuu will include the fix in future bsnes. Fixed link order of libintl and libiconv. Fixed the include dir for config.h in intl/Makefile.in January 6, 2010: Moved the " less efficient, but only when the user changes the setting from the default of 0, and most users PROBABLY won't do this. The benefit is simplification of sound emulation in the emulation modules. (This definitely breaks/changes the music format player's waveform visualization, which we might want to fix in the future) PCE: Merged HuCLoadCD() into HuCLoad(). PCE, PC-FX: Abstracted the core PCE PSG code in a class. The PCE and PC-FX PSG emulation now use this class(but not pce_fast, at least not yet...). PCE: Fixed CD sound emulation(broken in the PCE PSG refactoring). PCE: Stuffed arcade card emulation into a class. SMS: Fixed YM2413 detection(though I'm not sure it's 100% correct, games that can use it actually do use it now). SMS: Fixed an output overflow bug in the YM2413 emulation code. SNES: 15-bit SNES RGB to the host system video format now uses a 32768-entry uint32 LUT, instead of calling the output surface's MakeColor() method for every pixel(which was especially slow in YCbCr mode). SNES: Updated to BSNES v058. January 5, 2010: Added a "slow-forwarding" feature. It's like FAST forwarding, but you go SLOWER. Which kind of goes without saying, but I felt like saying it anyway. It is controlled via the new settings "sftoggle" and "sfspeed", which behave similarly to "fftoggle" and "ffspeed", except that "sfspeed" can be set to < 1 values(the actual range is 0.25 <= value <= 1). Fast-forwarding is activated by the backslash key(I first thought about using SHIFT+BACKQUOTE, but that would probably make Mednafen worse on foreign keyboards, and we don't need any more of that...)...though this will probably break on some Frussiranistanadengia keyboard somewhere. If fast-forwarding and slow-forwarding are activated simultaneously(YOU MONSTER), the fast-forwarding speed multiplier will have precedence over the slow-forwarding multiplier. ...and since we recently moved to resampling the audio post-emulation-module-...emulation, slow-forwarding won't bring inaudible frequencies down to the audible frequency range(since they were already filtered out). This has both good and bad sides, but probably mostly good(so no non-tubular sounds caused by games "silencing" sound channels by setting their playback rates extremely high will be heard). GB: Fixed a bug(still many left) in the external RAM handling code, fixing an emulator crash with "Wizards & Warriors - Chapter X". (I think! TODO: confirm) Added support for "lurkers" on the network play server. Previous versions of Mednafen don't lack support for this per se, but there would be cosmetic issues with status messages printed to the internal console. Lynx, GBA, PC-FX, MD, SMS: Fixed sound emulation to use the driver-side allocated buffer. January 4, 2010: PC-FX: Added more checks to error conditions during fast booting, and cleaned up and added a few error messages. MDFND_PrintError() and MDFN_Message() will now lock a mutex around access to stdout, instead of queueing the messages to be sent to stdout in the main thread. This is what I should have done in the first place... (This change fixes, among other things, dropped status/error messages when CD-ROM loading fails). SMS: Fixed video output, broken during the transition to MDFN_Surface. January 3, 2010: PCE: Fixed broken Soldier Blade title screen by altering the conditions of when D6 is set(TODO: alter/rename VDC_IS_BSY). Finished implementing priorities for emulation modules when loading a game. The priorities are, from highest to lowest: External_high Internal_high (All modules but pce_fast are currently set to this) External_low Internal low (pce_fast is set to this) Added will cause that module to not be considered when trying to determine which module to load the game with(it will still be used if explicitly specified via -force_module or -loadcd). Added TestMagic() to Lynx, NES, GG, SMS, SNES. Removed SetSoundVolume() from the emulation modules, it's handled in the core code now, but the emulation modules can handle it themselves if speed is critically important. Removed SetSoundMultiplier() from the emulation modules, sound is now resampled in the main core if fast-forwarding is in effect. However, there still is a provision to handle it in the emulation modules if speed is critically important. The sound buffer emulation modules write to is now allocated on the driver side, but Mednafen still supports the old method of having the sound buffer allocated in emulation modules. Currently, the following modules have been converted to the new system: GameBoy Neo Geo Pocket NES WonderSwan January 2, 2010: Updated the documentation to reflect the additions and changes made between 0.8.5 and 0.8.D. GBA: Fixed a bug that would cause data corruption and the loaded game to crash whenever a state was saved(but the state itself, and loading it, was fine) on a big-endian platform. NES: Removed support for sound quality setting "-3". It's too low-quality(Solstice sounds awful) and is unlikely to give a significant % performance boost over quality -2. December 31, 2009: Replaced more instances of usage of strerror() and "%m" in format strings with usage of the ErrnoHolder class. Lynx: The boot ROM is now loaded through MDFNFILE instead of stdio f*(). PC-FX: ROM BIOS and FX-SCSI ROM are now loaded through MDFNFILE instead of stdio f*(). Lynx: Fixed a bug in the cart loader code that would cause a crash if the ROM bank size was larger than the actual data available in the file(as is the case with some homebrew programs). Thanks to "Wookie" for the patch. GB: Fixed colors when "vdriver" is set to "overlay". Fixed strerror_r() usage in error.cpp/error.h SexyAL: Fixed a bug affecting the return value from RawCanWrite() in the ALSA driver. The returned value was typically too small by a factor of 4. The effects of this bug included potential long periods of garbled sound during netplay. Fixed the return value from RawCanWrite() in the JACK driver. It was being clamped to a value that was too small by a factor of 4; however, the clamp value was already excessively large in a way that this bug would should have only been triggered if the "soundbufsize" setting was excessively large. The effects of this bug would be similar to the ALSA RawCanWrite() bug. The ALSA and OSS drivers will now try to set audio output to 2 channels if the source data only has 1 channel, and 16-bit signed if the source data is 8-bit(automatic conversion is done). This is done to allow for lower period/fragment sizes, as, in ALSA's internals at least, the minimum period sizes are expressed in bytes, not sound frames. The ALSA and OSS drivers will now try to set lower period/fragment sizes than previous versions of Mednafen did. With default settings, for ALSA, the new period/fragment size is 50% of what it was before, and for OSS, 25%. Also, there's a new setting to override the SexyAL's driver's preferred period/fragment sizes, named "sound.period_time"(default value of 0: no override). The period/fragment size is expressed in microseconds. If the new, lower fragment sizes cause problems, the setting can be changed to "2666" to approximate the fragment size selection in previous versions of Mednafen when using ALSA output, and "5333" when using OSS output. Added a workaround to the OSS driver for a bug in ALSA(and hence, ALSA's in-kernel OSS emulation) that could cause the emulator to run far too fast for a short period of time if a buffer underflow occurred. The ALSA's driver's RawCanWrite() method now(finally) uses snd_pcm_avail_update() instead of snd_pcm_delay(). This should improve performance and frameskipping behavior when the ALSA output is not routed directly to a physical device, such as the case with PulseAudio(though PulseAudio is still not recommended :b). If an invalid "sounddriver" is selected, Mednafen will now print an error message and not initialize sound instead of silently selecting the default sound driver. SexyAL: Altered the argument order of SexiALI_Convert() to make more sense. Fixed the broken conversion code used when the frame count passed to Write() is greater than 2048. Fixed a bug/design flaw in the SexyAL SDL sound driver that can cause a crash during program deinitialization. Added support for "float" output format to the ALSA driver. The ALSA driver will now try all formats that SexyAL's conversion code supports if the desired format is not supported by the output device, rather that simply erroring out as before. Added support for converting to 24-bit and 32-bit PCM output formats from the source format(which is still fixed to signed 16-bit). The driver function RawCanWrite() is now passed a pointer to a uint32_t, which it sets to the number of bytes that can be written without blocking, rather than returning the value directly, so that the return value can be used as a success/failure indicator. The driver function RawWrite(), and the "user" function Write(), will now return 1 on success, 0 on (fatal) error, rather than returning the amount of data written. The OSS driver was testing the return value of open() incorrectly. Fixed. SexyAL is now compiled as C++(but doesn't use many C++ features yet), which necessitated adding several explicit casts in various code, and fixing some inconsistent function prototypes and declarations. JACK: Fixed a stereo playback crashing problem(a loop count was being calculated incorrectly). JACK: Switched to using jack_client_open() instead of the deprecated jack_client_new(). JACK: The "sounddevice" setting is now used, to specify the JACK server to connect to. JACK: Fixed a possible race condition in RawCanWrite(). JACK, SDL: Changed the inter-thread ringbuffer setup to be less likely to underrun, while not hurting latency. JACK, SDL: Additional playback position precision is now obtained by using jack_get_time()/SDL_GetTicks(). This will improve Mednafen's performance with larger fragment sizes with these drivers, but smaller fragment sizes are still preferred for latency-to-underrun-occurrence-ratio reasons. Renamed the "byteorder" field of SexyAL_format to "revbyteorder", and changed it to a boolean type, to avoid confusion over what it actually represents. December 30, 2009: Altered autogen.sh to force updates(copy to Mednafen's source dir) of automake standard files. Added usage of the AM_SILENT_RULES macro to the autoconf script, allowing pretty compile output via: ./configure --enable-silent-rules or make V=0 PCE: Fixed the BRAM initialization(it was wrong, and generated from when Mednafen erroneously emulated 8KiB of BRAM). Fixes lockups in "Sorcerian". Note that if you have any existing save states or battery-backed RAM files for "Sorcerian" in "sav" or "mcs" under Mednafen's base directory from when you attempted to run "Sorcerian", you will need to delete them for this fix to have any effect. Fixed: joystick.cpp:141: warning: format ‘%016llx’ expects type ‘long long unsigned int’, but argument 4 has type ‘uint64’ November 30, 2009: Fixed some PC-FX interlaced compile errors(resulting from an earlier effort to fix 0-width source rect blits due to not verifying that the variables for the previous field contained valid data). Fixed a minor typo in NGPGFX_CLASS::reset() GB: Fixed initialization of "HRAM" on virtual power toggle/reset. SMS: Fixed the input and reset emulation when the territory was set to "domestic"(Japan) and FM emulation was enabled; the emulated system was erroneously being treated as a Game Gear in a few places when those conditions were met. November 8, 2009: Reran ./autogen.sh, under Ubuntu 9.10 Reverted drivers/opengl.cpp and drivers/opengl.h to pre-PBO experimentation copies. Fixed incorrect(and excessively complex, old code nearby) usage of MDFNI_DispMessage() in drivers/input.cpp in the input configuration process. Removed archaic and unused(but still being compiled!) files drivers/config.cpp and drivers/config.h. Fixed cases of file I/O return values being ignored in: mempatcher.cpp mmmreader.cpp (not complete) Fixed some strict-aliasing-conflicting code in nes/ppu/ppu.cpp, and somewhat ambiguous parentheses. TODO: Clean it up more. Reverted PC-FX KING/FXVCE rendering/mixing code to pre-black-bias-optimization attempt. It was convoluting the code too much. Before(some of these changes listed below are seriously out of order from when they occurred, development was kind of chaotic and haphazard): Altered the netplay protocol, adding "INTEGRITY", "SERVERTEXT", and "ECHO" commands. Added "/ping" and "/integrity" commands to the netplay text console. CD emulation: Added new multi-threaded CD image and physical drive reading code, with a small readahead buffer. This new code will also allow sector read hints to be given, which should alleviate emulation freezes once we emulate CD seek delays in cdrom/scsicd.cpp. Simplified the base CD reading code, to always fetch 2352+96 bytes of data. Physical CD reads will now read semi-"raw" data(2352 bytes per sector regardless of sector type), along with 96 bytes of subchannel data per sector. extra commands(WIP) requires_medium Added "ErrnoHolder" class, to be instantiated immediately after a function that modifies errno(passed "errno" as the constructor argument). It holds the errno value in a safe place(so future calls to any printf or whatever functions won't change it), and it has a StrError() function, which is essentially a wrapper that will use strerror_r(), or if not available, strerror(), and return a const char * pointer to a buffer internal to the ErrnoHolder class. PC-FX: (August 30, 2009) Fixed stupid ASC value bug in DoPAUSERESUME that broke PC-FX CDDA player PC-FX, PCE: (August 30, 2009) Fixed stupid CD-DA playback volume bug PC-FX: Fixed ADPCM IRQ handling(fixes random lockups in Sparkling Feather during the initial period of FMVs). NES: Changed DMC IRQ emulation to fix "Apple Town Story". NES: Greatly improved FDS sound emulation(thanks to Disch's document, and VirtuaNES source code). The framebuffer that emulation modules render to is now abstracted behind the "MDFN_Surface" class, instead of having naked pointers and various video format global variables out the wazoo. Adding the "overlay" output driver/method necessitated this change, too. Added support for SDL Y'CbCr overlays(USUALLY hardware accelerated). Enabling this video output method can be achieved by setting the "vdriver" setting to "overlay". This is a very experimental video output method, it may not work properly on all operating systems and video cards. Added a special case faster 5x scaler for the "SDL soft" video driver. Added a faster generic integer scaler for the "SDL soft" video driver. PCE: Added the ability to load a custom colormap(palette) by setting "pce.colormap" to the path of the colormap file. The colormap consists of either 512 or 1024 RGB triplets, 8-bits per color component, in the order R,G,B,R,G,B,R,G,B,... . It is recommended that the colormap provide all 1024 entries(the first 512 entries are for normal mode, the second 512 entries are for grayscale/strip-colorburst mode). If it doesn't, Mednafen will calculate the grayscale colors using a formula similar to that used with the real VCE, but with more precision. The colormap may be disabled by setting the "pce.colormap" setting to an empty string, or 0. Command-line examples: mednafen -pce.colormap /path/to/blueblue.cmap /yarr/pirate/booty.pce [Enable] mednafen -pce.colormap 0 /some/where/over/the/rainbow/islands.cue [Disable] Added a (convoluted) compiler bug test to tests.cpp, to guard against buggy gcc versions when compiling with -fno-strict-overflow with optimizations enabled. Added "frameskip" setting to disable internal frameskip for speed testing(because we invariably forget to disable manual frameskip disabling code changes after we're done running tests). Fixed a crashing problem when entering an invalid menu choice("0") in the cheat interface. Thanks to tsenart for reporting the bug. Fixed several instances of mismatches between format strings and passed argument types, which could cause nonsensical information to be printed on big-endian platforms, and perhaps some little-endian platforms as well. Fixed the minimum field-width specifier on the statements that print the loaded game's CRC32 in several places. Added the "format(...)" function attribute to the MDFN_DispMessage(), MDFN_PrintError(), and MDFN_printf() function prototypes to catch format string errors. Changed the INLINE define to always force an inline with gcc(contrast with 0.8.x, where we introduced a new ALWAYS_INLINE in addition to INLINE). ...and added a blip_inline that does the same for Blip_Buffer. ...and changed various "inline" statements to INLINE and blip_inline, where appropriate. TODO: Audit our INLINE statements to make sure we're using them only in speed-critical code and with smallish functions. Looking at Lynx and NES code here especially... NES: Fixed an intialization bug in mapper 193. NGP: Fixed an unaligned memory access bug in the memory r/w handlers, causing crashes on platforms that do not support unaligned memory accesses. Removed erroneous dependency on CD-ROM emulation when WonderSwan emulation is enabled in the configure script. The included Tremor is now compiled with "-fvisibility=hidden" to work around a dynamic symbol collision problem with libsndfile(BUT, -fvisibility is only available in gcc 4.0 and newer). This solution may not be correct... Updated Tremor to the latest SVN version. Upped the minimum playback rate to 22050 Hz, from 8192 Hz. The lower rates aren't tested very often, and the sound resampling code works very poorly at such low rates(not to mention sound quality in general is going to be pretty bad at such low rates anyway). Added sanity checks to the first track number and total track count returned from libcdio, to prevent a crash in Mednafen if the libcdio driver fails and returns nonsensical values. Removed unused file sms/state.h. Fixed a very-old bug that caused joystick unique ID collisions if more than 2 of the same "type" of physical joystick were available. Mednafen is now compiled with -fsigned-char, to prevent any potential problems on systems with an "unsigned" char type as default. Reworked the setting code to use a multimap with a 32-bit key(CRC32 of the setting name) instead of a vector that was iterated over(TODO: Sort settings written to the configuration file). PC-FX: Adjusted the range of the I/O map mirror access range in the memory map, and added emulation of reads from it. PC-FX: Refactored the KING BG drawing code, adding support for BG0 subscreen. Fixes problems with "Angelique Special". (We'll add a simple hack/very limited subscreen code to 0.8.x to fix this problem) PCE, PC-FX: Fixed the emulation of SCSI command 0xDE, mode 0x1. The value returned was too small by 2 seconds. PCE, PC-FX: Fixed the sector count for the last track(which influences the leadout track start position/total sector count) in multi-track CUE/BIN CDROM images. PC-FX: Greatly improved the KING->RAINBOW block transfer logic(previously a hacky buggy mess). Fixes some minor glitches in Zenki. Fixed several problems in file.cpp, including buggy and overly-complicated MDFN_read*le() functions, and a problem with the const-ness of the return value of strrchr() with gcc 4.4. PC-FX: Fixed the exception code set when an FPU divide-by-zero occurs(previously, it was being set to the integer divide-by-zero exception code). PC-FX: Fixed the handler address called when a TRAP instruction is executed. PC-FX: Added boolean setting "pcfx.rainbow.chromaip", default enabled, that controls whether or not the chroma channel of the RAINBOW chip's YUV output(usually used when decoding still full-color or moving images) should be interpolated bilinearly. Turning it off will make the output image appear blockier and slightly less blurry, and closer to what a real PC-FX displays. For a good example of its effect, look at the scrolling red letters in "Kishin Douji Zenki" with it on, and then with it off. GBA: An error loading the custom colormap file is now treated as fatal. Increased the maximum X scale and Y scale sanity check value from 20 to 50. Fixed an off-by-one error in the software SDL graphics rotation code(used for Lynx and WonderSwan). SexyAL: The return values of ALSA functions are now treated as errors only if they're less than 0, rather than non-zero as before. Thanks to R.L. for pointing this out. The default "nethost" setting is now "fobby.net" instead of "mednafen.com". The latter was allowed to expire and lost to domain squatters some time ago. Domain squatters cause desires to commit grievous face-stabbing. However, the netplay server on "fobby.net" is not guaranteed to be up. :p Fixed the rectangle calculation for screen rotation with Lynx and WonderSwan to use X scale and Y scale values appropriately(they were reversed before; also, assuming square pixels on your monitor ;)). Rotation still poses a problem in fullscreen with the default settings, however. Added new entries to "InputDeviceInputInfoStruct" concerning rotated inputs, and removed the Lynx and WonderSwan partially-specific rotation code in drivers/input.cpp WonderSwan: Fixed a bug that made it impossible to push a direction on one D-pad while the opposing direction was being pressed on the other D-pad. fflush(stdout) is now called after printing status messages or errors(may be nominally slower, but should provide more information if something goes kaka on some platforms). TODO: Synchronous error messages and status messages from the game thread, rather than asynchronous. Z80(SMS, NGP, MD): Ported the following changes from the FUSE SVN repository: Unhalt on NMI (thanks, Simon Owen). Changed how firmware is located. Firmware is now searched in several locations, in this order: MEDNAFEN_BASE_PATH/firmware/SYSTEM_SPECIFIC_FIRMWARE_FILENAME_SETTING MEDNAFEN_BASE_PATH/SYSTEM_SPECIFIC_FIRMWARE_FILENAME_SETTING (for backwards compatibility) ...or, if SYSTEM_SPECIFIC_blahblahblah has been set to an absolute path by the user, it will only search there. Also, the firmware path override "path_firmware" setting has been added. Note that setting "path_firmware" to a non-default value will cause Mednafen to only try to open SYSTEM_SPECIFIC_FIRMWARE_FILENAME_SETTING in that path, it won't look anywhere else. TODO: Document all this in the primary documentation. Fixed a race condition that could cause rapid oscillation between fullscreen and windowed when trying to toggle it. ...and fixed a race condition that could cause oscillations when rotating the screen with Lynx and WonderSwan emulation. Changed the name of the mednafen configuration file to "mednafen-09x.cfg", to prevent conflicts with 0.8.x and older(when going back and forth). NES: Renamed the misnamed Famicom input device "Quiz King Buzzers" to the correct name, "Party Tap". Fixed a bug when creating an SDL source surface, whose negative effects(clipping rightmost columns) could be triggered when the "sdl" vdriver setting was used with certain xscale and yscale settings that would cause a 1:1 pixel copy operation. PCE: Altered the Street Fighter 2 autodetection code to be data-agnostic. The SF2 mapper will now be enabled for any ROM images 2MiB and over in size. Fixed string constant-to-(char *) problems in drivers/cheat.cpp PC-FX: Fixed bugs in "Play Audio Track Index" and "Read Subchannel" MMC commands, fixing the totally broken cinematic sequences in "Boundary Gate". There may still be bugs in these commands that don't cause any known problems with games, so I will need to run tests on a real system. PCE: Fixed ST0, ST1, and ST2 instruction timings(they were too low by 1 cycle). (Autoconf/automake cleanups and fixes) NES: Fixed "Time Lord" by altering the PPU startup sequence timing. Netplay (New commands, WIP) PC-FX: Chroma keying is now disabled in the 7.16MHz dot-clock mode(the problem that making this change caused with Nirgends before was apparently a bug in the handling of RAINBOW's non-endless scroll mode, which was fixed during optimizations). PC-FX: Made various optimizations: Altered how chip linebuffer transparencies are expressed. They are now expressed simply by the pixel being 0(along with layer number reorganization, the layer number in the upper bits of the internal pixel prevents a YUV-triplet of "0" erroneously being interpreted as transparent). Reworked the VDC layer mixing code to be simpler, and have separate optimized(if the compiler works properly :b) versions for the 4 different VDC 240-color-mode-enable settings. Rewrote pieces of the RAINBOW Huffman decoder to use LUTs. Rewrote the RAINBOW chroma-key evaluation code on suggestion of Exophase, and added several special-case faster versions for common simple chroma-key settings. PC-FX: Modified the ADPCM play back code to use linear interpolation, with respect for the enable bits in the control register, and to use the OKI/Dialogic ADPCM decoder class originally written for PCE CD ADPCM emulation. NES: Cleaned up the iNES loading code a bit, and added support for WRAM on a few mappers that nominally shouldn't have WRAM, enabled if the battery-backed bit is set in the iNES header. Fixes "Family BASIC", and probably a few bootleg games as well. Added configure script option "--enable-altivec/--disable-altivec (default: enabled)" for compiling on PowerPC architectures where AltiVec is not supported, or causes problems. Fixed a call to putenv(), to pass a static character array initialized to a string constant instead of a string constant directly. SMS: Removed the old unused Z80 emulator code from when SMS Plus was assimilated. NES: Added support for mapper 163(TODO). NES: Added support for mapper 241. PCE, PC-FX: Improved LFO emulation again, fixing vibratto effects in the intro of "Hanii in the Sky". Debugger: Fixed a bug in the trace log code. It would cause the emulator to lock up if the user pressed Enter/Return in the prompt popup without any text in the input field. Fixed a few argument descriptions(invoked with the -help command-line switch) that weren't properly gettextized. TODO-itemize? Added Sega Genesis emulation: Based on cgfm2's Genesis Plus. Uses YM2612 emulator from Gens Uses Stef's C68k emulator(still needs more bug fixes for "The Lost Vikings"). Uses blargg's Sms_Apu. Some code based on/imported from Genesis Plus GX. PCE: Revamped input emulation: Individual devices(exluding multitap) are now in their own classes. Added incomplete emulation of the Tsushin Keyboard. Added setting "pce.input.multitap" to allow for disabling the multitap(enabled by default). Fixed a few deprecated const string to char* conversions in: v810_cpuD.cpp:188: warning: deprecated conversion from string constant to ‘char*’ romdb.cpp:21: warning: deprecated conversion from string constant to ‘char*’ (More driver interface changes) GB: Corrected a lack of address masking in most of the cart RAM emulation code. Fixes a few Chinese GameBoy Color games. GBA: Fixed a buffer overflow in the ROM image loading code. NES: (Re?)-added support for mapper 240(it was erroneously listed in the documentation as being supported...). PC-FX: Several variables related to subchannel reading weren't being saved in save states. Fixed. (This fixes save states made within the BIOS' CD-DA player) Changed default key assignments for d-pads on emulated input devices from WASZ style to WASD. Altered the save state format and file extensions. Save states made from previous versions of Mednafen will obviously be completely incompatible with this version. (Support for older save states may be readded later...) Added setting "osd.state_display_time", to control the length of time, in milliseconds, the save state/movie screen is displayed after selecting a save state or movie. Added a save state function to the base Z80 emulation code(since the Z80 emulation is now used in 3 places). Added Moved the multi-byte single-variable decoding/encoding functions from endian.cpp to endian.h as inline functions. PC-FX: Emulated gamepad button presses weren't being decoded from the driver-side data correctly(causing problems on big-endian platforms). Fixed. SMS: SMS pause and 2-player support were erroneously commented out. Fixed. NES: Fixed CNROM emulation initialization bug. PCE: Added the VDC register select register to the debugger. PCE: Reads from the timer count register the cycle it is set to reload after expiring will now return 0x7F. Fixes "Battle Royale". PCE: Rewrote arcade card emulation based on information from David Shadoff, and a tip from Exophase. The ADPCM sound effects in Garou Densetsu II work correctly now. PCE: ADPCM: Combined the two dividers into one. Rewrote the ADPCM nybble decoder. Fixed an off-by-one-nybble playback bug. Altered how the read and write addresses are set. Fixes the Super CD version of "Tengai Makyou Ziria", and "CD Mahjong Bishoujo Chuushinha". PCE, PC-FX: Improved PSG LFO emulation. PC-FX: Disassembly of the "nop" instruction will no longer show the virtually meaningless operand. PC-FX: Fixed alignment and prettified the disassembly of LDSR and STSR instructions. Added boolean setting "debugger.autostepmode" that, when set to 1, will cause Mednafen to automatically start the debugger in step mode after a game is loaded(only if Mednafen has a debugger for the emulated system, of course). The most recently-saved save state slot will now be colored differently when selecting a save state slot. Increased the brightness of non-empty save state slots. Empty save state slots are now black instead of being partially transparent. PCE: Fixed emulation of a few VDC vertical timing registers when in SuperGrafx mode(this change shouldn't affect the released commercial SuperGrafx games at all, but it will fix a few graphical emulation problems when trying to play normal PCE games in SuperGrafx mode). PCE: ADPCM software reset was erroneously also resetting the playback frequency. Fixed. (Fixes ADPCM voices in Gulliver Boy) Added magic testing functions to the MDFNGI structure. Added known file extensions to the MDFNGI structure. PC-FX: KING BG and CG offset registers are now emulated as 8-bit instead of 9-bit. This shouldn't affect emulation at all(these registers were write-only to the game code, and the background rendering code already effectively masked these to 8-bits when rendering), but it will fix potential confusion when using the debugger's register viewer. Also, did the same to the soundbox ADPCMControl register(limiting it to 6-bits, in this case). PC-FX: Improved the logging of the ROM font system call in the debugger, to also include the callee address and the size of the glyph being requested. PCE: Fixed disassembly of the JMP $(AAAA, X) instruction. GBA: Fixed a startup crashing bug on big-endian platforms. Removed unnecessary indirection of sound buffer variables in EmulateSpecStruct. Changed many instances of *printf() and *scanf() to their trio equivalents. Changed instances of fprintf() in mempatcher.cpp to trio_fprintf() to work around major issues with pre-C99 standard C libraries. WonderSwan: Added rudimentary support for playing back WSR(ripped WonderSwan music) files. Cleaned global header files. NES: Replaced the old FIR+Blip_Buffer resampler with an experimental new, all-in-one, polyphase resampler, written with some code and help from blargg. Two new settings were added to control its characteristics: nes.soundq - An arbitrary sound quality setting, default of 0. Higher values will increase sound quality(decreasing passband width and increasing stopband attenuation), while lower values will decrease sound quality. The maximum is 3, and the minimum is -3. Going below sound quality -1 is not recommended nes.sound_rate_error - The error tolerance of the polyphase resampler's output rate versus the real output rate. Lower values will cause the resampler's output rate to come closer to the real output rate, at the cost of more memory usage(and possibly cache thrashing), while higher values will do the opposite. The default is 0.00005. The range is 0.0000001(most accurate) to 0.01(least accurate, will likely cause sound to sound out of tune). Changing this setting is not recommended for normal usage, though it may make sense to set it to its minimum value if you are recording Mednafen's sound output. The setting formula. WARNING: THIS CHANGE BREAKS BACKWARDS COMPATIBILITY FOR THIS SETTING IN EXISTING CONFIGURATION FILES AND ANY FRONTENDS OR SCRIPTS. GBA: Cleaned up a few benign shadowed-variables. GBA: DMA registers were being saved as 32-bit arrays instead of 16-bit arrays in save states, potentially causing memory corruption, and broken save states on big endian platforms. Fixed. Abused C++ function overloading to force the SFARRAY16, SFARRAY32, etc. macros in state.h to force a compiler error if they are passed arrays of an unknown/invalid type. Updated GBA, Lynx, NES... to not save invalid types(usually with a typecast to the appropriate type, for union'd types). Added support in state.cpp and state.h for saving/loading bool types properly. Removed the hackish "bool8" type. Changed instances of manual SFORMAT structure creation in a lot of old system emulation code to use the SF* macros instead. GB, GBA: Upgraded Gb_Apu and replaced Gba_Apu(a Mednafen-specific hacked-up ancient version of Gb_Apu) to a newer version provided by blargg, that includes builtin support for GBA's legacy sound channels. This change breaks save states for GB and GBA created in previous versions of Mednafen(though this shouldn't happen again, at least not for updates to the sound code). Added a "fullname" member to the MDFNGI struct. PCE CD, PC-FX: Fixed display of CDROM data tracks in the debugger's memory viewer(it was broken sometime between 0.8.2 and 0.8.4). GBA: The Load() function was returning a largeish integer, instead of 1, after successfully loading a ROM image. Fixed. Removed the "fb" variable from the MDFNGI struct. Renamed "width" and "height" in the MDFNGI struct to "nominal_width" and "nominal_height", fixed NES and PCE emulation code to set nominal_height correctly, and modified save state code to use these variables for generating and displaying save state previews(TODO: rewrite save state preview resize code to resize vertically when DisplayRect.h != nominal_height, though this should never occur at the moment, it may if we add support for systems with selectable interlaced video modes). Removed the save state preview width variable from the MDFNGI struct. Added an fb_height member to the MDFNGI struct. Fixed header include order in the JACK audio driver. GB: Corrected loading/saving of MBC3 time values in save files(this will cause incompatibility with MBC3 RTC save games created in previous versions of Mednafen, unless they were created running on a 64-bit little-endian system). GB: The setting "filesys.disablesavegz" will now affect GameBoy save files. MDFN_DumpToFile() now checks for errors in fclose(). Added preliminary movie(audio+video) recording support to a custom format. A secondary 0.8.6: PCE: Removed a statement, that was used for debugging, that broke PC Engine multiplayer support in 0.8.5. (I'm not sure how it got there in the first place...). 0.8.5: Fixed a crashing bug when loading an uncompressed file and using the automatic IPS-patching feature when mmap() is available. PCE, PC-FX: All SCSI CDROM commands are now logged in the debugger's log viewer(when logging is enabled, of course). Added group support to the debugger's log viewer. PC-FX: Renamed the type of BIOS ROM font calls in the debugger's log viewer from "BIOS" to "ROMFONT". PC-FX: BIOS filesystem syscall(for backup memory access) calls are now logged in the debugger's log viewer. PC-FX: Added internal backup memory and external backup memory address spaces to the debugger's memory editor. PC-FX: In the 263-line mode, line 262 is now reported as being during blanking time(as on a real PC-FX). Fixes the annoying transparency layer flickering and other weird graphical glitches in Der Langrisser FX. Added setting "filesys.disablesavegz", to disable gzip compression when saving save states and backup memory. (In the case of backup memory, disabling gzip compression isn't supported for GB yet) 0.8.4: PC-FX: Some RAINBOW registers weren't being reset on emulated system reset. Fixed. PC-FX: Added dummy support for the external bus reset register. PC-FX: Altered the way garbage data is handled by RAINBOW to fix a graphics bug in the Tengai Makyu options screen. PC-FX: Reworked a large part of the KING SCSI emulation code, and parts of the CDROM device emulation code. Previously non-working-at-all games "Battle Heat" and "Tengai Makyu" work now. The non-anime game mode in "Tyoushin Heiki Zeroigar" works now. "Der Langrisser FX" no longer locks up if you skip the intro movie. "Yuna FX" no longer locks up in one of the intro movies. These changes will cause some save state incompatibilities with previous versions of Mednafen. (Some of the SCSI changes also affect the PCE CDROM emulation, which may also result in save-state incompatibility issues, particularly if the save state occurred during a CDROM data transfer operation.) PC-FX: Added setting "pcfx.cdspeed". If you want to change this, read the documentation first! Cleaned up the video deinitialization code slightly, and fixed a few bugs in the OpenGL deinitialization code. PC-FX: Reads from the dummy KING register 0x07 will now return 0xFF, per the devkit docs. PC-FX: Reads from KING register 0x0B will now return the "DMA end" bit in D0 set correctly(at least, according to the developer docs). Fixed a compilation error after running configure with --disable-nes. PC-FX: Reads from I/O port 0xFC0 will *now* return the current timer counter value. The switch statement mask value was wrong... Removed the warning in the documentation about error correction of raw data track rips, as Mednafen will now perform simple correction using the EDC and L-EC data(since 0.8.4-rc3). This could conceivably cause problems with naive hacks/translations/patches that neglect to update the EDC and L-EC data, so it can be disabled by setting the setting "cdrom.lec_eval" to 0. L-EC correction is based off code from dvdisaster(http://dvdisaster.net/). PCE, PC-FX: Removed some debug printf()'s that were left in 0.8.4-rc3 by mistake. 0.8.4-rc3: PCE: Added preliminary(it works, but the code needs to be cleaned) ADPCM support for HES rips. PCE: Interrupts will be enabled with a CLI after a HES' init routine is called, to fix rips that neglect to do it themselves. PCE: Added support for HES rips that try to write data where it really shouldn't be written(some CD-ROM game rips do this), though a warning will be printed the first time this occurs after loading. PCE: Added sanity checks to the HES loader to prevent crashes if invalid data is present. PCE: Reads from the I/O port will now return D7 as clear when emulating a PCE CD game. PCE: ADPCM RAM is now reset(to 0) on emulated PCE reset. PCE: Sprites trying to pull tile data from $8000-FFFF of VRAM will now be invisible(probably not correct, but trying to emulate indeterminate effects is too difficult :b). Fixes a minor sprite garbage issue in Camp California. PCE, PC-FX: Fixed VRAM DMA source/dest increment/decrement bits(the source and dest were flipped). Fixes a problem with Fushigi no Yume no Alice. Moved some code in the source root directory to appropriate subdirectories. Added setting size used to draw the disassembly text. Note that there may be overlap with other parts of the debugger at font sizes larger than the default. Refactored a few address space and register group debugger support functions out of individual system code. Fixed various low-impact memory leaks. The version of Mednafen last run is now stored in the configuration file as a comment(this will be necessary for changes in 0.8.5 or later that will involve proper escaping/unescaping and quoting of strings, to prevent problems with extra whitespace added by manually editing the configuration file). Fixed state rewinding on big-endian machines, and removed some unnecessary operations from the state rewinding code path. Mednafen will now refuse to try to load ROM images larger than 64MiB, as a sanity check. mmap() and madvise() will now be used to load ROM images, assuming they're available(UN*X only, generally). Errors during automatic IPS patching are now fatal. Sped up loading gzip'ed ROM images. Removed a global variable from the NES emulation code that had invaded state.cpp. Though, this makes the error message when trying to use save states with authentic Game Genie emulation very unhelpful... GBA: Added support for loading a real GBA BIOS ROM image, using the setting "gba.bios". GBA: Added the ability to specify the backup memory type for games by creating a file with the same name as the ROM image, with the extension replaced with "type", in the "sav" directory under the Mednafen base directory. Example: SexyPlumbers.gba -> SexyPlumbers.type One or more of the following strings(on separate lines) may appear in the file: sram flash eeprom sensor Additionally, the flash size can be specified by specifying the size(real size, or divided by 1024) after the type, like "flash 128" or "flash 131072". PCE: Improved noise LFSR and volume emulation, thanks to cgfm2 for the detailed information. 0.8.4-rc2: Added meaningful descriptions to the command.* settings. PC-FX: Added an experimental feature to use mmap() to create a virtual 32-bit address space to speed up V810 instruction reads. Enable by setting "pcfx.use_mmap" to 1. Of course, it won't work on 32-bit CPUs! Please read the documentation, there are caveats! PC-FX: Removed some redundant logic in the KING BG 8x1 drawing functions. PC-FX: FX VCE and VDC port access are now emulated as 16-bit, as in the real PC-FX, instead of 8-bit. PC-FX: Altered the debugger's memory peek and disassembly functions to not read the emulated memory map in the 0x80000000-0xEFFFFFFF region. (Reading those addresses can cause side effects, and this is a temporary workaround) PC-FX: Changed the V810 memory read handlers to read RAM faster than BIOS ROM. This will probably increase host CPU usage while in the BIOS loading screen, but decrease it in the actual game. PC-FX: Altered the V810 opcode fetch logic to do 16-bit reads instead of 32-bit, fixing potential crash issues when Mednafen is run on CPUs that don't support unaligned memory accesses. PC-FX: Factored-out a few address masks in the memory read and write handlers. PC-FX: Replaced most of the V810 signed-variable bit-size converting code that uses conditional branches to code that uses 2 shifts, taking advantage of modern 2's-complement CPU's arithmetic right-shift capabilities. It reduces generated machine code size slightly, and should provide a slight speed boost as well. PC-FX: Optimized V810 address mode decoding by removing an unnecessary conditional jump. Added an important warning to the documentation regarding Mednafen's ripped CD image support: Mednafen does *not* correct bit errors in the user data of "raw" data track rips. It is strongly recommended to use "cooked" data track rips(2048 bytes/sector for mode 1, not counting any subchannel data) with Mednafen. PC-FX: Improved exception handling, and added untested emulation of the TRAP instruction. Debugger: Rewrote the memory load and dump functions to be faster, and also to fix a bug in the load function that would trash memory if the user tried to load more data than the specified file contained. Debugger: Using the Goto function will no longer cause memory edit mode to be exited. Debugger: Fixed a bug that occurred when entering a prompt(goto, change charset, etc.) while in editing mode, that caused keyboard focus to be misdirected. SexyAL: The ALSA driver will try to set smaller period sizes when lower playback rates are used. GBA: Changed the heuristics used to detect SRAM/Flash usage, though they're still not perfect...if a game tries to use flash memory improperly, it could be detected as using SRAM instead, or silently corrupt parts of flash memory... GB: Fixed sound register initialization on reset, fixes missing sound in A Boy and His Blob GB: Slightly increased the contrast of GBC colors. GB: Reworked blitting of mono GB colors for future features. GB: Removed a redeclaration of a variable in the same scope in a function in gfx.cpp. Debugger: Fixed PCE VRAM breakpoints to work with block memory transfer instructions. Debugger: Fixed parsing of single-address breakpoints after range breakpoints. Mednafen will now print out SDL version information when it starts. (The Win32 build will now be distributed with SDL 1.2.12) Debugger: Fixed -/+ opacity adjustment to not be done when entering text(such as in a dialog). Debugger: Fixed null termination of the ASCII string buffer displayed in the memory watch section. PCE, PC-FX: Fixed the frequency of the highest-frequency noise generation register setting, hopefully! PCE, PC-FX: Changed the LFSR to 16-bit, and to use a maximized tap configuration, to make the noise sound a bit closer to a real PC Engine's(at least, in my opinion! It still sounds slightly more bassy than a real PC Engine, but that might be due to filters on the PC Engine's sound output...). Non-power-of-2-sized-textures will not be used when a pixel shader is selected and enabled, to prevent a severe graphical corruption regression introduced in 0.8.3-beta. I'm not sure if it's a problem with Mednafen's pixel shaders or the graphics card... SMS: Fixed soft reset. SexyAL: Removed smallc.c, and modified the OSS driver to use snprintf() instead of the single function smallc.c provided. SexyAL: "sexyal.h" is now included before all other header files. SexyAL: Revamped parts of the ALSA driver to fix reported lockup issues under certain conditions. 0.8.4-rc1: Added preliminary support for inputting text directly into the selected address space in the debugger's memory editor. Moved the temporal video blurring code in mednafen.cpp to vblur.cpp Added settings "filesys.snap_samedir", "filesys.sav_samedir", "filesys.state_samedir", and "filesys.movie_samedir", default 0, that when set to 1, will read/write the respective files from/to the same directory the game was loaded from. If you want to use these, PLEASE read the documentation first, there are caveats! PCE CD, PC-FX: Added support for MS WAV file offsets and lengths in TOC files. PCE CD, PC-FX: Fixed a bug that caused CD-DA playback to be off by one sector(the first sector specified was being skipped). Began work to allow settings to be temporarily overridden during netplay and movie playback. PCE, PC-FX: Added settings "pce.disable_softreset" and "pcfx.disable_softreset", default 0, which when set to 1 will disable simultaneous pressing of RUN and SEL. The current implementation kind of abuses the driver-side code that disallows opposing diagonal buttons being pressed at the same time, so if we ever change that (undocumented) feature to go with the last-pressed direction rather than clearing both, the description of these settings in the documentation will need to be updated. PCE CD, PC-FX: Read operations and CD-DA playback will now be stopped when the RST signal is asserted(fixes soft reset issues on PCE CD games). 0.8.3-beta: Fixed an OpenGL function typedef in drivers/opengl.h. PC-FX: Writes and reads to the KING and FXVCE chips "mapped" in parts of 0xA0000000 through 0xBFFFFFFF will now go through the respective data port write handlers, instead of directly to KRAM or palette RAM. If non-power-of-2-sized OpenGL textures are not available, and bilinear interpolation or a pixel shader is enabled, and the emulated system resolution changes(such as on the PCE), two lines of black pixels will be written to the texture buffer to prevent the display of multi-colored garbage at borders, though the right+bottom borders will still be slightly darker than they should be... PC-FX: Added support for VDC data port writes via writes to 0xB4000000-0xB7FFFFFF and 0xB8000000-0xBBFFFFFF in the V810's memory map. Fixes major graphical problems in "Super Power League FX". Updated the srwcompressor description in mednafen.cfg. PC-FX: KING BG1-3 scroll registers are now emulated as 10-bit instead of 11-bit(BG0's are still 11-bit), and BG1-3 virtual screen size is now limited to 512x512(BG0 is still 1024x1024), per the official developer documents. Non-power-of-2-sized OpenGL textures will now be used if the "GL_ARB_texture_non_power_of_two" extension is detected. Fixed a bug that sometimes would cause black screens when using the "sdl"(non-default) video driver(SDL surface per-pixel alpha blending was enabled when it shouldn't have been). PCE: Fixed a line clearing bug when BG is disabled that was causing some minor graphical garbage on some games that use multiple horizontal resolutions per frame. Changed some nonsensical #ifdef statements that were intended to always evaluate as false with "#if 0". Renamed SYSTEM_CLOCK to System_Clock in scsicd.cpp to work around a potential macro conflict on OSX. PC-FX: Added partial support for NEC's "scan" SCSI command, used in the BIOS' CD-DA player screen. PC-FX, PCE CD: Revamped parts of the subchannel emulation code. The PC-FX BIOS CD player screen's time display works now. Also, an important note regarding cdrdao "TOC" files and "RW_RAW" subchannel data was added to the documentation. PC-FX: Fixed a bug in the KING BG0 scrolling+rotation code for 16-color and 4-color backgrounds with BATs that was causing graphical corruption in the PC-FX BIOS CD player screen. Fixed a compilation error when --disable-debugger was passed to the configure script. 0.8.2-beta: Added blargg's experimental blz compressor, for use with state rewinding(change the setting "srwcompressor" to use it). (This was added a while back, after 0.8.1, but I forgot to document it) SMS,GG: Added missing default key configurations. PC-FX: Added untested emulation of scaling+rotation in 4-color KING BG mode. PC-FX: Added emulation of scaling+rotation in 16-color KING BG mode. Fixes a problem with the background in the last stage of Zenki. PCE: Added VRAM size constants to the beginning of vdc.cpp, and modified the code to use them, to allow a certain crazy person to compile a custom version of Mednafen which emulates extra VDC VRAM. PCE: Removed 0xEB as SBC immediate in the disassembler(it was left over from the 6502 disassembler). Changed setting type of setting "vdriver" to a string, with possible values "opengl" and "sdl"(and "0" and "1" for backwards compatibility, of course). PCE: Set the default char set in the debugger's memory viewer to shift_jis. PCE: Fixed a missing #include 2007-6-17: PC-FX: Improved VCE<->VDC<->KING scanline timing to fix a lockup issue in Anime Freak Vol 4(polling the FX VCE raster counter register vs VDC VBlank IRQs). Unforunately, this change has caused some 1-line graphical glitches in games that do "raster effects". This may be solved once/if V810 emulation has accurate cycle counts, which would require emulating instruction cache and prefetch logic. -_-; Fixed branch traces display in the debugger, it was broken to only display half of them twice sometime since 0.8.1. PC-FX: Optimized RAINBOW JPEG-like decoding by using a static implementation of bit fetching functions(instead of a class). PC-FX: Added untested emulation of the CAXI V810 instruction. PC-FX: The RAINBOW transfer block count register is now emulated as being 5-bits instead of 16-bits, fixes screen issues(blue blue!) after defeating the snake monster in Zenki. PC-FX: If a KING BG is set to BAT+CG mode, but is missing a BAT fetch microprogram, it will now be drawn in CG mode(previously, the BAT data was simply being forced to 0, which was wrong). It's confirmed on a real system. Fixes missing graphics in "Tonari Princess no Rolfee". PC-FX: Fixed transparency testing with 16M color KING backgrounds(only 1 Y component of every 2 pixels was being checked, now both are checked). PC-FX: Implemented back cellophane support. Fixes fadeouts in "Lunatic Dawn", fadeins in "Team Innocent", and screen darkening issues during dialogue in "Last Imperial Prince"(and also exposes a bug that LIP probably has on a real system too, wherein CCR isn't reset to black after the dialogue is over, leaving the upper and lower parts of the screen outside the play area slightly dark greenish). The hindmost color when mixing the layers is now set to palette entry #0, except when all layers are disabled(set to black), or front cellophane(set to black) or back cellophane(set to value in CCR) is enabled. PC-FX: Added emulation of the expansion backup RAM. While not particularly necessary since Mednafen already emulated backup memory separately for each game, it does give a few extra save slots to some games(such as Miraculum ^_^). Added opacity control(-/+) to the debugger. Added an always-on zero page view to the CPU debugger for NES and PC Engine. Reduced the size of the game thread event queue to a somewhat saner size, and added extra buffering so that its mutex is only locked for a minimal amount of time to eliminate the chances of deadlock with this mutex. GBA: Fixed a bug that caused only half of the legacy wave sound channel's sample data to be saved. GB: Updated to Gb_Snd_Emu 0.1.5, fixes hanging note problems on some games, and cleaned up the sound save state code. 2007-5-30: Added preliminary Sega Master System and Game Gear emulation based off of SMS Plus. Factored the remaining state rewinding code out of the individual systems' code. Fixed a minor visual bug when using state rewinding(also with save states, but it's not really visible) with the NTSC blitter. Simplified how state rewind requests are passed to the emulation code, and fixed a small bug when using state rewinding with frame advance(now, a rewind will only occur if the state rewind button is held down while the frame advance button is pushed). Changed a local variable name in selblur.cpp to fix compilation on OS/X(and maybe PPC in general?), thanks to Matt Beaumont for pointing out the conflict with a definition in altivec.h. PCE: Fixed cycle counts for BRA and BSR(they were 1 too high). PC-FX: Reads from I/O port 0xFC0 now return the current timer counter value. Parameters to MDFNI_Emulate() and the internal system Emulate() functions are now passed through a structure, to allow for easier future expansion. PCE, PC-FX: Fixed audio track reading from physical CDs on big-endian platforms. NES: Fixed a bug that caused an emulator crash if Game Genie-style cheats were enabled at the same time as authentic Game Genie emulation was enabled. Added setting "srwframes", which controls the number of save states to keep when state rewinding is enabled. Debugger: Fixed a bug that caused a crash if a PC breakpoint was triggered while the debugger screen was disabled. Added an experimental logging feature to the debugger, currently only used by the PC-FX emulation code, to log CD-ROM read commands and calls to the PC-FX BIOS' glyph bitmap address function, both of which should be quite helpful in translation work... PCE, PC-FX: Moved the mouse sensitivity adjustments to the driver side to fix mouse emulation with network play and movies when using non-default pce.mouse_sensitivity/pcfx.mouse_sensitivity settings. Added a few more entries to the in-emulator help screen. PC-FX: Increased the keyport latch delay, and added emulation of the PC-FX mouse. PC-FX: The keyport data ready flag is now reset only on low reads from the keyport data registers. PCE: Fixed disassembly of the BSR instruction. NGP: Fixed Z80 emulation cycle counts(they were far too low), and fixed emulation of the EI delay. GB: Reworked various things, including Z80 interrupt and HALT emulation. GameBoy emulation will be a bit more CPU intensive now, and save states from older versions won't work with this version(sorry!). These changes could easily break some games, but...at least "A Boy and His Blob" works now! GBA: Changed the file type detection code to reduce the chance of false positives. PCE: Files with the extension "sgx" will now be treated as raw SuperGrafx ROM image files(AKA SuperGrafx emulation will be enabled). NES: Refactored the file type detection code, so that emulation data structures and memory won't be initialized unless it's a recognized file type. NES: NSF(but not NSFE) game/album name, artist, and copyright strings are now trimmed of leading and trailing whitespace. Added MDFN_trim(), MDFN_rtrim(), and MDFN_ltrim() functions. WonderSwan: Fixed a buffer overflow bug in the sprite drawing code. GBA: Flash and SRAM save games are now stored gzip-compressed. PCE: Fixed raw bytes display of relative branch instructions in the disassembler. PC-FX: Added CD-ROM data tracks to the memory debugger/viewer, read-only, however. The selected character set in the memory debugger/viewer will now be saved for that emulated system when exiting. Fixed text search in the memory debugger/viewer(iconv() was being called before the variables passed to it were initialized, oopsie). Simplified the scrolling code in the memory debugger/viewer, the line containing the cursor will now always be centered vertically on the screen. PCE: Fixed an ambiguous if() statement in huc.cpp in the BRAM emulation code. GB: Fixed a semi-ambiguous boolean math statement in the cpu emulation code. Fixed an ambiguous else statement in the throttling code in drivers/main.cpp NGP: Neo Geo Pocket emulation code is now compiled with -fno-strict-aliasing to work around issues in the TLCS-900h code. GBA: Removed unused ELF code. Fixed some implicit conversions of const char * to char *. (stupid putenv() prototype grumble mumble) and removed inclusions of such header files in source code files that include mednafen.h(most do, and should). This change was brought about by gcc 4.3...it may not be the best way in regards to compile-performance wise, but it is more convenient and safer than #include'ing the system headers manually(and forgetting to >_>). Modified instances of "Makefile.am" to stop including the top directory in the include search path, and removed the symlink of config.h to include/config.h, and fixed the references to "config.h" in intl/Makefile.in. PCE: Made hes.cpp use MDFN_de32lsb() and MDFN_de16lsb() from endian.cpp. PCE: Changed some instances of free() to MDFN_free(). GBA: Un-inlined the CPUWriteMemory() function. GBA: Rewrote parts of the save-game(flash, eeprom, sram) code to make more sense! EEPROM data is now stored with a file extension "eep". 0.8.1: PC-FX: Added more registers/SetRegister() support to the debugger. Trying to edit a register in a debugger register groups with a NULL SetRegister method will no longer crash Mednafen. NES: Fixed a misnamed save state variable in the FME-7 code. Mednafen will now be compiled with "-fno-strict-overflow" if the C compiler supports that option, for the upcoming gcc 4.2 release, as I'm not sure this optimization is safe with Mednafen's code(it may be, but better safe than somewhat sorry!). PCE CD, PC-FX: Added partial support for cdrdao "TOC" files, including support for rips with subchannel data, but it must be in the "RW_RAW" format. Ripped CD+G CDs can be played back this way in the PCE CD and PC-FX BIOS CD players. 0.8.0-beta: PC-FX: Improved VDC chain/256-color mode emulation. PC-FX: Altered FXVCE->VDC vsync emulation. PC-FX: Revamped RAINBOW code, adding support for JPEG-like encoded content, thanks to David Michel's help. WonderSwan: Fixed a bug in the debugger(HAH) regarding the display of HBTimerPeriod and VBTimerPeriod(they were erroneously listed as 1-byte variables, when they should've been listed as 2-byte variables, which caused the values to wrap around to the other side of the screen if they were >= 0x100). GBA: Structurized free-floating various variables...there shouldn't be any regressions, aside from save state incompatibility, unless typos were made(if so, please tell me!). PC-FX: Added support for scrolling/rotation in 64K color mode. PC-FX: The KING data structure(including KRAM) is now dynamically allocated. GB, GBA: The memory for the color map/filter is now dynamically allocated. PC-FX: Changed the size of the emulated X tile coordinate register when drawing KING BG, affecting in-range calculation when in non-endless scroll mode. Fixes missing eyes and mouths and other craziness in cutscenes in Chip Chan Kick. PC-FX: Fixed playback of the last 4 samples of an ADPCM playback sequence, fixes crazy volume problems in "Team Innocent". PCE: VDC chip data structures(including emulated VRAM) are now dynamically allocated. NES: FDS and several mappers' larger data structures are now dynamically allocated. NES: NSF write handler info structure is now dynamically allocated, which should reduce memory usage by 1 or 2 MiB(depending on the platform) on other games/files. PCE: CDROM-related memory is now dynamically allocated, which should reduce Mednafen's memory usage for non PCE-CD games by at least 2.25MiB. PCE: Added untested support for the Tsushin Booster's expansion RAM Replaced the hard-coded file extension tests when loading from a ZIP archive in MDFN_fopen() with code that tests extensions passed as a double-NULL-terminated(each entry is single-NULL-terminated) string to MDFN_fopen(). Added QuickLZ to the codebase, and added the setting "srwcompressor" to specify which compressor to use for staterewinding, "minilzo" or "quicklz", with "minilzo" as the default. QuickLZ can be considerably faster at compression than MiniLZO, though QuickLZ is written with x86 and x86_64 CPUs in mind, and performance will likely suffer on other platforms, and its compression ratio isn't as good as MiniLZO(which itself isn't that great!). PCE: Added the settings "pce.adpcmvolume", "pce.cddavolume", and "pce.cdpsgvolume", for people who like music more than sound effects, or vice-versa for some weirdos! ;) PCE: Burst mode will now be tested for when the VDC would enter the active display area. PCE: Altered the relative volume of CDDA vs PSG vs ADPCM with CDROM games, based on tests done on a real system. PCE: ADPCM no longer uses saturated addition for the current output value, instead just wrapping(like apparently occurs on a real system). PCE: Scrapped the old SCSI CDROM code, it now uses code that was previously PC-FX only(and was abstracted to be used for both). The Game Express CDROM card image now works, including Game Express CD games(at least Hi-Leg Fantasy ;)). John Madden Duo CD Football works. Steam Hearts plays stage music now. 3x3 Eyes doesn't seem to have desynchronized audio anymore during cutscenes... Updated libmpcdec to 1.2.5(I think it was 1.2.2 previously...). PC-FX: Added VRAM and FXVCE palette RAM to the debugger's memory editor. PCE,PC-FX: Fixed CUE+BIN pregap handling, it was totally borked before. PC-FX: Improved byte writes to KING I/O ports, fixes graphics problems in First Kiss Monogatari and Pia Carrot He Youkoso PC-FX: Changed how reads/writes from/to KING registers 0x09 and 0x0A are handled. PC-FX: All writes to 0x80000000-0x80000FFF are now translated to I/O port writes. PC-FX: Reads from "unmapped" areas in the V810's memory address space will now return 0xFF(or 0xFFFF, or 0xFFFFFFFF). This fixes a lockup that could occur in Power Dolls FX...the game seems to be trying to use 4MiB of RAM when there's only 2MiB of RAM in a PC-FX! Also, while this is probably the correct value to return for unmapped areas < 16MiB, it's not correct for at least some higher addresses... more tests are called for, but we can't just dump the entire 4GiB address space...can we? PC-FX: D4 of reads from KING register 0x05 will now be set if a SCSI CD interrupt is pending. PC-FX: Fixed READ TOC SCSI command emulation. The starting track field is no longer treated as BCD. Silly me... Fixes "Power Dolls FX" ADPCM sounds, and probably other games that have data tracks numbered 10 or above... PC-FX: D0 of reads from the KING DMA status registers is now the only bit returned. PC-FX: D0 of writes to the KING SCSI DMA length register is now ignored. PC-FX: Started work on initial support for for KING's 1M KRAM chip mode...I need to run tests! PC-FX: Reads from KING register/port 0x05 will now return the ATN and ACK SCSI status bits. PC-FX: Reads from KING register/port 0x04 will now return the SCSI status bits. PC-FX: Changed reads to KING registers/ports 0x01, 0x02, and 0x03 to return the last values written to those registers, rather than setting the bits returned corresponding to the current SCSI status bits. PC-FX: Improved keyport emulation, fixes Can Can Bunny Extra DX title-screen "lockup". PC-FX: Added support for negative KRAM increment values on read/write(king register 0xE). PC-FX: Fixed the SCSI bits returned on port $600 reads: D17 now returns SEL status, and D23 now returns RST status(instead of ATN). PCE: Block memory transfer instructions are now emulated at 6 cycles per byte transfered(+extra if VDC is accessed) instead of 5, to match tests done by malducci. This does break Wonder Momo, unfortunately... Moved the Q-subchannel simulation code to the general CD-ROM reading interfaces, and made PC Engine CD and PC-FX CD emulation both use it. Also, the code will now set the index data field to index 0 for pregap areas, but...this is only possible when using disc images, due to libcdio(or CD-ROM in general) limitations. :( Ideally, on a physical disc, we would read the Q subchannel data directly, but...I'm not sure that all drives can read and return this data, and using libcdio's direct MMC functions results in much much more latency(probably because it bypasses the OS's caching of CDROM data), which would require an extra CDROM reader thread, which does its own caching and prefetch, in Mednafen. Maybe later! PC-FX: Fixed cmpf.s emulation, fixes lockups in "Pachio Kun FX". PC-FX: Added a tidy structure to contain SCSI command numbers, CDB lengths, and function pointers. PC-FX: Added support for SCSI command 0x08(READ6), which "Mahjong Gokuu Tenjiku" uses. PC-FX: Removed most of the 32-bit I/O and memory read/write functions, which are now handled by calling the 16-bit functions twice. PC-FX: Modified the KING background rendering code to only draw to one buffer, instead of multiple buffers that are later mixed, to improve speed slightly. PC-FX: The raster counter returned on reads from FX-VCE now returns correct(I hope...at least according to a simple test I did on a real PC-FX!) values in vblank. PC-FX: SCDI CD interrupts on end of CD-DA track playback are now emulated. PC-FX: SCSI CD "Test unit ready" command now expects to receive 6 data bytes total(1+5) instead of 1. I'm not sure if this is correct with the PC-FX, but it matches the SCSI specs, so I'll keep it this way until shown otherwise. PC-FX: A17 of the effective KING BG CG and BAT addresses are now fixed to the CG and BAT offset settings, respectively, during rendering. PC-FX: Added support for non-endless-scroll in BG0 rotation mode. Fixes the title screen flipping effect for Last Imperial Prince. PC-FX: When a VDC layer has the same VCE priority as a KING BG layer, the VDC layer will now be shown on top. I don't know if this is correct... but it does fix a problem with disappearing sprites when leaving the airship in Miraculum. PC-FX: Added KING BG0 scaling/rotation support, but only for 8bpp backgrounds(direct or indirect) in endless scroll mode for now... Fixes graphics in Miraculum(yay!) and Konpeki no Kantai. PC-FX: Fixed direct CG mode width mask, corrects graphics bugs in "Boundary Gate" and others. PC-FX: Added partial microprogram emulation, fixes junk graphics in Megami Paradise II. PC-FX: Combined the different KING background non-endless/endless and direct/indirect rendering codepaths. This will make it a bit slower, but much more maintainable and...changeable! SexyAL: Added support for sound cards that don't support interleaved stereo samples...probably. Changed the font glyph cache to use an array of pointers instead of 2-dimensional array. This reduces resident memory usage considerably, even on systems with 64-bit pointers. Readded the old 6x13 and 12x13 fonts for future usage in the debugger. Fixed the documentation to list the controls for configuring virtual devices as ALT+SHIFT+1, ALT+SHIFT+2, etc. instead of ALT+1. Oops. PC-FX: Made fairly invasive minor optimizations/refactoring to the cellophane code... I *have* tested it, and hopefully it won't break anything that worked before! PC-FX: Fixed a clipping bug in KING BG non-endless scrolling mode in regards to X scroll wrapping. Fixes the disappearing boss problem in Stage 2 of Tyoushin Heiki Zeroigar! PCE: The soft reset function(F10 key by default) no longer soft-resets the PCE, as such a button doesn't exist on a real unit, and could cause problems with some games, so it causes a hard reset(the same as the F11 key) now. PCE: Added PSG registers to the debugger. Enclosed many strings in _() or gettext_noop() for translation purposes. Altered po/Makefile.in.in to pass "-N" to msgmerge, to disable fuzzy string matching. Fuzzy strings are braindead I say! Reworked MDFN_malloc(), it now takes a purpose, and on error, will print out the number of bytes attempted to be allocated, the purpose of the allocation, and the file and line number in which the allocation was attempted(through macro magic!). PC-FX: Changed the 7.16MHz dot-clock emulation mode to use an internal layer 1024-pixels wide(the least-common multiple of the 2 different screen resolutions that are mixed by the video chip), rather than having 2 different layers that are merged by the video code(which causes problems on edges). This new method is much slower, unfortunately... The overlay code that supported this in the driver code and the interfaces have also been removed, as it is not used, and will not be used. ADDITIONALLY, a setting "pcfx.high_dotclock_width" has been added. The default is, of course, 1024, but other accepted values are 341 and 256, though I REALLY don't recommend using 256, as it will cause dropped pixels, whereas 341 will only cause somewhat distorted pixels horizontally. The advantage of using 341 over the default of 1024 is SPEED, and bilinear interpolation(if enabled) will work much better as well. PC-FX: Fixed major problems when using more than one breakpoint of a type(read, write, etc.); it also occurred with the PCE debugger, but only with Aux breakpoints. PC-FX: Fixed the VDC state restore code to properly recache all the tiles, instead of half of them! GB, GBA: Fixed a few duplicate and misnamed variables in the save state structures. PCE, PC-FX: Fixed a misnamed variable in the VDC save state structures. Lynx: Removed a duplicate variable in the CPU save state structure. PC-FX: Save states are now named so that they can be shared among CDs in recognized multi-disc sets(previously only .sav games were). This is intended to emulate "hot-swapping" as far as the game is concerned(though you will need to exit the emulator and load the second disc, so it isn't truly hot-swap ;)). When a game requests you to change the disc, the procedure is: Eject virtual disc(F8 key). Save state. Exit emulator. Load emulator with second CD. Load state. Wait for the game to load it. :b PC-FX: Implemented virtual CD insert/eject, via the F8 key. PC-FX: Added dummy handling of SCSI command 0x01(rezero unit), Doukyusei II no longer aborts the emulator. PC-FX: Fixed bitstring instructions to fetch from the proper source address, fixes major graphics corruption bugs in "Anime Freak FX Vol. 4" and probably some other games as well. PC-FX: Fixed RAINBOW decoding to not begin block decoding until a 0xFF is discovered in the bytestream. Fixes some graphical problems in "Ojousama Sousama". PC-FX: Fixed the CD-DA playback speed calculation to match with tests I performed on my own PC-FX with a pure sine wave(interestingly, there was some really weird frequency aliasing at +10% playback speed on a real PC-FX...). WonderSwan: Refactored the SRAM and external EEPROM code, and added support for larger SRAM sizes(Dicing Knight works now!). PCE: Extended the Sherlock Holmes 1 hack to Sherlock Holmes 2 as well. The address displayed in the "Cursor position" field in the memory viewer/debugger is now masked properly. PC-FX: Fixed the ADPCM lowpass filter rolloff frequency calculation(forgot to divide by 2!). PC-FX: Changed priority handling of KING background for priorities 5-7, though I don't know if the new way is correct... fixes a graphical bug in "Power Dolls FX". PC-FX: The ADPCM volume control registers are now emulated as logarithmic, instead of linear. PC-FX: Modified 256-color VDC sprite and bg palette index calculation, to fix color problems in the 3/4 view of Ojousama Sousamou. PC-FX: Altered ADPCM address emulation so that the "active" play address is 17 bits instead of 18 bits, fixes problems in several games(Anime Freak FX Vol. 1, Tenchi Muyo! FX), hopefully it doesn't cause any new ones. ;) PC-FX: Added support for KING bitstring writes and reads, and changed maximum BGn screen dimension setting from 0x9 to 0xA. "Boundary Gate" works much much better now due to these changes. NES: NULL-terminated the debugger's list of MMC1 registers, which was apparently forgotten earlier. Oops. Added MMC3 registers to the debugger. Added the current scanline(read-only) to the debugger's list of registers. 0.7.2: NES: Added MMC1 registers to the NES debugger. Various cleanups(removing dead code and header declarations). Added settings "vblur.accum", enables motion blur accumulation mode, and "vblur.accum.amount". Added setting "vblur", when enabled, will (motion) blur adjacent video frames 50/50. Added WonderSwan emulation, based on Cygne, but greatly improved, and with a debugger. Modified the time base adjustment code used when sound is disabled to fix fast-forwarding when sound is disabled. "Fixed" a few instances of mostly harmless variable shadowing. Mednafen is now compiled with -Wshadow. Modified the save state preview rescaling code to properly(with interpolation instead of nearest-neighbor) rescale PCE games that use the 512pixel-width mode, or in other words... the rescaling code will now work where (fb_width / state_preview_width) <= 2 whereas previously it only worked properly where (fb_width / state_preview_width) < 2. Errors saving save states are now propagated and reported. NGP: Files with an extension of "npc" are now also treated as Neo Geo Pocket ROM images. PC-FX: Added setting "pcfx.nospritelimit". Removed the memory dump and graphics memory dump functionality from the main debugger. The new memory editor provides the same or higher level of functionality. Added a new memory editor to the debugger interface, accessible by pressing ALT + 3 in the debugger. PCE: Added support for reduced-bit-depth background mode. If the ALSA driver code is unable to set stereo or mono sound, it will try mono or stereo sound instead, respectively. PCE: PSG waveform RAM will now only be updated if the channel is turned off. glFinish() will no longer be called every frame in the OpenGL code, which should improve performance(if it causes problems, like tearing where there wasn't any before or decreased performance, please file a bug report!). If the "glvsync" setting is 1(the default), and the environment variable "__GL_SYNC_TO_VBLANK" is not set at all(either 0 or any value), then it will be set to "1". This has the effect of forcing vblank synchronization when running under Linux with NVidia's drivers. Fixed configure script option "--disable-jack". Lynx: Screen rotation now works in non-OpenGL mode(SDL+framebuffer), sans scanlines support. Lynx: Screen rotation now also rotates input sanely, as it did in 0.6.x and earlier versions. Fixed a fatal compilation error in the ALSA driver with ALSA versions < 1.0.9. Fixed a fatal compilation error on GCC < 3.4 in the PC-FX code. Added code to detect the maximum OpenGL texture size, and reworked the OSD code to use tiled drawing if a particular OSD surface is too large to fit in a single texture. This is particularly relevant to users of old Voodoo cards. Note that tiled drawing isn't supported for the main game framebuffer, so video cards with severe texture size limitations will still have problems with PC Engine and PC-FX games that use higher resolution modes. The help screen, debugger, and cheat search interface now use their own surfaces instead of the generic OSD surface. Fixed(hopefully) OSD-clearing in SDL blit mode("-vdriver 1"). Removed the option "doublebuf". It is kind of an archaic leftover from when Mednafen did only one blit per frame(and had the OSD written to the game's virtual framebuffer). Double buffering must always be enabled, or else screen corruption may occur. Also, as a note, double buffering does not imply synchronizing to vblank, though this does occur in some situations. ***NOTE: Please check your scripts and frontends and remove any "-doublebuf" arguments! *** 0.7.1: Began work on an experimental stdio interface, see drivers/remote.cpp if you are a frontend author and can read C code, though it is disabled for now. :) Documentation for it will be written when it is closer to completion. Switched to trio_snprintf() from snprintf() in the input configuration code, this should fix problems under Windows(and any other OS with a lame snprintf() implementation) with joystick button configurations not saving properly. Fixed parsing of the "sounddevice" setting(it was erroneously being compared to the long, descriptive name of the driver instead of the short name). PC-FX: More changes. 0.7.0: *** Network play with this release requires Mednafen Server >= 0.3.0 *** PCE: Fixed a timer reload bug. Added the following configure script options: --enable-debugger build with internal debugger [default=yes] --enable-cjk-fonts build with internal CJK(Chinese, Japanese, Korean) fonts [default=yes] --enable-gb build with GameBoy emulation [default=yes] --enable-gba build with GameBoy Advance emulation [default=yes] --enable-lynx build with Atari Lynx emulation [default=yes] --enable-nes build with Nintendo Entertainment System emulation [default=yes] --enable-ngp build with Neo Geo Pocket emulation [default=yes] --enable-pce build with PC Engine(TurboGrafx 16) emulation [default=yes] --enable-pcfx build with PC-FX emulation [default=yes] Moved the save states display and info text message display to blit directly to the framebuffer, rather than to the general OSD layer(which is now only used for cheat console and debugger). Reworked the network play console interface to be more...usable. It takes up much less space, is centered at the bottom of the screen, the "t" button now activates text input, pressing "Enter" exits netplay console mode, and it will automatically pop up(though without user input possible, unless you press "t" while it's up) for 2.5 seconds when a new message is received. Added support for all possible input devices to be used with network play. Command-line arguments can now be prefixed with either "-" or "--". Fixed "--help/-help" parsing from command-line. PC-FX: Increased emulation accuracy, most games still don't work correctly, if at all. PCE: Fixed VRAM->VRAM DMA when destination writes occur outside of VRAM space(they're now ignored). Fixes "Ruin - Kami no Isan". OpenGL page flips will now try(it doesn't seem to work with nvidia's binary driver under Linux, so use "nvidia-settings" utility instead) to be synchronized to vertical retrace/blanking period if Mednafen is compiled against SDL >= 1.2.10, controllable by the setting "glvsync", enabled by default. The "sounddriver" setting is now honored. Values you can try are "default", "oss", "alsa", "dsound", and "jack". Added support for JACK and ALSA sound output, ALSA sound output is now preferred over OSS. Mednafen will now exit properly if it receives a not-fatal signal, such as SIGTERM or SIGINT. NES: Fixed noise and DMC playback frequencies with PAL emulation. Thanks to blargg for the information. Due to internal changes, and wanting to clean up code, save states created in versions older than 0.6.0 are no longer supported(if you have any old save states you absolutely must have, load them in 0.6.5 and save them, then load them in 0.7.0). Added keys to increment(though a predefined list of possible devices) the currently selected device on an input port(CTRL+SHIFT+1 through CTRL+SHIFT+5); note that this WILL change the setting for this port saved in the configuration file. PCE: Added mouse support(use "-pce.input1 mouse"). To use it properly in windowed mode, you will need to press the "Scroll Lock" key. PCE: Added 6-button pad support. By default, the "M" key will switch between 2-button and 6-button modes(this is necessary because most non-supporting games will break horribly in 6-button mode, which happens on a real system as well). Revamped much of the internal input device handling. Important user-visible changes: Button configuration order is slightly different, with the rapid-fire instances of buttons immediately coming after normal instances of the buttons. More buttons can now be configured for rapid-fire. A virtually unlimited number(instead of 4 in previous versions) of physical buttons may now be assigned to a virtual button or command. Input button settings are now saved in the text-format mednafen.cfg file. Famicom input devices that were previously not configurable, such as the Family Keyboard, now are; however, it would be unwieldy to configure the Family Keyboard using the in-emulator configuration process, so edit the configuration file instead. The NES Zapper and other devices that are emulated using the mouse can now have their buttons configured. The setting to manually set an input device on the Famicom expansion port has changed from "nes.fcexp" to "nes.input5". Gameboy and Gameboy Advance pad button configurations are now independent of each other. Save states and movies can't be accessed during HES/NSF/GSF playback anymore(does this hurt anyone?). Button configuration hotkey functions are now mapped to ALT+SHIFT+1 through ALT+SHIFT+5(for input ports 1-5) instead of F3, F4, and various convoluted combinations of F3 and F4 with CTRL and SHIFT. The NSF/HES/GSF player graphical code now all use the same resolution and video settings("player.*"). Replaced the internal fixed-width 6x13 and 12x13 fonts with 9x18 and 18x18 fonts, respectively, and increased the general OSD layer size to 384x336 from 256x224(which has a side effect of allowing more detailed save state previews for NES and PCE). The new fonts provide about 10,000 more glyphs(for a total of about 32,000 glyphs), mostly for east-Asian languages(I think this MIGHT be slightly overkill, but, eh...*flees*). PCE: The timer counter was being updated one instruction too late. Fixed. (This problem probably didn't affect any games, but it could have resulted in confusion while using the debugger.) Remapped the state rewind key to ALT+S, and added a new help screen triggered by pressing "F1". PCE: The disassembler was missing opcode 0x3A, DEC. Fixed. NES: A few sound variables weren't being saved in the VRC6 and FME7 sound code. Fixed. PCE: Fixed disassembler decoding of ZP indirect addressing mode. NES: Fixed unofficial opcode 0xE2 cycle timing. 0.6.5: PCE: Made a small optimization to HuC6280 emulation by caching the CPU speed shift-left cycle count adjust value. Removed an old kludge for Win32 that worked around an SDL problem in which the window position would be off-screen when switching from fullscreen to windowed mode, as I think the problem is fixed in SDL 1.2.10. Reworked the signal handling code to be included if HAVE_SIGNAL is defined instead of if WIN32 is not defined, and added #ifdefs around each possible signal(as some platforms don't provide #define's for some signals). PCE: Added setting "pce.cdspeed" to set a CD-ROM data transfer speed multiplier. PLEASE READ THE DOCUMENTATION FOR CAVEATS. PCE: Fixed CD-DA and ADPCM fadeout speed when setting the "pce.ocmultiplier" setting to a value other than 1. Cleaned up the multi-res blitting code in drivers/video.cpp to not cause crazy compiler warnings(and not be crazy in general!). PCE: Fixed the ADPCM playback rate formula(the result was off by about 0.27%), thanks to Charles MacDonald for detailed information. Began work on implementing several OpenGL pixel shaders, which will be finished in a later release. Mednafen no longers directly links to the OpenGL library, instead it uses SDL's OpenGL library loading and function address functions. Reverted back to pow() and cos() from powl() and cosl() in Blip_Buffer.cpp, due to some platforms not having long double types per se, and adjusted the code activated by setting "pce.adpcmlp" to call Blip_Synth::treble_eq() with a "treble" value of a lower magnitude, which might result in a slight difference in the ADPCM frequency spectrum produced when "pce.adpcmlp" is enabled. Fixed "Value increased" cheat search method(it was acting the same as "Value decreased", oops -_-). Changed the usage of fix-sized filename component arrays in general.cpp with string objects. MDFN_printf() and MDFN_PrintError() now use trio_vaprintf() instead of trio_vsnprintf(). NES: Added setting "nes.n106bs", which when set, will enable less-accurate, but better sounding, Namco 106(mapper 19) sound emulation. NES: Fixed save states for mapper 69 games(mirroring and prg bank setup wasn't being saved and restored). NES: Added support for multiple expansion sound chips used simultaneously in NSFs, including limiting the address space they will respond to when multiple expansion sound chips are used(to prevent collisions between VRC6 and VRC7's address space, for example). PCE: Fixed CD-DA playback speed when setting the "pce.ocmultiplier" setting to a value other than 1. NGP: Changed the default full-screen video settings, so that the scaled image size is no longer larger than the display area(oops -_-). NES: Added support for UNIF board "UNL-603-5052"(thanks to CaH4e3). NES: Fixed mapper 115, "Thunderbolt 2" now works(thanks to CaH4e3). NGP: Sound emulation now respects global sound volume setting "soundvol". NGP: Added missing setting "ngp.forcemono". PCE: Physical CDROM device names will now be printed on Mac OS/X on startup again. Physical CDROM access seems to work, but the DarwinPorts libcdio 0.75 package appears to be horribly broken, so please remove it and install libcdio 0.77(or higher) from its source code. NGP: Fixed a few major problems with NGP emulation on big-endian platforms(such as PPC OS/X). 0.6.4: Added somewhat experimental Neo Geo Pocket(Color) emulation based off code from NeoPop, heavily modified. GB: Fixed frame rate when sound is disabled. Added →, ←, ↑, and ↓ characters to the Lynx, GB, GBA, and PC Engine directional button names used for button configuration, to match the NES button names. PCE: Added setting "pce.adpcmlp", default value 0, that when enabled, will cause Mednafen to apply a lowpass filter to ADPCM sound output with a rolloff frequency dependent on the current ADPCM playback frequency. This makes ADPCM voices sound less "harsh", however, the downside is that it will cause many ADPCM sound effects to sound a bit muffled. PCE: Moved the OpenGL screen clearing code into the FlipOpenGL() function to fix a problem with some PCE games that use multiple resolutions per frame having a partially corrupted screen when the OSD was up. PCE: Fixed save state loading with save states created during a CDROM data transfer. Fixed a bug that was causing flickering OSD remnants to remain onscreen in fullscreen mode if the OSD was drawn outside of the game screen area. Fixed a bug in the resizing code for save state previews that was causing save state previews for the NES, GB, GBA, and Lynx to look absolutely horrible. Assigned the two keys "-"(not the numpad instance) and "=" to functions "decrement selected save state slot" and "increment selected save state slot", respectively. Removed the checks preventing save state usage when playing NSFs, since save states may be useful with NSFs in some circumstances. Added a new setting "ckdelay", which controls the length of time, in milliseconds, that a button/key corresponding to a "dangerous" command like power, reset, exit, load state, etc. must be pressed before the command is executed. The default value is 0. Input mapping configuration is now saved after argument parsing if there is no game to be loaded, allowing a command like "mednafen -inputcfg pcegamepad1" to work properly. The message "Configuration finished." will now be displayed when button mapping for the selected input device is complete when using the in-game configuration process. PCE: Fixed a bug in the debugger involving disassembling block memory transfer instructions(effectively, the length was being fetched 1 byte too early). 0.6.3: SexyAL: Fixed buffer write memcpy() optimization to also check to make sure the input and output byte orders are the same. PCE: Added setting "pce.forcemono" to force monophonic sound output. Added setting "analogthreshold", which is the threshold for detecting a "button" press on analog axis, in percent. The default value is 75(%). Worked around a very odd "bug" in gcc that involved muddling of local-scope structure definitions among different object files( the structure previously named "BPOINT" in both NES and PCE emulation code), which led to breakpoints with NES emulation being totally fubared. Added graphics memory dumping capabilities to the debugger. PCE, NES: Save states and powers/resets in debugger step mode SHOULD work properly now. Fixed a potential deadlock when exiting. Various debugger fixes. I lost the ChangeLog, sorry. -_- 0.6.2: PCE: Physical CDROM device names will no longer be printed on Mac OS/X on startup, due to the code crashing badly(rather than goodly!). OpenGL texture heights are now rounded up to the nearest power of 2(texture widths already had this rounding in previous versions), which should fix special scalers on video output devices that don't support non-power-of-2 textures(IE most video cards and Mac boxen). PCE: The libcdio sector reading functions are now checked for return values < 0 as errors, rather than != 0, to fix problems under Linux and possibly many other OSes where the return value is something like 2048(the number of bytes read, presumably). PCE: Fixed a bug with disassembling block memory transfer instructions on < 64-bit systems(I had forgot to type-cast a variable to uint64 before left-shifting it past 32-bits). PCE: Added the implied form of INC to the disassembler. NES: Removed the PRG mask constraint for UNROM/mapper 2, introduced in version 0.2.0, to fix the Japanese "Maniac Mansion" and possibly other games. PCE: Fixed debugger write breakpoints. The code had a logical error in it, with the end effect of preventing stack writes in the IRQ sequence, causing games to crash. 0.6.1: PCE: The HuC6280 disassembler now gives @ZP hints for BBR and BBS instructions. NES: Increased the effectiveness of frame-skipping. Removed unnecessary sound buffer copying if the source format == device format in SexyAL, which is true most of the time. Fixed a bug that was causing a crash in the cheat interface when trying to list cheats, under Win32. Fixed a bug in the settings loading code that forced the user to resort to manual creation of ~/.mednafen/mednafen.cfg on some operating systems(*BSD, OS/X). It was being caused by 'errno' being modified between the attempt to open the settings file, and the test 'if(errno == ENOENT)'. Silent sound will now be outputted when in step mode in the debugger. Windows users' ears rejoice! Added a strtod() replacement that recognizes both "." and "," as valid radix characters, regardless of the current locale, and modified settings.cpp to use it. Lynx: Removed some unused code. 0.6.0: The internal sound format has been changed to 16-bit from floating-point to improve performance, especially on processors without FPUs. There should be no perceptual nor measurable loss in sound quality. Removed fidlib from the source code tree, as it is no longer used. Lynx: Switched over to Blip_Buffer's lowpass("treble") capabilities from fidlib. PCE, NES: Added a debugger of DOOOOOM. PCE: Altered timer emulation slightly. PCE: It is now possible to load CDs simply by specifying the CUE file, or device, as you would with a ROM image, like so: mednafen /dev/cdrom mednafen /home/sauron/games/Ys/Ys.cue Added MusePack CD-DA playback(IE audio tracks encoded as MPC data) support. Added legal information to the end of the documentation, though it's likely incomplete. Switched over to using an internal copy of the "Tremor" decoder, and dropped dependencies on the ogg and vorbis external libraries. The CD-DA reading function now provides sound data as 16-bit signed samples in the endian format native to the host platform. PCE: Changed two often-used CDROM timing variables from int64 to int32 to try to improve performance slightly on non-64-bit platforms. PCE: Added a hack that changes subtle CDROM unit behaviour when the game "Sherlock Holmes" is loaded, so that the aforementioned game will work. In general, I really, really dislike hacks of this nature, but I think it's justified until I have a better understanding of the (complex) PCE CD functioning. PCE: Lowered CDROM data transfer rate, and removed the kludgey one-time delay in the sector reading function. PCE: Altered ADPCM write delay to be inversely proportional to the playback frequency selected. GB, GBA and Lynx save-state previews are now saved at native resolution, instead of scaling down to 1/4 of the native resolution. NES: Fixed a mapper 96 initialization problem. NES: Implemented blargg's NTSC graphics filtering code(version 0.2.0). The setting "sounddevice" will now select which filesystem entry(like "/dev/dsp" or "/dev/adsp") to open when using the OSS output driver. NES: Changed the internal sound channels high-frequency mixing buffer to 16-bit, from 32-bit, to try to increase performance on cache-starved processors. Added a simple, non-ideal(it increases CPU usage measureably because it dirties the OSD surface and causes it to be redrawn) FPS display, toggled with SHIFT+F1. PCE: Added "hes" and "pce" to the file extensions looked for in ZIP archives in the file loader. NES: Added support for iNES mapper 38. Lynx: The lowpass filter can now be optionally disabled by modifying the "lynx.lowpass" setting. ROM sizes, MD5 hashes, and CRC32 checksums are now printed out for all systems emulated by Mednafen. Rearranged the file loader detector to attempt to load the file as a GBA game last, since the GBA cart-detection code *could* give false positives if the game isn't a GBA game. PCE: The 2KiB of BRAM is no longer mirrored across the 8KiB segment 0xF7, fixing "RAM is full" problems with Exile 2. PCE: Fixed MD5 hash calculation for CD data tracks. Added settings "gb.forcemono" and "gba.forcemono". Lynx: Cleaned up the code. The MD5 hash is now calculated for GBA and Lynx games, and the correct MD5 hash is now used in filenames (the nibbles in each byte were swapped previously). ***NOTE*** Save states and save games created in previous versions of Mednafen will have different filenames than the current version. To do a quick-and-dirty fix, simply remove the MD5 hash component from the filename as such: rename somegame.7e74d04f2d147f03061d447310b109ec.sav somegame.sav Changed autofire behavior to have the button set on half the frames in the autofire period, rather than just one frame. NES: Changed the background clear color to light blue(from black) when the background is disabled by the user, and fixed background and sprite disabling by the user to not lock up some games that depend on sprite hits. GBA: Updates from VBA's CVS: - bios.cpp : corrected a bug in registerRamReset. - gba.cpp/gbainline.h : corrected the mirroring of Vram. - gba.cpp : changed slightly the emulation of gbasavetype. - RTC.cpp : vba now ignores rtc command 0x64. GBA: Reduced input latency by one frame. PCE: Reworked the frame/scanline counter loop to run NMI first, and then draw the active frame area, to reduce input latency by one frame. Most games keep the vblank starting line outside of the TV's visible display area, but a few(like Dracula X) have vblank occurring on a scanline that the VDC is still outputting a signal to the TV for. If a game alters its overscan color regularly, and vblank is set to occur rather early, there might be a slight tearing effect at the bottom of the screen. Note that this is a very minor problem, and is more than offset by the reduced input latency, though I thought I should mention it so I won't go crazy in the future trying to debug the oddball game. ;) Note that this change may cause compatibility problems with PCE save states created in older versions of Mednafen. NES: Fixed several PPU sprite RAM and VRAM read and write operations to pass blargg's tests. NES: Altered how the color to be blitted is decided when screen rendering is disabled to fix blargg's 410 color demo. Fixed scanlines to be aligned correctly(scanline darkening over the pixels that are interpolated between rows) when bilinear interpolation is used, at least on my nvidia card. Floating-point/real number settings are now validated and checked to be in range. PCE: Rewrote SuperGrafx VPC priority evaluation code to work correctly with http://pcedev.net/demos/Sgx3b.zip which was tested on real hardware. Simplified the OpenGL blitting code. 0.5.2: Modified the PCE code to only include header files that are needed. Fixed a memory leak in the state saving code. PCE: Closing HES music files will no longer produce battery-backed RAM files. x_x Fixed a memory leak in the state loading code. Reduced memory slightly in the text rendering code by using all the bits available in the array(instead of the lower bit of each byte) that tells if a glyph is available or not. Modified the internal message display code to allocate and free space for the message being displayed, rather than using a rather small static array. PCE: Fixed a small bug that would cause 1/75 second or less of the old CDDA track to play when switching to a new CDDA track. PCE: Changed how reads from $0000 are handled, and made vblank occur slightly later in the frame, to fix Valis 1. PCE: The CD reset function of $1804 now clears more variables, fixing problems with lockups when using the START+SELECT soft reset in the middle of a data read. Finally fixed the endian conversion code so that save states(and netplay) are compatible between big-endian and little-endian systems. **NOTE** Save states created in previous versions of Mednafen on big endian platforms(such as OS/X PPC) will no longer work in this version. Removed the tech documentation from the source code distribution. Truncated the ChangeLog to the first Nintencer release. 0.5.1: Fixed a crashy bug with hq2x, hq3x, and hq4x when using big-endian systems, or when the "vdriver" setting is set to "1". 0.5.0: Added a frame-advance feature. Press ALT+A to enter frame-advance mode, and subsequently to advance frames, and ALT+R to exit frame-advance mode. The current machine state is now saved at the end of movies, to allow for the future implementation of the seamless continuation of an already recorded movie. PCE: When loading from a physical disc, auxillary data(save states, movies, etc.) prefixes should now always be "cdrom", rather than "cdrom" for the default device and the given name for other devices, because this(previous) behavior caused problems under Win32(where colons couldn't be used in filenames). NES: Fixed FDS sound output(it was technically outputting before, but the volume was so low as to be inaudible). NES: The disk system BIOS can now be in iNES format. NES: The Game Genie and FDS ROM image loaders can now load the ROM image from a gzip or zip compressed file. Revised the documentation to remove misleading statements(that applied to FCE Ultra) and add some missing information. Updated the command-line section of the documentation with warnings and notes regarding settings, network play, and movies. PCE: Fixed more bugs with CD reading when sound is disabled. Loading a save state while recording a movie will now embed that save state in the movie file. PCE: Save state previews are now generated with correct horizontal linear interpolation, fixing icky blockiness. NES: It's now possible to record movies with any virtual input devices(like the Zapper), though the nes.input1, nes.input2, and nes.fcexp settings must be set the same as they were at recording time, before playback. NES: All currently used expansion input devices are now saved in save states(before only gamepad data was saved). Added a network play setting to merge all local input into one virtual remote input(via inclusive OR on the server), to allow for those UTTERLY SILLY games that support multiple players on one gamepad/joystick. Worked around an SDL bug(or feature? :b) that was causing events to be processed by SDL instead of Mednafen when SDL_JoystickEventState() is called. Scrapped the old movie format from FCE Ultra, and replaced it with a simplified version that simply writes the joystick inputs to the movie file stream each frame, and lets zlib handle the compression and encoding. This is incompatible with the old format, sorry. Movies are now stored in the right directory finally(mcm vs mcs). Rewrote most of the on-screen display code to work with a separate 256x224 buffer that is scaled and blitted independently of the main game's video output buffer. Note that if you have OpenGL disabled(via "-vdriver 1"), the overlay will not be scaled. PCE: Added support for multiple resolutions per frame, as used in such games as "Asuka 120%" and "Ryuuko no Ken". PCE: Adjusted the internal resolution(and outputted aspect ratio) slightly when using the ~7MHz dot-clock. PCE: Added movie recording support. PCE: Adjusted ADPCM volume. PCE: Fixed left overscan clearing and disabled background lines clearing. The trio code is no longer compiled with -ffast-math. Removed netplay divider support(it didn't really work all that well anyway), and removed it from the server as well. PCE: Changes to the IRQ masking register are now delayed by one instruction, thanks to D. Michel for the information. Status messages are now displayed for 2.5 seconds, rather than 180 frames. Changed save state display timing from frames to seconds, and set it to display for 2 seconds after a number is pressed(previously it was around 3). Added the following settings: nes.ggrom, path_snap, path_sav, path_state, path_movie, path_cheat, path_palette. Changed the data types of "bool" variables that are saved in save states to uint8, to address more cross-platform save-state compatibility issues. Fixed a problem with save states on big-endian platforms(was dividing by sizeof(uint32) instead of sizeof(uint16) in a few places). Fixed hq2x, hq3x, and hq4x filters on big-endian platforms. PCE: Pushing the virtual reset or power button during CD reads will no longer cause the emulator to fail on subsequent reads(a few variables weren't being reset properly). 0.4.9: GB/GBA: Added configurable rapid fire buttons for virtual buttons A and B. NES: Disabling the background now works properly(it no longer also disables sprites!). PCE: Disabling background layers now replaces that layer with an obnoxious green color that shouldn't be used by any games, to make sprite ripping easier. Added settings "fftoggle" and "ffnosound", to make the fast-forwarding button a toggle switch, and to silence sound during fast-forwarding, respectively. PCE: CDDA playback interrupt and looping enabled flags are now reset properly, fixing a lockup that occurs when facing a boss in Valis 2, and possibly other games. 0.4.8: PCE: Loading a physical CD will now print out a list of available devices. NES: Blip_Buffer's highpass filtering capabilities(for DC-offset removal) are now used instead of a custom function. Modified the included libintl so that it will compile on Mac OS/X. The "trio" subdirectory should(I can't test it) now be compiled with -mieee on Alpha architectures, fixing a compilation error. NES: Fixed long-standing graphical problems with some sprites in (Mike Tyson's) Punch-Out. Removed "#include 0.4.7: Fixed the NES PPC AltiVec resampling code by properly aligning an output array. Fixed NES sound emulation on 32-bit platforms(omitting the buffer size to Blip_Buffer::set_sample_rate() was causing an assert to go off on <64-bit platforms). 0.4.6: Dropped the libsamplerate dependency. NES: Replaced the resampling code from the intermediate frequency after FIR resample with Blip_Buffer. The only audible effect seems to be a slight lowpass filter effect. PCE: Integrated the CDDA playback code into the main PCE CDROM emulation code by using Blip_Buffer. PCE: Removed the compressor and cddaquality settings. Updated the Russian PO file, mostly to remove or fix grossly incorrect "fuzzy" entries. Added an incomplete Spanish(Spain) PO file. PCE: If a data sector read from a physical disc fails, it will be reattempted continuously until it succeeds, or the user presses the exit key(F12 by default). (note that this may appear to lock up Mednafen, but the exit key will still work) This *should* fix problems with physical PCE CDs under Mac OS/X and MS Windows. Merged trio(http://daniel.haxx.se/projects/trio/) into Mednafen to fix format-string problems on non-glibc systems(MS Windows for example!). GB: Modified the APU emulation code to silence a gcc warning. PCE, Lynx, GB, GBA: Doubled the size of the Blip_Buffer phase offset table for slightly higher sound quality. PCE: Fixed ADPCM playback code for when sound is disabled(it was ultimately causing a crash in earlier versions). Converted the MD5 functions to a class. Fixed(hopefully) compilation on non-Apple PowerPC systems. Fixed save-state support for saving/loading arrays of 16-bit and 32-bit variables(the hints were already there, but the code to handle the hints was nonexistant). Note that this change will cause incompatibilities between old save states and this version on big-endian platforms. Removed the included "m4" directory, updated autogen.sh, and reran it to regenerate aclocal.m4 with newer(and fixed on AMD64) versions of the gettext autoconf scripts. See: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=349845 0.4.5: drivers/opengl.cpp now includes the GL header files AFTER the header file that eventually loads config.h is included to fix compilation on Mac OS X. Redefined SFEND from { 0 } to { 0, 0, 0}, and fixed older code to use the SFEND macro, to fix crashing on OSX and possibly other platforms when saving or loading states. Reduced SDL's buffer size when using the SDL sound driver(used on MacOSX). Restructured and merged some of the sections in the autoconf script. Note to future self: I noted that it seems if the first instance of PKG_CHECK_MODULES() is in a statement that doesn't evaluate, any other PKG_CHECK_MODULES() statements will fail. I don't know if this is a bug in autoconf, or a misunderstanding on my part. Removed the largely unused ESD sound driver from compilation, as it is mostly unsuitable for use in Mednafen. Also removed the jack driver, as it was unfinished, and couldn't be used anyway. PCE: Fixed CD-DA playback from "WAV" audio files on big-endian platforms. Fixed a compilation problem on big-endian CPUs by adding appropriate type-casts in psf.cpp. 0.4.4: Modified the GBA code to not use many INLINEd functions in arm.cpp. This greatly reduces RAM and CPU usage during compilation, and should have only a negligible impact on performance(and might even improve performance on cache-starved systems). Fixed a compilation problem on non-x86 and non-PPC platforms in the NES emulation code. 0.4.3: (Note: PCE CD save states created in previous versions will not work very well with this release) Fixed a compilation problem in cdromif.cpp regarding NULL on *BSD platforms by including Lynx: Fixed the constructor and destructor declarations of the C65C02 class, which should fix a reported compilation error with gcc 4.1. GBA: Added a few missing variables to save states. GB: Lines during which time the screen is turned off are now cleared(fixes flickering problems at the start of games, and during transitory blank screens). Fixed the SDL_net.h include statement in drivers/netplay.cpp. PCE: Fixed a bug with CUE+BIN sector size handling with regards to pregaps. CUE+BIN is still officially unsupported. :B PCE: Noise is now rendered at blip_med_quality. PCE: Removed the code that checks to make sure the audio sector to play is non-zero. Fixes "Crazy Hospital". Changed the maximum supported playback rate from 96KHz to 48KHz, to be able to safely extend the temporal precision of Blip_Buffer further. Note that this shouldn't be considered a regression, as there are virtuall no benefits to using a sample rate above 48KHz in Mednafen(though there may be benefits in other applications). *************** ***BIG NOTE:*** *************** If you previously set the playback rate above 48KHz, you will have to manually edit the text configuration file(~/.mednafen/mednafen.cfg) to bring the value in range. This is necessary because of a limitation in the setting validation code. Updated to Blip_Buffer 0.4.0, which offers improved sound quality over previous versions: - Improved sound quality by rewriting library to use 32-bit internal sample buffer, higher phase resolution, and a properly windowed filter kernel. Current user code should work without changes. PCE: When sprites and background are both disabled, and the VDC is not in burst mode, the scanline is now filled with color 0x000 from the palette rather than 0x100. This fixes the "Hurry Up" water effect in the CD game "Rainbow Islands". PCE: Fixed the CD-DA amplitude calculating(used the BIOS' CD-DA player interface). PCE: Altered VDC line timing slightly. PCE: ADPCM frequency is no longer reset on ADPCM reset, fixes Gulliver Boy's dialogue voices during gameplay. PCE: Fixed reading from nonexistant audio sectors(by memset()'ing the audio buffer to zero). PCE: Implemented sector reading delays, games that use FMV like Gulliver Boy work much better now. It's not implemented 100% correctly, and requires a small CPU hack to disable IRQs during a timing-sensitive period of emulation. I don't like hacks, but...it's still better than the giant hack of reading all the sectors at once, which was how it used to be. PCE: Implemented ADPCM read and write delay. "Record of Lodoss War" no longer locks up at the title screen. PCE: Opcode and operand data reads from VDC register 0x1 will now return 0x40, which fixes Dragon Slayer 2. I doubt this is correct, but it shouldn't break any other game. PCE: CUE+BIN audio playback no longer locks up the emulator, but CUE+BIN is still officially unsupported. 0.4.2: Fixed sprite hit emulation, fixes problems with VS Duck Hunt and VS Hogan's Alley that have existed since Nintencer. Modified VS Unisystem light gun emulation slightly to be more accurate. Fixed the in-emulator sound(nsf,gsf,hes) player's waveform visualization, broken in 0.4.1. 0.4.1: Joysticks initialization is now slightly more verbose. Fixed hash calculation in the joystick code, and added a workaround for hash collisions(which would occur if two extremely similar joysticks are used on the same system). Video initialization is now more verbose. The - take the short name of the scaler, which is found in the documentation, instead of arbitrarily-chosen numbers. However, out of the goodness of my cold, black heart, arbitrarily-chosen numbers may still be used, though it should be considered deprecated. Example: -nes.special 1 (deprecated, but works, selecting hq2x) -nes.special hq2x (good!) -nes.special wombat (bad!) libsndfile is now used for WAVE recording(instead of the old ugly code). Altered the internal floating-point format used to represent audio data by changing the range to -1.0<=sample<=1.0(previously it was 0.0<=sample<=1.0). NES: Fixed a 1-byte overflow bug in the Barcode World input device emulation code by changing a strcpy() to a memcpy(). Added a "-help" command-line option, which prints out command-line arguments and parameters. Fixed the configuration file loading code to exit the emulator if invalid data is in the configuration file, instead of just ignoring it and the rest of the entries, thus trashing the configuration file on exit. Changed the default xscale and yscale settings for Lynx to 4. Physical mouse buttons can now be assigned to virtual buttons. The width and height of the state preview are now saved in save states, fixing a problem with broken save states if the -nes.clipsides option is used, and possibly in other situations(note that this won't fix the problem in old save states, only new ones). Fixed a garbage(OSD stuff) problem in screen snapshots and save states when they are done after a frame that has been skipped(the solution is to delay the snapshot/save state until the next frame, which is set to not be skip). Fixed a typo that broke the hq3x effect(it had weird graphical glitches). Modified more settings to use the new plain-text configuration file format. 0.4.0: Various minor code changes I forgot to document. I hope none of them are of the Mednafen-exploding variety. ;) Added support for saving and loading settings in a plain-text file format, and moved many settings to use this code. This file is named "mednafen.cfg" in the Mednafen base directory(whereas the old binary configuration file is still named "mednafen03x.cfg"). NES: Merged RDoPCM() into RDoNoise(), reducing CPU usage slightly. NES: Removed the pedantically high-quality sound mode, and reduced the filter order for downsampling from 512 to 256, with a larger transition band and smaller passband, creating a somewhat subtle low-pass filter effect on the audible portion of the signal, and decreasing CPU usage. NES: Made optimizations to the CPU and PPU emulation code. PCE: Added -pce.forcesgx, -pce.ocmultiplier, -pce.nospritelimit, -pce.cdbios, -pce.cddaquality, and -pce.compressor command-line options PCE: Sound(excluding CDDA in CD emulation mode) is now passed through an audio volume compressor. NES: Zero-page and stack memory accesses now go through the normal read-write function pointer system. This will increase CPU usage slightly, but it's important for future plans(readding cheat support, and an enhanced sound system through OggVorbis and WAV files). Updated to Blip_Buffer and Blip_Synth 0.3.6b1. Added special gcc options to configure.ac to get gcc to actually inline many functions that are specified to be inlined. Sometimes I wonder if gcc developers are sane... NES: Fixed a weird typo(with apparently no effect) in the B2005() function in ppu/ppu.cpp Fixed scanlines effect when using a special scaler. Lynx: Optimized the sound rendering code slightly. PCE: Added PCE CD emulation. NES: Fixed the AMD64 MMX sound downsampling assembly code. This bug fix fixes staticy sounds and other problems with NES audio on AMD64 platforms(only in 64-bit mode, of course :)). Removed MDFND_UTF8fopen() and MDFND_UTF8gzopen(), since they weren't really doing anything useful, and the same functionality could be provided more easily with some kind of wrapper library, if it's needed in the future. Updated the ZIP-file handling code with the newest version available, 1.01e. GBA: Updated most of the GBA emulation code with newer code from VBA's CVS repositoy. MDFN_FastU32MemsetM8() no longer tries to use floating-point data types, which was causing very bizarre problems on x86_64 targets when compiled with gcc 4.0, and was probably an illegal thing to do anyway, as far as portability is concerned(or maybe gcc 4.0's autovectorizer is broken). This fixes problems with many GBA games when Mednafen is compiled with gcc 4.0. Added code to check for SDL_net in configure.ac and error out if it's not found, instead of blindly trying to compile. A negative result for the JACK test in configure.ac will now print the result "no". Removed the argument to AM_GNU_GETTEXT in configure.ac, effectively setting it to "no-libtool". This will force a static library to be made when necessary, instead of a shared library, which should fix problems some people have been having with missing shared library error messages(libintl.so.3 and libintl.dll, for example). 0.3.7 Modified the OpenGL code to use glTexSubImage2D() instead of glTexImage2D() every frame, resulting in a slight performance increase. Modified the OpenGL code to use smaller texture sizes with most PC Engine games(at least those that run at a width of 256 pixels; exceptions include Aoi Blink, R-Type 1 and 2, Yo Bros., and others). Lynx: Moved CMikie::Update() and C65C02::Update() into c65c02.cpp and mikie.cpp, respectively. Fixed pointer-to-integer type casting that was causing compiler errors under Ubuntu Linux AMD64. Modified a lot of code to work around/fix various compiler warnings. Fixed a few typos in the documentation. 0.3.6: NES: Fixed a bug with the VRC6 sound emulation which was causing heap corruption and one sound channel to not work. The bug apparently came up between Nintencer 0.1.1 and Mednafen 0.2.0. Why didn't anyone tell me... -_- PCE: Made significant optimizations to CPU emulation. The code's a bit messier now, but I'll clean it up if/when 0.4.0 is released. NES: Removed the high-level frameskipping code, since frameskipping is automatically used now, and it could easily break some games. Removed the "-frameskip" command-line option, as it should not be needed anymore. Unified a lot of the driver-side frame-skipping code. Fixed a startup bug(MainThreadID was being used before it was set) that was causing the "Starting Mednafen x.x.x" line to be lost. Slightly restructured the "features" and "command line" sections of the documentation. PCE: Pressing the "Power" key now resets the internal RAM. All: Altered the shared music player interface, decreasing the brightness of the text, and adding pseudo-shadows. PCE: Added simple HES playback code. PCE: Altered noise emulation slightly, Ninja Ryukenden(and probably other games)'s music sounds more accurate now. Fixed alignment of the save state preview and selection box when emulating the PC Engine. The status line text and the save state selection message are now drawn with black shadows, to make reading easier. Changed the text status line background darkening shape to a rectangle on the NES, and fixed it to display correctly with PC Engine emulation. 0.3.5: Added code to allow for writing to SDL framebuffers directly, without using OpenGL, controlled with the command-line option "-vdriver". -vdriver 0 = OpenGL -vdriver 1 = SDL framebuffer(bilinear interpolation and Lynx screen rotation are not available). Lynx: Disabled the crude(as in, non-working) stereo sound support, and added a low-pass filter to make the sound sound much closer to what comes out of a real Lynx. PCE: Adjusted the visible horizontal display area, and overscan, in the 7 and 10MHz dot clock modes. PCE: Expanded the visible vertical display area by 8 pixels(4 on top, 4 on bottom). PCE: Altered VDC timing agaaaain. PCE: Block memory transfers now take 5 cycles(read, write, alter source, alter dest, decrement length?) per byte transferred instead of 6. Fixes "Wonder Momo". PCE: Altered HuC6280 instruction timing slightly(removed the tests for indirect indexed and indexed indirect addressing modes to use extra CPU cycles). PCE: Corrected a timer emulation bug, fixes "Dragon Egg"'s tempo. PCE: Increased the number of cpu cycles per scanline from 454 to 455, based on tests I performed. GB/GBC: A sound enable register is now initialized properly on reset, fixing at least one unlicensed game. Lynx: Disabled the superclipping code, as it's buggy(causes bad sprite clipping and invisible mountains(OHNOS) in Steel Talons) and doesn't appear to be necessary. The mouse cursor is now hidden. 0.3.4: Added command-line option "-autofirefreq" for setting the frequency of the configured auto-fire buttons when playing NES and PC Engine games. PCE: Fixed Street Fighter 2 HuCard emulation. PCE: Modified PSG waveform writing/DDA emulation, fixes "Fire Pro Wrestling - Combination Tag". PCE: Modified TRB and TSB emulation. Fixes "Toy Shop Boys". PCE: Implemented VRAM-VRAM DMA direction control bits. PCE: Altered VDC timing, fixing a few games, making a few games more bouncy. ;) 0.3.3: PCE: Fixed sprite clipping on the left side of the screen. PCE: The emulated RCR register is now masked with 0x3FF when being set. Fixes Niko Niko Pun. PCE: Several CPU cycles are now emulated between setting the in-vblank flag and the vblank IRQ occurring. This works around an issue that would otherwise require timing granularity as small as one cpu cycle. Interestingly, this same type of problem occurs with NES emulation. PCE: Altered the display rectangle calculation code to take into effect screen areas that may be hidden on many television sets(and some games were designed with the assumption that these areas WOULD be hidden). PCE: Modified noise emulation...again. :b PCE: Modified LFO emulation, fixes major sound problems in "Bull Fight". PCE: The sprite DMA completion IRQ now occurs earlier(probably a few cycles too early now, but oh well). Fixes some graphical issues in "Bull Fight". PCE: Sprite bit plane selection is now emulated to a degree. Fixes "Fighting Run". PCE: Very high-frequency(and probably inaudible) sounds are no longer played, because Blip_Synth can't handle them well. Fixes "Bouken Danshaku Don" and others. 0.3.2: GB: CGB-specific emulated RAM is no longer saved in save-states. GB: Fixed a bug in sound sweep emulation. GBC: The palette is now saved in save states. This fixes a major problem with save states with most GBC games... Fixed the SF*N() save state macros to not put quotes around names in save state files, and added a workaround for compatibility with old save states. This is an embarrassing bug. :b PCE: Made major optimizations to the VDC emulation code. PCE: Rewrote the PSG emulation to use Blip_Synth and Blip_Buffer. PCE: Altered the noise channel emulation frequency calculation and LFSR emulation. I'm still not sure if it's correct. Increased the minimum sound rate supported from 8192 to 22050. I don't test low rates very often, and there may be loss-of-precision issues with such low rates. 0.3.1: Fixed a bug that existed since 0.2.0 that was causing a null-pointer deference in stat(). Interesting, glibc silently ignored the error, but the error caused crashing under Windows. PCE: The HuC6280 timer latch is now loaded with an appropriate value on reset. Fixes "Double Dungeons". PCE: Added generic PC Engine save RAM emulation. 0.3.0 Added PC Engine and SuperGrafx emulation. Save states are now compressed and encapsulated in gzip-format files. NES: Fixed display rectangle setting code that was causing screenshots from PAL games to be cut off at the top and bottom. NES: Added an iNES header correction entry for "Gauntlet 2", to clear the four-screen bit. NES: Added support for configuring NES gamepads 3 and 4 from within the emulator(during emulation), mapped to key combinations "F4" and "Shift + F4", respectively. Fixed virtual input device configuration from the command-line(it was segfaulting before because the code was dereferencing a null pointer). 0.2.2: Fixed a few problems with '#ifdef's when compiling on an MSB-first platform, though I still haven't tested Mednafen on such a platform... NES: Fixed a nasty bug in the iNES loading code(the list of known bad ROM images wasn't terminated with a NULL entry) that could cause segmentation faults on startup in some situations. NES: A slightly faster version of the sprite priority handling+blitting code is now compiled when a 64-bit CPU is "detected" by: #if (SIZEOF_LONG == 8) (is this the correct way to determine whether or not the cpu has native 64-bit integer support? I know it works ok on x86 and x86_64, but what about SPARCs? :b) NES: Rewrote portions of the sprite rendering and priority comparison code to use simpler logic. 0.2.1: GBA: Converted the DMA registers into arrays, rather than having them as a gazillion different variables. GBA: Replaced the if() alpha-blending clamping mechanism with a simple LUT. GBA: Removed some apparently unnecessary if() statements in the graphics rendering code. GBA: Made a few experimental optimizations to the graphics rendering code( >> 24 changed to & 0xFF000000 in some of the priority comparison code). GBA: Played around with some optimizations in the "gfxDrawTextScreen" function. GBA: Restructured the CPU emulation code, so I don't have to recompile one giant file when I make a small change(and so it doesn't use totally obscene amounts of RAM during compilation). GBA: The sound flushing routine was returning and setting the wrong values, totally breaking the speed-throttling code. Fixed. GB: Slightly increased the video contrast and brightness of the original GameBoy's emulation. GBA: Extended the BLIP buffer size, fixing a startup emulator crash with "Midway's Greatest Arcade Hits", and possibly other games. Updated the documentation with better explanations in a few areas, and fixed a few errors. 0.2.0: (Sorry, I lost track of changes, but... 0.2.0 is kind of like an entirely new emulator! :b) 0.1.1: SDL_QUIT events are now handled properly. Increased the default fast-forward speed to 4x. Fast-forwarding will now invoke the emulation frame-skip code, to achieve much higher fast-forwarding speeds. Fast-forwarding with frame skipping code may break some games, but I haven't encountered any yet... Jitter correction is now done when configuring virtual input devices and command keys, and the button pressed is on a physical joystick/gamepad. This is particularly necessary for some(all?) analog joysticks connected via the ancient gameport interface on the PC, at least under Windows 98 ;). Various code cleanups and subtle usability fixes. The "cheats" subdirectory under the Mednafen base directory is now created on startup(broken in 0.1.0). Fixed sound code used when expansion channels are used and the internal pre-downsample target format is floating-point. Added error condition checks and more verbose error messages to various pieces of code. Implemented a modified version of the old PPU rendering code that is used when it is safe to do so. This helps to offset the increased CPU requirements of the new code. The command-line option "-nothrottle" works again. Joysticks are now configured by a unique hash id, instead of by index number. This should help if people install or uninstall joysticks. It has not been tested, but the code structure was copied from the old Win32 port of FCE Ultra, so it should work. Note that this change will break old button configurations in the configuration file from 0.1.0. Fixed mapper 19's(Namco 106) expansion sound. It now actually outputs sound(broken in 0.1.0)! Rewrote large parts of the PPU rendering code to be more accurate, and slower. :/ This fixes Final Fantasy's "orb lighting" effect, and Micro Machines' title screen, among others. Reads from $2004 will now return something meaningful to the games "Bee 52" and "Micro Machines"(it returned nothing meaningful before, so it shouldn't break anything). This, combined with the correct background palette selection used when sprites and background are disabled, fixes some graphical issues in Micro Machines and Bee 52. Internal text rendering will now truncate strings that are too long to fit on the screen (an issue with NSFEs and song titles...). Is there a better, sane way to deal with this? Added support for loading NSFE files, and made changes to the NSF player to display more information if it's available. file.cpp: The FCEU_f* wrapper functions will now always load the entire file into memory on FCEU_fopen(). I hope people don't do something silly like trying to load a 1GB file of garbage. ;) I might add mmap() capabilities in the future. Reworked the UNIF/FDS/iNES/NSF file loading code. Removed the "en" translation from the po directory, since it was a bit...redundant or silly. If you did a "make install" with 0.1.0, you should run a command like: rm /usr/local/share/locale/en/LC_MESSAGES/mednafen.mo Fixed a compile-time error in general.cpp when the asprintf() emulation function is used. Replaced the SDL WM icon with a scaled image of the Mednafen Beetle. Fixed the Super24-in-1 bootleg cart board emulation by removing a line of silly debug(?) code. Added FCEU_indent() function, for use with FCEU(I)_printf(), to automatically set indentation for newlines, rather than having it in the format strings directly. This should make strings in the gettext catalogs more manageable. config.h is now used instead of passing gobs of defines on the command-line to g++/gcc. Added code and an MDFNI_* interface to set the sound speed multiplier from the driver code, and modified the driver code to use it. This is MUCH better than the method used in 0.1.0, which was just telling FCE Ultra to reinitialize sound at a different rate whenever fast forwarding started and stopped(which caused clicking). The sprite hit flag will no longer be set if the sprite hit would occur on pixel column 255, which matches behavior on the NES. 0.1.0: Miscellaneous things I've forgotten about. Command-keys and virtual input devices are now configurable while a game is running. gettext is now used to provide message lookup services. Implemented crude Unicode rendering of internal in-game text messages, and several fixed-width fonts covering most western languages, Japanese, Chinese, and Korean. Added 2xSaI, Super2xSaI, and SuperEagle video filters, and reordered the integer->filter mappings(used on the command line). Should I parse for a string instead of an integer on the command-line? Converted Mednafen to compile with GCC's C++ compiler, though no advanced C++ features are used yet. Fixed mapper 165 emulation with code from CaH4e3. VS Unisystem and Famicom Disk System commands are now saved in recorded movies. Video blits and special effects are now done in a thread separate from the game emulation and sound output thread. Command keys are now user-configurably(wow, it happened before the 22nd century!). Fixed emulation of MMC5's $5130 register. Fixed sound sweeping emulation; thanks to blargg. Corrected the behavior of mapper 144 to match what the hardware does regarding bus conflicts. Removed the low quality sound emulation code, and replaced the old high-quality sound emulation filter code with newer code that can output to arbitrary rates and uses SIMD instructions if available. Fixed a rather stupid bug that could break loading of certain non-bankswitched NSFs. -- 0.9.16-WIP: -- December 31, 2010: PCE: Re-enabled the VDC wait-state-limiting kludge, with some tweaks, to prevent hypothetical emulator crashes. PCE: Added a FIFO to buffer the CD subchannel data. Fixes CD+G playback, which was broken when VRAM access wait stating was implemented. Adjusted a few setting descriptive texts, for the automatically-generated documentation. December 29, 2010: Added setting aliases, allowing old setting names to be used in the settings file(though the new setting name will be saved back to the setting file, not the old name) and on the command line. Currently, settings renamed since December 15, 2010 have old setting name aliases. (Note: This of course doesn't apply to the numerous removed settings since 0.9.15). Renamed settings: frameskip -> video.frameskip glvsync -> video.glvsync (Might want to rename this to video.opengl.vsync or video.driver.opengl.vsync in the future) fs -> video.fs vdriver -> video.driver December 26, 2010: Added "gama" atom to recorded QuickTime files. Added setting "qtrecord.vcodec", and added support for the QuickTime PNG codec. Possible values for this setting are "raw", "cscd", and "png", with the default being "cscd". Added "ftyp" atom writing to the beginning of QuickTime files created. Class-ified PNG writing code, and fixed a bug from when the filesys.fname_* settings were added that broke screen snapshots. Wrote new MS WAV file recording code to replace the old code that relied on libsndfile. This allows sound recording to function even when Mednafen is compiled without libsndfile. December 25, 2010: Fixed various problems with the QuickTime writing code. VLC and the official Apple QuickTime player can now play the files Mednafen produces(though not necessarily the video component in the Apple QuickTime player). open() in the FileWrapper class is now passed with flag O_BINARY if it's defined. Fixes QT recording on MS Windows. Creation and modification timestamps in QuickTime files produced are now filled with the time of recording start, rather than being left at 0. Adjusted the QuickTime matrix calculation used for aspect ratio correction. Added settings "qtrecord.w_double_threshold" and "qtrecord.h_double_threshold". Users on slower systems, or those who are transcoding via full-featured software after recording, may want to set these to 0. December 24, 2010: Mednafen is now compiled with largefile support enabled on 32-bit platforms(Win32 kind of included, its largefile support is...DIFFERENT), though it is currently only necessary for QuickTime movie recording. Added experimental QuickTime movie recording support via the -qtrecord command-line switch. Video data is encoded via the CamStudio codec(this may cause problems for Apple's QuickTime player software, as this codec is typically not used in QuickTime containers AFAIK), audio data is raw. A few auxillary atoms were left out, and may or may not need to be implemented in the future. MPlayer, ffmpeg, and Youtube seem to be able to handle the files produced, though MPlayer has occasional random A/V sync issues(at least for me). The version of VLC I have installed can play the video, but aspect ratio correction and audio playback are broken. Removed the custom MMM-format recording and playback. Added lcm_width and lcm_height members to the MDFNGI struct, to aid in video recording(and perhaps other uses in the future). December 19, 2010: Added "%%" specifier to filesys.fname_* parser. Fixed a couple of deadlock bugs in the signal handler, though the probability of them having been encountered during normal Mednafen use is very low. sigaction() will now be used instead of signal(), if available. Fixed strerror_r() usage(AGAIN, hopefully corectly this time) on non-glibc platforms. December 18, 2010: Renamed settings: nethost -> netplay.host netport -> netplay.port netpassword -> netplay.password netlocalplayers -> netplay.localplayers netnick -> netplay.nick netgamekey -> netplay.gamekey netmerge -> netplay.merge netsmallfont -> netplay.smallfont Updated QuickLZ from 1.2.0 to 1.3.1. (1.4.1 seems to have some kind of a performance regression, at least how it's used in Mednafen), and changed the default value for the "srwcompressor" setting from "minilzo" to "quicklz". December 17, 2010: Renamed settings: sounddriver -> sound.driver sounddevice -> sound.device soundrate -> sound.rate soundvol -> sound.volume soundbufsize -> sound.buffer_time Added filesys.fname_movie, filesys.fname_state, filesys.fname_sav, and filesys.fname_snap settings. These settings contain a format string, and through manipulation of this format string, the previous functionality of "dfmd5", filesys.*_samedir, and "snapname" settings can be obtained. For example, remove the "%M" specifier to simulate setting the "dfmd5" setting to 0. Available specifiers: %b - Mednafen base directory (no trailing slash) %z - Path separator %d - Loaded file base directory("/games/nintendo/megaman.nes" -> "/games/nintendo") %f - File base("/games/nintendo/megaman.nes" -> "megaman") %F - Same as %f, but replaced with emulation module's short name with recognized multi-CD CD sets. %m - MD5 hash of the currently loaded game. %M - Empty for first evaluation per full path construction, then filled with the game's MD5 hash(or the game set's MD5 hash ID for multi-CD CD sets) followed by a period. %e - Loaded file extension("/games/nintendo/megaman.nes" -> ".nes") %s - Current emulation module's short name. %p - Special parameter(usually a number/numeric counter). %x - Default extension for the file type the path will be used for(extension is WITHOUT the period). %X - A merging of %p and %x(replaces the last character of %x with %p). If the constructed path is relative, it will be appended to the Mednafen base directory and value of the filesys.*_path settings automatically. If the constructed path is absolute, this appending will not occur. Removed setting dfmd5. December 16, 2010: Removed the filesys.*_samedir settings, as they're largely unnecessary, can cause file corruption in certain cases, and generally cause filesystem clutter. Removed the "snapname" setting(it's now hardcoded-on, effectively), and altered the snapshot naming template to produce filenames that will be sorted correctly when in a list(IE in a file browser). NES: Added hashes of alternate VS SMB and VS The Goonies ROM images into the internal VS Unisystem database. NES: Cleaned up palette-handling code, and updated the VS System palettes. December 15, 2010: NES: Added rudimentary bus conflict emulation to mapper 3, to fix corrupt graphics in Cybernoid. Removed the "pce.colormap", "pce_fast.colormap", "nes.cpalette", and "gba.colormap" settings. Custom palettes will automatically be loaded if they're named "pce.pal", "pce_fast.pal", "nes.pal", and "gba.pal" respectively, under the "palettes" directory under the Mednafen base directory. All of these systems can now use custom per-game palettes by name a palette file as "Mega Man 4.db45eb9413964295adb8d1da961807cc.pal". Using the form that includes the MD5 hash is preferred, to prevent conflicts between games on different systems with the same filenames, and conflicts with the custom palette for all games on an emulated system. Renamed path_snap, path_sav, path_state, path_movie, path_cheat, path_palette, path_firmware to filesys.path_*, changed the interpretation of the path so that if the path is relative, it is relative to the Mednafen base directory, and filled in the default values for these settings as the Mednafen default directories("sav", "mcs", "mcm", "snaps", etc.). Changed the directory used for custom NES palettes from "gameinfo" to "palettes", since that was the only thing the directory was being used for. Changed MDFN_Thread and MDFN_Mutex structs to forward declarations. December 13, 2010: Fixed a rather insidious bug with the 64-bit little-endian decoding function(bug was due to a misunderstanding of implicit type promotion rules). This fixes some (potential) issues with MMM playback, and RTC clock corruption when loading the GameBoy MBC3 mapper's RTC data from a sav file. Added MasterClock and MasterCycles fields to the MMM format. This change is incompatible with previously-recorded MMM movies. Added MasterCycles setting on the remaining systems. December 12, 2010: PCE: Implemented mid-frame synching and input updating(at this point, it only happens twice per frame, IE only once "in the middle"), although it can be extended to more points very easily in the future if the need should arise. This should reduce input latency by up to 8ms in cases not improved by the previous change(below), and allows "Takeda Shingen" to be playable. Mid-frame sync required a lot of code refactoring and kludging, Mednafen was definitely not designed nor written with this feature in mind, so it's possible some things may be broken now when using the PCE module/emulation; for example, rewinding while movie recording is active might corrupt the movie. Also, mid-frame syncing isn't done while netplay is active, so "Takeda Shingen" will remain unplayable in netplay. PCE: Altered frame end timing slightly to reduce input lag on some games by 1 frame. SNES: Reduced input latency by 1 frame(~16.67ms). If the MEDNAFEN_HOME environment variable is either unset or empty, and the HOME environment variable is unset, and getuid() and getpwuid() are available, the home directory used in consructing Mednafen's base directory will now be obtained from the system password file via getpwuid(). Rewrote most of the speed throttling and frameskip determination code to be cleaner, and made a few minor tweaks to the algorithms. December 9, 2010: Being in the input configuration process will now disable all emulated device input during the process, and until 300ms after it ends. December 8, 2010: PCE: Rewrote the HES VDC initialization HuC6280 assembly code to work correctly with the new VDC emulation accuracy improvements. Fixed a bug that would prevent exiting if physical CD-ROM reading hung, and the exit key was assigned to a joystick button or a mouse button. Fixed an old kludge/bug that caused keyboard input latency for emulated devices(IE not command keys) to be 1 frame(16.7 ms usually) higher than it should have been. PCE: Improved VRAM DMA emulation accuracy, improved wait state emulation accuracy, added kludgy emulation of a CPU VRAM-access dead zone tied to HSYNC(fixes "Star Breaker" locking up when leaving a town), and improved VDC horizontal timing register emulation. |
Download: Mednafen 0.9.16 WIP
Source: Here
Random Related Topic
0 Comments
Post a Comment