Gambatte Changelog

What's new in Gambatte 0.4.1

Jan 12, 2009
  • libgambatte:
  • Fix HqXx filter pitch.
  • Fix mbc2 not getting a rambank.
  • Make sure to reset passed pointers when deleted. Fixes potential crashwhen loading ROM during OAM busy.
  • common:
  • Substantially improved rate estimation averaging.
  • RateEst: Add a convenient way of filtering measures that extend beyonda buffer time, and are as such probably invalid.
  • RateEst: Allow using a custom timestamp in feed().
  • RateEst: Keep a queue of the last ~100 msec worth of samples andduration, and filter out collective samples that give a pre-estimatethat seems way off.
  • Replace "Game Boy / Game Boy Color emulator" with "Game Boy Coloremulator" for now to avoid misleading anyone on the current status.
  • gambatte_qt:
  • Disable BlitterWidget updates (paintEvents) while not paused.
  • Allow BlitterWidgets to opt in to get paintEvents while unpaused. Do sofor QGLBlitter since it may need to clear buffers afterwards.
  • QGLBlitter: Try to blit right after sync in the case of single buffering.
  • Up default audio buffer latency to 100 ms (some common system audioservers require a lot of buffering to work well).
  • Adaptively skip BlitterWidget syncs if audio buffer is low, in a mannerthat should minimize wasted skips in sync to vblank situation, and triesto be non-disturbing. This replaces frame time halving, and blitterspecific rescueing.
  • Clear display buffers in DirectDrawBlitter and Direct3DBlitter inexclusive mode, since blits don't necessarily cover the entire buffers.
  • DirectDrawBlitter: Make sure that a minimum amount of time has passedbetween calls to WaitForVerticalBlank, since it can return in the samevblank period twice on a fast system.
  • DirectDrawBlitter: Support vsync for refresh rate ~= 2x frame rate.
  • DirectDrawBlitter: Refactor somewhat and get rid of a couple minorpotential bugs.
  • DirectDrawBlitter: Some tweaks to get updates closer to sync time incertain situations.
  • DirectDrawBlitter: Some tweaks to better support DONOTWAIT.
  • DirectDrawBlitter: Make only updating during vblank while page flippingoptional.
  • Direct3DBlitter: Some tweaks to get updates closer to sync time incertain situations.
  • Filter out very short frame times in frame time estimation.
  • Don't adjust frame time during turbo, but rather skip BlitterWidgetsyncs to speed up, which avoids vsync limits without disabling vsync.
  • DirectDrawBlitter: Add triple buffering option.
  • Direct3DBlitter: Use D3DSWAPEFFECT_DISCARD in non-exclusive mode.
  • Direct3DBlitter: Allow triple buffering and vblank-only updates innon-excusive mode.
  • Rename "Page flipping" in Direct3D and DirectDraw blitters to"Exclusive full screen".
  • Pause audio on win32 titlebar clicks/drags to avoid looping audio due tounderruns from blocked timerEvents.
  • Use wildcards for platform detection to avoid being unnecessarilycompiler/architecture specific. Fixes bug 2377772.
  • Rewrite most of DirectSoundEngine, supporting primary buffer option,making it more robust, correct and hopefully cleaner. Only use part ofthe primary buffer if the desired buffer size is lower than theprimary buffer size.
  • Direct3DBlitter and DirectDrawBlitter: Force blocking updates when syncto vblank is enabled. Some updates only block if there's a priorunfinished update in progress. This screws up frame time estimation inturn screwing up vsync. To fix this we do a double update (and extra blit)if close to a frame time period has passed since the last update whensync to vblank is enabled. I really should have noticed this earlier asit pretty much breaks vsync adaption completely.
  • Direct3DBlitter: Use the D3DCREATE_FPU_PRESERVE flag when creatingdevice. Omitting this flag can screw up floating point calculations inother parts of the code. For instance WASAPI cursor timestamps getutterly screwed up here.
  • Direct3DBlitter: It appears that managed textures are updated beforethey are unlocked, which screws up redraws, making things appear choppyin some situations. Use a default memory texture and a system memorytexture and the UpdateTexure method instead.
  • DirectSoundEngine: Make use of the sample period limit feature ofRateEst, rather than duplicating the feature.
  • Add polling WASAPI engine with exclusive mode support. Latency and rateestimation is generally better than DirectSound, and in exclusive modethere is less blocking as well as exclusive mode being better thanshared mode in the other areas too.
  • WasapiEngine: Add device selection.
  • WasapiEngine: Add static isUsable() method. Only listed if isUsable().Default engine if isUsable().
  • WasapiEngine: Use default device if there's only one device available,since we don't show the combobox anyway.
  • DirectSoundEngine: Provide the integrated read and status get writemethod optimization.
  • XvBlitter: Set NosystemBackground attribute rather than OpaquePaintEvent. Reimplement paintEngine to return NULL as suggested by Qt docs.
  • X11Blitter: Reimplement paintEngine to return NULL.
  • AlsaEngine: Make use of sample period limit feature of RateEst. Don'tincrease estimated sample rate on underrun.
  • OssEngine: Make use of sample period limit feature of RateEst. Don'tincrease estimated sample rate on underrun.
  • Esc exits fullscreen on macx.
  • Drop OpenAL from default macx binary.
  • Add some useful but commented build flags for macx to .pro files.

New in Gambatte 0.4.0 (Oct 29, 2008)

  • WX register affecting PPU sprite timing.
  • Lots of OAMDMA timing stuff, including bus conflicts with the CPU, PPU and H/GDMA.
  • Cycle-accurate PPU sprite mapping reads.
  • Fixed a bug where the unhalt event timer wasn't corrected on cycle counter reset which could cause games to freeze in an almost endless halt (cycle counter reset happens every few minutes).
  • More accurate PPU tile loading / rendering pipelining behavior.
  • Save states with OSD thumbnails, text etc.
  • Real-time, sophisticated resampling framework with several performance/quality profiles for dynamically generated windowed sinc and CIC chains based on analysis of fourier transforms and optimal cost equations. Fast 2-tap linear as a low quality alternative.
  • Lots of Mac OS X improvements, Core Audio, video mode switching.
  • Multi-monitor support.
  • Play menu with Pause, Frame Step, Dec/Inc/Reset Frame Rate.
  • New and improved input dialog with many key mapping choices, alternate keys, etc.
  • Direct3D9 video engine, with page flipping, triple buffering, vsync, device selection, etc.
  • Seperate Qt GUI/media framework code from Gambatte specific code.
  • New audio/video timing model based on rate estimations in terms of OS timers.
  • Custom sample rate and approximate buffer latency choice.
  • Hq3x.
  • Force DMG.

New in Gambatte 0.3.1 (Jan 30, 2008)

  • Actually enable joystick POV-hat events.