early-access version 2490
This commit is contained in:
parent
e9ed276fbf
commit
26825ca414
@ -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
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
@ -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");
|
||||||
|
|
||||||
|
@ -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)};
|
||||||
|
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user