yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
emulator.h
Go to the documentation of this file.
1#ifndef YAZE_APP_CORE_EMULATOR_H
2#define YAZE_APP_CORE_EMULATOR_H
3
4#include <cstdint>
5#include <vector>
6
7#include "app/emu/snes.h"
12#include "app/rom.h"
13
14namespace yaze {
15namespace gfx {
16class IRenderer;
17} // namespace gfx
18
19namespace editor {
20class EditorCardRegistry;
21} // namespace editor
22
27namespace emu {
28
29// REMOVED: EmulatorKeybindings (ImGuiKey-based)
30// Now using ui::InputHandler with SDL_GetKeyboardState() for proper continuous polling
31
36class Emulator {
37 public:
38 Emulator() = default;
39 ~Emulator();
40 void Initialize(gfx::IRenderer* renderer, const std::vector<uint8_t>& rom_data);
41 void Run(Rom* rom);
42 void Cleanup();
43
44 // Card visibility managed by EditorCardRegistry (dependency injection)
46
47 auto snes() -> Snes& { return snes_; }
48 auto running() const -> bool { return running_; }
50
51 // Audio backend access
53 void set_audio_buffer(int16_t* audio_buffer) { audio_buffer_ = audio_buffer; }
54 auto set_audio_device_id(SDL_AudioDeviceID audio_device) {
55 audio_device_ = audio_device;
56 }
57 void set_use_sdl_audio_stream(bool enabled);
59 auto wanted_samples() const -> int { return wanted_samples_; }
61
62 // Render access
64 void* ppu_texture() { return ppu_texture_; }
65
66 // Turbo mode
67 bool is_turbo_mode() const { return turbo_mode_; }
68 void set_turbo_mode(bool turbo) { turbo_mode_ = turbo; }
69
70 // Debugger access
74 bool is_debugging() const { return debugging_; }
75 void set_debugging(bool debugging) { debugging_ = debugging; }
76 bool is_initialized() const { return initialized_; }
77 bool is_snes_initialized() const { return snes_initialized_; }
78
79 // AI Agent Integration API
80 bool IsEmulatorReady() const { return snes_.running() && !rom_data_.empty(); }
81 double GetCurrentFPS() const { return current_fps_; }
82 uint64_t GetCurrentCycle() { return snes_.mutable_cycles(); }
83 uint16_t GetCPUPC() { return snes_.cpu().PC; }
84 uint8_t GetCPUB() { return snes_.cpu().DB; }
85 void StepSingleInstruction() { snes_.cpu().RunOpcode(); }
86 void SetBreakpoint(uint32_t address) { snes_.cpu().SetBreakpoint(address); }
87 void ClearAllBreakpoints() { snes_.cpu().ClearBreakpoints(); }
88 std::vector<uint32_t> GetBreakpoints() { return snes_.cpu().GetBreakpoints(); }
89
90 // Performance monitoring for AI agents
92 double fps;
93 uint64_t cycles;
96 uint16_t cpu_pc;
97 uint8_t cpu_pb;
98 };
100 return {
101 .fps = current_fps_,
102 .cycles = snes_.mutable_cycles(),
103 .audio_frames_queued = SDL_GetQueuedAudioSize(audio_device_) / (wanted_samples_ * 4),
104 .is_running = running_,
105 .cpu_pc = snes_.cpu().PC,
106 .cpu_pb = snes_.cpu().PB
107 };
108 }
109
110 private:
111 void RenderNavBar();
113
114 void RenderSnesPpu();
116 void RenderMemoryViewer();
119 void RenderAIAgentPanel();
120 void RenderSaveStates();
122 void RenderApuDebugger();
123
124 struct Bookmark {
125 std::string name;
126 uint64_t value;
127 };
128 std::vector<Bookmark> bookmarks;
129
131 const std::vector<InstructionEntry>& instructionLog);
132
133 bool step_ = true;
134 bool power_ = false;
135 bool loading_ = false;
136 bool running_ = false;
137 bool turbo_mode_ = false;
138
141
142 uint8_t manual_pb_ = 0;
143 uint16_t manual_pc_ = 0;
144
145 // timing
147 uint64_t last_count;
148 double time_adder = 0.0;
149
150 // FPS tracking
152 double fps_timer_ = 0.0;
153 double current_fps_ = 0.0;
154
156 SDL_AudioDeviceID audio_device_;
157
158 // Audio backend abstraction
159 std::unique_ptr<audio::IAudioBackend> audio_backend_;
160
162 bool initialized_ = false;
163 bool snes_initialized_ = false;
164 bool debugging_ = false;
166 void* ppu_texture_ = nullptr;
171
172 // Card visibility managed by EditorCardManager - no member variables needed!
173
174 // Debugger infrastructure
177
178 std::vector<uint8_t> rom_data_;
179
180 // Input handling (abstracted for SDL2/SDL3/custom backends)
182
183 // Card registry for card visibility (injected)
185};
186
187} // namespace emu
188} // namespace yaze
189
190#endif // YAZE_APP_CORE_EMULATOR_H
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:74
Central registry for all editor cards with session awareness and dependency injection.
Manages CPU and SPC700 breakpoints for debugging.
A class for emulating and debugging SNES games.
Definition emulator.h:36
gfx::IRenderer * renderer()
Definition emulator.h:63
void Initialize(gfx::IRenderer *renderer, const std::vector< uint8_t > &rom_data)
Definition emulator.cc:61
BreakpointManager & breakpoint_manager()
Definition emulator.h:71
void RenderModernCpuDebugger()
Definition emulator.cc:502
std::unique_ptr< audio::IAudioBackend > audio_backend_
Definition emulator.h:159
auto wanted_samples() const -> int
Definition emulator.h:59
bool is_debugging() const
Definition emulator.h:74
void set_turbo_mode(bool turbo)
Definition emulator.h:68
bool is_initialized() const
Definition emulator.h:76
void * ppu_texture()
Definition emulator.h:64
bool IsEmulatorReady() const
Definition emulator.h:80
bool audio_stream_env_checked_
Definition emulator.h:170
void set_use_sdl_audio_stream(bool enabled)
Definition emulator.cc:54
double GetCurrentFPS() const
Definition emulator.h:81
void set_debugging(bool debugging)
Definition emulator.h:75
void set_audio_buffer(int16_t *audio_buffer)
Definition emulator.h:53
void RenderMemoryViewer()
Definition emulator.cc:497
void SetBreakpoint(uint32_t address)
Definition emulator.h:86
bool audio_stream_config_dirty_
Definition emulator.h:168
void set_renderer(gfx::IRenderer *renderer)
Definition emulator.h:60
uint64_t GetCurrentCycle()
Definition emulator.h:82
uint64_t count_frequency
Definition emulator.h:146
void RenderKeyboardConfig()
Definition emulator.cc:744
debug::DisassemblyViewer disassembly_viewer_
Definition emulator.h:176
bool use_sdl_audio_stream() const
Definition emulator.h:58
void StepSingleInstruction()
Definition emulator.h:85
std::vector< uint8_t > rom_data_
Definition emulator.h:178
auto set_audio_device_id(SDL_AudioDeviceID audio_device)
Definition emulator.h:54
input::InputManager & input_manager()
Definition emulator.h:73
void RenderPerformanceMonitor()
Definition emulator.cc:718
bool is_turbo_mode() const
Definition emulator.h:67
debug::DisassemblyViewer & disassembly_viewer()
Definition emulator.h:72
void RenderAIAgentPanel()
Definition emulator.cc:723
void RenderBreakpointList()
Definition emulator.cc:492
BreakpointManager breakpoint_manager_
Definition emulator.h:175
uint64_t last_count
Definition emulator.h:147
std::vector< Bookmark > bookmarks
Definition emulator.h:128
input::InputManager input_manager_
Definition emulator.h:181
void set_running(bool running)
Definition emulator.h:49
uint16_t GetCPUPC()
Definition emulator.h:83
SDL_AudioDeviceID audio_device_
Definition emulator.h:156
bool is_snes_initialized() const
Definition emulator.h:77
editor::EditorCardRegistry * card_registry_
Definition emulator.h:184
uint16_t manual_pc_
Definition emulator.h:143
void RenderCpuInstructionLog(const std::vector< InstructionEntry > &instructionLog)
Definition emulator.cc:728
void set_card_registry(editor::EditorCardRegistry *registry)
Definition emulator.h:45
void ClearAllBreakpoints()
Definition emulator.h:87
void Run(Rom *rom)
Definition emulator.cc:118
audio::IAudioBackend * audio_backend()
Definition emulator.h:52
auto snes() -> Snes &
Definition emulator.h:47
auto running() const -> bool
Definition emulator.h:48
uint8_t GetCPUB()
Definition emulator.h:84
void RenderEmulatorInterface()
Definition emulator.cc:363
EmulatorMetrics GetMetrics()
Definition emulator.h:99
int16_t * audio_buffer_
Definition emulator.h:155
gfx::IRenderer * renderer_
Definition emulator.h:165
std::vector< uint32_t > GetBreakpoints()
Definition emulator.h:88
auto mutable_cycles() -> uint64_t &
Definition snes.h:76
bool running() const
Definition snes.h:70
auto cpu() -> Cpu &
Definition snes.h:71
Abstract audio backend interface.
Advanced disassembly viewer with sparse storage and interactive features.
Defines an abstract interface for all rendering operations.
Definition irenderer.h:35
Main namespace for the application.
Definition controller.cc:20