Rizin
unix-like reverse engineering framework and cli tools
analysis_spc700.c
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: 2020 thestr4ng3r <info@florianmaerkl.de>
2 // SPDX-License-Identifier: LGPL-3.0-only
3 
4 #include <string.h>
5 #include <rz_types.h>
6 #include <rz_lib.h>
7 #include <rz_asm.h>
8 #include <rz_analysis.h>
9 #include "../../asm/arch/spc700/spc700dis.c"
10 
11 static int op(RzAnalysis *analysis, RzAnalysisOp *rz_op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) {
12  // TODO: fill this with the actual info
13  size_t dlen = spc700_disas(NULL, 0, buf, len);
14  rz_op->size = dlen;
15  rz_op->addr = addr;
17  return rz_op->size;
18 }
19 
20 static char *get_reg_profile(RzAnalysis *analysis) {
21  char *p =
22  "=PC pc\n"
23  "=SP sp\n"
24  "=A0 a\n"
25  "=A1 x\n"
26  "=A2 y\n"
27  "gpr a .8 0 0\n"
28  "gpr x .8 1 0\n"
29  "gpr y .8 2 0\n"
30  "gpr flags .8 3 0\n"
31  "gpr C .1 .24 0\n"
32  "gpr Z .1 .25 0\n"
33  "gpr I .1 .26 0\n"
34  "gpr H .1 .27 0\n"
35  "gpr B .1 .28 0\n"
36  "gpr P .1 .29 0\n"
37  "gpr V .1 .30 0\n"
38  "gpr N .1 .31 0\n"
39  "gpr sp .8 4 0\n"
40  "gpr pc .16 5 0\n";
41  return strdup(p);
42 }
43 
45  .name = "spc700",
46  .desc = "spc700, snes' sound-chip",
47  .arch = "spc700",
48  .license = "LGPL3",
49  .bits = 16,
50  .op = &op,
51  .get_reg_profile = &get_reg_profile,
52 };
53 
54 #ifndef RZ_PLUGIN_INCORE
59 };
60 #endif
size_t len
Definition: 6502dis.c:15
#define mask()
static char * get_reg_profile(RzAnalysis *analysis)
RZ_API RzLibStruct rizin_plugin
static int op(RzAnalysis *analysis, RzAnalysisOp *rz_op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask)
RzAnalysisPlugin rz_analysis_plugin_spc700
#define RZ_API
#define NULL
Definition: cris-opc.c:27
voidpf void * buf
Definition: ioapi.h:138
uint8_t ut8
Definition: lh5801.h:11
void * p
Definition: libc.cpp:67
return strdup("=SP r13\n" "=LR r14\n" "=PC r15\n" "=A0 r0\n" "=A1 r1\n" "=A2 r2\n" "=A3 r3\n" "=ZF zf\n" "=SF nf\n" "=OF vf\n" "=CF cf\n" "=SN or0\n" "gpr lr .32 56 0\n" "gpr pc .32 60 0\n" "gpr cpsr .32 64 0 ____tfiae_________________qvczn\n" "gpr or0 .32 68 0\n" "gpr tf .1 64.5 0 thumb\n" "gpr ef .1 64.9 0 endian\n" "gpr jf .1 64.24 0 java\n" "gpr qf .1 64.27 0 sticky_overflow\n" "gpr vf .1 64.28 0 overflow\n" "gpr cf .1 64.29 0 carry\n" "gpr zf .1 64.30 0 zero\n" "gpr nf .1 64.31 0 negative\n" "gpr itc .4 64.10 0 if_then_count\n" "gpr gef .4 64.16 0 great_or_equal\n" "gpr r0 .32 0 0\n" "gpr r1 .32 4 0\n" "gpr r2 .32 8 0\n" "gpr r3 .32 12 0\n" "gpr r4 .32 16 0\n" "gpr r5 .32 20 0\n" "gpr r6 .32 24 0\n" "gpr r7 .32 28 0\n" "gpr r8 .32 32 0\n" "gpr r9 .32 36 0\n" "gpr r10 .32 40 0\n" "gpr r11 .32 44 0\n" "gpr r12 .32 48 0\n" "gpr r13 .32 52 0\n" "gpr r14 .32 56 0\n" "gpr r15 .32 60 0\n" "gpr r16 .32 64 0\n" "gpr r17 .32 68 0\n")
RzAnalysisOpMask
Definition: rz_analysis.h:439
@ RZ_ANALYSIS_OP_TYPE_UNK
Definition: rz_analysis.h:388
@ RZ_LIB_TYPE_ANALYSIS
Definition: rz_lib.h:73
#define RZ_VERSION
Definition: rz_version.h:8
static size_t spc700_disas(RzStrBuf *out, ut64 pc, const ut8 *buf, size_t bufsz)
Definition: spc700dis.c:36
const char * version
Definition: rz_analysis.h:1239
ut64(WINAPI *w32_GetEnabledXStateFeatures)()
static int addr
Definition: z80asm.c:58