1 #ifndef R2_EBC_DISAS_H 2 #define R2_EBC_DISAS_H 3 4 #include <stdint.h> 5 6 #define EBC_OPCODE_MASK 0x3F 7 #define EBC_MODIFIER_MASK 0xC0 8 #define EBC_OPERAND1_MASK 0x07 9 #define EBC_OPERAND2_MASK (0x07 << 4) 10 #define EBC_OPERAND1_DIRECT 0x08 11 #define EBC_OPERAND2_DIRECT 0xA0 12 #define EBC_OPERAND1_INDX 0x01 13 #define EBC_OPERAND2_INDX 0x02 14 15 #define EBC_GET_OPCODE(byte) (byte & EBC_OPCODE_MASK) 16 17 #define EBC_INSTR_MAXLEN 32 18 #define EBC_OPERANDS_MAXLEN 32 19 20 #define EBC_NTH_BIT(n) (1ULL << n) 21 #define EBC_N_BIT_MASK(n) (~(~0U << (n))) 22 #define EBC_GET_BIT(v,n) ((v >> n) & 1) 23 24 #define TEST_BIT(x,n) (x & (1 << n)) 25 26 enum ebc_opcodes { 27 EBC_BREAK = 0x00, 28 EBC_JMP = 0x01, 29 EBC_JMP8 = 0x02, 30 EBC_CALL = 0x03, 31 EBC_RET = 0x04, 32 EBC_CMPEQ = 0x05, 33 EBC_CMPLTE = 0x06, 34 EBC_CMPGTE = 0x07, 35 EBC_CMPULTE = 0x08, 36 EBC_CMPUGTE = 0x09, 37 EBC_NOT = 0x0A, 38 EBC_NEG = 0x0B, 39 EBC_ADD = 0x0C, 40 EBC_SUB = 0x0D, 41 EBC_MUL = 0x0E, 42 EBC_MULU = 0x0F, 43 EBC_DIV = 0x10, 44 EBC_DIVU = 0x11, 45 EBC_MOD = 0x12, 46 EBC_MODU = 0x13, 47 EBC_AND = 0x14, 48 EBC_OR = 0x15, 49 EBC_XOR = 0x16, 50 EBC_SHL = 0x17, 51 EBC_SHR = 0x18, 52 EBC_ASHR = 0x19, 53 EBC_EXTNDB = 0x1A, 54 EBC_EXTNDW = 0x1B, 55 EBC_EXTNDD = 0x1C, 56 EBC_MOVBW = 0x1D, 57 EBC_MOVWW = 0x1E, 58 EBC_MOVDW = 0x1F, 59 EBC_MOVQW = 0x20, 60 EBC_MOVBD = 0x21, 61 EBC_MOVWD = 0x22, 62 EBC_MOVDD = 0x23, 63 EBC_MOVQD = 0x24, 64 EBC_MOVSNW = 0x25, 65 EBC_MOVSND = 0x26, 66 EBC_UNDEFINED = 0x27, 67 EBC_MOVQQ = 0x28, 68 EBC_LOADSP = 0x29, 69 EBC_STORESP = 0x2A, 70 EBC_PUSH = 0x2B, 71 EBC_POP = 0x2C, 72 EBC_CMPIEQ = 0x2D, 73 EBC_CMPILTE = 0x2E, 74 EBC_CMPIGTE = 0x2F, 75 EBC_CMPIULTE = 0x30, 76 EBC_CMPIUGTE = 0x31, 77 EBC_MOVNW = 0x32, 78 EBC_MOVND = 0x33, 79 EBC_UNDEFINED2 = 0x34, 80 EBC_PUSHN = 0x35, 81 EBC_POPN = 0x36, 82 EBC_MOVI = 0x37, 83 EBC_MOVIN = 0x38, 84 EBC_MOVREL = 0x39, 85 EBC_COMMAND_NUM 86 }; 87 88 89 typedef struct ebc_command { 90 char instr[EBC_INSTR_MAXLEN]; 91 char operands[EBC_OPERANDS_MAXLEN]; 92 } ebc_command_t; 93 94 int ebc_decode_command(const uint8_t *instr, ebc_command_t *cmd); 95 96 #endif /* EBC_DISAS_H */ 97