Gambatte 0.5.0-wip2 released

Announce new emulators, discuss which games run best under each emulator, and much much more.

Moderator: General Mods

Post Reply
kick
Trooper
Posts: 550
Joined: Wed Mar 01, 2006 8:47 pm

Re: Gambatte 0.4.1 released

Post by kick »

sinamas wrote:While the wave hq output may allow you to bypass the hardware DSP, using DirectSound instead of WASAPI means that you pass through an additional software DSP layer instead.
Even if tthe sound passes through that layer, the Win7 resampler does a much better job than the 'hardware' one performed by the DSP (the hardware DSP always resamples to 48kHz even if you feed it 48kHz audio).
DirectSound in Vista/7 means additional buffering/latency and that less precise statistics are reported back to gambatte for audio/video timing.

I'm not convinced that XAudio2 has any benefit over DirectSound for streaming.
It has noticeably lower latency. Try comparing XAudio2 vs. DirectSound in VisualBoy Advance or Dolphin-Emu, for example.
24 bit has no benefit, as gambatte outputs 16 bit samples anyway.
I know that. It's just the HQ output always operates at 24bits (20 bits effective).
Are you sure that only shared mode works with the AC97* output? Because that's not expected behavior.
It's a weird driver issue. I did another test on Win7 32-bit:

* AC3/SPDIF output: WASAPI shared mode works (48kHz), sound is fine. WASAPI exclusive: no sound
* Master Mixer output: No sound or error message (sound engine failure) with WASAPI shared / exclusive
* Wave HQ output: Error message (sound engine failure) with WASAPI shared / exclusive

NOTE: It's 'AC3/SPDIF', not AC'97

With other apps, XAudio2 and ASIO output works fine. Only WASAPI has issues.
The "horrible desyncs", that you didn't bother to explain, may be related to your combination of audio settings and audio drivers.
Here's how to reproduce that issue:

Set the sound output in gambatte 0.4.1 to DirectSound, latency = 40ms, global buffer=OFF.
Load Tetris DX and choose 'Marathon Mode'.
Now open the Windows 'Playback Devices' window and resume playing Tetris DX in Marathon Mode. The green volume level meter(s) in the playback devices window should move. After playing a bit, click 'PrintScreen' to take a screenshot. Play a bit more. gambatte should desync horribly. The only way to get the emulator back in sync is to open the emulator sound options and 'reset' the output.
Last edited by kick on Sat Feb 26, 2011 11:17 pm, edited 4 times in total.
[i]Have a nice kick in da nutz[/i] @~@* c//
kick
Trooper
Posts: 550
Joined: Wed Mar 01, 2006 8:47 pm

Re: Gambatte 0.4.1 released

Post by kick »

Previous post updated (more info on the desync issue and audio driver issues)
[i]Have a nice kick in da nutz[/i] @~@* c//
sinamas
Gambatte Developer
Gambatte Developer
Posts: 157
Joined: Fri Oct 21, 2005 4:03 pm
Location: Norway

Re: Gambatte 0.4.1 released

Post by sinamas »

It's possible that ASIO does some more format conversions than WASAPI. Your drivers probably don't accept 16-bit stereo (I assume you tried different sample rates).

The desync issue sounds like a driver issue or a windows issue. 40 ms is pretty low for DirectSound on Vista/7 btw., I would expect issues. I still don't know what you mean by "desync".
kick
Trooper
Posts: 550
Joined: Wed Mar 01, 2006 8:47 pm

Re: Gambatte 0.4.1 released

Post by kick »

sinamas wrote:It's possible that ASIO does some more format conversions than WASAPI. Your drivers probably don't accept 16-bit stereo (I assume you tried different sample rates).
That's probably true: Since the WaveHQ output always operates at 24bit, it may need a different bitdepth (24-bit or 24-bit padded to 32-bit) to work with WASAPI.

ASIO out:
In 16b/48k mode, the output is 16bit (now this one is interesting, no bitdepth conversion here)
In 24b/48k mode, it uses 32-bit output (24-bit padded to 32-bit)
The desync issue sounds like a driver issue or a windows issue. 40 ms is pretty low for DirectSound on Vista/7 btw., I would expect issues. I still don't know what you mean by "desync".
Desync = the sound begins to skip badly and doesn't recover after a while (it doesn't re-sync after a while like in bsnes, for example).
[i]Have a nice kick in da nutz[/i] @~@* c//
sinamas
Gambatte Developer
Gambatte Developer
Posts: 157
Joined: Fri Oct 21, 2005 4:03 pm
Location: Norway

