home *** CD-ROM | disk | FTP | other *** search
/ messroms.de / 2007-01-13_www.messroms.de.zip / CGENIE / TOOLS / DZ80.ZIP / dis.h < prev    next >
C/C++ Source or Header  |  1999-06-15  |  4KB  |  138 lines

  1. typedef    struct    tagDISFLAG {
  2.     BOOL    has_port;
  3.     BOOL    has_imm16;
  4.     BOOL    has_adr16;
  5.     BOOL    has_ind;
  6.     BOOL    has_cmd1;
  7.     BOOL    has_cmd3;
  8.     BOOL    has_imm8;
  9.     BOOL    has_ofs8;
  10.     BOOL    has_rel8;
  11.     BOOL    end_mode;
  12.     BOOL    src_mem8;
  13.     BOOL    dst_mem8;
  14.     BOOL    src_mem16;
  15.     BOOL    dst_mem16;
  16.     BOOL    src_port;
  17.     BOOL    dst_port;
  18.     BOOL    dst_addr;
  19.     BOOL    src_addr;
  20.     BOOL    jmp_addr;
  21. }    DISFLAG;
  22.  
  23. #define MEM_UNKNOWN  0
  24. #define MEM_CODE     1
  25. #define MEM_DATA     2
  26. #define MEM_IO         3
  27.  
  28. typedef struct  tagMEMOPT {
  29.     unsigned    mode:2;     // memory contains 0:unknown, 1:code, 2:data, 3:io
  30.         unsigned        symbol:1;       // memory location has a symbol
  31.         unsigned        comment:1;      // memory location has a comment
  32.         unsigned        size:2;         // size of data elements (1,2,4,8)
  33.     unsigned    opt:10;     // data options
  34. } MEMOPT;
  35.  
  36. #define OPT_NONE    0x000    // no special memory options
  37. #define OPT_BYTES    0x001    // memory contains word data
  38. #define OPT_ASCII    0x002    // memory contains ascii data
  39. #define OPT_7BIT    0x003    // memory contains ascii data with opt. bit 7
  40. #define OPT_WORDS    0x008    // memory contains word data
  41. #define OPT_ENTRY    0x009    // memory contains entry points
  42. #define OPT_FSNG    0x00A    // memory contains single float (4 bytes)
  43. #define OPT_FDBL    0x00B    // memory contains double float (8 bytes)
  44. #define OPT_OC        0x010    // memory contains offset to code
  45. #define OPT_OD7     0x011    // memory contains offset to data 7bit
  46. #define OPT_ODA     0x012    // memory contains offset to data ascii
  47. #define OPT_ODB     0x013    // memory contains offset to data bytes
  48. #define OPT_ODW     0x014    // memory contains offset to data words
  49. #define OPT_ODE     0x015    // memory contains offset to data entry
  50.  
  51. #define OPT_OFFS_CODE    0x100    // immediate is offset to code
  52. #define OPT_OFFS_DATA    0x101    // immediate is offset to data
  53.  
  54. #define OPT_USER    0x200    // user options 0x200-0x3FF
  55.  
  56. typedef struct  tagFSNG {
  57.     unsigned    man:24    PACKED;
  58.     signed        exp:8    PACKED;
  59. }    FSNG;
  60.  
  61. typedef struct    tagFDBL {
  62.     unsigned    manl:32 PACKED;
  63.     unsigned    manh:24 PACKED;
  64.     signed        exp:8    PACKED;
  65. }    FDBL;
  66.  
  67. typedef struct    tagDIS {
  68.         char    buff[8192];
  69.     char    name[32];
  70.     char    *dst;
  71.     DISFLAG flag;    // flags after disassembly
  72.     WORD    pc;    // offset into mem
  73.     WORD    port;    // port address
  74.     WORD    imm16;    // immediate 16bit argument
  75.     WORD    adr16;    // jump address 16bit
  76.     WORD    ind16;    // indirect 16bit memory address
  77.     BYTE    cmd0;    // command byte 0
  78.     BYTE    cmd1;    // command byte 1 (at CB, DD, ED and FD)
  79.     BYTE    cmd3;    // command byte 3 (only at DD CB oo XX and FD CB oo XX)
  80.     BYTE    imm8;    // imediate 8bit argument
  81.     OFS8    ofs8;    // IX or IY relative offset
  82.     OFS8    rel8;    // PC relative offset
  83.     BYTE    mem8;    // 8 bit mem contents
  84.     BYTE    val8;    // 8 bit transfer value
  85.     WORD    mem16;    // 16 bit mem contents
  86.     WORD    val16;    // 16 bit transfer value
  87.         WORD    addr;   // jump/call address
  88.     FSNG    fsng;    // single precision float (32 bits)
  89.     FDBL    fdbl;    // double precision float (64 bits)
  90.     MEMOPT    curopt; // current options
  91.         BOOL    prtcom; // true if comment is to be printed out
  92.         BOOL    prtsym; // true if symbol is to be printed out
  93.     BOOL    padcom; // true if comment semicolon (;) already printed
  94. }    DIS;
  95.  
  96. typedef    enum    tagSYMTYPE {
  97.     SYM_NONE=0,
  98.         SYM_CODE,
  99.     SYM_DATA,
  100.     SYM_PORT,
  101. } SYMTYPE;
  102.  
  103. typedef struct    tagSYM {
  104.     struct    tagSYM * next;
  105.     SYMTYPE    type;
  106.     WORD    addr;
  107.         char    name[1];
  108. } SYM;
  109.  
  110. typedef enum    tagCOMTYPE {
  111.     COM_NONE=0,
  112.     COM_BLOCK,
  113.     COM_APPEND,
  114. } COMTYPE;
  115.  
  116. typedef struct    tagCOM {
  117.     struct    tagCOM * next;
  118.     COMTYPE type;
  119.     WORD    addr;
  120.     char    text[1];
  121. } COM;
  122.  
  123. void    OPT_def(WORD addr, unsigned mode, unsigned size, unsigned opt);
  124. void    SYM_add(WORD addr, SYMTYPE type, char * name);
  125. void    COM_add(WORD addr, COMTYPE type, char * name);
  126. char    * SYM_get(WORD addr, SYMTYPE type);
  127. char    * COM_get(WORD addr, COMTYPE type);
  128. void    DEF_file_read(char * filename);
  129. WORD    hextoi(char * hex);
  130. void    disasm_init(WORD addr);
  131. char    * disasm(WORD * addr, BOOL flg_dump);
  132.  
  133. extern    SYM    * symbols;
  134. extern    COM    * comments;
  135. extern    DIS dis;
  136. #define NEWOPT(a) ((*(int*)&memopt[a] != 0) && (*(int*)&memopt[a] != *(int*)&dis.curopt))
  137.  
  138.