Rizin
unix-like reverse engineering framework and cli tools
mcs96.h
Go to the documentation of this file.
1
// SPDX-FileCopyrightText: 2015-2019 condret <condr3t@protonmail.com>
2
// SPDX-License-Identifier: LGPL-3.0-only
3
4
#include <
rz_util.h
>
5
#include <
rz_types.h
>
6
7
typedef
struct
mcs96_op_t
{
8
const
char
*
ins
;
9
const
ut32
type
;
10
}
Mcs96Op
;
11
12
#define MCS96_1B 0x1
13
#define MCS96_2B 0x2
14
#define MCS96_3B 0x4
15
#define MCS96_4B 0x8
16
#define MCS96_5B 0x10
17
18
#define MCS96_3B_OR_4B 0x20
19
#define MCS96_4B_OR_5B 0x40
20
#define MCS96_5B_OR_6B 0x80
21
22
#define MCS96_2OP 0x100
23
#define MCS96_3OP 0x200
24
#define MCS96_4OP 0x400
25
#define MCS96_5OP 0x800
26
27
#define MCS96_REG_8 0x1000
28
29
#define MCS96_FE 0x2000
// 0xfe extension
30
31
static
Mcs96Op
mcs96_op
[] = {
32
{
"skip"
,
MCS96_1B
},
33
{
"invalid"
,
MCS96_1B
},
34
{
"invalid"
,
MCS96_1B
},
35
{
"invalid"
,
MCS96_1B
},
36
{
"invalid"
,
MCS96_1B
},
37
{
"invalid"
,
MCS96_1B
},
38
{
"invalid"
,
MCS96_1B
},
39
{
"invalid"
,
MCS96_1B
},
40
{
"shr"
,
MCS96_3B
},
41
{
"shl"
,
MCS96_3B
},
42
{
"shra"
,
MCS96_3B
},
// 0x0a
43
{
"invalid"
,
MCS96_1B
},
44
{
"shrl"
,
MCS96_3B
},
45
{
"shll"
,
MCS96_3B
},
46
{
"shral"
,
MCS96_3B
},
47
{
"norml"
,
MCS96_3B
},
48
{
"invalid"
,
MCS96_1B
},
// 0x10
49
{
"invalid"
,
MCS96_1B
},
50
{
"invalid"
,
MCS96_1B
},
51
{
"invalid"
,
MCS96_1B
},
52
{
"invalid"
,
MCS96_1B
},
53
{
"invalid"
,
MCS96_1B
},
54
{
"invalid"
,
MCS96_1B
},
55
{
"invalid"
,
MCS96_1B
},
56
{
"shrb"
,
MCS96_3B
},
57
{
"shlb"
,
MCS96_3B
},
58
{
"shrab"
,
MCS96_3B
},
59
{
"invalid"
,
MCS96_1B
},
60
{
"invalid"
,
MCS96_1B
},
61
{
"invalid"
,
MCS96_1B
},
62
{
"invalid"
,
MCS96_1B
},
63
{
"invalid"
,
MCS96_1B
},
64
{
"sjmp"
,
MCS96_2B
},
// 0x20
65
{
"sjmp"
,
MCS96_2B
},
66
{
"sjmp"
,
MCS96_2B
},
67
{
"sjmp"
,
MCS96_2B
},
68
{
"sjmp"
,
MCS96_2B
},
69
{
"sjmp"
,
MCS96_2B
},
70
{
"sjmp"
,
MCS96_2B
},
71
{
"sjmp"
,
MCS96_2B
},
72
{
"scall"
,
MCS96_2B
},
// 0x28
73
{
"scall"
,
MCS96_2B
},
74
{
"scall"
,
MCS96_2B
},
75
{
"scall"
,
MCS96_2B
},
76
{
"scall"
,
MCS96_2B
},
77
{
"scall"
,
MCS96_2B
},
78
{
"scall"
,
MCS96_2B
},
79
{
"scall"
,
MCS96_2B
},
80
{
"jbc"
,
MCS96_3B
},
// 0x30
81
{
"jbc"
,
MCS96_3B
},
82
{
"jbc"
,
MCS96_3B
},
83
{
"jbc"
,
MCS96_3B
},
84
{
"jbc"
,
MCS96_3B
},
85
{
"jbc"
,
MCS96_3B
},
86
{
"jbc"
,
MCS96_3B
},
87
{
"jbc"
,
MCS96_3B
},
88
{
"jbs"
,
MCS96_3B
},
// 0x38
89
{
"jbs"
,
MCS96_3B
},
90
{
"jbs"
,
MCS96_3B
},
91
{
"jbs"
,
MCS96_3B
},
92
{
"jbs"
,
MCS96_3B
},
93
{
"jbs"
,
MCS96_3B
},
94
{
"jbs"
,
MCS96_3B
},
95
{
"jbs"
,
MCS96_3B
},
96
{
"and"
,
MCS96_4B
|
MCS96_3OP
},
// 0x40
97
{
"and"
,
MCS96_5B
|
MCS96_3OP
},
98
{
"and"
,
MCS96_4B
|
MCS96_3OP
},
99
{
"and"
,
MCS96_5B_OR_6B
|
MCS96_3OP
},
100
{
"add"
,
MCS96_4B
|
MCS96_3OP
},
101
{
"add"
,
MCS96_5B
|
MCS96_3OP
},
102
{
"add"
,
MCS96_4B
|
MCS96_3OP
},
103
{
"add"
,
MCS96_5B_OR_6B
|
MCS96_3OP
},
104
{
"sub"
,
MCS96_4B
|
MCS96_3OP
},
105
{
"sub"
,
MCS96_5B
|
MCS96_3OP
},
106
{
"sub"
,
MCS96_4B
|
MCS96_3OP
},
107
{
"sub"
,
MCS96_5B_OR_6B
|
MCS96_3OP
},
108
{
"mulu"
,
MCS96_4B
|
MCS96_3OP
|
MCS96_FE
},
109
{
"mulu"
,
MCS96_5B
|
MCS96_3OP
|
MCS96_FE
},
110
{
"mulu"
,
MCS96_4B
|
MCS96_3OP
|
MCS96_FE
},
111
{
"mulu"
,
MCS96_5B_OR_6B
|
MCS96_3OP
|
MCS96_FE
},
// 0x4f
112
{
"andb"
,
MCS96_4B
|
MCS96_3OP
|
MCS96_REG_8
},
113
{
"andb"
,
MCS96_4B
|
MCS96_3OP
},
114
{
"andb"
,
MCS96_4B
|
MCS96_3OP
},
115
{
"andb"
,
MCS96_5B_OR_6B
|
MCS96_3OP
},
// datasheet says that this is always 5 byte
116
// that datasheet already has proven to have typos
117
{
"addb"
,
MCS96_4B
|
MCS96_3OP
},
118
{
"addb"
,
MCS96_4B
|
MCS96_3OP
},
119
{
"addb"
,
MCS96_4B
|
MCS96_3OP
},
120
{
"addb"
,
MCS96_5B_OR_6B
|
MCS96_3OP
},
121
{
"subb"
,
MCS96_4B
|
MCS96_3OP
},
122
{
"subb"
,
MCS96_4B
|
MCS96_3OP
},
123
{
"subb"
,
MCS96_4B
|
MCS96_3OP
},
124
{
"subb"
,
MCS96_5B_OR_6B
|
MCS96_3OP
},
125
{
"mulub"
,
MCS96_4B
|
MCS96_3OP
|
MCS96_FE
},
126
{
"mulub"
,
MCS96_4B
|
MCS96_3OP
|
MCS96_FE
},
127
{
"mulub"
,
MCS96_4B
|
MCS96_3OP
|
MCS96_FE
},
128
{
"mulub"
,
MCS96_5B_OR_6B
|
MCS96_3OP
|
MCS96_FE
},
// 0x5f
129
{
"and"
,
MCS96_3B
|
MCS96_2OP
},
130
{
"and"
,
MCS96_4B
|
MCS96_2OP
},
131
{
"and"
,
MCS96_3B
|
MCS96_2OP
},
132
{
"and"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
133
{
"add"
,
MCS96_3B
|
MCS96_2OP
},
134
{
"add"
,
MCS96_4B
|
MCS96_2OP
},
135
{
"add"
,
MCS96_3B
|
MCS96_2OP
},
136
{
"add"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
137
{
"sub"
,
MCS96_3B
|
MCS96_2OP
},
138
{
"sub"
,
MCS96_4B
|
MCS96_2OP
},
139
{
"sub"
,
MCS96_3B
|
MCS96_2OP
},
140
{
"sub"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
141
{
"mulu"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_FE
},
142
{
"mulu"
,
MCS96_4B
|
MCS96_2OP
|
MCS96_FE
},
143
{
"mulu"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_FE
},
144
{
"mulu"
,
MCS96_4B_OR_5B
|
MCS96_2OP
|
MCS96_FE
},
// 0x6f
145
{
"andb"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_REG_8
},
146
{
"andb"
,
MCS96_3B
|
MCS96_2OP
},
147
{
"andb"
,
MCS96_3B
|
MCS96_2OP
},
148
{
"andb"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
// again i don't trust the data-sheet here
149
{
"addb"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_REG_8
},
150
{
"addb"
,
MCS96_3B
|
MCS96_2OP
},
151
{
"addb"
,
MCS96_3B
|
MCS96_2OP
},
152
{
"addb"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
153
{
"subb"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_REG_8
},
154
{
"subb"
,
MCS96_3B
|
MCS96_2OP
},
155
{
"subb"
,
MCS96_3B
|
MCS96_2OP
},
156
{
"subb"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
157
{
"mulub"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_FE
|
MCS96_REG_8
},
158
{
"mulub"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_FE
},
159
{
"mulub"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_FE
},
160
{
"mulub"
,
MCS96_4B_OR_5B
|
MCS96_2OP
|
MCS96_FE
},
// 0x7f
161
{
"or"
,
MCS96_3B
|
MCS96_2OP
},
162
{
"or"
,
MCS96_4B
|
MCS96_2OP
},
163
{
"or"
,
MCS96_3B
|
MCS96_2OP
},
164
{
"or"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
165
{
"xor"
,
MCS96_3B
|
MCS96_2OP
},
166
{
"xor"
,
MCS96_4B
|
MCS96_2OP
},
167
{
"xor"
,
MCS96_3B
|
MCS96_2OP
},
168
{
"xor"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
169
{
"cmp"
,
MCS96_3B
|
MCS96_2OP
},
170
{
"cmp"
,
MCS96_4B
|
MCS96_2OP
},
171
{
"cmp"
,
MCS96_3B
|
MCS96_2OP
},
172
{
"cmp"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
173
{
"divu"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_FE
},
174
{
"divu"
,
MCS96_4B
|
MCS96_2OP
|
MCS96_FE
},
175
{
"divu"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_FE
},
176
{
"divu"
,
MCS96_4B_OR_5B
|
MCS96_2OP
|
MCS96_FE
},
// 0x8f
177
{
"orb"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_REG_8
},
178
{
"orb"
,
MCS96_3B
|
MCS96_2OP
},
179
{
"orb"
,
MCS96_3B
|
MCS96_2OP
},
180
{
"orb"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
181
{
"xorb"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_REG_8
},
182
{
"xorb"
,
MCS96_3B
|
MCS96_2OP
},
183
{
"xorb"
,
MCS96_3B
|
MCS96_2OP
},
184
{
"xorb"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
185
{
"cmpb"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_REG_8
},
186
{
"cmpb"
,
MCS96_3B
|
MCS96_2OP
},
187
{
"cmpb"
,
MCS96_3B
|
MCS96_2OP
},
188
{
"cmpb"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
189
{
"divub"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_FE
|
MCS96_REG_8
},
190
{
"divub"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_FE
},
191
{
"divub"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_FE
},
192
{
"divub"
,
MCS96_4B_OR_5B
|
MCS96_2OP
|
MCS96_FE
},
// 0x9f
193
{
"ld"
,
MCS96_3B
|
MCS96_2OP
},
194
{
"ld"
,
MCS96_4B
|
MCS96_2OP
},
195
{
"ld"
,
MCS96_3B
|
MCS96_2OP
},
196
{
"ld"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
197
{
"addc"
,
MCS96_3B
|
MCS96_2OP
},
198
{
"addc"
,
MCS96_4B
|
MCS96_2OP
},
199
{
"addc"
,
MCS96_3B
|
MCS96_2OP
},
200
{
"addc"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
201
{
"subc"
,
MCS96_3B
|
MCS96_2OP
},
202
{
"subc"
,
MCS96_4B
|
MCS96_2OP
},
203
{
"subc"
,
MCS96_3B
|
MCS96_2OP
},
204
{
"subc"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
205
{
"lbsze"
,
MCS96_3B
|
MCS96_2OP
},
206
{
"lbsze"
,
MCS96_3B
|
MCS96_2OP
},
207
{
"lbsze"
,
MCS96_3B
|
MCS96_2OP
},
208
{
"lbsze"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
// 0xaf
209
{
"ldb"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_REG_8
},
210
{
"ldb"
,
MCS96_3B
|
MCS96_2OP
},
211
{
"ldb"
,
MCS96_3B
|
MCS96_2OP
},
212
{
"ldb"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
213
{
"addcb"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_REG_8
},
214
{
"addcb"
,
MCS96_3B
|
MCS96_2OP
},
215
{
"addcb"
,
MCS96_3B
|
MCS96_2OP
},
216
{
"addcb"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
217
{
"subcb"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_REG_8
},
218
{
"subcb"
,
MCS96_3B
|
MCS96_2OP
},
219
{
"subcb"
,
MCS96_3B
|
MCS96_2OP
},
220
{
"subcb"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
221
{
"ldbse"
,
MCS96_3B
|
MCS96_2OP
|
MCS96_REG_8
},
222
{
"ldbse"
,
MCS96_3B
|
MCS96_2OP
},
223
{
"ldbse"
,
MCS96_3B
|
MCS96_2OP
},
224
{
"ldbse"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
// 0xbf
225
{
"st"
,
MCS96_3B
|
MCS96_2OP
},
226
{
"invalid"
,
MCS96_1B
},
227
{
"st"
,
MCS96_3B
|
MCS96_2OP
},
228
{
"st"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
229
{
"stb"
,
MCS96_3B
|
MCS96_2OP
},
230
{
"invalid"
,
MCS96_1B
},
231
{
"stb"
,
MCS96_3B
|
MCS96_2OP
},
232
{
"stb"
,
MCS96_4B_OR_5B
|
MCS96_2OP
},
233
{
"push"
,
MCS96_2B
},
234
{
"push"
,
MCS96_3B
},
235
{
"push"
,
MCS96_2B
},
236
{
"push"
,
MCS96_3B_OR_4B
},
237
{
"pop"
,
MCS96_2B
},
238
{
"invalid"
,
MCS96_1B
},
239
{
"pop"
,
MCS96_2B
},
240
{
"pop"
,
MCS96_3B_OR_4B
},
// 0xcf
241
{
"jnst"
,
MCS96_2B
},
242
{
"jnh"
,
MCS96_2B
},
243
{
"jgt"
,
MCS96_2B
},
244
{
"jnc"
,
MCS96_2B
},
245
{
"jnvt"
,
MCS96_2B
},
246
{
"jnv"
,
MCS96_2B
},
247
{
"jge"
,
MCS96_2B
},
248
{
"jne"
,
MCS96_2B
},
249
{
"jst"
,
MCS96_2B
},
250
{
"jh"
,
MCS96_2B
},
251
{
"jle"
,
MCS96_2B
},
252
{
"jc"
,
MCS96_2B
},
253
{
"jvt"
,
MCS96_2B
},
254
{
"jv"
,
MCS96_2B
},
255
{
"jlt"
,
MCS96_2B
},
256
{
"je"
,
MCS96_2B
},
// 0xdf
257
{
"djnz"
,
MCS96_3B
},
258
{
"invalid"
,
MCS96_1B
},
259
{
"invalid"
,
MCS96_1B
},
260
{
"br"
,
MCS96_2B
},
261
{
"invalid"
,
MCS96_1B
},
262
{
"invalid"
,
MCS96_1B
},
263
{
"invalid"
,
MCS96_1B
},
264
{
"ljmp"
,
MCS96_3B
},
265
{
"invalid"
,
MCS96_1B
},
266
{
"invalid"
,
MCS96_1B
},
267
{
"invalid"
,
MCS96_1B
},
268
{
"invalid"
,
MCS96_1B
},
269
{
"invalid"
,
MCS96_1B
},
270
{
"invalid"
,
MCS96_1B
},
271
{
"invalid"
,
MCS96_1B
},
272
{
"lcall"
,
MCS96_3B
},
// 0xef
273
{
"ret"
,
MCS96_1B
},
274
{
"invalid"
,
MCS96_1B
},
275
{
"pushf"
,
MCS96_1B
},
276
{
"popf"
,
MCS96_1B
},
277
{
"invalid"
,
MCS96_1B
},
278
{
"invalid"
,
MCS96_1B
},
279
{
"invalid"
,
MCS96_1B
},
280
{
"trap"
,
MCS96_1B
},
281
{
"clrc"
,
MCS96_1B
},
282
{
"setc"
,
MCS96_1B
},
283
{
"di"
,
MCS96_1B
},
284
{
"ei"
,
MCS96_1B
},
285
{
"clrvt"
,
MCS96_1B
},
286
{
"nop"
,
MCS96_1B
},
287
{
"invalid"
,
MCS96_1B
},
288
{
"rst"
,
MCS96_1B
}
289
};
290
291
static
const
char
*
mcs96_fe_op
[] = {
"mul"
,
"mulb"
,
"mul"
,
"mulb"
,
"div"
,
"divb"
,
"invalid"
,
"invalid"
};
292
// in theory these invalids can never happen
ut32
uint32_t ut32
Definition:
demangler_util.h:31
MCS96_FE
#define MCS96_FE
Definition:
mcs96.h:29
MCS96_3B
#define MCS96_3B
Definition:
mcs96.h:14
MCS96_3OP
#define MCS96_3OP
Definition:
mcs96.h:23
MCS96_2OP
#define MCS96_2OP
Definition:
mcs96.h:22
mcs96_fe_op
static const char * mcs96_fe_op[]
Definition:
mcs96.h:291
MCS96_REG_8
#define MCS96_REG_8
Definition:
mcs96.h:27
MCS96_4B
#define MCS96_4B
Definition:
mcs96.h:15
MCS96_4B_OR_5B
#define MCS96_4B_OR_5B
Definition:
mcs96.h:19
MCS96_5B
#define MCS96_5B
Definition:
mcs96.h:16
Mcs96Op
struct mcs96_op_t Mcs96Op
MCS96_5B_OR_6B
#define MCS96_5B_OR_6B
Definition:
mcs96.h:20
MCS96_1B
#define MCS96_1B
Definition:
mcs96.h:12
MCS96_3B_OR_4B
#define MCS96_3B_OR_4B
Definition:
mcs96.h:18
MCS96_2B
#define MCS96_2B
Definition:
mcs96.h:13
mcs96_op
static Mcs96Op mcs96_op[]
Definition:
mcs96.h:31
rz_types.h
rz_util.h
mcs96_op_t
Definition:
mcs96.h:7
mcs96_op_t::ins
const char * ins
Definition:
mcs96.h:8
mcs96_op_t::type
const ut32 type
Definition:
mcs96.h:9
librz
asm
arch
mcs96
mcs96.h
Generated by
1.9.1