82 lines
5.2 KiB
C++
82 lines
5.2 KiB
C++
/*
|
|
* Interactive disassembler (IDA).
|
|
* Copyright (c) 1990-2000 by Ilfak Guilfanov.
|
|
* ALL RIGHTS RESERVED.
|
|
* E-mail: ig@datarescue.com
|
|
*
|
|
*
|
|
*/
|
|
|
|
#include "st7.hpp"
|
|
|
|
const instruc_t Instructions[] =
|
|
{
|
|
{ "", 0 }, // Unknown Operation
|
|
|
|
{ "adc", CF_CHG1|CF_USE1|CF_USE2 }, // Add with Carry
|
|
{ "add", CF_CHG1|CF_USE1|CF_USE2 }, // Addition
|
|
{ "and", CF_CHG1|CF_USE1|CF_USE2 }, // Logical And
|
|
{ "bcp", CF_USE1|CF_USE2 }, // Bit compare
|
|
{ "bres", CF_CHG1|CF_USE1 }, // Bit Reset
|
|
{ "bset", CF_CHG1|CF_USE1 }, // Bit Set
|
|
{ "btjf", CF_USE1|CF_USE2|CF_USE3 }, // Jump if bit is false
|
|
{ "btjt", CF_USE1|CF_USE2|CF_USE3 }, // Jump if bit is true
|
|
{ "call", CF_USE1|CF_CALL }, // Call subroutine
|
|
{ "callr", CF_USE1|CF_CALL }, // Call subroutine relative
|
|
{ "clr", CF_CHG1 }, // Clear
|
|
{ "cp", CF_USE1|CF_USE2 }, // Arithmetic Compare
|
|
{ "cpl", CF_USE1|CF_CHG1 }, // One Complement
|
|
{ "dec", CF_USE1|CF_CHG1 }, // Decrement
|
|
{ "halt", 0 }, // Halt
|
|
{ "iret", CF_STOP }, // Interrupt routine return
|
|
{ "inc", CF_USE1|CF_CHG1 }, // Increment
|
|
{ "jp", CF_USE1|CF_STOP }, // Absolute Jump
|
|
{ "jra", CF_USE1|CF_STOP }, // Jump relative always
|
|
{ "jrt", CF_USE1|CF_STOP }, // Jump relative
|
|
{ "jrf", CF_USE1 }, // Never jump
|
|
{ "jrih", CF_USE1 }, // Jump if Port INT pin = 1
|
|
{ "jril", CF_USE1 }, // Jump if Port INT pin = 0
|
|
{ "jrh", CF_USE1 }, // Jump if H = 1
|
|
{ "jrnh", CF_USE1 }, // Jump if H = 0
|
|
{ "jrm", CF_USE1 }, // Jump if I = 1
|
|
{ "jrnm", CF_USE1 }, // Jump if I = 0
|
|
{ "jrmi", CF_USE1 }, // Jump if N = 1 (minus)
|
|
{ "jrpl", CF_USE1 }, // Jump if N = 0 (plus)
|
|
{ "jreq", CF_USE1 }, // Jump if Z = 1 (equal)
|
|
{ "jrne", CF_USE1 }, // Jump if Z = 0 (not equal)
|
|
{ "jrc", CF_USE1 }, // Jump if C = 1
|
|
{ "jrnc", CF_USE1 }, // Jump if C = 0
|
|
{ "jrult", CF_USE1 }, // Jump if C = 1
|
|
{ "jruge", CF_USE1 }, // Jump if C = 0
|
|
{ "jrugt", CF_USE1 }, // Jump if ( C + Z = 0 )
|
|
{ "jrule", CF_USE1 }, // Jump if ( C + Z = 1 )
|
|
{ "ld", CF_CHG1|CF_USE2 }, // Load
|
|
{ "mul", CF_CHG1|CF_USE1|CF_USE2 }, // Multiply
|
|
{ "neg", CF_USE1|CF_CHG1 }, // Negate
|
|
{ "nop", 0 }, // No Operation
|
|
{ "or", CF_CHG1|CF_USE1|CF_USE2 }, // OR Operation
|
|
{ "pop", CF_CHG1 }, // Pop from the Stack
|
|
{ "push", CF_USE1 }, // Push onto the Stack
|
|
{ "rcf", 0 }, // Reset carry flag
|
|
{ "ret", CF_STOP }, // Subroutine Return
|
|
{ "rim", 0 }, // Enable Interrupts
|
|
{ "rlc", CF_USE1|CF_CHG1 }, // Rotate left true
|
|
{ "rrc", CF_USE1|CF_CHG1 }, // Rotate right true
|
|
{ "rsp", 0 }, // Reset Stack Pointer
|
|
{ "sbc", CF_CHG1|CF_USE1|CF_USE2 }, // Subtract with Carry
|
|
{ "scf", 0 }, // Set carry flag
|
|
{ "sim", 0 }, // Disable Interrupts
|
|
{ "sla", CF_USE1|CF_CHG1 }, // Shift left Arithmetic
|
|
{ "sll", CF_USE1|CF_CHG1 }, // Shift left Logic
|
|
{ "srl", CF_USE1|CF_CHG1 }, // Shift right Logic
|
|
{ "sra", CF_USE1|CF_CHG1 }, // Shift right Arithmetic
|
|
{ "sub", CF_CHG1|CF_USE1|CF_USE2 }, // Substraction
|
|
{ "swap", CF_USE1|CF_CHG1 }, // SWAP nibbles
|
|
{ "tnz", CF_USE1 }, // Test for Neg & Zero
|
|
{ "trap", 0 }, // S/W trap
|
|
{ "wfi", 0 }, // Wait for Interrupt
|
|
{ "xor", CF_CHG1|CF_USE1|CF_USE2 }, // Exclusive OR
|
|
};
|
|
|
|
CASSERT(qnumber(Instructions) == ST7_last);
|