mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-09 15:49:25 +01:00
Merge pull request #1869 from Stevoisiak/GeneralConsistency
Minor consistency changes
This commit is contained in:
commit
80e6367e46
@ -132,7 +132,7 @@ void OpenALStream::SoundLoop()
|
||||
#if defined(__APPLE__)
|
||||
bool float32_capable = false;
|
||||
const ALenum AL_FORMAT_STEREO_FLOAT32 = 0;
|
||||
// OSX does not have the alext AL_FORMAT_51CHN32 yet.
|
||||
// OS X does not have the alext AL_FORMAT_51CHN32 yet.
|
||||
surround_capable = false;
|
||||
const ALenum AL_FORMAT_51CHN32 = 0;
|
||||
#else
|
||||
|
@ -149,11 +149,11 @@ CPUInfo::CPUInfo()
|
||||
Detect();
|
||||
}
|
||||
|
||||
// Detects the various cpu features
|
||||
// Detects the various CPU features
|
||||
void CPUInfo::Detect()
|
||||
{
|
||||
// Set some defaults here
|
||||
// When ARMv8 cpus come out, these need to be updated.
|
||||
// When ARMv8 CPUs come out, these need to be updated.
|
||||
HTT = false;
|
||||
#ifdef _M_ARM_64
|
||||
OS64bit = true;
|
||||
@ -251,7 +251,7 @@ void CPUInfo::Detect()
|
||||
#endif
|
||||
}
|
||||
|
||||
// Turn the cpu info into a string we can show
|
||||
// Turn the CPU info into a string we can show
|
||||
std::string CPUInfo::Summarize()
|
||||
{
|
||||
std::string sum;
|
||||
|
@ -390,7 +390,7 @@ public:
|
||||
void MCR(u32 coproc, u32 opc1, ARMReg Rt, u32 CRn, u32 CRm, u32 opc2 = 0);
|
||||
|
||||
// Do nothing
|
||||
void NOP(int count = 1); //nop padding - TODO: fast nop slides, for amd and intel (check their manuals)
|
||||
void NOP(int count = 1); //nop padding - TODO: fast nop slides, for AMD and Intel (check their manuals)
|
||||
|
||||
#ifdef CALL
|
||||
#undef CALL
|
||||
@ -476,7 +476,7 @@ public:
|
||||
void UBFX(ARMReg dest, ARMReg op2, u8 lsb, u8 width);
|
||||
void CLZ(ARMReg rd, ARMReg rm);
|
||||
|
||||
// Using just MSR here messes with our defines on the PPC side of stuff (when this code was in dolphin...)
|
||||
// Using just MSR here messes with our defines on the PPC side of stuff (when this code was in Dolphin...)
|
||||
// Just need to put an underscore here, bit annoying.
|
||||
void _MSR (bool nzcvq, bool g, Operand2 op2);
|
||||
void _MSR (bool nzcvq, bool g, ARMReg src);
|
||||
|
@ -81,7 +81,7 @@ private:
|
||||
#define GC_ALIGNED16_DECL(x) __declspec(align(16)) x
|
||||
#define GC_ALIGNED64_DECL(x) __declspec(align(64)) x
|
||||
|
||||
// Since they are always around on windows
|
||||
// Since they are always around on Windows
|
||||
#define HAVE_WX 1
|
||||
#define HAVE_OPENAL 1
|
||||
|
||||
|
@ -108,7 +108,7 @@ inline u64 _rotr64(u64 x, unsigned int shift)
|
||||
#define snprintf _snprintf
|
||||
#define vscprintf _vscprintf
|
||||
|
||||
// 64 bit offsets for windows
|
||||
// 64 bit offsets for Windows
|
||||
#define fseeko _fseeki64
|
||||
#define ftello _ftelli64
|
||||
#define atoll _atoi64
|
||||
|
@ -31,7 +31,7 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Shared data dirs (Sys and shared User for linux)
|
||||
// Shared data dirs (Sys and shared User for Linux)
|
||||
#ifdef _WIN32
|
||||
#define SYSDATA_DIR "Sys"
|
||||
#elif defined __APPLE__
|
||||
|
@ -40,7 +40,7 @@ typedef int32_t s32;
|
||||
typedef int64_t s64;
|
||||
|
||||
#endif
|
||||
// For using windows lock code
|
||||
// For using Windows lock code
|
||||
#define TCHAR char
|
||||
#define LONG int
|
||||
|
||||
|
@ -469,7 +469,7 @@ u32 ScanDirectoryTree(const std::string &directory, FSTEntry& parentEntry)
|
||||
FindClose(hFind);
|
||||
return foundEntries;
|
||||
}
|
||||
// windows loop
|
||||
// Windows loop
|
||||
do
|
||||
{
|
||||
FSTEntry entry;
|
||||
@ -481,7 +481,7 @@ u32 ScanDirectoryTree(const std::string &directory, FSTEntry& parentEntry)
|
||||
if (!dirp)
|
||||
return 0;
|
||||
|
||||
// non windows loop
|
||||
// non Windows loop
|
||||
while (!readdir_r(dirp, &dirent, &result) && result)
|
||||
{
|
||||
FSTEntry entry;
|
||||
@ -538,7 +538,7 @@ bool DeleteDirRecursively(const std::string &directory)
|
||||
return false;
|
||||
}
|
||||
|
||||
// windows loop
|
||||
// Windows loop
|
||||
do
|
||||
{
|
||||
const std::string virtualName(TStrToUTF8(ffd.cFileName));
|
||||
@ -548,7 +548,7 @@ bool DeleteDirRecursively(const std::string &directory)
|
||||
if (!dirp)
|
||||
return false;
|
||||
|
||||
// non windows loop
|
||||
// non Windows loop
|
||||
while (!readdir_r(dirp, &dirent, &result) && result)
|
||||
{
|
||||
const std::string virtualName = result->d_name;
|
||||
|
@ -218,7 +218,7 @@ bool SplitPath(const std::string& full_path, std::string* _pPath, std::string* _
|
||||
return false;
|
||||
|
||||
size_t dir_end = full_path.find_last_of("/"
|
||||
// windows needs the : included for something like just "C:" to be considered a directory
|
||||
// Windows needs the : included for something like just "C:" to be considered a directory
|
||||
#ifdef _WIN32
|
||||
":"
|
||||
#endif
|
||||
|
@ -32,7 +32,7 @@ int CurrentThreadId();
|
||||
void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask);
|
||||
void SetCurrentThreadAffinity(u32 mask);
|
||||
|
||||
// TODO: doesn't work on windows with (count > 2)
|
||||
// TODO: doesn't work on Windows with (count > 2)
|
||||
class Barrier
|
||||
{
|
||||
public:
|
||||
|
@ -374,7 +374,7 @@ void XEmitter::JMPptr(const OpArg &arg2)
|
||||
}
|
||||
|
||||
//Can be used to trap other processors, before overwriting their code
|
||||
// not used in dolphin
|
||||
// not used in Dolphin
|
||||
void XEmitter::JMPself()
|
||||
{
|
||||
Write8(0xEB);
|
||||
@ -968,8 +968,8 @@ void XEmitter::WriteShift(int bits, OpArg dest, OpArg &shift, int ext)
|
||||
Write8((u8)shift.offset);
|
||||
}
|
||||
|
||||
// large rotates and shift are slower on intel than amd
|
||||
// intel likes to rotate by 1, and the op is smaller too
|
||||
// large rotates and shift are slower on Intel than AMD
|
||||
// Intel likes to rotate by 1, and the op is smaller too
|
||||
void XEmitter::ROL(int bits, OpArg dest, OpArg shift) {WriteShift(bits, dest, shift, 0);}
|
||||
void XEmitter::ROR(int bits, OpArg dest, OpArg shift) {WriteShift(bits, dest, shift, 1);}
|
||||
void XEmitter::RCL(int bits, OpArg dest, OpArg shift) {WriteShift(bits, dest, shift, 2);}
|
||||
|
@ -375,7 +375,7 @@ static bool batchdecrypt(u32 *codes, u16 size)
|
||||
getbitstring(tmparray,tmparray2+5,2); // Region
|
||||
|
||||
// Grab gameid and region from the last decrypted code
|
||||
// TODO: Maybe check this against dolphin's GameID? - "code is for wrong game" type msg
|
||||
// TODO: Maybe check this against Dolphin's GameID? - "code is for wrong game" type msg
|
||||
//gameid = tmparray2[1];
|
||||
//region = tmparray2[5];
|
||||
|
||||
|
@ -901,7 +901,7 @@ bool RunCode(const ARCode &arcode)
|
||||
|
||||
default:
|
||||
LogInfo("ZCode: Unknown");
|
||||
PanicAlertT("Zero code unknown to dolphin: %08x", zcode);
|
||||
PanicAlertT("Zero code unknown to Dolphin: %08x", zcode);
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
@ -374,7 +374,7 @@ void EmuThread()
|
||||
{
|
||||
Wiimote::Initialize(s_window_handle, !s_state_filename.empty());
|
||||
|
||||
// Activate wiimotes which don't have source set to "None"
|
||||
// Activate Wiimotes which don't have source set to "None"
|
||||
for (unsigned int i = 0; i != MAX_BBMOTES; ++i)
|
||||
if (g_wiimote_sources[i])
|
||||
GetUsbPointer()->AccessWiiMote(i | 0x100)->Activate(true);
|
||||
@ -440,7 +440,7 @@ void EmuThread()
|
||||
// The EmuThread is thus an idle thread, which sleeps while
|
||||
// waiting for the program to terminate. Without this extra
|
||||
// thread, the video backend window hangs in single core mode
|
||||
// because noone is pumping messages.
|
||||
// because no one is pumping messages.
|
||||
Common::SetCurrentThreadName("Emuthread - Idle");
|
||||
|
||||
// Spawn the CPU+GPU thread
|
||||
|
@ -44,7 +44,7 @@ static s16 ADPCM_Step(u32& _rSamplePos)
|
||||
|
||||
_rSamplePos++;
|
||||
|
||||
// The advanced interpolation (linear, polyphase,...) is done by the UCode,
|
||||
// The advanced interpolation (linear, polyphase,...) is done by the ucode,
|
||||
// so we don't need to bother with it here.
|
||||
return val;
|
||||
}
|
||||
@ -87,7 +87,7 @@ void dsp_write_aram_d3(u16 value)
|
||||
// Zelda ucode writes a bunch of zeros to ARAM through d3 during
|
||||
// initialization. Don't know if it ever does it later, too.
|
||||
// Pikmin 2 Wii writes non-stop to 0x10008000-0x1000801f (non-zero values too)
|
||||
// Zelda TP WII writes non-stop to 0x10000000-0x1000001f (non-zero values too)
|
||||
// Zelda TP Wii writes non-stop to 0x10000000-0x1000001f (non-zero values too)
|
||||
u32 Address = (g_dsp.ifx_regs[DSP_ACCAH] << 16) | g_dsp.ifx_regs[DSP_ACCAL];
|
||||
|
||||
switch (g_dsp.ifx_regs[DSP_FORMAT])
|
||||
@ -116,7 +116,7 @@ u16 dsp_read_accelerator()
|
||||
// let's do the "hardware" decode DSP_FORMAT is interesting - the Zelda
|
||||
// ucode seems to indicate that the bottom two bits specify the "read size"
|
||||
// and the address multiplier. The bits above that may be things like sign
|
||||
// extention and do/do not use ADPCM. It also remains to be figured out
|
||||
// extension and do/do not use ADPCM. It also remains to be figured out
|
||||
// whether there's a difference between the usual accelerator "read
|
||||
// address" and 0xd3.
|
||||
switch (g_dsp.ifx_regs[DSP_FORMAT])
|
||||
@ -152,7 +152,7 @@ u16 dsp_read_accelerator()
|
||||
|
||||
// TODO: Take GAIN into account
|
||||
// adpcm = 0, pcm8 = 0x100, pcm16 = 0x800
|
||||
// games using pcm8 : Phoenix Wright Ace Attorney (Wiiware), Megaman 9-10 (WiiWare)
|
||||
// games using pcm8 : Phoenix Wright Ace Attorney (WiiWare), Megaman 9-10 (WiiWare)
|
||||
// games using pcm16: GC Sega games, ...
|
||||
|
||||
// Check for loop.
|
||||
|
@ -34,7 +34,7 @@ namespace Ext
|
||||
|
||||
inline bool IsSameMemArea(u16 a, u16 b)
|
||||
{
|
||||
//LM: tested on WII
|
||||
// LM: tested on Wii
|
||||
if ((a>>10)==(b>>10))
|
||||
return true;
|
||||
else
|
||||
@ -532,7 +532,7 @@ void applyWriteBackLog()
|
||||
// then 0 | ext output = ext output and if it did then bitwise or is still the
|
||||
// right thing to do
|
||||
// Only needed for cases when mainop and extended are modifying the same ACC
|
||||
// Games are not doing that + in motorola (similar dsp) dox this is forbidden to do.
|
||||
// Games are not doing that + in motorola (similar DSP) dox this is forbidden to do.
|
||||
void zeroWriteBackLog()
|
||||
{
|
||||
#ifdef PRECISE_BACKLOG
|
||||
|
@ -48,7 +48,7 @@ void WriteCR(u16 val)
|
||||
else if (val == 4)
|
||||
{
|
||||
// HAX!
|
||||
// OSInitAudioSystem ucode should send this mail - not dsp core itself
|
||||
// OSInitAudioSystem ucode should send this mail - not DSP core itself
|
||||
INFO_LOG(DSPLLE,"DSP_CONTROL INIT");
|
||||
init_hax = true;
|
||||
val |= 0x800;
|
||||
|
@ -509,7 +509,7 @@ void DSPEmitter::decrease_addr_reg(int reg)
|
||||
|
||||
|
||||
// EAX - destination address
|
||||
// ECX - Base of dram
|
||||
// ECX - Base of DRAM
|
||||
void DSPEmitter::dmem_write(X64Reg value)
|
||||
{
|
||||
// if (saddr == 0)
|
||||
|
@ -121,7 +121,7 @@ void GetStringVA(std::string& _rOutBuffer, u32 strReg)
|
||||
}
|
||||
|
||||
case 'p':
|
||||
// Override, so 64bit dolphin prints 32bit pointers, since the ppc is 32bit :)
|
||||
// Override, so 64bit Dolphin prints 32bit pointers, since the ppc is 32bit :)
|
||||
_rOutBuffer += StringFromFormat("%x", (u32)Parameter);
|
||||
break;
|
||||
|
||||
|
@ -184,7 +184,7 @@ static DSPEmulator *dsp_emulator;
|
||||
static int dsp_slice = 0;
|
||||
static bool dsp_is_lle = false;
|
||||
|
||||
//time given to lle dsp on every read of the high bits in a mailbox
|
||||
// time given to LLE DSP on every read of the high bits in a mailbox
|
||||
static const int DSP_MAIL_SLICE=72;
|
||||
|
||||
void DoState(PointerWrap &p)
|
||||
@ -245,7 +245,7 @@ void Init(bool hle)
|
||||
}
|
||||
else
|
||||
{
|
||||
// On the GC, ARAM is accessible only through this interface.
|
||||
// On the GameCube, ARAM is accessible only through this interface.
|
||||
g_ARAM.wii_mode = false;
|
||||
g_ARAM.size = ARAM_SIZE;
|
||||
g_ARAM.mask = ARAM_MASK;
|
||||
@ -366,7 +366,7 @@ void RegisterMMIO(MMIO::Mapping* mmio, u32 base)
|
||||
|
||||
// Not really sure if this is correct, but it works...
|
||||
// Kind of a hack because DSP_CONTROL_MASK should make this bit
|
||||
// only viewable to dsp emulator
|
||||
// only viewable to DSP emulator
|
||||
if (val & 1 /*DSPReset*/)
|
||||
{
|
||||
g_audioDMA.AudioDMAControl.Hex = 0;
|
||||
@ -480,15 +480,15 @@ void GenerateDSPInterruptFromDSPEmu(DSPInterruptType type)
|
||||
CoreTiming::ScheduleEvent_Threadsafe_Immediate(et_GenerateDSPInterrupt, type);
|
||||
}
|
||||
|
||||
// called whenever SystemTimers thinks the dsp deserves a few more cycles
|
||||
// called whenever SystemTimers thinks the DSP deserves a few more cycles
|
||||
void UpdateDSPSlice(int cycles)
|
||||
{
|
||||
if (dsp_is_lle)
|
||||
{
|
||||
//use up the rest of the slice(if any)
|
||||
// use up the rest of the slice(if any)
|
||||
dsp_emulator->DSP_Update(dsp_slice);
|
||||
dsp_slice %= 6;
|
||||
//note the new budget
|
||||
// note the new budget
|
||||
dsp_slice += cycles;
|
||||
}
|
||||
else
|
||||
@ -588,7 +588,7 @@ static void Do_ARAM_DMA()
|
||||
}
|
||||
else
|
||||
{
|
||||
// Assuming no external ARAM installed; returns zeroes on out of bounds reads (verified on real HW)
|
||||
// Assuming no external ARAM installed; returns zeros on out of bounds reads (verified on real HW)
|
||||
while (g_arDMA.Cnt.count)
|
||||
{
|
||||
Memory::Write_U64(0, g_arDMA.MMAddr);
|
||||
@ -646,7 +646,7 @@ static void Do_ARAM_DMA()
|
||||
|
||||
// (shuffle2) I still don't believe that this hack is actually needed... :(
|
||||
// Maybe the Wii Sports ucode is processed incorrectly?
|
||||
// (LM) It just means that dsp reads via '0xffdd' on WII can end up in EXRAM or main RAM
|
||||
// (LM) It just means that DSP reads via '0xffdd' on Wii can end up in EXRAM or main RAM
|
||||
u8 ReadARAM(u32 _iAddress)
|
||||
{
|
||||
//NOTICE_LOG(DSPINTERFACE, "ReadARAM 0x%08x", _iAddress);
|
||||
@ -665,8 +665,8 @@ u8 ReadARAM(u32 _iAddress)
|
||||
|
||||
void WriteARAM(u8 value, u32 _uAddress)
|
||||
{
|
||||
//NOTICE_LOG(DSPINTERFACE, "WriteARAM 0x%08x", _uAddress);
|
||||
//TODO: verify this on WII
|
||||
// NOTICE_LOG(DSPINTERFACE, "WriteARAM 0x%08x", _uAddress);
|
||||
// TODO: verify this on Wii
|
||||
g_ARAM.ptr[_uAddress & g_ARAM.mask] = value;
|
||||
}
|
||||
|
||||
|
@ -60,7 +60,7 @@ void GBAUCode::HandleMail(u32 mail)
|
||||
u32 pad[3];
|
||||
} sec_params;
|
||||
|
||||
// 32 bytes from mram addr to dram @ 0
|
||||
// 32 bytes from mram addr to DRAM @ 0
|
||||
for (int i = 0; i < 8; i++, mramaddr += 4)
|
||||
((u32*)&sec_params)[i] = HLEMemory_Read_U32(mramaddr);
|
||||
|
||||
|
@ -66,11 +66,11 @@ UCodeInterface* UCodeFactory(u32 crc, DSPHLE* dsphle, bool wii)
|
||||
INFO_LOG(DSPHLE, "CRC %08x: Zelda ucode chosen", crc);
|
||||
return new ZeldaUCode(dsphle, crc);
|
||||
|
||||
// WII CRCs
|
||||
// Wii CRCs
|
||||
case 0xb7eb9a9c: // Wii Pikmin - PAL
|
||||
case 0xeaeb38cc: // Wii Pikmin 2 - PAL
|
||||
case 0x6c3f6f94: // Zelda TP - PAL
|
||||
case 0xd643001f: // Mario Galaxy - PAL / WII DK Jungle Beat - PAL
|
||||
case 0xd643001f: // Mario Galaxy - PAL / Wii DK Jungle Beat - PAL
|
||||
INFO_LOG(DSPHLE, "CRC %08x: Zelda Wii ucode chosen\n", crc);
|
||||
return new ZeldaUCode(dsphle, crc);
|
||||
|
||||
@ -166,12 +166,12 @@ void UCodeInterface::PrepareBootUCode(u32 mail)
|
||||
if (m_next_ucode.mram_size)
|
||||
{
|
||||
WARN_LOG(DSPHLE,
|
||||
"Trying to boot new ucode with dram download - not implemented");
|
||||
"Trying to boot new ucode with DRAM download - not implemented");
|
||||
}
|
||||
if (m_next_ucode.dram_size)
|
||||
{
|
||||
WARN_LOG(DSPHLE,
|
||||
"Trying to boot new ucode with dram upload - not implemented");
|
||||
"Trying to boot new ucode with DRAM upload - not implemented");
|
||||
}
|
||||
|
||||
m_dsphle->SwapUCode(ector_crc);
|
||||
|
@ -353,7 +353,7 @@ void ZeldaUCode::HandleMail_NormalVersion(u32 mail)
|
||||
case 0x0003: // Do nothing - continue normally
|
||||
return;
|
||||
|
||||
case 0x0001: // accepts params to either dma to iram and/or dram (used for hotbooting a new ucode)
|
||||
case 0x0001: // accepts params to either DMA to iram and/or DRAM (used for hotbooting a new ucode)
|
||||
// TODO find a better way to protect from HLEMixer?
|
||||
m_upload_setup_in_progress = true;
|
||||
return;
|
||||
|
@ -337,7 +337,7 @@ void DSPLLE::DSP_Update(int cycles)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Wait for dsp thread to complete its cycle. Note: this logic should be thought through.
|
||||
// Wait for DSP thread to complete its cycle. Note: this logic should be thought through.
|
||||
ppcEvent.Wait();
|
||||
{
|
||||
std::lock_guard<std::mutex> lk(m_csDSPCycleCountActive);
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "Core/HW/Memmap.h"
|
||||
|
||||
// XXX: The BBA stores multi-byte elements as little endian.
|
||||
// Multiple parts of this implementation depend on dolphin
|
||||
// Multiple parts of this implementation depend on Dolphin
|
||||
// being compiled for a little endian host.
|
||||
|
||||
|
||||
|
@ -296,7 +296,7 @@ void CEXIIPL::TransferByte(u8& _uByte)
|
||||
case REGION_WRTC0:
|
||||
case REGION_WRTC1:
|
||||
case REGION_WRTC2:
|
||||
// WII only RTC flags... afaik just the Wii menu initialize it
|
||||
// Wii only RTC flags... afaik just the Wii Menu initialize it
|
||||
default:
|
||||
if ((m_uAddress >> 6) < ROM_SIZE)
|
||||
{
|
||||
|
@ -216,7 +216,7 @@ void CEXIMemoryCard::SetupGciFolder(u16 sizeMb)
|
||||
{
|
||||
// TODO more user friendly abort
|
||||
PanicAlertT("%s is not a directory, failed to move to *.original.\n Verify your write permissions or move "
|
||||
"the file outside of dolphin",
|
||||
"the file outside of Dolphin",
|
||||
strDirectoryName.c_str());
|
||||
exit(0);
|
||||
}
|
||||
|
@ -140,7 +140,7 @@ void GCPad::LoadDefaults(const ControllerInterface& ciface)
|
||||
#ifdef _WIN32
|
||||
set_control(m_buttons, 5, "RETURN"); // Start
|
||||
#else
|
||||
// osx/linux
|
||||
// OS X/Linux
|
||||
set_control(m_buttons, 5, "Return"); // Start
|
||||
#endif
|
||||
|
||||
|
@ -290,7 +290,7 @@ struct SVIFilterCoefTables
|
||||
UVIFilterCoefTable4 Tables36[4];
|
||||
};
|
||||
|
||||
// Debug video mode only, probably never used in dolphin...
|
||||
// Debug video mode only, probably never used in Dolphin...
|
||||
union UVIBorderBlankRegister
|
||||
{
|
||||
u32 Hex;
|
||||
|
@ -39,7 +39,7 @@ void Shutdown()
|
||||
// if plugin isn't initialized, init and load config
|
||||
void Initialize(void* const hwnd, bool wait)
|
||||
{
|
||||
// add 4 wiimotes
|
||||
// add 4 Wiimotes
|
||||
for (unsigned int i = WIIMOTE_CHAN_0; i<MAX_BBMOTES; ++i)
|
||||
s_config.controllers.push_back(new WiimoteEmu::Wiimote(i));
|
||||
|
||||
|
@ -70,7 +70,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)
|
||||
{
|
||||
INFO_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index, m_reporting_channel, sr->wm);
|
||||
|
||||
// wiibrew:
|
||||
// WiiBrew:
|
||||
// In every single Output Report, bit 0 (0x01) of the first byte controls the Rumble feature.
|
||||
m_rumble_on = sr->rumble;
|
||||
|
||||
@ -221,7 +221,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)
|
||||
// status values
|
||||
*(wm_status_report*)(data + 2) = m_status;
|
||||
|
||||
// hybrid wiimote stuff
|
||||
// hybrid Wiimote stuff
|
||||
if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))
|
||||
{
|
||||
using namespace WiimoteReal;
|
||||
@ -380,13 +380,13 @@ void Wiimote::ReadData(const wm_read_data* const rd)
|
||||
// ignore the 0x010000 bit
|
||||
address &= 0xFEFFFF;
|
||||
|
||||
// hybrid wiimote stuff
|
||||
// relay the read data request to real-wiimote
|
||||
// hybrid Wiimote stuff
|
||||
// relay the read data request to real-Wiimote
|
||||
if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && ((0xA4 != (address >> 16)) || (m_extension->switch_extension <= 0)))
|
||||
{
|
||||
WiimoteReal::InterruptChannel(m_index, m_reporting_channel, ((u8*)rd) - 2, sizeof(wm_read_data) + 2); // hacky
|
||||
|
||||
// don't want emu-wiimote to send reply
|
||||
// don't want emu-Wiimote to send reply
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -338,17 +338,17 @@ bool Wiimote::Step()
|
||||
m_read_requests.pop();
|
||||
}
|
||||
|
||||
// dont send any other reports
|
||||
// don't send any other reports
|
||||
return true;
|
||||
}
|
||||
|
||||
// check if a status report needs to be sent
|
||||
// this happens on wiimote sync and when extensions are switched
|
||||
// this happens on Wiimote sync and when extensions are switched
|
||||
if (m_extension->active_extension != m_extension->switch_extension)
|
||||
{
|
||||
RequestStatus();
|
||||
|
||||
// Wiibrew: Following a connection or disconnection event on the Extension Port,
|
||||
// WiiBrew: Following a connection or disconnection event on the Extension Port,
|
||||
// data reporting is disabled and the Data Reporting Mode must be reset before new data can arrive.
|
||||
// after a game receives an unrequested status report,
|
||||
// it expects data reports to stop until it sets the reporting mode again
|
||||
@ -655,7 +655,7 @@ void Wiimote::Update()
|
||||
if (rptf.ext)
|
||||
GetExtData(data + rptf.ext);
|
||||
|
||||
// hybrid wiimote stuff (for now, it's not supported while recording)
|
||||
// hybrid Wiimote stuff (for now, it's not supported while recording)
|
||||
if (WIIMOTE_SRC_HYBRID == g_wiimote_sources[m_index] && !Movie::IsRecordingInput())
|
||||
{
|
||||
using namespace WiimoteReal;
|
||||
@ -675,7 +675,7 @@ void Wiimote::Update()
|
||||
{
|
||||
const ReportFeatures& real_rptf = reporting_mode_features[real_data[1] - WM_REPORT_CORE];
|
||||
|
||||
// force same report type from real-wiimote
|
||||
// force same report type from real-Wiimote
|
||||
if (&real_rptf != &rptf)
|
||||
rptf_size = 0;
|
||||
|
||||
@ -723,7 +723,7 @@ void Wiimote::Update()
|
||||
|
||||
}
|
||||
|
||||
// copy over report from real-wiimote
|
||||
// copy over report from real-Wiimote
|
||||
if (-1 == rptf_size)
|
||||
{
|
||||
std::copy(rpt.begin(), rpt.end(), data);
|
||||
@ -760,7 +760,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size
|
||||
// Check for custom communication
|
||||
if (99 == _channelID)
|
||||
{
|
||||
// wiimote disconnected
|
||||
// Wiimote disconnected
|
||||
//PanicAlert( "Wiimote Disconnected" );
|
||||
|
||||
// reset eeprom/register/reporting mode
|
||||
|
@ -169,10 +169,10 @@ private:
|
||||
Extension* m_extension;
|
||||
ControlGroup* m_options;
|
||||
|
||||
// WiiMote accel data
|
||||
// Wiimote accel data
|
||||
AccelData m_accel;
|
||||
|
||||
// wiimote index, 0-3
|
||||
// Wiimote index, 0-3
|
||||
const u8 m_index;
|
||||
|
||||
double ir_sin, ir_cos; //for the low pass filter
|
||||
|
@ -40,7 +40,7 @@ WiimoteScanner::WiimoteScanner()
|
||||
, device_id(-1)
|
||||
, device_sock(-1)
|
||||
{
|
||||
// Get the id of the first bluetooth device.
|
||||
// Get the id of the first Bluetooth device.
|
||||
device_id = hci_get_route(nullptr);
|
||||
if (device_id < 0)
|
||||
{
|
||||
@ -52,7 +52,7 @@ WiimoteScanner::WiimoteScanner()
|
||||
device_sock = hci_open_dev(device_id);
|
||||
if (device_sock < 0)
|
||||
{
|
||||
ERROR_LOG(WIIMOTE, "Unable to open bluetooth.");
|
||||
ERROR_LOG(WIIMOTE, "Unable to open Bluetooth.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -81,15 +81,15 @@ void WiimoteScanner::FindWiimotes(std::vector<Wiimote*> & found_wiimotes, Wiimot
|
||||
auto* scan_infos_ptr = scan_infos;
|
||||
found_board = nullptr;
|
||||
|
||||
// Scan for bluetooth devices
|
||||
// Scan for Bluetooth devices
|
||||
int const found_devices = hci_inquiry(device_id, wait_len, max_infos, nullptr, &scan_infos_ptr, IREQ_CACHE_FLUSH);
|
||||
if (found_devices < 0)
|
||||
{
|
||||
ERROR_LOG(WIIMOTE, "Error searching for bluetooth devices.");
|
||||
ERROR_LOG(WIIMOTE, "Error searching for Bluetooth devices.");
|
||||
return;
|
||||
}
|
||||
|
||||
DEBUG_LOG(WIIMOTE, "Found %i bluetooth device(s).", found_devices);
|
||||
DEBUG_LOG(WIIMOTE, "Found %i Bluetooth device(s).", found_devices);
|
||||
|
||||
// Display discovered devices
|
||||
for (int i = 0; i < found_devices; ++i)
|
||||
@ -111,7 +111,7 @@ void WiimoteScanner::FindWiimotes(std::vector<Wiimote*> & found_wiimotes, Wiimot
|
||||
|
||||
// TODO: do this
|
||||
|
||||
// Determine if this wiimote has already been found.
|
||||
// Determine if this Wiimote has already been found.
|
||||
//for (int j = 0; j < MAX_WIIMOTES && new_wiimote; ++j)
|
||||
//{
|
||||
// if (wm[j] && bacmp(&scan_infos[i].bdaddr,&wm[j]->bdaddr) == 0)
|
||||
@ -133,7 +133,7 @@ void WiimoteScanner::FindWiimotes(std::vector<Wiimote*> & found_wiimotes, Wiimot
|
||||
else
|
||||
{
|
||||
found_wiimotes.push_back(wm);
|
||||
NOTICE_LOG(WIIMOTE, "Found wiimote (%s).", bdaddr_str);
|
||||
NOTICE_LOG(WIIMOTE, "Found Wiimote (%s).", bdaddr_str);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -163,7 +163,7 @@ WiimoteLinux::~WiimoteLinux()
|
||||
close(m_wakeup_pipe_r);
|
||||
}
|
||||
|
||||
// Connect to a wiimote with a known address.
|
||||
// Connect to a Wiimote with a known address.
|
||||
bool WiimoteLinux::ConnectInternal()
|
||||
{
|
||||
sockaddr_l2 addr = {};
|
||||
@ -176,7 +176,7 @@ bool WiimoteLinux::ConnectInternal()
|
||||
if ((m_cmd_sock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP)) == -1 ||
|
||||
connect(m_cmd_sock, (sockaddr*)&addr, sizeof(addr)) < 0)
|
||||
{
|
||||
WARN_LOG(WIIMOTE, "Unable to open output socket to wiimote: %s", strerror(errno));
|
||||
WARN_LOG(WIIMOTE, "Unable to open output socket to Wiimote: %s", strerror(errno));
|
||||
close(m_cmd_sock);
|
||||
m_cmd_sock = -1;
|
||||
return false;
|
||||
@ -187,7 +187,7 @@ bool WiimoteLinux::ConnectInternal()
|
||||
if ((m_int_sock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP)) == -1 ||
|
||||
connect(m_int_sock, (sockaddr*)&addr, sizeof(addr)) < 0)
|
||||
{
|
||||
WARN_LOG(WIIMOTE, "Unable to open input socket from wiimote: %s", strerror(errno));
|
||||
WARN_LOG(WIIMOTE, "Unable to open input socket from Wiimote: %s", strerror(errno));
|
||||
close(m_int_sock);
|
||||
close(m_cmd_sock);
|
||||
m_int_sock = m_cmd_sock = -1;
|
||||
@ -234,7 +234,7 @@ int WiimoteLinux::IORead(u8* buf)
|
||||
|
||||
if (select(m_int_sock + 1, &fds, nullptr, nullptr, nullptr) == -1)
|
||||
{
|
||||
ERROR_LOG(WIIMOTE, "Unable to select wiimote %i input socket.", m_index + 1);
|
||||
ERROR_LOG(WIIMOTE, "Unable to select Wiimote %i input socket.", m_index + 1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -256,11 +256,11 @@ int WiimoteLinux::IORead(u8* buf)
|
||||
if (r == -1)
|
||||
{
|
||||
// Error reading data
|
||||
ERROR_LOG(WIIMOTE, "Receiving data from wiimote %i.", m_index + 1);
|
||||
ERROR_LOG(WIIMOTE, "Receiving data from Wiimote %i.", m_index + 1);
|
||||
|
||||
if (errno == ENOTCONN)
|
||||
{
|
||||
// This can happen if the bluetooth dongle is disconnected
|
||||
// This can happen if the Bluetooth dongle is disconnected
|
||||
ERROR_LOG(WIIMOTE, "Bluetooth appears to be disconnected. "
|
||||
"Wiimote %i will be disconnected.", m_index + 1);
|
||||
}
|
||||
|
@ -176,7 +176,7 @@ inline void init_lib()
|
||||
if (!load_hid() || !load_bthprops())
|
||||
{
|
||||
NOTICE_LOG(WIIMOTE,
|
||||
"Failed to load bluetooth support libraries, wiimotes will not function");
|
||||
"Failed to load Bluetooth support libraries, Wiimotes will not function");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -202,11 +202,11 @@ protected:
|
||||
int IOWrite(u8 const* buf, size_t len) override;
|
||||
|
||||
private:
|
||||
std::basic_string<TCHAR> m_devicepath; // Unique wiimote reference
|
||||
std::basic_string<TCHAR> m_devicepath; // Unique Wiimote reference
|
||||
HANDLE m_dev_handle; // HID handle
|
||||
OVERLAPPED m_hid_overlap_read; // Overlap handles
|
||||
OVERLAPPED m_hid_overlap_write;
|
||||
enum win_bt_stack_t m_stack; // Type of bluetooth stack to use
|
||||
enum win_bt_stack_t m_stack; // Type of Bluetooth stack to use
|
||||
};
|
||||
|
||||
int _IOWrite(HANDLE &dev_handle, OVERLAPPED &hid_overlap_write, enum win_bt_stack_t &stack, const u8* buf, size_t len, DWORD* written);
|
||||
@ -250,15 +250,15 @@ void WiimoteScanner::Update()
|
||||
});
|
||||
|
||||
// Some hacks that allows disconnects to be detected before connections are handled
|
||||
// workaround for wiimote 1 moving to slot 2 on temporary disconnect
|
||||
// workaround for Wiimote 1 moving to slot 2 on temporary disconnect
|
||||
if (forgot_some)
|
||||
SLEEP(100);
|
||||
}
|
||||
|
||||
// Find and connect wiimotes.
|
||||
// Does not replace already found wiimotes even if they are disconnected.
|
||||
// wm is an array of max_wiimotes wiimotes
|
||||
// Returns the total number of found and connected wiimotes.
|
||||
// Find and connect Wiimotes.
|
||||
// Does not replace already found Wiimotes even if they are disconnected.
|
||||
// wm is an array of max_wiimotes Wiimotes
|
||||
// Returns the total number of found and connected Wiimotes.
|
||||
void WiimoteScanner::FindWiimotes(std::vector<Wiimote*> & found_wiimotes, Wiimote* & found_board)
|
||||
{
|
||||
if (!s_loaded_ok)
|
||||
@ -359,7 +359,7 @@ int CheckDeviceType_Read(HANDLE &dev_handle, u8* buf, int attempts)
|
||||
|
||||
// A convoluted way of checking if a device is a Wii Balance Board and if it is a connectible Wiimote.
|
||||
// Because nothing on Windows should be easy.
|
||||
// (We can't seem to easily identify the bluetooth device an HID device belongs to...)
|
||||
// (We can't seem to easily identify the Bluetooth device an HID device belongs to...)
|
||||
void WiimoteScanner::CheckDeviceType(std::basic_string<TCHAR> &devicepath, bool &real_wiimote, bool &is_bb)
|
||||
{
|
||||
real_wiimote = false;
|
||||
@ -519,7 +519,7 @@ bool WiimoteScanner::IsReady() const
|
||||
}
|
||||
}
|
||||
|
||||
// Connect to a wiimote with a known device path.
|
||||
// Connect to a Wiimote with a known device path.
|
||||
bool WiimoteWindows::ConnectInternal()
|
||||
{
|
||||
if (IsConnected())
|
||||
@ -532,8 +532,8 @@ bool WiimoteWindows::ConnectInternal()
|
||||
|
||||
auto const open_flags = FILE_SHARE_READ | FILE_SHARE_WRITE;
|
||||
#else
|
||||
// Having no FILE_SHARE_WRITE disallows us from connecting to the same wiimote twice.
|
||||
// (And disallows using wiimotes in use by other programs)
|
||||
// Having no FILE_SHARE_WRITE disallows us from connecting to the same Wiimote twice.
|
||||
// (And disallows using Wiimotes in use by other programs)
|
||||
// This is what "WiiYourself" does.
|
||||
// Apparently this doesn't work for everyone. It might be their fault.
|
||||
auto const open_flags = FILE_SHARE_READ;
|
||||
@ -727,7 +727,7 @@ int _IOWrite(HANDLE &dev_handle, OVERLAPPED &hid_overlap_write, enum win_bt_stac
|
||||
NOTICE_LOG(WIIMOTE, "WiimoteIOWrite[MSBT_STACK_MS]: Unable to send data to the Wiimote");
|
||||
}
|
||||
else if (err != 0x1F) // Some third-party adapters (DolphinBar) use this
|
||||
// error code to signal the absence of a WiiMote
|
||||
// error code to signal the absence of a Wiimote
|
||||
// linked to the HID device.
|
||||
{
|
||||
WARN_LOG(WIIMOTE, "IOWrite[MSBT_STACK_MS]: ERROR: %08x", err);
|
||||
@ -795,7 +795,7 @@ int WiimoteWindows::IOWrite(const u8* buf, size_t len)
|
||||
return _IOWrite(m_dev_handle, m_hid_overlap_write, m_stack, buf, len, nullptr);
|
||||
}
|
||||
|
||||
// invokes callback for each found wiimote bluetooth device
|
||||
// invokes callback for each found Wiimote Bluetooth device
|
||||
template <typename T>
|
||||
void ProcessWiimotes(bool new_scan, T& callback)
|
||||
{
|
||||
|
@ -68,7 +68,7 @@ void WiimoteScanner::FindWiimotes(std::vector<Wiimote*> & found_wiimotes, Wiimot
|
||||
bth = [[IOBluetoothHostController alloc] init];
|
||||
if ([bth addressAsString] == nil)
|
||||
{
|
||||
WARN_LOG(WIIMOTE, "No bluetooth host controller");
|
||||
WARN_LOG(WIIMOTE, "No Bluetooth host controller");
|
||||
[bth release];
|
||||
return;
|
||||
}
|
||||
@ -81,7 +81,7 @@ void WiimoteScanner::FindWiimotes(std::vector<Wiimote*> & found_wiimotes, Wiimot
|
||||
|
||||
if ([bti start] != kIOReturnSuccess)
|
||||
{
|
||||
ERROR_LOG(WIIMOTE, "Unable to do bluetooth discovery");
|
||||
ERROR_LOG(WIIMOTE, "Unable to do Bluetooth discovery");
|
||||
[bth release];
|
||||
[sbt release];
|
||||
return;
|
||||
@ -96,7 +96,7 @@ void WiimoteScanner::FindWiimotes(std::vector<Wiimote*> & found_wiimotes, Wiimot
|
||||
int found_devices = [[bti foundDevices] count];
|
||||
|
||||
if (found_devices)
|
||||
NOTICE_LOG(WIIMOTE, "Found %i bluetooth devices", found_devices);
|
||||
NOTICE_LOG(WIIMOTE, "Found %i Bluetooth devices", found_devices);
|
||||
|
||||
en = [[bti foundDevices] objectEnumerator];
|
||||
for (int i = 0; i < found_devices; i++)
|
||||
@ -149,7 +149,7 @@ WiimoteDarwin::~WiimoteDarwin()
|
||||
DisablePowerAssertionInternal();
|
||||
}
|
||||
|
||||
// Connect to a wiimote with a known address.
|
||||
// Connect to a Wiimote with a known address.
|
||||
bool WiimoteDarwin::ConnectInternal()
|
||||
{
|
||||
if (IsConnected())
|
||||
@ -162,7 +162,7 @@ bool WiimoteDarwin::ConnectInternal()
|
||||
IOReturn ret = [m_btd openConnection];
|
||||
if (ret)
|
||||
{
|
||||
ERROR_LOG(WIIMOTE, "Unable to open Bluetooth connection to wiimote %i: %x",
|
||||
ERROR_LOG(WIIMOTE, "Unable to open Bluetooth connection to Wiimote %i: %x",
|
||||
m_index + 1, ret);
|
||||
[cbt release];
|
||||
return false;
|
||||
@ -172,7 +172,7 @@ bool WiimoteDarwin::ConnectInternal()
|
||||
withPSM: kBluetoothL2CAPPSMHIDControl delegate: cbt];
|
||||
if (ret)
|
||||
{
|
||||
ERROR_LOG(WIIMOTE, "Unable to open control channel for wiimote %i: %x",
|
||||
ERROR_LOG(WIIMOTE, "Unable to open control channel for Wiimote %i: %x",
|
||||
m_index + 1, ret);
|
||||
goto bad;
|
||||
}
|
||||
@ -187,13 +187,13 @@ bool WiimoteDarwin::ConnectInternal()
|
||||
withPSM: kBluetoothL2CAPPSMHIDInterrupt delegate: cbt];
|
||||
if (ret)
|
||||
{
|
||||
WARN_LOG(WIIMOTE, "Unable to open interrupt channel for wiimote %i: %x",
|
||||
WARN_LOG(WIIMOTE, "Unable to open interrupt channel for Wiimote %i: %x",
|
||||
m_index + 1, ret);
|
||||
goto bad;
|
||||
}
|
||||
[m_ichan retain];
|
||||
|
||||
NOTICE_LOG(WIIMOTE, "Connected to wiimote %i at %s",
|
||||
NOTICE_LOG(WIIMOTE, "Connected to Wiimote %i at %s",
|
||||
m_index + 1, [[m_btd addressString] UTF8String]);
|
||||
|
||||
m_connected = true;
|
||||
@ -210,7 +210,7 @@ bad:
|
||||
return false;
|
||||
}
|
||||
|
||||
// Disconnect a wiimote.
|
||||
// Disconnect a Wiimote.
|
||||
void WiimoteDarwin::DisconnectInternal()
|
||||
{
|
||||
[m_ichan closeChannel];
|
||||
@ -226,7 +226,7 @@ void WiimoteDarwin::DisconnectInternal()
|
||||
if (!IsConnected())
|
||||
return;
|
||||
|
||||
NOTICE_LOG(WIIMOTE, "Disconnecting wiimote %i", m_index + 1);
|
||||
NOTICE_LOG(WIIMOTE, "Disconnecting Wiimote %i", m_index + 1);
|
||||
|
||||
m_connected = false;
|
||||
}
|
||||
@ -301,7 +301,7 @@ void WiimoteDarwin::DisablePowerAssertionInternal()
|
||||
- (void) deviceInquiryDeviceFound: (IOBluetoothDeviceInquiry *) sender
|
||||
device: (IOBluetoothDevice *) device
|
||||
{
|
||||
NOTICE_LOG(WIIMOTE, "Discovered bluetooth device at %s: %s",
|
||||
NOTICE_LOG(WIIMOTE, "Discovered Bluetooth device at %s: %s",
|
||||
[[device addressString] UTF8String],
|
||||
[[device name] UTF8String]);
|
||||
|
||||
@ -330,18 +330,18 @@ void WiimoteDarwin::DisablePowerAssertionInternal()
|
||||
}
|
||||
|
||||
if (wm == nullptr) {
|
||||
ERROR_LOG(WIIMOTE, "Received packet for unknown wiimote");
|
||||
ERROR_LOG(WIIMOTE, "Received packet for unknown Wiimote");
|
||||
return;
|
||||
}
|
||||
|
||||
if (length > MAX_PAYLOAD) {
|
||||
WARN_LOG(WIIMOTE, "Dropping packet for wiimote %i, too large",
|
||||
WARN_LOG(WIIMOTE, "Dropping packet for Wiimote %i, too large",
|
||||
wm->m_index + 1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (wm->m_inputlen != -1) {
|
||||
WARN_LOG(WIIMOTE, "Dropping packet for wiimote %i, queue full",
|
||||
WARN_LOG(WIIMOTE, "Dropping packet for Wiimote %i, queue full",
|
||||
wm->m_index + 1);
|
||||
return;
|
||||
}
|
||||
@ -369,11 +369,11 @@ void WiimoteDarwin::DisablePowerAssertionInternal()
|
||||
}
|
||||
|
||||
if (wm == nullptr) {
|
||||
ERROR_LOG(WIIMOTE, "Channel for unknown wiimote was closed");
|
||||
ERROR_LOG(WIIMOTE, "Channel for unknown Wiimote was closed");
|
||||
return;
|
||||
}
|
||||
|
||||
WARN_LOG(WIIMOTE, "Lost channel to wiimote %i", wm->m_index + 1);
|
||||
WARN_LOG(WIIMOTE, "Lost channel to Wiimote %i", wm->m_index + 1);
|
||||
|
||||
wm->DisconnectInternal();
|
||||
}
|
||||
|
@ -630,7 +630,7 @@ void Stop()
|
||||
wiimote->EmuStop();
|
||||
}
|
||||
|
||||
// called when the dolphin app exits
|
||||
// called when the Dolphin app exits
|
||||
void Shutdown()
|
||||
{
|
||||
g_wiimote_scanner.StopScanning();
|
||||
|
@ -53,7 +53,7 @@ public:
|
||||
|
||||
// connecting and disconnecting from physical devices
|
||||
// (using address inserted by FindWiimotes)
|
||||
// these are called from the wiimote's thread.
|
||||
// these are called from the Wiimote's thread.
|
||||
virtual bool ConnectInternal() = 0;
|
||||
virtual void DisconnectInternal() = 0;
|
||||
|
||||
@ -124,7 +124,7 @@ public:
|
||||
|
||||
void FindWiimotes(std::vector<Wiimote*>&, Wiimote*&);
|
||||
|
||||
// function called when not looking for more wiimotes
|
||||
// function called when not looking for more Wiimotes
|
||||
void Update();
|
||||
|
||||
private:
|
||||
|
@ -81,8 +81,8 @@ CWII_IPC_HLE_Device_usb_oh1_57e_305::CWII_IPC_HLE_Device_usb_oh1_57e_305(u32 _De
|
||||
i++;
|
||||
}
|
||||
|
||||
// save now so that when games load sysconf file it includes the new wiimotes
|
||||
// and the correct order for connected wiimotes
|
||||
// save now so that when games load sysconf file it includes the new Wiimotes
|
||||
// and the correct order for connected Wiimotes
|
||||
if (!SConfig::GetInstance().m_SYSCONF->SetArrayData("BT.DINF", (u8*)&BT_DINF, sizeof(_conf_pads)) || !SConfig::GetInstance().m_SYSCONF->Save())
|
||||
PanicAlertT("Failed to write BT.DINF to SYSCONF");
|
||||
}
|
||||
@ -441,7 +441,7 @@ u32 CWII_IPC_HLE_Device_usb_oh1_57e_305::Update()
|
||||
packet_transferred = true;
|
||||
}
|
||||
|
||||
// We wait for ScanEnable to be sent from the bt stack through HCI_CMD_WRITE_SCAN_ENABLE
|
||||
// We wait for ScanEnable to be sent from the Bluetooth stack through HCI_CMD_WRITE_SCAN_ENABLE
|
||||
// before we initiate the connection.
|
||||
//
|
||||
// FiRES: TODO find a better way to do this
|
||||
@ -1857,8 +1857,8 @@ CWII_IPC_HLE_WiiMote* CWII_IPC_HLE_Device_usb_oh1_57e_305::AccessWiiMote(u16 _Co
|
||||
return &wiimote;
|
||||
}
|
||||
|
||||
ERROR_LOG(WII_IPC_WIIMOTE, "Can't find WiiMote by connection handle %02x", _ConnectionHandle);
|
||||
PanicAlertT("Can't find WiiMote by connection handle %02x", _ConnectionHandle);
|
||||
ERROR_LOG(WII_IPC_WIIMOTE, "Can't find Wiimote by connection handle %02x", _ConnectionHandle);
|
||||
PanicAlertT("Can't find Wiimote by connection handle %02x", _ConnectionHandle);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,7 @@ struct SQueuedEvent
|
||||
// Important to remember that this class is for /dev/usb/oh1/57e/305 ONLY
|
||||
// /dev/usb/oh1 -> internal usb bus
|
||||
// 57e/305 -> VendorID/ProductID of device on usb bus
|
||||
// This device is ONLY the internal bluetooth module (based on BCM2045 chip)
|
||||
// This device is ONLY the internal Bluetooth module (based on BCM2045 chip)
|
||||
class CWII_IPC_HLE_Device_usb_oh1_57e_305 : public IWII_IPC_HLE_Device
|
||||
{
|
||||
public:
|
||||
@ -60,12 +60,12 @@ public:
|
||||
|
||||
static void EnqueueReply(u32 CommandAddress);
|
||||
|
||||
// Send ACL data back to bt stack
|
||||
// Send ACL data back to Bluetooth stack
|
||||
void SendACLPacket(u16 _ConnectionHandle, u8* _pData, u32 _Size);
|
||||
|
||||
bool RemoteDisconnect(u16 _connectionHandle);
|
||||
|
||||
// hack for wiimote plugin
|
||||
// hack for Wiimote plugin
|
||||
public:
|
||||
std::vector<CWII_IPC_HLE_WiiMote> m_WiiMotes;
|
||||
CWII_IPC_HLE_WiiMote* AccessWiiMote(const bdaddr_t& _rAddr);
|
||||
|
@ -546,7 +546,7 @@ void CWII_IPC_HLE_WiiMote::ReceiveDisconnectionReq(u8 _Ident, u8* _pData, u32 _S
|
||||
//
|
||||
//
|
||||
|
||||
// We assume WiiMote is always connected
|
||||
// We assume Wiimote is always connected
|
||||
void CWII_IPC_HLE_WiiMote::SendConnectionRequest(u16 scid, u16 psm)
|
||||
{
|
||||
// create the channel
|
||||
@ -604,7 +604,7 @@ void CWII_IPC_HLE_WiiMote::SendConfigurationRequest(u16 scid, u16 MTU, u16 Flush
|
||||
// (shuffle2) currently we end up not appending options. this is because we don't
|
||||
// negotiate after trying to set MTU = 0 fails (stack will respond with
|
||||
// "configuration failed" msg...). This is still fine, we'll just use whatever the
|
||||
// bt stack defaults to.
|
||||
// Bluetooth stack defaults to.
|
||||
if (MTU || rChannel.MTU)
|
||||
{
|
||||
if (MTU == 0)
|
||||
|
@ -54,7 +54,7 @@ public:
|
||||
void ResetChannels();
|
||||
void Activate(bool ready);
|
||||
void ExecuteL2capCmd(u8* _pData, u32 _Size); // From CPU
|
||||
void ReceiveL2capData(u16 scid, const void* _pData, u32 _Size); // From wiimote
|
||||
void ReceiveL2capData(u16 scid, const void* _pData, u32 _Size); // From Wiimote
|
||||
|
||||
int NetPlay_GetWiimoteNum(int _number);
|
||||
|
||||
|
@ -424,7 +424,7 @@ void WiiSocket::Update(bool read, bool write, bool except)
|
||||
u32 flags = Memory::Read_U32(BufferIn2 + 0x04);
|
||||
u32 has_destaddr = Memory::Read_U32(BufferIn2 + 0x08);
|
||||
|
||||
// Not a string, windows requires a const char* for sendto
|
||||
// Not a string, Windows requires a const char* for sendto
|
||||
const char* data = (const char*)Memory::GetPointer(BufferIn);
|
||||
|
||||
// Act as non blocking when SO_MSG_NONBLOCK is specified
|
||||
@ -459,7 +459,7 @@ void WiiSocket::Update(bool read, bool write, bool except)
|
||||
case IOCTLV_SO_RECVFROM:
|
||||
{
|
||||
u32 flags = Memory::Read_U32(BufferIn + 0x04);
|
||||
// Not a string, windows requires a char* for recvfrom
|
||||
// Not a string, Windows requires a char* for recvfrom
|
||||
char* data = (char*)Memory::GetPointer(BufferOut);
|
||||
int data_len = BufferOutSize;
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
// Added some info from bluetooth.h
|
||||
// All packet headers have had the packet type field removed. This is because
|
||||
// IOS adds the packet type to the header, and strips it before returning the
|
||||
// packet to the overlying bt stack.
|
||||
// packet to the overlying Bluetooth stack.
|
||||
|
||||
/* $NetBSD: hci.h,v 1.33 2009/09/11 18:35:50 plunky Exp $ */
|
||||
|
||||
|
@ -213,7 +213,7 @@ unsigned int NetPlayClient::OnData(sf::Packet& packet)
|
||||
delete[] data;
|
||||
|
||||
// trusting server for good map value (>=0 && <4)
|
||||
// add to wiimote buffer
|
||||
// add to Wiimote buffer
|
||||
m_wiimote_buffer[(unsigned)map].Push(nw);
|
||||
}
|
||||
break;
|
||||
@ -620,9 +620,9 @@ bool NetPlayClient::WiimoteUpdate(int _number, u8* data, const u8 size)
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> lkp(m_crit.players);
|
||||
|
||||
// in game mapping for this local wiimote
|
||||
// in game mapping for this local Wiimote
|
||||
unsigned int in_game_num = LocalWiimoteToInGameWiimote(_number);
|
||||
// does this local wiimote map in game?
|
||||
// does this local Wiimote map in game?
|
||||
if (in_game_num < 4)
|
||||
{
|
||||
if (previousSize[in_game_num] == size)
|
||||
|
@ -133,7 +133,7 @@ unsigned int NetPlayServer::OnConnect(std::unique_ptr<sf::TcpSocket>& socket)
|
||||
|
||||
std::string npver;
|
||||
rpac >> npver;
|
||||
// dolphin netplay version
|
||||
// Dolphin netplay version
|
||||
if (npver != NETPLAY_VERSION)
|
||||
return CON_ERR_VERSION_MISMATCH;
|
||||
|
||||
@ -416,7 +416,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player)
|
||||
|
||||
case NP_MSG_WIIMOTE_DATA :
|
||||
{
|
||||
// if this is wiimote data from the last game still being received, ignore it
|
||||
// if this is Wiimote data from the last game still being received, ignore it
|
||||
if (player.current_game != m_current_game)
|
||||
break;
|
||||
|
||||
|
@ -832,7 +832,7 @@ void Interpreter::sync(UGeckoInstruction _inst)
|
||||
void Interpreter::tlbia(UGeckoInstruction _inst)
|
||||
{
|
||||
// Gekko does not support this instructions.
|
||||
PanicAlert("The GC CPU does not support tlbia");
|
||||
PanicAlert("The GameCube CPU does not support tlbia");
|
||||
// invalid the whole TLB
|
||||
//MessageBox(0,"TLBIA","TLBIA",0);
|
||||
}
|
||||
|
@ -163,7 +163,7 @@ static void fregSpill(RegInfo& RI, X64Reg reg)
|
||||
// (TODO: if we could lock RCX here too then we could allocate it - needed for
|
||||
// shifts)
|
||||
|
||||
// 64-bit - calling conventions differ between linux & windows, so...
|
||||
// 64-bit - calling conventions differ between Linux & Windows, so...
|
||||
#ifdef _WIN32
|
||||
static const X64Reg RegAllocOrder[] = {RSI, RDI, R12, R13, R14, R8, R9, R10, R11};
|
||||
#else
|
||||
|
@ -52,7 +52,7 @@ IVolume::ECountry CountrySwitch(u8 CountryCode)
|
||||
// NTSC
|
||||
case 'E':
|
||||
case 'N': // Japanese import to USA and other NTSC regions
|
||||
case 'Z': // Prince Of Persia - The Forgotten Sands (WII)
|
||||
case 'Z': // Prince of Persia - The Forgotten Sands (Wii)
|
||||
case 'B': // Ufouria: The Saga (Virtual Console)
|
||||
return IVolume::COUNTRY_USA;
|
||||
|
||||
|
@ -296,8 +296,8 @@ wxStaticBoxSizer* ControllerConfigDiag::CreateRealWiimoteSizer()
|
||||
wxBoxSizer* const real_wiimotes_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
if (!WiimoteReal::g_wiimote_scanner.IsReady())
|
||||
real_wiimotes_group->Add(new wxStaticText(this, wxID_ANY, _("A supported bluetooth device could not be found.\n"
|
||||
"You must manually connect your wiimotes.")), 0, wxALIGN_CENTER | wxALL, 5);
|
||||
real_wiimotes_group->Add(new wxStaticText(this, wxID_ANY, _("A supported Bluetooth device could not be found.\n"
|
||||
"You must manually connect your Wiimotes.")), 0, wxALIGN_CENTER | wxALL, 5);
|
||||
|
||||
wxCheckBox* const continuous_scanning = new wxCheckBox(this, wxID_ANY, _("Continuous Scanning"));
|
||||
continuous_scanning->Bind(wxEVT_CHECKBOX, &ControllerConfigDiag::OnContinuousScanning, this);
|
||||
|
@ -1195,7 +1195,7 @@ void CFrame::OnKeyDown(wxKeyEvent& event)
|
||||
// On OS X, we claim all keyboard events while
|
||||
// emulation is running to avoid wxWidgets sounding
|
||||
// the system beep for unhandled key events when
|
||||
// receiving pad/wiimote keypresses which take an
|
||||
// receiving pad/Wiimote keypresses which take an
|
||||
// entirely different path through the HID subsystem.
|
||||
#ifndef __APPLE__
|
||||
// On other platforms, we leave the key event alone
|
||||
@ -1205,7 +1205,7 @@ void CFrame::OnKeyDown(wxKeyEvent& event)
|
||||
#endif
|
||||
}
|
||||
|
||||
// Actually perform the wiimote connection or disconnection
|
||||
// Actually perform the Wiimote connection or disconnection
|
||||
if (WiimoteId >= 0)
|
||||
{
|
||||
wxCommandEvent evt;
|
||||
|
@ -9,7 +9,7 @@
|
||||
#define PREVIEW_UPDATE_TIME 25
|
||||
#define DEFAULT_HIGH_VALUE 100
|
||||
|
||||
// might have to change this setup for wiimote
|
||||
// might have to change this setup for Wiimote
|
||||
#define PROFILES_PATH "Profiles/"
|
||||
|
||||
#include <cstddef>
|
||||
|
@ -125,7 +125,7 @@ NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl*
|
||||
"Netplay will only work with the following settings:\n"
|
||||
" - DSP Emulator Engine Must be the same on all computers!\n"
|
||||
" - DSP on Dedicated Thread [OFF]\n"
|
||||
" - Manually set the extensions for each wiimote\n"
|
||||
" - Manually set the extensions for each Wiimote\n"
|
||||
"\n"
|
||||
"All players should use the same Dolphin version and settings.\n"
|
||||
"All memory cards must be identical between players or disabled.\n"
|
||||
|
@ -220,7 +220,7 @@ protected:
|
||||
choice_backend->Disable();
|
||||
label_backend->Disable();
|
||||
|
||||
//D3D only
|
||||
// D3D only
|
||||
if (vconfig.backend_info.Adapters.size())
|
||||
{
|
||||
choice_adapter->Disable();
|
||||
@ -228,7 +228,7 @@ protected:
|
||||
}
|
||||
|
||||
#ifndef __APPLE__
|
||||
// This isn't supported on OSX.
|
||||
// This isn't supported on OS X.
|
||||
|
||||
choice_display_resolution->Disable();
|
||||
label_display_resolution->Disable();
|
||||
|
@ -328,9 +328,9 @@ static void InitDriverInfo()
|
||||
int glrelease = 0;
|
||||
int major = 0;
|
||||
int minor = 0;
|
||||
// TODO: this is known to be broken on windows
|
||||
// nvidia seems to have removed their driver version from this string, so we can't get it.
|
||||
// hopefully we'll never have to workaround nvidia bugs
|
||||
// TODO: this is known to be broken on Windows
|
||||
// Nvidia seems to have removed their driver version from this string, so we can't get it.
|
||||
// hopefully we'll never have to workaround Nvidia bugs
|
||||
sscanf(g_ogl_config.gl_version, "%d.%d.%d NVIDIA %d.%d", &glmajor, &glminor, &glrelease, &major, &minor);
|
||||
version = 100*major + minor;
|
||||
}
|
||||
@ -556,7 +556,7 @@ Renderer::Renderer()
|
||||
// It also isn't useful as we don't render anything to the default framebuffer.
|
||||
// We also try to get a non-msaa fb, so this only happens when forced by the driver.
|
||||
PanicAlert("MSAA on default framebuffer isn't supported.\n"
|
||||
"Please avoid forcing dolphin to use MSAA by the driver.\n"
|
||||
"Please avoid forcing Dolphin to use MSAA by the driver.\n"
|
||||
"%d samples on default framebuffer found.", samples);
|
||||
bSuccess = false;
|
||||
}
|
||||
|
@ -36,9 +36,9 @@ StreamBuffer::~StreamBuffer()
|
||||
glDeleteBuffers(1, &m_buffer);
|
||||
}
|
||||
|
||||
/* Shared synchronisation code for ring buffers
|
||||
/* Shared synchronization code for ring buffers
|
||||
*
|
||||
* The next three functions are to create/delete/use the OpenGL synchronisation.
|
||||
* The next three functions are to create/delete/use the OpenGL synchronization.
|
||||
* ARB_sync (OpenGL 3.2) is used and required.
|
||||
*
|
||||
* To reduce overhead, the complete buffer is splitted up into SYNC_POINTS chunks.
|
||||
@ -52,11 +52,11 @@ StreamBuffer::~StreamBuffer()
|
||||
*
|
||||
* So on alloc, we have to wait for all slots between m_free_iterator and m_iterator (and set m_free_iterator to m_iterator afterwards).
|
||||
*
|
||||
* We also assume that this buffer is accessed by the gpu between the Unmap and Map function,
|
||||
* We also assume that this buffer is accessed by the GPU between the Unmap and Map function,
|
||||
* so we may create the fences on the start of mapping.
|
||||
* Some here, new fences for the chunks between m_used_iterator and m_iterator (also update m_used_iterator).
|
||||
*
|
||||
* As ring buffers have an ugly behavoir on rollover, have fun to read this code ;)
|
||||
* As ring buffers have an ugly behavior on rollover, have fun to read this code ;)
|
||||
*/
|
||||
|
||||
void StreamBuffer::CreateFences()
|
||||
@ -116,7 +116,7 @@ void StreamBuffer::AllocMemory(u32 size)
|
||||
}
|
||||
}
|
||||
|
||||
/* The usual way to stream data to the gpu.
|
||||
/* The usual way to stream data to the GPU.
|
||||
* Described here: https://www.opengl.org/wiki/Buffer_Object_Streaming#Unsynchronized_buffer_mapping
|
||||
* Just do unsync appends until the buffer is full.
|
||||
* When it's full, orphan (alloc a new buffer and free the old one)
|
||||
@ -159,7 +159,7 @@ public:
|
||||
/* A modified streaming way without reallocation
|
||||
* This one fixes the reallocation overhead of the MapAndOrphan one.
|
||||
* So it alloc a ring buffer on initialization.
|
||||
* But with this limited ressource, we have to care about the cpu-gpu distance.
|
||||
* But with this limited resource, we have to care about the CPU-GPU distance.
|
||||
* Else this fifo may overflow.
|
||||
* So we had traded orphan vs syncing.
|
||||
*/
|
||||
@ -194,9 +194,9 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/* Streaming fifo without mapping ovearhead.
|
||||
/* Streaming fifo without mapping overhead.
|
||||
* This one usually requires ARB_buffer_storage (OpenGL 4.4).
|
||||
* And is usually not available on OpenGL3 gpus.
|
||||
* And is usually not available on OpenGL3 GPUs.
|
||||
*
|
||||
* ARB_buffer_storage allows us to render from a mapped buffer.
|
||||
* So we map it persistently in the initialization.
|
||||
@ -250,7 +250,7 @@ public:
|
||||
* Another streaming fifo without mapping overhead.
|
||||
* As we can't orphan without mapping, we have to sync.
|
||||
*
|
||||
* This one uses AMD_pinned_memory which is available on all AMD gpus.
|
||||
* This one uses AMD_pinned_memory which is available on all AMD GPUs.
|
||||
* OpenGL 4.4 drivers should use BufferStorage.
|
||||
*/
|
||||
class PinnedMemory : public StreamBuffer
|
||||
@ -371,7 +371,7 @@ StreamBuffer* StreamBuffer::Create(u32 type, u32 size)
|
||||
// Prefer the syncing buffers over the orphaning one
|
||||
if (g_ogl_config.bSupportsGLSync)
|
||||
{
|
||||
// pinned memory is much faster than buffer storage on amd cards
|
||||
// pinned memory is much faster than buffer storage on AMD cards
|
||||
if (g_ogl_config.bSupportsGLPinnedMemory &&
|
||||
!(DriverDetails::HasBug(DriverDetails::BUG_BROKENPINNEDMEMORY) && type == GL_ELEMENT_ARRAY_BUFFER))
|
||||
return new PinnedMemory(type, size);
|
||||
@ -382,7 +382,7 @@ StreamBuffer* StreamBuffer::Create(u32 type, u32 size)
|
||||
!(DriverDetails::HasBug(DriverDetails::BUG_INTELBROKENBUFFERSTORAGE) && type == GL_ELEMENT_ARRAY_BUFFER))
|
||||
return new BufferStorage(type, size);
|
||||
|
||||
// don't fall back to MapAnd* for nvidia drivers
|
||||
// don't fall back to MapAnd* for Nvidia drivers
|
||||
if (DriverDetails::HasBug(DriverDetails::BUG_BROKENUNSYNCMAPPING))
|
||||
return new BufferSubData(type, size);
|
||||
|
||||
|
@ -21,7 +21,7 @@ public:
|
||||
|
||||
/* This mapping function will return a pair of:
|
||||
* - the pointer to the mapped buffer
|
||||
* - the offset into the real gpu buffer (always multiple of stride)
|
||||
* - the offset into the real GPU buffer (always multiple of stride)
|
||||
* On mapping, the maximum of size for allocation has to be set.
|
||||
* The size really pushed into this fifo only has to be known on Unmapping.
|
||||
* Mapping invalidates the current buffer content,
|
||||
|
@ -134,8 +134,8 @@ static void InitBackendInfo()
|
||||
{
|
||||
g_Config.backend_info.APIType = API_OPENGL;
|
||||
g_Config.backend_info.bSupportsExclusiveFullscreen = false;
|
||||
//g_Config.backend_info.bSupportsDualSourceBlend = true; // is gpu dependent and must be set in renderer
|
||||
//g_Config.backend_info.bSupportsEarlyZ = true; // is gpu dependent and must be set in renderer
|
||||
//g_Config.backend_info.bSupportsDualSourceBlend = true; // is GPU dependent and must be set in renderer
|
||||
//g_Config.backend_info.bSupportsEarlyZ = true; // is GPU dependent and must be set in renderer
|
||||
g_Config.backend_info.bSupportsOversizedViewports = true;
|
||||
g_Config.backend_info.bSupportsGeometryShaders = true;
|
||||
g_Config.backend_info.bSupports3DVision = false;
|
||||
|
@ -34,7 +34,7 @@ static u8 lastPrimCmd;
|
||||
void DoState(PointerWrap &p)
|
||||
{
|
||||
p.Do(minCommandSize);
|
||||
// Not sure what is wrong with this. Something(s) in here is causing dolphin to crash/hang when loading states saved from another run of dolphin. Doesn't seem too important anyway...
|
||||
// Not sure what is wrong with this. Something(s) in here is causing Dolphin to crash/hang when loading states saved from another run of Dolphin. Doesn't seem too important anyway...
|
||||
//vertexLoader.DoState(p);
|
||||
p.Do(readOpcode);
|
||||
p.Do(inObjectStream);
|
||||
|
@ -163,7 +163,7 @@ void SetupUnit::SetupPoint()
|
||||
|
||||
void SetupUnit::DoState(PointerWrap &p)
|
||||
{
|
||||
// TODO: some or all of this is making the save states stop working once dolphin is closed...sometimes (usually)
|
||||
// TODO: some or all of this is making the save states stop working once Dolphin is closed...sometimes (usually)
|
||||
// I have no idea what specifically is wrong, or if this is even important. Disabling it doesn't seem to make any noticible difference...
|
||||
/* p.Do(m_PrimType);
|
||||
p.Do(m_VertexCounter);
|
||||
|
@ -97,10 +97,10 @@ namespace DriverDetails
|
||||
// Started Version: ?
|
||||
// Ended Version: 13.9 working for me (neobrain).
|
||||
// Affected OS: Linux
|
||||
// Pinned memory is disabled for index buffer as the amd driver (the only one with pinned memory support) seems
|
||||
// Pinned memory is disabled for index buffer as the AMD driver (the only one with pinned memory support) seems
|
||||
// to be broken. We just get flickering/black rendering when using pinned memory here -- degasus - 2013/08/20
|
||||
// This bug only happens when paired with base_vertex.
|
||||
// Please see issue #6105 on google code. Let's hope buffer storage solves this issues.
|
||||
// Please see issue #6105 on Google Code. Let's hope buffer storage solves this issues.
|
||||
// TODO: Detect broken drivers.
|
||||
BUG_BROKENPINNEDMEMORY,
|
||||
// Bug: Entirely broken UBOs
|
||||
@ -134,7 +134,7 @@ namespace DriverDetails
|
||||
// If a shader includes a textureSize function call then the shader compiler will call abort()
|
||||
BUG_BROKENTEXTURESIZE,
|
||||
// Bug: ARB_buffer_storage doesn't work with ARRAY_BUFFER type streams
|
||||
// Affected devices: Geforce 4xx+
|
||||
// Affected devices: GeForce 4xx+
|
||||
// Started Version: -1
|
||||
// Ended Version: 332.21
|
||||
// The buffer_storage streaming method is required for greater speed gains in our buffer streaming
|
||||
@ -150,14 +150,14 @@ namespace DriverDetails
|
||||
// Intel HD 4000 series isn't affected by the bug
|
||||
BUG_PRIMITIVERESTART,
|
||||
// Bug: unsync mapping doesn't work fine
|
||||
// Affected devices: nvidia driver
|
||||
// Affected devices: Nvidia driver
|
||||
// Started Version: -1
|
||||
// Ended Version: -1
|
||||
// The nvidia driver (both windows + linux) doesn't like unsync mapping performance wise.
|
||||
// Because of their threaded behavoir, they seem not to handle unsync mapping complete unsync,
|
||||
// The Nvidia driver (both Windows + Linux) doesn't like unsync mapping performance wise.
|
||||
// Because of their threaded behavior, they seem not to handle unsync mapping complete unsync,
|
||||
// in fact, they serialize the driver which adds a much bigger overhead.
|
||||
// Workaround: Use BufferSubData
|
||||
// TODO: some windows AMD driver/gpu combination seems also affected
|
||||
// TODO: some Windows AMD driver/GPU combination seems also affected
|
||||
// but as they all support pinned memory, it doesn't matter
|
||||
BUG_BROKENUNSYNCMAPPING,
|
||||
// Bug: Intel's Window driver broke buffer_storage with GL_ELEMENT_ARRAY_BUFFER
|
||||
|
@ -924,7 +924,7 @@ static inline void WriteTevRegular(T& out, const char* components, int bias, int
|
||||
};
|
||||
|
||||
// Regular TEV stage: (d + bias + lerp(a,b,c)) * scale
|
||||
// The GC/Wii GPU uses a very sophisticated algorithm for scale-lerping:
|
||||
// The GameCube/Wii GPU uses a very sophisticated algorithm for scale-lerping:
|
||||
// - c is scaled from 0..255 to 0..256, which allows dividing the result by 256 instead of 255
|
||||
// - if scale is bigger than one, it is moved inside the lerp calculation for increased accuracy
|
||||
// - a rounding bias is added before dividing by 256
|
||||
|
@ -5,7 +5,7 @@
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
// GC graphics pipeline
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
// 3d commands are issued through the fifo. The gpu draws to the 2MB EFB.
|
||||
// 3d commands are issued through the fifo. The GPU draws to the 2MB EFB.
|
||||
// The efb can be copied back into ram in two forms: as textures or as XFB.
|
||||
// The XFB is the region in RAM that the VI chip scans out to the television.
|
||||
// So, after all rendering to EFB is done, the image is copied into one of two XFBs in RAM.
|
||||
|
@ -5,7 +5,7 @@
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
// GC graphics pipeline
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
// 3d commands are issued through the fifo. The gpu draws to the 2MB EFB.
|
||||
// 3d commands are issued through the fifo. The GPU draws to the 2MB EFB.
|
||||
// The efb can be copied back into ram in two forms: as textures or as XFB.
|
||||
// The XFB is the region in RAM that the VI chip scans out to the television.
|
||||
// So, after all rendering to EFB is done, the image is copied into one of two XFBs in RAM.
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
// DSPCR bits
|
||||
#define DSPCR_DSPRESET 0x0800 // Reset DSP
|
||||
#define DSPCR_ARDMA 0x0200 // ARAM dma in progress, if set
|
||||
#define DSPCR_ARDMA 0x0200 // ARAM DMA in progress, if set
|
||||
#define DSPCR_DSPINTMSK 0x0100 // * interrupt mask (RW)
|
||||
#define DSPCR_DSPINT 0x0080 // * interrupt active (RWC)
|
||||
#define DSPCR_ARINTMSK 0x0040
|
||||
|
@ -35,12 +35,12 @@ clr15
|
||||
;step 1: context setup
|
||||
call send_back_40
|
||||
|
||||
call 0x807e ; loop until dsp->cpu mailbox is empty
|
||||
call 0x807e ; loop until DSP->CPU mailbox is empty
|
||||
si @DMBH, #0xdcd1
|
||||
si @DMBL, #0x0000 ; sendmail 0xdcd10000
|
||||
si @DIRQ, #0x0001
|
||||
|
||||
; wait for cpu mail == 0xabbaxxxx
|
||||
; wait for CPU mail == 0xabbaxxxx
|
||||
wait_cpu_init:
|
||||
call 0x8078
|
||||
lrs $AC0.L, @CMBL
|
||||
@ -53,28 +53,28 @@ call 0x8078
|
||||
lrs $AX0.L, @CMBL
|
||||
andi $AC0.M, #0x0fff
|
||||
mrr $AX0.H, $AC0.M
|
||||
lri $AX1.H, #0x0000 ; DSP-dram addr
|
||||
lri $AX1.H, #0x0000 ; DSP-DRAM addr
|
||||
lri $AX1.L, #0x0020 ; length (32 bytes = 16 words, word 9 and 10 are addr where result should DMA'd to in main mem)
|
||||
lri $IX3, #0x0000 ; there will be no ucode/iram upload
|
||||
lri $AR0, #do_main ; return addr after dram upload
|
||||
lri $AR0, #do_main ; return addr after DRAM upload
|
||||
jmp 0x80bc ; DRAM upload !!
|
||||
; $AX0.H-$AX0.L - CPU(PPC) addr = mail & 0x0fffffff
|
||||
; upload data from mainmem to dsp dram and jump to 0x41 after that
|
||||
; upload data from mainmem to DSP DRAM and jump to 0x41 after that
|
||||
|
||||
; ucode addr 0x0041
|
||||
do_main:
|
||||
;step 2: got data from cpu, before going into BigCrazyFunction
|
||||
;step 2: got data from CPU, before going into BigCrazyFunction
|
||||
call send_back
|
||||
|
||||
call BigCrazyFunction ; <<------------- main crap is here!!!!!!!!!
|
||||
call 0x807e ; loop until dsp->cpu mailbox is empty
|
||||
call 0x807e ; loop until DSP->CPU mailbox is empty
|
||||
|
||||
si @DMBH, #0xdcd1
|
||||
si @DMBL, #0x0003 ; sendmail 0xdcd10003 (aka... calc is over, result is in main mem now)
|
||||
si @DIRQ, #0x0001
|
||||
set40
|
||||
|
||||
; wait for cpu to tell us what to do after calc'ing
|
||||
; wait for CPU to tell us what to do after calc'ing
|
||||
wait_cpu_end:
|
||||
call 0x8078
|
||||
cmpi $AC0.M, #0xcdd1
|
||||
@ -82,16 +82,16 @@ jnz wait_cpu_end
|
||||
|
||||
lrs $AC0.M, @CMBL
|
||||
cmpi $AC0.M, #0x0001
|
||||
jz PrepareBootUcode ; if cpu->dsp mail was 0xcdd10001 -> 005e_PrepareBootUcode()
|
||||
jz PrepareBootUcode ; if CPU->DSP mail was 0xcdd10001 -> 005e_PrepareBootUcode()
|
||||
|
||||
cmpi $AC0.M, #0x0002
|
||||
jz 0x8000 ; if cpu->dsp mail was 0xcdd10002 -> dsp reset ( jmp to irom(0x8000))
|
||||
jz 0x8000 ; if CPU->DSP mail was 0xcdd10002 -> DSP reset ( jmp to irom(0x8000))
|
||||
|
||||
; THIS IS CUSTOM CODE
|
||||
cmpi $AC0.M, #0xbabe
|
||||
jz end_of_test ; wait for dsp to be reset by cpu
|
||||
jz end_of_test ; wait for DSP to be reset by CPU
|
||||
|
||||
jmp wait_cpu_end ; wait for next mail from cpu
|
||||
jmp wait_cpu_end ; wait for next mail from CPU
|
||||
halt
|
||||
|
||||
|
||||
@ -127,7 +127,7 @@ jmp 0x80b5 ; BootUcode()
|
||||
halt
|
||||
|
||||
|
||||
; does some crazy stuff with data at dram @0x3/0x5/0x6/0x7 with help of some values from drom :)
|
||||
; does some crazy stuff with data at DRAM @0x3/0x5/0x6/0x7 with help of some values from drom :)
|
||||
; result is @0x22,@0x23 and written back to main memory to dmem-0x08:dmem-0x09
|
||||
BigCrazyFunction:
|
||||
; {
|
||||
@ -574,21 +574,21 @@ call send_back
|
||||
|
||||
Unk_01a5:
|
||||
; this is where result is written to main memory
|
||||
; dsp mem 0x20-0x23 (8 bytes) are written back (DMA limitation),
|
||||
; DSP mem 0x20-0x23 (8 bytes) are written back (DMA limitation),
|
||||
; but only values @22 and @23 were modified (result is 32bit)
|
||||
sr @0x0023, $AC0.M
|
||||
call send_back
|
||||
lr $AX0.H, @0x0008 ; cpu addr high
|
||||
lr $AX0.H, @0x0008 ; CPU addr high
|
||||
call send_back
|
||||
lr $AX0.L, @0x0009 ; cpu addr low
|
||||
lr $AX0.L, @0x0009 ; CPU addr low
|
||||
call send_back
|
||||
lri $AX1.H, #0x0020 ; dsp addr
|
||||
lri $AX1.H, #0x0020 ; DSP addr
|
||||
call send_back
|
||||
lri $AX1.L, #0x0008 ; length
|
||||
call send_back
|
||||
lri $IX3, #0x0000 ; there will be no iram dma
|
||||
lri $IX3, #0x0000 ; there will be no iram DMA
|
||||
call send_back
|
||||
call 0x808b ; dram->cpu <<<--- important!!
|
||||
call 0x808b ; DRAM->CPU <<<--- important!!
|
||||
call send_back
|
||||
ret
|
||||
; }
|
||||
|
@ -353,7 +353,7 @@ void handle_dsp_mail(void)
|
||||
}
|
||||
else if (mail == 0x8888dead)
|
||||
{
|
||||
// Send memory dump (dsp dram from someone's cube?)
|
||||
// Send memory dump (DSP DRAM from someone's GameCube?)
|
||||
// not really sure why this is important - I guess just to try to keep tests predictable
|
||||
u16* tmpBuf = (u16 *)MEM_VIRTUAL_TO_PHYSICAL(mem_dump);
|
||||
|
||||
@ -363,7 +363,7 @@ void handle_dsp_mail(void)
|
||||
}
|
||||
else if (mail == 0x8888beef)
|
||||
{
|
||||
// Provide register base to dsp (if using dsp_base.inc, it will dma them to the correct place)
|
||||
// Provide register base to DSP (if using dsp_base.inc, it will DMA them to the correct place)
|
||||
while (real_dsp.CheckMailTo());
|
||||
real_dsp.SendMailTo((u32)dspbufP);
|
||||
while (real_dsp.CheckMailTo());
|
||||
@ -385,14 +385,14 @@ void handle_dsp_mail(void)
|
||||
// ROM dumping mails
|
||||
else if (mail == 0x8888c0de)
|
||||
{
|
||||
// DSP has copied irom to its dram...send address so it can dma it back
|
||||
// DSP has copied irom to its DRAM...send address so it can dma it back
|
||||
while (real_dsp.CheckMailTo());
|
||||
real_dsp.SendMailTo((u32)dspbufP);
|
||||
while (real_dsp.CheckMailTo());
|
||||
}
|
||||
else if (mail == 0x8888da7a)
|
||||
{
|
||||
// DSP has copied coef to its dram...send address so it can dma it back
|
||||
// DSP has copied coef to its DRAM...send address so it can DMA it back
|
||||
while (real_dsp.CheckMailTo());
|
||||
real_dsp.SendMailTo((u32)&dspbufP[0x1000]);
|
||||
while (real_dsp.CheckMailTo());
|
||||
@ -415,7 +415,7 @@ void handle_dsp_mail(void)
|
||||
}
|
||||
else if (mail == 0xdcd10003) // DSP_DONE
|
||||
{
|
||||
real_dsp.SendMailTo(0xcdd1babe); // custom mail to tell dsp to halt (calls end_of_test)
|
||||
real_dsp.SendMailTo(0xcdd1babe); // custom mail to tell DSP to halt (calls end_of_test)
|
||||
while (real_dsp.CheckMailTo());
|
||||
|
||||
DCInvalidateRange(SecParams_out, sizeof(SecParams_out));
|
||||
@ -525,7 +525,7 @@ void InitGeneral()
|
||||
#endif
|
||||
|
||||
// Obtain the preferred video mode from the system
|
||||
// This will correspond to the settings in the Wii menu
|
||||
// This will correspond to the settings in the Wii Menu
|
||||
rmode = VIDEO_GetPreferredMode(nullptr);
|
||||
|
||||
// Allocate memory for the display in the uncached region
|
||||
|
@ -70,7 +70,7 @@
|
||||
// This numeral indicates the "minimum system required" to run the resulting
|
||||
// program. Dolphin targets Vista+, so it should be 0x0600. However in practice,
|
||||
// _WIN32_WINNT just removes up-level API declarations from headers. This is a
|
||||
// problem for XAudio2 and XInput, where dolphin expects to compile against the
|
||||
// problem for XAudio2 and XInput, where Dolphin expects to compile against the
|
||||
// Win8+ versions of their headers. So while we really need Vista+ level of
|
||||
// support, we declare Win8+ here globally. If this becomes a problem, the
|
||||
// higher declaration can be contained to just the XAudio2/XInput related code.
|
||||
@ -78,7 +78,7 @@
|
||||
|
||||
// Exclude rarely-used stuff from Windows headers
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
// Don't include windows min/max definitions. They would conflict with the STL.
|
||||
// Don't include Windows min/max definitions. They would conflict with the STL.
|
||||
#define NOMINMAX
|
||||
#include <Windows.h>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user