Files
2021-10-31 21:20:46 +02:00

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);