Cocoa Port: More refactoring.

- Add "ClientCheatManager.cpp" and "ClientFirmwareControl.cpp" files, moving all this C++ code to their own files.
- Remove the "cocoa_videofilter.mm/.h" files, which were never used and aren't planned to ever be used in the future.
This commit is contained in:
rogerman
2025-09-11 23:28:46 -07:00
parent 3b07d284cb
commit a08de1b00a
16 changed files with 3035 additions and 3180 deletions

View File

@@ -1,5 +1,5 @@
/*
Copyright (C) 2009-2024 DeSmuME team
Copyright (C) 2009-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,6 +15,9 @@
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _CHEAT_SYSTEM_H_
#define _CHEAT_SYSTEM_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -327,3 +330,5 @@ void CheatItemGenerateDescriptionFlat(const char *folderName, const char *folder
extern CHEATS *cheats;
extern CHEATSEARCH *cheatSearch;
#endif // _CHEAT_SYSTEM_H_

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,302 @@
/*
Copyright (C) 2025 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _CLIENT_CHEAT_MANAGER_H_
#define _CLIENT_CHEAT_MANAGER_H_
#include <stdint.h>
#include <string>
#include "../../cheatSystem.h"
#undef BOOL
enum CheatType
{
CheatType_Internal = 0,
CheatType_ActionReplay = 1,
CheatType_CodeBreaker = 2
};
enum CheatFreezeType
{
CheatFreezeType_Normal = 0,
CheatFreezeType_CanDecrease = 1,
CheatFreezeType_CanIncrease = 2
};
enum CheatSearchStyle
{
CheatSearchStyle_ExactValue = 0,
CheatSearchStyle_Comparative = 1
};
enum CheatSearchCompareStyle
{
CheatSearchCompareStyle_GreaterThan = 0,
CheatSearchCompareStyle_LesserThan = 1,
CheatSearchCompareStyle_Equals = 2,
CheatSearchCompareStyle_NotEquals = 3
};
class ClientCheatManager;
union DesmumeCheatSearchItem
{
uint64_t data;
struct
{
uint32_t address;
uint32_t value;
};
};
typedef union DesmumeCheatSearchItem DesmumeCheatSearchItem;
typedef std::vector<DesmumeCheatSearchItem> DesmumeCheatSearchResultsList;
struct InternalCheatParam
{
uint32_t address;
uint32_t value;
uint8_t valueLength;
};
typedef struct InternalCheatParam InternalCheatParam;
class ClientCheatItem
{
protected:
ClientCheatManager *_cheatManager;
bool _isEnabled;
bool _willAddFromDB;
CheatType _cheatType;
std::string _nameString;
std::string _commentString;
// Internal cheat type parameters
CheatFreezeType _freezeType;
char _addressString[10+1];
uint32_t _address;
uint32_t _value;
uint8_t _valueLength;
// Action Replay parameters
uint32_t _codeCount;
std::string _rawCodeString;
std::string _cleanCodeString;
void _ConvertInternalToActionReplay();
void _ConvertActionReplayToInternal();
public:
ClientCheatItem();
~ClientCheatItem();
void Init(const CHEATS_LIST &inCheatItem);
void Init(const ClientCheatItem &inCheatItem);
void SetCheatManager(ClientCheatManager *cheatManager);
ClientCheatManager* GetCheatManager() const;
void SetEnabled(bool theState);
bool IsEnabled() const;
void SetWillAddFromDB(bool theState);
bool WillAddFromDB() const;
CheatType GetType() const;
void SetType(CheatType requestedType);
bool IsSupportedType() const;
const char* GetName() const;
void SetName(const char *nameString);
const char* GetComments() const;
void SetComments(const char *commentString);
CheatFreezeType GetFreezeType() const;
void SetFreezeType(CheatFreezeType theFreezeType);
uint32_t GetAddress() const;
void SetAddress(uint32_t theAddress);
const char* GetAddressString() const;
const char* GetAddressSixDigitString() const;
void SetAddressSixDigitString(const char *sixDigitString);
uint32_t GetValue() const;
void SetValue(uint32_t theValue);
uint8_t GetValueLength() const;
void SetValueLength(uint8_t byteLength);
void SetRawCodeString(const char *rawString, const bool willSaveValidatedRawString);
const char* GetRawCodeString() const;
const char* GetCleanCodeString() const;
const std::string& GetCleanCodeCppString() const;
uint32_t GetCodeCount() const;
void ClientToDesmumeCheatItem(CHEATS_LIST *outCheatItem) const;
};
class ClientCheatList
{
private:
ClientCheatItem* __AddItem(const ClientCheatItem *srcItem, const bool willCopy, const bool allowDuplicates);
protected:
std::vector<ClientCheatItem *> *_list;
public:
ClientCheatList();
~ClientCheatList();
CheatSystemError LoadFromFile(const char *filePath);
CheatSystemError SaveToFile(const char *filePath);
bool IsItemDuplicate(const ClientCheatItem *srcItem);
ClientCheatItem* AddNew();
ClientCheatItem* AddNewItemCopy(const ClientCheatItem *srcItem);
ClientCheatItem* AddNewItemCopyNoDuplicate(const ClientCheatItem *srcItem);
ClientCheatItem* AddExistingItemNoDuplicate(const ClientCheatItem *srcItem);
bool Remove(ClientCheatItem *targetItem);
bool RemoveAtIndex(size_t index);
void RemoveAll();
bool Update(const ClientCheatItem &srcItem, ClientCheatItem *targetItem);
bool UpdateAtIndex(const ClientCheatItem &srcItem, size_t index);
size_t GetTotalCheatCount() const;
size_t GetActiveCheatCount() const;
std::vector<ClientCheatItem *>* GetCheatList() const;
size_t GetIndexOfItem(const ClientCheatItem *cheatItem) const;
ClientCheatItem* GetItemAtIndex(size_t index) const;
void ReplaceFromEngine(const CHEATS *engineCheatList);
void CopyListToEngine(const bool willApplyOnlyEnabledItems, CHEATS *engineCheatList);
};
class ClientCheatSearcher
{
protected:
CHEATSEARCH *_desmumeSearcher;
uint8_t _searchValueLength;
size_t _resultsCount;
bool _didSearchStart;
DesmumeCheatSearchResultsList _resultsList;
public:
ClientCheatSearcher();
~ClientCheatSearcher();
bool DidStart() const;
void Reset();
size_t SearchExactValue(uint32_t value, uint8_t valueLength, bool performSignedSearch);
size_t SearchComparative(CheatSearchCompareStyle compareStyle, uint8_t valueLength, bool performSignedSearch);
const DesmumeCheatSearchResultsList& RefreshResults();
const DesmumeCheatSearchResultsList& GetResults();
size_t GetResultCount() const;
};
class ClientCheatDatabase
{
protected:
ClientCheatList *_list;
std::string _title;
std::string _description;
std::string _lastFilePath;
public:
ClientCheatDatabase();
~ClientCheatDatabase();
ClientCheatList* GetList() const;
ClientCheatList* LoadFromFile(const char *dbFilePath);
const char* GetTitle() const;
const char* GetDescription() const;
};
class ClientCheatManager
{
protected:
ClientCheatList *_currentSessionList;
ClientCheatDatabase *_currentDatabase;
ClientCheatSearcher *_currentSearcher;
ClientCheatItem *_selectedItem;
size_t _selectedItemIndex;
uint32_t _untitledCount;
std::string _currentSessionLastFilePath;
std::vector<InternalCheatParam> _pendingInternalCheatWriteList;
bool _masterNeedsUpdate;
public:
ClientCheatManager();
virtual ~ClientCheatManager();
static CHEATS* GetMaster();
static void SetMaster(const CHEATS *masterCheats);
ClientCheatList* GetSessionList() const;
const char* GetSessionListLastFilePath() const;
virtual CheatSystemError SessionListLoadFromFile(const char *filePath);
virtual CheatSystemError SessionListSaveToFile(const char *filePath);
ClientCheatItem* SetSelectedItemByIndex(size_t index);
ClientCheatItem* NewItem();
ClientCheatItem* AddExistingItemNoDuplicate(const ClientCheatItem *theItem);
void RemoveItem(ClientCheatItem *theItem);
void RemoveItemAtIndex(size_t index);
void RemoveSelectedItem();
void ModifyItem(const ClientCheatItem *srcItem, ClientCheatItem *targetItem);
void ModifyItemAtIndex(const ClientCheatItem *srcItem, size_t index);
size_t GetTotalCheatCount() const;
size_t GetActiveCheatCount() const;
void LoadFromMaster();
void ApplyToMaster();
void MasterNeedsUpdate();
ClientCheatList* GetDatabaseList() const;
ClientCheatList* DatabaseListLoadFromFile(const char *dbFilePath);
const char* GetDatabaseTitle() const;
const char* GetDatabaseDescription() const;
bool SearchDidStart() const;
void SearchReset();
size_t SearchExactValue(uint32_t value, uint8_t valueLength, bool performSignedSearch);
size_t SearchComparative(CheatSearchCompareStyle compareStyle, uint8_t valueLength, bool performSignedSearch);
const DesmumeCheatSearchResultsList& SearchResultsRefresh();
const DesmumeCheatSearchResultsList& GetSearchResults();
size_t GetSearchResultCount() const;
void DirectWriteInternalCheatAtIndex(size_t index);
void DirectWriteInternalCheatItem(const ClientCheatItem *cheatItem);
void DirectWriteInternalCheat(uint32_t targetAddress, uint32_t newValue32, size_t newValueLength);
void ApplyPendingInternalCheatWrites();
};
#endif // _CLIENT_CHEAT_MANAGER_H_

View File

@@ -0,0 +1,763 @@
/*
Copyright (C) 2025 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ClientFirmwareControl.h"
#include "../../firmware.h"
#undef BOOL
ClientFirmwareControl::ClientFirmwareControl()
{
_macAddressSelection = FirmwareCfgMACAddrSetID_Firmware;
// First, get the default firmware config.
_internalData = (FirmwareConfig *)malloc(sizeof(FirmwareConfig));
NDS_GetDefaultFirmwareConfig(*_internalData);
srand((uint32_t)time(NULL));
// Generate a random firmware MAC address and its associated string.
const uint32_t defaultFirmwareMACAddressValue = (uint32_t)_internalData->MACAddress[2] | ((uint32_t)_internalData->MACAddress[3] << 8) | ((uint32_t)_internalData->MACAddress[4] << 16) | ((uint32_t)_internalData->MACAddress[5] << 24);
do
{
_firmwareMACAddressValue = (uint32_t)rand() & 0x00FFFFFF;
_firmwareMACAddressValue = (_firmwareMACAddressValue << 8) | 0x000000BF;
} while ( (_firmwareMACAddressValue == 0x000000BF) || (_firmwareMACAddressValue == 0xFFFFFFBF) || (_firmwareMACAddressValue == defaultFirmwareMACAddressValue) );
_internalData->MACAddress[2] = (uint8_t)( _firmwareMACAddressValue & 0x000000FF);
_internalData->MACAddress[3] = (uint8_t)((_firmwareMACAddressValue >> 8) & 0x000000FF);
_internalData->MACAddress[4] = (uint8_t)((_firmwareMACAddressValue >> 16) & 0x000000FF);
_internalData->MACAddress[5] = (uint8_t)((_firmwareMACAddressValue >> 24) & 0x000000FF);
memset(_macAddressString, '\0', sizeof(_macAddressString));
ClientFirmwareControl::WriteMACAddressStringToBuffer(_internalData->MACAddress[3], _internalData->MACAddress[4], _internalData->MACAddress[5], &_macAddressString[0]);
// Generate a random custom MAC address set and their associated strings.
do
{
_customMACAddressValue = (uint32_t)rand() & 0x00FFFFFF;
_customMACAddressValue = (_customMACAddressValue << 8) | 0x000000BF;
} while ( (_customMACAddressValue == 0x000000BF) || (_customMACAddressValue == 0xFFFFFFBF) || ((_customMACAddressValue & 0xF0FFFFFF) == (_firmwareMACAddressValue & 0xF0FFFFFF)) );
const uint8_t customMAC4 = (_customMACAddressValue >> 8) & 0x000000FF;
const uint8_t customMAC5 = (_customMACAddressValue >> 16) & 0x000000FF;
const uint8_t customMAC6 = (_customMACAddressValue >> 24) & 0x000000F0;
for (size_t i = 1; i <= 8; i++)
{
ClientFirmwareControl::WriteMACAddressStringToBuffer(customMAC4, customMAC5, customMAC6 + (uint8_t)i, &_macAddressString[18*i]);
}
// Generate the WFC User ID string.
memset(_wfcUserIDString, '\0', sizeof(_wfcUserIDString));
const uint64_t wfcUserIDValue = (uint64_t)_internalData->WFCUserID[0] |
((uint64_t)_internalData->WFCUserID[1] << 8) |
((uint64_t)_internalData->WFCUserID[2] << 16) |
((uint64_t)_internalData->WFCUserID[3] << 24) |
((uint64_t)_internalData->WFCUserID[4] << 32) |
((uint64_t)_internalData->WFCUserID[5] << 40);
ClientFirmwareControl::WriteWFCUserIDStringToBuffer(wfcUserIDValue, _wfcUserIDString);
// Generate the subnet mask strings.
memset(_subnetMaskString, '\0', sizeof(_subnetMaskString));
uint32_t subnetMaskValue = (_internalData->subnetMask_AP1 == 0) ? 0 : (0xFFFFFFFF << (32 - _internalData->subnetMask_AP1));
snprintf(&_subnetMaskString[0], 16, "%d.%d.%d.%d", (subnetMaskValue >> 24) & 0x000000FF, (subnetMaskValue >> 16) & 0x000000FF, (subnetMaskValue >> 8) & 0x000000FF, subnetMaskValue & 0x000000FF);
subnetMaskValue = (_internalData->subnetMask_AP2 == 0) ? 0 : (0xFFFFFFFF << (32 - _internalData->subnetMask_AP2));
snprintf(&_subnetMaskString[16], 16, "%d.%d.%d.%d", (subnetMaskValue >> 24) & 0x000000FF, (subnetMaskValue >> 16) & 0x000000FF, (subnetMaskValue >> 8) & 0x000000FF, subnetMaskValue & 0x000000FF);
subnetMaskValue = (_internalData->subnetMask_AP3 == 0) ? 0 : (0xFFFFFFFF << (32 - _internalData->subnetMask_AP3));
snprintf(&_subnetMaskString[32], 16, "%d.%d.%d.%d", (subnetMaskValue >> 24) & 0x000000FF, (subnetMaskValue >> 16) & 0x000000FF, (subnetMaskValue >> 8) & 0x000000FF, subnetMaskValue & 0x000000FF);
}
ClientFirmwareControl::~ClientFirmwareControl()
{
free(this->_internalData);
this->_internalData = NULL;
}
void ClientFirmwareControl::WriteMACAddressStringToBuffer(const uint8_t mac4, const uint8_t mac5, const uint8_t mac6, char *stringBuffer)
{
if (stringBuffer == NULL)
{
return;
}
snprintf(stringBuffer, 18, "00:09:BF:%02X:%02X:%02X", mac4, mac5, mac6);
}
void ClientFirmwareControl::WriteMACAddressStringToBuffer(const uint32_t macAddressValue, char *stringBuffer)
{
if (stringBuffer == NULL)
{
return;
}
const uint8_t mac4 = (macAddressValue >> 8) & 0x000000FF;
const uint8_t mac5 = (macAddressValue >> 16) & 0x000000FF;
const uint8_t mac6 = (macAddressValue >> 24) & 0x000000FF;
ClientFirmwareControl::WriteMACAddressStringToBuffer(mac4, mac5, mac6, stringBuffer);
}
void ClientFirmwareControl::WriteWFCUserIDStringToBuffer(const uint64_t wfcUserIDValue, char *stringBuffer)
{
if (stringBuffer == NULL)
{
return;
}
const unsigned long long wfcUserIDValuePrint = (wfcUserIDValue & 0x000007FFFFFFFFFFULL) * 1000ULL;
const unsigned long long wfcUserIDValuePrint1 = wfcUserIDValuePrint / 1000000000000ULL;
const unsigned long long wfcUserIDValuePrint2 = (wfcUserIDValuePrint / 100000000ULL) - (wfcUserIDValuePrint1 * 10000ULL);
const unsigned long long wfcUserIDValuePrint3 = (wfcUserIDValuePrint / 10000ULL) - (wfcUserIDValuePrint1 * 100000000ULL) - (wfcUserIDValuePrint2 * 10000ULL);
const unsigned long long wfcUserIDValuePrint4 = wfcUserIDValuePrint - (wfcUserIDValuePrint1 * 1000000000000ULL) - (wfcUserIDValuePrint2 * 100000000ULL) - (wfcUserIDValuePrint3 * 10000ULL);
snprintf(stringBuffer, 20, "%04llu-%04llu-%04llu-%04llu", wfcUserIDValuePrint1, wfcUserIDValuePrint2, wfcUserIDValuePrint3, wfcUserIDValuePrint4);
}
const FirmwareConfig& ClientFirmwareControl::GetFirmwareConfig()
{
return *this->_internalData;
}
uint32_t ClientFirmwareControl::GenerateRandomMACValue()
{
uint32_t randomMACAddressValue = 0;
do
{
randomMACAddressValue = (uint32_t)rand() & 0x00FFFFFF;
randomMACAddressValue = (randomMACAddressValue << 8) | 0x000000BF;
} while ( (randomMACAddressValue == 0x000000BF) || (randomMACAddressValue == 0xFFFFFFBF) || ((randomMACAddressValue & 0xF0FFFFFF) == (this->_firmwareMACAddressValue & 0xF0FFFFFF)) || ((randomMACAddressValue & 0xF0FFFFFF) == (this->_customMACAddressValue & 0xF0FFFFFF)) );
return randomMACAddressValue;
}
FirmwareCfgMACAddrSetID ClientFirmwareControl::GetMACAddressSelection()
{
return this->_macAddressSelection;
}
void ClientFirmwareControl::SetMACAddressSelection(FirmwareCfgMACAddrSetID addressSetID)
{
switch (addressSetID)
{
case FirmwareCfgMACAddrSetID_Firmware:
this->_macAddressSelection = FirmwareCfgMACAddrSetID_Firmware;
this->_internalData->MACAddress[0] = 0x00;
this->_internalData->MACAddress[1] = 0x09;
this->_internalData->MACAddress[2] = (uint8_t)( this->_firmwareMACAddressValue & 0x000000FF);
this->_internalData->MACAddress[3] = (uint8_t)((this->_firmwareMACAddressValue >> 8) & 0x000000FF);
this->_internalData->MACAddress[4] = (uint8_t)((this->_firmwareMACAddressValue >> 16) & 0x000000FF);
this->_internalData->MACAddress[5] = (uint8_t)((this->_firmwareMACAddressValue >> 24) & 0x000000FF);
break;
case FirmwareCfgMACAddrSetID_Custom1:
case FirmwareCfgMACAddrSetID_Custom2:
case FirmwareCfgMACAddrSetID_Custom3:
case FirmwareCfgMACAddrSetID_Custom4:
case FirmwareCfgMACAddrSetID_Custom5:
case FirmwareCfgMACAddrSetID_Custom6:
case FirmwareCfgMACAddrSetID_Custom7:
case FirmwareCfgMACAddrSetID_Custom8:
{
this->_macAddressSelection = addressSetID;
this->_internalData->MACAddress[0] = 0x00;
this->_internalData->MACAddress[1] = 0x09;
this->_internalData->MACAddress[2] = (uint8_t)( this->_customMACAddressValue & 0x000000FF);
this->_internalData->MACAddress[3] = (uint8_t)((this->_customMACAddressValue >> 8) & 0x000000FF);
this->_internalData->MACAddress[4] = (uint8_t)((this->_customMACAddressValue >> 16) & 0x000000FF);
this->_internalData->MACAddress[5] = (uint8_t)((this->_customMACAddressValue >> 24) & 0x000000F0);
switch (addressSetID)
{
case FirmwareCfgMACAddrSetID_Custom1: this->_internalData->MACAddress[5] += 1; break;
case FirmwareCfgMACAddrSetID_Custom2: this->_internalData->MACAddress[5] += 2; break;
case FirmwareCfgMACAddrSetID_Custom3: this->_internalData->MACAddress[5] += 3; break;
case FirmwareCfgMACAddrSetID_Custom4: this->_internalData->MACAddress[5] += 4; break;
case FirmwareCfgMACAddrSetID_Custom5: this->_internalData->MACAddress[5] += 5; break;
case FirmwareCfgMACAddrSetID_Custom6: this->_internalData->MACAddress[5] += 6; break;
case FirmwareCfgMACAddrSetID_Custom7: this->_internalData->MACAddress[5] += 7; break;
case FirmwareCfgMACAddrSetID_Custom8: this->_internalData->MACAddress[5] += 8; break;
default: break;
}
break;
}
default:
break;
}
}
uint32_t ClientFirmwareControl::GetMACAddressValue(FirmwareCfgMACAddrSetID addressSetID)
{
switch (addressSetID)
{
case FirmwareCfgMACAddrSetID_Firmware: return this->_firmwareMACAddressValue;
case FirmwareCfgMACAddrSetID_Custom1: return this->_customMACAddressValue + 0x01000000;
case FirmwareCfgMACAddrSetID_Custom2: return this->_customMACAddressValue + 0x02000000;
case FirmwareCfgMACAddrSetID_Custom3: return this->_customMACAddressValue + 0x03000000;
case FirmwareCfgMACAddrSetID_Custom4: return this->_customMACAddressValue + 0x04000000;
case FirmwareCfgMACAddrSetID_Custom5: return this->_customMACAddressValue + 0x05000000;
case FirmwareCfgMACAddrSetID_Custom6: return this->_customMACAddressValue + 0x06000000;
case FirmwareCfgMACAddrSetID_Custom7: return this->_customMACAddressValue + 0x07000000;
case FirmwareCfgMACAddrSetID_Custom8: return this->_customMACAddressValue + 0x08000000;
default: break;
}
return 0;
}
const char* ClientFirmwareControl::GetMACAddressString(FirmwareCfgMACAddrSetID addressSetID)
{
switch (addressSetID)
{
case FirmwareCfgMACAddrSetID_Firmware: return &this->_macAddressString[18*0];
case FirmwareCfgMACAddrSetID_Custom1: return &this->_macAddressString[18*1];
case FirmwareCfgMACAddrSetID_Custom2: return &this->_macAddressString[18*2];
case FirmwareCfgMACAddrSetID_Custom3: return &this->_macAddressString[18*3];
case FirmwareCfgMACAddrSetID_Custom4: return &this->_macAddressString[18*4];
case FirmwareCfgMACAddrSetID_Custom5: return &this->_macAddressString[18*5];
case FirmwareCfgMACAddrSetID_Custom6: return &this->_macAddressString[18*6];
case FirmwareCfgMACAddrSetID_Custom7: return &this->_macAddressString[18*7];
case FirmwareCfgMACAddrSetID_Custom8: return &this->_macAddressString[18*8];
default: break;
}
return "";
}
uint32_t ClientFirmwareControl::GetSelectedMACAddressValue()
{
const uint32_t selectedMACAddressValue = (uint32_t)this->_internalData->MACAddress[2] | ((uint32_t)this->_internalData->MACAddress[3] << 8) | ((uint32_t)this->_internalData->MACAddress[4] << 16) | ((uint32_t)this->_internalData->MACAddress[5] << 24);
return selectedMACAddressValue;
}
uint64_t ClientFirmwareControl::GetSelectedWFCUserID64()
{
const uint64_t selectedUserID64 = (uint64_t)this->_internalData->WFCUserID[0] |
((uint64_t)this->_internalData->WFCUserID[1] << 8) |
((uint64_t)this->_internalData->WFCUserID[2] << 16) |
((uint64_t)this->_internalData->WFCUserID[3] << 24) |
((uint64_t)this->_internalData->WFCUserID[4] << 32) |
((uint64_t)this->_internalData->WFCUserID[5] << 40);
return selectedUserID64;
}
const char* ClientFirmwareControl::GetSelectedMACAddressString()
{
return this->GetMACAddressString(this->_macAddressSelection);
}
void ClientFirmwareControl::SetFirmwareMACAddressValue(uint32_t macAddressValue)
{
const uint8_t mac4 = (macAddressValue >> 8) & 0x000000FF;
const uint8_t mac5 = (macAddressValue >> 16) & 0x000000FF;
const uint8_t mac6 = (macAddressValue >> 24) & 0x000000FF;
this->SetFirmwareMACAddressValue(mac4, mac5, mac6);
}
void ClientFirmwareControl::SetFirmwareMACAddressValue(uint8_t mac4, uint8_t mac5, uint8_t mac6)
{
this->_firmwareMACAddressValue = 0x000000BF | ((uint32_t)mac4 << 8) | ((uint32_t)mac5 << 16) | ((uint32_t)mac6 << 24);
ClientFirmwareControl::WriteMACAddressStringToBuffer(mac4, mac5, mac6, &this->_macAddressString[0]);
if (this->_macAddressSelection == FirmwareCfgMACAddrSetID_Firmware)
{
this->SetMACAddressSelection(FirmwareCfgMACAddrSetID_Firmware);
}
}
void ClientFirmwareControl::SetCustomMACAddressValue(uint32_t macAddressValue)
{
const uint8_t mac4 = (macAddressValue >> 8) & 0x000000FF;
const uint8_t mac5 = (macAddressValue >> 16) & 0x000000FF;
const uint8_t mac6 = (macAddressValue >> 24) & 0x000000F0;
this->SetCustomMACAddressValue(mac4, mac5, mac6);
}
void ClientFirmwareControl::SetCustomMACAddressValue(uint8_t mac4, uint8_t mac5, uint8_t mac6)
{
mac6 &= 0xF0;
this->_customMACAddressValue = 0x000000BF | ((uint32_t)mac4 << 8) | ((uint32_t)mac5 << 16) | ((uint32_t)mac6 << 24);
for (size_t i = 1; i <= 8; i++)
{
ClientFirmwareControl::WriteMACAddressStringToBuffer(mac4, mac5, mac6 + (uint8_t)i, &this->_macAddressString[18*i]);
}
if (this->_macAddressSelection != FirmwareCfgMACAddrSetID_Firmware)
{
this->SetMACAddressSelection(this->_macAddressSelection);
}
}
uint8_t* ClientFirmwareControl::GetWFCUserID()
{
return this->_internalData->WFCUserID;
}
void ClientFirmwareControl::SetWFCUserID(uint8_t *wfcUserID)
{
const uint64_t wfcUserIDValue = (uint64_t)wfcUserID[0] |
((uint64_t)wfcUserID[1] << 8) |
((uint64_t)wfcUserID[2] << 16) |
((uint64_t)wfcUserID[3] << 24) |
((uint64_t)wfcUserID[4] << 32) |
((uint64_t)wfcUserID[5] << 40);
this->SetWFCUserID64(wfcUserIDValue);
}
uint64_t ClientFirmwareControl::GetWFCUserID64()
{
const uint64_t userID = (uint64_t)this->_internalData->WFCUserID[0] |
((uint64_t)this->_internalData->WFCUserID[1] << 8) |
((uint64_t)this->_internalData->WFCUserID[2] << 16) |
((uint64_t)this->_internalData->WFCUserID[3] << 24) |
((uint64_t)this->_internalData->WFCUserID[4] << 32) |
((uint64_t)this->_internalData->WFCUserID[5] << 40);
return userID;
}
void ClientFirmwareControl::SetWFCUserID64(uint64_t wfcUserIDValue)
{
if ( (wfcUserIDValue & 0x000007FFFFFFFFFFULL) != 0)
{
this->_internalData->WFCUserID[0] = (uint8_t)( wfcUserIDValue & 0x00000000000000FFULL);
this->_internalData->WFCUserID[1] = (uint8_t)((wfcUserIDValue >> 8) & 0x00000000000000FFULL);
this->_internalData->WFCUserID[2] = (uint8_t)((wfcUserIDValue >> 16) & 0x00000000000000FFULL);
this->_internalData->WFCUserID[3] = (uint8_t)((wfcUserIDValue >> 24) & 0x00000000000000FFULL);
this->_internalData->WFCUserID[4] = (uint8_t)((wfcUserIDValue >> 32) & 0x00000000000000FFULL);
this->_internalData->WFCUserID[5] = (uint8_t)((wfcUserIDValue >> 40) & 0x00000000000000FFULL);
}
else
{
this->_internalData->WFCUserID[0] = 0;
this->_internalData->WFCUserID[1] = 0;
this->_internalData->WFCUserID[2] = 0;
this->_internalData->WFCUserID[3] = 0;
this->_internalData->WFCUserID[4] = 0;
this->_internalData->WFCUserID[5] = 0;
}
ClientFirmwareControl::WriteWFCUserIDStringToBuffer(wfcUserIDValue, this->_wfcUserIDString);
}
const char* ClientFirmwareControl::GetWFCUserIDString()
{
return this->_wfcUserIDString;
}
uint8_t ClientFirmwareControl::GetIPv4AddressPart(FirmwareCfgAPID apid, uint8_t addrPart)
{
if (addrPart > 3)
{
return 0;
}
switch (apid)
{
case FirmwareCfgAPID_AP1: return this->_internalData->ipv4Address_AP1[addrPart];
case FirmwareCfgAPID_AP2: return this->_internalData->ipv4Address_AP2[addrPart];
case FirmwareCfgAPID_AP3: return this->_internalData->ipv4Address_AP3[addrPart];
}
return 0;
}
void ClientFirmwareControl::SetIPv4AddressPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue)
{
if (addrPart > 3)
{
return;
}
switch (apid)
{
case FirmwareCfgAPID_AP1: this->_internalData->ipv4Address_AP1[addrPart] = addrValue; break;
case FirmwareCfgAPID_AP2: this->_internalData->ipv4Address_AP2[addrPart] = addrValue; break;
case FirmwareCfgAPID_AP3: this->_internalData->ipv4Address_AP3[addrPart] = addrValue; break;
}
}
uint8_t ClientFirmwareControl::GetIPv4GatewayPart(FirmwareCfgAPID apid, uint8_t addrPart)
{
if (addrPart > 3)
{
return 0;
}
switch (apid)
{
case FirmwareCfgAPID_AP1: return this->_internalData->ipv4Gateway_AP1[addrPart];
case FirmwareCfgAPID_AP2: return this->_internalData->ipv4Gateway_AP2[addrPart];
case FirmwareCfgAPID_AP3: return this->_internalData->ipv4Gateway_AP3[addrPart];
}
return 0;
}
void ClientFirmwareControl::SetIPv4GatewayPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue)
{
if (addrPart > 3)
{
return;
}
switch (apid)
{
case FirmwareCfgAPID_AP1: this->_internalData->ipv4Gateway_AP1[addrPart] = addrValue; break;
case FirmwareCfgAPID_AP2: this->_internalData->ipv4Gateway_AP2[addrPart] = addrValue; break;
case FirmwareCfgAPID_AP3: this->_internalData->ipv4Gateway_AP3[addrPart] = addrValue; break;
}
}
uint8_t ClientFirmwareControl::GetIPv4PrimaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart)
{
if (addrPart > 3)
{
return 0;
}
switch (apid)
{
case FirmwareCfgAPID_AP1: return this->_internalData->ipv4PrimaryDNS_AP1[addrPart];
case FirmwareCfgAPID_AP2: return this->_internalData->ipv4PrimaryDNS_AP2[addrPart];
case FirmwareCfgAPID_AP3: return this->_internalData->ipv4PrimaryDNS_AP3[addrPart];
}
return 0;
}
void ClientFirmwareControl::SetIPv4PrimaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue)
{
if (addrPart > 3)
{
return;
}
switch (apid)
{
case FirmwareCfgAPID_AP1: this->_internalData->ipv4PrimaryDNS_AP1[addrPart] = addrValue; break;
case FirmwareCfgAPID_AP2: this->_internalData->ipv4PrimaryDNS_AP2[addrPart] = addrValue; break;
case FirmwareCfgAPID_AP3: this->_internalData->ipv4PrimaryDNS_AP3[addrPart] = addrValue; break;
}
}
uint8_t ClientFirmwareControl::GetIPv4SecondaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart)
{
if (addrPart > 3)
{
return 0;
}
switch (apid)
{
case FirmwareCfgAPID_AP1: return this->_internalData->ipv4SecondaryDNS_AP1[addrPart];
case FirmwareCfgAPID_AP2: return this->_internalData->ipv4SecondaryDNS_AP2[addrPart];
case FirmwareCfgAPID_AP3: return this->_internalData->ipv4SecondaryDNS_AP3[addrPart];
}
return 0;
}
void ClientFirmwareControl::SetIPv4SecondaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue)
{
if (addrPart > 3)
{
return;
}
switch (apid)
{
case FirmwareCfgAPID_AP1: this->_internalData->ipv4SecondaryDNS_AP1[addrPart] = addrValue; break;
case FirmwareCfgAPID_AP2: this->_internalData->ipv4SecondaryDNS_AP2[addrPart] = addrValue; break;
case FirmwareCfgAPID_AP3: this->_internalData->ipv4SecondaryDNS_AP3[addrPart] = addrValue; break;
}
}
uint8_t ClientFirmwareControl::GetSubnetMask(FirmwareCfgAPID apid)
{
switch (apid)
{
case FirmwareCfgAPID_AP1: return this->_internalData->subnetMask_AP1;
case FirmwareCfgAPID_AP2: return this->_internalData->subnetMask_AP2;
case FirmwareCfgAPID_AP3: return this->_internalData->subnetMask_AP3;
}
return 0;
}
const char* ClientFirmwareControl::GetSubnetMaskString(FirmwareCfgAPID apid)
{
switch (apid)
{
case FirmwareCfgAPID_AP1: return &this->_subnetMaskString[0];
case FirmwareCfgAPID_AP2: return &this->_subnetMaskString[16];
case FirmwareCfgAPID_AP3: return &this->_subnetMaskString[32];
}
return "";
}
void ClientFirmwareControl::SetSubnetMask(FirmwareCfgAPID apid, uint8_t subnetMaskShift)
{
if (subnetMaskShift > 28)
{
subnetMaskShift = 28;
}
int subnetMaskCharIndex = -1;
uint32_t subnetMaskValue = 0;
switch (apid)
{
case FirmwareCfgAPID_AP1:
this->_internalData->subnetMask_AP1 = subnetMaskShift;
subnetMaskCharIndex = 0;
break;
case FirmwareCfgAPID_AP2:
this->_internalData->subnetMask_AP2 = subnetMaskShift;
subnetMaskCharIndex = 16;
break;
case FirmwareCfgAPID_AP3:
this->_internalData->subnetMask_AP3 = subnetMaskShift;
subnetMaskCharIndex = 32;
break;
}
if ( (subnetMaskCharIndex >= 0) && (subnetMaskCharIndex <= 32) )
{
subnetMaskValue = (subnetMaskShift == 0) ? 0 : (0xFFFFFFFF << (32 - subnetMaskShift));
memset(&this->_subnetMaskString[subnetMaskCharIndex], '\0', 16 * sizeof(char));
snprintf(&this->_subnetMaskString[subnetMaskCharIndex], 16, "%d.%d.%d.%d", (subnetMaskValue >> 24) & 0x000000FF, (subnetMaskValue >> 16) & 0x000000FF, (subnetMaskValue >> 8) & 0x000000FF, subnetMaskValue & 0x000000FF);
}
}
int ClientFirmwareControl::GetConsoleType()
{
return (int)this->_internalData->consoleType;
}
void ClientFirmwareControl::SetConsoleType(int type)
{
this->_internalData->consoleType = (uint8_t)type;
}
uint16_t* ClientFirmwareControl::GetNicknameStringBuffer()
{
return this->_internalData->nickname;
}
void ClientFirmwareControl::SetNicknameWithStringBuffer(uint16_t *buffer, size_t charLength)
{
size_t i = 0;
if (buffer != NULL)
{
if (charLength > MAX_FW_NICKNAME_LENGTH)
{
charLength = MAX_FW_NICKNAME_LENGTH;
}
for (; i < charLength; i++)
{
this->_internalData->nickname[i] = buffer[i];
}
}
else
{
charLength = 0;
}
for (; i < MAX_FW_NICKNAME_LENGTH+1; i++)
{
this->_internalData->nickname[i] = 0;
}
this->_internalData->nicknameLength = charLength;
}
size_t ClientFirmwareControl::GetNicknameStringLength()
{
return (size_t)this->_internalData->nicknameLength;
}
void ClientFirmwareControl::SetNicknameStringLength(size_t charLength)
{
if (charLength > MAX_FW_NICKNAME_LENGTH)
{
charLength = MAX_FW_NICKNAME_LENGTH;
}
this->_internalData->nicknameLength = charLength;
}
uint16_t* ClientFirmwareControl::GetMessageStringBuffer()
{
return this->_internalData->message;
}
void ClientFirmwareControl::SetMessageWithStringBuffer(uint16_t *buffer, size_t charLength)
{
size_t i = 0;
if (buffer != NULL)
{
if (charLength > MAX_FW_MESSAGE_LENGTH)
{
charLength = MAX_FW_MESSAGE_LENGTH;
}
for (; i < charLength; i++)
{
this->_internalData->message[i] = buffer[i];
}
}
else
{
charLength = 0;
}
for (; i < MAX_FW_MESSAGE_LENGTH+1; i++)
{
this->_internalData->message[i] = 0;
}
this->_internalData->messageLength = charLength;
}
size_t ClientFirmwareControl::GetMessageStringLength()
{
return (size_t)this->_internalData->messageLength;
}
void ClientFirmwareControl::SetMessageStringLength(size_t charLength)
{
if (charLength > MAX_FW_MESSAGE_LENGTH)
{
charLength = MAX_FW_MESSAGE_LENGTH;
}
this->_internalData->messageLength = charLength;
}
int ClientFirmwareControl::GetFavoriteColorByID()
{
return (int)this->_internalData->favoriteColor;
}
void ClientFirmwareControl::SetFavoriteColorByID(int colorID)
{
this->_internalData->favoriteColor = (uint8_t)colorID;
}
int ClientFirmwareControl::GetBirthdayDay()
{
return (int)this->_internalData->birthdayDay;
}
void ClientFirmwareControl::SetBirthdayDay(int day)
{
if (day < 1)
{
day = 1;
}
switch (this->_internalData->birthdayMonth)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
{
if (day > 31) day = 31;
break;
}
case 4:
case 6:
case 9:
case 11:
{
if (day > 30) day = 30;
break;
}
case 2:
{
if (day > 29) day = 29;
break;
}
default:
break;
}
this->_internalData->birthdayDay = (uint8_t)day;
}
int ClientFirmwareControl::GetBirthdayMonth()
{
return (int)this->_internalData->birthdayMonth;
}
void ClientFirmwareControl::SetBirthdayMonth(int month)
{
if (month < 1)
{
month = 1;
}
else if (month > 12)
{
month = 12;
}
this->_internalData->birthdayMonth = (uint8_t)month;
}
int ClientFirmwareControl::GetLanguageByID()
{
return (int)this->_internalData->language;
}
void ClientFirmwareControl::SetLanguageByID(int languageID)
{
this->_internalData->language = (uint8_t)languageID;
}
int ClientFirmwareControl::GetBacklightLevel()
{
return (int)this->_internalData->backlightLevel;
}
void ClientFirmwareControl::SetBacklightLevel(int level)
{
this->_internalData->backlightLevel = (uint8_t)level;
}

View File

@@ -0,0 +1,139 @@
/*
Copyright (C) 2025 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _CLIENT_FIRMWARE_CONTROL_H_
#define _CLIENT_FIRMWARE_CONTROL_H_
#include <stdio.h>
#include <stdint.h>
struct FirmwareConfig;
enum FirmwareCfgAPID
{
FirmwareCfgAPID_AP1 = 0,
FirmwareCfgAPID_AP2 = 1,
FirmwareCfgAPID_AP3 = 2
};
enum FirmwareCfgMACAddrSetID
{
FirmwareCfgMACAddrSetID_Firmware = 0,
FirmwareCfgMACAddrSetID_Custom1 = 1,
FirmwareCfgMACAddrSetID_Custom2 = 2,
FirmwareCfgMACAddrSetID_Custom3 = 3,
FirmwareCfgMACAddrSetID_Custom4 = 4,
FirmwareCfgMACAddrSetID_Custom5 = 5,
FirmwareCfgMACAddrSetID_Custom6 = 6,
FirmwareCfgMACAddrSetID_Custom7 = 7,
FirmwareCfgMACAddrSetID_Custom8 = 8
};
class ClientFirmwareControl
{
protected:
FirmwareConfig *_internalData;
FirmwareCfgMACAddrSetID _macAddressSelection;
uint32_t _firmwareMACAddressValue;
uint32_t _customMACAddressValue;
char _macAddressString[(1 + 8) * 18];
char _wfcUserIDString[20];
char _subnetMaskString[3 * 16];
public:
ClientFirmwareControl();
~ClientFirmwareControl();
static void WriteMACAddressStringToBuffer(const uint8_t mac4, const uint8_t mac5, const uint8_t mac6, char *stringBuffer);
static void WriteMACAddressStringToBuffer(const uint32_t macAddressValue, char *stringBuffer);
static void WriteWFCUserIDStringToBuffer(const uint64_t wfcUserIDValue, char *stringBuffer);
const FirmwareConfig& GetFirmwareConfig();
uint32_t GenerateRandomMACValue();
FirmwareCfgMACAddrSetID GetMACAddressSelection();
void SetMACAddressSelection(FirmwareCfgMACAddrSetID addressSetID);
uint32_t GetMACAddressValue(FirmwareCfgMACAddrSetID addressSetID);
const char* GetMACAddressString(FirmwareCfgMACAddrSetID addressSetID);
uint32_t GetSelectedMACAddressValue();
uint64_t GetSelectedWFCUserID64();
const char* GetSelectedMACAddressString();
void SetFirmwareMACAddressValue(uint32_t macAddressValue);
void SetFirmwareMACAddressValue(uint8_t mac4, uint8_t mac5, uint8_t mac6);
void SetCustomMACAddressValue(uint32_t macAddressValue);
void SetCustomMACAddressValue(uint8_t mac4, uint8_t mac5, uint8_t mac6);
uint8_t* GetWFCUserID();
void SetWFCUserID(uint8_t *wfcUserID);
uint64_t GetWFCUserID64();
void SetWFCUserID64(uint64_t wfcUserIDValue);
const char* GetWFCUserIDString();
uint8_t GetIPv4AddressPart(FirmwareCfgAPID apid, uint8_t addrPart);
void SetIPv4AddressPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue);
uint8_t GetIPv4GatewayPart(FirmwareCfgAPID apid, uint8_t addrPart);
void SetIPv4GatewayPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue);
uint8_t GetIPv4PrimaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart);
void SetIPv4PrimaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue);
uint8_t GetIPv4SecondaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart);
void SetIPv4SecondaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue);
uint8_t GetSubnetMask(FirmwareCfgAPID apid);
const char* GetSubnetMaskString(FirmwareCfgAPID apid);
void SetSubnetMask(FirmwareCfgAPID apid, uint8_t subnetMaskShift);
int GetConsoleType();
void SetConsoleType(int type);
uint16_t* GetNicknameStringBuffer();
void SetNicknameWithStringBuffer(uint16_t *buffer, size_t charLength);
size_t GetNicknameStringLength();
void SetNicknameStringLength(size_t charLength);
uint16_t* GetMessageStringBuffer();
void SetMessageWithStringBuffer(uint16_t *buffer, size_t charLength);
size_t GetMessageStringLength();
void SetMessageStringLength(size_t charLength);
int GetFavoriteColorByID();
void SetFavoriteColorByID(int colorID);
int GetBirthdayDay();
void SetBirthdayDay(int day);
int GetBirthdayMonth();
void SetBirthdayMonth(int month);
int GetLanguageByID();
void SetLanguageByID(int languageID);
int GetBacklightLevel();
void SetBacklightLevel(int level);
};
#endif // _CLIENT_FIRMWARE_CONTROL_H_

View File

@@ -251,7 +251,6 @@
8C43E83A27E3CD0100A35F65 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
8C43E83B27E3CD0100A35F65 /* cff.c in Sources */ = {isa = PBXBuildFile; fileRef = ABFEA7B01BB4EC1000B08C25 /* cff.c */; };
8C43E83C27E3CD0100A35F65 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
8C43E83D27E3CD0100A35F65 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
8C43E83E27E3CD0100A35F65 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
8C43E83F27E3CD0100A35F65 /* file_path.c in Sources */ = {isa = PBXBuildFile; fileRef = AB000DC01CCC6B0700413F02 /* file_path.c */; };
8C43E84027E3CD0100A35F65 /* cheatWindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */; };
@@ -567,7 +566,6 @@
8C43E99F27E3CD4C00A35F65 /* cocoa_input.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104111346652500AF11D1 /* cocoa_input.mm */; };
8C43E9A127E3CD4C00A35F65 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
8C43E9A227E3CD4C00A35F65 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
8C43E9A327E3CD4C00A35F65 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
8C43E9A427E3CD4C00A35F65 /* OGLRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC11345AC8400AF11D1 /* OGLRender.cpp */; };
8C43E9A527E3CD4C00A35F65 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB8B7AAB17CE8C440051CEBF /* slot1comp_protocol.cpp */; };
8C43E9A627E3CD4C00A35F65 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
@@ -864,7 +862,6 @@
8CCD84A727E40B730024BDD5 /* deposterize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB301BDE1D9C8BAC00246A93 /* deposterize.cpp */; };
8CCD84A827E40B730024BDD5 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
8CCD84A927E40B730024BDD5 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
8CCD84AA27E40B730024BDD5 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
8CCD84AB27E40B730024BDD5 /* OGLRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC11345AC8400AF11D1 /* OGLRender.cpp */; };
8CCD84AC27E40B730024BDD5 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB8B7AAB17CE8C440051CEBF /* slot1comp_protocol.cpp */; };
8CCD84AD27E40B730024BDD5 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
@@ -1218,7 +1215,6 @@
AB36C82727F2C8AE00C763C8 /* deposterize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB301BDE1D9C8BAC00246A93 /* deposterize.cpp */; };
AB36C82827F2C8AE00C763C8 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
AB36C82927F2C8AE00C763C8 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
AB36C82A27F2C8AE00C763C8 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
AB36C82B27F2C8AE00C763C8 /* OGLRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC11345AC8400AF11D1 /* OGLRender.cpp */; };
AB36C82C27F2C8AE00C763C8 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB8B7AAB17CE8C440051CEBF /* slot1comp_protocol.cpp */; };
AB36C82D27F2C8AE00C763C8 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
@@ -1560,6 +1556,28 @@
AB6E18092A6B218D003A564D /* CheatDatabaseViewer.xib in Resources */ = {isa = PBXBuildFile; fileRef = AB6E17FF2A6B218D003A564D /* CheatDatabaseViewer.xib */; };
AB6E180A2A6B218D003A564D /* CheatDatabaseViewer.xib in Resources */ = {isa = PBXBuildFile; fileRef = AB6E17FF2A6B218D003A564D /* CheatDatabaseViewer.xib */; };
AB6E180B2A6B218D003A564D /* CheatDatabaseViewer.xib in Resources */ = {isa = PBXBuildFile; fileRef = AB6E17FF2A6B218D003A564D /* CheatDatabaseViewer.xib */; };
AB6E3B462E7385710088075E /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B452E7385710088075E /* ClientFirmwareControl.cpp */; };
AB6E3B472E7385710088075E /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B452E7385710088075E /* ClientFirmwareControl.cpp */; };
AB6E3B482E7385710088075E /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B452E7385710088075E /* ClientFirmwareControl.cpp */; };
AB6E3B492E7385710088075E /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B452E7385710088075E /* ClientFirmwareControl.cpp */; };
AB6E3B4A2E7385710088075E /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B452E7385710088075E /* ClientFirmwareControl.cpp */; };
AB6E3B4B2E7385710088075E /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B452E7385710088075E /* ClientFirmwareControl.cpp */; };
AB6E3B4C2E7385710088075E /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B452E7385710088075E /* ClientFirmwareControl.cpp */; };
AB6E3B4D2E7385710088075E /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B452E7385710088075E /* ClientFirmwareControl.cpp */; };
AB6E3B4E2E7385710088075E /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B452E7385710088075E /* ClientFirmwareControl.cpp */; };
AB6E3B4F2E7385710088075E /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B452E7385710088075E /* ClientFirmwareControl.cpp */; };
AB6E3B502E7385710088075E /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B452E7385710088075E /* ClientFirmwareControl.cpp */; };
AB6E3B532E73E7C80088075E /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B522E73E7C80088075E /* ClientCheatManager.cpp */; };
AB6E3B542E73E7C80088075E /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B522E73E7C80088075E /* ClientCheatManager.cpp */; };
AB6E3B552E73E7C80088075E /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B522E73E7C80088075E /* ClientCheatManager.cpp */; };
AB6E3B562E73E7C80088075E /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B522E73E7C80088075E /* ClientCheatManager.cpp */; };
AB6E3B572E73E7C80088075E /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B522E73E7C80088075E /* ClientCheatManager.cpp */; };
AB6E3B582E73E7C80088075E /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B522E73E7C80088075E /* ClientCheatManager.cpp */; };
AB6E3B592E73E7C80088075E /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B522E73E7C80088075E /* ClientCheatManager.cpp */; };
AB6E3B5A2E73E7C80088075E /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B522E73E7C80088075E /* ClientCheatManager.cpp */; };
AB6E3B5B2E73E7C80088075E /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B522E73E7C80088075E /* ClientCheatManager.cpp */; };
AB6E3B5C2E73E7C80088075E /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B522E73E7C80088075E /* ClientCheatManager.cpp */; };
AB6E3B5D2E73E7C80088075E /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6E3B522E73E7C80088075E /* ClientCheatManager.cpp */; };
AB74EC8A1738499C0026C41E /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB74EC891738499C0026C41E /* Carbon.framework */; };
AB78B5C11E384F2100297FED /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB3BF4401E262943003E2B24 /* Metal.framework */; settings = {ATTRIBUTES = (Required, ); }; };
AB78B5C21E384F2200297FED /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB3BF4401E262943003E2B24 /* Metal.framework */; settings = {ATTRIBUTES = (Required, ); }; };
@@ -1780,7 +1798,6 @@
AB7900D7215B84E50082AE82 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
AB7900D8215B84E50082AE82 /* cff.c in Sources */ = {isa = PBXBuildFile; fileRef = ABFEA7B01BB4EC1000B08C25 /* cff.c */; };
AB7900D9215B84E50082AE82 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
AB7900DA215B84E50082AE82 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
AB7900DB215B84E50082AE82 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
AB7900DC215B84E50082AE82 /* file_path.c in Sources */ = {isa = PBXBuildFile; fileRef = AB000DC01CCC6B0700413F02 /* file_path.c */; };
AB7900DD215B84E50082AE82 /* cheatWindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */; };
@@ -2124,7 +2141,6 @@
AB79023B215B84F20082AE82 /* cocoa_input.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104111346652500AF11D1 /* cocoa_input.mm */; };
AB79023D215B84F20082AE82 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
AB79023E215B84F20082AE82 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
AB79023F215B84F20082AE82 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
AB790240215B84F20082AE82 /* OGLRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC11345AC8400AF11D1 /* OGLRender.cpp */; };
AB790241215B84F20082AE82 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB8B7AAB17CE8C440051CEBF /* slot1comp_protocol.cpp */; };
AB790242215B84F20082AE82 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
@@ -2373,7 +2389,6 @@
AB796D4F15CDCBA200C59155 /* cocoa_input.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104111346652500AF11D1 /* cocoa_input.mm */; };
AB796D5215CDCBA200C59155 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
AB796D5315CDCBA200C59155 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
AB796D5415CDCBA200C59155 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
AB796D5515CDCBA200C59155 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
AB796D5615CDCBA200C59155 /* cheatWindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */; };
AB796D5915CDCBA200C59155 /* inputPrefsView.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */; };
@@ -2674,7 +2689,6 @@
AB8F3CDB1A53AC2600A80BF6 /* cocoa_input.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104111346652500AF11D1 /* cocoa_input.mm */; };
AB8F3CDD1A53AC2600A80BF6 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
AB8F3CDE1A53AC2600A80BF6 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
AB8F3CDF1A53AC2600A80BF6 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
AB8F3CE01A53AC2600A80BF6 /* OGLRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC11345AC8400AF11D1 /* OGLRender.cpp */; };
AB8F3CE11A53AC2600A80BF6 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB8B7AAB17CE8C440051CEBF /* slot1comp_protocol.cpp */; };
AB8F3CE21A53AC2600A80BF6 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
@@ -3261,7 +3275,6 @@
ABC8592628273FEE00A03EA9 /* deposterize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB301BDE1D9C8BAC00246A93 /* deposterize.cpp */; };
ABC8592728273FEE00A03EA9 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
ABC8592828273FEE00A03EA9 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
ABC8592928273FEE00A03EA9 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
ABC8592A28273FEE00A03EA9 /* OGLRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC11345AC8400AF11D1 /* OGLRender.cpp */; };
ABC8592B28273FEE00A03EA9 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB8B7AAB17CE8C440051CEBF /* slot1comp_protocol.cpp */; };
ABC8592C28273FEE00A03EA9 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
@@ -3611,7 +3624,6 @@
ABD2CDDA26E05CB000FB15F7 /* deposterize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB301BDE1D9C8BAC00246A93 /* deposterize.cpp */; };
ABD2CDDB26E05CB000FB15F7 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
ABD2CDDC26E05CB000FB15F7 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
ABD2CDDD26E05CB000FB15F7 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
ABD2CDDE26E05CB000FB15F7 /* OGLRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC11345AC8400AF11D1 /* OGLRender.cpp */; };
ABD2CDDF26E05CB000FB15F7 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB8B7AAB17CE8C440051CEBF /* slot1comp_protocol.cpp */; };
ABD2CDE026E05CB000FB15F7 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
@@ -4088,6 +4100,10 @@
AB6E17F32A675BF1003A564D /* CheatDatabaseWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CheatDatabaseWindowController.h; sourceTree = "<group>"; };
AB6E17F42A675BF1003A564D /* CheatDatabaseWindowController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = CheatDatabaseWindowController.mm; sourceTree = "<group>"; };
AB6E18002A6B218D003A564D /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = translations/English.lproj/CheatDatabaseViewer.xib; sourceTree = "<group>"; };
AB6E3B442E7385710088075E /* ClientFirmwareControl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClientFirmwareControl.h; sourceTree = "<group>"; };
AB6E3B452E7385710088075E /* ClientFirmwareControl.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ClientFirmwareControl.cpp; sourceTree = "<group>"; };
AB6E3B512E73E7C80088075E /* ClientCheatManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClientCheatManager.h; sourceTree = "<group>"; };
AB6E3B522E73E7C80088075E /* ClientCheatManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ClientCheatManager.cpp; sourceTree = "<group>"; };
AB6FBEF5139B6258007BB045 /* slot1_retail_nand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = slot1_retail_nand.cpp; sourceTree = "<group>"; };
AB74EC891738499C0026C41E /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
AB75226D14C7BB51009B97B3 /* AppIcon_FirmwareConfig.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = AppIcon_FirmwareConfig.icns; sourceTree = "<group>"; };
@@ -4476,8 +4492,6 @@
ABDDF7C81898F032007583C1 /* Icon_FrameJump_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_FrameJump_420x420.png; path = images/Icon_FrameJump_420x420.png; sourceTree = "<group>"; };
ABDE648E2E21068500C03E0B /* GPU_Operations_AltiVec.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPU_Operations_AltiVec.h; sourceTree = "<group>"; };
ABDE648F2E21068500C03E0B /* GPU_Operations_AltiVec.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GPU_Operations_AltiVec.cpp; sourceTree = "<group>"; };
ABE5DFE3143FB1DA00835AD8 /* cocoa_videofilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_videofilter.h; sourceTree = "<group>"; };
ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_videofilter.mm; sourceTree = "<group>"; };
ABE670251415DE6C00E8E4C9 /* tinystr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinystr.cpp; sourceTree = "<group>"; };
ABE670261415DE6C00E8E4C9 /* tinystr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinystr.h; sourceTree = "<group>"; };
ABE670271415DE6C00E8E4C9 /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = "<group>"; };
@@ -4888,9 +4902,11 @@
ABD10AE51715FCDD00B5729D /* audiosamplegenerator.cpp */,
AB79913E2E712F510030C0A6 /* ClientAudioOutput.cpp */,
AB28625720AE3E9F00EAED43 /* ClientAVCaptureObject.cpp */,
AB6E3B522E73E7C80088075E /* ClientCheatManager.cpp */,
ABAD07DA1E19CAA6007867CA /* ClientDisplayView.cpp */,
ABDB1BE12E6602A5002AD9AF /* ClientEmulationOutput.cpp */,
ABB1C9461F5281AE0004844F /* ClientExecutionControl.cpp */,
AB6E3B452E7385710088075E /* ClientFirmwareControl.cpp */,
AB11AD871F6757F800CB298E /* ClientInputHandler.cpp */,
ABDB1BEE2E66486E002AD9AF /* ClientVideoOutput.cpp */,
AB1B9E5F1501A78000464647 /* coreaudiosound.cpp */,
@@ -4904,11 +4920,13 @@
ABD10AE31715FCDD00B5729D /* audiosamplegenerator.h */,
AB79913D2E712F510030C0A6 /* ClientAudioOutput.h */,
AB28625820AE3E9F00EAED43 /* ClientAVCaptureObject.h */,
AB6E3B512E73E7C80088075E /* ClientCheatManager.h */,
ABAD07DB1E19CAA6007867CA /* ClientDisplayView.h */,
ABDB1BE02E6602A5002AD9AF /* ClientEmulationOutput.h */,
ABDB1BED2E66486E002AD9AF /* ClientVideoOutput.h */,
ABB1C9471F5281AE0004844F /* ClientExecutionControl.h */,
AB6E3B442E7385710088075E /* ClientFirmwareControl.h */,
AB11AD881F6757F800CB298E /* ClientInputHandler.h */,
ABDB1BED2E66486E002AD9AF /* ClientVideoOutput.h */,
ABA6574914511EC90077E5E9 /* cocoa_cheat.h */,
ABD103FE1346652500AF11D1 /* cocoa_core.h */,
AB58F32B1364F44B0074C376 /* cocoa_file.h */,
@@ -4919,7 +4937,6 @@
ABD104001346652500AF11D1 /* cocoa_rom.h */,
AB5648FD186E6EA8002740F4 /* cocoa_slot2.h */,
AB80E050142BC4FA00A52038 /* cocoa_util.h */,
ABE5DFE3143FB1DA00835AD8 /* cocoa_videofilter.h */,
AB1B9E611501A78000464647 /* coreaudiosound.h */,
AB28625520AE3E9E00EAED43 /* macOS_driver.h */,
AB5B1D4821D1F31D00BF0E0F /* MetalRendererCommonShaders.h */,
@@ -4939,7 +4956,6 @@
ABD104131346652500AF11D1 /* cocoa_rom.mm */,
AB5648FE186E6EA8002740F4 /* cocoa_slot2.mm */,
AB80E04C142BC4A800A52038 /* cocoa_util.mm */,
ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */,
);
name = "Cocoa Port";
sourceTree = "<group>";
@@ -8023,6 +8039,7 @@
8C43E7D127E3CD0100A35F65 /* ftbase.c in Sources */,
8C43E7D227E3CD0100A35F65 /* fatfile.cpp in Sources */,
8C43E7D327E3CD0100A35F65 /* FIFO.cpp in Sources */,
AB6E3B582E73E7C80088075E /* ClientCheatManager.cpp in Sources */,
ABDB1BF72E66486E002AD9AF /* ClientVideoOutput.cpp in Sources */,
8C43E7D427E3CD0100A35F65 /* sfnt.c in Sources */,
8C43E7D527E3CD0100A35F65 /* truetype.c in Sources */,
@@ -8102,6 +8119,7 @@
8C43E81D27E3CD0100A35F65 /* TDStretch.cpp in Sources */,
8C43E81E27E3CD0100A35F65 /* texcache.cpp in Sources */,
8C43E81F27E3CD0100A35F65 /* async_job.c in Sources */,
AB6E3B462E7385710088075E /* ClientFirmwareControl.cpp in Sources */,
8C43E82027E3CD0100A35F65 /* thumb_instructions.cpp in Sources */,
8C43E82127E3CD0100A35F65 /* advanscene.cpp in Sources */,
8C43E82227E3CD0100A35F65 /* ClientInputHandler.cpp in Sources */,
@@ -8133,7 +8151,6 @@
8C43E83A27E3CD0100A35F65 /* cocoa_rom.mm in Sources */,
8C43E83B27E3CD0100A35F65 /* cff.c in Sources */,
8C43E83C27E3CD0100A35F65 /* cocoa_util.mm in Sources */,
8C43E83D27E3CD0100A35F65 /* cocoa_videofilter.mm in Sources */,
8C43E83E27E3CD0100A35F65 /* appDelegate.mm in Sources */,
8C43E83F27E3CD0100A35F65 /* file_path.c in Sources */,
8C43E84027E3CD0100A35F65 /* cheatWindowDelegate.mm in Sources */,
@@ -8237,6 +8254,7 @@
8C43E93627E3CD4C00A35F65 /* debug.cpp in Sources */,
8C43E93727E3CD4C00A35F65 /* decrypt.cpp in Sources */,
8C43E93827E3CD4C00A35F65 /* rthreads.c in Sources */,
AB6E3B502E7385710088075E /* ClientFirmwareControl.cpp in Sources */,
8C43E93927E3CD4C00A35F65 /* directory.cpp in Sources */,
8C43E93A27E3CD4C00A35F65 /* Disassembler.cpp in Sources */,
8C43E93B27E3CD4C00A35F65 /* RomInfoPanel.mm in Sources */,
@@ -8307,6 +8325,7 @@
8C43E97827E3CD4C00A35F65 /* slot2_rumblepak.cpp in Sources */,
8C43E97927E3CD4C00A35F65 /* sndOSX.cpp in Sources */,
8C43E97A27E3CD4C00A35F65 /* SndOut.cpp in Sources */,
AB6E3B542E73E7C80088075E /* ClientCheatManager.cpp in Sources */,
AB6E17F82A675BF1003A564D /* CheatDatabaseWindowController.mm in Sources */,
8C43E97B27E3CD4C00A35F65 /* psnames.c in Sources */,
8C43E97C27E3CD4C00A35F65 /* Slot2WindowDelegate.mm in Sources */,
@@ -8347,7 +8366,6 @@
8C43E99F27E3CD4C00A35F65 /* cocoa_input.mm in Sources */,
8C43E9A127E3CD4C00A35F65 /* cocoa_rom.mm in Sources */,
8C43E9A227E3CD4C00A35F65 /* cocoa_util.mm in Sources */,
8C43E9A327E3CD4C00A35F65 /* cocoa_videofilter.mm in Sources */,
8C43E9A427E3CD4C00A35F65 /* OGLRender.cpp in Sources */,
8C43E9A527E3CD4C00A35F65 /* slot1comp_protocol.cpp in Sources */,
8C43E9A627E3CD4C00A35F65 /* appDelegate.mm in Sources */,
@@ -8434,6 +8452,7 @@
8CCD844227E40B730024BDD5 /* firmware.cpp in Sources */,
8CCD844327E40B730024BDD5 /* async_job.c in Sources */,
8CCD844427E40B730024BDD5 /* gfx3d.cpp in Sources */,
AB6E3B592E73E7C80088075E /* ClientCheatManager.cpp in Sources */,
ABDB1BF52E66486E002AD9AF /* ClientVideoOutput.cpp in Sources */,
8CCD844527E40B730024BDD5 /* DisplayViewCALayer.mm in Sources */,
8CCD844627E40B730024BDD5 /* GPU.cpp in Sources */,
@@ -8513,6 +8532,7 @@
8CCD848E27E40B730024BDD5 /* psnames.c in Sources */,
8CCD848F27E40B730024BDD5 /* ftpatent.c in Sources */,
8CCD849027E40B730024BDD5 /* version.cpp in Sources */,
AB6E3B4D2E7385710088075E /* ClientFirmwareControl.cpp in Sources */,
8CCD849127E40B730024BDD5 /* vfat.cpp in Sources */,
8CCD849227E40B730024BDD5 /* videofilter.cpp in Sources */,
8CCD849327E40B730024BDD5 /* ClientInputHandler.cpp in Sources */,
@@ -8540,7 +8560,6 @@
8CCD84A727E40B730024BDD5 /* deposterize.cpp in Sources */,
8CCD84A827E40B730024BDD5 /* cocoa_rom.mm in Sources */,
8CCD84A927E40B730024BDD5 /* cocoa_util.mm in Sources */,
8CCD84AA27E40B730024BDD5 /* cocoa_videofilter.mm in Sources */,
8CCD84AB27E40B730024BDD5 /* OGLRender.cpp in Sources */,
8CCD84AC27E40B730024BDD5 /* slot1comp_protocol.cpp in Sources */,
8CCD84AD27E40B730024BDD5 /* appDelegate.mm in Sources */,
@@ -8623,6 +8642,7 @@
AB36C7B127F2C8AE00C763C8 /* Disassembler.cpp in Sources */,
AB88005A2AD5EC500090D47F /* slot2_hcv1000.cpp in Sources */,
AB36C7B227F2C8AE00C763C8 /* disc.cpp in Sources */,
AB6E3B482E7385710088075E /* ClientFirmwareControl.cpp in Sources */,
AB36C7B327F2C8AE00C763C8 /* dlditool.cpp in Sources */,
AB36C7B427F2C8AE00C763C8 /* driver.cpp in Sources */,
AB36C7B527F2C8AE00C763C8 /* emufat.cpp in Sources */,
@@ -8718,6 +8738,7 @@
AB36C80D27F2C8AE00C763C8 /* WifiSettingsPanel.mm in Sources */,
AB36C80E27F2C8AE00C763C8 /* psnames.c in Sources */,
AB36C80F27F2C8AE00C763C8 /* ftpatent.c in Sources */,
AB6E3B5B2E73E7C80088075E /* ClientCheatManager.cpp in Sources */,
ABDB1BE92E6602A5002AD9AF /* ClientEmulationOutput.cpp in Sources */,
AB36C81027F2C8AE00C763C8 /* version.cpp in Sources */,
AB36C81127F2C8AE00C763C8 /* vfat.cpp in Sources */,
@@ -8741,7 +8762,6 @@
AB36C82727F2C8AE00C763C8 /* deposterize.cpp in Sources */,
AB36C82827F2C8AE00C763C8 /* cocoa_rom.mm in Sources */,
AB36C82927F2C8AE00C763C8 /* cocoa_util.mm in Sources */,
AB36C82A27F2C8AE00C763C8 /* cocoa_videofilter.mm in Sources */,
AB36C82B27F2C8AE00C763C8 /* OGLRender.cpp in Sources */,
AB36C82C27F2C8AE00C763C8 /* slot1comp_protocol.cpp in Sources */,
AB36C82D27F2C8AE00C763C8 /* appDelegate.mm in Sources */,
@@ -8863,8 +8883,10 @@
AB790068215B84E50082AE82 /* driver.cpp in Sources */,
AB790069215B84E50082AE82 /* emufat.cpp in Sources */,
AB79006A215B84E50082AE82 /* MacScreenshotCaptureTool.mm in Sources */,
AB6E3B472E7385710088075E /* ClientFirmwareControl.cpp in Sources */,
AB79006B215B84E50082AE82 /* DisplayViewCALayer.mm in Sources */,
AB79006C215B84E50082AE82 /* Slot2WindowDelegate.mm in Sources */,
AB6E3B532E73E7C80088075E /* ClientCheatManager.cpp in Sources */,
AB79006D215B84E50082AE82 /* slot1_retail_mcrom.cpp in Sources */,
AB79006E215B84E50082AE82 /* emufile.cpp in Sources */,
AB79006F215B84E50082AE82 /* fatdir.cpp in Sources */,
@@ -8978,7 +9000,6 @@
AB7900D7215B84E50082AE82 /* cocoa_rom.mm in Sources */,
AB7900D8215B84E50082AE82 /* cff.c in Sources */,
AB7900D9215B84E50082AE82 /* cocoa_util.mm in Sources */,
AB7900DA215B84E50082AE82 /* cocoa_videofilter.mm in Sources */,
AB7900DB215B84E50082AE82 /* appDelegate.mm in Sources */,
AB7900DC215B84E50082AE82 /* file_path.c in Sources */,
AB7991272E70B1420030C0A6 /* CocoaDisplayView.mm in Sources */,
@@ -9066,6 +9087,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AB6E3B4F2E7385710088075E /* ClientFirmwareControl.cpp in Sources */,
AB7901AA215B84F20082AE82 /* smooth.c in Sources */,
AB7901AB215B84F20082AE82 /* MacMetalDisplayViewShaders.metal in Sources */,
AB7901AC215B84F20082AE82 /* ftpatent.c in Sources */,
@@ -9222,7 +9244,6 @@
AB79023B215B84F20082AE82 /* cocoa_input.mm in Sources */,
AB79023D215B84F20082AE82 /* cocoa_rom.mm in Sources */,
AB79023E215B84F20082AE82 /* cocoa_util.mm in Sources */,
AB79023F215B84F20082AE82 /* cocoa_videofilter.mm in Sources */,
AB790240215B84F20082AE82 /* OGLRender.cpp in Sources */,
AB790241215B84F20082AE82 /* slot1comp_protocol.cpp in Sources */,
AB790242215B84F20082AE82 /* appDelegate.mm in Sources */,
@@ -9240,6 +9261,7 @@
AB79024E215B84F20082AE82 /* lq2x.cpp in Sources */,
AB79914D2E71EF050030C0A6 /* CocoaAudioController.mm in Sources */,
AB79024F215B84F20082AE82 /* xbrz.cpp in Sources */,
AB6E3B5A2E73E7C80088075E /* ClientCheatManager.cpp in Sources */,
AB790250215B84F20082AE82 /* OGLDisplayOutput_3_2.cpp in Sources */,
AB790251215B84F20082AE82 /* scanline.cpp in Sources */,
AB790252215B84F20082AE82 /* coreaudiosound.cpp in Sources */,
@@ -9332,8 +9354,10 @@
AB796D0215CDCBA200C59155 /* driver.cpp in Sources */,
AB796D0315CDCBA200C59155 /* emufat.cpp in Sources */,
ABD1FBF11F7B7E7E00B4F648 /* MacScreenshotCaptureTool.mm in Sources */,
AB6E3B4B2E7385710088075E /* ClientFirmwareControl.cpp in Sources */,
AB3BF4381E25D9AE003E2B24 /* DisplayViewCALayer.mm in Sources */,
AB564904186E6EBC002740F4 /* Slot2WindowDelegate.mm in Sources */,
AB6E3B5C2E73E7C80088075E /* ClientCheatManager.cpp in Sources */,
AB9038B217C5ED2200F410BD /* slot1_retail_mcrom.cpp in Sources */,
AB796D0415CDCBA200C59155 /* emufile.cpp in Sources */,
AB796D0515CDCBA200C59155 /* fatdir.cpp in Sources */,
@@ -9447,7 +9471,6 @@
AB796D5215CDCBA200C59155 /* cocoa_rom.mm in Sources */,
ABFEA8851BB4EC1100B08C25 /* cff.c in Sources */,
AB796D5315CDCBA200C59155 /* cocoa_util.mm in Sources */,
AB796D5415CDCBA200C59155 /* cocoa_videofilter.mm in Sources */,
AB796D5515CDCBA200C59155 /* appDelegate.mm in Sources */,
AB000DCB1CCC6B0700413F02 /* file_path.c in Sources */,
AB79912B2E70B1420030C0A6 /* CocoaDisplayView.mm in Sources */,
@@ -9535,6 +9558,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AB6E3B4C2E7385710088075E /* ClientFirmwareControl.cpp in Sources */,
ABFEA8CC1BB4EC1100B08C25 /* smooth.c in Sources */,
AB54718C1E27610500508C5C /* MacMetalDisplayViewShaders.metal in Sources */,
ABFEA8421BB4EC1100B08C25 /* ftpatent.c in Sources */,
@@ -9691,7 +9715,6 @@
AB8F3CDB1A53AC2600A80BF6 /* cocoa_input.mm in Sources */,
AB8F3CDD1A53AC2600A80BF6 /* cocoa_rom.mm in Sources */,
AB8F3CDE1A53AC2600A80BF6 /* cocoa_util.mm in Sources */,
AB8F3CDF1A53AC2600A80BF6 /* cocoa_videofilter.mm in Sources */,
AB8F3CE01A53AC2600A80BF6 /* OGLRender.cpp in Sources */,
AB8F3CE11A53AC2600A80BF6 /* slot1comp_protocol.cpp in Sources */,
AB8F3CE21A53AC2600A80BF6 /* appDelegate.mm in Sources */,
@@ -9709,6 +9732,7 @@
AB8F3CEC1A53AC2600A80BF6 /* lq2x.cpp in Sources */,
AB7991532E71EF060030C0A6 /* CocoaAudioController.mm in Sources */,
AB8F3CED1A53AC2600A80BF6 /* xbrz.cpp in Sources */,
AB6E3B562E73E7C80088075E /* ClientCheatManager.cpp in Sources */,
ABB24F6F1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */,
AB8F3CEE1A53AC2600A80BF6 /* scanline.cpp in Sources */,
AB8F3CEF1A53AC2600A80BF6 /* coreaudiosound.cpp in Sources */,
@@ -9807,6 +9831,7 @@
ABB3C6871501C04F00E0C22E /* hq2x.cpp in Sources */,
ABB1C94B1F5281AE0004844F /* ClientExecutionControl.cpp in Sources */,
ABB3C6881501C04F00E0C22E /* hq4x.cpp in Sources */,
AB6E3B492E7385710088075E /* ClientFirmwareControl.cpp in Sources */,
AB7991422E712F510030C0A6 /* ClientAudioOutput.cpp in Sources */,
ABB3C6891501C04F00E0C22E /* lq2x.cpp in Sources */,
ABDB1BF92E66486E002AD9AF /* ClientVideoOutput.cpp in Sources */,
@@ -9860,6 +9885,7 @@
ABB3C6A81501C04F00E0C22E /* tinyxmlerror.cpp in Sources */,
AB49B552281687B90069F1D7 /* smooth.c in Sources */,
ABB3C6A91501C04F00E0C22E /* tinyxmlparser.cpp in Sources */,
AB6E3B572E73E7C80088075E /* ClientCheatManager.cpp in Sources */,
ABADF11E1DEA4CFC00A142B1 /* features_cpu.c in Sources */,
ABB3C6AB1501C04F00E0C22E /* datetime.cpp in Sources */,
AB9038B117C5ED2200F410BD /* slot1_retail_auto.cpp in Sources */,
@@ -9977,8 +10003,10 @@
ABC858B928273FEE00A03EA9 /* fatfile.cpp in Sources */,
ABC858BA28273FEE00A03EA9 /* FIFO.cpp in Sources */,
ABC858BB28273FEE00A03EA9 /* MacScreenshotCaptureTool.mm in Sources */,
AB6E3B4A2E7385710088075E /* ClientFirmwareControl.cpp in Sources */,
ABC858BC28273FEE00A03EA9 /* FIFOSampleBuffer.cpp in Sources */,
ABC858BD28273FEE00A03EA9 /* file_allocation_table.cpp in Sources */,
AB6E3B552E73E7C80088075E /* ClientCheatManager.cpp in Sources */,
ABC858BE28273FEE00A03EA9 /* slot1_retail_mcrom_debug.cpp in Sources */,
ABC858BF28273FEE00A03EA9 /* filetime.cpp in Sources */,
ABC858C028273FEE00A03EA9 /* FIRFilter.cpp in Sources */,
@@ -10088,7 +10116,6 @@
ABC8592628273FEE00A03EA9 /* deposterize.cpp in Sources */,
ABC8592728273FEE00A03EA9 /* cocoa_rom.mm in Sources */,
ABC8592828273FEE00A03EA9 /* cocoa_util.mm in Sources */,
ABC8592928273FEE00A03EA9 /* cocoa_videofilter.mm in Sources */,
ABC8592A28273FEE00A03EA9 /* OGLRender.cpp in Sources */,
ABC8592B28273FEE00A03EA9 /* slot1comp_protocol.cpp in Sources */,
ABC8592C28273FEE00A03EA9 /* appDelegate.mm in Sources */,
@@ -10211,8 +10238,10 @@
ABD2CD6D26E05CB000FB15F7 /* fatfile.cpp in Sources */,
ABD2CD6E26E05CB000FB15F7 /* FIFO.cpp in Sources */,
ABD2CD6F26E05CB000FB15F7 /* MacScreenshotCaptureTool.mm in Sources */,
AB6E3B4E2E7385710088075E /* ClientFirmwareControl.cpp in Sources */,
ABD2CD7026E05CB000FB15F7 /* FIFOSampleBuffer.cpp in Sources */,
ABD2CD7126E05CB000FB15F7 /* file_allocation_table.cpp in Sources */,
AB6E3B5D2E73E7C80088075E /* ClientCheatManager.cpp in Sources */,
ABD2CD7226E05CB000FB15F7 /* slot1_retail_mcrom_debug.cpp in Sources */,
ABD2CD7326E05CB000FB15F7 /* filetime.cpp in Sources */,
ABD2CD7426E05CB000FB15F7 /* FIRFilter.cpp in Sources */,
@@ -10322,7 +10351,6 @@
ABD2CDDA26E05CB000FB15F7 /* deposterize.cpp in Sources */,
ABD2CDDB26E05CB000FB15F7 /* cocoa_rom.mm in Sources */,
ABD2CDDC26E05CB000FB15F7 /* cocoa_util.mm in Sources */,
ABD2CDDD26E05CB000FB15F7 /* cocoa_videofilter.mm in Sources */,
ABD2CDDE26E05CB000FB15F7 /* OGLRender.cpp in Sources */,
ABD2CDDF26E05CB000FB15F7 /* slot1comp_protocol.cpp in Sources */,
ABD2CDE026E05CB000FB15F7 /* appDelegate.mm in Sources */,

