223 lines
10 KiB
C++
223 lines
10 KiB
C++
/*
|
|
* Interactive disassembler (IDA).
|
|
* Copyright (c) 1990-2021 Hex-Rays
|
|
* ALL RIGHTS RESERVED.
|
|
*
|
|
*/
|
|
|
|
#ifndef __INSTRS_HPP
|
|
#define __INSTRS_HPP
|
|
|
|
extern const instruc_t Instructions[];
|
|
|
|
enum nameNum
|
|
{
|
|
|
|
F2MC_null = 0, // Unknown Operation
|
|
|
|
// TRANSFER INSTRUCTIONS
|
|
|
|
F2MC_mov, // Move byte data from source to destination
|
|
F2MC_movn, // Move immediate nibble data to A
|
|
F2MC_movx, // Move byte data with sign extension from source to A
|
|
F2MC_xch, // Exchange byte data of source to destination
|
|
F2MC_movw, // Move word data from source to destination
|
|
F2MC_xchw, // Exchange word data of source to destination
|
|
F2MC_movl, // Move long word data from source to destination
|
|
|
|
// NUMERIC DATA OPERATIONS INSTRUCTIONS
|
|
|
|
F2MC_add, // Add byte data of destination and source to destination
|
|
F2MC_addc1, // Add byte data of AL and AH with Carry to AL
|
|
F2MC_addc2, // Add byte data of A and effective address with Carry to A
|
|
F2MC_adddc, // Add decimal data of AL and AH with Carry to AL
|
|
F2MC_sub, // Subtract byte data of source from festination to destination
|
|
F2MC_subc1, // Subtract byte data of AL from AH with Carry to AL
|
|
F2MC_subc2, // Subtract byte data of effective address from A with Carry to A
|
|
F2MC_subdc, // Subtract decimal data of AL from AH with Carry to AL
|
|
F2MC_addw1, // Add word data of AH and AL to AL
|
|
F2MC_addw2, // Add word data of destination and source to destination
|
|
F2MC_addcw, // Add word data of A and effective address from A with Carry to A
|
|
F2MC_subw1, // Subtract word data of AL from AH to AL
|
|
F2MC_subw2, // Subtract word data of source from festination to destination
|
|
F2MC_subcw, // Subtract word data of A and effective address from A with carry to A
|
|
F2MC_addl, // Add long word data of destination and source to destination
|
|
F2MC_subl, // Subtract long word data of source from festination to destination
|
|
F2MC_inc, // Increment byte data
|
|
F2MC_dec, // Decrement byte data
|
|
F2MC_incw, // Increment word data
|
|
F2MC_decw, // Decrement word data
|
|
F2MC_incl, // Increment long word data
|
|
F2MC_decl, // Decrement long word data
|
|
F2MC_cmp1, // Compare byte data of AH and AL
|
|
F2MC_cmp2, // Compare byte data of destination and source
|
|
F2MC_cmpw1, // Compare word data of AH and AL
|
|
F2MC_cmpw2, // Compare word data of destination and source
|
|
F2MC_cmpl, // Compare long word data of destination and source
|
|
F2MC_divu1, // Divide unsigned AH by AL
|
|
F2MC_divu2, // Divide unsigned word data by unsigned byte data
|
|
F2MC_divuw, // Divide unsigned long word data by unsigned word data
|
|
F2MC_mulu1, // Multiply unsigned byte AH by AL
|
|
F2MC_mulu2, // Multiply unsigned byte data
|
|
F2MC_muluw1, // Multiply unsigned word AH by AL
|
|
F2MC_muluw2, // Multiply unsigned word data
|
|
F2MC_div1, // Divide AH by AL
|
|
F2MC_div2, // Divide word data by byte data
|
|
F2MC_divw, // Divide long word data by word data
|
|
F2MC_mul1, // Multiply byte AH by AL
|
|
F2MC_mul2, // Multiply byte data
|
|
F2MC_mulw1, // Multiply word AH by AL
|
|
F2MC_mulw2, // Multiply word data
|
|
|
|
// LOGICAL DATA OPERATION INSTRUCTIONS
|
|
|
|
F2MC_and, // And byte data of destination and source to destination
|
|
F2MC_or, // Or byte data of destination and source to destination
|
|
F2MC_xor, // Exclusive or byte data of destination and source to destination
|
|
F2MC_not, // Not byte data of destination
|
|
F2MC_andw1, // And word data of AH and AL to AL
|
|
F2MC_andw2, // And word data of destination and source to destination
|
|
F2MC_orw1, // Or word data of AH and AL to AL
|
|
F2MC_orw2, // Or word data of destination and source to destination
|
|
F2MC_xorw1, // Exclusive or word data of AH and AL to AL
|
|
F2MC_xorw2, // Exclusive or word data of destination and source to destination
|
|
F2MC_notw, // Not word data of destination
|
|
F2MC_andl, // And long word data of destination and source to destination
|
|
F2MC_orl, // Or long word data of destination and source to destination
|
|
F2MC_xorl, // Exclusive or long word data of destination and source to destination
|
|
F2MC_neg, // Negate byte data of destination
|
|
F2MC_negw, // Negate word data of destination
|
|
F2MC_nrml, // Normalize long word
|
|
|
|
// SHIFT INSTRUCTIONS
|
|
|
|
F2MC_rorc, // Rotate byte data of A with Carry to right
|
|
F2MC_rolc, // Rotate byte data of A with Carry to left
|
|
F2MC_asr, // Arithmetic shift byte data of A to right
|
|
F2MC_lsr, // Logical shift byte data of A to right
|
|
F2MC_lsl, // Logical shift byte data of A to left
|
|
F2MC_asrw1, // Arithmetic shift word data of A to right
|
|
F2MC_asrw2, // Arithmetic shift word data of A to right
|
|
F2MC_lsrw1, // Logical shift word data of A to right
|
|
F2MC_lsrw2, // Logical shift word data of A to right
|
|
F2MC_lslw1, // Logical shift word data of A to left
|
|
F2MC_lslw2, // Logical shift word data of A to left
|
|
F2MC_asrl, // Arithmetic shift long word data of A to right
|
|
F2MC_lsrl, // Logical shift long word data of A to right
|
|
F2MC_lsll, // Logical shift long word data of A to left
|
|
|
|
// BRANCH INSTRUCTIONS
|
|
|
|
F2MC_bz, // Branch if Zero
|
|
F2MC_bnz, // Branch if Not Zero
|
|
F2MC_bc, // Branch if Carry
|
|
F2MC_bnc, // Branch if Not Carry
|
|
F2MC_bn, // Branch if Negative
|
|
F2MC_bp, // Branch if Not Negative
|
|
F2MC_bv, // Branch if Overflow
|
|
F2MC_bnv, // Branch if Not Overflow
|
|
F2MC_bt, // Branch if Sticky
|
|
F2MC_bnt, // Branch if Not Sticky
|
|
F2MC_blt, // Branch if Overflow or Negative
|
|
F2MC_bge, // Branch if Not (Overflow or Negative)
|
|
F2MC_ble, // Branch if (Overflow xor Negative) or Zero
|
|
F2MC_bgt, // Branch if Not ((Overflow xor Negative) or Zero)
|
|
F2MC_bls, // Branch if Carry or Zero
|
|
F2MC_bhi, // Branch if Not (Carry or Zero)
|
|
F2MC_bra, // Branch unconditionally
|
|
F2MC_jmp, // Jump destination address
|
|
F2MC_jmpp, // Jump destination physical address
|
|
F2MC_call, // Call subroutine
|
|
F2MC_callv, // Call vectored subroutine
|
|
F2MC_callp, // Call physical address
|
|
F2MC_cbne, // Compare byte data and branch if not Equal
|
|
F2MC_cwbne, // Compare word data and branch if not Equal
|
|
F2MC_dbnz, // Decrement byte data and branch if not Zero
|
|
F2MC_dwbnz, // Decrement word data and branch if not Zero
|
|
F2MC_int, // Software interrupt
|
|
F2MC_intp, // Software interrupt
|
|
F2MC_int9, // Software interrupt
|
|
F2MC_reti, // Return from interrupt
|
|
F2MC_link, // Link and create new stack frame
|
|
F2MC_unlink, // Unlink and create new stack frame
|
|
F2MC_ret, // Return from subroutine
|
|
F2MC_retp, // Return from physical address
|
|
|
|
// OTHER INSTRUCTIONS
|
|
|
|
F2MC_pushw, // Push to stack memory
|
|
F2MC_popw, // Pop from stack memory
|
|
F2MC_jctx, // Jump context
|
|
// F2MC_and,
|
|
// F2MC_or,
|
|
// F2MC_mov,
|
|
F2MC_movea, // Move effective address to destination
|
|
F2MC_addsp, // Add word data of SP and immediate data to SP
|
|
// F2MC_mov,
|
|
F2MC_nop, // No operation
|
|
F2MC_adb, // ADB register
|
|
F2MC_dtb, // DTB register
|
|
F2MC_pcb, // PCB register
|
|
F2MC_spb, // SPB register
|
|
F2MC_ncc, // Flag change inhibit
|
|
F2MC_cmr, // Common register bank
|
|
F2MC_movb, // Move bit data
|
|
F2MC_setb, // Set bit
|
|
F2MC_clrb, // Clear bit
|
|
F2MC_bbc, // Branch if bit condition satisfied
|
|
F2MC_bbs, // Branch if bit condition satisfied
|
|
F2MC_sbbs, // Set bit and branch if bit set
|
|
F2MC_wbts, // Wait until bit condition satisfied
|
|
F2MC_wbtc, // Wait until bit condition satisfied
|
|
F2MC_swap, // Swap byte data of A
|
|
F2MC_swapw, // Swap word data of A
|
|
F2MC_ext, // Sign extend from byte data to word data
|
|
F2MC_extw, // Sign extend from word data to long word data
|
|
F2MC_zext, // Zero extendfrom byte data to word data
|
|
F2MC_zextw, // Zero extendfrom word data to long word data
|
|
F2MC_movsi, // Move string byte with addresses incremented
|
|
F2MC_movsd, // Move string byte with addresses decremented
|
|
F2MC_sceqi, // Scan string byte until Equal with address incremented
|
|
F2MC_sceqd, // Scan string byte until Equal with address decremented
|
|
F2MC_filsi, // Fill string byte
|
|
F2MC_movswi, // Move string word with address incremented
|
|
F2MC_movswd, // Move string word with address decremented
|
|
F2MC_scweqi, // Scan string word until Equal with address incremented
|
|
F2MC_scweqd, // Scan string word until Equal with address decremented
|
|
F2MC_filswi, // Fill string word
|
|
|
|
// MACROS
|
|
|
|
F2MC_bz16, // Branch if Zero
|
|
F2MC_bnz16, // Branch if Not Zero
|
|
F2MC_bc16, // Branch if Carry
|
|
F2MC_bnc16, // Branch if Not Carry
|
|
F2MC_bn16, // Branch if Negative
|
|
F2MC_bp16, // Branch if Not Negative
|
|
F2MC_bv16, // Branch if Overflow
|
|
F2MC_bnv16, // Branch if Not Overflow
|
|
F2MC_bt16, // Branch if Sticky
|
|
F2MC_bnt16, // Branch if Not Sticky
|
|
F2MC_blt16, // Branch if Overflow or Negative
|
|
F2MC_bge16, // Branch if Not (Overflow or Negative)
|
|
F2MC_ble16, // Branch if (Overflow xor Negative) or Zero
|
|
F2MC_bgt16, // Branch if Not ((Overflow xor Negative) or Zero)
|
|
F2MC_bls16, // Branch if Carry or Zero
|
|
F2MC_bhi16, // Branch if Not (Carry or Zero)
|
|
|
|
F2MC_cbne16, // Compare byte data and branch if not Equal
|
|
F2MC_cwbne16, // Compare word data and branch if not Equal
|
|
|
|
F2MC_dbnz16, // Decrement byte data and branch if not Zero
|
|
F2MC_dwbnz16, // Decrement word data and branch if not Zero
|
|
|
|
F2MC_bbc16, // Branch if bit condition satisfied
|
|
F2MC_bbs16, // Branch if bit condition satisfied
|
|
F2MC_sbbs16, // Set bit and branch if bit set
|
|
|
|
F2MC_last,
|
|
|
|
};
|
|
|
|
#endif
|