You've already forked HackerSM64
mirror of
https://github.com/HackerN64/HackerSM64.git
synced 2026-01-21 10:35:32 -08:00
Add setting for pseudoinstructions + color fixes
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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] = {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user