Boot_WiiWAD: Remove a timing issue workaround

This was necessary to work around a FS timing issue which caused small
writes to take much longer than they should.

Now that we emulate timings for the FS module including its file cache,
we don't need to maintain this workaround anymore.
This commit is contained in:
Léo Lam 2018-04-08 11:23:18 +02:00
parent 9dbc760bb7
commit 8894b902df

View file

@ -2,9 +2,7 @@
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include <algorithm>
#include <memory>
#include <string>
#include "Common/CommonTypes.h"
#include "Common/MsgHandler.h"
@ -13,44 +11,10 @@
#include "Core/CommonTitles.h"
#include "Core/IOS/ES/ES.h"
#include "Core/IOS/ES/Formats.h"
#include "Core/IOS/FS/FileSystem.h"
#include "Core/IOS/IOS.h"
#include "Core/WiiUtils.h"
#include "DiscIO/WiiWad.h"
// cdb.vff is a virtual Fat filesystem created on first launch of sysmenu
// we create it here as it is faster ~3 minutes for me when sysmenu does it
// ~1 second created here
static void CreateVirtualFATFilesystem(std::shared_ptr<IOS::HLE::FS::FileSystem> fs)
{
constexpr u32 SYSMENU_UID = 0x1000;
constexpr u16 SYSMENU_GID = 0x1;
const std::string cdb_path = "/title/00000001/00000002/data/cdb.vff";
fs->CreateFile(SYSMENU_UID, SYSMENU_GID, cdb_path, 0, IOS::HLE::FS::Mode::ReadWrite,
IOS::HLE::FS::Mode::ReadWrite, IOS::HLE::FS::Mode::ReadWrite);
constexpr size_t CDB_SIZE = 0x01400000;
const auto metadata = fs->GetMetadata(SYSMENU_UID, SYSMENU_GID, cdb_path);
if (!metadata || metadata->size >= CDB_SIZE)
return;
const auto fd = fs->OpenFile(SYSMENU_UID, SYSMENU_GID, cdb_path, IOS::HLE::FS::Mode::Write);
if (!fd)
return;
constexpr u8 CDB_HEADER[0x20] = {'V', 'F', 'F', 0x20, 0xfe, 0xff, 1, 0, 1, 0x40, 0, 0, 0, 0x20};
constexpr u8 CDB_FAT[4] = {0xf0, 0xff, 0xff, 0xff};
std::vector<u8> data(CDB_SIZE);
std::copy_n(CDB_HEADER, sizeof(CDB_HEADER), data.begin());
std::copy_n(CDB_FAT, sizeof(CDB_FAT), data.begin() + sizeof(CDB_HEADER));
std::copy_n(CDB_FAT, sizeof(CDB_FAT), data.begin() + 0x14020);
// write the final 0 to 0 file from the second FAT to 20 MiB
data[CDB_SIZE - 1] = 0;
fs->WriteFile(*fd, data.data(), static_cast<u32>(data.size()));
}
bool CBoot::BootNANDTitle(const u64 title_id)
{
UpdateStateFlags([](StateFlags* state) {
@ -58,10 +22,6 @@ bool CBoot::BootNANDTitle(const u64 title_id)
});
auto* ios = IOS::HLE::GetIOS();
if (title_id == Titles::SYSTEM_MENU)
CreateVirtualFATFilesystem(ios->GetFS());
SetupWiiMemory();
return ios->GetES()->LaunchTitle(title_id);
}