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 */