mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2026-08-03 20:24:14 +02:00
Core: Add Volume::GetSimulatedMemorySize().
The data structure of the `bi2.bin` file in which the simulated memory size is set: > **13.2 Disk header Information** > > this is loaded to the Address in `0x800000f4` when a disc is initialized by the IPL > > | offset | end | size | Description | > | :------: | --- | :--: | --------------------- | > | `0x0000` | | 4 | Debug-monitor Size | > | `0x0004` | | 4 | Simulated Memory Size | > | `0x0008` | | 4 | Argument offset | > | `0x000c` | | 4 | Debug flag | > | `0x0010` | | 4 | Track Location | > | `0x0014` | | 4 | Track size | > | `0x0018` | | 4 | Countrycode | > | `0x001c` | | 4 | ? | See https://hitmen.c02.at/files/yagcd/yagcd/chap13.html#sec13.2. Most GameCube games set the value to `24 MiB`, which matches the physical memory size. Most Wii games set the value to `0 MiB` (unset). The debug build of _Mario Kart: Double Dash!!_ is one game that sets the value to `48 MiB`.
This commit is contained in:
@@ -126,6 +126,7 @@ public:
|
||||
}
|
||||
virtual Region GetRegion() const = 0;
|
||||
virtual Country GetCountry(const Partition& partition = PARTITION_NONE) const = 0;
|
||||
virtual u32 GetSimulatedMemorySize() const = 0;
|
||||
virtual BlobType GetBlobType() const = 0;
|
||||
// Size of virtual disc (may be inaccurate depending on the blob type)
|
||||
virtual u64 GetDataSize() const = 0;
|
||||
|
||||
@@ -179,6 +179,14 @@ std::optional<u8> VolumeDisc::GetDiscNumber(const Partition& partition) const
|
||||
return ReadSwapped<u8>(6, partition);
|
||||
}
|
||||
|
||||
u32 VolumeDisc::GetSimulatedMemorySize() const
|
||||
{
|
||||
// Simulated memory size is a 32-bit unsigned integer in the `bi2.bin` file at offset `0x04`.
|
||||
// Apploader reads this and "simulates" a smaller memory size. Originally useful for simulating
|
||||
// 24 MiB of memory on devkits with 48 MiB.
|
||||
return ReadSwapped<u32>(BI2_ADDRESS + 0x04, GetGamePartition()).value_or(0);
|
||||
}
|
||||
|
||||
bool VolumeDisc::IsNKit() const
|
||||
{
|
||||
constexpr u32 NKIT_MAGIC = 0x4E4B4954; // "NKIT"
|
||||
|
||||
@@ -47,6 +47,7 @@ public:
|
||||
std::string GetInternalName(const Partition& partition = PARTITION_NONE) const override;
|
||||
std::string GetApploaderDate(const Partition& partition) const override;
|
||||
std::optional<u8> GetDiscNumber(const Partition& partition = PARTITION_NONE) const override;
|
||||
u32 GetSimulatedMemorySize() const override;
|
||||
bool IsNKit() const override;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -61,6 +61,7 @@ public:
|
||||
bool IsNKit() const override;
|
||||
Region GetRegion() const override;
|
||||
Country GetCountry(const Partition& partition = PARTITION_NONE) const override;
|
||||
u32 GetSimulatedMemorySize() const override { return 0; }
|
||||
|
||||
BlobType GetBlobType() const override;
|
||||
u64 GetDataSize() const override;
|
||||
|
||||
Reference in New Issue
Block a user