Add setting for toggling fastmem

This commit is contained in:
wheremyfoodat 2025-08-03 18:37:06 +03:00
commit 8d67685b93
5 changed files with 13 additions and 3 deletions

View file

@ -2,10 +2,10 @@
#include <filesystem>
#include <string>
#include "screen_layout.hpp"
#include "audio/dsp_core.hpp"
#include "frontend_settings.hpp"
#include "renderer.hpp"
#include "screen_layout.hpp"
#include "services/region_codes.hpp"
struct AudioDeviceConfig {
@ -58,11 +58,13 @@ struct EmulatorConfig {
static constexpr RendererType rendererDefault = RendererType::OpenGL;
#endif
static constexpr bool enableFastmemDefault = true;
static constexpr bool hashTexturesDefault = false;
bool shaderJitEnabled = shaderJitDefault;
bool useUbershaders = ubershaderDefault;
bool accelerateShaders = accelerateShadersDefault;
bool fastmemEnabled = enableFastmemDefault;
bool hashTextures = hashTexturesDefault;
ScreenLayout::Layout screenLayout = ScreenLayout::Layout::Default;

View file

@ -39,6 +39,7 @@ enum class ROMType {
};
class Emulator {
// Config should be initialized before anything else
EmulatorConfig config;
Memory memory;

View file

@ -48,6 +48,7 @@ void EmulatorConfig::load() {
printAppVersion = toml::find_or<toml::boolean>(general, "PrintAppVersion", true);
circlePadProEnabled = toml::find_or<toml::boolean>(general, "EnableCirclePadPro", true);
fastmemEnabled = toml::find_or<toml::boolean>(general, "EnableFastmem", enableFastmemDefault);
systemLanguage = languageCodeFromString(toml::find_or<std::string>(general, "SystemLanguage", "en"));
}
}
@ -180,6 +181,7 @@ void EmulatorConfig::save() {
data["General"]["PrintAppVersion"] = printAppVersion;
data["General"]["SystemLanguage"] = languageCodeToString(systemLanguage);
data["General"]["EnableCirclePadPro"] = circlePadProEnabled;
data["General"]["EnableFastmem"] = fastmemEnabled;
data["Window"]["AppVersionOnWindow"] = windowSettings.showAppVersion;
data["Window"]["RememberWindowPosition"] = windowSettings.rememberPosition;

View file

@ -16,7 +16,8 @@ CMRC_DECLARE(ConsoleFonts);
using namespace KernelMemoryTypes;
Memory::Memory(KFcram& fcramManager, const EmulatorConfig& config) : fcramManager(fcramManager), config(config) {
arena = new Common::HostMemory(FASTMEM_BACKING_SIZE, FASTMEM_VIRTUAL_SIZE, false);
const bool fastmemEnabled = config.fastmemEnabled;
arena = new Common::HostMemory(FASTMEM_BACKING_SIZE, FASTMEM_VIRTUAL_SIZE, fastmemEnabled);
readTable.resize(totalPageCount, 0);
writeTable.resize(totalPageCount, 0);
@ -24,7 +25,7 @@ Memory::Memory(KFcram& fcramManager, const EmulatorConfig& config) : fcramManage
fcram = arena->BackingBasePointer() + FASTMEM_FCRAM_OFFSET;
// arenaDSPRam = arena->BackingBasePointer() + FASTMEM_DSP_RAM_OFFSET;
useFastmem = arena->VirtualBasePointer() != nullptr;
useFastmem = fastmemEnabled && arena->VirtualBasePointer() != nullptr;
}
void Memory::reset() {

View file

@ -172,6 +172,10 @@ ConfigWindow::ConfigWindow(ConfigCallback configCallback, MainWindowCallback win
connectCheckbox(circlePadProEnabled, config.circlePadProEnabled);
genLayout->addRow(circlePadProEnabled);
QCheckBox* fastmemEnabled = new QCheckBox(tr("Enable fastmem"));
connectCheckbox(fastmemEnabled, config.fastmemEnabled);
genLayout->addRow(fastmemEnabled);
QCheckBox* discordRpcEnabled = new QCheckBox(tr("Enable Discord RPC"));
connectCheckbox(discordRpcEnabled, config.discordRpcEnabled);
genLayout->addRow(discordRpcEnabled);