mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-12 23:48:58 +01:00
![Minty-Meeo](/assets/img/avatar_default.png)
Changed several enums from Memmap.h to be static vars and implemented Get functions to query them. This seems to have boosted speed a bit in some titles? The new variables and some previously statically initialized items are now initialized via Memory::Init() and the new AddressSpace::Init(). s_ram_size_real and the new s_exram_size_real in particular are initialized from new OnionConfig values "MAIN_MEM1_SIZE" and "MAIN_MEM2_SIZE", only if "MAIN_RAM_OVERRIDE_ENABLE" is true. GUI features have been added to Config > Advanced to adjust the new OnionConfig values. A check has been added to State::doState to ensure savestates with memory configurations different from the current settings aren't loaded. The STATE_VERSION is now 115. FIFO Files have been updated from version 4 to version 5, now including the MEM1 and MEM2 sizes from the time of DFF creation. FIFO Logs not using the new features (OnionConfig MAIN_RAM_OVERRIDE_ENABLE is false) are still backwards compatible. FIFO Logs that do use the new features have a MIN_LOADER_VERSION of 5. Thanks to the order of function calls, FIFO logs are able to automatically configure the new OnionConfig settings to match what is needed. This is a bit hacky, though, so I also threw in a failsafe for if the conditions that allow this to work ever go away. I took the liberty of adding a log message to explain why the core fails to initialize if the MIN_LOADER_VERSION is too great. Some IOS code has had the function "RAMOverrideForIOSMemoryValues" appended to it to recalculate IOS Memory Values from retail IOSes/apploaders to fit the extended memory sizes. Worry not, if MAIN_RAM_OVERRIDE_ENABLE is false, this function does absolutely nothing. A hotfix in DolphinQt/MenuBar.cpp has been implemented for RAM Override.
87 lines
1.8 KiB
C++
87 lines
1.8 KiB
C++
// Copyright 2017 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <array>
|
|
|
|
#include "Common/CommonTypes.h"
|
|
|
|
namespace IOS::HLE
|
|
{
|
|
struct MemoryValues
|
|
{
|
|
u16 ios_number;
|
|
u32 ios_version;
|
|
u32 ios_date;
|
|
u32 mem1_physical_size;
|
|
u32 mem1_simulated_size;
|
|
u32 mem1_end;
|
|
u32 mem1_arena_begin;
|
|
u32 mem1_arena_end;
|
|
u32 mem2_physical_size;
|
|
u32 mem2_simulated_size;
|
|
u32 mem2_end;
|
|
u32 mem2_arena_begin;
|
|
u32 mem2_arena_end;
|
|
u32 ipc_buffer_begin;
|
|
u32 ipc_buffer_end;
|
|
u32 hollywood_revision;
|
|
u32 ram_vendor;
|
|
u32 ios_reserved_begin;
|
|
u32 ios_reserved_end;
|
|
u32 sysmenu_sync;
|
|
};
|
|
|
|
const std::array<MemoryValues, 41>& GetMemoryValues();
|
|
|
|
enum class Feature
|
|
{
|
|
// Kernel, ES, FS, STM, DI, OH0, OH1
|
|
Core = 1 << 0,
|
|
// SDIO
|
|
SDIO = 1 << 1,
|
|
// Network (base support: SO, Ethernet; KD, SSL, NCD, Wi-Fi)
|
|
SO = 1 << 2,
|
|
Ethernet = 1 << 3,
|
|
KD = 1 << 4,
|
|
SSL = 1 << 5,
|
|
NCD = 1 << 6,
|
|
WiFi = 1 << 7,
|
|
// KBD
|
|
USB_KBD = 1 << 8,
|
|
// USB_HID v4
|
|
USB_HIDv4 = 1 << 9,
|
|
// SDv2 support
|
|
SDv2 = 1 << 10,
|
|
// New USB modules (USB, USB_VEN, USB_HUB, USB_MSC, OHCI0, USB_HIDv5)
|
|
NewUSB = 1 << 11,
|
|
// EHCI
|
|
EHCI = 1 << 12,
|
|
// WFS (WFSSRV, WFSI, USB_SHARED)
|
|
WFS = 1 << 13,
|
|
};
|
|
|
|
constexpr Feature operator|(Feature lhs, Feature rhs)
|
|
{
|
|
return static_cast<Feature>(static_cast<int>(lhs) | static_cast<int>(rhs));
|
|
}
|
|
|
|
constexpr Feature& operator|=(Feature& lhs, Feature rhs)
|
|
{
|
|
lhs = lhs | rhs;
|
|
return lhs;
|
|
}
|
|
|
|
constexpr bool HasFeature(Feature features, Feature feature)
|
|
{
|
|
return (static_cast<int>(features) & static_cast<int>(feature)) != 0;
|
|
}
|
|
|
|
bool HasFeature(u32 major_version, Feature feature);
|
|
Feature GetFeatures(u32 major_version);
|
|
bool IsEmulated(u32 major_version);
|
|
bool IsEmulated(u64 title_id);
|
|
} // namespace IOS::HLE
|