Mercurial > repos > blastem
diff debug.h @ 2362:b6c5a0fa3dfc
Refactor debugger a bit. Allow types other than integers to be passed in expressions and stored in arrays. Better namespace support
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 06 Nov 2023 22:41:33 -0800 |
parents | 3350b3c8faa8 |
children | b865f33fd47e |
line wrap: on
line diff
--- a/debug.h Mon Oct 30 00:07:56 2023 -0700 +++ b/debug.h Mon Nov 06 22:41:33 2023 -0800 @@ -39,7 +39,8 @@ EXPR_UNARY, EXPR_BINARY, EXPR_SIZE, - EXPR_MEM + EXPR_MEM, + EXPR_NAMESPACE } expr_type; typedef struct expr expr; @@ -51,10 +52,26 @@ token op; }; +enum { + DBG_VAL_U32, + DBG_VAL_F32, + DBG_VAL_ARRAY, + DBG_VAL_STRING, + DBG_VAL_FUNC +}; + typedef struct { - char *raw; - expr *parsed; - uint32_t value; + union { + uint32_t u32; + float f32; + } v; + uint32_t type; +} debug_val; + +typedef struct { + char *raw; + expr *parsed; + debug_val value; } command_arg; typedef struct debug_root debug_root; @@ -117,22 +134,31 @@ } bp_def; typedef struct debug_array debug_array; -typedef uint32_t (*debug_array_get)(debug_root *root, debug_array *array, uint32_t index); -typedef void (*debug_array_set)(debug_root *root, debug_array *array, uint32_t index, uint32_t value); -typedef void (*debug_array_append)(debug_root *root, debug_array *array, uint32_t value); +typedef debug_val (*debug_array_get)(debug_array *array, uint32_t index); +typedef void (*debug_array_set)(debug_array *array, uint32_t index, debug_val value); +typedef void (*debug_array_append)(debug_array *array, debug_val value); struct debug_array{ debug_array_get get; debug_array_set set; debug_array_append append; - uint32_t *data; + void *base; uint32_t size; uint32_t storage; }; -typedef uint8_t (*resolver)(debug_root *root, const char *name, uint32_t *out); -typedef debug_array* (*array_resolver)(debug_root *root, const char *name); -typedef uint8_t (*setter)(debug_root *root, const char *name, uint32_t value); +typedef struct debug_var debug_var; +typedef debug_val (*debug_var_get)(debug_var *var); +typedef void (*debug_var_set)(debug_var *var, debug_val val); + +struct debug_var { + debug_var_get get; + debug_var_set set; + void *ptr; + debug_val val; +}; + +typedef debug_var *(*resolver)(debug_root *root, const char *name); typedef uint8_t (*reader)(debug_root *root, uint32_t *out, char size); typedef uint8_t (*writer)(debug_root *root, uint32_t address, uint32_t value, char size); @@ -141,14 +167,11 @@ bp_def *breakpoints; disp_def *displays; tern_node *commands; + tern_node *variables; tern_node *symbols; - tern_node *variables; - tern_node *arrays; + tern_node *other_roots; disasm_context *disasm; - resolver resolve; - array_resolver array_resolve; reader read_mem; - setter set; writer write_mem; parsed_command last_cmd; uint32_t bp_index;