Add setting for pseudoinstructions + color fixes

This commit is contained in:
Arceveti
2023-07-24 11:38:38 -07:00
parent ed75f79ba4
commit 66fc5def65
6 changed files with 19 additions and 21 deletions

View File

@@ -257,7 +257,7 @@
#define COLOR_RGBA32_CRASH_DISASM_INSN COLOR_RGBA32_VERY_LIGHT_YELLOW
#define COLOR_RGBA32_CRASH_DISASM_NOP COLOR_RGBA32_LIGHT_GRAY
#define COLOR_RGBA32_CRASH_UNKNOWN COLOR_RGBA32_LIGHT_GRAY
#define COLOR_RGBA32_CRASH_IMMEDIATE COLOR_RGBA32_LIGHT_GREEN
#define COLOR_RGBA32_CRASH_DISASM_IMMEDIATE COLOR_RGBA32_LIGHT_GREEN
#define COLOR_RGBA32_CRASH_DISASM_REG COLOR_RGBA32_LIGHT_SKY
#define COLOR_RGBA32_CRASH_DISASM_BASE_REG COLOR_RGBA32_VERY_LIGHT_CYAN
#define COLOR_RGBA32_CRASH_FUNCTION_NAME COLOR_RGBA32_LIGHT_YELLOW
@@ -415,7 +415,7 @@
#define COLOR_RGBA_CRASH_DISASM_INST RGBA32_TO_COLORRGBA(COLOR_RGBA32_CRASH_DISASM_INSN)
#define COLOR_RGBA_CRASH_DISASM_NOP RGBA32_TO_COLORRGBA(COLOR_RGBA32_CRASH_DISASM_NOP)
#define COLOR_RGBA_CRASH_UNKNOWN RGBA32_TO_COLORRGBA(COLOR_RGBA32_CRASH_UNKNOWN)
#define COLOR_RGBA_CRASH_IMMEDIATE RGBA32_TO_COLORRGBA(COLOR_RGBA32_CRASH_IMMEDIATE)
#define COLOR_RGBA_CRASH_IMMEDIATE RGBA32_TO_COLORRGBA(COLOR_RGBA32_CRASH_DISASM_IMMEDIATE)
#define COLOR_RGBA_CRASH_DISASM_REG RGBA32_TO_COLORRGBA(COLOR_RGBA32_CRASH_DISASM_REG)
#define COLOR_RGBA_CRASH_DISASM_BASE_REG RGBA32_TO_COLORRGBA(COLOR_RGBA32_CRASH_DISASM_BASE_REG)
#define COLOR_RGBA_CRASH_FUNCTION_NAME RGBA32_TO_COLORRGBA(COLOR_RGBA32_CRASH_FUNCTION_NAME)

View File

