You've already forked HackerSM64
mirror of
https://github.com/HackerN64/HackerSM64.git
synced 2026-01-21 10:35:32 -08:00
Improve pseudo C comments
This commit is contained in:
@@ -358,7 +358,16 @@ void disasm_draw_asm_entries(CSTextCoord_u32 line, CSTextCoord_u32 numLines, Add
|
||||
};
|
||||
|
||||
if (asPseudoC) {
|
||||
cs_print_scroll(x, y, CRASH_SCREEN_NUM_CHARS_X, "%s", cs_insn_to_pseudo_c(insn));
|
||||
const char* comment = NULL;
|
||||
const char* pseudoC = cs_insn_to_pseudo_c(insn, &comment);
|
||||
size_t commentSize = 0;
|
||||
if (comment != NULL) {
|
||||
commentSize = (1 + STRLEN("// ") + strlen(comment));
|
||||
}
|
||||
size_t charX = cs_print_scroll(x, y, (CRASH_SCREEN_NUM_CHARS_X - commentSize), "%s", pseudoC);
|
||||
if (comment != NULL) {
|
||||
cs_print((x + TEXT_WIDTH(charX + 1)), y, STR_COLOR_PREFIX"// %s", COLOR_RGBA32_VSC_COMMENT, comment);
|
||||
}
|
||||
} else {
|
||||
format_and_print_insn(x, y, addr, data);
|
||||
}
|
||||
|
||||
@@ -316,7 +316,14 @@ void page_summary_draw(void) {
|
||||
|
||||
line++;
|
||||
cs_print(TEXT_X(x), TEXT_Y(line++), STR_COLOR_PREFIX"PSEUDO:", COLOR_RGBA32_CRASH_HEADER);
|
||||
cs_print_scroll(TEXT_X(x), TEXT_Y(line++), (CRASH_SCREEN_NUM_CHARS_X - 2), "%s", cs_insn_to_pseudo_c((InsnData)data));
|
||||
const char* comment = NULL;
|
||||
const char* pseudoC = cs_insn_to_pseudo_c((InsnData)data, &comment);
|
||||
if (pseudoC != NULL) {
|
||||
cs_print_scroll(TEXT_X(x), TEXT_Y(line++), (CRASH_SCREEN_NUM_CHARS_X - 2), "%s", pseudoC);
|
||||
}
|
||||
if (comment != NULL) {
|
||||
cs_print_scroll(TEXT_X(x), TEXT_Y(line++), (CRASH_SCREEN_NUM_CHARS_X - 2), STR_COLOR_PREFIX"// %s", COLOR_RGBA32_VSC_COMMENT, comment);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -821,7 +821,7 @@ void add_reg_str(char** c, RegisterSources src, int idx, _Bool isBase) {
|
||||
#define INSN_RAW_JR_RA 0x03E00008
|
||||
#define INSN_RAW_TEQ_R0_R0 0x00000034
|
||||
|
||||
char* cs_insn_to_pseudo_c(InsnData insn) {
|
||||
char* cs_insn_to_pseudo_c(InsnData insn, const char** comment) {
|
||||
_Bool decImmediates = (cs_get_setting_val(CS_OPT_GROUP_PAGE_DISASM, CS_OPT_DISASM_IMM_FMT) == PRINT_NUM_FMT_DEC);
|
||||
char* strp = &insn_as_string[0]; // Pointer to a location inside the string.
|
||||
bzero(insn_as_string, sizeof(insn_as_string));
|
||||
@@ -835,18 +835,17 @@ char* cs_insn_to_pseudo_c(InsnData insn) {
|
||||
u8 pseudoC = info->pseudoC;
|
||||
|
||||
const char* formatStr = pseudo_c_code_formats[pseudoC];
|
||||
const char* comment = NULL;
|
||||
|
||||
if (cs_get_setting_val(CS_OPT_GROUP_PAGE_DISASM, CS_OPT_DISASM_PSEUDOINSNS)) {
|
||||
if (insn.raw == INSN_RAW_JR_RA) { // jr $ra -> "return;"
|
||||
formatStr = "r";
|
||||
comment = "goto RA";
|
||||
*comment = "goto RA";
|
||||
} else if (insn.raw == INSN_RAW_TEQ_R0_R0) { // teq $r0,$r0 -> "trap();"
|
||||
formatStr = "X(e)";
|
||||
// comment = "if (0==0)";
|
||||
// *comment = "if (0==0)";
|
||||
} else if (formatStr[0] == PSC_RA) { // "and link"
|
||||
formatStr += STRLEN(CLINK);
|
||||
comment = "RA=PC+2";
|
||||
*comment = "RA=PC+2";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -930,7 +929,7 @@ char* cs_insn_to_pseudo_c(InsnData insn) {
|
||||
u16 eA = insn.codeA;
|
||||
u16 eB = insn.codeB;
|
||||
strp += sprintf(strp, (decImmediates ? "%d, %d" : STR_HEX_PREFIX"%X, "STR_HEX_PREFIX"%X"), eA, eB);
|
||||
comment = get_name_from_null_terminated_id_list(eA, insn_break_codes);
|
||||
*comment = get_name_from_null_terminated_id_list(eA, insn_break_codes);
|
||||
} else {
|
||||
strp += sprintf(strp, immFmt, insn.codeAB);
|
||||
}
|
||||
@@ -948,9 +947,5 @@ char* cs_insn_to_pseudo_c(InsnData insn) {
|
||||
|
||||
*strp++ = ';';
|
||||
|
||||
if (comment != NULL) {
|
||||
strp += sprintf(strp, STR_COLOR_PREFIX" // %s", COLOR_RGBA32_VSC_COMMENT, comment);
|
||||
}
|
||||
|
||||
return insn_as_string;
|
||||
}
|
||||
|
||||
@@ -650,4 +650,4 @@ s16 insn_check_for_branch_offset(InsnData insn);
|
||||
Address get_insn_branch_target_from_addr(Address addr);
|
||||
char* cs_insn_to_string(Address addr, InsnData insn, const char** fname, _Bool formatting);
|
||||
|
||||
char* cs_insn_to_pseudo_c(InsnData insn);
|
||||
char* cs_insn_to_pseudo_c(InsnData insn, const char** comment);
|
||||
|
||||
Reference in New Issue
Block a user