Re: Gambatte 0.4.1 released

Post by sinamas »

Use bad options -> get underruns.

Yeah, I suspect it's the number of channels, and there's no way I'm doing manual upmixing, or your drivers are just plain broken wrt WASAPI.
sinamas
Gambatte Developer
Gambatte Developer
Posts: 157
Joined: Fri Oct 21, 2005 4:03 pm
Location: Norway

Re: Gambatte 0.5.0-wip1 released

Post by sinamas »

Gambatte 0.5.0-wip1 aka SVN r271 released

Win32: gambatte_qt-0.5.0-wip1.exe
OS X: gambatte_qt_macx-0.5.0-wip1.zip
Linux Qt x86: gambatte_qt_linux_i386-0.5.0-wip1.gz
Linux SDL x86: gambatte_sdl_linux_i386-0.5.0-wip1.gz
Source: gambatte_src-0.5.0-wip1.tar.gz

For those that like to build from source:
Gambatte SVN trunk is most of the time better than the latest release in every way, so there's usually no reason to wait for a release if you want the latest.
Use http://gambatte.svn.sourceforge.net/vie ... /?view=tar to get the latest source from SVN.
sinamas
Gambatte Developer
Gambatte Developer
Posts: 157
Joined: Fri Oct 21, 2005 4:03 pm
Location: Norway

Re: Gambatte 0.5.0-wip1 released

Post by sinamas »

WIP1v2 (r273) adds support for WASAPI surround mix mode (upmixing), which should fix WASAPI shared mode for those who have a surround mix format configured.

Win32: gambatte_qt-0.5.0-wip1v2.exe
motke
New Member
Posts: 5
Joined: Wed Nov 24, 2010 6:07 am

Re: Gambatte 0.5.0-wip1 released

Post by motke »

I'm curious to see the complete changelog since 0.4.1.
sinamas
Gambatte Developer
Gambatte Developer
Posts: 157
Joined: Fri Oct 21, 2005 4:03 pm
Location: Norway

Re: Gambatte 0.5.0-wip1 released

Post by sinamas »

Heh, here's a slightly edited SVN log for ya.
The biggest changes usually get the smallest log entries.

