Repository URL to install this package:
Version:
9.0~241217-2.fc42 ▾
|
idapro-debugsource
/
usr
/
src
/
debug
/
idapro-9.0~241217-2.fc42.x86_64
/
module
/
kr1878
/
kr1878.hpp
|
---|
#ifndef _KR1878_HPP
#define _KR1878_HPP
#include "../idaidp.hpp"
#include "ins.hpp"
#include <diskio.hpp>
//------------------------------------------------------------------
#define amode specflag2 // addressing mode
#define amode_x 0x10 // X:
//------------------------------------------------------------------
#define UAS_GNU 0x0001 // GNU assembler
//------------------------------------------------------------------
enum RegNo
{
SR0,
SR1,
SR2,
SR3,
SR4,
SR5,
SR6,
SR7,
DSP,
ISP,
as,
bs,
cs,
ds,
vCS, vDS, // virtual registers for code and data segments
};
//------------------------------------------------------------------
struct addargs_t
{
ea_t ea;
int nargs;
op_t args[4][2];
};
//------------------------------------------------------------------
#define IDP_SIMPLIFY 0x0001 // simplify instructions
#define IDP_PSW_W 0x0002 // W-bit in PSW is set
extern ushort idpflags;
inline bool dosimple(void) { return (idpflags & IDP_SIMPLIFY) != 0; }
inline bool psw_w(void) { return (idpflags & IDP_PSW_W) != 0; }
ea_t calc_mem(const insn_t &insn, const op_t &x);
//------------------------------------------------------------------
void interr(const insn_t &insn, const char *module);
void idaapi kr1878_header(outctx_t &ctx);
void idaapi kr1878_segend(outctx_t &ctx, segment_t *seg);
int idaapi is_align_insn(ea_t ea);
int idaapi is_sp_based(const insn_t &insn, const op_t &x);
int is_jump_func(const func_t *pfn, ea_t *jump_target);
int is_sane_insn(const insn_t &insn, int nocrefs);
int may_be_func(const insn_t &insn); // can a function start here?
void init_analyzer(void);
//------------------------------------------------------------------
struct kr1878_t : public procmod_t
{
ioports_t ports;
qstring device;
netnode helper;
ea_t xmem = BADADDR;
op_t *op = nullptr; // current operand
bool flow = false;
virtual ssize_t idaapi on_event(ssize_t msgid, va_list va) override;
const ioport_t *find_port(ea_t address);
void read_kr1878_cfg(void);
void set_device_name(const char *dev);
const char *set_idp_options(
const char *keyword,
int /*value_type*/,
const void * /*value*/,
bool /*idb_loaded*/);
ea_t calc_data_mem(const insn_t &insn, const op_t &x, ushort segreg) const;
void handle_operand(const insn_t &insn, const op_t &x, bool isAlt, bool isload);
void add_near_ref(const insn_t &insn, const op_t &x, ea_t ea);
int emu(const insn_t &insn);
void opreg(uint16 reg);
void make_o_mem(const insn_t &insn);
bool D_ddddd(const insn_t &, int value);
bool S_ddddd(const insn_t &insn, int value);
bool D_SR(const insn_t &, int value);
bool S_SR(const insn_t &insn, int value);
bool D_Imm(const insn_t &, int value);
bool D_pImm(const insn_t &insn, int value);
bool D_EA(const insn_t &insn, int value);
bool use_table(const insn_t &insn, uint32 code, int entry, int start, int end);
int ana(insn_t *_insn);
void kr1878_assumes(outctx_t &ctx);
void print_segment_register(outctx_t &ctx, int reg, sel_t value);
void kr1878_segstart(outctx_t &ctx, segment_t *Srange) const;
void kr1878_footer(outctx_t &ctx) const;
void load_from_idb();
};
extern int data_id;
#define PROCMOD_NODE_NAME "$ kr1878"
#define PROCMOD_NAME kr1878
#endif // _KR1878_HPP