diff options
Diffstat (limited to 'z80inst.h')
-rw-r--r-- | z80inst.h | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/z80inst.h b/z80inst.h new file mode 100644 index 0000000..26ccfbc --- /dev/null +++ b/z80inst.h @@ -0,0 +1,118 @@ +#include <stdint.h> + +enum { + Z80_LD, + Z80_PUSH, + Z80_POP, + Z80_EX, + Z80_EXX, + Z80_LDI, + Z80_LDIR, + Z80_LDD, + Z80_LDDR, + Z80_CPI, + Z80_CPIR, + Z80_CPD, + Z80_CPDR, + Z80_ADD, + Z80_ADC, + Z80_SUB, + Z80_SBC, + Z80_AND, + Z80_OR, + Z80_XOR, + Z80_CP, + Z80_INC, + Z80_DEC, + Z80_DAA, + Z80_CPL, + Z80_NEG, + Z80_CCF, + Z80_SCF, + Z80_NOP, + Z80_HALT, + Z80_DI, + Z80_EI, + Z80_IM, + Z80_RLC, + Z80_RL, + Z80_RRC, + Z80_RR, + Z80_SL, + Z80_RLD, + Z80_RRD, + Z80_BIT, + Z80_SET, + Z80_RES, + Z80_JP, + Z80_JPCC, + Z80_JR, + Z80_JRCC, + Z80_DJNZ, + Z80_CALL, + Z80_CALLCC, + Z80_RET, + Z80_RETCC, + Z80_RETI, + Z80_RETN, + Z80_RST, + Z80_IN, + Z80_INI, + Z80_INIR, + Z80_INDR, + Z80_OUT, + Z80_OUTI, + Z80_OTIR, + Z80_OUTD, + Z80_OTDR +}; + +enum { + Z80_B=0, + Z80_C, + Z80_D, + Z80_E, + Z80_H, + Z80_L, + Z80_A=7, + Z80_BC, + Z80_DE, + Z80_HL, + Z80_SP, + Z80_AF, + Z80_USE_IMMED, + Z80_UNUSED +}; + +enum { + Z80_CC_NZ, + Z80_CC_Z, + Z80_CC_NC, + Z80_CC_C, + Z80_CC_PO, + Z80_CC_PE, + Z80_CC_P, + Z80_CC_M +}; + +enum { + Z80_REG, + Z80_REG_INDIRECT, + Z80_IMMED, + Z80_IMMED_INDIRECT, + Z80_REG_DISPLACE +}; +#define Z80_DIR 0x80 + +typedef struct { + uint8_t op; + uint8_t reg; + uint8_t addr_mode; + uint8_t ea_reg; + uint16_t immed; +} z80inst; + +uint8_t * z80_decode(uint8_t * istream, z80inst * decoded); +int z80_disasm(z80inst * decoded, char * dst); + + |