early-access version 2490

This commit is contained in:
pineappleEA 2022-02-14 02:49:37 +01:00
parent e9ed276fbf
commit 26825ca414
5 changed files with 29 additions and 13 deletions

View File

@ -1,7 +1,7 @@
yuzu emulator early access yuzu emulator early access
============= =============
This is the source code for early-access 2489. This is the source code for early-access 2490.
## Legal Notice ## Legal Notice

View File

@ -479,25 +479,35 @@ void Module::Interface::CreateUserInterface(Kernel::HLERequestContext& ctx) {
} }
bool Module::Interface::LoadAmiibo(const std::vector<u8>& buffer) { bool Module::Interface::LoadAmiibo(const std::vector<u8>& buffer) {
if (buffer.size() < sizeof(NTAG215File)) {
LOG_ERROR(Service_NFP, "Wrong file size");
return false;
}
if (device_state != DeviceState::SearchingForTag) { if (device_state != DeviceState::SearchingForTag) {
LOG_ERROR(Service_NFP, "Game is not looking for amiibos, current state {}", device_state); LOG_ERROR(Service_NFP, "Game is not looking for amiibos, current state {}", device_state);
return false; return false;
} }
constexpr auto tag_size = sizeof(NTAG215File);
constexpr auto tag_size_without_password = sizeof(NTAG215File) - sizeof(NTAG215Password);
std::vector<u8> amiibo_buffer = buffer;
if (amiibo_buffer.size() < tag_size_without_password) {
LOG_ERROR(Service_NFP, "Wrong file size {}", buffer.size());
return false;
}
// Ensure it has the correct size
if (amiibo_buffer.size() != tag_size) {
amiibo_buffer.resize(tag_size, 0);
}
LOG_INFO(Service_NFP, "Amiibo detected"); LOG_INFO(Service_NFP, "Amiibo detected");
std::memcpy(&tag_data, buffer.data(), sizeof(tag_data)); std::memcpy(&tag_data, buffer.data(), tag_size);
if (!IsAmiiboValid()) { if (!IsAmiiboValid()) {
return false; return false;
} }
// This value can't be dumped from a tag. Generate it // This value can't be dumped from a tag. Generate it
tag_data.PWD = GetTagPassword(tag_data.uuid); tag_data.password.PWD = GetTagPassword(tag_data.uuid);
device_state = DeviceState::TagFound; device_state = DeviceState::TagFound;
activate_event->GetWritableEvent().Signal(); activate_event->GetWritableEvent().Signal();

View File

@ -153,6 +153,13 @@ public:
}; };
static_assert(sizeof(EncryptedAmiiboFile) == 0x1F8, "AmiiboFile is an invalid size"); static_assert(sizeof(EncryptedAmiiboFile) == 0x1F8, "AmiiboFile is an invalid size");
struct NTAG215Password {
u32 PWD; // Password to allow write access
u16 PACK; // Password acknowledge reply
u16 RFUI; // Reserved for future use
};
static_assert(sizeof(NTAG215Password) == 0x8, "NTAG215Password is an invalid size");
struct NTAG215File { struct NTAG215File {
TagUuid uuid; // Unique serial number TagUuid uuid; // Unique serial number
u16 lock_bytes; // Set defined pages as read only u16 lock_bytes; // Set defined pages as read only
@ -161,9 +168,7 @@ public:
u32 dynamic_lock; // Dynamic lock u32 dynamic_lock; // Dynamic lock
u32 CFG0; // Defines memory protected by password u32 CFG0; // Defines memory protected by password
u32 CFG1; // Defines number of verification attempts u32 CFG1; // Defines number of verification attempts
u32 PWD; // Password to allow write access NTAG215Password password; // Password data
u16 PACK; // Password acknowledge reply
u16 RFUI; // Reserved for future use
}; };
static_assert(sizeof(NTAG215File) == 0x21C, "NTAG215File is an invalid size"); static_assert(sizeof(NTAG215File) == 0x21C, "NTAG215File is an invalid size");

View File

@ -183,6 +183,8 @@ void RasterizerVulkan::Draw(bool is_indexed, bool is_instanced) {
SCOPE_EXIT({ gpu.TickWork(); }); SCOPE_EXIT({ gpu.TickWork(); });
FlushWork(); FlushWork();
query_cache.UpdateCounters();
GraphicsPipeline* const pipeline{pipeline_cache.CurrentGraphicsPipeline()}; GraphicsPipeline* const pipeline{pipeline_cache.CurrentGraphicsPipeline()};
if (!pipeline) { if (!pipeline) {
return; return;
@ -194,8 +196,6 @@ void RasterizerVulkan::Draw(bool is_indexed, bool is_instanced) {
UpdateDynamicStates(); UpdateDynamicStates();
query_cache.UpdateCounters();
const auto& regs{maxwell3d.regs}; const auto& regs{maxwell3d.regs};
const u32 num_instances{maxwell3d.mme_draw.instance_count}; const u32 num_instances{maxwell3d.mme_draw.instance_count};
const DrawParams draw_params{MakeDrawParams(regs, num_instances, is_instanced, is_indexed)}; const DrawParams draw_params{MakeDrawParams(regs, num_instances, is_instanced, is_indexed)};

View File

@ -30,6 +30,7 @@ void ToggleConsole() {
freopen_s(&temp, "CONIN$", "r", stdin); freopen_s(&temp, "CONIN$", "r", stdin);
freopen_s(&temp, "CONOUT$", "w", stdout); freopen_s(&temp, "CONOUT$", "w", stdout);
freopen_s(&temp, "CONOUT$", "w", stderr); freopen_s(&temp, "CONOUT$", "w", stderr);
SetConsoleOutputCP(65001);
SetColorConsoleBackendEnabled(true); SetColorConsoleBackendEnabled(true);
} }
} else { } else {