1#ifndef YAZE_APP_CORE_EMULATOR_H
2#define YAZE_APP_CORE_EMULATOR_H
10#include "imgui/imgui.h"
42 std::string emulator_layout = R
"(
43 Table id="Emulator" count="2" flags="Resizable|ScrollY" {
44 TableSetupColumn title="CPU",
45 TableSetupColumn title="PPU",
50 CollapsingHeader id="cpuState" title="Register Values" flags="DefaultOpen" {
51 BeginChild id="##CpuState" size="0,100" flags="NoMove|NoScrollbar" {
52 Columns id="registersColumns" count="2" {
53 Text text="A: 0x%04X" data="cpu.A",
54 Text text="D: 0x%04X" data="cpu.D",
55 Text text="X: 0x%04X" data="cpu.X",
56 Text text="DB: 0x%02X" data="cpu.DB",
57 Text text="Y: 0x%04X" data="cpu.Y",
58 Text text="PB: 0x%02X" data="cpu.PB",
59 Text text="PC: 0x%04X" data="cpu.PC",
60 Text text="PS: 0x%02X" data="cpu.status",
61 Text text="SP: 0x%02X" data="cpu.SP",
62 Text text="Cycle: %d" data="snes.cycle_count",
66 CollapsingHeader id="spcState" title="SPC Registers" flags="DefaultOpen" {
67 BeginChild id="##SpcState" size="0,100" flags="NoMove|NoScrollbar" {
68 Columns id="spcRegistersColumns" count="2" {
69 Text text="A: 0x%02X" data="spc.A",
70 Text text="PC: 0x%04X" data="spc.PC",
71 Text text="X: 0x%02X" data="spc.X",
72 Text text="SP: 0x%02X" data="spc.SP",
73 Text text="Y: 0x%02X" data="spc.Y",
74 Text text="PSW: 0x%02X" data="spc.PSW",
78 Function id="CpuInstructionLog",
81 Function id="SnesPpu",
82 Function id="BreakpointList"
85 const std::map<std::string, void*> data_bindings = {
86 {
"cpu.A", &
snes_.cpu().A},
87 {
"cpu.D", &
snes_.cpu().D},
88 {
"cpu.X", &
snes_.cpu().X},
89 {
"cpu.DB", &
snes_.cpu().DB},
90 {
"cpu.Y", &
snes_.cpu().Y},
91 {
"cpu.PB", &
snes_.cpu().PB},
92 {
"cpu.PC", &
snes_.cpu().PC},
93 {
"cpu.status", &
snes_.cpu().status},
94 {
"snes.cycle_count", &
snes_.mutable_cycles()},
95 {
"cpu.SP", &
snes_.Memory().mutable_sp()},
96 {
"spc.A", &
snes_.apu().spc700().A},
97 {
"spc.X", &
snes_.apu().spc700().X},
98 {
"spc.Y", &
snes_.apu().spc700().Y},
99 {
"spc.PC", &
snes_.apu().spc700().PC},
100 {
"spc.SP", &
snes_.apu().spc700().SP},
101 {
"spc.PSW", &
snes_.apu().spc700().PSW}};
104 [&]() { RenderCpuInstructionLog(snes_.cpu().instruction_log_); });
105 Bind(
emulator_node_.GetNode(
"SnesPpu"), [&]() { RenderSnesPpu(); });
107 [&]() { RenderBreakpointList(); });
134 const std::vector<InstructionEntry>& instructionLog);
auto wanted_samples() const -> int
SDL_Texture * ppu_texture_
EmulatorKeybindings keybindings_
gui::zeml::Node emulator_node_
void set_audio_buffer(int16_t *audio_buffer)
void RenderMemoryViewer()
std::vector< uint8_t > rom_data_
auto set_audio_device_id(SDL_AudioDeviceID audio_device)
void RenderBreakpointList()
std::vector< Bookmark > bookmarks
SDL_AudioDeviceID audio_device_
void RenderCpuInstructionLog(const std::vector< InstructionEntry > &instructionLog)
auto running() const -> bool
SNES Emulation and debugging tools.
Node Parse(const std::string &yazon_input, const std::map< std::string, void * > &data_bindings)
Parse a zeml string.
Main namespace for the application.