- Support shared mode WASAPI surround mix format.
- Add GBA CGB mode option.
- Add save path selection.
- Stop using different file name for save files when forcing DMG.
- Set worker thread MMCSS priority to "Audio".
- Flush audio on ROM load to avoid noise from previous ROM when switching.
- Dont re-initialize on resetAudio for engines that drain when paused.
- Deactivate undesired menu options on ROM load fail stop.
- Use fast, fail-safe ROM reset.
- reenable some printing on load fail due to unsupported mbc.
- Be less sensitive when configuring joystick input.
- Use event-driven scheduling for shared mode WASAPI.
- Include 96000 Hz as a sampling rate listed by default.
- Separate vsync option for exclusive full screen because it tends to work
better, so you may want to enable it while leaving non-exclusive vsync off.
- Add some tool tips.
- Work around DWM compositor screwing up when duplicating frames by adding
"DWM triple buffering" option (on by default) which sets presentparameters
with frame queueing for all blitters.
- Work around DWM breaking windows with frame queuing after composition is
disabled and re-enabled, by resetting present parameters on next video
frame after composition enable event.
- Work around DWM breaking OpenGL window on minimize by unsetting present
params on hide event, and setting on show event.
- Ignore sync to vblank when DWM composition is active.
- Deactivate sync to frame rate option when DWM composition is active.
- Make window size setting a menu rather than a part of video settings dialog.
- Work around Windows file dialog blocking events by waiting for pause to
complete before launching such dialog.
- Work around events getting blocked when resizing on Windows by consuming
pending blit requests on resizeEvent.
- WASAPI: Detect and use shared stream sampling rate in shared mode because
all other rates appear to fail.
- Default screen names start at "1" rather than "0".
- Build fixes for mingw gcc 3.4.
- Refactoring.
- Add one level of unrolling to cic2.
- Allow intermediate polyphase sinc resamplers in a resampling chain to
start/end (after fold) roll-off at limit of hearing if applicable, not
just the final one.
- Modify chain cost formulae and their derivatives for optimal ratios
accordingly.
- don't wait for video frame consumption if approximate usecs from underrun
is low comapred to video frame timeout.
- slightly higher precision in frametime inc/dec representation.
- Adjustable base frame rate.
- alsaengine: Increase start threashold to full buffer.
- alsaengine: Block rate estimation when pcm not in running state.
- alsaengine: Default custom device plughw rather than hw.
- one more decimal position in refresh rate representation.
- use xrandr screen names
- hide empty full mode comboboxes
- windowed resolution -> window size
- lots of refactoring.
- libgambatte: * (edit: meaning pretty much tons of stuff rewritten and
updated to a shitload of reverse engineering work done covered by several
hundreds of new tests)
- tons of re (cgb _and_ dmg).
$ ./run_tests.sh
...
Ran 2755 tests.
0 failures.
- done a ton of stuff to better facilitate automated testing.
- DMG testing
- Fix 2xSAI video filter reading out of bounds.
- Optimize save state thumbnail generation.
- Get rid of potential double free of unusable blitter.
- ignore() keyPress/keyRelease events so that global keys still function.
- Better (simpler and makes sense) hypothesis for mode3 sprite cycles.
- Document libgambatte better.
- Document resampling framework better.
- Use a single constant for setting number of resampler channels rather
than two.
- Move uncopyable.h to common.
- ScalingMethod header.
- length of video frame -> duration of video frame.
- Document Qt media framework better.
- Move resample files around to separate interface files from
implementation files.
- Move Qt media framework files around to separate interface from
implementation somewhat.
- Redesign Qt multimedia framework to use a worker thread for MediaSource
updates. This was a ton of work, but should make underruns a lot less
likely. The majority of underruns are caused by video I/O blocking (even
when not syncing to vblank). It also means that vsync blocking is a
non-issue. Lots of thread-safety considerations had to be done. Lots of
tools developed to deal with new problems. Things redesigned to be
asynchronous to avoid blocking the worker thread. New interfaces developed
to give clients access to these things without too much pain, as clients
need to deal with thread-safety issues, and be able to do things
asynchronously to avoid blocking and unnecessary synchronization. Things
developed and then scrapped as I changed my mind. Lots of thinking and
testing to ensure video smoothness.
- Make configuration of the multimedia framework way more flexible, by
adding methods for configuring video and sound, rather than forcing the
use of the SoundDialog or VideoDialog. Thus clients can make their own GUI
for such things.
- Pass raw input events to MediaSources so that clients will not have to use
the InputDialog with its Button system.
- Split BlitterWidget blitting into three methods: blit, draw, and sync,
such that blitting is supposedly a fast pixel copy or buffer swap, while
draw prepares for presentation, and sync presents the completed video
frame ASAP. Blit needs to be fast to avoid blocking the worker thread to
avoid underruns.
- Allow heavy MediaSource video work to be skipped when frames are skipped.
- Do some work in parallel on SMP systems.
- Adjust low audio buffer detection to make it more robust.
- Move variance calculation to the user of estimations, because the variance
calculated by estimators is not well defined anyway.
- Add support for adjustable fast-forward speed.
- Fast-forward now outputs audio, by skipping entire segments of audio when
skipping frames.
- Adjust blitters to conform to the new threaded model.
- Direct3DBlitter: Apparently vertices point to the center of pixels.
Subtract 0.5 from vertex coordinates.
- DirectDrawBlitter: Sleep more when far from vblank.
- QGLBlitter: Get rid of makeCurrent calls, because they apparently block
and can be slow and don't seem to be needed anyway. They also seem to
cause instability with some drivers.
- XvBlitter: Double buffer to delay updates to sync time.
- X11Blitter: Double buffer when not scaling to delay updates to sync time.
- QPainterBlitter: Double buffer when not scaling to delay updates to sync
time.
- SdlBlitter: Delay updates to sync time.
- AlsaEngine: Set max periods to 16 to work around stupid ALSA plugins and
drivers that advertise smaller period sizes than properly supported. ALSA
always picks the maximum number of periods allowed, which means it picks
the smallest period size allowed for a given buffer size.
- QPainterBlitter: Don't disable updates when not paused, because this
breaks macx.
- Support pause on focus out.
- Add MiscDialog to allow user configuration of fast-forward speed and focus
policy.
- Separate sync to refresh rate logic from sync to vblank logic.
- Sync to refresh rate menu option.
- Use semi-bilinear filtering rather than bilinear filtering for
soft-scaling blitters.
- MakeSincKernel: Consider rounding effects when computing absolute gain.
- MakeSincKernel: Use a function pointer rather than a template argument to
reduce code bloat.
- Reorder sinc kernel phases.
- PolyPhaseConvoluter: Simplify some calculations.
- Replace Hamming and Blackman windowed sincs with Kaiser windowed sinc of
appropriate betas, because they require a lower number of taps to achieve
the same specs.
- Use rounding shifts in resamplers for higher precision and performance.
- libgambatte: Update returns on video frame completion rather than using a
callback for notification.
- libgambatte: Move video filters and color conversion out of the library.
- libgambatte: Get rid of unnecessarily complex VideoBlitter interface.
- libgambatte: Use bit flags rather bools for input state.
- Change some parameters to constants in 2xsai and hqx video filters.
- Probably other stuff I've forgotten about.
- swscale.h: Add semiLinear scaler, which is almost as sharp and fast as
nearestNeighbor for large scales, yet reduces aliasing like the linear
scaler.
- swscale.h: Center nearest neighbor bias.
- swscale.h: Optimize a bit more.
- ossengine: Reduce number of requested fragments again slightly to 6,
because OSSv4 has a default minimum fragment size of about 10 ms causing
excessive minimum latency.
- ossengine: Fix horribly broken rate estimation on OSS4 (and possibly other
implementations) by using GETOPTR rather than GETOSPACE.
- ossengine: Increase number of fragments requested from 4 to 8 for more
accurate OSPACE/OPTR information with OSS4 (and possibly other
implementations).
- ossengine: Minor include corrections and namespace fixes.
- ossengine: Use log(x)/log(2) rather than non-c++98 log2.
- ossengine: Minor rounding fix in fragment size calculation.
- AlsaEngine: Set start threshold to half the buffer size, to avoid
(possibly infinite) repeated xruns due to ALSA's default threshold of 1
frame.
- Use RGBA internal texture format, as it usually means less conversion.
- Get rid of pointless initialization of OpenGL state that is equal to
the default, or otherwise meaningless. Enable GL_CULL_FACE in case it's
slightly faster in some configurations.
- Use MinKeeper to schedule Memory::events.
- Remove old incEndtime function since it's not worth the maintenance
overhead.
- Add data structure that efficiently keeps track of the minimum of a
small, fixed set of variables, using templates to autogenerate
efficient, unrolled functions that update the binary tree for each
variable. It also efficiently supports priorities among variables when
their values are equal, and can give variables that change the most
frequently a better spot in the tree if the number of variables isn't a
power of 2. Will be used for event scheduling.
- Lyc0irq on display enable.
grinvader
ZSNES Shake Shake Prinny
Posts: 5632
Joined: Wed Jul 28, 2004 4:15 pm
Location: PAL50, dood !

