Skip to content

Commit c18e5a7

Browse files
committed
[debugger] Add Load Memory From Binary
1 parent 4819f8a commit c18e5a7

6 files changed

Lines changed: 44 additions & 0 deletions

File tree

platforms/shared/desktop/gui_debug_memeditor.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1851,6 +1851,21 @@ void MemEditor::SaveToBinaryFile(const char* file_path)
18511851
}
18521852
}
18531853

1854+
void MemEditor::LoadFromBinaryFile(const char* file_path)
1855+
{
1856+
if (!IsValidPointer(m_mem_data) || m_mem_size <= 0 || m_mem_word <= 0)
1857+
return;
1858+
1859+
int size = m_mem_size * m_mem_word;
1860+
1861+
FILE* file = fopen_utf8(file_path, "rb");
1862+
if (file)
1863+
{
1864+
fread(m_mem_data, 1, size, file);
1865+
fclose(file);
1866+
}
1867+
}
1868+
18541869
void MemEditor::AddBookmark()
18551870
{
18561871
m_add_bookmark = true;

platforms/shared/desktop/gui_debug_memeditor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ class MemEditor
7676
void SetValueToSelection(int value);
7777
void SaveToTextFile(const char* file_path);
7878
void SaveToBinaryFile(const char* file_path);
79+
void LoadFromBinaryFile(const char* file_path);
7980
void AddBookmark();
8081
void RemoveBookmarks();
8182
std::vector<Bookmark>* GetBookmarks();

platforms/shared/desktop/gui_debug_memory.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,11 @@ void gui_debug_memory_save_dump(const char* file_path, bool binary)
238238
mem_edit[current_mem_edit].SaveToTextFile(file_path);
239239
}
240240

241+
void gui_debug_memory_load_dump(const char* file_path)
242+
{
243+
mem_edit[current_mem_edit].LoadFromBinaryFile(file_path);
244+
}
245+
241246
static void draw_tabs(void)
242247
{
243248
GearsystemCore* core = emu_get_core();
@@ -317,6 +322,11 @@ static void memory_editor_menu(void)
317322
gui_file_dialog_save_memory_dump(true);
318323
}
319324

325+
if (ImGui::MenuItem("Load Memory From Binary..."))
326+
{
327+
gui_file_dialog_load_memory_dump();
328+
}
329+
320330
ImGui::EndMenu();
321331
}
322332

platforms/shared/desktop/gui_debug_memory.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ EXTERN void gui_debug_memory_paste(void);
6565
EXTERN void gui_debug_memory_select_all(void);
6666
EXTERN void gui_debug_memory_goto(int editor, int address);
6767
EXTERN void gui_debug_memory_save_dump(const char* file_path, bool binary);
68+
EXTERN void gui_debug_memory_load_dump(const char* file_path);
6869
EXTERN bool gui_debug_memory_select_range(int editor, int start_address, int end_address);
6970
EXTERN void gui_debug_memory_set_selection_value(int editor, u8 value);
7071
EXTERN void gui_debug_memory_add_bookmark(int editor, int address, const char* name);

platforms/shared/desktop/gui_filedialogs.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ enum FileDialogID
5555
FileDialog_SaveTiles,
5656
FileDialog_SaveMemoryDumpBinary,
5757
FileDialog_SaveMemoryDumpText,
58+
FileDialog_LoadMemoryDumpBinary,
5859
FileDialog_SaveDisassemblerFull,
5960
FileDialog_SaveDisassemblerVisible,
6061
FileDialog_SaveLog,
@@ -234,6 +235,16 @@ void gui_file_dialog_save_memory_dump(bool binary)
234235
SDL_ShowSaveFileDialog(file_dialog_callback, (void*)(intptr_t)id, application_sdl_window, filters, 1, NULL);
235236
}
236237

238+
void gui_file_dialog_load_memory_dump()
239+
{
240+
if (!begin_dialog())
241+
return;
242+
243+
SDL_DialogFileFilter filters[] = { { "Memory Dump Files", "bin" } };
244+
const char* default_path = config_emulator.last_open_path.empty() ? NULL : config_emulator.last_open_path.c_str();
245+
SDL_ShowOpenFileDialog(file_dialog_callback, (void*)(intptr_t)FileDialog_LoadMemoryDumpBinary, application_sdl_window, filters, 1, default_path, false);
246+
}
247+
237248
void gui_file_dialog_save_disassembler(bool full)
238249
{
239250
if (!begin_dialog())
@@ -448,6 +459,11 @@ static void process_dialog_result(FileDialogID id, const char* path)
448459
gui_debug_memory_save_dump(path, false);
449460
break;
450461
}
462+
case FileDialog_LoadMemoryDumpBinary:
463+
{
464+
gui_debug_memory_load_dump(path);
465+
break;
466+
}
451467
case FileDialog_SaveDisassemblerFull:
452468
{
453469
gui_debug_save_disassembler(path, true);

platforms/shared/desktop/gui_filedialogs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ EXTERN void gui_file_dialog_save_all_sprites(void);
4141
EXTERN void gui_file_dialog_save_background(void);
4242
EXTERN void gui_file_dialog_save_tiles(void);
4343
EXTERN void gui_file_dialog_save_memory_dump(bool binary);
44+
EXTERN void gui_file_dialog_load_memory_dump(void);
4445
EXTERN void gui_file_dialog_save_disassembler(bool full);
4546
EXTERN void gui_file_dialog_save_log(void);
4647
EXTERN void gui_file_dialog_save_debug_settings(void);

0 commit comments

Comments
 (0)