mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
95 lines
2.4 KiB
C++
95 lines
2.4 KiB
C++
#pragma once
|
|
#include "pch.h"
|
|
#include <deque>
|
|
#include "Utilities/SimpleLock.h"
|
|
#include "Utilities/Timer.h"
|
|
#include "Debugger/DebugTypes.h"
|
|
#include "Shared/EventType.h"
|
|
|
|
class Debugger;
|
|
struct lua_State;
|
|
|
|
enum class CallbackType
|
|
{
|
|
Read = 0,
|
|
Write = 1,
|
|
Exec = 2
|
|
};
|
|
|
|
struct MemoryCallback
|
|
{
|
|
uint32_t StartAddress;
|
|
uint32_t EndAddress;
|
|
CpuType Cpu;
|
|
MemoryType MemType;
|
|
int Reference;
|
|
};
|
|
|
|
enum class ScriptDrawSurface
|
|
{
|
|
ConsoleScreen,
|
|
ScriptHud
|
|
};
|
|
|
|
class ScriptingContext
|
|
{
|
|
private:
|
|
static ScriptingContext* _context;
|
|
lua_State* _lua = nullptr;
|
|
Timer _timer;
|
|
EmuSettings* _settings = nullptr;
|
|
|
|
deque<string> _logRows;
|
|
SimpleLock _logLock;
|
|
bool _allowSaveState = false;
|
|
|
|
Debugger* _debugger = nullptr;
|
|
CpuType _defaultCpuType = {};
|
|
MemoryType _defaultMemType = {};
|
|
|
|
ScriptDrawSurface _drawSurface = ScriptDrawSurface::ConsoleScreen;
|
|
|
|
static void ExecutionCountHook(lua_State* lua);
|
|
void LuaOpenLibs(lua_State* L, bool allowIoOsAccess);
|
|
void ProcessLuaError();
|
|
|
|
protected:
|
|
string _scriptName;
|
|
bool _initDone = false;
|
|
|
|
vector<MemoryCallback> _callbacks[3];
|
|
vector<int> _eventCallbacks[(int)EventType::LastValue + 1];
|
|
|
|
template<typename T> void InternalCallMemoryCallback(AddressInfo relAddr, T& value, CallbackType type, CpuType cpuType);
|
|
|
|
bool IsAddressMatch(MemoryCallback& callback, AddressInfo addr);
|
|
|
|
public:
|
|
ScriptingContext(Debugger* debugger);
|
|
~ScriptingContext();
|
|
bool LoadScript(string scriptName, string path, string scriptContent, Debugger* debugger);
|
|
|
|
void Log(string message);
|
|
string GetLog();
|
|
|
|
Debugger* GetDebugger();
|
|
string GetScriptName();
|
|
|
|
void SetDrawSurface(ScriptDrawSurface surface) { _drawSurface = surface; }
|
|
ScriptDrawSurface GetDrawSurface() { return _drawSurface; }
|
|
|
|
template<typename T> void CallMemoryCallback(AddressInfo relAddr, T& value, CallbackType type, CpuType cpuType);
|
|
int CallEventCallback(EventType type, CpuType cpuType);
|
|
bool CheckInitDone();
|
|
bool IsSaveStateAllowed();
|
|
|
|
CpuType GetDefaultCpuType() { return _defaultCpuType; }
|
|
MemoryType GetDefaultMemType() { return _defaultMemType; }
|
|
|
|
void RefreshMemoryCallbackFlags();
|
|
|
|
void RegisterMemoryCallback(CallbackType type, int startAddr, int endAddr, MemoryType memType, CpuType cpuType, int reference);
|
|
void UnregisterMemoryCallback(CallbackType type, int startAddr, int endAddr, MemoryType memType, CpuType cpuType, int reference);
|
|
void RegisterEventCallback(EventType type, int reference);
|
|
void UnregisterEventCallback(EventType type, int reference);
|
|
};
|