mirror of
https://github.com/PabloMK7/citra.git
synced 2025-10-11 20:10:03 +00:00
Merge pull request #4908 from hamish-milne/feature/savestates-2
Save states
This commit is contained in:
commit
c605bb42db
354 changed files with 6100 additions and 604 deletions
|
@ -1053,7 +1053,7 @@ void Module::Interface::BeginImportProgram(Kernel::HLERequestContext& ctx) {
|
|||
// Citra will store contents out to sdmc/nand
|
||||
const FileSys::Path cia_path = {};
|
||||
auto file = std::make_shared<Service::FS::File>(
|
||||
am->system, std::make_unique<CIAFile>(media_type), cia_path);
|
||||
am->kernel, std::make_unique<CIAFile>(media_type), cia_path);
|
||||
|
||||
am->cia_installing = true;
|
||||
|
||||
|
@ -1080,7 +1080,7 @@ void Module::Interface::BeginImportProgramTemporarily(Kernel::HLERequestContext&
|
|||
// contents out to sdmc/nand
|
||||
const FileSys::Path cia_path = {};
|
||||
auto file = std::make_shared<Service::FS::File>(
|
||||
am->system, std::make_unique<CIAFile>(FS::MediaType::NAND), cia_path);
|
||||
am->kernel, std::make_unique<CIAFile>(FS::MediaType::NAND), cia_path);
|
||||
|
||||
am->cia_installing = true;
|
||||
|
||||
|
@ -1482,11 +1482,13 @@ void Module::Interface::GetMetaDataFromCia(Kernel::HLERequestContext& ctx) {
|
|||
rb.PushMappedBuffer(output_buffer);
|
||||
}
|
||||
|
||||
Module::Module(Core::System& system) : system(system) {
|
||||
Module::Module(Core::System& system) : kernel(system.Kernel()) {
|
||||
ScanForAllTitles();
|
||||
system_updater_mutex = system.Kernel().CreateMutex(false, "AM::SystemUpdaterMutex");
|
||||
}
|
||||
|
||||
Module::Module(Kernel::KernelSystem& kernel) : kernel(kernel) {}
|
||||
|
||||
Module::~Module() = default;
|
||||
|
||||
void InstallInterfaces(Core::System& system) {
|
||||
|
|
|
@ -9,9 +9,14 @@
|
|||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <boost/serialization/array.hpp>
|
||||
#include <boost/serialization/shared_ptr.hpp>
|
||||
#include <boost/serialization/vector.hpp>
|
||||
#include "common/common_types.h"
|
||||
#include "common/construct.h"
|
||||
#include "core/file_sys/cia_container.h"
|
||||
#include "core/file_sys/file_backend.h"
|
||||
#include "core/global.h"
|
||||
#include "core/hle/kernel/mutex.h"
|
||||
#include "core/hle/result.h"
|
||||
#include "core/hle/service/service.h"
|
||||
|
@ -557,11 +562,13 @@ public:
|
|||
*/
|
||||
void GetMetaDataFromCia(Kernel::HLERequestContext& ctx);
|
||||
|
||||
private:
|
||||
protected:
|
||||
std::shared_ptr<Module> am;
|
||||
};
|
||||
|
||||
private:
|
||||
explicit Module(Kernel::KernelSystem& kernel);
|
||||
|
||||
/**
|
||||
* Scans the for titles in a storage medium for listing.
|
||||
* @param media_type the storage medium to scan
|
||||
|
@ -573,12 +580,32 @@ private:
|
|||
*/
|
||||
void ScanForAllTitles();
|
||||
|
||||
Core::System& system;
|
||||
Kernel::KernelSystem& kernel;
|
||||
bool cia_installing = false;
|
||||
std::array<std::vector<u64_le>, 3> am_title_list;
|
||||
std::shared_ptr<Kernel::Mutex> system_updater_mutex;
|
||||
|
||||
template <class Archive>
|
||||
void serialize(Archive& ar, const unsigned int) {
|
||||
ar& cia_installing;
|
||||
ar& am_title_list;
|
||||
ar& system_updater_mutex;
|
||||
}
|
||||
|
||||
template <class Archive>
|
||||
static void load_construct(Archive& ar, Module* t, const unsigned int file_version) {
|
||||
::new (t) Module(Core::Global<Kernel::KernelSystem>());
|
||||
}
|
||||
|
||||
template <class Archive>
|
||||
void save_construct(Archive& ar, const unsigned int file_version) const {}
|
||||
|
||||
friend class ::construct_access;
|
||||
friend class boost::serialization::access;
|
||||
};
|
||||
|
||||
void InstallInterfaces(Core::System& system);
|
||||
|
||||
} // namespace Service::AM
|
||||
|
||||
BOOST_SERIALIZATION_CONSTRUCT(Service::AM::Module);
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include "common/archives.h"
|
||||
#include "core/hle/service/am/am_app.h"
|
||||
|
||||
namespace Service::AM {
|
||||
|
@ -26,3 +27,5 @@ AM_APP::AM_APP(std::shared_ptr<Module> am) : Module::Interface(std::move(am), "a
|
|||
}
|
||||
|
||||
} // namespace Service::AM
|
||||
|
||||
SERIALIZE_EXPORT_IMPL(Service::AM::AM_APP)
|
||||
|
|
|
@ -11,6 +11,12 @@ namespace Service::AM {
|
|||
class AM_APP final : public Module::Interface {
|
||||
public:
|
||||
explicit AM_APP(std::shared_ptr<Module> am);
|
||||
|
||||
private:
|
||||
SERVICE_SERIALIZATION(AM_APP, am, Module)
|
||||
};
|
||||
|
||||
} // namespace Service::AM
|
||||
|
||||
BOOST_CLASS_EXPORT_KEY(Service::AM::AM_APP)
|
||||
BOOST_SERIALIZATION_CONSTRUCT(Service::AM::AM_APP)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include "common/archives.h"
|
||||
#include "core/hle/service/am/am_net.h"
|
||||
|
||||
namespace Service::AM {
|
||||
|
@ -123,3 +124,5 @@ AM_NET::AM_NET(std::shared_ptr<Module> am) : Module::Interface(std::move(am), "a
|
|||
}
|
||||
|
||||
} // namespace Service::AM
|
||||
|
||||
SERIALIZE_EXPORT_IMPL(Service::AM::AM_NET)
|
||||
|
|
|
@ -11,6 +11,12 @@ namespace Service::AM {
|
|||
class AM_NET final : public Module::Interface {
|
||||
public:
|
||||
explicit AM_NET(std::shared_ptr<Module> am);
|
||||
|
||||
private:
|
||||
SERVICE_SERIALIZATION(AM_NET, am, Module)
|
||||
};
|
||||
|
||||
} // namespace Service::AM
|
||||
|
||||
BOOST_CLASS_EXPORT_KEY(Service::AM::AM_NET)
|
||||
BOOST_SERIALIZATION_CONSTRUCT(Service::AM::AM_NET)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include "common/archives.h"
|
||||
#include "core/hle/service/am/am_sys.h"
|
||||
|
||||
namespace Service::AM {
|
||||
|
@ -71,3 +72,5 @@ AM_SYS::AM_SYS(std::shared_ptr<Module> am) : Module::Interface(std::move(am), "a
|
|||
}
|
||||
|
||||
} // namespace Service::AM
|
||||
|
||||
SERIALIZE_EXPORT_IMPL(Service::AM::AM_SYS)
|
||||
|
|
|
@ -11,6 +11,12 @@ namespace Service::AM {
|
|||
class AM_SYS final : public Module::Interface {
|
||||
public:
|
||||
explicit AM_SYS(std::shared_ptr<Module> am);
|
||||
|
||||
private:
|
||||
SERVICE_SERIALIZATION(AM_SYS, am, Module)
|
||||
};
|
||||
|
||||
} // namespace Service::AM
|
||||
|
||||
BOOST_CLASS_EXPORT_KEY(Service::AM::AM_SYS)
|
||||
BOOST_SERIALIZATION_CONSTRUCT(Service::AM::AM_SYS)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include "common/archives.h"
|
||||
#include "core/hle/service/am/am_u.h"
|
||||
|
||||
namespace Service::AM {
|
||||
|
@ -83,3 +84,5 @@ AM_U::AM_U(std::shared_ptr<Module> am) : Module::Interface(std::move(am), "am:u"
|
|||
}
|
||||
|
||||
} // namespace Service::AM
|
||||
|
||||
SERIALIZE_EXPORT_IMPL(Service::AM::AM_U)
|
||||
|
|
|
@ -11,6 +11,12 @@ namespace Service::AM {
|
|||
class AM_U final : public Module::Interface {
|
||||
public:
|
||||
explicit AM_U(std::shared_ptr<Module> am);
|
||||
|
||||
private:
|
||||
SERVICE_SERIALIZATION(AM_U, am, Module)
|
||||
};
|
||||
|
||||
} // namespace Service::AM
|
||||
|
||||
BOOST_CLASS_EXPORT_KEY(Service::AM::AM_U)
|
||||
BOOST_SERIALIZATION_CONSTRUCT(Service::AM::AM_U)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue