#include #include #include #include #include #include // Menu string format. // TODO: FIND BETTER WAY TROUDUC' const char *content_string[26] = { "General registers:", "r0 = %#.8x", "r1 = %#.8x", "r2 = %#.8x", "r3 = %#.8x", "r4 = %#.8x", "r5 = %#.8x", "r6 = %#.8x", "r7 = %#.8x", "r8 = %#.8x", "r9 = %#.8x", "r10 = %#.8x", "r11 = %#.8x", "r12 = %#.8x", "r13 = %#.8x", "r14 = %#.8x", "r15 = %#.8x", "\0", "Special registers:", "GBR = %p", "MACL = %p", "MACH = %p", "SR = %p", "PC = %p", "PR = %p", NULL }; static void cursor_update(ubc_session_t *session) { extern struct earlyterm earlyterm; if (session->key.up == 1 && session->menu.context.cursor > 0) session->menu.context.cursor = session->menu.context.cursor - 1; if (session->key.down == 1 && (int)session->menu.context.cursor < 24 - earlyterm.display.ws_row) session->menu.context.cursor = session->menu.context.cursor + 1; } // // menu_context - Show programe context. // @note: // This is not the best way to do the job, // but for now the goal is the create a fonctionnal // on-calc debugger. // void disasm_menu_show_context(ubc_session_t *session) { extern struct earlyterm earlyterm; char line[64]; // Menu string data uint32_t content_data[25] = { 0, session->context->reg[0], session->context->reg[1], session->context->reg[2], session->context->reg[3], session->context->reg[4], session->context->reg[5], session->context->reg[6], session->context->reg[7], session->context->reg[8], session->context->reg[9], session->context->reg[10], session->context->reg[11], session->context->reg[12], session->context->reg[13], session->context->reg[14], session->context->reg[15], 0, 0, session->context->gbr, session->context->macl, session->context->mach, session->context->ssr, session->context->spc, session->context->pr }; // Update cursor position. cursor_update(session); // Clear VRAM. dclear(&earlyterm.display); // Display menu based on cursor position. memset(line, 0x00, 64); for (int i = 0 ; content_string[i + session->menu.context.cursor] != NULL && i < earlyterm.display.ws_row ; ++i) { sprintf(line, content_string[i + session->menu.context.cursor], content_data[i + session->menu.context.cursor] ); dprint(&earlyterm.display, 0, i, line); } // Display VRAM screen_update(earlyterm.display.vram); }