Re: Gambatte 0.5.0-wip1 released

Post by grinvader »

Code: Select all

  $ ./run_tests.sh
  ...
  Ran 2755 tests.
  0 failures.
for the win
皆黙って俺について来い!!

Code: Select all

<jmr> bsnes has the most accurate wiki page but it takes forever to load (or something)
Pantheon: Gideon Zhi | CaitSith2 | Nach | kode54
motke
New Member
Posts: 5
Joined: Wed Nov 24, 2010 6:07 am

Re: Gambatte 0.5.0-wip1 released

Post by motke »

Does Road Rash (U) have first few scanlines shaking/corrupted on a real DMG?
franpa
Gecko snack
Posts: 2374
Joined: Sun Aug 21, 2005 11:06 am
Location: Australia, QLD
Contact:

Re: Gambatte 0.5.0-wip1 released

Post by franpa »

Sinamas, great work on getting it to work well with the DWM, video output is perfect :) I however have to ask, is it normal to get slight popping in audio? You can hear it when text is being typed in dialog boxes in the 2 Zelda Oracle games as well as when transitioning from the town to the overworld in Links Awakening DX and vice versa. I am playing with the GBA CGB Mode enabled.
Core i7 920 @ 2.66GHZ | ASUS P6T Motherboard | 8GB DDR3 1600 RAM | Gigabyte Geforce 760 4GB | Windows 10 Pro x64
sinamas
Gambatte Developer
Gambatte Developer
Posts: 157
Joined: Fri Oct 21, 2005 4:03 pm
Location: Norway

Re: Gambatte 0.5.0-wip1 released

Post by sinamas »

motke wrote:Does Road Rash (U) have first few scanlines shaking/corrupted on a real DMG?
You bet!

franpa wrote:Sinamas, great work on getting it to work well with the DWM, video output is perfect :) I however have to ask, is it normal to get slight popping in audio? You can hear it when text is being typed in dialog boxes in the 2 Zelda Oracle games as well as when transitioning from the town to the overworld in Links Awakening DX and vice versa. I am playing with the GBA CGB Mode enabled.
It's normal :)
vanfanel
Rookie
Posts: 34
Joined: Mon Mar 02, 2009 4:59 pm

