1 #ifndef AVR_DISASSEMBLER_INSTRUCTIONSET_H 2 #define AVR_DISASSEMBLER_INSTRUCTIONSET_H 3 4 #include <stdint.h> 5 6 /* Total number of assembly instructions, Maximum number of operands */ 7 #define AVR_TOTAL_INSTRUCTIONS 145 8 #define AVR_MAX_NUM_OPERANDS 2 9 10 /* Enumeration for all types of AVR Operands */ 11 enum AVR_Operand_Types { 12 OPERAND_NONE, OPERAND_REGISTER_GHOST, 13 OPERAND_REGISTER, OPERAND_REGISTER_STARTR16, 14 OPERAND_REGISTER_EVEN_PAIR, OPERAND_REGISTER_EVEN_PAIR_STARTR24, 15 OPERAND_BRANCH_ADDRESS, OPERAND_RELATIVE_ADDRESS, OPERAND_LONG_ABSOLUTE_ADDRESS, 16 OPERAND_IO_REGISTER, OPERAND_DATA, OPERAND_DES_ROUND, OPERAND_COMPLEMENTED_DATA, OPERAND_BIT, OPERAND_WORD_DATA, 17 OPERAND_X, OPERAND_XP, OPERAND_MX, 18 OPERAND_Y, OPERAND_YP, OPERAND_MY, OPERAND_YPQ, 19 OPERAND_Z, OPERAND_ZP, OPERAND_MZ, OPERAND_ZPQ, 20 }; 21 22 /* Structure for each instruction in the instruction set */ 23 struct _instructionInfo { 24 char mnemonic[7]; 25 /* Bitwise AND mask for just the instruction bits */ 26 uint16_t opcodeMask; 27 int numOperands; 28 /* Bitwise AND mask for each operand in the opcode */ 29 uint16_t operandMasks[AVR_MAX_NUM_OPERANDS]; 30 int operandTypes[AVR_MAX_NUM_OPERANDS]; 31 }; 32 typedef struct _instructionInfo instructionInfo; 33 34 #endif /* AVR_DISASSEMBLER_INSTRUCTIONSET_H */