1 |
3 |
hharte |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
2 |
|
|
// //
|
3 |
|
|
// file name: opcodes.v //
|
4 |
|
|
// description: opcode parameters for z80 //
|
5 |
|
|
// project: wb_z80 //
|
6 |
|
|
// //
|
7 |
|
|
// Author: B.J. Porcella //
|
8 |
|
|
// e-mail: bporcella@sbcglobal.net //
|
9 |
|
|
// //
|
10 |
|
|
// //
|
11 |
|
|
// //
|
12 |
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
13 |
|
|
// //
|
14 |
|
|
// Copyright (C) 2000-2002 B.J. Porcella //
|
15 |
|
|
// Real Time Solutions //
|
16 |
|
|
// //
|
17 |
|
|
// //
|
18 |
|
|
// This source file may be used and distributed without //
|
19 |
|
|
// restriction provided that this copyright statement is not //
|
20 |
|
|
// removed from the file and that any derivative work contains //
|
21 |
|
|
// the original copyright notice and the associated disclaimer. //
|
22 |
|
|
// //
|
23 |
|
|
// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY //
|
24 |
|
|
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED //
|
25 |
|
|
// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS //
|
26 |
|
|
// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR //
|
27 |
|
|
// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, //
|
28 |
|
|
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES //
|
29 |
|
|
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE //
|
30 |
|
|
// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR //
|
31 |
|
|
// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF //
|
32 |
|
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT //
|
33 |
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT //
|
34 |
|
|
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE //
|
35 |
|
|
// POSSIBILITY OF SUCH DAMAGE. //
|
36 |
|
|
// //
|
37 |
|
|
//-------1---------2---------3--------Comments on file -------------7---------8---------9--------0
|
38 |
|
|
// This file is fundamentally a hack of an opcode file found on:
|
39 |
|
|
// http://www.z80.info/ (perhaps written by Thomas Scherrer)
|
40 |
|
|
//
|
41 |
|
|
// The purpose of the origiional file was to aid in low level z80 software debug.
|
42 |
|
|
// Here, we are trying to make the parameters we use for instruction decoding
|
43 |
|
|
// as easy to understand as possible.
|
44 |
|
|
//
|
45 |
|
|
// The origional file is included as a comment below. (this is a very long file)
|
46 |
|
|
// It is then re-produced with transformations -- so the significance of the parameters should
|
47 |
|
|
// be very clear.
|
48 |
|
|
//
|
49 |
|
|
// Note how assembler syntax is transformed
|
50 |
|
|
// into verilog symbols.
|
51 |
|
|
//
|
52 |
|
|
//
|
53 |
|
|
// I'm going to define all parameters as standard integer length as they will be used
|
54 |
|
|
// in comparisons of various lengths..............
|
55 |
|
|
// generally 8 bits, but there is 3 bit extension that may apply to any parameter...
|
56 |
|
|
// 0
|
57 |
|
|
// 1 CBgrp (shifts and Bit banging)
|
58 |
|
|
// 2 DDgrp (mostly indexed addressing)
|
59 |
|
|
// 3 DDCBgrp (indexed bit banging)
|
60 |
|
|
// 3 EDgrp (a wild mix of stuff )
|
61 |
|
|
// 4 FDgrp (more indexed stuff )
|
62 |
|
|
// 5 FDCBgrp (indexed bit banging)
|
63 |
|
|
//
|
64 |
|
|
//
|
65 |
|
|
//-------1---------2---------3--------CVS Log -----------------------7---------8---------9--------0
|
66 |
|
|
//
|
67 |
|
|
// $Id: opcodes.v,v 1.1 2008-12-01 02:00:10 hharte Exp $
|
68 |
|
|
//
|
69 |
|
|
// $Date: 2008-12-01 02:00:10 $
|
70 |
|
|
// $Revision: 1.1 $
|
71 |
|
|
// $Author: hharte $
|
72 |
|
|
// $Locker: $
|
73 |
|
|
// $State: Exp $
|
74 |
|
|
//
|
75 |
|
|
// Change History:
|
76 |
|
|
// $Log: not supported by cvs2svn $
|
77 |
|
|
// Revision 1.4 2004/05/27 14:23:36 bporcella
|
78 |
|
|
// Instruction test (with interrupts) runs!!!
|
79 |
|
|
//
|
80 |
|
|
// Revision 1.3 2004/05/21 02:51:25 bporcella
|
81 |
|
|
// inst test got to the worked macro
|
82 |
|
|
//
|
83 |
|
|
// Revision 1.2 2004/05/18 22:31:20 bporcella
|
84 |
|
|
// instruction test getting to final stages
|
85 |
|
|
//
|
86 |
|
|
// Revision 1.1 2004/04/17 18:26:06 bporcella
|
87 |
|
|
// put this here to try an end-run around lint mikefile problem
|
88 |
|
|
//
|
89 |
|
|
// Revision 1.1.1.1 2004/04/13 23:47:56 bporcella
|
90 |
|
|
// import first files
|
91 |
|
|
//
|
92 |
|
|
//
|
93 |
|
|
//
|
94 |
|
|
//-------1---------2---------3--------Comments on file -------------7---------8---------9--------0
|
95 |
|
|
//
|
96 |
|
|
parameter NOP = 10'h00,// NOP ; 00
|
97 |
|
|
LDsBC_NN = 10'h01,// LD BC,NN ; 01 XX XX
|
98 |
|
|
LDs6BC7_A = 10'h02,// LD (BC),A ; 02
|
99 |
|
|
INCsBC = 10'h03,// INC BC ; 03
|
100 |
|
|
INCsB = 10'h04,// INC B ; 04
|
101 |
|
|
DECsB = 10'h05,// DEC B ; 05
|
102 |
|
|
LDsB_N = 10'h06,// LD B,N ; 06 XX
|
103 |
|
|
RLCA = 10'h07,// RLCA ; 07
|
104 |
|
|
EXsAF_AFp = 10'h08,// EX AF,AF' ; 08
|
105 |
|
|
ADDsHL_BC = 10'h09,// ADD HL,BC ; 09
|
106 |
|
|
LDsA_6BC7 = 10'h0A,// LD A,(BC) ; 0A
|
107 |
|
|
DECsBC = 10'h0B,// DEC BC ; 0B
|
108 |
|
|
INCsC = 10'h0C,// INC C ; 0C
|
109 |
|
|
DECsC = 10'h0D,// DEC C ; 0D
|
110 |
|
|
LDsC_N = 10'h0E,// LD C,N ; 0E XX
|
111 |
|
|
RRCA = 10'h0F,// RRCA ; 0F
|
112 |
|
|
DJNZs$t2 = 10'h10,// DJNZ $+2 ; 10 XX
|
113 |
|
|
LDsDE_NN = 10'h11,// LD DE,NN ; 11 XX XX
|
114 |
|
|
LDs6DE7_A = 10'h12,// LD (DE),A ; 12
|
115 |
|
|
INCsDE = 10'h13,// INC DE ; 13
|
116 |
|
|
INCsD = 10'h14,// INC D ; 14
|
117 |
|
|
DECsD = 10'h15,// DEC D ; 15
|
118 |
|
|
LDsD_N = 10'h16,// LD D,N ; 16 XX
|
119 |
|
|
RLA = 10'h17,// RLA ; 17
|
120 |
|
|
JRs$t2 = 10'h18,// JR $+2 ; 18 XX
|
121 |
|
|
ADDsHL_DE = 10'h19,// ADD HL,DE ; 19
|
122 |
|
|
LDsA_6DE7 = 10'h1A,// LD A,(DE) ; 1A
|
123 |
|
|
DECsDE = 10'h1B,// DEC DE ; 1B
|
124 |
|
|
INCsE = 10'h1C,// INC E ; 1C
|
125 |
|
|
DECsE = 10'h1D,// DEC E ; 1D
|
126 |
|
|
LDsE_N = 10'h1E,// LD E,N ; 1E XX
|
127 |
|
|
RRA = 10'h1F,// RRA ; 1F
|
128 |
|
|
JRsNZ_$t2 = 10'h20,// JR NZ,$+2 ; 20
|
129 |
|
|
LDsHL_NN = 10'h21,// LD HL,NN ; 21 XX XX
|
130 |
|
|
LDs6NN7_HL = 10'h22,// LD (NN),HL ; 22 XX XX
|
131 |
|
|
INCsHL = 10'h23,// INC HL ; 23
|
132 |
|
|
INCsH = 10'h24,// INC H ; 24
|
133 |
|
|
DECsH = 10'h25,// DEC H ; 25
|
134 |
|
|
LDsH_N = 10'h26,// LD H,N ; 26 XX
|
135 |
|
|
DAA = 10'h27,// DAA ; 27
|
136 |
|
|
JRsZ_$t2 = 10'h28,// JR Z,$+2 ; 28 XX
|
137 |
|
|
ADDsHL_HL = 10'h29,// ADD HL,HL ; 29
|
138 |
|
|
LDsHL_6NN7 = 10'h2A,// LD HL,(NN) ; 2A XX XX
|
139 |
|
|
DECsHL = 10'h2B,// DEC HL ; 2B
|
140 |
|
|
INCsL = 10'h2C,// INC L ; 2C
|
141 |
|
|
DECsL = 10'h2D,// DEC L ; 2D
|
142 |
|
|
LDsL_N = 10'h2E,// LD L,N ; 2E XX
|
143 |
|
|
CPL = 10'h2F,// CPL ; 2F
|
144 |
|
|
JRsNC_$t2 = 10'h30,// JR NC,$+2 ; 30 XX
|
145 |
|
|
LDsSP_NN = 10'h31,// LD SP,NN ; 31 XX XX
|
146 |
|
|
LDs6NN7_A = 10'h32,// LD (NN),A ; 32 XX XX
|
147 |
|
|
INCsSP = 10'h33,// INC SP ; 33
|
148 |
|
|
INCs6HL7 = 10'h34,// INC (HL) ; 34
|
149 |
|
|
DECs6HL7 = 10'h35,// DEC (HL) ; 35
|
150 |
|
|
LDs6HL7_N = 10'h36,// LD (HL),N ; 36 XX
|
151 |
|
|
SCF = 10'h37,// SCF ; 37
|
152 |
|
|
JRsC_$t2 = 10'h38,// JR C,$+2 ; 38 XX
|
153 |
|
|
ADDsHL_SP = 10'h39,// ADD HL,SP ; 39
|
154 |
|
|
LDsA_6NN7 = 10'h3A,// LD A,(NN) ; 3A XX XX
|
155 |
|
|
DECsSP = 10'h3B,// DEC SP ; 3B
|
156 |
|
|
INCsA = 10'h3C,// INC A ; 3C
|
157 |
|
|
DECsA = 10'h3D,// DEC A ; 3D
|
158 |
|
|
LDsA_N = 10'h3E,// LD A,N ; 3E XX
|
159 |
|
|
CCF = 10'h3F,// CCF ; 3F
|
160 |
|
|
LDsB_B = 10'h40,// LD B,B ; 40
|
161 |
|
|
LDsB_C = 10'h41,// LD B,C ; 41
|
162 |
|
|
LDsB_D = 10'h42,// LD B,D ; 42
|
163 |
|
|
LDsB_E = 10'h43,// LD B,E ; 43
|
164 |
|
|
LDsB_H = 10'h44,// LD B,H ; 44
|
165 |
|
|
LDsB_L = 10'h45,// LD B,L ; 45
|
166 |
|
|
LDsB_6HL7 = 10'h46,// LD B,(HL) ; 46
|
167 |
|
|
LDsB_A = 10'h47,// LD B,A ; 47
|
168 |
|
|
LDsC_B = 10'h48,// LD C,B ; 48
|
169 |
|
|
LDsC_C = 10'h49,// LD C,C ; 49
|
170 |
|
|
LDsC_D = 10'h4A,// LD C,D ; 4A
|
171 |
|
|
LDsC_E = 10'h4B,// LD C,E ; 4B
|
172 |
|
|
LDsC_H = 10'h4C,// LD C,H ; 4C
|
173 |
|
|
LDsC_L = 10'h4D,// LD C,L ; 4D
|
174 |
|
|
LDsC_6HL7 = 10'h4E,// LD C,(HL) ; 4E
|
175 |
|
|
LDsC_A = 10'h4F,// LD C,A ; 4F
|
176 |
|
|
LDsD_B = 10'h50,// LD D,B ; 50
|
177 |
|
|
LDsD_C = 10'h51,// LD D,C ; 51
|
178 |
|
|
LDsD_D = 10'h52,// LD D,D ; 52
|
179 |
|
|
LDsD_E = 10'h53,// LD D,E ; 53
|
180 |
|
|
LDsD_H = 10'h54,// LD D,H ; 54
|
181 |
|
|
LDsD_L = 10'h55,// LD D,L ; 55
|
182 |
|
|
LDsD_6HL7 = 10'h56,// LD D,(HL) ; 56
|
183 |
|
|
LDsD_A = 10'h57,// LD D,A ; 57
|
184 |
|
|
LDsE_B = 10'h58,// LD E,B ; 58
|
185 |
|
|
LDsE_C = 10'h59,// LD E,C ; 59
|
186 |
|
|
LDsE_D = 10'h5A,// LD E,D ; 5A
|
187 |
|
|
LDsE_E = 10'h5B,// LD E,E ; 5B
|
188 |
|
|
LDsE_H = 10'h5C,// LD E,H ; 5C
|
189 |
|
|
LDsE_L = 10'h5D,// LD E,L ; 5D
|
190 |
|
|
LDsE_6HL7 = 10'h5E,// LD E,(HL) ; 5E
|
191 |
|
|
LDsE_A = 10'h5F,// LD E,A ; 5F
|
192 |
|
|
LDsH_B = 10'h60,// LD H,B ; 60
|
193 |
|
|
LDsH_C = 10'h61,// LD H,C ; 61
|
194 |
|
|
LDsH_D = 10'h62,// LD H,D ; 62
|
195 |
|
|
LDsH_E = 10'h63,// LD H,E ; 63
|
196 |
|
|
LDsH_H = 10'h64,// LD H,H ; 64
|
197 |
|
|
LDsH_L = 10'h65,// LD H,L ; 65
|
198 |
|
|
LDsH_6HL7 = 10'h66,// LD H,(HL) ; 66
|
199 |
|
|
LDsH_A = 10'h67,// LD H,A ; 67
|
200 |
|
|
LDsL_B = 10'h68,// LD L,B ; 68
|
201 |
|
|
LDsL_C = 10'h69,// LD L,C ; 69
|
202 |
|
|
LDsL_D = 10'h6A,// LD L,D ; 6A
|
203 |
|
|
LDsL_E = 10'h6B,// LD L,E ; 6B
|
204 |
|
|
LDsL_H = 10'h6C,// LD L,H ; 6C
|
205 |
|
|
LDsL_L = 10'h6D,// LD L,L ; 6D
|
206 |
|
|
LDsL_6HL7 = 10'h6E,// LD L,(HL) ; 6E
|
207 |
|
|
LDsL_A = 10'h6F,// LD L,A ; 6F
|
208 |
|
|
LDs6HL7_B = 10'h70,// LD (HL),B ; 70
|
209 |
|
|
LDs6HL7_C = 10'h71,// LD (HL),C ; 71
|
210 |
|
|
LDs6HL7_D = 10'h72,// LD (HL),D ; 72
|
211 |
|
|
LDs6HL7_E = 10'h73,// LD (HL),E ; 73
|
212 |
|
|
LDs6HL7_H = 10'h74,// LD (HL),H ; 74
|
213 |
|
|
LDs6HL7_L = 10'h75,// LD (HL),L ; 75
|
214 |
|
|
HALT = 10'h76,// HALT ; 76
|
215 |
|
|
LDs6HL7_A = 10'h77,// LD (HL),A ; 77
|
216 |
|
|
LDsA_B = 10'h78,// LD A,B ; 78
|
217 |
|
|
LDsA_C = 10'h79,// LD A,C ; 79
|
218 |
|
|
LDsA_D = 10'h7A,// LD A,D ; 7A
|
219 |
|
|
LDsA_E = 10'h7B,// LD A,E ; 7B
|
220 |
|
|
LDsA_H = 10'h7C,// LD A,H ; 7C
|
221 |
|
|
LDsA_L = 10'h7D,// LD A,L ; 7D
|
222 |
|
|
LDsA_6HL7 = 10'h7E,// LD A,(HL) ; 7E
|
223 |
|
|
LDsA_A = 10'h7F,// LD A,A ; 7F
|
224 |
|
|
ADDsA_B = 10'h80,// ADD A,B ; 80
|
225 |
|
|
ADDsA_C = 10'h81,// ADD A,C ; 81
|
226 |
|
|
ADDsA_D = 10'h82,// ADD A,D ; 82
|
227 |
|
|
ADDsA_E = 10'h83,// ADD A,E ; 83
|
228 |
|
|
ADDsA_H = 10'h84,// ADD A,H ; 84
|
229 |
|
|
ADDsA_L = 10'h85,// ADD A,L ; 85
|
230 |
|
|
ADDsA_6HL7 = 10'h86,// ADD A,(HL) ; 86
|
231 |
|
|
ADDsA_A = 10'h87,// ADD A,A ; 87
|
232 |
|
|
ADCsA_B = 10'h88,// ADC A,B ; 88
|
233 |
|
|
ADCsA_C = 10'h89,// ADC A,C ; 89
|
234 |
|
|
ADCsA_D = 10'h8A,// ADC A,D ; 8A
|
235 |
|
|
ADCsA_E = 10'h8B,// ADC A,E ; 8B
|
236 |
|
|
ADCsA_H = 10'h8C,// ADC A,H ; 8C
|
237 |
|
|
ADCsA_L = 10'h8D,// ADC A,L ; 8D
|
238 |
|
|
ADCsA_6HL7 = 10'h8E,// ADC A,(HL) ; 8E
|
239 |
|
|
ADCsA_A = 10'h8F,// ADC A,A ; 8F
|
240 |
|
|
SUBsB = 10'h90,// SUB B ; 90
|
241 |
|
|
SUBsC = 10'h91,// SUB C ; 91
|
242 |
|
|
SUBsD = 10'h92,// SUB D ; 92
|
243 |
|
|
SUBsE = 10'h93,// SUB E ; 93
|
244 |
|
|
SUBsH = 10'h94,// SUB H ; 94
|
245 |
|
|
SUBsL = 10'h95,// SUB L ; 95
|
246 |
|
|
SUBs6HL7 = 10'h96,// SUB (HL) ; 96
|
247 |
|
|
SUBsA = 10'h97,// SUB A ; 97
|
248 |
|
|
SBCsB = 10'h98,// SBC B ; 98
|
249 |
|
|
SBCsC = 10'h99,// SBC C ; 99
|
250 |
|
|
SBCsD = 10'h9A,// SBC D ; 9A
|
251 |
|
|
SBCsE = 10'h9B,// SBC E ; 9B
|
252 |
|
|
SBCsH = 10'h9C,// SBC H ; 9C
|
253 |
|
|
SBCsL = 10'h9D,// SBC L ; 9D
|
254 |
|
|
SBCs6HL7 = 10'h9E,// SBC (HL) ; 9E
|
255 |
|
|
SBCsA = 10'h9F,// SBC A ; 9F
|
256 |
|
|
ANDsB = 10'hA0,// AND B ; A0
|
257 |
|
|
ANDsC = 10'hA1,// AND C ; A1
|
258 |
|
|
ANDsD = 10'hA2,// AND D ; A2
|
259 |
|
|
ANDsE = 10'hA3,// AND E ; A3
|
260 |
|
|
ANDsH = 10'hA4,// AND H ; A4
|
261 |
|
|
ANDsL = 10'hA5,// AND L ; A5
|
262 |
|
|
ANDs6HL7 = 10'hA6,// AND (HL) ; A6
|
263 |
|
|
ANDsA = 10'hA7,// AND A ; A7
|
264 |
|
|
XORsB = 10'hA8,// XOR B ; A8
|
265 |
|
|
XORsC = 10'hA9,// XOR C ; A9
|
266 |
|
|
XORsD = 10'hAA,// XOR D ; AA
|
267 |
|
|
XORsE = 10'hAB,// XOR E ; AB
|
268 |
|
|
XORsH = 10'hAC,// XOR H ; AC
|
269 |
|
|
XORsL = 10'hAD,// XOR L ; AD
|
270 |
|
|
XORs6HL7 = 10'hAE,// XOR (HL) ; AE
|
271 |
|
|
XORsA = 10'hAF,// XOR A ; AF
|
272 |
|
|
ORsB = 10'hB0,// OR B ; B0
|
273 |
|
|
ORsC = 10'hB1,// OR C ; B1
|
274 |
|
|
ORsD = 10'hB2,// OR D ; B2
|
275 |
|
|
ORsE = 10'hB3,// OR E ; B3
|
276 |
|
|
ORsH = 10'hB4,// OR H ; B4
|
277 |
|
|
ORsL = 10'hB5,// OR L ; B5
|
278 |
|
|
ORs6HL7 = 10'hB6,// OR (HL) ; B6
|
279 |
|
|
ORsA = 10'hB7,// OR A ; B7
|
280 |
|
|
CPsB = 10'hB8,// CP B ; B8
|
281 |
|
|
CPsC = 10'hB9,// CP C ; B9
|
282 |
|
|
CPsD = 10'hBA,// CP D ; BA
|
283 |
|
|
CPsE = 10'hBB,// CP E ; BB
|
284 |
|
|
CPsH = 10'hBC,// CP H ; BC
|
285 |
|
|
CPsL = 10'hBD,// CP L ; BD
|
286 |
|
|
CPs6HL7 = 10'hBE,// CP (HL) ; BE
|
287 |
|
|
CPsA = 10'hBF,// CP A ; BF
|
288 |
|
|
RETsNZ = 10'hC0,// RET NZ ; C0
|
289 |
|
|
POPsBC = 10'hC1,// POP BC ; C1
|
290 |
|
|
JPsNZ = 10'hC2,// JP NZ ; C2 XX XX
|
291 |
|
|
JP = 10'hC3,// JP ; C3 XX XX
|
292 |
|
|
CALLsNZ_NN = 10'hC4,// CALL NZ,NN ; C4 XX XX
|
293 |
|
|
PUSHsBC = 10'hC5,// PUSH BC ; C5
|
294 |
|
|
ADDsA_N = 10'hC6,// ADD A,N ; C6 XX
|
295 |
|
|
RSTs0 = 10'hC7,// RST 0 ; C7
|
296 |
|
|
RETsZ = 10'hC8,// RET Z ; C8
|
297 |
|
|
RET = 10'hC9,// RET ; C9
|
298 |
|
|
JPsZ = 10'hCA,// JP Z ; CA XX XX
|
299 |
|
|
CALLsZ_NN = 10'hCC,// CALL Z,NN ; CC XX XX
|
300 |
|
|
CBgrp = 10'hCB,// CBgrp is rotates and bit munging below
|
301 |
|
|
CALLsNN = 10'hCD,// CALL NN ; CD XX XX
|
302 |
|
|
ADCsA_N = 10'hCE,// ADC A,N ; CE XX
|
303 |
|
|
RSTs8H = 10'hCF,// RST 8H ; CF
|
304 |
|
|
RETsNC = 10'hD0,// RET NC ; D0
|
305 |
|
|
POPsDE = 10'hD1,// POP DE ; D1
|
306 |
|
|
JPsNC = 10'hD2,// JP NC, ; D2 XX XX
|
307 |
|
|
OUTs6N7_A = 10'hD3,// OUT (N),A ; D3 XX
|
308 |
|
|
CALLsNC_NN = 10'hD4,// CALL NC,NN ; D4 XX XX
|
309 |
|
|
PUSHsDE = 10'hD5,// PUSH DE ; D5
|
310 |
|
|
SUBsN = 10'hD6,// SUB N ; D6 XX
|
311 |
|
|
RSTs10H = 10'hD7,// RST 10H ; D7
|
312 |
|
|
RETsC = 10'hD8,// RET C ; D8
|
313 |
|
|
EXX = 10'hD9,// EXX ; D9
|
314 |
|
|
JPsC = 10'hDA,// JP C ; DA XX XX
|
315 |
|
|
INsA_6N7 = 10'hDB,// IN A,(N) ; DB XX
|
316 |
|
|
CALLsC_NN = 10'hDC,// CALL C,NN ; DC XX XX
|
317 |
|
|
DDgrp = 10'hDD,// DDgrp
|
318 |
|
|
SBCsA_N = 10'hDE,// SBC A,N ; DE XX
|
319 |
|
|
RSTs18H = 10'hDF,// RST 18H ; DF
|
320 |
|
|
RETsPO = 10'hE0,// RET PO ; E0
|
321 |
|
|
POPsHL = 10'hE1,// POP HL ; E1
|
322 |
|
|
JPsPO = 10'hE2,// JP PO ; E2 XX XX
|
323 |
|
|
EXs6SP7_HL = 10'hE3,// EX (SP),HL ; E3
|
324 |
|
|
CALLsPO_NN = 10'hE4,// CALL PO,NN ; E4 XX XX
|
325 |
|
|
PUSHsHL = 10'hE5,// PUSH HL ; E5
|
326 |
|
|
ANDsN = 10'hE6,// AND N ; E6 XX
|
327 |
|
|
RSTs20H = 10'hE7,// RST 20H ; E7
|
328 |
|
|
RETsPE = 10'hE8,// RET PE ; E8
|
329 |
|
|
JPsHL = 10'hE9,// JP HL ; E9 // documented as indirect IS NOT
|
330 |
|
|
JPsPE = 10'hEA,// JP PE, ; EA XX XX
|
331 |
|
|
EXsDE_HL = 10'hEB,// EX DE,HL ; EB
|
332 |
|
|
CALLsPE_NN = 10'hEC,// CALL PE,NN ; EC XX XX
|
333 |
|
|
EDgrp = 10'hED,// EDgrp ED
|
334 |
|
|
XORsN = 10'hEE,// XOR N ; EE XX
|
335 |
|
|
RSTs28H = 10'hEF,// RST 28H ; EF
|
336 |
|
|
RETsP = 10'hF0,// RET P ; F0
|
337 |
|
|
POPsAF = 10'hF1,// POP AF ; F1
|
338 |
|
|
JPsP = 10'hF2,// JP P ; F2 XX XX
|
339 |
|
|
DI = 10'hF3,// DI ; F3
|
340 |
|
|
CALLsP_NN = 10'hF4,// CALL P,NN ; F4 XX XX
|
341 |
|
|
PUSHsAF = 10'hF5,// PUSH AF ; F5
|
342 |
|
|
ORsN = 10'hF6,// OR N ; F6 XX
|
343 |
|
|
RSTs30H = 10'hF7,// RST 30H ; F7
|
344 |
|
|
RETsM = 10'hF8,// RET M ; F8
|
345 |
|
|
LDsSP_HL = 10'hF9,// LD SP,HL ; F9
|
346 |
|
|
JPsM = 10'hFA,// JP M, ; FA XX XX
|
347 |
|
|
EI = 10'hFB,// EI ; FB
|
348 |
|
|
CALLsM_NN = 10'hFC,// CALL M,NN ; FC XX XX
|
349 |
|
|
FDgrp = 10'hFD,// FDgrp FD
|
350 |
|
|
CPsN = 10'hFE,// CP N ; FE XX
|
351 |
|
|
RSTs38H = 10'hFF,// RST 38H ; FF
|
352 |
|
|
|
353 |
|
|
// the CB set
|
354 |
|
|
// These have enough structure that I don't believe I will define a parameter for each
|
355 |
|
|
// First cut below
|
356 |
|
|
CB_RLC = 7'b01_00_000, // these must be compaired with ir[9:3]
|
357 |
|
|
CB_RRC = 7'b01_00_001, // these must be compaired with ir[9:3]
|
358 |
|
|
CB_RL = 7'b01_00_010, // these must be compaired with ir[9:3]
|
359 |
|
|
CB_RR = 7'b01_00_011, // these must be compaired with ir[9:3]
|
360 |
|
|
CB_SLA = 7'b01_00_100, // these must be compaired with ir[9:3]
|
361 |
|
|
CB_SRA = 7'b01_00_101, // these must be compaired with ir[9:3]
|
362 |
|
|
CB_SLL = 7'b01_00_110, // these must be compaired with ir[9:3]
|
363 |
|
|
CB_SRL = 7'b01_00_111, // these must be compaired with ir[9:3]
|
364 |
|
|
|
365 |
|
|
CB_BIT = 4'b01_01, // these must be compaired with ir[9:6]
|
366 |
|
|
CB_RES = 4'b01_10, // these must be compaired with ir[9:6]
|
367 |
|
|
CB_SET = 4'b01_11, // these must be compaired with ir[9:6]
|
368 |
|
|
|
369 |
|
|
CB_MEM = 3'b110, // this must be compaired with ir[2:0]
|
370 |
|
|
// note these are all read-modify-writ except CB_BIT
|
371 |
|
|
|
372 |
|
|
// The ED Group
|
373 |
|
|
// These are the "unique instructions in the 46, 47 rows that NEED? to be implemented
|
374 |
|
|
// Not sure I want to worry about all undocumented stuff in these rows - hard to believe
|
375 |
|
|
// It will matter.(IM modes are very system dependent - hard to believe even a programmer
|
376 |
|
|
// would use undocumented instructions to muck with this stuff)
|
377 |
|
|
ED_IMs0 = 10'h246, // IM 0 ; ED 46 set IM0
|
378 |
|
|
ED_LDsI_A = 10'h247, // LD I,A ; ED 47 move a to I
|
379 |
|
|
ED_IMs1 = 10'h256, // IM 1 ; ED 56 set IM1
|
380 |
|
|
ED_LDsA_I = 10'h257, // LD A,I ; ED 57 move I to A
|
381 |
|
|
ED_IMs2 = 10'h25E, // IM 2 ; ED 5E set IM2
|
382 |
|
|
ED_RRD = 10'h267, // RRD ; ED 67 nibble roates A (HL)
|
383 |
|
|
ED_RLD = 10'h26F, // RLD ; ED 6F nibble roates A (HL)
|
384 |
|
|
|
385 |
|
|
|
386 |
|
|
ED_LDI = 10'h2A0, // LDI ; ED A0 These are block move
|
387 |
|
|
ED_CPI = 10'h2A1, // CPI ; ED A1 type insts that don't repeat
|
388 |
|
|
ED_INI = 10'h2A2, // INI ; ED A2
|
389 |
|
|
ED_OUTI = 10'h2A3, // OUTI ; ED A3
|
390 |
|
|
ED_LDD = 10'h2A8, // LDD ; ED A8
|
391 |
|
|
ED_CPD = 10'h2A9, // CPD ; ED A9
|
392 |
|
|
ED_IND = 10'h2AA, // IND ; ED AA
|
393 |
|
|
ED_OUTD = 10'h2AB, // OUTD ; ED AB
|
394 |
|
|
ED_LDIR = 10'h2B0, // LDIR ; ED B0 These are block move
|
395 |
|
|
ED_CPIR = 10'h2B1, // CPIR ; ED B1 type insts that DO repeat
|
396 |
|
|
ED_INIR = 10'h2B2, // INIR ; ED B2
|
397 |
|
|
ED_OTIR = 10'h2B3, // OTIR ; ED B3
|
398 |
|
|
ED_LDDR = 10'h2B8, // LDDR ; ED B8
|
399 |
|
|
ED_CPDR = 10'h2B9, // CPDR ; ED B9
|
400 |
|
|
ED_INDR = 10'h2BA, // INDR ; ED BA
|
401 |
|
|
ED_OTDR = 10'h2BB, // OTDR ; ED BB
|
402 |
|
|
|
403 |
|
|
// the ED gropu definitions from 40 to 7f from document on undocumented insts.....
|
404 |
|
|
//
|
405 |
|
|
// ED40 IN B,(C) ED50 IN D,(C) ED60 IN H,(C) ED70 IN (C) / IN F,(C)
|
406 |
|
|
// ED41 OUT (C),B ED51 OUT (C),D ED61 OUT (C),H ED71 OUT (C),0*
|
407 |
|
|
// ED42 SBC HL,BC ED52 SBC HL,DE ED62 SBC HL,HL ED72 SBC HL,SP
|
408 |
|
|
// ED43 LD (nn),BC ED53 LD (nn),DE ED63 LD (nn),HL ED73 LD (nn),SP
|
409 |
|
|
// ED44 NEG ED54 NEG* ED64 NEG* ED74 NEG*
|
410 |
|
|
// ED45 RETN ED55 RETN* ED65 RETN* ED75 RETN*
|
411 |
|
|
// ED46 IM 0 ED56 IM 1 ED66 IM 0* ED76 IM 1*
|
412 |
|
|
// ED47 LD I,A ED57 LD A,I ED67 RRD ED77 NOP*
|
413 |
|
|
|
414 |
|
|
// ED48 IN C,(C) ED58 IN E,(C) ED68 IN L,(C) ED78 IN A,(C)
|
415 |
|
|
// ED49 OUT (C),C ED59 OUT (C),E ED69 OUT (C),L ED79 OUT (C),A
|
416 |
|
|
// ED4A ADC HL,BC ED5A ADC HL,DE ED6A ADC HL,HL ED7A ADC HL,SP
|
417 |
|
|
// ED4B LD BC,(nn) ED5B LD DE,(nn) ED6B LD HL,(nn) ED7B LD SP,(nn)
|
418 |
|
|
// ED4C NEG* ED5C NEG* ED6C NEG* ED7C NEG*
|
419 |
|
|
// ED4D RETI ED5D RETN* ED6D RETN* ED7D RETN*
|
420 |
|
|
// ED4E IM 0* ED5E IM 2 ED6E IM 0* ED7E IM 2*
|
421 |
|
|
// ED4F LD R,A ED5F LD A,R ED6F RLD ED7F NOP*
|
422 |
|
|
|
423 |
|
|
|
424 |
|
|
//The ED70 instruction reads from I/O port C,
|
425 |
|
|
//but does not store the result.
|
426 |
|
|
//It just affects the flags. like the other IN x,(C) instruction.
|
427 |
|
|
//
|
428 |
|
|
//ED71 simply outs the value 0 to I/O port C.
|
429 |
|
|
// This suggests that we should decode as follows:
|
430 |
|
|
// I hope if I don't get all the IM duplicates right it won't be a tragedy
|
431 |
|
|
ED_INsREG_6C7 = 7'b1001___000, // compair with {ir[9:6],ir[2:0]}
|
432 |
|
|
ED_OUTs6C7_REG = 7'b1001___001, // compair with {ir[9:6],ir[2:0]}
|
433 |
|
|
ED_SBCsHL_REG = 8'b1001__0010, // compair with {ir[9:6],ir[3:0]}
|
434 |
|
|
ED_ADCsHL_REG = 8'b1001__1010, // compair with {ir[9:6],ir[3:0]}
|
435 |
|
|
ED_LDs6NN7_REG = 8'b1001__0011, // compair with {ir[9:6],ir[3:0]} REG = BC,DE,HL,SP
|
436 |
|
|
ED_LDsREG_6NN7 = 8'b1001__1011, // compair with {ir[9:6],ir[3:0]} REG = BC,DE,HL,SP
|
437 |
|
|
ED_NEG = 7'b1001___100, // compair with {ir[9:6],ir[2:0]} all A<= -A
|
438 |
|
|
ED_RETN = 7'b1001___101, // compair with {ir[9:6],ir[2:0]} and !reti
|
439 |
|
|
ED_RETI = 10'h24D,
|
440 |
|
|
|
441 |
|
|
DBL_REG_BC = 2'b00, // compair with ir[5:4]
|
442 |
|
|
DBL_REG_DE = 2'b01, // compair with ir[5:4]
|
443 |
|
|
DBL_REG_HL = 2'b10, // compair with ir[5:4]
|
444 |
|
|
DBL_REG_SP = 2'b11, // compair with ir[5:4]
|
445 |
|
|
|
446 |
|
|
REG8_B = 3'b000,
|
447 |
|
|
REG8_C = 3'b001,
|
448 |
|
|
REG8_D = 3'b010,
|
449 |
|
|
REG8_E = 3'b011,
|
450 |
|
|
REG8_H = 3'b100,
|
451 |
|
|
REG8_L = 3'b101,
|
452 |
|
|
REG8_MEM = 3'b110,
|
453 |
|
|
REG8_A = 3'b111;
|
454 |
|
|
|
455 |
|
|
|
456 |
|
|
|
457 |
|
|
|
458 |
|
|
|
459 |
|
|
|
460 |
|
|
|
461 |
|
|
|
462 |
|
|
|
463 |
|
|
|
464 |
|
|
|
465 |
|
|
|
466 |
|
|
|
467 |
|
|
|
468 |
|
|
|
469 |
|
|
|
470 |
|
|
|
471 |
|
|
|
472 |
|
|
|
473 |
|
|
|
474 |
|
|
|
475 |
|
|
|
476 |
|
|
|
477 |
|
|
|
478 |
|
|
|
479 |
|
|
|
480 |
|
|
|
481 |
|
|
|
482 |
|
|
|
483 |
|
|
|
484 |
|
|
|
485 |
|
|
|
486 |
|
|
|
487 |
|
|
|
488 |
|
|
|
489 |
|
|
|
490 |
|
|
|
491 |
|
|
|
492 |
|
|
|
493 |
|
|
|
494 |
|
|
|
495 |
|
|
|
496 |
|
|
|
497 |
|
|
|
498 |
|
|
|
499 |
|
|
|
500 |
|
|
|
501 |
|
|
|
502 |
|
|
|
503 |
|
|
|
504 |
|
|
|