Re: Gambatte 0.5.0-wip1 released

Post by vanfanel »

Hello sinmas!
I'm AMAZED at Gambatte: until now, I used Mednafen as my GB emulator, but man, Gambatte sounds and looks just like a giant GB, plus it has a small cpu usage! Incredible work...
Anyway, it doesn't keep the fullscreen setting between executions, so I want to compile my own version ;)
I'm trying to compile latest CVS sources on Mac OSX, but I get errors on both build_sdl and build_qt scripts:

Code: Select all

cd libgambatte && scons
scons: Reading SConscript files ...
Checking for C header file zlib.h... (cached) yes
scons: done reading SConscript files.
scons: Building targets ...
g++ -o src/cpu.o -c -Wall -Wextra -O2 -fomit-frame-pointer -fno-exceptions -fno-rtti -DHAVE_STDINT_H -Isrc -Iinclude -I/Users/alfayate/gam/gambatte/common src/cpu.cpp
src/minkeeper.h: In static member function 'static void MinKeeper<ids>::FillLut<id, dummy>::fillLut(MinKeeper<ids>*) [with int id = 498, int dummy = 0, int ids = 2]':
src/minkeeper.h:67: error: template instantiation depth exceeds maximum of 500 (use -ftemplate-depth-NN to increase the maximum) instantiating 'static void MinKeeper<ids>::updateValue(MinKeeper<ids>*) [with int id = 498, int ids = 2]'
src/minkeeper.h:67:   instantiated from 'static void MinKeeper<ids>::FillLut<id, dummy>::fillLut(MinKeeper<ids>*) [with int id = 498, int dummy = 0, int ids = 2]'
src/minkeeper.h:68:   instantiated from 'static void MinKeeper<ids>::FillLut<id, dummy>::fillLut(MinKeeper<ids>*) [with int id = 497, int dummy = 0, int ids = 2]'
src/minkeeper.h:68:   instantiated from 'static void MinKeeper<ids>::FillLut<id, dummy>::fillLut(MinKeeper<ids>*) [with int id = 496, int dummy = 0, int ids = 2]'
src/minkeeper.h:68:   instantiated from 'static void MinKeeper<ids>::FillLut<id, dummy>::fillLut(MinKeeper<ids>*) [with int id = 495, int dummy = 0, int ids = 2]'
src/minkeeper.h:68:   instantiated from 'static void MinKeeper<ids>::FillLut<id, dummy>::fillLut(MinKeeper<ids>*) [with int id = 494, int dummy = 0, int ids = 2]'
src/minkeeper.h:68:   instantiated from 'static void MinKeeper<ids>::FillLut<id, dummy>::fillLut(MinKeeper<ids>*) [with int id = 493, int dummy = 0, int ids = 2]'
I'm on Snow Leopard, 10.6.8, and Gambatte 0.4.1 sources compiled just fine, but not 0.5.1 WIP or latest CVS.

regards
Spanish third republic NOW!
sinamas
Gambatte Developer
Gambatte Developer
Posts: 157
Joined: Fri Oct 21, 2005 4:03 pm
Location: Norway

Re: Gambatte 0.5.0-wip1 released

Post by sinamas »

It builds for me with every GCC version I've tested (basically everything from GCC 3.3 through GCC 4.6 IIRC).
If this is LLVM or something, I haven't tested with that, and it may be that LLVM doesn't properly support nested template classes (yet).

What does g++ -v output?

If you have other GCC versions available I suggest you try with them. I just commited a change which should make it easy to override the compiler used by doing 'scons CC=c-compiler CXX=c++-compiler' (in the libgambatte directory) to build libgambatte.

The reason for not remembering full screen state is that I figured it would be potentially more annoying for someone not expecting the behavior to have the application take over the screen and possibly change mode unexpectedly, than for someone wanting the behavior having to manually do cmd-f/ctrl-f. And if you don't pass the ROM image file as a command line argument, you'd have to do some GUI stuff anyway, making the addition of one extra short cut to enter full screen seem like a neglible task.

I'll consider adding a command line parameter for starting in full screen mode, which makes a lot more sense if you're also using a ROM image file argument.
vanfanel
Rookie
Posts: 34
Joined: Mon Mar 02, 2009 4:59 pm

Re: Gambatte 0.5.0-wip1 released

Post by vanfanel »

