mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-04-02 10:42:14 -04:00
byuu says: This release features many substantial Game Boy emulation improvements (all courtesy of Jonas Quinn), a new audio DSP class, and BPS patching support. Changelog (since v081): - added new DSP audio engine; supports sample-averaging for the Game Boy's high frequency rate - GB: MMM01 images with boot loader at bottom of ROM can now be loaded - GB: EI is delayed one cycle; fixes Bubble Bobble [Jonas Quinn] - GB: fixed window -7 offset behavior; fixes Contra 3 first boss [Jonas Quinn] - GB: disable LCD interrupts when rendering is off; fixes Super Mario Land 2 [Jonas Quinn] - GB: fixed noise channel LFSR; fixes Zelda: LA lightning sound [Jonas Quinn] - GB: square channels use initial_length like the noise channel [Jonas Quinn] - UI: added BPS patching support; removed UPS patching support - UI: when loading BS-X/Sufami Turbo/Game Boy games; display game title instead of BIOS title - UI: modified timestamps on screenshots for Windows/NTFS (which disallows use of ':')
40 lines
1.2 KiB
C++
Executable file
40 lines
1.2 KiB
C++
Executable file
#ifndef NALL_UTILITY_HPP
|
|
#define NALL_UTILITY_HPP
|
|
|
|
#include <type_traits>
|
|
#include <utility>
|
|
|
|
namespace nall {
|
|
template<bool C, typename T = bool> struct enable_if { typedef T type; };
|
|
template<typename T> struct enable_if<false, T> {};
|
|
template<typename C, typename T = bool> struct mp_enable_if : enable_if<C::value, T> {};
|
|
|
|
template<typename T> inline void swap(T &x, T &y) {
|
|
T temp(std::move(x));
|
|
x = std::move(y);
|
|
y = std::move(temp);
|
|
}
|
|
|
|
template<typename T> struct base_from_member {
|
|
T value;
|
|
base_from_member(T value_) : value(value_) {}
|
|
};
|
|
|
|
template<typename T> class optional {
|
|
bool valid;
|
|
T value;
|
|
public:
|
|
inline operator bool() const { return valid; }
|
|
inline const T& operator()() const { if(!valid) throw; return value; }
|
|
inline optional<T>& operator=(const optional<T> &source) { valid = source.valid; value = source.value; return *this; }
|
|
inline optional(bool valid, const T &value) : valid(valid), value(value) {}
|
|
};
|
|
|
|
template<typename T> inline T* allocate(unsigned size, const T &value) {
|
|
T *array = new T[size];
|
|
for(unsigned i = 0; i < size; i++) array[i] = value;
|
|
return array;
|
|
}
|
|
}
|
|
|
|
#endif
|