update to ida 7.6, add builds
This commit is contained in:
297
idasdk76/module/m7900/ins.cpp
Normal file
297
idasdk76/module/m7900/ins.cpp
Normal file
@@ -0,0 +1,297 @@
|
||||
/*
|
||||
* Interactive disassembler (IDA).
|
||||
* Version 3.05
|
||||
* Copyright (c) 1990-95 by Ilfak Guilfanov.
|
||||
* ALL RIGHTS RESERVED.
|
||||
* FIDO: 2:5020/209
|
||||
* E-mail: ig@estar.msk.su
|
||||
*
|
||||
*/
|
||||
|
||||
#include <ida.hpp>
|
||||
#include <idp.hpp>
|
||||
#include "ins.hpp"
|
||||
|
||||
|
||||
|
||||
const instruc_t Instructions[] =
|
||||
{
|
||||
|
||||
{ "", 0 }, // Unknown Operation
|
||||
|
||||
{ "abs", CF_CHG1 }, // ABSolute
|
||||
{ "absd", CF_CHG1 }, // ABSolute at Double-word
|
||||
|
||||
{ "adc", CF_CHG1 | CF_USE2 }, // ADd with Carry
|
||||
{ "adcb", CF_CHG1 | CF_USE2 }, // ADd with Carry at Byte
|
||||
{ "adcd", CF_CHG1 | CF_USE2 }, // ADd with Carry at Double-word
|
||||
|
||||
{ "add", CF_CHG1 | CF_USE2 }, // Addition
|
||||
|
||||
{ "addb", CF_CHG1 | CF_USE2 }, // ADD at Byte
|
||||
|
||||
{ "addd", CF_CHG1 | CF_USE2 }, // ADD at Double-word
|
||||
{ "addm", CF_CHG1 | CF_USE2 }, // ADD immediate and Memory
|
||||
{ "addmb", CF_CHG1 | CF_USE2 }, // ADD immediate and Memory at Byte
|
||||
{ "addmd", CF_CHG1 | CF_USE2 }, // ADD immediate and Memory at Double-word
|
||||
{ "adds", CF_USE1 }, // ADD Stack pointer and immediate
|
||||
{ "addx", CF_USE1 }, // ADD index register X and immediate
|
||||
{ "addy", CF_USE1 }, // ADD index register Y and immediate
|
||||
|
||||
{ "and", CF_CHG1 | CF_USE2 }, // Logical AND
|
||||
{ "andb", CF_CHG1 | CF_USE2 }, // logical AND between immediate (Byte)
|
||||
{ "andm", CF_CHG1 | CF_USE2 }, // logical AND between immediate value and Memory
|
||||
{ "andmb", CF_CHG1 | CF_USE2 }, // logical AND between immediate value and Memory (Byte)
|
||||
{ "andmd", CF_CHG1 | CF_USE2 }, // logical AND between immediate value and Memory (Double word)
|
||||
|
||||
|
||||
{ "asl", CF_CHG1 }, // Arithmetic Shift to Left
|
||||
{ "asl", CF_CHG1 | CF_USE2 }, // Arithmetic Shift to Left by n bits
|
||||
{ "asld", CF_CHG1 | CF_USE2 }, // Arithmetic Shift to Left by n bits (Double word)
|
||||
|
||||
{ "asr", CF_CHG1 }, // Arithmetic Shift to Right
|
||||
{ "asr", CF_CHG1 | CF_USE2 }, // Arithmetic Shift to Right by n bits
|
||||
{ "asrd", CF_CHG1 | CF_USE2 }, // Arithmetic Shift to Right by n bits (Double word)
|
||||
|
||||
{ "bbc", CF_USE1 | CF_USE2 | CF_USE3 }, // Branch on Bit Clear
|
||||
{ "bbcb", CF_USE1 | CF_USE2 | CF_USE3 }, // Branch on Bit Clear (Byte)
|
||||
{ "bbs", CF_USE1 | CF_USE2 | CF_USE3 }, // Branch on Bit Set
|
||||
{ "bbsb", CF_USE1 | CF_USE2 | CF_USE3 }, // Branch on Bit Set (Byte)
|
||||
|
||||
{ "bcc", CF_USE1 }, // Branch on Carry Clear
|
||||
{ "bcs", CF_USE1 }, // Branch on Carry Set
|
||||
{ "beq", CF_USE1 }, // Branch on EQual
|
||||
{ "bge", CF_USE1 }, // Branch on Greater or Equal
|
||||
{ "bgt", CF_USE1 }, // Branch on Greater Than
|
||||
{ "bgtu", CF_USE1 }, // Branch on Greater Than with Unsign
|
||||
{ "ble", CF_USE1 }, // Branch on Less or Equal
|
||||
{ "bleu", CF_USE1 }, // Branch on Less Equal with Unsign
|
||||
{ "blt", CF_USE1 }, // Branch on Less Than
|
||||
{ "bmi", CF_USE1 }, // Branch on result MInus
|
||||
{ "bne", CF_USE1 }, // Branch on Not Equal
|
||||
{ "bpl", CF_USE1 }, // Branch on result PLus
|
||||
{ "bra", CF_USE1 | CF_JUMP | CF_STOP }, // BRanch Always
|
||||
{ "bral", CF_USE1 | CF_JUMP | CF_STOP }, // BRanch Always
|
||||
|
||||
{ "brk", 0 }, // run int 0xFFFA
|
||||
|
||||
{ "bsc", CF_USE1 | CF_USE2 | CF_USE3 }, // Branch on Single bit Clear
|
||||
{ "bsr", CF_USE1 | CF_CALL }, // Branch to SubRoutine
|
||||
{ "bss", CF_USE1 | CF_USE2 | CF_USE3 }, // Branch on Single bit Set
|
||||
|
||||
{ "bvc", CF_USE1 }, // Branch on oVerflow Clear
|
||||
{ "bvs", CF_USE1 }, // Branch on oVerflow Set
|
||||
|
||||
{ "cbeq", CF_USE1 | CF_USE2 | CF_USE3 }, // Compare immediate and Branch on EQual
|
||||
{ "cbeqb", CF_USE1 | CF_USE2 | CF_USE3 }, // Compare immediate and Branch on EQual at Byte
|
||||
{ "cbne", CF_USE1 | CF_USE2 | CF_USE3 }, // Compare immediate and Branch on Not Equal
|
||||
{ "cbneb", CF_USE1 | CF_USE2 | CF_USE3 }, // Compare immediate and Branch on Not Equal at Byte
|
||||
|
||||
{ "clc", 0 }, // CLear Carry flag
|
||||
{ "cli", 0 }, // CLear Interrupt disable status
|
||||
{ "clm", 0 }, // CLear M flag
|
||||
{ "clp", CF_USE1 }, // CLear Processor status
|
||||
|
||||
{ "clr", CF_CHG1 }, // CLeaR accumulator
|
||||
{ "clrb", CF_CHG1 }, // CLeaR accumulator at Byte
|
||||
{ "clrm", CF_CHG1 }, // CLeaR Memory
|
||||
{ "clrmb", CF_CHG1 }, // CLeaR Memory at Byte
|
||||
{ "clrx", 0 }, // CLeaR index register X
|
||||
{ "clry", 0 }, // CLeaR index register Y
|
||||
|
||||
{ "clv", 0 }, // CLear oVerflow flag
|
||||
|
||||
{ "cmp", CF_USE1 | CF_USE2 }, // CoMPare
|
||||
{ "cmpb", CF_USE1 | CF_USE2 }, // CoMPare at Byte
|
||||
{ "cmpd", CF_USE1 | CF_USE2 }, // CoMPare at Double-word
|
||||
{ "cmpm", CF_USE1 | CF_USE2 }, // CoMPare immediate with Memory
|
||||
{ "cmpmb", CF_USE1 | CF_USE2 }, // CoMPare immediate with Memory at Byte
|
||||
{ "cmpmd", CF_USE1 | CF_USE2 }, // CoMPare immediate with Memory at Double-word
|
||||
|
||||
{ "cpx", CF_USE1 }, // ComPare memory and index register X
|
||||
{ "cpy", CF_USE1 }, // ComPare memory and index register Y
|
||||
|
||||
{ "debne", CF_USE1 | CF_USE2 | CF_USE3 }, // DEcrement memory and Branch on Not Equal
|
||||
|
||||
{ "dec", CF_CHG1 }, // DECrement by one
|
||||
{ "dex", 0 }, // DEcrement index register X by one
|
||||
{ "dey", 0 }, // DEcrement index register Y by one
|
||||
|
||||
{ "div", CF_USE1 }, // DIVide unsigned
|
||||
{ "divs", CF_USE1 }, // DIVide with Sign
|
||||
{ "dxbne", CF_USE1 | CF_USE2 }, // Decrement index register X and Branch on Not Equal
|
||||
{ "dybne", CF_USE1 | CF_USE2 }, // Decrement index register Y and Branch on Not Equal
|
||||
|
||||
{ "eor", CF_CHG1 | CF_USE2 }, // Exclusive OR memory with accumulator
|
||||
{ "eorb", CF_CHG1 | CF_USE2 }, // Exclusive OR immediate with accumulator at Byte
|
||||
{ "eorm", CF_CHG1 | CF_USE2 }, // Exclusive OR immediate with Memory
|
||||
{ "eormb", CF_CHG1 | CF_USE2 }, // Exclusive OR immediate with Memory at Byte
|
||||
{ "eormd", CF_CHG1 | CF_USE2 }, // Exclusive OR immediate with Memory at Double-word
|
||||
|
||||
{ "exts", CF_CHG1 }, // EXTension Sign
|
||||
{ "extsd", CF_CHG1 }, // EXTension Sign at Double-word
|
||||
{ "extz", CF_CHG1 }, // EXTension Zero
|
||||
{ "extzd", CF_CHG1 }, // EXTension Zero at Double-word
|
||||
|
||||
{ "inc", CF_CHG1 }, // INCrement by one
|
||||
{ "inx", 0 }, // INcrement index register X by one
|
||||
{ "iny", 0 }, // INcrement index register y by one
|
||||
|
||||
{ "jmp", CF_USE1 | CF_JUMP | CF_STOP }, // JuMP16
|
||||
{ "jmpl", CF_USE1 | CF_JUMP | CF_STOP }, // Jump24
|
||||
|
||||
{ "jsr", CF_USE1 | CF_CALL }, // Jump to SubRoutine16
|
||||
{ "jsrl", CF_USE1 | CF_CALL }, // Jump to SubRoutine24
|
||||
|
||||
|
||||
{ "lda", CF_CHG1 | CF_USE2 }, // LoaD Accumulator from memory
|
||||
{ "ldab", CF_CHG1 | CF_USE2 }, // LoaD Accumulator from memory at Byte
|
||||
{ "ldad", CF_CHG1 | CF_USE2 }, // LoaD Accumulator from memory at Double-word
|
||||
{ "ldd", CF_USE1 | CF_USE2 | CF_USE3 | CF_USE4 | CF_USE5 }, // LoaD immediate to Direct page register n
|
||||
|
||||
{ "ldt", CF_USE1 }, // LoaD immediate to DaTa bank register
|
||||
{ "ldx", CF_USE1 }, // LoaD index register X from memory
|
||||
{ "ldxb", CF_USE1 }, // LoaD index register X from memory at Byte
|
||||
{ "ldy", CF_USE1 }, // LoaD index register Y from memory
|
||||
{ "ldyb", CF_USE1 }, // LoaD index register Y from memory at Byte
|
||||
|
||||
{ "lsr", CF_CHG1 }, // Logical Shift Right
|
||||
{ "lsr", CF_USE2 | CF_CHG1 }, // Logical n bits Shift Right
|
||||
{ "lsrd", CF_USE2 | CF_CHG1 }, // Logical n bits Shift Right at Double-word
|
||||
|
||||
{ "movm", CF_USE2 | CF_CHG1 }, // MOVe Memory to memory
|
||||
{ "movmb", CF_USE2 | CF_CHG1 }, // MOVe Memory to memory at Byte
|
||||
{ "movr", CF_USE1 | CF_HLL }, // MOVe Repeat memory to memory
|
||||
{ "movrb", CF_USE1 | CF_HLL }, // MOVe Repeat memory to memory at Byte
|
||||
|
||||
{ "mpy", CF_USE1 }, // MultiPlY
|
||||
{ "mpys", CF_USE1 }, // MultiPlY with Sign
|
||||
|
||||
{ "mvn", CF_USE1 | CF_USE2 }, // MoVe Negative
|
||||
{ "mvp", CF_USE1 | CF_USE2 }, // MoVe Positive
|
||||
|
||||
{ "neg", CF_CHG1 }, // NEGative
|
||||
{ "negd", CF_CHG1 }, // NEGative at Double-word
|
||||
{ "nop", 0 }, // No OPeration
|
||||
|
||||
|
||||
{ "ora", CF_CHG1 | CF_USE2 }, // OR memory with Accumulator
|
||||
{ "orab", CF_CHG1 | CF_USE2 }, // OR immediate with Accumulator at Byte
|
||||
{ "oram", CF_CHG1 | CF_USE2 }, // OR immediAte with Memory
|
||||
{ "oramb", CF_CHG1 | CF_USE2 }, // OR immediAte with Memory at Byte
|
||||
{ "oramd", CF_CHG1 | CF_USE2 }, // OR immediAte with Memory at Double-word
|
||||
|
||||
|
||||
{ "pea", CF_USE1 }, // Push Effective Address
|
||||
{ "pei", CF_USE1 }, // Push Effective Indirect address
|
||||
{ "per", CF_USE1 }, // Push Effective program counter Relative address
|
||||
{ "pha", 0 }, // PusH accumulator A on stack
|
||||
{ "phb", 0 }, // PusH accumulator B on stack
|
||||
{ "phd", 0 }, // PusH Direct page register on stack
|
||||
{ "phd", CF_USE1 }, // PusH Direct page register n on stack
|
||||
{ "phg", 0 }, // PusH proGram bank register on stack
|
||||
|
||||
{ "phld", CF_USE1 | CF_HLL }, // PusH dpr n to stack and Load immediate to Dpr n
|
||||
|
||||
{ "php", 0 }, // PusH Processor status on stack
|
||||
{ "pht", 0 }, // PusH daTa bank register on stack
|
||||
{ "phx", 0 }, // PusH index register X on stack
|
||||
{ "phy", 0 }, // PusH index register Y on stack
|
||||
|
||||
{ "pla", 0 }, // PuLl accumulator A from stack
|
||||
{ "plb", 0 }, // PuLl accumulator B from stack
|
||||
{ "pld", 0 }, // PuLl Direct page register from stack
|
||||
{ "pld", CF_USE1 }, // PuLl Direct page register n from stack
|
||||
{ "plp", 0 }, // PuLl Processor status from stack
|
||||
{ "plt", 0 }, // PuLl daTa bank register from stack
|
||||
{ "plx", 0 }, // PuLl index register X from stack
|
||||
{ "ply", 0 }, // PuLl index register Y from stack
|
||||
|
||||
{ "psh", CF_USE1 }, // PuSH
|
||||
{ "pul", CF_USE1 }, // PuLl
|
||||
|
||||
{ "rla", CF_USE1 }, // Rotate Left accumulator A
|
||||
{ "rmpa", CF_USE1 }, // Repeat Multiply and Accumulate
|
||||
|
||||
{ "rol", CF_CHG1 }, // ROtate one bit Left
|
||||
{ "rol", CF_USE2 | CF_CHG1 }, // n bits ROtate Left
|
||||
{ "rold", CF_USE2 | CF_CHG1 }, // n bits ROtate Left at Double-word
|
||||
|
||||
{ "ror", CF_CHG1 }, // ROtate one bit Right
|
||||
{ "ror", CF_USE2 | CF_CHG1 }, // n bits ROtate Right
|
||||
{ "rord", CF_USE2 | CF_CHG1 }, // n bits ROtate Right at Double-word
|
||||
|
||||
{ "rti", CF_STOP }, // Return from Interrupt
|
||||
{ "rtl", CF_STOP }, // ReTurn from subroutine Long
|
||||
{ "rtld", CF_USE1 | CF_STOP }, // ReTurn from subroutine Long and pull Direct page register n
|
||||
{ "rts", CF_STOP }, // ReTurn from Subroutine
|
||||
{ "rtsd", CF_USE1 | CF_STOP }, // ReTurn from Subroutine and pull Direct page register n
|
||||
|
||||
|
||||
{ "sbc", CF_USE1 | CF_USE2 }, // SuBtract with Carry
|
||||
{ "sbcb", CF_USE1 | CF_USE2 }, // SuBtract with Carry at Byte
|
||||
{ "sbcd", CF_USE1 | CF_USE2 }, // SuBtract with Carry at Double-word
|
||||
|
||||
|
||||
{ "sec", 0 }, // SEt Carry flag
|
||||
{ "sei", 0 }, // SEt Interrupt disable status
|
||||
{ "sem", 0 }, // SEt M flag
|
||||
{ "sep", CF_USE1 }, // SEt Processor status
|
||||
|
||||
|
||||
{ "sta", CF_CHG2 | CF_USE1 }, // STore Accumulator in memory
|
||||
{ "stab", CF_CHG2 | CF_USE1 }, // STore Accumulator in memory at Byte
|
||||
{ "stad", CF_CHG2 | CF_USE1 }, // STore Accumulator in memory at Double-word
|
||||
|
||||
{ "stp", 0 }, // SToP
|
||||
|
||||
{ "stx", CF_CHG1 }, // STore index register X in memory
|
||||
{ "sty", CF_CHG1 }, // STore index register Y in memory
|
||||
|
||||
{ "sub", CF_CHG1 | CF_USE2 }, // SUBtract
|
||||
{ "subb", CF_CHG1 | CF_USE2 }, // SUBtract at Byte
|
||||
{ "subd", CF_CHG1 | CF_USE2 }, // SUBtract at Double-word
|
||||
{ "subm", CF_CHG1 | CF_USE2 }, // SUBtract immediate from Memory
|
||||
{ "submb", CF_CHG1 | CF_USE2 }, // SUBtract immediate from Memory at Byte
|
||||
{ "submd", CF_CHG1 | CF_USE2 }, // SUBtract immediate from Memory at Double-word
|
||||
|
||||
{ "subs", CF_USE1 }, // SUBtract Stack pointer
|
||||
{ "subx", CF_USE1 }, // SUBtract immediate from index register X
|
||||
{ "suby", CF_USE1 }, // SUBtract immediate from index register Y
|
||||
|
||||
{ "tad", CF_USE1 }, // Transfer accumulator A to Direct page register n
|
||||
|
||||
{ "tas", 0 }, // Transfer accumulator A to Stack pointer
|
||||
{ "tax", 0 }, // Transfer accumulator A to index register X
|
||||
{ "tay", 0 }, // Transfer accumulator A to index register Y
|
||||
|
||||
{ "tbd", CF_USE1 }, // Transfer accumulator B to Direct page register n
|
||||
|
||||
{ "tbs", 0 }, // Transfer accumulator B to Stack pointer
|
||||
{ "tbx", 0 }, // Transfer accumulator B to index register X
|
||||
{ "tby", 0 }, // Transfer accumulator B to index register Y
|
||||
|
||||
{ "tda", CF_USE1 }, // Transfer Direct page register n to accumulator A
|
||||
{ "tdb", CF_USE1 }, // Transfer Direct page register n to accumulator B
|
||||
|
||||
{ "tds", 0 }, // Transfer Direct page register to Stack pointer
|
||||
{ "tsa", 0 }, // Transfer Stack pointer to accumulator A
|
||||
{ "tsb", 0 }, // Transfer Stack pointer to accumulator B
|
||||
|
||||
{ "tsd", 0 }, // Transfer Stack pointer to Direct page register
|
||||
{ "tsx", 0 }, // Transfer Stack pointer to index register X
|
||||
{ "txa", 0 }, // Transfer index register X to accumulator A
|
||||
{ "txb", 0 }, // Transfer index register X to accumulator B
|
||||
{ "txs", 0 }, // Transfer index register X to Stack pointer
|
||||
{ "txy", 0 }, // Transfer index register X to Y
|
||||
{ "tya", 0 }, // Transfer index register Y to accumulator A
|
||||
{ "tyb", 0 }, // Transfer index register Y to accumulator B
|
||||
{ "tyx", 0 }, // Transfer index register Y to X
|
||||
|
||||
{ "wit", CF_STOP }, // WaIT
|
||||
|
||||
{ "xab", 0 }, // eXchange accumulator A and B
|
||||
|
||||
};
|
||||
|
||||
CASSERT(qnumber(Instructions) == m7900_last);
|
||||
Reference in New Issue
Block a user