mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-04-02 10:42:14 -04:00
byuu says: Changelog: - gba,ws: removed Thread::step() override¹ - processor/m68k: move.b (a7)+ and move.b (a7)- adjust a7 by two, not by one² - tomoko: created new initialize(Video,Audio,Input)Driver() functions³ - ruby/audio: split Audio::information into Audio::available(Devices,Frequencies,Latencies,Channels)³ - ws: added Model::(WonderSwan,WonderSwanColor,SwanCrystal)() functions for consistency with other cores ¹: this should hopefully fix GBA Pokemon Pinball. Thanks to SuperMikeMan for pointing out the underlying cause. ²: this fixes A Ressaha de Ikou, Mega Bomberman, and probably more games. ³: this is the big change: so there was a problem with WASAPI where you might change your device under the audio settings panel. And your new device may not support the frequency that your old device used. This would end up not updating the frequency, and the pitch would be distorted. The old Audio::information() couldn't tell you what frequencies, latencies, or channels were available for all devices simultaneously, so I had to split them up. The new initializeAudioDriver() function validates you have a correct driver, or it defaults to none. Then it validates a correct device name, or it defaults to the first entry in the list. Then it validates a correct frequency, or defaults to the first in the list. Then finally it validates a correct latency, or defaults to the first in the list. In this way ... we have a clear path now with no API changes required to select default devices, frequencies, latencies, channel counts: they need to be the first items in their respective lists. So, what we need to do now is go through and for every audio driver that enumerates devices, we need to make sure the default device gets added to the top of the list. I'm ... not really sure how to do this with most drivers, so this is definitely going to take some time. Also, when you change a device, initializeAudioDriver() is called again, so if it's a bad device, it will disable the audio driver instead of continuing to send samples at it and hoping that the driver blocked those API calls when it failed to initialize properly. Now then ... since it was a decently-sized API change, it's possible I've broken compilation of the Linux drivers, so please report any compilation errors so that I can fix them.
57 lines
2 KiB
C++
57 lines
2 KiB
C++
struct Program : Emulator::Platform {
|
|
//program.cpp
|
|
Program(string_vector args);
|
|
auto main() -> void;
|
|
auto quit() -> void;
|
|
|
|
//interface.cpp
|
|
auto path(uint id) -> string override;
|
|
auto open(uint id, string name, vfs::file::mode mode, bool required) -> vfs::shared::file override;
|
|
auto load(uint id, string name, string type, string_vector options = {}) -> Emulator::Platform::Load override;
|
|
auto videoRefresh(const uint32* data, uint pitch, uint width, uint height) -> void override;
|
|
auto audioSample(const double* samples, uint channels) -> void override;
|
|
auto inputPoll(uint port, uint device, uint input) -> int16 override;
|
|
auto inputRumble(uint port, uint device, uint input, bool enable) -> void override;
|
|
auto dipSettings(Markup::Node node) -> uint override;
|
|
auto notify(string text) -> void override;
|
|
|
|
//medium.cpp
|
|
auto loadMedium() -> void;
|
|
auto loadMedium(Emulator::Interface& interface, const Emulator::Interface::Medium& medium) -> void;
|
|
auto unloadMedium() -> void;
|
|
|
|
//state.cpp
|
|
auto stateName(uint slot, bool managed = false) -> string;
|
|
auto loadState(uint slot, bool managed = false) -> bool;
|
|
auto saveState(uint slot, bool managed = false) -> bool;
|
|
|
|
//utility.cpp
|
|
auto initializeVideoDriver() -> void;
|
|
auto initializeAudioDriver() -> void;
|
|
auto initializeInputDriver() -> void;
|
|
|
|
auto powerCycle() -> void;
|
|
auto rotateDisplay() -> void;
|
|
auto connectDevices() -> void;
|
|
auto showMessage(const string& text) -> void;
|
|
auto updateStatusText() -> void;
|
|
auto updateVideoPalette() -> void;
|
|
auto updateVideoShader() -> void;
|
|
auto updateAudioDriver() -> void;
|
|
auto updateAudioEffects() -> void;
|
|
auto focused() -> bool;
|
|
|
|
bool hasQuit = false;
|
|
bool pause = false;
|
|
|
|
vector<Emulator::Interface*> emulators;
|
|
|
|
vector<string> mediumQueue; //for command-line and drag-and-drop loading
|
|
vector<string> mediumPaths; //for keeping track of loaded folder locations
|
|
|
|
string statusText;
|
|
string statusMessage;
|
|
time_t statusTime = 0;
|
|
};
|
|
|
|
extern unique_pointer<Program> program;
|