summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/mc68hc11/hc11ops.h
blob: 68acf514b4b7fe18f333e5f22ec7300828fb4438 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
typedef struct _hc11_opcode_list_struct hc11_opcode_list_struct;
struct _hc11_opcode_list_struct
{
	int page;
	int opcode;
	void (*handler)(hc11_state *cpustate);
};

static const hc11_opcode_list_struct hc11_opcode_list[] =
{
	/*  page    opcode          handler                     */
	{	0,		0x1b,			HC11OP(aba)					},
	{	0,		0x3a,			HC11OP(abx)					},
	{	0x18,	0x3a,			HC11OP(aby)					},
	{	0,		0x89,			HC11OP(adca_imm)			},
	{	0,		0x99,			HC11OP(adca_dir)			},
	{	0,		0xb9,			HC11OP(adca_ext)			},
	{	0,		0xa9,			HC11OP(adca_indx)			},
	{	0x18,	0xa9,			HC11OP(adca_indy)			},
	{	0,		0xc9,			HC11OP(adcb_imm)			},
	{	0,		0xd9,			HC11OP(adcb_dir)			},
	{	0,		0xf9,			HC11OP(adcb_ext)			},
	{	0,		0xe9,			HC11OP(adcb_indx)			},
	{	0x18,	0xe9,			HC11OP(adcb_indy)			},
	{	0,		0x8b,			HC11OP(adda_imm)			},
	{	0,		0x9b,			HC11OP(adda_dir)			},
	{	0,		0xbb,			HC11OP(adda_ext)			},
	{	0,		0xab,			HC11OP(adda_indx)			},
	{	0x18,	0xab,			HC11OP(adda_indy)			},
	{	0,		0xcb,			HC11OP(addb_imm)			},
	{	0,		0xdb,			HC11OP(addb_dir)			},
	{	0,		0xfb,			HC11OP(addb_ext)			},
	{	0,		0xeb,			HC11OP(addb_indx)			},
	{	0x18,	0xeb,			HC11OP(addb_indy)			},
	{	0,		0xc3,			HC11OP(addd_imm)			},
	{	0,		0xd3,			HC11OP(addd_dir)			},
	{	0,		0xf3,			HC11OP(addd_ext)			},
	{	0,		0xe3,			HC11OP(addd_indx)			},
	{	0x18,	0xe3,			HC11OP(addd_indy)			},
	{	0,		0x84,			HC11OP(anda_imm)			},
	{	0,		0x94,			HC11OP(anda_dir)			},
	{	0,		0xb4,			HC11OP(anda_ext)			},
	{	0,		0xa4,			HC11OP(anda_indx)			},
	{	0x18,	0xa4,			HC11OP(anda_indy)			},
	{	0,		0xc4,			HC11OP(andb_imm)			},
	{	0,		0xd4,			HC11OP(andb_dir)			},
	{	0,		0xf4,			HC11OP(andb_ext)			},
	{	0,		0xe4,			HC11OP(andb_indx)			},
	{	0x18,	0xe4,			HC11OP(andb_indy)			},
	{	0,		0x48,			HC11OP(asla)				},
	{	0,		0x58,			HC11OP(aslb)				},
//	{	0,		0x78,			HC11OP(asl_ext)				},
//	{	0,		0x68,			HC11OP(asl_indx)			},
//	{	0x18,	0x68,			HC11OP(asl_indy)			},
//	{	0,		0x47,			HC11OP(asra)				},
//	{	0,		0x57,			HC11OP(asrb)				},
//	{	0,		0x77,			HC11OP(asr_ext)				},
//	{	0,		0x67,			HC11OP(asr_indx)			},
//	{	0x18,	0x67,			HC11OP(asr_indy)			},
	{	0,		0x24,			HC11OP(bcc)					},
//	{	0,		0x15,			HC11OP(bclr_dir)			},
	{	0,		0x1d,			HC11OP(bclr_indx)			},
//	{	0x18,	0x1d,			HC11OP(bclr_indy)			},
	{	0,		0x25,			HC11OP(bcs)					},
	{	0,		0x27,			HC11OP(beq)					},
//	{	0,		0x2c,			HC11OP(bge)					},
//	{	0,		0x2e,			HC11OP(bgt)					},
	{	0,		0x22,			HC11OP(bhi)					},
	{	0,		0x85,			HC11OP(bita_imm)			},
	{	0,		0x95,			HC11OP(bita_dir)			},
	{	0,		0xb5,			HC11OP(bita_ext)			},
	{	0,		0xa5,			HC11OP(bita_indx)			},
	{	0x18,	0xa5,			HC11OP(bita_indy)			},
	{	0,		0xc5,			HC11OP(bitb_imm)			},
	{	0,		0xd5,			HC11OP(bitb_dir)			},
	{	0,		0xf5,			HC11OP(bitb_ext)			},
	{	0,		0xe5,			HC11OP(bitb_indx)			},
	{	0x18,	0xe5,			HC11OP(bitb_indy)			},
	{	0,		0x2f,			HC11OP(ble)					},
	{	0,		0x23,			HC11OP(bls)					},
//	{	0,		0x2d,			HC11OP(blt)					},
	{	0,		0x2b,			HC11OP(bmi)					},
	{	0,		0x26,			HC11OP(bne)					},
	{	0,		0x2a,			HC11OP(bpl)					},
	{	0,		0x20,			HC11OP(bra)					},
	{	0,		0x13,			HC11OP(brclr_dir)			},
	{	0,		0x1f,			HC11OP(brclr_indx)			},
//	{	0x18,	0x1f,			HC11OP(brclr_indy)			},
	{	0,		0x21,			HC11OP(brn)					},
	{	0,		0x12,			HC11OP(brset_dir)			},
	{	0,		0x1e,			HC11OP(brset_indx)			},
//	{	0x18,	0x1e,			HC11OP(brset_indy)			},
//	{	0,		0x14,			HC11OP(bset_dir)			},
	{	0,		0x1c,			HC11OP(bset_indx)			},
//	{	0x18,	0x1c,			HC11OP(bset_indy)			},
	{	0,		0x8d,			HC11OP(bsr)					},
	{	0,		0x28,			HC11OP(bvc)					},
	{	0,		0x29,			HC11OP(bvs)					},
	{	0,		0x11,			HC11OP(cba)					},
	{	0,		0x0c,			HC11OP(clc)					},
	{	0,		0x0e,			HC11OP(cli)					},
	{	0,		0x4f,			HC11OP(clra)				},
	{	0,		0x5f,			HC11OP(clrb)				},
	{	0,		0x7f,			HC11OP(clr_ext)				},
	{	0,		0x6f,			HC11OP(clr_indx)			},
	{	0x18,	0x6f,			HC11OP(clr_indy)			},
	{	0,		0x0a,			HC11OP(clv)					},
	{	0,		0x81,			HC11OP(cmpa_imm)			},
	{	0,		0x91,			HC11OP(cmpa_dir)			},
	{	0,		0xb1,			HC11OP(cmpa_ext)			},
	{	0,		0xa1,			HC11OP(cmpa_indx)			},
	{	0x18,	0xa1,			HC11OP(cmpa_indy)			},
	{	0,		0xc1,			HC11OP(cmpb_imm)			},
	{	0,		0xd1,			HC11OP(cmpb_dir)			},
	{	0,		0xf1,			HC11OP(cmpb_ext)			},
	{	0,		0xe1,			HC11OP(cmpb_indx)			},
	{	0x18,	0xe1,			HC11OP(cmpb_indy)			},
	{	0,		0x43,			HC11OP(coma)				},
	{	0,		0x53,			HC11OP(comb)				},
//	{	0,		0x73,			HC11OP(com_ext)				},
//	{	0,		0x63,			HC11OP(com_indx)			},
//	{	0x18,	0x63,			HC11OP(com_indy)			},
	{	0x1a,	0x83,			HC11OP(cpd_imm)				},
	{	0x1a,	0x93,			HC11OP(cpd_dir)				},
	{	0x1a,	0xb3,			HC11OP(cpd_ext)				},
	{	0x1a,	0xa3,			HC11OP(cpd_indx)			},
	{	0xcd,	0xa3,			HC11OP(cpd_indy)			},
	{	0,		0x8c,			HC11OP(cpx_imm)				},
	{	0,		0x9c,			HC11OP(cpx_dir)				},
	{	0,		0xbc,			HC11OP(cpx_ext)				},
	{	0,		0xac,			HC11OP(cpx_indx)			},
	{	0xcd,	0xac,			HC11OP(cpx_indy)			},
	{	0x18,	0x8c,			HC11OP(cpy_imm)				},
	{	0x18,	0x9c,			HC11OP(cpy_dir)				},
	{	0x18,	0xbc,			HC11OP(cpy_ext)				},
	{	0x1a,	0xac,			HC11OP(cpy_indx)			},
	{	0x18,	0xac,			HC11OP(cpy_indy)			},
//	{	0,		0x19,			HC11OP(daa)					},
	{	0,		0x4a,			HC11OP(deca)				},
	{	0,		0x5a,			HC11OP(decb)				},
	{	0,		0x7a,			HC11OP(dec_ext)				},
	{	0,		0x6a,			HC11OP(dec_indx)			},
	{	0x18,	0x6a,			HC11OP(dec_indy)			},
//	{	0,		0x34,			HC11OP(des)					},
	{	0,		0x09,			HC11OP(dex)					},
	{	0x18,	0x09,			HC11OP(dey)					},
	{	0,		0x88,			HC11OP(eora_imm)			},
	{	0,		0x98,			HC11OP(eora_dir)			},
	{	0,		0xb8,			HC11OP(eora_ext)			},
	{	0,		0xa8,			HC11OP(eora_indx)			},
	{	0x18,	0xa8,			HC11OP(eora_indy)			},
	{	0,		0xc8,			HC11OP(eorb_imm)			},
	{	0,		0xd8,			HC11OP(eorb_dir)			},
	{	0,		0xf8,			HC11OP(eorb_ext)			},
	{	0,		0xe8,			HC11OP(eorb_indx)			},
	{	0x18,	0xe8,			HC11OP(eorb_indy)			},
//	{	0,		0x03,			HC11OP(fdiv)				},
	{	0,		0x02,			HC11OP(idiv)				},
	{	0,		0x4c,			HC11OP(inca)				},
	{	0,		0x5c,			HC11OP(incb)				},
	{	0,		0x7c,			HC11OP(inc_ext)				},
	{	0,		0x6c,			HC11OP(inc_indx)			},
	{	0x18,	0x6c,			HC11OP(inc_indy)			},
//	{	0,		0x31,			HC11OP(ins)					},
	{	0,		0x08,			HC11OP(inx)					},
	{	0x18,	0x08,			HC11OP(iny)					},
	{	0,		0x7e,			HC11OP(jmp_ext)				},
	{	0,		0x6e,			HC11OP(jmp_indx)			},
	{	0x18,	0x6e,			HC11OP(jmp_indy)			},
	{	0,		0x9d,			HC11OP(jsr_dir)				},
	{	0,		0xbd,			HC11OP(jsr_ext)				},
	{	0,		0xad,			HC11OP(jsr_indx)			},
	{	0x18,	0xad,			HC11OP(jsr_indy)			},
	{	0,		0x86,			HC11OP(ldaa_imm)			},
	{	0,		0x96,			HC11OP(ldaa_dir)			},
	{	0,		0xb6,			HC11OP(ldaa_ext)			},
	{	0,		0xa6,			HC11OP(ldaa_indx)			},
	{	0x18,	0xa6,			HC11OP(ldaa_indy)			},
	{	0,		0xc6,			HC11OP(ldab_imm)			},
	{	0,		0xd6,			HC11OP(ldab_dir)			},
	{	0,		0xf6,			HC11OP(ldab_ext)			},
	{	0,		0xe6,			HC11OP(ldab_indx)			},
	{	0x18,	0xe6,			HC11OP(ldab_indy)			},
	{	0,		0xcc,			HC11OP(ldd_imm)				},
	{	0,		0xdc,			HC11OP(ldd_dir)				},
	{	0,		0xfc,			HC11OP(ldd_ext)				},
	{	0,		0xec,			HC11OP(ldd_indx)			},
	{	0x18,	0xec,			HC11OP(ldd_indy)			},
	{	0,		0x8e,			HC11OP(lds_imm)				},
	{	0,		0x9e,			HC11OP(lds_dir)				},
	{	0,		0xbe,			HC11OP(lds_ext)				},
	{	0,		0xae,			HC11OP(lds_indx)			},
	{	0x18,	0xae,			HC11OP(lds_indy)			},
	{	0,		0xce,			HC11OP(ldx_imm)				},
	{	0,		0xde,			HC11OP(ldx_dir)				},
	{	0,		0xfe,			HC11OP(ldx_ext)				},
	{	0,		0xee,			HC11OP(ldx_indx)			},
	{	0xcd,	0xee,			HC11OP(ldx_indy)			},
	{	0x18,	0xce,			HC11OP(ldy_imm)				},
	{	0x18,	0xde,			HC11OP(ldy_dir)				},
	{	0x18,	0xfe,			HC11OP(ldy_ext)				},
	{	0x1a,	0xee,			HC11OP(ldy_indx)			},
	{	0x18,	0xee,			HC11OP(ldy_indy)			},
	{	0,		0x05,			HC11OP(lsld)				},
	{	0,		0x44,			HC11OP(lsra)				},
	{	0,		0x54,			HC11OP(lsrb)				},
//	{	0,		0x74,			HC11OP(lsr_ext)				},
//	{	0,		0x64,			HC11OP(lsr_indx)			},
//	{	0x18,	0x64,			HC11OP(lsr_indy)			},
	{	0,		0x04,			HC11OP(lsrd)				},
	{	0,		0x3d,			HC11OP(mul)					},
	{	0,		0x40,			HC11OP(nega)				},
	{	0,		0x50,			HC11OP(negb)				},
	{	0,		0x70,			HC11OP(neg_ext)				},
	{	0,		0x60,			HC11OP(neg_indx)			},
	{	0x18,	0x60,			HC11OP(neg_indy)			},
	{	0,		0x01,			HC11OP(nop)					},
	{	0,		0x8a,			HC11OP(oraa_imm)			},
	{	0,		0x9a,			HC11OP(oraa_dir)			},
	{	0,		0xba,			HC11OP(oraa_ext)			},
	{	0,		0xaa,			HC11OP(oraa_indx)			},
	{	0x18,	0xaa,			HC11OP(oraa_indy)			},
	{	0,		0xca,			HC11OP(orab_imm)			},
	{	0,		0xda,			HC11OP(orab_dir)			},
	{	0,		0xfa,			HC11OP(orab_ext)			},
	{	0,		0xea,			HC11OP(orab_indx)			},
	{	0x18,	0xea,			HC11OP(orab_indy)			},
	{	0,		0x36,			HC11OP(psha)				},
	{	0,		0x37,			HC11OP(pshb)				},
	{	0,		0x3c,			HC11OP(pshx)				},
	{	0x18,	0x3c,			HC11OP(pshy)				},
	{	0,		0x32,			HC11OP(pula)				},
	{	0,		0x33,			HC11OP(pulb)				},
	{	0,		0x38,			HC11OP(pulx)				},
	{	0x18,	0x38,			HC11OP(puly)				},
	{	0,		0x49,			HC11OP(rola)				},
	{	0,		0x59,			HC11OP(rolb)				},
//	{	0,		0x79,			HC11OP(rol_ext)				},
//	{	0,		0x69,			HC11OP(rol_indx)			},
//	{	0x18,	0x69,			HC11OP(rol_indy)			},
	{	0,		0x46,			HC11OP(rora)				},
	{	0,		0x56,			HC11OP(rorb)				},
//	{	0,		0x76,			HC11OP(ror_ext)				},
//	{	0,		0x66,			HC11OP(ror_indx)			},
//	{	0x18,	0x66,			HC11OP(ror_indy)			},
	{	0,		0x3b,			HC11OP(rti)					},
	{	0,		0x39,			HC11OP(rts)					},
	{	0,		0x10,			HC11OP(sba)					},
	{	0,		0x82,			HC11OP(sbca_imm)			},
//	{	0,		0x92,			HC11OP(sbca_dir)			},
//	{	0,		0xb2,			HC11OP(sbca_ext)			},
	{	0,		0xa2,			HC11OP(sbca_indx)			},
	{	0x18,	0xa2,			HC11OP(sbca_indy)			},
	{	0,		0xc2,			HC11OP(sbcb_imm)			},
//	{	0,		0xd2,			HC11OP(sbcb_dir)			},
//	{	0,		0xf2,			HC11OP(sbcb_ext)			},
	{	0,		0xe2,			HC11OP(sbcb_indx)			},
	{	0x18,	0xe2,			HC11OP(sbcb_indy)			},
	{	0,		0x0d,			HC11OP(sec)					},
	{	0,		0x0f,			HC11OP(sei)					},
	{	0,		0x0b,			HC11OP(sev)					},
	{	0,		0x97,			HC11OP(staa_dir)			},
	{	0,		0xb7,			HC11OP(staa_ext)			},
	{	0,		0xa7,			HC11OP(staa_indx)			},
	{	0x18,	0xa7,			HC11OP(staa_indy)			},
	{	0,		0xd7,			HC11OP(stab_dir)			},
	{	0,		0xf7,			HC11OP(stab_ext)			},
	{	0,		0xe7,			HC11OP(stab_indx)			},
	{	0x18,	0xe7,			HC11OP(stab_indy)			},
	{	0,		0xdd,			HC11OP(std_dir)				},
	{	0,		0xfd,			HC11OP(std_ext)				},
	{	0,		0xed,			HC11OP(std_indx)			},
	{	0x18,	0xed,			HC11OP(std_indy)			},
//	{	0,		0x9f,			HC11OP(sts_dir)				},
//	{	0,		0xbf,			HC11OP(sts_ext)				},
//	{	0,		0xaf,			HC11OP(sts_indx)			},
//	{	0x18,	0xaf,			HC11OP(sts_indy)			},
//	{	0,		0xdf,			HC11OP(stx_dir)				},
	{	0,		0xff,			HC11OP(stx_ext)				},
	{	0,		0xef,			HC11OP(stx_indx)			},
	{	0xcd,	0xef,			HC11OP(stx_indy)			},
//	{	0x18,	0xdf,			HC11OP(sty_dir)				},
	{	0x18,	0xff,			HC11OP(sty_ext)				},
	{	0x1a,	0xef,			HC11OP(sty_indx)			},
	{	0x18,	0xef,			HC11OP(sty_indy)			},
	{	0,		0xcf,			HC11OP(stop)				},
	{	0,		0x80,			HC11OP(suba_imm)			},
	{	0,		0x90,			HC11OP(suba_dir)			},
	{	0,		0xb0,			HC11OP(suba_ext)			},
	{	0,		0xa0,			HC11OP(suba_indx)			},
	{	0x18,	0xa0,			HC11OP(suba_indy)			},
	{	0,		0xc0,			HC11OP(subb_imm)			},
	{	0,		0xd0,			HC11OP(subb_dir)			},
	{	0,		0xf0,			HC11OP(subb_ext)			},
	{	0,		0xe0,			HC11OP(subb_indx)			},
	{	0x18,	0xe0,			HC11OP(subb_indy)			},
	{	0,		0x83,			HC11OP(subd_imm)			},
//	{	0,		0x93,			HC11OP(subd_dir)			},
//	{	0,		0xb3,			HC11OP(subd_ext)			},
	{	0,		0xa3,			HC11OP(subd_indx)			},
	{	0x18,	0xa3,			HC11OP(subd_indy)			},
	{	0,		0x3f,			HC11OP(swi)					},
	{	0,		0x16,			HC11OP(tab)					},
	{	0,		0x06,			HC11OP(tap)					},
	{	0,		0x17,			HC11OP(tba)					},
	{	0,		0x00,			HC11OP(test)				},
	{	0,		0x07,			HC11OP(tpa)					},
	{	0,		0x4d,			HC11OP(tsta)				},
	{	0,		0x5d,			HC11OP(tstb)				},
	{	0,		0x7d,			HC11OP(tst_ext)				},
	{	0,		0x6d,			HC11OP(tst_indx)			},
	{	0x18,	0x6d,			HC11OP(tst_indy)			},
	{	0,		0x30,			HC11OP(tsx)					},
	{	0x18,	0x30,			HC11OP(tsy)					},
	{	0,		0x35,			HC11OP(txs)					},
	{	0x18,	0x35,			HC11OP(tys)					},
	{	0,		0x3e,			HC11OP(wai)					},
	{	0,		0x8f,			HC11OP(xgdx)				},
	{	0x18,	0x8f,			HC11OP(xgdy)				},

	{	0,		0x18,			HC11OP(page2)				},
	{	0,		0x1a,			HC11OP(page3)				},
	{	0,		0xcd,			HC11OP(page4)				},
};