nesemu/debugger/debugger.c

78 lines
1.8 KiB
C
Raw Normal View History

2024-01-07 16:20:37 -05:00
//
// Created by william on 1/6/24.
//
#include <curses.h>
#include <panel.h>
#include <stdlib.h>
#include "debugger.h"
#include "memory_view.h"
#include "dialog.h"
2024-01-11 16:02:53 -05:00
#include "program_view.h"
2024-01-07 16:20:37 -05:00
#define CTRL_KEY_EXIT 3
#define CTRL_KEY_G 103
void create_window() {
setenv("TERMINFO", "/usr/share/terminfo", 1);
setenv("TERM", "xterm", 1);
initscr();
raw();
noecho();
2024-01-09 14:46:20 -05:00
curs_set(0);
keypad(stdscr, true);
2024-01-07 16:20:37 -05:00
}
void start_debugger(System *system) {
2024-01-14 21:59:13 -05:00
InteractWindow windows[2];
InteractWindow *current_window;
2024-01-11 16:02:53 -05:00
2024-01-07 16:20:37 -05:00
create_window();
2024-01-14 21:59:13 -05:00
memory_view_init(&windows[0], system->ram, 0, 0);
program_view_init(&windows[1], system->ram, MEMORY_VIEW_WIDTH, 0);
2024-01-07 16:20:37 -05:00
update_panels();
doupdate();
int keycode;
while ((keycode = getch()) != CTRL_KEY_EXIT) {
2024-01-09 14:46:20 -05:00
if (keycode == KEY_UP) {
2024-01-14 21:59:13 -05:00
current_window->handle_cursor_move(current_window, 0, CURSOR_OFFSET_UP);
2024-01-07 16:20:37 -05:00
}
2024-01-09 14:46:20 -05:00
if (keycode == KEY_DOWN) {
2024-01-14 21:59:13 -05:00
current_window->handle_cursor_move(current_window, 0, CURSOR_OFFSET_DOWN);
2024-01-09 14:46:20 -05:00
}
if (keycode == KEY_LEFT) {
2024-01-14 21:59:13 -05:00
current_window->handle_cursor_move(current_window, CURSOR_OFFSET_LEFT, 0);
2024-01-09 14:46:20 -05:00
}
if (keycode == KEY_RIGHT) {
2024-01-14 21:59:13 -05:00
current_window->handle_cursor_move(current_window, CURSOR_OFFSET_RIGHT, 0);
2024-01-07 16:20:37 -05:00
}
if (keycode == CTRL_KEY_G) {
2024-01-09 14:46:20 -05:00
Dialog dialog = dialog_create("Goto Address");
bool cancelled = false;
address input = dialog_get_address(&dialog, &cancelled);
dialog_remove(&dialog);
if (!cancelled) {
2024-01-11 16:02:53 -05:00
memory_view_goto(&m_view, input);
2024-01-14 21:59:13 -05:00
memory_view_cursor_set_addr(&m_view, input);
2024-01-09 14:46:20 -05:00
}
2024-01-07 16:20:37 -05:00
}
update_panels();
doupdate();
}
2024-01-14 21:59:13 -05:00
window_inter_deinit(&windows[0]);
window_inter_deinit(&windows[1]);
2024-01-07 16:20:37 -05:00
endwin();
}