yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
assembly_editor.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_ASSEMBLY_EDITOR_H
2#define YAZE_APP_EDITOR_ASSEMBLY_EDITOR_H
3
4#include <map>
5#include <optional>
6#include <string>
7#include <vector>
8
9#include "absl/container/flat_hash_map.h"
10#include "absl/container/flat_hash_set.h"
11#include "app/editor/editor.h"
14#include "app/gui/core/style.h"
16#include "core/asar_wrapper.h"
17#include "rom/rom.h"
18#ifdef YAZE_WITH_Z3DK
19#include "core/z3dk_wrapper.h"
20#endif
21
22namespace yaze::test {
23struct AssemblyEditorGuiTestAccess;
24}
25
26namespace yaze {
27namespace editor {
28
29struct FolderItem {
30 std::string name;
31 std::vector<FolderItem> subfolders;
32 std::vector<std::string> files;
33};
34
36 std::string file;
37 int line = 0; // 0-based
38 int column = 0; // 0-based
39};
40
45class AssemblyEditor : public Editor {
46 public:
52 void ChangeActiveFile(const std::string_view& filename);
53 absl::Status JumpToSymbolDefinition(const std::string& symbol);
54 // Jump to a best-effort assembly reference.
55 //
56 // Supported formats:
57 // - "MyLabel" (symbol)
58 // - "path/to/file.asm:123" (file + 1-based line)
59 // - "path/to/file.asm:123:10" (file + 1-based line + 1-based column)
60 // - "path/to/file.asm#L123" (file + 1-based line)
61 //
62 // This keeps story graph navigation resilient even when a planning JSON
63 // still contains file:line references; stable symbols are still preferred.
64 absl::Status JumpToReference(const std::string& reference);
65
66 [[nodiscard]] std::string active_file_path() const;
68
69 void Initialize() override;
70 absl::Status Load() override;
71 void InlineUpdate();
72
73 void UpdateCodeView();
74
75 absl::Status Cut() override;
76 absl::Status Copy() override;
77 absl::Status Paste() override;
78
79 absl::Status Undo() override;
80 absl::Status Redo() override;
81 absl::Status Find() override { return absl::UnimplementedError("Find"); }
82 // Undo history lives in the active TextEditor widget.
83 bool CanUndo() const override;
84 bool CanRedo() const override;
85
86 absl::Status Update() override;
87
88 absl::Status Save() override;
89
90 void OpenFolder(const std::string& folder_path);
91
92 // Asar integration methods
93 absl::Status ValidateCurrentFile();
94 absl::Status ApplyPatchToRom();
95 void UpdateErrorMarkers(const core::AsarPatchResult& result);
96 void ClearErrorMarkers();
97
98 void SetRom(Rom* rom) { rom_ = rom; }
99 Rom* rom() const { return rom_; }
100
101 // Accessors for Asar state
102 bool is_asar_initialized() const { return asar_initialized_; }
103 const std::map<std::string, core::AsarSymbol>& symbols() const {
104 return symbols_;
105 }
107
108 // Structured diagnostics from the last assemble/validate. Populated by
109 // both backends; richer (file:line:column) when YAZE_WITH_Z3DK is active.
110 const std::vector<core::AssemblyDiagnostic>& last_diagnostics() const {
111 return last_diagnostics_;
112 }
113
114 private:
115 friend struct ::yaze::test::AssemblyEditorGuiTestAccess;
116
118 const TextEditor* GetActiveEditor() const;
119 bool HasActiveFile() const {
120 return active_file_id_ != -1 &&
121 active_file_id_ < static_cast<int>(open_files_.size());
122 }
123
124 // Panel content drawing (called by WindowContent instances)
125 void DrawCodeEditor();
126 void DrawFileBrowser();
127 void DrawSymbolsContent();
128 void DrawBuildOutput();
130 void DrawToolbarContent();
131
132 // Menu drawing
133 void DrawFileMenu();
134 void DrawEditMenu();
135 void DrawAssembleMenu();
136
137 // Helper drawing
138 void DrawCurrentFolder();
139 void DrawFileTabView();
140 void DrawToolset();
141 void DrawSymbolPanel();
142
144 absl::Status NavigateDisassemblyQuery();
145 absl::Status GenerateZ3Disassembly();
150 absl::Status RunProjectGraphQueryInDrawer(
151 const std::vector<std::string>& args, const std::string& title);
152 std::string ResolveZ3DisasmCommand() const;
153 std::string ResolveZ3DisasmOutputDir() const;
154 std::string ResolveZ3DisasmRomPath() const;
155 std::string BuildProjectGraphBankQuery() const;
156 std::string BuildProjectGraphLookupQuery(uint32_t address) const;
157 int SelectedZ3DisasmBankIndex() const;
158 std::optional<uint32_t> CurrentDisassemblyBank() const;
159
160#ifdef YAZE_WITH_Z3DK
161 core::Z3dkAssembleOptions BuildZ3dkAssembleOptions() const;
162 void ExportZ3dkArtifacts(const core::AsarPatchResult& result,
163 bool sync_mesen_symbols);
164#endif
165
166 bool file_is_loaded_ = false;
169
170 std::vector<std::string> files_;
171 std::vector<TextEditor> open_files_;
172 ImVector<int> active_files_;
173
174 std::string current_file_;
177
179
180 // Asar integration state
182#ifdef YAZE_WITH_Z3DK
183 core::Z3dkWrapper z3dk_;
184#endif
185 bool asar_initialized_ = false;
186 bool show_symbol_panel_ = false;
188 uint32_t address = 0;
189 std::string file;
190 int line = 0;
191 };
193 uint32_t address = 0;
194 int size = 0;
195 std::string kind;
196 std::string name;
197 std::string source;
198 };
199 std::map<std::string, core::AsarSymbol> symbols_;
200 std::vector<std::string> last_errors_;
201 std::vector<std::string> last_warnings_;
202 std::vector<core::AssemblyDiagnostic> last_diagnostics_;
208 std::vector<std::string> z3disasm_files_;
212 std::vector<Z3DisasmSourceJump> z3disasm_source_jumps_;
213 std::vector<Z3DisasmHookJump> z3disasm_hook_jumps_;
214 std::string z3disasm_status_;
216 std::string disasm_query_ = "0x008000";
218 std::string disasm_status_;
219
220 // Symbol jump cache (used by story graph navigation; avoids scanning the
221 // entire code folder on repeated lookups).
222 std::string symbol_jump_root_;
223 absl::flat_hash_map<std::string, AsmSymbolLocation> symbol_jump_cache_;
224 absl::flat_hash_set<std::string> symbol_jump_negative_cache_;
225};
226
227} // namespace editor
228} // namespace yaze
229
230#endif
static const Palette & GetDarkPalette()
void SetShowWhitespaces(bool aValue)
void SetPalette(const Palette &aValue)
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:49
Modern C++ wrapper for Asar 65816 assembler integration.
Text editor for modifying assembly code.
TextEditor::Coordinates active_cursor_position() const
absl::Status Find() override
BackgroundCommandTask z3disasm_task_
core::AsarWrapper * asar_wrapper()
std::vector< std::string > last_warnings_
std::map< std::string, core::AsarSymbol > symbols_
std::optional< uint32_t > CurrentDisassemblyBank() const
absl::Status Save() override
std::vector< TextEditor > open_files_
absl::Status Load() override
std::string ResolveZ3DisasmOutputDir() const
std::string BuildProjectGraphLookupQuery(uint32_t address) const
std::vector< Z3DisasmHookJump > z3disasm_hook_jumps_
void ChangeActiveFile(const std::string_view &filename)
absl::Status JumpToReference(const std::string &reference)
absl::Status Copy() override
absl::flat_hash_map< std::string, AsmSymbolLocation > symbol_jump_cache_
std::vector< std::string > z3disasm_files_
void UpdateErrorMarkers(const core::AsarPatchResult &result)
std::string ResolveZ3DisasmRomPath() const
std::vector< core::AssemblyDiagnostic > last_diagnostics_
void OpenFolder(const std::string &folder_path)
absl::flat_hash_set< std::string > symbol_jump_negative_cache_
bool CanRedo() const override
std::string active_file_path() const
std::string BuildProjectGraphBankQuery() const
absl::Status Paste() override
absl::Status Update() override
bool CanUndo() const override
std::string ResolveZ3DisasmCommand() const
std::vector< std::string > files_
const std::map< std::string, core::AsarSymbol > & symbols() const
AssemblyEditor(Rom *rom=nullptr)
absl::Status Redo() override
absl::Status Undo() override
absl::Status RunProjectGraphQueryInDrawer(const std::vector< std::string > &args, const std::string &title)
absl::Status Cut() override
std::vector< std::string > last_errors_
std::vector< Z3DisasmSourceJump > z3disasm_source_jumps_
absl::Status JumpToSymbolDefinition(const std::string &symbol)
const std::vector< core::AssemblyDiagnostic > & last_diagnostics() const
Interface for editor classes.
Definition editor.h:249
EditorType type_
Definition editor.h:369
Asar patch result information.
std::vector< FolderItem > subfolders
std::vector< std::string > files