View File

@@ -301,6 +301,16 @@
AB1CC8311AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8181AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png */; };
AB1CC8321AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8191AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png */; };
AB1CC8331AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC81A1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png */; };
AB1E5A362E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1E5A322E73F0AC008AFF9F /* ClientCheatManager.cpp */; };
AB1E5A372E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1E5A342E73F0AC008AFF9F /* ClientFirmwareControl.cpp */; };
AB1E5A382E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1E5A322E73F0AC008AFF9F /* ClientCheatManager.cpp */; };
AB1E5A392E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1E5A342E73F0AC008AFF9F /* ClientFirmwareControl.cpp */; };
AB1E5A3A2E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1E5A322E73F0AC008AFF9F /* ClientCheatManager.cpp */; };
AB1E5A3B2E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1E5A342E73F0AC008AFF9F /* ClientFirmwareControl.cpp */; };
AB1E5A3C2E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1E5A322E73F0AC008AFF9F /* ClientCheatManager.cpp */; };
AB1E5A3D2E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1E5A342E73F0AC008AFF9F /* ClientFirmwareControl.cpp */; };
AB1E5A3E2E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1E5A322E73F0AC008AFF9F /* ClientCheatManager.cpp */; };
AB1E5A3F2E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1E5A342E73F0AC008AFF9F /* ClientFirmwareControl.cpp */; };
AB213D45170CB141006DDB0F /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB213D44170CB141006DDB0F /* InputProfileController.mm */; };
AB213D46170CB141006DDB0F /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB213D44170CB141006DDB0F /* InputProfileController.mm */; };
AB213D47170CB141006DDB0F /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB213D44170CB141006DDB0F /* InputProfileController.mm */; };
@@ -463,7 +473,6 @@
AB2A9A461725F00F0062C1A1 /* mic_ext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD9A46413DB99B300777194 /* mic_ext.cpp */; };
AB2A9A481725F00F0062C1A1 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
AB2A9A491725F00F0062C1A1 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
AB2A9A4A1725F00F0062C1A1 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
AB2A9A4B1725F00F0062C1A1 /* OGLRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC11345AC8400AF11D1 /* OGLRender.cpp */; };
AB2A9A4C1725F00F0062C1A1 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
AB2A9A4D1725F00F0062C1A1 /* cheatWindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */; };
@@ -660,7 +669,6 @@
AB2F3C2515CF9C6000858373 /* mic_ext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD9A46413DB99B300777194 /* mic_ext.cpp */; };
AB2F3C2715CF9C6000858373 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
AB2F3C2815CF9C6000858373 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
AB2F3C2915CF9C6000858373 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
AB2F3C2A15CF9C6000858373 /* OGLRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC11345AC8400AF11D1 /* OGLRender.cpp */; };
AB2F3C2B15CF9C6000858373 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
AB2F3C2C15CF9C6000858373 /* cheatWindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */; };
@@ -972,7 +980,6 @@
AB711F641481C35F009011C8 /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABE6702A1415DE6C00E8E4C9 /* tinyxmlparser.cpp */; };
AB711F6C1481C35F009011C8 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
AB711F6D1481C35F009011C8 /* videofilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB817A35143EE2DB00A7DFE9 /* videofilter.cpp */; };
AB711F6E1481C35F009011C8 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
AB711F701481C35F009011C8 /* cocoa_cheat.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABA6574A14511EC90077E5E9 /* cocoa_cheat.mm */; };
AB711F741481C35F009011C8 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
AB711F751481C35F009011C8 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */; };
@@ -1129,7 +1136,6 @@
AB73AA131507C9F500A310C8 /* mic_ext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD9A46413DB99B300777194 /* mic_ext.cpp */; };
AB73AA151507C9F500A310C8 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
AB73AA161507C9F500A310C8 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
AB73AA171507C9F500A310C8 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
AB73AA181507C9F500A310C8 /* OGLRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC11345AC8400AF11D1 /* OGLRender.cpp */; };
AB73AA191507C9F500A310C8 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
AB73AA1A1507C9F500A310C8 /* cheatWindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */; };
@@ -1420,7 +1426,6 @@
ABAD101B15ACE7A00000EC47 /* mic_ext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD9A46413DB99B300777194 /* mic_ext.cpp */; };
ABAD101D15ACE7A00000EC47 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
ABAD101E15ACE7A00000EC47 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
ABAD101F15ACE7A00000EC47 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; };
ABAD102015ACE7A00000EC47 /* OGLRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC11345AC8400AF11D1 /* OGLRender.cpp */; };
ABAD102115ACE7A00000EC47 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; };
ABAD102215ACE7A00000EC47 /* cheatWindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */; };
@@ -1949,6 +1954,10 @@
AB1CC8181AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneGray_256x256.png; path = images/Icon_MicrophoneGray_256x256.png; sourceTree = "<group>"; };
AB1CC8191AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneGreen_256x256.png; path = images/Icon_MicrophoneGreen_256x256.png; sourceTree = "<group>"; };
AB1CC81A1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneRed_256x256.png; path = images/Icon_MicrophoneRed_256x256.png; sourceTree = "<group>"; };
AB1E5A322E73F0AC008AFF9F /* ClientCheatManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClientCheatManager.cpp; sourceTree = "<group>"; };
AB1E5A332E73F0AC008AFF9F /* ClientCheatManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClientCheatManager.h; sourceTree = "<group>"; };
AB1E5A342E73F0AC008AFF9F /* ClientFirmwareControl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClientFirmwareControl.cpp; sourceTree = "<group>"; };
AB1E5A352E73F0AC008AFF9F /* ClientFirmwareControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClientFirmwareControl.h; sourceTree = "<group>"; };
AB213D43170CB141006DDB0F /* InputProfileController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputProfileController.h; sourceTree = "<group>"; };
AB213D44170CB141006DDB0F /* InputProfileController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = InputProfileController.mm; sourceTree = "<group>"; };
AB213E981710D074006DDB0F /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
@@ -2370,8 +2379,6 @@
ABD59846187D4A6C00069403 /* Icon_PaddleKnob_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_PaddleKnob_256x256.png; path = images/Icon_PaddleKnob_256x256.png; sourceTree = "<group>"; };
ABD9A46313DB99B300777194 /* mic_ext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mic_ext.h; sourceTree = "<group>"; };
ABD9A46413DB99B300777194 /* mic_ext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mic_ext.cpp; sourceTree = "<group>"; };
ABE5DFE3143FB1DA00835AD8 /* cocoa_videofilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_videofilter.h; sourceTree = "<group>"; };
ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_videofilter.mm; sourceTree = "<group>"; };
ABE670251415DE6C00E8E4C9 /* tinystr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinystr.cpp; sourceTree = "<group>"; };
ABE670261415DE6C00E8E4C9 /* tinystr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinystr.h; sourceTree = "<group>"; };
ABE670271415DE6C00E8E4C9 /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = "<group>"; };
@@ -2594,9 +2601,11 @@
AB2145221714DFF4006DDB0F /* audiosamplegenerator.cpp */,
AB561BFD2E72AD6E007F88A5 /* ClientAudioOutput.cpp */,
ABD1267120AE812900EFE1B2 /* ClientAVCaptureObject.cpp */,
AB1E5A322E73F0AC008AFF9F /* ClientCheatManager.cpp */,
AB0F13911E1B7C320075684F /* ClientDisplayView.cpp */,
AB561BFF2E72AD6E007F88A5 /* ClientEmulationOutput.cpp */,
ABD4F2711F54A51000D75A1F /* ClientExecutionControl.cpp */,
AB1E5A342E73F0AC008AFF9F /* ClientFirmwareControl.cpp */,
ABC04DA11F67A20500EA6ED7 /* ClientInputHandler.cpp */,
AB561C012E72AD6E007F88A5 /* ClientVideoOutput.cpp */,
ABD0A5341501AA5A0074A094 /* coreaudiosound.cpp */,
@@ -2610,9 +2619,11 @@
AB2145211714DFF4006DDB0F /* audiosamplegenerator.h */,
AB561BFE2E72AD6E007F88A5 /* ClientAudioOutput.h */,
ABD1267220AE812900EFE1B2 /* ClientAVCaptureObject.h */,
AB1E5A332E73F0AC008AFF9F /* ClientCheatManager.h */,
AB0F13901E1B7C320075684F /* ClientDisplayView.h */,
AB561C002E72AD6E007F88A5 /* ClientEmulationOutput.h */,
ABD4F2721F54A51000D75A1F /* ClientExecutionControl.h */,
AB1E5A352E73F0AC008AFF9F /* ClientFirmwareControl.h */,
ABC04DA21F67A20500EA6ED7 /* ClientInputHandler.h */,
AB561C022E72AD6E007F88A5 /* ClientVideoOutput.h */,
ABA6574914511EC90077E5E9 /* cocoa_cheat.h */,
@@ -2625,7 +2636,6 @@
ABD104001346652500AF11D1 /* cocoa_rom.h */,
ABAE2F8218682B8F00C92F4F /* cocoa_slot2.h */,
AB80E050142BC4FA00A52038 /* cocoa_util.h */,
ABE5DFE3143FB1DA00835AD8 /* cocoa_videofilter.h */,
ABD0A5361501AA5A0074A094 /* coreaudiosound.h */,
ABD1267420AE812900EFE1B2 /* macOS_driver.h */,
ABD9A46313DB99B300777194 /* mic_ext.h */,
@@ -2643,7 +2653,6 @@
ABD104131346652500AF11D1 /* cocoa_rom.mm */,
ABAE2F8318682B8F00C92F4F /* cocoa_slot2.mm */,
AB80E04C142BC4A800A52038 /* cocoa_util.mm */,
ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */,
);
name = "Cocoa Port";
sourceTree = "<group>";
@@ -4799,7 +4808,6 @@
AB2A9A461725F00F0062C1A1 /* mic_ext.cpp in Sources */,
AB2A9A481725F00F0062C1A1 /* cocoa_rom.mm in Sources */,
AB2A9A491725F00F0062C1A1 /* cocoa_util.mm in Sources */,
AB2A9A4A1725F00F0062C1A1 /* cocoa_videofilter.mm in Sources */,
AB2A9A4B1725F00F0062C1A1 /* OGLRender.cpp in Sources */,
AB2A9A4C1725F00F0062C1A1 /* appDelegate.mm in Sources */,
AB2A9A4D1725F00F0062C1A1 /* cheatWindowDelegate.mm in Sources */,
@@ -4910,6 +4918,8 @@
AB561C062E72AD6E007F88A5 /* ClientAudioOutput.cpp in Sources */,
AB561C072E72AD6E007F88A5 /* ClientEmulationOutput.cpp in Sources */,
AB561C082E72AD6E007F88A5 /* ClientVideoOutput.cpp in Sources */,
AB1E5A382E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */,
AB1E5A392E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -4999,7 +5009,6 @@
AB2F3C2515CF9C6000858373 /* mic_ext.cpp in Sources */,
AB2F3C2715CF9C6000858373 /* cocoa_rom.mm in Sources */,
AB2F3C2815CF9C6000858373 /* cocoa_util.mm in Sources */,
AB2F3C2915CF9C6000858373 /* cocoa_videofilter.mm in Sources */,
AB2F3C2A15CF9C6000858373 /* OGLRender.cpp in Sources */,
AB2F3C2B15CF9C6000858373 /* appDelegate.mm in Sources */,
AB2F3C2C15CF9C6000858373 /* cheatWindowDelegate.mm in Sources */,
@@ -5110,6 +5119,8 @@
AB561C092E72AD6E007F88A5 /* ClientAudioOutput.cpp in Sources */,
AB561C0A2E72AD6E007F88A5 /* ClientEmulationOutput.cpp in Sources */,
AB561C0B2E72AD6E007F88A5 /* ClientVideoOutput.cpp in Sources */,
AB1E5A3A2E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */,
AB1E5A3B2E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5199,7 +5210,6 @@
AB711F5E1481C35F009011C8 /* mic_ext.cpp in Sources */,
AB711F481481C35F009011C8 /* cocoa_rom.mm in Sources */,
AB711F6C1481C35F009011C8 /* cocoa_util.mm in Sources */,
AB711F6E1481C35F009011C8 /* cocoa_videofilter.mm in Sources */,
AB3ACB7814C2361100D7D192 /* appDelegate.mm in Sources */,
AB3ACB7914C2361100D7D192 /* cheatWindowDelegate.mm in Sources */,
AB3ACB7C14C2361100D7D192 /* inputPrefsView.mm in Sources */,
@@ -5340,6 +5350,8 @@
AB561C0F2E72AD6E007F88A5 /* ClientAudioOutput.cpp in Sources */,
AB561C102E72AD6E007F88A5 /* ClientEmulationOutput.cpp in Sources */,
AB561C112E72AD6E007F88A5 /* ClientVideoOutput.cpp in Sources */,
AB1E5A3E2E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */,
AB1E5A3F2E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5429,7 +5441,6 @@
AB73AA131507C9F500A310C8 /* mic_ext.cpp in Sources */,
AB73AA151507C9F500A310C8 /* cocoa_rom.mm in Sources */,
AB73AA161507C9F500A310C8 /* cocoa_util.mm in Sources */,
AB73AA171507C9F500A310C8 /* cocoa_videofilter.mm in Sources */,
AB73AA181507C9F500A310C8 /* OGLRender.cpp in Sources */,
AB73AA191507C9F500A310C8 /* appDelegate.mm in Sources */,
AB73AA1A1507C9F500A310C8 /* cheatWindowDelegate.mm in Sources */,
@@ -5570,6 +5581,8 @@
AB561C0C2E72AD6E007F88A5 /* ClientAudioOutput.cpp in Sources */,
AB561C0D2E72AD6E007F88A5 /* ClientEmulationOutput.cpp in Sources */,
AB561C0E2E72AD6E007F88A5 /* ClientVideoOutput.cpp in Sources */,
AB1E5A3C2E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */,
AB1E5A3D2E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5659,7 +5672,6 @@
ABAD101B15ACE7A00000EC47 /* mic_ext.cpp in Sources */,
ABAD101D15ACE7A00000EC47 /* cocoa_rom.mm in Sources */,
ABAD101E15ACE7A00000EC47 /* cocoa_util.mm in Sources */,
ABAD101F15ACE7A00000EC47 /* cocoa_videofilter.mm in Sources */,
ABAD102015ACE7A00000EC47 /* OGLRender.cpp in Sources */,
ABAD102115ACE7A00000EC47 /* appDelegate.mm in Sources */,
ABAD102215ACE7A00000EC47 /* cheatWindowDelegate.mm in Sources */,
@@ -5770,6 +5782,8 @@
AB561C032E72AD6E007F88A5 /* ClientAudioOutput.cpp in Sources */,
AB561C042E72AD6E007F88A5 /* ClientEmulationOutput.cpp in Sources */,
AB561C052E72AD6E007F88A5 /* ClientVideoOutput.cpp in Sources */,
AB1E5A362E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */,
AB1E5A372E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@@ -1,6 +1,6 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2011-2023 DeSmuME team
Copyright (C) 2011-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -23,284 +23,10 @@
#import <Cocoa/Cocoa.h>
class CHEATS;
class CHEATS_LIST;
class CHEATSEARCH;
class ClientCheatItem;
class ClientCheatManager;
enum CheatType
{
CheatType_Internal = 0,
CheatType_ActionReplay = 1,
CheatType_CodeBreaker = 2
};
enum CheatFreezeType
{
CheatFreezeType_Normal = 0,
CheatFreezeType_CanDecrease = 1,
CheatFreezeType_CanIncrease = 2
};
enum CheatSearchStyle
{
CheatSearchStyle_ExactValue = 0,
CheatSearchStyle_Comparative = 1
};
enum CheatSearchCompareStyle
{
CheatSearchCompareStyle_GreaterThan = 0,
CheatSearchCompareStyle_LesserThan = 1,
CheatSearchCompareStyle_Equals = 2,
CheatSearchCompareStyle_NotEquals = 3
};
union DesmumeCheatSearchItem
{
uint64_t data;
struct
{
uint32_t address;
uint32_t value;
};
};
typedef union DesmumeCheatSearchItem DesmumeCheatSearchItem;
typedef std::vector<DesmumeCheatSearchItem> DesmumeCheatSearchResultsList;
struct InternalCheatParam
{
uint32_t address;
uint32_t value;
uint8_t valueLength;
};
typedef struct InternalCheatParam InternalCheatParam;
class ClientCheatItem
{
protected:
ClientCheatManager *_cheatManager;
bool _isEnabled;
bool _willAddFromDB;
CheatType _cheatType;
std::string _nameString;
std::string _commentString;
// Internal cheat type parameters
CheatFreezeType _freezeType;
char _addressString[10+1];
uint32_t _address;
uint32_t _value;
uint8_t _valueLength;
// Action Replay parameters
uint32_t _codeCount;
std::string _rawCodeString;
std::string _cleanCodeString;
void _ConvertInternalToActionReplay();
void _ConvertActionReplayToInternal();
public:
ClientCheatItem();
~ClientCheatItem();
void Init(const CHEATS_LIST &inCheatItem);
void Init(const ClientCheatItem &inCheatItem);
void SetCheatManager(ClientCheatManager *cheatManager);
ClientCheatManager* GetCheatManager() const;
void SetEnabled(bool theState);
bool IsEnabled() const;
void SetWillAddFromDB(bool theState);
bool WillAddFromDB() const;
CheatType GetType() const;
void SetType(CheatType requestedType);
bool IsSupportedType() const;
const char* GetName() const;
void SetName(const char *nameString);
const char* GetComments() const;
void SetComments(const char *commentString);
CheatFreezeType GetFreezeType() const;
void SetFreezeType(CheatFreezeType theFreezeType);
uint32_t GetAddress() const;
void SetAddress(uint32_t theAddress);
const char* GetAddressString() const;
const char* GetAddressSixDigitString() const;
void SetAddressSixDigitString(const char *sixDigitString);
uint32_t GetValue() const;
void SetValue(uint32_t theValue);
uint8_t GetValueLength() const;
void SetValueLength(uint8_t byteLength);
void SetRawCodeString(const char *rawString, const bool willSaveValidatedRawString);
const char* GetRawCodeString() const;
const char* GetCleanCodeString() const;
const std::string& GetCleanCodeCppString() const;
uint32_t GetCodeCount() const;
void ClientToDesmumeCheatItem(CHEATS_LIST *outCheatItem) const;
};
class ClientCheatList
{
private:
ClientCheatItem* __AddItem(const ClientCheatItem *srcItem, const bool willCopy, const bool allowDuplicates);
protected:
std::vector<ClientCheatItem *> *_list;
public:
ClientCheatList();
~ClientCheatList();
CheatSystemError LoadFromFile(const char *filePath);
CheatSystemError SaveToFile(const char *filePath);
bool IsItemDuplicate(const ClientCheatItem *srcItem);
ClientCheatItem* AddNew();
ClientCheatItem* AddNewItemCopy(const ClientCheatItem *srcItem);
ClientCheatItem* AddNewItemCopyNoDuplicate(const ClientCheatItem *srcItem);
ClientCheatItem* AddExistingItemNoDuplicate(const ClientCheatItem *srcItem);
bool Remove(ClientCheatItem *targetItem);
bool RemoveAtIndex(size_t index);
void RemoveAll();
bool Update(const ClientCheatItem &srcItem, ClientCheatItem *targetItem);
bool UpdateAtIndex(const ClientCheatItem &srcItem, size_t index);
size_t GetTotalCheatCount() const;
size_t GetActiveCheatCount() const;
std::vector<ClientCheatItem *>* GetCheatList() const;
size_t GetIndexOfItem(const ClientCheatItem *cheatItem) const;
ClientCheatItem* GetItemAtIndex(size_t index) const;
void ReplaceFromEngine(const CHEATS *engineCheatList);
void CopyListToEngine(const bool willApplyOnlyEnabledItems, CHEATS *engineCheatList);
};
class ClientCheatSearcher
{
protected:
CHEATSEARCH *_desmumeSearcher;
uint8_t _searchValueLength;
size_t _resultsCount;
bool _didSearchStart;
DesmumeCheatSearchResultsList _resultsList;
public:
ClientCheatSearcher();
~ClientCheatSearcher();
bool DidStart() const;
void Reset();
size_t SearchExactValue(uint32_t value, uint8_t valueLength, bool performSignedSearch);
size_t SearchComparative(CheatSearchCompareStyle compareStyle, uint8_t valueLength, bool performSignedSearch);
const DesmumeCheatSearchResultsList& RefreshResults();
const DesmumeCheatSearchResultsList& GetResults();
size_t GetResultCount() const;
};
class ClientCheatDatabase
{
protected:
ClientCheatList *_list;
std::string _title;
std::string _description;
std::string _lastFilePath;
public:
ClientCheatDatabase();
~ClientCheatDatabase();
ClientCheatList* GetList() const;
ClientCheatList* LoadFromFile(const char *dbFilePath);
const char* GetTitle() const;
const char* GetDescription() const;
};
class ClientCheatManager
{
protected:
ClientCheatList *_currentSessionList;
ClientCheatDatabase *_currentDatabase;
ClientCheatSearcher *_currentSearcher;
ClientCheatItem *_selectedItem;
size_t _selectedItemIndex;
uint32_t _untitledCount;
std::string _currentSessionLastFilePath;
std::vector<InternalCheatParam> _pendingInternalCheatWriteList;
bool _masterNeedsUpdate;
public:
ClientCheatManager();
virtual ~ClientCheatManager();
static CHEATS* GetMaster();
static void SetMaster(const CHEATS *masterCheats);
ClientCheatList* GetSessionList() const;
const char* GetSessionListLastFilePath() const;
virtual CheatSystemError SessionListLoadFromFile(const char *filePath);
virtual CheatSystemError SessionListSaveToFile(const char *filePath);
ClientCheatItem* SetSelectedItemByIndex(size_t index);
ClientCheatItem* NewItem();
ClientCheatItem* AddExistingItemNoDuplicate(const ClientCheatItem *theItem);
void RemoveItem(ClientCheatItem *theItem);
void RemoveItemAtIndex(size_t index);
void RemoveSelectedItem();
void ModifyItem(const ClientCheatItem *srcItem, ClientCheatItem *targetItem);
void ModifyItemAtIndex(const ClientCheatItem *srcItem, size_t index);
size_t GetTotalCheatCount() const;
size_t GetActiveCheatCount() const;
void LoadFromMaster();
void ApplyToMaster();
void MasterNeedsUpdate();
ClientCheatList* GetDatabaseList() const;
ClientCheatList* DatabaseListLoadFromFile(const char *dbFilePath);
const char* GetDatabaseTitle() const;
const char* GetDatabaseDescription() const;
bool SearchDidStart() const;
void SearchReset();
size_t SearchExactValue(uint32_t value, uint8_t valueLength, bool performSignedSearch);
size_t SearchComparative(CheatSearchCompareStyle compareStyle, uint8_t valueLength, bool performSignedSearch);
const DesmumeCheatSearchResultsList& SearchResultsRefresh();
const DesmumeCheatSearchResultsList& GetSearchResults();
size_t GetSearchResultCount() const;
void DirectWriteInternalCheatAtIndex(size_t index);
void DirectWriteInternalCheatItem(const ClientCheatItem *cheatItem);
void DirectWriteInternalCheat(uint32_t targetAddress, uint32_t newValue32, size_t newValueLength);
void ApplyPendingInternalCheatWrites();
};
@interface CocoaDSCheatItem : NSObject
{
ClientCheatItem *_internalData;

File diff suppressed because it is too large Load Diff

View File

@@ -27,6 +27,7 @@
#include "macOS_driver.h"
#include "ClientAVCaptureObject.h"
#include "ClientCheatManager.h"
#include "ClientExecutionControl.h"
#include "ClientInputHandler.h"
#include "ClientEmulationOutput.h"

View File

@@ -1,6 +1,6 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2012-2018 DeSmuME team
Copyright (C) 2012-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,32 +17,11 @@
*/
#import <Cocoa/Cocoa.h>
#include <pthread.h>
class ClientExecutionControl;
class FirmwareConfigInterface;
class ClientFirmwareControl;
struct FirmwareConfig;
enum FirmwareCfgAPID
{
FirmwareCfgAPID_AP1 = 0,
FirmwareCfgAPID_AP2 = 1,
FirmwareCfgAPID_AP3 = 2
};
enum FirmwareCfgMACAddrSetID
{
FirmwareCfgMACAddrSetID_Firmware = 0,
FirmwareCfgMACAddrSetID_Custom1 = 1,
FirmwareCfgMACAddrSetID_Custom2 = 2,
FirmwareCfgMACAddrSetID_Custom3 = 3,
FirmwareCfgMACAddrSetID_Custom4 = 4,
FirmwareCfgMACAddrSetID_Custom5 = 5,
FirmwareCfgMACAddrSetID_Custom6 = 6,
FirmwareCfgMACAddrSetID_Custom7 = 7,
FirmwareCfgMACAddrSetID_Custom8 = 8
};
/********************************************************************************************
CocoaDSFirmware - OBJECTIVE-C CLASS
@@ -54,7 +33,7 @@ enum FirmwareCfgMACAddrSetID
@interface CocoaDSFirmware : NSObject
{
ClientExecutionControl *execControl;
FirmwareConfigInterface *_fwConfigInterface;
ClientFirmwareControl *_fwControl;
FirmwareConfig *_appliedFWConfig;
NSUInteger _birth_year;
@@ -158,95 +137,3 @@ enum FirmwareCfgMACAddrSetID
- (void) writeUserDefaultWFCUserID;
@end
class FirmwareConfigInterface
{
protected:
FirmwareConfig *_internalData;
FirmwareCfgMACAddrSetID _macAddressSelection;
uint32_t _firmwareMACAddressValue;
uint32_t _customMACAddressValue;
char _macAddressString[(1 + 8) * 18];
char _wfcUserIDString[20];
char _subnetMaskString[3 * 16];
public:
FirmwareConfigInterface();
~FirmwareConfigInterface();
static void WriteMACAddressStringToBuffer(const uint8_t mac4, const uint8_t mac5, const uint8_t mac6, char *stringBuffer);
static void WriteMACAddressStringToBuffer(const uint32_t macAddressValue, char *stringBuffer);
static void WriteWFCUserIDStringToBuffer(const uint64_t wfcUserIDValue, char *stringBuffer);
const FirmwareConfig& GetFirmwareConfig();
uint32_t GenerateRandomMACValue();
FirmwareCfgMACAddrSetID GetMACAddressSelection();
void SetMACAddressSelection(FirmwareCfgMACAddrSetID addressSetID);
uint32_t GetMACAddressValue(FirmwareCfgMACAddrSetID addressSetID);
const char* GetMACAddressString(FirmwareCfgMACAddrSetID addressSetID);
uint32_t GetSelectedMACAddressValue();
uint64_t GetSelectedWFCUserID64();
const char* GetSelectedMACAddressString();
void SetFirmwareMACAddressValue(uint32_t macAddressValue);
void SetFirmwareMACAddressValue(uint8_t mac4, uint8_t mac5, uint8_t mac6);
void SetCustomMACAddressValue(uint32_t macAddressValue);
void SetCustomMACAddressValue(uint8_t mac4, uint8_t mac5, uint8_t mac6);
uint8_t* GetWFCUserID();
void SetWFCUserID(uint8_t *wfcUserID);
uint64_t GetWFCUserID64();
void SetWFCUserID64(uint64_t wfcUserIDValue);
const char* GetWFCUserIDString();
uint8_t GetIPv4AddressPart(FirmwareCfgAPID apid, uint8_t addrPart);
void SetIPv4AddressPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue);
uint8_t GetIPv4GatewayPart(FirmwareCfgAPID apid, uint8_t addrPart);
void SetIPv4GatewayPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue);
uint8_t GetIPv4PrimaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart);
void SetIPv4PrimaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue);
uint8_t GetIPv4SecondaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart);
void SetIPv4SecondaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue);
uint8_t GetSubnetMask(FirmwareCfgAPID apid);
const char* GetSubnetMaskString(FirmwareCfgAPID apid);
void SetSubnetMask(FirmwareCfgAPID apid, uint8_t subnetMaskShift);
int GetConsoleType();
void SetConsoleType(int type);
uint16_t* GetNicknameStringBuffer();
void SetNicknameWithStringBuffer(uint16_t *buffer, size_t charLength);
size_t GetNicknameStringLength();
void SetNicknameStringLength(size_t charLength);
uint16_t* GetMessageStringBuffer();
void SetMessageWithStringBuffer(uint16_t *buffer, size_t charLength);
size_t GetMessageStringLength();
void SetMessageStringLength(size_t charLength);
int GetFavoriteColorByID();
void SetFavoriteColorByID(int colorID);
int GetBirthdayDay();
void SetBirthdayDay(int day);
int GetBirthdayMonth();
void SetBirthdayMonth(int month);
int GetLanguageByID();
void SetLanguageByID(int languageID);
int GetBacklightLevel();
void SetBacklightLevel(int level);
};

File diff suppressed because it is too large Load Diff

View File

@@ -1,63 +0,0 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2011-2013 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#import <Foundation/Foundation.h>
#include "../../filter/videofilter.h"
#undef BOOL
@class NSImage;
@class NSBitmapImageRep;
/********************************************************************************************
CocoaVideoFilter - OBJECTIVE-C CLASS
This is an Objective-C wrapper class for the video filter C++ object.
Thread Safety:
All methods are thread-safe.
********************************************************************************************/
@interface CocoaVideoFilter : NSObject
{
VideoFilter *vf;
VideoFilterTypeID currentFilterType;
}
- (id) initWithSize:(NSSize)theSize;
- (id) initWithSize:(NSSize)theSize typeID:(VideoFilterTypeID)typeID;
- (id) initWithSize:(NSSize)theSize typeID:(VideoFilterTypeID)typeID numberThreads:(NSUInteger)numThreads;
- (BOOL) setSourceSize:(NSSize)theSize;
- (BOOL) changeFilter:(VideoFilterTypeID)typeID;
- (UInt32 *) runFilter;
- (NSImage *) image;
- (NSBitmapImageRep *) bitmapImageRep;
- (VideoFilterTypeID) typeID;
- (NSString *) typeString;
- (UInt32 *) srcBufferPtr;
- (UInt32 *) dstBufferPtr;
- (NSSize) srcSize;
- (NSSize) destSize;
- (VideoFilterParamType) filterParameterType:(VideoFilterParamID)paramID;
- (int) filterParameteri:(VideoFilterParamID)paramID;
- (unsigned int) filterParameterui:(VideoFilterParamID)paramID;
- (float) filterParameterf:(VideoFilterParamID)paramID;
- (void) setFilterParameter:(VideoFilterParamID)paramID intValue:(int)value;
- (void) setFilterParameter:(VideoFilterParamID)paramID uintValue:(unsigned int)value;
- (void) setFilterParameter:(VideoFilterParamID)paramID floatValue:(float)value;
+ (NSString *) typeStringByID:(VideoFilterTypeID)typeID;
@end

View File

@@ -1,227 +0,0 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2013-2024 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#import "cocoa_videofilter.h"
#import <Cocoa/Cocoa.h>
#include "../../utils/colorspacehandler/colorspacehandler.h"
@implementation CocoaVideoFilter
- (id)init
{
return [self initWithSize:NSMakeSize(1, 1) typeID:VideoFilterTypeID_None numberThreads:0];
}
- (id) initWithSize:(NSSize)theSize
{
return [self initWithSize:theSize typeID:VideoFilterTypeID_None numberThreads:0];
}
- (id) initWithSize:(NSSize)theSize typeID:(VideoFilterTypeID)typeID
{
return [self initWithSize:theSize typeID:typeID numberThreads:0];
}
- (id) initWithSize:(NSSize)theSize typeID:(VideoFilterTypeID)typeID numberThreads:(NSUInteger)numThreads
{
self = [super init];
if (self == nil)
{
return self;
}
vf = new VideoFilter((size_t)theSize.width, (size_t)theSize.height, typeID, numThreads);
currentFilterType = typeID;
return self;
}
- (void)dealloc
{
delete vf;
[super dealloc];
}
- (BOOL) setSourceSize:(NSSize)theSize
{
BOOL result = NO;
bool cResult = vf->SetSourceSize((size_t)theSize.width, (size_t)theSize.height);
if (cResult)
{
result = YES;
}
return result;
}
- (BOOL) changeFilter:(VideoFilterTypeID)typeID
{
BOOL result = NO;
if (typeID == currentFilterType)
{
result = YES;
}
else
{
bool cResult = vf->ChangeFilterByID(typeID);
if (cResult)
{
result = YES;
currentFilterType = typeID;
}
}
return result;
}
- (UInt32 *) runFilter
{
return (UInt32 *)vf->RunFilter();
}
- (NSImage *) image
{
NSImage *newImage = [[NSImage alloc] initWithSize:[self destSize]];
if (newImage == nil)
{
return newImage;
}
NSBitmapImageRep *newImageRep = [self bitmapImageRep];
if (newImageRep == nil)
{
[newImage release];
newImage = nil;
return newImage;
}
[newImage addRepresentation:newImageRep];
return [newImage autorelease];
}
- (NSBitmapImageRep *) bitmapImageRep
{
NSUInteger w = (NSUInteger)vf->GetDstWidth();
NSUInteger h = (NSUInteger)vf->GetDstHeight();
NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
pixelsWide:w
pixelsHigh:h
bitsPerSample:8
samplesPerPixel:4
hasAlpha:YES
isPlanar:NO
colorSpaceName:NSCalibratedRGBColorSpace
bytesPerRow:w * 4
bitsPerPixel:32];
if(imageRep == nil)
{
return imageRep;
}
uint32_t *bitmapData = (uint32_t *)[imageRep bitmapData];
ColorspaceConvertBuffer888xTo8888Opaque<false, true>((const uint32_t *)[self runFilter], bitmapData, w * h);
#ifdef MSB_FIRST
for (size_t i = 0; i < w * h; i++)
{
bitmapData[i] = LE_TO_LOCAL_32(bitmapData[i]);
}
#endif
return [imageRep autorelease];
}
- (VideoFilterTypeID) typeID
{
return vf->GetTypeID();
}
- (NSString *) typeString
{
return [NSString stringWithCString:vf->GetTypeString() encoding:NSUTF8StringEncoding];
}
- (UInt32 *) srcBufferPtr
{
return (UInt32 *)vf->GetSrcBufferPtr();
}
- (UInt32 *) dstBufferPtr
{
return (UInt32 *)vf->GetDstBufferPtr();
}
- (NSSize) srcSize
{
return NSMakeSize((CGFloat)vf->GetSrcWidth(), (CGFloat)vf->GetSrcHeight());
}
- (NSSize) destSize
{
return NSMakeSize((CGFloat)vf->GetDstWidth(), (CGFloat)vf->GetDstHeight());
}
- (VideoFilterParamType) filterParameterType:(VideoFilterParamID)paramID
{
return vf->GetFilterParameterType(paramID);
}
- (int) filterParameteri:(VideoFilterParamID)paramID
{
return vf->GetFilterParameteri(paramID);
}
- (unsigned int) filterParameterui:(VideoFilterParamID)paramID
{
return vf->GetFilterParameterui(paramID);
}
- (float) filterParameterf:(VideoFilterParamID)paramID
{
return vf->GetFilterParameterf(paramID);
}
- (void) setFilterParameter:(VideoFilterParamID)paramID intValue:(int)value
{
vf->SetFilterParameteri(paramID, value);
}
- (void) setFilterParameter:(VideoFilterParamID)paramID uintValue:(unsigned int)value
{
vf->SetFilterParameterui(paramID, value);
}
- (void) setFilterParameter:(VideoFilterParamID)paramID floatValue:(float)value
{
vf->SetFilterParameterf(paramID, value);
}
+ (NSString *) typeStringByID:(VideoFilterTypeID)typeID
{
const char *vfTypeCString = VideoFilter::GetTypeStringByID(typeID);
NSString *vfTypeString = [NSString stringWithCString:vfTypeCString encoding:NSUTF8StringEncoding];
return vfTypeString;
}
@end

View File

@@ -1,6 +1,6 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2012-2023 DeSmuME team
Copyright (C) 2012-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -23,6 +23,8 @@
#import "cocoa_cheat.h"
#import "cocoa_util.h"
#include "ClientCheatManager.h"
@implementation CheatWindowDelegate

View File

@@ -26,7 +26,6 @@
#import "cocoa_globals.h"
#import "cocoa_input.h"
#import "cocoa_file.h"
#import "cocoa_videofilter.h"
#import "cocoa_util.h"
#ifdef MAC_OS_X_VERSION_10_7