This is what g++ outputs:

Code: Select all

g++ -v
Using built-in specs.
Target: i686-apple-darwin10
Configured with: /var/tmp/gcc/gcc-5666.3~6/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5666) (dot 3)
I believe it should compile... as I said, 0.4.1 sources do compile well here, in the exact same enviroment. I just got the latest svn again, but I still get the same errors. I only have this gcc version, the version that came with Xcode.

As for the fullscreen setting, yes, I use roms as parameters: I'm a commandline guy and use gambatte on my Mac Mini, wich is a media-center computer with no mouse, so a commandline SDL version with vsync support and framerate control (just as the QT/OpenGL version has) would be nice and elegant, if I can suggest it.
Spanish third republic NOW!
sinamas
Gambatte Developer
Gambatte Developer
Posts: 157
Joined: Fri Oct 21, 2005 4:03 pm
Location: Norway

Re: Gambatte 0.5.0-wip1 released

Post by sinamas »

Then Apple screwed up. Building with GCC 4.2 works just fine with non-Appleified versions.
Compiling 0.4.1 has no relevance.

So ls /usr/bin/g++* shows only g++-4.2?
Earlier SDKs from Apple used to include a version of GCC 4.0 which I believe should work fine.

Heh, making something "nice and elegant" isn't possible with SDL alone ;)
sinamas
Gambatte Developer
Gambatte Developer
Posts: 157
Joined: Fri Oct 21, 2005 4:03 pm
Location: Norway

Re: Gambatte 0.5.0-wip1 released

Post by sinamas »

Van, please try the latest source from SVN. I've made a workaround that should do the trick. It also mean libgambatte can now be compiled with clang.
grinvader
ZSNES Shake Shake Prinny
Posts: 5632
Joined: Wed Jul 28, 2004 4:15 pm
Location: PAL50, dood !

Re: Gambatte 0.5.0-wip1 released

Post by grinvader »

vanfanel wrote:src/minkeeper.h:67: error: template instantiation depth exceeds maximum of 500 (use -ftemplate-depth-NN to increase the maximum) instantiating 'static void MinKeeper<ids>::updateValue(MinKeeper<ids>*) [with int id = 498, int ids = 2]'
how about a little effort to solve the issue when it tells you how to do so in the very error message ?
皆黙って俺について来い!!

Code: Select all

<jmr> bsnes has the most accurate wiki page but it takes forever to load (or something)
Pantheon: Gideon Zhi | CaitSith2 | Nach | kode54
vanfanel
Rookie
Posts: 34
Joined: Mon Mar 02, 2009 4:59 pm

Re: Gambatte 0.5.0-wip1 released

Post by vanfanel »

