From 29fbc5cd8a4893f7982f3432fc4fe6d71c61bb06 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Fri, 12 Apr 2024 08:07:12 +0200 Subject: [PATCH] gint/gdb: more testing with gdb --- CMakeLists.txt | 3 +- assets-fx/img/opt_gint_gdb.png | Bin 0 -> 7133 bytes include/gintctl/assets.h | 1 + src/gint/gdb.c | 71 ++++++++++++++++++--------------- src/gint/render.c | 10 ++++- src/gintctl.c | 2 +- 6 files changed, 52 insertions(+), 35 deletions(-) create mode 100644 assets-fx/img/opt_gint_gdb.png diff --git a/CMakeLists.txt b/CMakeLists.txt index de21d85..187d7c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,6 +77,7 @@ set(ASSETS_fx assets-fx/img/opt_gint_cpumem.png assets-fx/img/opt_gint_dma.png assets-fx/img/opt_gint_drivers.png + assets-fx/img/opt_gint_gdb.png assets-fx/img/opt_gint_gray.png assets-fx/img/opt_gint_keyboard.png assets-fx/img/opt_gint_kmalloc.png @@ -124,7 +125,7 @@ fxconv_declare_assets(${ASSETS_fx} ${ASSETS_cg} WITH_METADATA) add_executable(gintctl ${SOURCES} ${ASSETS_${FXSDK_PLATFORM}}) target_compile_options(gintctl PRIVATE - -Wall -Wextra -Os) + -Wall -Wextra -Os -g) target_link_options(gintctl PRIVATE -Wl,-Map=map -Wl,--print-memory-usage) target_include_directories(gintctl PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include") diff --git a/assets-fx/img/opt_gint_gdb.png b/assets-fx/img/opt_gint_gdb.png new file mode 100644 index 0000000000000000000000000000000000000000..50ebd28ae22559500d451d07c9011a7ba58808ef GIT binary patch literal 7133 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 #include #include +#include #include #include @@ -11,14 +12,16 @@ #ifdef FXCG50 static void val(int y, const char *name, uint32_t value) { - dtext(0, 20 + y*12, C_BLACK, name); - dprint(88, 20 + y*12, C_BLACK, "%08X", value); + dtext(4, 20 + y*12, C_BLACK, name); + dprint(92, 20 + y*12, C_BLACK, "%08X", value); } #else static void val(int y, const char *name, uint32_t value) { - dtext(0, 8 + y*6, C_BLACK, name); - dprint(40, 8 + y*6, C_BLACK, "%08X", value); + int px = 64 * (y / 8); + int py = 8 + 6 * (y % 8); + dtext(px, py, C_BLACK, name); + dprint(px+30, py, C_BLACK, "%08X", value); } #endif @@ -32,48 +35,49 @@ void gintctl_gint_gdb(void) { int key = 0; int ret = -1; + + gdb_start_on_exception(); + while (key != KEY_EXIT) { dclear(C_WHITE); -#ifdef FXCG50 - row_title("GDB remote serial protocol"); -#else - row_title("GDB"); -#endif + row_title(GINT_HW_SWITCH("GDB", "GDB remote serial protocol")); -#ifdef FXCG50 +#if GINT_RENDER_MONO + dimage(0, 56, &img_opt_gint_gdb); +#elif GINT_RENDER_RGB fkey_action(6, "START"); fkey_action(5, "PANICR"); fkey_action(4, "PANICW"); + fkey_action(3, "STOP"); fkey_action(1, "BANK 1"); #endif -#ifdef FX9860G - font_t const *old_font = dfont(&font_mini); -#endif - val(0, "ret", ret); - reg(1, "MSTPCR0", SH7305_POWER.MSTPCR0); - reg(2, "CBR0", SH7305_UBC.CBR0); - reg(3, "CRR0", SH7305_UBC.CRR0); - val(4, "CAR0", SH7305_UBC.CAR0); - val(5, "CAMR0", SH7305_UBC.CAMR0); - reg(6, "CBR1", SH7305_UBC.CBR1); - reg(7, "CRR1", SH7305_UBC.CRR1); - val(8, "CAR1", SH7305_UBC.CAR1); - val(9, "CAMR1", SH7305_UBC.CAMR1); - val(10, "CDR1", SH7305_UBC.CDR1); - val(11, "CDMR1", SH7305_UBC.CDMR1); - reg(12, "CETR1", SH7305_UBC.CETR1); - reg(13, "CCMFR", SH7305_UBC.CCMFR); - reg(14, "CBCR", SH7305_UBC.CBCR); - val(15, "DBR", (uint32_t) ubc_getDBR()); + font_t const *old_font = dfont(_(&font_mini, dfont_default())); + reg(0, _("MSTP...", "MSTPCR0"), SH7305_POWER.MSTPCR0); + reg(1, "CBR0", SH7305_UBC.CBR0); + reg(2, "CRR0", SH7305_UBC.CRR0); + val(3, "CAR0", SH7305_UBC.CAR0); + val(4, "CAMR0", SH7305_UBC.CAMR0); + reg(5, "CBR1", SH7305_UBC.CBR1); + reg(6, "CRR1", SH7305_UBC.CRR1); + val(7, "CAR1", SH7305_UBC.CAR1); + val(8, "CAMR1", SH7305_UBC.CAMR1); + val(9, "CDR1", SH7305_UBC.CDR1); + val(10, "CDMR1", SH7305_UBC.CDMR1); + reg(11, "CETR1", SH7305_UBC.CETR1); + reg(12, "CCMFR", SH7305_UBC.CCMFR); + reg(13, "CBCR", SH7305_UBC.CBCR); + val(14, "DBR", (uint32_t) ubc_getDBR()); +#ifdef FX9860G + val(15, "ret", ret); +#endif #ifdef FXCG50 - dprint(176, 20, C_BLACK, "exc_catcher: %p", gint_exc_catcher); + dprint(176, 20, C_BLACK, "ret: %d", ret); + dprint(176, 32, C_BLACK, "exc_catcher: %p", gint_exc_catcher); #endif -#ifdef FX9860G dfont(old_font); -#endif dupdate(); key_event_t ev = gintctl_getkey(); @@ -82,10 +86,13 @@ void gintctl_gint_gdb(void) volatile uint32_t* miss = (void*)0x41414140; if (key == KEY_F6) { ret = gdb_start(); + gdb_main(NULL); } else if (key == KEY_F5) { ret = *miss; } else if (key == KEY_F4) { *miss = 0x1337; + } else if (key == KEY_F3) { + __asm__("trapa #42"); } else if (key == KEY_F1) { ret = gintctl_gint_gdb_bank1_test(); } diff --git a/src/gint/render.c b/src/gint/render.c index a3cda2e..c3fefaf 100644 --- a/src/gint/render.c +++ b/src/gint/render.c @@ -1,6 +1,8 @@ #define __BSD_VISIBLE 1 #include #include +#include +#include #include #include @@ -29,7 +31,7 @@ void gintctl_gint_render(void) dclear(C_WHITE); drect_border(1, 1, DWIDTH-2, DHEIGHT-2, C_NONE, 1, C_BLACK); -#ifdef FXCG50 +#if GINT_RENDER_RGB drect_border(3, 3, DWIDTH-4, DHEIGHT-4, C_NONE, 1, C_BLACK); #endif @@ -79,6 +81,12 @@ void gintctl_gint_render(void) dcircle(x4+w1/2, y3, r, fill2, C_NONE); dupdate(); + +#if GINT_HW_CG + extern image_t gint_gdb_icons_rgb565; + video_update(0, 0, &gint_gdb_icons_rgb565, 0); +#endif + if(getkey().key == KEY_EXIT) return; } diff --git a/src/gintctl.c b/src/gintctl.c index f60a5a6..3a3b67c 100644 --- a/src/gintctl.c +++ b/src/gintctl.c @@ -61,7 +61,7 @@ struct menu menu_gint = { #if GINT_RENDER_MONO { "Gray rendering", gintctl_gint_grayrender, 0 }, #endif - { "GDB", gintctl_gint_gdb, 0}, + { "GDB", gintctl_gint_gdb, MENU_SH4_ONLY }, { NULL, NULL, 0 }, }};