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

68 lines
3.3 KiB
C++

/*
* Interactive disassembler (IDA).
* Zilog Z8 module
*
*/
#include <ida.hpp>
#include <idp.hpp>
#include "ins.hpp"
const instruc_t Instructions[] =
{
{ "", 0 }, // Unknown Operation
{ "adc", CF_USE2|CF_USE1|CF_CHG1 }, // Add with carry
{ "add", CF_USE2|CF_USE1|CF_CHG1 }, // Add
{ "and", CF_USE2|CF_USE1|CF_CHG1 }, // Logical AND
{ "call", CF_USE1|CF_CALL }, // Call procedure
{ "ccf", 0 }, // Complement carry flag
{ "clr", CF_CHG1 }, // Clear
{ "com", CF_USE1|CF_CHG1 }, // Complement
{ "cp", CF_USE2|CF_USE1 }, // Compare
{ "da", CF_USE1|CF_CHG1 }, // Decimal adjust
{ "dec", CF_USE1|CF_CHG1 }, // Decrement
{ "decw", CF_USE1|CF_CHG1 }, // Decrement word
{ "di", 0 }, // Disable interrupts
{ "djnz", CF_USE2|CF_USE1|CF_CHG1 }, // Decrement and jump if non-zero
{ "ei", 0 }, // Enable interrupts
{ "halt", 0 }, // Enter HALT mode
{ "inc", CF_USE1|CF_CHG1 }, // Increment
{ "incw", CF_USE1|CF_CHG1 }, // Increment word
{ "iret", CF_STOP }, // Return from interrupt
// { "jp", CF_JUMP|CF_USE1|CF_STOP }, // Indirect jump
{ "jp", CF_USE1|CF_STOP }, // Unconditional jump
{ "jp", CF_USE2 }, // Conditional jump
{ "jr", CF_USE1|CF_STOP }, // Relative jump
{ "jr", CF_USE2 }, // Conditional relative jump
{ "ld", CF_USE2|CF_USE1|CF_CHG1 }, // Load data
{ "ldc", CF_USE2|CF_USE1|CF_CHG1 }, // Load constant
{ "ldci", CF_USE2|CF_USE1|CF_CHG1 }, // Load constant with auto-increment
{ "lde", CF_USE2|CF_USE1|CF_CHG1 }, // Load external data
{ "ldei", CF_USE2|CF_USE1|CF_CHG1 }, // Load external data with auto-increment
{ "nop", 0 }, // NOP
{ "or", CF_USE2|CF_USE1|CF_CHG1 }, // Logical OR
{ "pop", CF_CHG1 }, // Pop
{ "push", CF_USE1 }, // Push
{ "rcf", 0 }, // Reset carry flag
{ "ret", CF_STOP }, // Return
{ "rl", CF_SHFT|CF_USE1|CF_CHG1 }, // Rotate left
{ "rlc", CF_SHFT|CF_USE1|CF_CHG1 }, // Rotate left through carry
{ "rr", CF_SHFT|CF_USE1|CF_CHG1 }, // Rotate right
{ "rrc", CF_SHFT|CF_USE1|CF_CHG1 }, // Rotate right through carry
{ "sbc", CF_USE2|CF_USE1|CF_CHG1 }, // Subtract with carry
{ "scf", 0 }, // Set carry flag
{ "sra", CF_SHFT|CF_USE1|CF_CHG1 }, // Shift right arithmetic
{ "srp", CF_USE1 }, // Set register pointer
{ "stop", CF_STOP }, // Enter STOP mode
{ "sub", CF_USE2|CF_USE1|CF_CHG1 }, // Subtract
{ "swap", CF_USE1|CF_CHG1 }, // Swap nibbles
{ "tm", CF_USE2|CF_USE1 }, // Test under mask
{ "tcm", CF_USE2|CF_USE1 }, // Test complement under mask
{ "xor", CF_USE2|CF_USE1|CF_CHG1 }, // Logical EXCLUSIVE OR
{ "wdh", 0 }, // Enable WATCH-DOG in HALT mode
{ "wdt", 0 } // Clear WATCH-DOG timer
};
CASSERT(sizeof(Instructions)/sizeof(Instructions[0]) == Z8_last);