@grinvader: you're right, I didn't read that part! I'll be more carefull next time.. It's embarrasing :(

@sinamas: I tried to compile latest SVN, but I'm getting a error with the audio engines code:

Code: Select all

Library/Frameworks -o addaudioengines_macx.o framework/src/addaudioengines_macx.cpp
In file included from framework/src/addaudioengines_macx.cpp:22:
framework/src/audioengines/coreaudioengine.h:38: error: ‘ComponentResult’ does not name a type
make[1]: *** [addaudioengines_macx.o] Error 1
make: *** [sub-src-make_default] Error 2
This time there's no message to fix it...
Anyway, libgambatte compiles well, so it must be qt-related as gambatte_sdl compiles ok, too.
I just installed qt building system. Here's qmake's version information:

Code: Select all

QMake version 2.01a
Using Qt version 4.7.4 in /Library/Frameworks
Spanish third republic NOW!
sinamas
Gambatte Developer
Gambatte Developer
Posts: 157
Joined: Fri Oct 21, 2005 4:03 pm
Location: Norway

Re: Gambatte 0.5.0-wip1 released

Post by sinamas »

Wow, Apple must really not give two shits about backwards compatibility if they decided to arbitrarily change the API like that.
Try replacing all instances of ComponentResult with OSStatus (or SInt32 even) and see if that helps.
I wouldn't be too shocked if they've changed more stuff though.
vanfanel
Rookie
Posts: 34
Joined: Mon Mar 02, 2009 4:59 pm

Re: Gambatte 0.5.0-wip1 released

Post by vanfanel »

I think there must be some other changes to the API, now I get this error:

Code: Select all

framework/src/audioengines/coreaudioengine.cpp: In member function ‘virtual int CoreAudioEngine::doInit(int, unsigned int)’:
framework/src/audioengines/coreaudioengine.cpp:117: error: ‘Component’ was not declared in this scope
framework/src/audioengines/coreaudioengine.cpp:117: error: expected `;' before ‘comp’
framework/src/audioengines/coreaudioengine.cpp:120: error: ‘ComponentDescription’ was not declared in this scope
framework/src/audioengines/coreaudioengine.cpp:120: error: expected `;' before ‘desc’
framework/src/audioengines/coreaudioengine.cpp:121: error: ‘desc’ was not declared in this scope
framework/src/audioengines/coreaudioengine.cpp:127: error: ‘comp’ was not declared in this scope
framework/src/audioengines/coreaudioengine.cpp:127: error: ‘FindNextComponent’ was not declared in this scope
framework/src/audioengines/coreaudioengine.cpp:133: error: ‘comp’ was not declared in this scope
framework/src/audioengines/coreaudioengine.cpp:133: error: ‘OpenAComponent’ was not declared in this scope
framework/src/audioengines/coreaudioengine.cpp: In member function ‘virtual void CoreAudioEngine::uninit()’:
framework/src/audioengines/coreaudioengine.cpp:208: error: ‘CloseComponent’ was not declared in this scope
make[1]: *** [coreaudioengine.o] Error 1
make: *** [sub-src-make_default] Error 2
Spanish third republic NOW!
sinamas
Gambatte Developer
Gambatte Developer
Posts: 157
Joined: Fri Oct 21, 2005 4:03 pm
Location: Norway

Re: Gambatte 0.5.0-wip1 released

Post by sinamas »

Yeah, because they don't use ComponentResult in the AudioUnit interface anymore, they don't include the whichever header declares the component stuff.
Try including <CoreServices/CoreServices.h>
If that doesn't do the trick you'll just have to find out which header declares the component stuff.
nitro322
New Member
Posts: 7
Joined: Mon Sep 26, 2011 6:45 am

Re: Gambatte 0.5.0-wip1 released

Post by nitro322 »

sinamas,

I only recently discovered gambatte, and after a fairly long time since the last release I'm very pleased to see that you are still actively working on this (and wow, that's a serious changelog for a WIP...). Thanks for your continued work on this excellent emulator.

I have a feature request I'd like to make, but I'm not sure of the best place to do so. The sourceforge tracker seems like the best place, but it doesn't appear to get much use. Would this, or another forum, be a better spot? Would appreciate if you could point me in the right direction.

Thanks.
vanfanel
Rookie
Posts: 34
Joined: Mon Mar 02, 2009 4:59 pm

Re: Gambatte 0.5.0-wip1 released

Post by vanfanel »

@sinamas: The include fixed the Component issue, but I'm now getting linking errors:

Code: Select all

