xref: /aosp_15_r20/external/capstone/bindings/python/capstone/m680x.py (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
1*9a0e4156SSadaf Ebrahimi# Capstone Python bindings, by Wolfgang Schwotzer <[email protected]>
2*9a0e4156SSadaf Ebrahimi
3*9a0e4156SSadaf Ebrahimiimport ctypes
4*9a0e4156SSadaf Ebrahimifrom . import copy_ctypes_list
5*9a0e4156SSadaf Ebrahimifrom .m680x_const import *
6*9a0e4156SSadaf Ebrahimi
7*9a0e4156SSadaf Ebrahimi# define the API
8*9a0e4156SSadaf Ebrahimiclass M680xOpIdx(ctypes.Structure):
9*9a0e4156SSadaf Ebrahimi    _fields_ = (
10*9a0e4156SSadaf Ebrahimi        ('base_reg', ctypes.c_uint),
11*9a0e4156SSadaf Ebrahimi        ('offset_reg', ctypes.c_uint),
12*9a0e4156SSadaf Ebrahimi        ('offset', ctypes.c_int16),
13*9a0e4156SSadaf Ebrahimi        ('offset_addr', ctypes.c_uint16),
14*9a0e4156SSadaf Ebrahimi        ('offset_bits', ctypes.c_uint8),
15*9a0e4156SSadaf Ebrahimi        ('inc_dec', ctypes.c_int8),
16*9a0e4156SSadaf Ebrahimi        ('flags', ctypes.c_uint8),
17*9a0e4156SSadaf Ebrahimi    )
18*9a0e4156SSadaf Ebrahimi
19*9a0e4156SSadaf Ebrahimiclass M680xOpRel(ctypes.Structure):
20*9a0e4156SSadaf Ebrahimi    _fields_ = (
21*9a0e4156SSadaf Ebrahimi        ('address', ctypes.c_uint16),
22*9a0e4156SSadaf Ebrahimi        ('offset', ctypes.c_int16),
23*9a0e4156SSadaf Ebrahimi    )
24*9a0e4156SSadaf Ebrahimi
25*9a0e4156SSadaf Ebrahimiclass M680xOpExt(ctypes.Structure):
26*9a0e4156SSadaf Ebrahimi    _fields_ = (
27*9a0e4156SSadaf Ebrahimi        ('address', ctypes.c_uint16),
28*9a0e4156SSadaf Ebrahimi        ('indirect', ctypes.c_bool),
29*9a0e4156SSadaf Ebrahimi    )
30*9a0e4156SSadaf Ebrahimi
31*9a0e4156SSadaf Ebrahimiclass M680xOpValue(ctypes.Union):
32*9a0e4156SSadaf Ebrahimi    _fields_ = (
33*9a0e4156SSadaf Ebrahimi        ('imm', ctypes.c_int32),
34*9a0e4156SSadaf Ebrahimi        ('reg', ctypes.c_uint),
35*9a0e4156SSadaf Ebrahimi        ('idx', M680xOpIdx),
36*9a0e4156SSadaf Ebrahimi        ('rel', M680xOpRel),
37*9a0e4156SSadaf Ebrahimi        ('ext', M680xOpExt),
38*9a0e4156SSadaf Ebrahimi        ('direct_addr', ctypes.c_uint8),
39*9a0e4156SSadaf Ebrahimi        ('const_val', ctypes.c_uint8),
40*9a0e4156SSadaf Ebrahimi    )
41*9a0e4156SSadaf Ebrahimi
42*9a0e4156SSadaf Ebrahimiclass M680xOp(ctypes.Structure):
43*9a0e4156SSadaf Ebrahimi    _fields_ = (
44*9a0e4156SSadaf Ebrahimi        ('type', ctypes.c_uint),
45*9a0e4156SSadaf Ebrahimi        ('value', M680xOpValue),
46*9a0e4156SSadaf Ebrahimi        ('size', ctypes.c_uint8),
47*9a0e4156SSadaf Ebrahimi        ('access', ctypes.c_uint8),
48*9a0e4156SSadaf Ebrahimi    )
49*9a0e4156SSadaf Ebrahimi
50*9a0e4156SSadaf Ebrahimi    @property
51*9a0e4156SSadaf Ebrahimi    def imm(self):
52*9a0e4156SSadaf Ebrahimi        return self.value.imm
53*9a0e4156SSadaf Ebrahimi
54*9a0e4156SSadaf Ebrahimi    @property
55*9a0e4156SSadaf Ebrahimi    def reg(self):
56*9a0e4156SSadaf Ebrahimi        return self.value.reg
57*9a0e4156SSadaf Ebrahimi
58*9a0e4156SSadaf Ebrahimi    @property
59*9a0e4156SSadaf Ebrahimi    def idx(self):
60*9a0e4156SSadaf Ebrahimi        return self.value.idx
61*9a0e4156SSadaf Ebrahimi
62*9a0e4156SSadaf Ebrahimi    @property
63*9a0e4156SSadaf Ebrahimi    def rel(self):
64*9a0e4156SSadaf Ebrahimi        return self.value.rel
65*9a0e4156SSadaf Ebrahimi
66*9a0e4156SSadaf Ebrahimi    @property
67*9a0e4156SSadaf Ebrahimi    def ext(self):
68*9a0e4156SSadaf Ebrahimi        return self.value.ext
69*9a0e4156SSadaf Ebrahimi
70*9a0e4156SSadaf Ebrahimi    @property
71*9a0e4156SSadaf Ebrahimi    def direct_addr(self):
72*9a0e4156SSadaf Ebrahimi        return self.value.direct_addr
73*9a0e4156SSadaf Ebrahimi
74*9a0e4156SSadaf Ebrahimi    @property
75*9a0e4156SSadaf Ebrahimi    def const_val(self):
76*9a0e4156SSadaf Ebrahimi        return self.value.const_val
77*9a0e4156SSadaf Ebrahimi
78*9a0e4156SSadaf Ebrahimi
79*9a0e4156SSadaf Ebrahimiclass CsM680x(ctypes.Structure):
80*9a0e4156SSadaf Ebrahimi    _fields_ = (
81*9a0e4156SSadaf Ebrahimi        ('flags', ctypes.c_uint8),
82*9a0e4156SSadaf Ebrahimi        ('op_count', ctypes.c_uint8),
83*9a0e4156SSadaf Ebrahimi        ('operands', M680xOp * 9),
84*9a0e4156SSadaf Ebrahimi    )
85*9a0e4156SSadaf Ebrahimi
86*9a0e4156SSadaf Ebrahimidef get_arch_info(a):
87*9a0e4156SSadaf Ebrahimi    return (a.flags, copy_ctypes_list(a.operands[:a.op_count]))
88*9a0e4156SSadaf Ebrahimi
89