summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/tms32051/32051ops.h
blob: d627d2d08f91c06686dff7c2e30585aa209fcb7f (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
static void (*const tms32051_opcode_table[256])(void) =
{
	/* 0x00 - 0x0f */
	op_lar_mem,		op_lar_mem,		op_lar_mem,		op_lar_mem,
	op_lar_mem,		op_lar_mem,		op_lar_mem,		op_lar_mem,
	op_lamm,		op_smmr,		op_subc,		op_rpt_mem,
	op_out,			op_ldp_mem,		op_lst_st0,		op_lst_st1,
	/* 0x10 - 0x1f */
	op_lacc_mem,	op_lacc_mem,	op_lacc_mem,	op_lacc_mem,
	op_lacc_mem,	op_lacc_mem,	op_lacc_mem,	op_lacc_mem,
	op_lacc_mem,	op_lacc_mem,	op_lacc_mem,	op_lacc_mem,
	op_lacc_mem,	op_lacc_mem,	op_lacc_mem,	op_lacc_mem,
	/* 0x20 - 0x2f */
	op_add_mem,		op_add_mem,		op_add_mem,		op_add_mem,
	op_add_mem,		op_add_mem,		op_add_mem,		op_add_mem,
	op_add_mem,		op_add_mem,		op_add_mem,		op_add_mem,
	op_add_mem,		op_add_mem,		op_add_mem,		op_add_mem,
	/* 0x30 - 0x3f */
	op_sub_mem,		op_sub_mem,		op_sub_mem,		op_sub_mem,
	op_sub_mem,		op_sub_mem,		op_sub_mem,		op_sub_mem,
	op_sub_mem,		op_sub_mem,		op_sub_mem,		op_sub_mem,
	op_sub_mem,		op_sub_mem,		op_sub_mem,		op_sub_mem,
	/* 0x40 - 0x4f */
	op_bit,			op_bit,			op_bit,			op_bit,
	op_bit,			op_bit,			op_bit,			op_bit,
	op_bit,			op_bit,			op_bit,			op_bit,
	op_bit,			op_bit,			op_bit,			op_bit,
	/* 0x50 - 0x5f */
	op_mpya,		op_mpys,		op_sqra,		op_sqrs,
	op_mpy_mem,		op_mpyu,		op_invalid,		op_bldp,
	op_xpl_dbmr,	op_opl_dbmr,	op_apl_dbmr,	op_cpl_dbmr,
	op_xpl_imm,		op_opl_imm,		op_apl_imm,		op_cpl_imm,
	/* 0x60 - 0x6f */
	op_addc,		op_add_s16_mem,	op_adds,		op_addt,
	op_subb,		op_sub_s16_mem,	op_subs,		op_subt,
	op_zalr,		op_lacl_mem,	op_lacc_s16_mem,op_lact,
	op_xor_mem,		op_or_mem,		op_and_mem,		op_bitt,
	/* 0x70 - 0x7f */
	op_lta,			op_ltp,			op_ltd,			op_lt,
	op_lts,			op_lph,			op_pshd,		op_dmov,
	op_adrk,		op_b,			op_call,		op_banz,
	op_sbrk,		op_bd,			op_calld,		op_banzd,
	/* 0x80 - 0x8f */
	op_sar,			op_sar,			op_sar,			op_sar,
	op_sar,			op_sar,			op_sar,			op_sar,
	op_samm,		op_lmmr,		op_popd,		op_mar,
	op_spl,			op_sph,			op_sst_st0,		op_sst_st1,
	/* 0x90 - 0x9f */
	op_sacl,		op_sacl,		op_sacl,		op_sacl,
	op_sacl,		op_sacl,		op_sacl,		op_sacl,
	op_sach,		op_sach,		op_sach,		op_sach,
	op_sach,		op_sach,		op_sach,		op_sach,
	/* 0xa0 - 0xaf */
	op_norm,		op_invalid,		op_mac,			op_macd,
	op_blpd_bmar,	op_blpd_imm,	op_tblr,		op_tblw,
	op_bldd_slimm,	op_bldd_dlimm,	op_mads,		op_madd,
	op_bldd_sbmar,	op_bldd_dbmar,	op_splk,		op_in,
	/* 0xb0 - 0xbf */
	op_lar_simm,	op_lar_simm,	op_lar_simm,	op_lar_simm,
	op_lar_simm,	op_lar_simm,	op_lar_simm,	op_lar_simm,
	op_add_simm,	op_lacl_simm,	op_sub_simm,	op_rpt_simm,
	op_ldp_imm,		op_ldp_imm,		op_group_be,	op_group_bf,
	/* 0xc0 - 0xcf */
	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,
	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,
	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,
	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,
	/* 0xd0 - 0xdf */
	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,
	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,
	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,
	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,	op_mpy_simm,
	/* 0xe0 - 0xef */
	op_bcnd,		op_bcnd,		op_bcnd,		op_bcnd,
	op_xc,			op_xc,			op_xc,			op_xc,
	op_cc,			op_cc,			op_cc,			op_cc,
	op_retc,		op_retc,		op_retc,		op_retc,
	/* 0xf0 - 0xff */
	op_bcndd,		op_bcndd,		op_bcndd,		op_bcndd,
	op_xc,			op_xc,			op_xc,			op_xc,
	op_ccd,			op_ccd,			op_ccd,			op_ccd,
	op_retcd,		op_retcd,		op_retcd,		op_retcd
};

static void (*const tms32051_opcode_table_be[256])(void) =
{
	/* 0x00 - 0x0f */
	op_abs,			op_cmpl,		op_neg,			op_pac,
	op_apac,		op_spac,		op_invalid,		op_invalid,
	op_invalid,		op_sfl,			op_sfr,			op_invalid,
	op_rol,			op_ror,			op_invalid,		op_invalid,
	/* 0x10 - 0x1f */
	op_addb,		op_adcb,		op_andb,		op_orb,
	op_rolb,		op_rorb,		op_sflb,		op_sfrb,
	op_sbb,			op_sbbb,		op_xorb,		op_crgt,
	op_crlt,		op_exar,		op_sacb,		op_lacb,
	/* 0x20 - 0x2f */
	op_bacc,		op_baccd,		op_idle,		op_idle2,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0x30 - 0x3f */
	op_cala,		op_invalid,		op_pop,			op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_reti,		op_invalid,		op_rete,		op_invalid,
	op_push,		op_calad,		op_invalid,		op_invalid,
	/* 0x40 - 0x4f */
	op_clrc_intm,	op_setc_intm,	op_clrc_ov,		op_setc_ov,
	op_clrc_cnf,	op_setc_cnf,	op_clrc_ext,	op_setc_ext,
	op_clrc_hold,	op_setc_hold,	op_clrc_tc,		op_setc_tc,
	op_clrc_xf,		op_setc_xf,		op_clrc_carry,	op_setc_carry,
	/* 0x50 - 0x5f */
	op_invalid,		op_trap,		op_nmi,			op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_zpr,			op_zap,			op_sath,		op_satl,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0x60 - 0x6f */
	op_intr,		op_intr,		op_intr,		op_intr,
	op_intr,		op_intr,		op_intr,		op_intr,
	op_intr,		op_intr,		op_intr,		op_intr,
	op_intr,		op_intr,		op_intr,		op_intr,
	/* 0x70 - 0x7f */
	op_intr,		op_intr,		op_intr,		op_intr,
	op_intr,		op_intr,		op_intr,		op_intr,
	op_intr,		op_intr,		op_intr,		op_intr,
	op_intr,		op_intr,		op_intr,		op_intr,
	/* 0x80 - 0x8f */
	op_mpy_limm,	op_and_s16_limm,op_or_s16_limm,	op_xor_s16_limm,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0x90 - 0x9f */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0xa0 - 0xaf */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0xb0 - 0xbf */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0xc0 - 0xcf */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_rpt_limm,	op_rptz,		op_rptb,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0xd0 - 0xdf */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0xe0 - 0xef */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0xf0 - 0xff */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
};

static void (*const tms32051_opcode_table_bf[256])(void) =
{
	/* 0x00 - 0x0f */
	op_spm,			op_spm,			op_spm,			op_spm,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_lar_limm,	op_lar_limm,	op_lar_limm,	op_lar_limm,
	op_lar_limm,	op_lar_limm,	op_lar_limm,	op_lar_limm,
	/* 0x10 - 0x1f */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0x20 - 0x2f */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0x30 - 0x3f */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0x40 - 0x4f */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_cmpr,		op_cmpr,		op_cmpr,		op_cmpr,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0x50 - 0x5f */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0x60 - 0x6f */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0x70 - 0x7f */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	/* 0x80 - 0x8f */
	op_lacc_limm,	op_lacc_limm,	op_lacc_limm,	op_lacc_limm,
	op_lacc_limm,	op_lacc_limm,	op_lacc_limm,	op_lacc_limm,
	op_lacc_limm,	op_lacc_limm,	op_lacc_limm,	op_lacc_limm,
	op_lacc_limm,	op_lacc_limm,	op_lacc_limm,	op_lacc_limm,
	/* 0x90 - 0x9f */
	op_add_limm,	op_add_limm,	op_add_limm,	op_add_limm,
	op_add_limm,	op_add_limm,	op_add_limm,	op_add_limm,
	op_add_limm,	op_add_limm,	op_add_limm,	op_add_limm,
	op_add_limm,	op_add_limm,	op_add_limm,	op_add_limm,
	/* 0xa0 - 0xaf */
	op_sub_limm,	op_sub_limm,	op_sub_limm,	op_sub_limm,
	op_sub_limm,	op_sub_limm,	op_sub_limm,	op_sub_limm,
	op_sub_limm,	op_sub_limm,	op_sub_limm,	op_sub_limm,
	op_sub_limm,	op_sub_limm,	op_sub_limm,	op_sub_limm,
	/* 0xb0 - 0xbf */
	op_and_limm,	op_and_limm,	op_and_limm,	op_and_limm,
	op_and_limm,	op_and_limm,	op_and_limm,	op_and_limm,
	op_and_limm,	op_and_limm,	op_and_limm,	op_and_limm,
	op_and_limm,	op_and_limm,	op_and_limm,	op_and_limm,
	/* 0xc0 - 0xcf */
	op_or_limm,		op_or_limm,		op_or_limm,		op_or_limm,
	op_or_limm,		op_or_limm,		op_or_limm,		op_or_limm,
	op_or_limm,		op_or_limm,		op_or_limm,		op_or_limm,
	op_or_limm,		op_or_limm,		op_or_limm,		op_or_limm,
	/* 0xd0 - 0xdf */
	op_xor_limm,	op_xor_limm,	op_xor_limm,	op_xor_limm,
	op_xor_limm,	op_xor_limm,	op_xor_limm,	op_xor_limm,
	op_xor_limm,	op_xor_limm,	op_xor_limm,	op_xor_limm,
	op_xor_limm,	op_xor_limm,	op_xor_limm,	op_xor_limm,
	/* 0xe0 - 0xef */
	op_bsar,		op_bsar,		op_bsar,		op_bsar,
	op_bsar,		op_bsar,		op_bsar,		op_bsar,
	op_bsar,		op_bsar,		op_bsar,		op_bsar,
	op_bsar,		op_bsar,		op_bsar,		op_bsar,
	/* 0xf0 - 0xff */
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
	op_invalid,		op_invalid,		op_invalid,		op_invalid,
};