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