{"id":16313,"date":"2008-10-28T11:26:05","date_gmt":"2008-10-28T11:26:05","guid":{"rendered":"http:\/\/127.0.0.1\/ef\/?p=16313"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T22:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/www.emu-france.com\/?p=16313","title":{"rendered":"[Console] Gambatte v0.4.0"},"content":{"rendered":"<p>Un \u00e9mulateur GameBoy N&#038;B\/Color dont le but est d&rsquo;obtenir une \u00e9mulation la plus pr\u00e9cise possible.<\/p>\n<p>Des am\u00e9liorations tr\u00e8s nombreuses:<\/p>\n<p><code><strong>libgambatte:<\/strong><br \/>\n    - less fixed-width type dependencies. don't assume unsigned int > 16 bits<br \/>\n    - slightly faster sprite mapping<br \/>\n    - Skip potential high frequency events when they don't matter.<br \/>\n    - do sprite sorting and cycle calculations pr line as needed instead of all<br \/>\n      at once<br \/>\n    - fix broken volume on\/off event notification<br \/>\n    - less int > 16-bits assumptions<br \/>\n    - more type width dependency fixes<br \/>\n    - int width deps. Gambatte namespace<br \/>\n    - wx affects sprite m3 cycles<br \/>\n    - cache m3 cycles, related refactoring<br \/>\n    - readjust cgb dma cycles to previously changed m3 timing<br \/>\n    - clean up goofy lyc calculation.<br \/>\n    - cgb dma from various areas results in 0xFF being written.<br \/>\n    - 0xFEA0-0xFEFF not writable when OAM isn't<br \/>\n    - unusable ioram bits fixes<br \/>\n    - dmg ioram startup state fixes.<br \/>\n    - various oamdma accuracy<br \/>\n    - oamdma bus conflicts with cpu, ppu, cgbdma.<br \/>\n    - rewritten memory read\/write methods.<br \/>\n    - accurate timing of ppu sprite mapping reads.<br \/>\n    - fix recent cgb sprite cycles sorting slip up.<br \/>\n    - preoffset mem pointers.<br \/>\n    - get rid of unused memory.<br \/>\n    - save state infrastructure,<br \/>\n    - clean up video timing code,<br \/>\n    - use save state for initialization and reset,<br \/>\n    - do color conversion outside filters<br \/>\n    - fast rgb32ToUyvy,<br \/>\n    - add overlooked oamdma event,<br \/>\n    - adjust subcycle irq timing (shouldn't affect anything),<br \/>\n    - various refactoring<br \/>\n    - save savedata before loading state<br \/>\n    - fix silly initstate ifreg regression<br \/>\n    - save state selection<br \/>\n    - save state osd preview snapshots<br \/>\n    - fix a few potential security holes when loading invalid state<br \/>\n    - get rid of some undefined behaviour in statesaver<br \/>\n    - always draw in rgb32, color convert afterwards, too bad for maemo\/16-bit<br \/>\n      depth users<br \/>\n    - get rid of silly c string stuff<br \/>\n    - add bitmap font rendering with font based on Bitstream Vera Sans<br \/>\n    - osd state n saved\/loaded text<br \/>\n    - empty state osd thumbs marked with \"Empty\" text<br \/>\n    - adjust thumbnail interpolation weighing slightly<br \/>\n    - utilize templates for more flexible osd text printing<br \/>\n    - use grey osd text with black outline for save\/load state messages<br \/>\n    - move state 0 OSD pos to rightmost to match kbd layout<br \/>\n    - state 1 default on ROM load<br \/>\n    - support external save state files<br \/>\n    - missing includes<br \/>\n    - missing virtual destructor<br \/>\n    - std::ifstream construction missing binary flag<br \/>\n    - fix gcc-4.3 compilation<br \/>\n    - avoid signed overflow in constant (which is both undefined and likely<br \/>\n      to cause problems on architectures where sizeof(long) != sizeof(int)) in<br \/>\n      rgb2yuv code.<br \/>\n    - Fix wrong pitch passed to filter if color conversion is needed.<br \/>\n    - Fix potential problem with rgb32ToUyvy cache init values on 16-bit systems<br \/>\n    - Correct unhalttime when resetting counters. Fixes perodic infinite halt<br \/>\n      issue in Kirby's Star Stacker and probably other games.<br \/>\n    - Fix LY display disable regression<br \/>\n    - Use deltas and a running sum to decrease buffer writes in sound emulation<br \/>\n      sample generation.<br \/>\n    - Rearrange sound emulation event loop to optimize for high-frequency event<br \/>\n      units.<br \/>\n    - Initialize palette arrays to avoid valgrind noise.<br \/>\n    - Don't do resampling in libgambatte. Update API to reflect this.<br \/>\n    - No rambanks for ROMs that don't request any.<br \/>\n    - Route invalid rombank addresses in non-power-of-2 number of rombanks<br \/>\n      cases to disabled area assuming ceiled power of 2 address bus.<br \/>\n    - no sprites or sprite mapping busy cycles on first line after display<br \/>\n      enable. slight cleanup.<br \/>\n    - small oam accessibility correction.<br \/>\n    - Tile loading and tile rendering can seemingly get out of sync when<br \/>\n      modifying scx at a critical time. Another pessimation with little gain in<br \/>\n      the name of accuracy.<br \/>\n    - Use a look-up table to do tile byte merging.<br \/>\n    - Append \"_dmg\" to save base name when forcing DMG mode, to avoid<br \/>\n      corrupting CGB save files and vice versa.<br \/>\n    - saner ly write behaviour<br \/>\n    - Add adapted and optimized hq3x.<br \/>\n    - Revert to big f'ing switch hq2x code, as there's less duplication now.<br \/>\n      Also optimized interpolation functions further. No idea how I missed that<br \/>\n      initially.<br \/>\n    - Lower opacity OSD text.<\/p>\n<p><strong>gambatte_sdl:<\/strong><br \/>\n    - less retarded indenting<br \/>\n    - saner placement of fill_buffer function<br \/>\n    - int width deps. Gambatte namespace<br \/>\n    - Scalebuffer dstpitch aware.<br \/>\n    - save state selection<br \/>\n    - add number key slot selection shortcuts<br \/>\n    - Estimate actual output sample rate in terms of OS timers<br \/>\n      and derive frame rate from it.<br \/>\n    - Move AudioData and RingBuffer classes to separate files.<br \/>\n    - Make underruns slightly less painful, by resetting buffer<br \/>\n      positions.<br \/>\n    - Skip resampling when fast-forwarding<br \/>\n    - Fill available buffer space before waiting for more.<br \/>\n    - Audio buffer command line options.<br \/>\n    - Use half video frame sleep time if audio buffer is close to underrun.<br \/>\n    - Adjust estimated frame time each frame.<\/p>\n<p><strong>gambatte_qt:<\/strong><br \/>\n    - more likely to build on mac os x<br \/>\n    - Fix fixed window size issues with various window managers (metacity,<br \/>\n      xfwm4...)<br \/>\n    - macx build fixes<br \/>\n    - hopefully fix opengl clearing issues<br \/>\n    - Gambatte namespace<br \/>\n    - Decouple Qt GUI from gambatte.<br \/>\n    - Lots of cleanups, flexibility added<br \/>\n    - setting of various properties, frame time, aspect ratio, button events,<br \/>\n      video sources, sample rates, pauseOnDialogExec, custom menus etc.<br \/>\n    - Document some interfaces.<br \/>\n    - Support for setting approximate sound buffer latency.<br \/>\n    - Use rational math for 100% exact timers (even though the actual system<br \/>\n      timers are unlikely to be accurate).<br \/>\n    - Add fast-forward to input settings.<br \/>\n    - timeGetTime() fallback for win32<br \/>\n    - Store full screen mode values\/text rather than less reliable indexes.<br \/>\n    - Repaint on xvblitter port changes to avoid color key not getting<br \/>\n      repainted.<br \/>\n    - improved ALSA buffer reporting<br \/>\n    - add sampleRate info to MediaSource::setSampleBuffer.<br \/>\n    - clarify that \"samples\" refers to stereo samples<br \/>\n    - fix 24-bit depth non-shm ximage creation<br \/>\n    - fix blittercontainer incorrectly using minimumSize for integer scaling<br \/>\n    - add unrestricted fast bilinear and nearest neighbor sw scaling to<br \/>\n      x11\/qpainter blitter<br \/>\n    - swscale: remove forgotten static qualifiers<br \/>\n    - swscale: center linear weighing bias<br \/>\n    - swscale: exclude iostream<br \/>\n    - swscale: less bloated<br \/>\n    - macx fixed\/variable window size change issue fixed<br \/>\n    - macx opengl drawbuffer change issues worked around<br \/>\n    - add openal engine, default on macx<br \/>\n    - add macx quartz video mode toggler<br \/>\n    - multi-head infrastructure<br \/>\n    - support multiple monitors in macx quartz toggler<br \/>\n    - more work-arounds for Qt failing to set correct geometry on video mode<br \/>\n      changes.<br \/>\n    - more explicit fast-forward button handling, to avoid missed key<br \/>\n      press\/release events on macx<br \/>\n    - opengl doublebuffer preblitting, try to make actual screen updates as<br \/>\n      close to right after sync wait is over as possible<br \/>\n    - add xf86vidmode toggler (xrandrtoggler is default)<br \/>\n    - x11blitter: check for other supported visuals if the default is<br \/>\n      unsupported.<br \/>\n    - temporarily return to original video mode and minimize on full screen<br \/>\n      alt-tab (except on macx or if there are multiple screens), switch back on<br \/>\n      focus-in<br \/>\n    - hide mouse cursor after move timeout, or key\/joystick pressed (more sane<br \/>\n      on macx)<br \/>\n    - exit fullscreen rather than toggle menubar on macx (note that the menubar<br \/>\n      will automatically pop-up on macx full screen if the mouse is moved to<br \/>\n      the top of the primary screen)<br \/>\n    - add (independent) pause counter for non-client pauses.<br \/>\n    - reset X11 screen saver on joystick activity<br \/>\n    - change \"turbo\"-mode to temporarily set frametime as a way of avoiding<br \/>\n      vsync issues (for a laugh, check out the video dialog while in<br \/>\n      fast-forward mode and see \"Sync to vertical blank in 65535 and 131070 Hz<br \/>\n      modes\").<br \/>\n    - fix win32 compilation<br \/>\n    - refix win32 fullscreen geometry correction<br \/>\n    - neater win32 BlitterWidget::sync<br \/>\n    - avoid misleading minimize on fullscreen close<br \/>\n    - refactor Blitterwidget::sync<br \/>\n    - directdrawblitter: remove unecessary turbo conditions<br \/>\n    - gditoggler: add multi-monitor support (win32)<br \/>\n    - videodialog: save actual hz values for real this time<br \/>\n    - quartztoggler: avoid potentially reverting to the wrong mode on double<br \/>\n      setFullMode(false) in multi-head configs<br \/>\n    - make sure window is within screen after mode change, so Qt doesn't reset<br \/>\n      it to the primary screen<br \/>\n    - revert to previous win32 fullscreen geometry correction behaviour so that<br \/>\n      the geometry gets properly reset after fullscreen<br \/>\n    - Add directdraw device selection.<br \/>\n    - directsoundengine: add device selection.<br \/>\n    - directdrawblitter: only list devices if there are more than 2 devices<br \/>\n      (including primary)<br \/>\n    - directdrawblitter: use private static member rather than global friend<br \/>\n      enumeration callback<br \/>\n    - capitalization changes<br \/>\n    - add direct3d9 blitter with support for vsync, bf, page flipping, triple<br \/>\n      buffering, device selection, multi-head etc. d3d9.dll loaded at runtime<br \/>\n    - more strict and thorough exclusive mode handling to support d3d fullscreen<br \/>\n    - work around file open dialog not returning focus properly<br \/>\n    - gditoggler: use current registry settings for return modes<br \/>\n    - directsoundengine: set DSBCAPS_GETCURRENTPOSITION2 flag<br \/>\n    - revert bad macx return from fullscreen on menu-toggle<br \/>\n    - don't build xf86vidmodetoggler by default<br \/>\n    - add save state actions to GUI menu<br \/>\n    - clean up GUI menu creation code<br \/>\n    - move GUI recent files to submenu<br \/>\n    - support external save state files<br \/>\n    - add number key slot selection shortcuts<br \/>\n    - missing includes<br \/>\n    - missing virtual destructor<br \/>\n    - make sure windows path arguments don't use backslashes by using QFileInfo<br \/>\n    - add Play menu with Pause, Frame Step, Dec\/Inc\/Reset Frame Rate<br \/>\n    - Add tab support to input settings dialog.<br \/>\n    - Add alternate key support to input settings dialog.<br \/>\n    - Auto-focus to next likely input box after settings key in input dialog.<br \/>\n    - Add \"Play\" and \"State\" input settings dialog tabs.<br \/>\n    - Avoid using the most convenient keys as forced menu short-cuts, set them<br \/>\n      as default keys in input settings dialog instead. This unfortunately<br \/>\n      makes the more useful shortcuts less visible, but it allows remapping<br \/>\n      the most convenient keyboard keys.<br \/>\n    - Avoid duplicate joystick axis \"press\" events by keeping a map of axis<br \/>\n      states.<br \/>\n    - Make sure to discard irrelevant\/old joystick events.<br \/>\n    - Don't give MediaSource button events when stopped.<br \/>\n    - Allow joystick-based button events while paused by using a very<br \/>\n      low-frequency poll timer.<br \/>\n    - Make some of the joystick event wrapping stuff less messy.<br \/>\n    - missing string include<br \/>\n    - use QString for videoSourceLabel passed to MainWindow constructor<br \/>\n    - store currently selected scheme as string, since it appears ModelIndex<br \/>\n      is neither tied to the data it points to nor invalidated by changes.<br \/>\n      enforce valid state on reject since the list of schemes may have<br \/>\n      changed.<br \/>\n    - Direct3DCreate function pointer typedef needs WINAPI macro<br \/>\n    - disable page flipping dependent checkboxes in constructor to ensure<br \/>\n      correct start state<br \/>\n    - add custom sample rate support<br \/>\n    - change default buffer latency to 67 ms<br \/>\n    - don't auto-repeat buttons bound to keyboard<br \/>\n    - use enums for somewhat more robust gambattesource button setup<br \/>\n    - fix silly \"alsa not using default device by default\" bug<br \/>\n    - Only ask for xrandr config once to avoid potential server roundtrips in<br \/>\n      some xrandr versions.<br \/>\n    - Make sure xrandr version is >= 1.1 and < 2\n    - Prevent all text editing of input boxes.\n    - Add custom context menu to input boxes.\n    - Update AudioEngine to support sample rate estimation in terms of OS\n      timers.\n    - Implement sample rate estimation in ALSA and OSS audio engines.\n    - AlsaEngine: Revert to using snd_pcm_avail_update for buffer status since\n      snd_pcm_delay may consider external latencies.\n    - AlsaEngine: Use snd_pcm_hw_params_set_buffer_time_near. Don't request a\n      particular number of periods per buffer.\n    - AlsaEngine: Use hw as default custom device string, rather than hw:0,0.\n    - OssEngine: Don't trust GETOSPACE fragment info.\n    - Estimate optimal frame rate based on sample rate estimations.\n    - Extend BlitterWidget to support estimation of vsynced frame rate in terms\n      of OS timers.\n    - Implement vsync frame rate estimation in QGlBlitter, Direct3DBlitter and\n      DirectDrawBlitter.\n    - Use a combination of OS timer sample rate estimation and vsync frame rate\n      estimation to derive resampling ratio for no-frame-duplication vsync.\n    - Change API to reflect MediaSources not being responsible for resampling.\n    - Make sure to parent PaletteDialog list model, so it gets deleted properly.\n    - Various refactoring, small changes and stuff I forgot.\n    - limit vsync frame rate estimation deviation\n    - More averaging in estimation code.\n    - Stricter estimate deviation limit\n    - Adjust estimated frame time each frame.\n    - Use half frame time if audio buffer is close to underrun.\n    - Provide combined audioengine write and status get, to avoid doing\n      potentially expensive operations twice. Utilized in OSS and ALSA engines.\n    - Saner vsync estimate variance protection.\n    - allow dynamically setting samples per frame\n    - Don't bother allowing sources the choice of which output sample rates are\n      selecrable, as it's not really a per source thing at this point. If\n      resampling avoidance is desired, then that should rather be a user option\n      (to depend on the OS for resampling, which is mostly nonsensical for the\n      Game Boy\/NES\/PSG-system case btw).\n    - Move Qt media framework to a separate subdir\n    - postpone buffered x11 blits to after sync.\n    - Add support for XRandR 1.2 + multi-head\n    - use crtc mode dimensions rather than crtc dimensions when discarding\n      modes since crtc dimensions may be rotated\n    - Fractional bits for intermediate rate estimation averages.\n    - Add RateEst reset method. Initialize RateEst count to 1.\n    - Less refresh rate estimation averaging.\n    - Allow more refresh rate estimation deviation.\n    - Return NULL paintEngine in windows blitters that use the PaintToScreen\n      attribute.\n    - Add checks for things not being initialized in DirectDraw-blitter and\n      QPainterBlitter paintEvents.\n    - Don't reparent blitters (mainly to make a bug in Qt 4.4.3 win less\n      annoying, widgets that do internal reparenting are still affected).\n    - Check for window position less than screen top-left after mode change,\n      before full screen, to avoid Qt moving it to the primary screen.\n    - Add rate estimation to DirectSound engine.\n    - Better underrun detection in DirectSound engine.\n    - Don't duplicate blitter pointer in mainwindow.\n    - Use RateEst.reset rather than re-initing on pause.\n    - Add CoreAudio engine with rate estimation and buffer status support.\n      Default engine on Mac OS X.\n    - 44100 Hz default sample rate on OS X, since OS X tends to resample\n      everything to 44100 Hz.\n    - Get rid of buffer status averaging in OpenAlEngine, since it makes\n      assumptions on usage pattern that shouldn't be made.\n    - Fix CoreAudio engine reporting buffer status in samples rather than\n      frames.\n    - Update SDL_Joystick to SDL-1.2 SVN.\n    - #undef UNICODE in win32\/SDL_mmjoystick.c to avoid joystick name mangling.\n    - work around annoying random non-updating OpenGL on Mac OS X after full\n      screen.\n\n<strong>common\/other:<\/strong><br \/>\n    - Fix GCC 4.3 warnings about people getting confused by operator precedence<br \/>\n      by adding parentheses.<br \/>\n    - Real-time, sophisticated resampling framework with several<br \/>\n      performance\/quality profiles for dynamically generated windowed sinc and<br \/>\n      CIC chains based on analysis of fourier transforms and optimal cost<br \/>\n      equations. Fast 2-tap linear as a low quality alternative.<br \/>\n    - Move non-emulation common code to a common directory to avoid duplication.<br \/>\n    - Update front-ends to new libgambatte API.<br \/>\n    - Utilize resampling framework in front-ends. Selectable resamplers.<br \/>\n    - Improved adaptive sleep class that estimates oversleep.<br \/>\n    - Various refactoring, small changes and stuff I forgot.<br \/>\n    - Do per phase normalization to avoid dc fluctuations.<br \/>\n    - More averaging in estimation code.<br \/>\n    - Stricter estimate deviation limit<br \/>\n    - Fractional bits for intermediate rate estimation averages.<br \/>\n    - Add RateEst reset method. Initialize RateEst count to 1.<br \/>\n    - Extend ringbuffer.h to support resetting size, and move it to common dir<br \/>\n      since gambatte_qt\/coreaudioengine uses it too now.<br \/>\n    - Add \"force DMG mode\" option.<br \/>\n    - Allow more rate estimation deviation.<\/p>\n<p><strong>hwtests:<\/strong><br \/>\n    - wx affects sprite m3 cycles.<br \/>\n    - cgb dma from various areas results in 0xFF being written.<br \/>\n    - add hwtests for oam dma<br \/>\n    - m3 cycles wo bg<br \/>\n    - more oamdma tests<br \/>\n    - various oamdma accuracy. oamdma bus conflicts with cpu, ppu, cgbdma.<br \/>\n    - accurate timing of ppu sprite mapping reads.[\/CODE]<\/p>\n<p class=\"p_telecharger_icone_zip\"><a class=\"telecharger_icone_zip\" href=\"https:\/\/www.emu-france.com\/?wpfb_dl=2934\" title=\"Download Gambatte\">T\u00e9l\u00e9charger Gambatte v0.5.0 r571 (2.0 Mo)<\/a><\/p>\n<p class=\"p_site_officiel\"><a href=\"http:\/\/sourceforge.net\/projects\/gambatte\/\" class=\"site_officiel\" target=\"_blank\">Site Officiel<\/a><\/p>\n<p class=\"p_en_savoir_plus\"><a href=\"https:\/\/www.emu-france.com\/emulateurs\/5-consoles\/62-nintendo-game-boy\/\" class=\"en_savoir_plus\">En savoir plus...<\/a><\/p>\n<div class=\"fcbkbttn_buttons_block\" id=\"fcbkbttn_left\"><div class=\"fb-share-button  \" data-href=\"https:\/\/www.emu-france.com\/?p=16313\" data-type=\"button_count\" data-size=\"small\"><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Un \u00e9mulateur GameBoy N&#038;B\/Color dont le but est d&rsquo;obtenir une \u00e9mulation la plus pr\u00e9cise possible. Des am\u00e9liorations tr\u00e8s nombreuses: libgambatte: &#8211; less fixed-width type dependencies. don&rsquo;t assume unsigned int > 16 bits &#8211; slightly faster sprite mapping &#8211; Skip potential &#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[],"tags":[],"class_list":["post-16313","post","type-post","status-publish","format-standard","hentry","uentry","postonpage-1","odd","post-author-Jets"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/sKi2R-","jetpack_likes_enabled":false,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/posts\/16313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16313"}],"version-history":[{"count":0,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/posts\/16313\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.emu-france.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}