mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-01-07 15:48:15 +01:00
Merge branch 'main' into metal
This commit is contained in:
commit
798da38c26
@ -101,12 +101,18 @@ if (MACOS_BUNDLE)
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory "${CMAKE_SOURCE_DIR}/bin/${folder}" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/SharedSupport/${folder}")
|
||||
endforeach(folder)
|
||||
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(LIBUSB_PATH "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-osx/debug/lib/libusb-1.0.0.dylib")
|
||||
else()
|
||||
set(LIBUSB_PATH "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-osx/lib/libusb-1.0.0.dylib")
|
||||
endif()
|
||||
|
||||
add_custom_command (TARGET CemuBin POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy "/usr/local/lib/libMoltenVK.dylib" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libMoltenVK.dylib"
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-osx/lib/libusb-1.0.0.dylib" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libusb-1.0.0.dylib"
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${LIBUSB_PATH}" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libusb-1.0.0.dylib"
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${CMAKE_SOURCE_DIR}/src/resource/update.sh" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/update.sh"
|
||||
COMMAND bash -c "install_name_tool -add_rpath @executable_path/../Frameworks ${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/${OUTPUT_NAME}"
|
||||
COMMAND bash -c "install_name_tool -change /Users/runner/work/Cemu/Cemu/build/vcpkg_installed/x64-osx/lib/libusb-1.0.0.dylib @executable_path/../Frameworks/libusb-1.0.0.dylib ${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/${OUTPUT_NAME}")
|
||||
COMMAND bash -c "install_name_tool -change ${LIBUSB_PATH} ${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libusb-1.0.0.dylib ${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/${OUTPUT_NAME}")
|
||||
endif()
|
||||
|
||||
set_target_properties(CemuBin PROPERTIES
|
||||
|
@ -334,45 +334,63 @@ void nnNfpExport_MountRom(PPCInterpreter_t* hCPU)
|
||||
osLib_returnFromFunction(hCPU, BUILD_NN_RESULT(NN_RESULT_LEVEL_SUCCESS, NN_RESULT_MODULE_NN_NFP, 0));
|
||||
}
|
||||
|
||||
typedef struct
|
||||
namespace nn::nfp
|
||||
{
|
||||
/* +0x00 */ uint8 characterId[3];
|
||||
/* +0x03 */ uint8 amiiboSeries;
|
||||
/* +0x04 */ uint16be number;
|
||||
/* +0x06 */ uint8 nfpType;
|
||||
/* +0x07 */ uint8 unused[0x2F];
|
||||
}nfpRomInfo_t;
|
||||
|
||||
static_assert(offsetof(nfpRomInfo_t, amiiboSeries) == 0x3, "nfpRomInfo.seriesId has invalid offset");
|
||||
static_assert(offsetof(nfpRomInfo_t, number) == 0x4, "nfpRomInfo.number has invalid offset");
|
||||
static_assert(offsetof(nfpRomInfo_t, nfpType) == 0x6, "nfpRomInfo.nfpType has invalid offset");
|
||||
static_assert(sizeof(nfpRomInfo_t) == 0x36, "nfpRomInfo_t has invalid size");
|
||||
|
||||
void nnNfpExport_GetNfpRomInfo(PPCInterpreter_t* hCPU)
|
||||
{
|
||||
cemuLog_log(LogType::NN_NFP, "GetNfpRomInfo(0x{:08x})", hCPU->gpr[3]);
|
||||
ppcDefineParamStructPtr(romInfo, nfpRomInfo_t, 0);
|
||||
|
||||
nnNfpLock();
|
||||
if (nfp_data.hasActiveAmiibo == false)
|
||||
struct RomInfo
|
||||
{
|
||||
nnNfpUnlock();
|
||||
osLib_returnFromFunction(hCPU, BUILD_NN_RESULT(NN_RESULT_LEVEL_STATUS, NN_RESULT_MODULE_NN_NFP, 0)); // todo: Return correct error code
|
||||
return;
|
||||
/* +0x00 */ uint8 characterId[3];
|
||||
/* +0x03 */ uint8 amiiboSeries;
|
||||
/* +0x04 */ uint16be number;
|
||||
/* +0x06 */ uint8 nfpType;
|
||||
/* +0x07 */ uint8 unused[0x2F];
|
||||
};
|
||||
|
||||
static_assert(offsetof(RomInfo, amiiboSeries) == 0x3);
|
||||
static_assert(offsetof(RomInfo, number) == 0x4);
|
||||
static_assert(offsetof(RomInfo, nfpType) == 0x6);
|
||||
static_assert(sizeof(RomInfo) == 0x36);
|
||||
|
||||
using ReadOnlyInfo = RomInfo; // same layout
|
||||
|
||||
void GetRomInfo(RomInfo* romInfo)
|
||||
{
|
||||
cemu_assert_debug(nfp_data.hasActiveAmiibo);
|
||||
memset(romInfo, 0x00, sizeof(RomInfo));
|
||||
romInfo->characterId[0] = nfp_data.amiiboNFCData.amiiboIdentificationBlock.gameAndCharacterId[0];
|
||||
romInfo->characterId[1] = nfp_data.amiiboNFCData.amiiboIdentificationBlock.gameAndCharacterId[1];
|
||||
romInfo->characterId[2] = nfp_data.amiiboNFCData.amiiboIdentificationBlock.characterVariation; // guessed
|
||||
romInfo->amiiboSeries = nfp_data.amiiboNFCData.amiiboIdentificationBlock.amiiboSeries; // guessed
|
||||
romInfo->number = *(uint16be*)nfp_data.amiiboNFCData.amiiboIdentificationBlock.amiiboModelNumber; // guessed
|
||||
romInfo->nfpType = nfp_data.amiiboNFCData.amiiboIdentificationBlock.amiiboFigureType; // guessed
|
||||
memset(romInfo->unused, 0x00, sizeof(romInfo->unused));
|
||||
}
|
||||
memset(romInfo, 0x00, sizeof(nfpRomInfo_t));
|
||||
|
||||
romInfo->characterId[0] = nfp_data.amiiboNFCData.amiiboIdentificationBlock.gameAndCharacterId[0];
|
||||
romInfo->characterId[1] = nfp_data.amiiboNFCData.amiiboIdentificationBlock.gameAndCharacterId[1];
|
||||
romInfo->characterId[2] = nfp_data.amiiboNFCData.amiiboIdentificationBlock.characterVariation; // guessed
|
||||
nnResult GetNfpRomInfo(RomInfo* romInfo)
|
||||
{
|
||||
nnNfpLock();
|
||||
if (nfp_data.hasActiveAmiibo == false)
|
||||
{
|
||||
nnNfpUnlock();
|
||||
return BUILD_NN_RESULT(NN_RESULT_LEVEL_STATUS, NN_RESULT_MODULE_NN_NFP, 0); // todo: Return correct error code
|
||||
}
|
||||
GetRomInfo(romInfo);
|
||||
nnNfpUnlock();
|
||||
return BUILD_NN_RESULT(NN_RESULT_LEVEL_SUCCESS, NN_RESULT_MODULE_NN_NFP, 0);
|
||||
}
|
||||
|
||||
romInfo->amiiboSeries = nfp_data.amiiboNFCData.amiiboIdentificationBlock.amiiboSeries; // guessed
|
||||
romInfo->number = *(uint16be*)nfp_data.amiiboNFCData.amiiboIdentificationBlock.amiiboModelNumber; // guessed
|
||||
romInfo->nfpType = nfp_data.amiiboNFCData.amiiboIdentificationBlock.amiiboFigureType; // guessed
|
||||
|
||||
nnNfpUnlock();
|
||||
osLib_returnFromFunction(hCPU, BUILD_NN_RESULT(NN_RESULT_LEVEL_SUCCESS, NN_RESULT_MODULE_NN_NFP, 0));
|
||||
}
|
||||
nnResult GetNfpReadOnlyInfo(ReadOnlyInfo* readOnlyInfo)
|
||||
{
|
||||
nnNfpLock();
|
||||
if (nfp_data.hasActiveAmiibo == false)
|
||||
{
|
||||
nnNfpUnlock();
|
||||
return BUILD_NN_RESULT(NN_RESULT_LEVEL_STATUS, NN_RESULT_MODULE_NN_NFP, 0); // todo: Return correct error code
|
||||
}
|
||||
GetRomInfo(readOnlyInfo);
|
||||
nnNfpUnlock();
|
||||
return BUILD_NN_RESULT(NN_RESULT_LEVEL_SUCCESS, NN_RESULT_MODULE_NN_NFP, 0);
|
||||
}
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@ -880,13 +898,13 @@ void nnNfp_update()
|
||||
if (amiiboElapsedTouchTime >= 1500)
|
||||
{
|
||||
nnNfp_unloadAmiibo();
|
||||
if (nfp_data.deactivateEvent)
|
||||
{
|
||||
coreinit::OSEvent* osEvent = (coreinit::OSEvent*)memory_getPointerFromVirtualOffset(nfp_data.deactivateEvent);
|
||||
coreinit::OSSignalEvent(osEvent);
|
||||
}
|
||||
}
|
||||
nnNfpUnlock();
|
||||
if (nfp_data.deactivateEvent)
|
||||
{
|
||||
coreinit::OSEvent* osEvent = (coreinit::OSEvent*)memory_getPointerFromVirtualOffset(nfp_data.deactivateEvent);
|
||||
coreinit::OSSignalEvent(osEvent);
|
||||
}
|
||||
}
|
||||
|
||||
void nnNfpExport_GetNfpState(PPCInterpreter_t* hCPU)
|
||||
@ -1001,8 +1019,6 @@ namespace nn::nfp
|
||||
osLib_addFunction("nn_nfp", "Mount__Q2_2nn3nfpFv", nnNfpExport_Mount);
|
||||
osLib_addFunction("nn_nfp", "MountRom__Q2_2nn3nfpFv", nnNfpExport_MountRom);
|
||||
osLib_addFunction("nn_nfp", "Unmount__Q2_2nn3nfpFv", nnNfpExport_Unmount);
|
||||
|
||||
osLib_addFunction("nn_nfp", "GetNfpRomInfo__Q2_2nn3nfpFPQ3_2nn3nfp7RomInfo", nnNfpExport_GetNfpRomInfo);
|
||||
osLib_addFunction("nn_nfp", "GetNfpCommonInfo__Q2_2nn3nfpFPQ3_2nn3nfp10CommonInfo", nnNfpExport_GetNfpCommonInfo);
|
||||
osLib_addFunction("nn_nfp", "GetNfpRegisterInfo__Q2_2nn3nfpFPQ3_2nn3nfp12RegisterInfo", nnNfpExport_GetNfpRegisterInfo);
|
||||
|
||||
@ -1028,7 +1044,9 @@ namespace nn::nfp
|
||||
{
|
||||
nnNfp_load(); // legacy interface, update these to use cafeExportRegister / cafeExportRegisterFunc
|
||||
|
||||
cafeExportRegisterFunc(nn::nfp::GetErrorCode, "nn_nfp", "GetErrorCode__Q2_2nn3nfpFRCQ2_2nn6Result", LogType::Placeholder);
|
||||
cafeExportRegisterFunc(nn::nfp::GetErrorCode, "nn_nfp", "GetErrorCode__Q2_2nn3nfpFRCQ2_2nn6Result", LogType::NN_NFP);
|
||||
cafeExportRegisterFunc(nn::nfp::GetNfpRomInfo, "nn_nfp", "GetNfpRomInfo__Q2_2nn3nfpFPQ3_2nn3nfp7RomInfo", LogType::NN_NFP);
|
||||
cafeExportRegisterFunc(nn::nfp::GetNfpReadOnlyInfo, "nn_nfp", "GetNfpReadOnlyInfo__Q2_2nn3nfpFPQ3_2nn3nfp12ReadOnlyInfo", LogType::NN_NFP);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user