@@ -52,9 +52,10 @@ struct CSSettingsEntry gCSSettings[NUM_CS_OPTS] = {
[CS_OPT_MEMORY_AS_ASCII ] = { .name = "Memory as ascii", .valNames = sValNames_bool, .val = TRUE, .defaultVal = TRUE, .lowerBound = FALSE, .upperBound = TRUE, },
[CS_OPT_DISASM_BINARY ] = { .name = "Unknown disasm as binary", .valNames = sValNames_bool, .val = FALSE, .defaultVal = FALSE, .lowerBound = FALSE, .upperBound = TRUE, },
[CS_OPT_PRINT_SCROLL_SPEED] = { .name = "Print overscan scroll speed", .valNames = NULL, .val = 2, .defaultVal = 2, .lowerBound = 0, .upperBound = 5, },
[CS_OPT_FLOATS_FMT ] = { .name = "Floats format", .valNames = sValNames_print_num_fmt, .val = PRINT_NUM_FMT_DEC, .defaultVal = PRINT_NUM_FMT_DEC, .lowerBound = PRINT_NUM_FMT_HEX, .upperBound = PRINT_NUM_FMT_SCI, },
[CS_OPT_DISASM_IMM_FMT ] = { .name = "Disasm immediate format", .valNames = sValNames_print_num_fmt, .val = PRINT_NUM_FMT_HEX, .defaultVal = PRINT_NUM_FMT_HEX, .lowerBound = PRINT_NUM_FMT_HEX, .upperBound = PRINT_NUM_FMT_DEC, },
[CS_OPT_BRANCH_ARROW_MODE ] = { .name = "Disasm branch arrow mode", .valNames = sValNames_branch_arrow, .val = DISASM_ARROW_MODE_FUNCTION, .defaultVal = DISASM_ARROW_MODE_FUNCTION, .lowerBound = DISASM_ARROW_MODE_OFF, .upperBound = DISASM_ARROW_MODE_OVERSCAN, }, //! TODO: Implement this
[CS_OPT_FLOATS_FMT ] = { .name = "Floats print format", .valNames = sValNames_print_num_fmt, .val = PRINT_NUM_FMT_DEC, .defaultVal = PRINT_NUM_FMT_DEC, .lowerBound = PRINT_NUM_FMT_HEX, .upperBound = PRINT_NUM_FMT_SCI, },
[CS_OPT_DISASM_PSEUDOINSNS] = { .name = "DISASM: pseudoinstructions", .valNames = sValNames_bool, .val = TRUE, .defaultVal = TRUE, .lowerBound = FALSE, .upperBound = TRUE, },
[CS_OPT_DISASM_IMM_FMT ] = { .name = "DISASM: immediate format", .valNames = sValNames_print_num_fmt, .val = PRINT_NUM_FMT_HEX, .defaultVal = PRINT_NUM_FMT_HEX, .lowerBound = PRINT_NUM_FMT_HEX, .upperBound = PRINT_NUM_FMT_DEC, },
[CS_OPT_BRANCH_ARROW_MODE ] = { .name = "DISASM: branch arrow mode", .valNames = sValNames_branch_arrow, .val = DISASM_ARROW_MODE_FUNCTION, .defaultVal = DISASM_ARROW_MODE_FUNCTION, .lowerBound = DISASM_ARROW_MODE_OFF, .upperBound = DISASM_ARROW_MODE_OVERSCAN, }, //! TODO: Implement this
};
struct CSPage gCSPages[NUM_PAGES] = {

View File

@@ -94,13 +94,13 @@ enum CSDisasmBranchArrowModes {
};
struct CSSettingsEntry {
const char name[32];
const char** valNames;
SettingsType val;
SettingsType defaultVal;
SettingsType lowerBound;
SettingsType upperBound;
};
/*0x00*/ const char name[32];
/*0x20*/ const char** valNames;
/*0x24*/ SettingsType val;
/*0x28*/ SettingsType defaultVal;
/*0x2C*/ SettingsType lowerBound;
/*0x30*/ SettingsType upperBound;
}; /*0x34*/
enum CSSettings {
CS_OPT_DRAW_CRASH_SCREEN,
@@ -110,6 +110,7 @@ enum CSSettings {
CS_OPT_DISASM_BINARY,
CS_OPT_PRINT_SCROLL_SPEED,
CS_OPT_FLOATS_FMT,
CS_OPT_DISASM_PSEUDOINSNS,
CS_OPT_DISASM_IMM_FMT,
CS_OPT_BRANCH_ARROW_MODE, //! TODO: Implement this
NUM_CS_OPTS,

View File

@@ -271,7 +271,6 @@ ALIGNED32 static const InsnTemplate insn_db_pseudo[] = {
[PSEUDO_DSUBI] = { .name = "DSUBI", .fmt = "\'tsi", .opcode = OPC_DADDI }, // Doubleword Subtract Immediate (pseudo of DADDI).
};
_Bool gEnablePseudoinstructions = TRUE;
static _Bool check_pseudo_insn(const InsnTemplate** type, enum PseudoInsns id, _Bool cond) {
if (cond) {
@@ -364,7 +363,7 @@ static enum InsnType get_insn_type_and_list(InsnData insn, const InsnTemplate**
const InsnTemplate* get_insn(InsnData insn) { //! TODO: Optimize this
const InsnTemplate* checkInsn = NULL;
if (gEnablePseudoinstructions && check_pseudo_instructions(&checkInsn, insn)) {
if (gCSSettings[CS_OPT_DISASM_PSEUDOINSNS].val && check_pseudo_instructions(&checkInsn, insn)) {
return checkInsn;
}
@@ -587,15 +586,15 @@ char* insn_disasm(InsnData insn, const char** fname, _Bool showDestNames) {
separator = TRUE;
break;
case CHAR_P_IMM:
ADD_COLOR(COLOR_RGBA32_CRASH_IMMEDIATE);
ADD_COLOR(COLOR_RGBA32_CRASH_DISASM_IMMEDIATE);
ADD_STR((decImmediates ? "%d" : STR_IMMEDIATE), insn.immediate);
break;
case CHAR_P_NIMM:
ADD_COLOR(COLOR_RGBA32_CRASH_IMMEDIATE);
ADD_COLOR(COLOR_RGBA32_CRASH_DISASM_IMMEDIATE);
ADD_STR((decImmediates ? "%d" : STR_IMMEDIATE), -(s16)insn.immediate);
break;
case CHAR_P_SHIFT:
ADD_COLOR(COLOR_RGBA32_CRASH_IMMEDIATE);
ADD_COLOR(COLOR_RGBA32_CRASH_DISASM_IMMEDIATE);
ADD_STR(STR_IMMEDIATE, insn.sa);
break;
case CHAR_P_BASE:

View File

@@ -432,9 +432,6 @@ typedef struct PACKED {
#define INSN_OFFSET(addr, offset) ((addr) + (sizeof(InsnData) * (s16)(offset)))
extern _Bool gEnablePseudoinstructions;
s16 check_for_branch_offset(InsnData insn);
Address get_branch_target_from_addr(Address addr);
char* insn_disasm(InsnData insn, const char** fname, _Bool showDestNames);

View File

@@ -68,7 +68,7 @@ void print_settings_list(u32 line, u32 numLines) {
// "[setting value]"
crash_screen_print(x, y,
(STR_COLOR_PREFIX"%-d"),
COLOR_RGBA32_CRASH_DISASM_REG, setting->val
COLOR_RGBA32_CRASH_DISASM_IMMEDIATE, setting->val
);
}