main
z80inst.h
1/*
2 Copyright 2013 Michael Pavone
3 This file is part of BlastEm.
4 BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text.
5*/
6#ifndef Z80INST_H_
7#define Z80INST_H_
8
9#include <stdint.h>
10
11enum {
12 Z80_LD,
13 Z80_PUSH,
14 Z80_POP,
15 Z80_EX,
16 Z80_EXX,
17 Z80_LDI,
18 Z80_LDIR,
19 Z80_LDD,
20 Z80_LDDR,
21 Z80_CPI,
22 Z80_CPIR,
23 Z80_CPD,
24 Z80_CPDR,
25 Z80_ADD,
26 Z80_ADC,
27 Z80_SUB,
28 Z80_SBC,
29 Z80_AND,
30 Z80_OR,
31 Z80_XOR,
32 Z80_CP,
33 Z80_INC,
34 Z80_DEC,
35 Z80_DAA,
36 Z80_CPL,
37 Z80_NEG,
38 Z80_CCF,
39 Z80_SCF,
40 Z80_NOP,
41 Z80_HALT,
42 Z80_DI,
43 Z80_EI,
44 Z80_IM,
45 Z80_RLC,
46 Z80_RL,
47 Z80_RRC,
48 Z80_RR,
49 Z80_SLA,
50 Z80_SRA,
51 Z80_SLL,
52 Z80_SRL,
53 Z80_RLD,
54 Z80_RRD,
55 Z80_BIT,
56 Z80_SET,
57 Z80_RES,
58 Z80_JP,
59 Z80_JPCC,
60 Z80_JR,
61 Z80_JRCC,
62 Z80_DJNZ,
63 Z80_CALL,
64 Z80_CALLCC,
65 Z80_RET,
66 Z80_RETCC,
67 Z80_RETI,
68 Z80_RETN,
69 Z80_RST,
70 Z80_IN,
71 Z80_INI,
72 Z80_INIR,
73 Z80_IND,
74 Z80_INDR,
75 Z80_OUT,
76 Z80_OUTI,
77 Z80_OTIR,
78 Z80_OUTD,
79 Z80_OTDR,
80 Z80_USE_MAIN
81};
82
83enum {
84 Z80_C=0,
85 Z80_B,
86 Z80_E,
87 Z80_D,
88 Z80_L,
89 Z80_H,
90 Z80_IXL,
91 Z80_IXH,
92 Z80_IYL,
93 Z80_IYH,
94 Z80_I,
95 Z80_R,
96 Z80_A,
97 Z80_BC,
98 Z80_DE,
99 Z80_HL,
100 Z80_SP,
101 Z80_AF,
102 Z80_IX,
103 Z80_IY,
104 Z80_UNUSED
105};
106
107#define Z80_IMMED_FLAG 0x80
108#define Z80_USE_IMMED (Z80_IMMED_FLAG|Z80_UNUSED)
109
110enum {
111 Z80_CC_NZ,
112 Z80_CC_Z,
113 Z80_CC_NC,
114 Z80_CC_C,
115 Z80_CC_PO,
116 Z80_CC_PE,
117 Z80_CC_P,
118 Z80_CC_M
119};
120
121enum {
122 Z80_REG,
123 Z80_REG_INDIRECT,
124 Z80_IMMED,
125 Z80_IMMED_INDIRECT,
126 Z80_IX_DISPLACE,
127 Z80_IY_DISPLACE
128};
129#define Z80_DIR 0x80
130
131typedef struct {
132 uint8_t op;
133 uint8_t reg;
134 uint8_t addr_mode;
135 uint8_t ea_reg;
136 uint16_t immed;
137 uint16_t opcode_bytes;
138} z80inst;
139
140uint8_t * z80_decode(uint8_t * istream, z80inst * decoded);
141int z80_disasm(z80inst * decoded, char * dst, uint16_t address);
142uint8_t z80_high_reg(uint8_t reg);
143uint8_t z80_low_reg(uint8_t reg);
144uint8_t z80_word_reg(uint8_t reg);
145uint8_t z80_is_terminal(z80inst * inst);
146
147#endif //Z80INST_H_
148