Mercurial > repos > blastem
diff z80inst.h @ 199:69585e7d474f
Add initial stab at Z80 decoder and disassembler
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 20 Jan 2013 19:11:24 -0800 |
parents | |
children | d3066ceb29d1 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/z80inst.h Sun Jan 20 19:11:24 2013 -0800 @@ -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); + +