home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
messroms.de
/
2007-01-13_www.messroms.de.zip
/
VZ200
/
TOOLS
/
DZ80.ZIP
/
dis.h
< prev
next >
Wrap
C/C++ Source or Header
|
1999-06-15
|
4KB
|
138 lines
typedef struct tagDISFLAG {
BOOL has_port;
BOOL has_imm16;
BOOL has_adr16;
BOOL has_ind;
BOOL has_cmd1;
BOOL has_cmd3;
BOOL has_imm8;
BOOL has_ofs8;
BOOL has_rel8;
BOOL end_mode;
BOOL src_mem8;
BOOL dst_mem8;
BOOL src_mem16;
BOOL dst_mem16;
BOOL src_port;
BOOL dst_port;
BOOL dst_addr;
BOOL src_addr;
BOOL jmp_addr;
} DISFLAG;
#define MEM_UNKNOWN 0
#define MEM_CODE 1
#define MEM_DATA 2
#define MEM_IO 3
typedef struct tagMEMOPT {
unsigned mode:2; // memory contains 0:unknown, 1:code, 2:data, 3:io
unsigned symbol:1; // memory location has a symbol
unsigned comment:1; // memory location has a comment
unsigned size:2; // size of data elements (1,2,4,8)
unsigned opt:10; // data options
} MEMOPT;
#define OPT_NONE 0x000 // no special memory options
#define OPT_BYTES 0x001 // memory contains word data
#define OPT_ASCII 0x002 // memory contains ascii data
#define OPT_7BIT 0x003 // memory contains ascii data with opt. bit 7
#define OPT_WORDS 0x008 // memory contains word data
#define OPT_ENTRY 0x009 // memory contains entry points
#define OPT_FSNG 0x00A // memory contains single float (4 bytes)
#define OPT_FDBL 0x00B // memory contains double float (8 bytes)
#define OPT_OC 0x010 // memory contains offset to code
#define OPT_OD7 0x011 // memory contains offset to data 7bit
#define OPT_ODA 0x012 // memory contains offset to data ascii
#define OPT_ODB 0x013 // memory contains offset to data bytes
#define OPT_ODW 0x014 // memory contains offset to data words
#define OPT_ODE 0x015 // memory contains offset to data entry
#define OPT_OFFS_CODE 0x100 // immediate is offset to code
#define OPT_OFFS_DATA 0x101 // immediate is offset to data
#define OPT_USER 0x200 // user options 0x200-0x3FF
typedef struct tagFSNG {
unsigned man:24 PACKED;
signed exp:8 PACKED;
} FSNG;
typedef struct tagFDBL {
unsigned manl:32 PACKED;
unsigned manh:24 PACKED;
signed exp:8 PACKED;
} FDBL;
typedef struct tagDIS {
char buff[8192];
char name[32];
char *dst;
DISFLAG flag; // flags after disassembly
WORD pc; // offset into mem
WORD port; // port address
WORD imm16; // immediate 16bit argument
WORD adr16; // jump address 16bit
WORD ind16; // indirect 16bit memory address
BYTE cmd0; // command byte 0
BYTE cmd1; // command byte 1 (at CB, DD, ED and FD)
BYTE cmd3; // command byte 3 (only at DD CB oo XX and FD CB oo XX)
BYTE imm8; // imediate 8bit argument
OFS8 ofs8; // IX or IY relative offset
OFS8 rel8; // PC relative offset
BYTE mem8; // 8 bit mem contents
BYTE val8; // 8 bit transfer value
WORD mem16; // 16 bit mem contents
WORD val16; // 16 bit transfer value
WORD addr; // jump/call address
FSNG fsng; // single precision float (32 bits)
FDBL fdbl; // double precision float (64 bits)
MEMOPT curopt; // current options
BOOL prtcom; // true if comment is to be printed out
BOOL prtsym; // true if symbol is to be printed out
BOOL padcom; // true if comment semicolon (;) already printed
} DIS;
typedef enum tagSYMTYPE {
SYM_NONE=0,
SYM_CODE,
SYM_DATA,
SYM_PORT,
} SYMTYPE;
typedef struct tagSYM {
struct tagSYM * next;
SYMTYPE type;
WORD addr;
char name[1];
} SYM;
typedef enum tagCOMTYPE {
COM_NONE=0,
COM_BLOCK,
COM_APPEND,
} COMTYPE;
typedef struct tagCOM {
struct tagCOM * next;
COMTYPE type;
WORD addr;
char text[1];
} COM;
void OPT_def(WORD addr, unsigned mode, unsigned size, unsigned opt);
void SYM_add(WORD addr, SYMTYPE type, char * name);
void COM_add(WORD addr, COMTYPE type, char * name);
char * SYM_get(WORD addr, SYMTYPE type);
char * COM_get(WORD addr, COMTYPE type);
void DEF_file_read(char * filename);
WORD hextoi(char * hex);
void disasm_init(WORD addr);
char * disasm(WORD * addr, BOOL flg_dump);
extern SYM * symbols;
extern COM * comments;
extern DIS dis;
#define NEWOPT(a) ((*(int*)&memopt[a] != 0) && (*(int*)&memopt[a] != *(int*)&dis.curopt))