Undefined symbols:
  "_FindNextComponent", referenced from:
      CoreAudioEngine::doInit(int, unsigned int)in coreaudioengine.o
  "_CFArrayGetValueAtIndex", referenced from:
      QuartzToggler::QuartzToggler()in quartztoggler.o
  "_CFArrayGetCount", referenced from:
      _HIDGetCollectionElements in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      QuartzToggler::QuartzToggler()in quartztoggler.o
  "_CGDisplayCurrentMode", referenced from:
      QuartzToggler::emitRate()      in quartztoggler.o
      QuartzToggler::setFullMode(bool)   in quartztoggler.o
      QuartzToggler::QuartzToggler()in quartztoggler.o
      QuartzToggler::QuartzToggler()in quartztoggler.o
      QuartzToggler::QuartzToggler()in quartztoggler.o
  "_CFNumberCompare", referenced from:
      QuartzToggler::QuartzToggler()in quartztoggler.o
  "_CFArrayGetTypeID", referenced from:
      _HIDGetCollectionElements in SDL_sysjoystick.o
  "_CGDisplaySwitchToMode", referenced from:
      QuartzToggler::setFullMode(bool)   in quartztoggler.o
  "_OpenAComponent", referenced from:
      CoreAudioEngine::doInit(int, unsigned int)in coreaudioengine.o
  "_CFNumberGetValue", referenced from:
      _HIDTopLevelElementHandler in SDL_sysjoystick.o
      _HIDTopLevelElementHandler in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      QuartzToggler::emitRate()      in quartztoggler.o
      QuartzToggler::setFullMode(bool)   in quartztoggler.o
      QuartzToggler::setFullMode(bool)   in quartztoggler.o
      QuartzToggler::setFullMode(bool)   in quartztoggler.o
      addMode(__CFDictionary const*, std::vector<ResInfo, std::allocator<ResInfo> >&, unsigned int*, unsigned int*)in quartztoggler.o
      addMode(__CFDictionary const*, std::vector<ResInfo, std::allocator<ResInfo> >&, unsigned int*, unsigned int*)in quartztoggler.o
      addMode(__CFDictionary const*, std::vector<ResInfo, std::allocator<ResInfo> >&, unsigned int*, unsigned int*)in quartztoggler.o
  "_NewPtrClear", referenced from:
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
  "_CFRelease", referenced from:
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
  "_CFUUIDGetUUIDBytes", referenced from:
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
  "_DisposePtr", referenced from:
      _HIDDisposeElementList in SDL_sysjoystick.o
      _HIDDisposeDevice in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
  "_CFStringGetCString", referenced from:
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
  "_CFGetTypeID", referenced from:
      _HIDTopLevelElementHandler in SDL_sysjoystick.o
      _HIDGetCollectionElements in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
  "_CGDisplayAvailableModes", referenced from:
      QuartzToggler::QuartzToggler()in quartztoggler.o
  "_CGDisplayBestModeForParametersAndRefreshRate", referenced from:
      QuartzToggler::setFullMode(bool)   in quartztoggler.o
  "_CFDictionaryGetValue", referenced from:
      _HIDTopLevelElementHandler in SDL_sysjoystick.o
      _HIDTopLevelElementHandler in SDL_sysjoystick.o
      _HIDGetCollectionElements in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
      QuartzToggler::emitRate()      in quartztoggler.o
      QuartzToggler::setFullMode(bool)   in quartztoggler.o
      QuartzToggler::setFullMode(bool)   in quartztoggler.o
      QuartzToggler::setFullMode(bool)   in quartztoggler.o
      addMode(__CFDictionary const*, std::vector<ResInfo, std::allocator<ResInfo> >&, unsigned int*, unsigned int*)in quartztoggler.o
      addMode(__CFDictionary const*, std::vector<ResInfo, std::allocator<ResInfo> >&, unsigned int*, unsigned int*)in quartztoggler.o
      addMode(__CFDictionary const*, std::vector<ResInfo, std::allocator<ResInfo> >&, unsigned int*, unsigned int*)in quartztoggler.o
      QuartzToggler::QuartzToggler()in quartztoggler.o
      QuartzToggler::QuartzToggler()in quartztoggler.o
  "_CloseComponent", referenced from:
      CoreAudioEngine::uninit()      in coreaudioengine.o
  "_kCFAllocatorDefault", referenced from:
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
  "___CFConstantStringClassReference", referenced from:
      cfstring=UsagePage in SDL_sysjoystick.o
      cfstring=Usage in SDL_sysjoystick.o
      cfstring=Elements in SDL_sysjoystick.o
      cfstring=Product in SDL_sysjoystick.o
      cfstring=USB Product Name in SDL_sysjoystick.o
      cfstring=PrimaryUsagePage in SDL_sysjoystick.o
      cfstring=PrimaryUsage in SDL_sysjoystick.o
      cfstring=Type in SDL_sysjoystick.o
      cfstring=ElementCookie in SDL_sysjoystick.o
      cfstring=Min in SDL_sysjoystick.o
      cfstring=Max in SDL_sysjoystick.o
      cfstring=RefreshRate in quartztoggler.o
      cfstring=BitsPerPixel in quartztoggler.o
      cfstring=Width in quartztoggler.o
      cfstring=Height in quartztoggler.o
  "_CFStringGetSystemEncoding", referenced from:
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
  "_CGDisplayBounds", referenced from:
      QuartzToggler::fullScreenRect(QWidget const*) constin quartztoggler.o
  "_CFArrayApplyFunction", referenced from:
      _HIDGetCollectionElements in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
  "_CFDictionaryGetTypeID", referenced from:
      _HIDTopLevelElementHandler in SDL_sysjoystick.o
      _HIDGetElementsCFArrayHandler in SDL_sysjoystick.o
  "_CGGetActiveDisplayList", referenced from:
      QuartzToggler::QuartzToggler()in quartztoggler.o
      QuartzToggler::QuartzToggler()in quartztoggler.o
  "_CFUUIDGetConstantUUIDWithBytes", referenced from:
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
      _SDL_SYS_JoystickInit in SDL_sysjoystick.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[1]: *** [../bin/Gambatte Qt.app/Contents/MacOS/Gambatte Qt] Error 1
make: *** [sub-src-make_default] Error 2
Spanish third republic NOW!
Post Reply