2016-03-30 20:07:55 +00:00
|
|
|
#ifndef debugger_h
|
|
|
|
#define debugger_h
|
2017-04-17 17:16:17 +00:00
|
|
|
#include <stdbool.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "gb_struct_def.h"
|
|
|
|
#include "symbol_hash.h"
|
2016-03-30 20:07:55 +00:00
|
|
|
|
2017-10-12 16:05:27 +00:00
|
|
|
|
2017-04-17 17:16:17 +00:00
|
|
|
#ifdef GB_INTERNAL
|
2020-04-25 12:12:10 +00:00
|
|
|
#ifdef GB_DISABLE_DEBUGGER
|
2017-10-12 16:05:27 +00:00
|
|
|
#define GB_debugger_run(gb) (void)0
|
|
|
|
#define GB_debugger_handle_async_commands(gb) (void)0
|
|
|
|
#define GB_debugger_ret_hook(gb) (void)0
|
|
|
|
#define GB_debugger_call_hook(gb, addr) (void)addr
|
|
|
|
#define GB_debugger_test_write_watchpoint(gb, addr, value) ((void)addr, (void)value)
|
|
|
|
#define GB_debugger_test_read_watchpoint(gb, addr) (void)addr
|
2020-04-25 19:48:48 +00:00
|
|
|
#define GB_debugger_add_symbol(gb, bank, address, symbol) ((void)bank, (void)address, (void)symbol)
|
|
|
|
|
2017-10-12 16:05:27 +00:00
|
|
|
#else
|
2016-06-18 17:29:11 +00:00
|
|
|
void GB_debugger_run(GB_gameboy_t *gb);
|
2016-07-17 21:39:43 +00:00
|
|
|
void GB_debugger_handle_async_commands(GB_gameboy_t *gb);
|
2016-08-09 19:48:53 +00:00
|
|
|
void GB_debugger_call_hook(GB_gameboy_t *gb, uint16_t call_addr);
|
2016-06-18 17:29:11 +00:00
|
|
|
void GB_debugger_ret_hook(GB_gameboy_t *gb);
|
2016-07-06 21:29:25 +00:00
|
|
|
void GB_debugger_test_write_watchpoint(GB_gameboy_t *gb, uint16_t addr, uint8_t value);
|
|
|
|
void GB_debugger_test_read_watchpoint(GB_gameboy_t *gb, uint16_t addr);
|
2016-07-13 20:00:50 +00:00
|
|
|
const GB_bank_symbol_t *GB_debugger_find_symbol(GB_gameboy_t *gb, uint16_t addr);
|
2020-04-25 19:48:48 +00:00
|
|
|
void GB_debugger_add_symbol(GB_gameboy_t *gb, uint16_t bank, uint16_t address, const char *symbol);
|
2020-04-25 12:12:10 +00:00
|
|
|
#endif /* GB_DISABLE_DEBUGGER */
|
2017-04-17 17:16:17 +00:00
|
|
|
#endif
|
|
|
|
|
2017-05-26 17:16:19 +00:00
|
|
|
#ifdef GB_INTERNAL
|
|
|
|
bool /* Returns true if debugger waits for more commands. Not relevant for non-GB_INTERNAL */
|
|
|
|
#else
|
|
|
|
void
|
|
|
|
#endif
|
|
|
|
GB_debugger_execute_command(GB_gameboy_t *gb, char *input); /* Destroys input. */
|
2020-06-04 23:10:05 +00:00
|
|
|
char *GB_debugger_complete_substring(GB_gameboy_t *gb, char *input, uintptr_t *context); /* Destroys input, result requires free */
|
2017-05-26 17:16:19 +00:00
|
|
|
|
2017-04-17 17:16:17 +00:00
|
|
|
void GB_debugger_load_symbol_file(GB_gameboy_t *gb, const char *path);
|
2016-07-13 20:00:50 +00:00
|
|
|
const char *GB_debugger_name_for_address(GB_gameboy_t *gb, uint16_t addr);
|
2016-08-19 11:54:54 +00:00
|
|
|
bool GB_debugger_evaluate(GB_gameboy_t *gb, const char *string, uint16_t *result, uint16_t *result_bank); /* result_bank is -1 if unused. */
|
2017-04-17 17:16:17 +00:00
|
|
|
void GB_debugger_break(GB_gameboy_t *gb);
|
|
|
|
bool GB_debugger_is_stopped(GB_gameboy_t *gb);
|
|
|
|
void GB_debugger_set_disabled(GB_gameboy_t *gb, bool disabled);
|
2018-04-02 16:57:39 +00:00
|
|
|
void GB_debugger_clear_symbols(GB_gameboy_t *gb);
|
2016-03-30 20:07:55 +00:00
|
|
|
#endif /* debugger_h */
|