home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 430_01 / m68kdis / dis.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-29  |  6.8 KB  |  276 lines

  1. /*
  2.  *                 Author:  Christopher G. Phillips
  3.  *              Copyright (C) 1994 All Rights Reserved
  4.  *
  5.  *                              NOTICE
  6.  *
  7.  * Permission to use, copy, modify, and distribute this software and
  8.  * its documentation for any purpose and without fee is hereby granted
  9.  * provided that the above copyright notice appear in all copies and
  10.  * that both the copyright notice and this permission notice appear in
  11.  * supporting documentation.
  12.  *
  13.  * The author makes no representations about the suitability of this
  14.  * software for any purpose.  This software is provided ``as is''
  15.  * without express or implied warranty.
  16.  */
  17.  
  18. /*
  19.  * This file contains function prototypes, global variable declarations,
  20.  * and #defined masks and macros for manipulating the flags member
  21.  * of a struct inst.
  22.  */
  23.  
  24. #ifndef DIS_H
  25. #define DIS_H
  26.  
  27. #include <stdio.h>
  28. #include <limits.h>
  29. #include <setjmp.h>
  30.  
  31. /* Eight bits here */
  32. #define BYTE        0x00
  33. #define WORD        0x01
  34. #define LONGWORD    0x02
  35. #define DOUBLELONGWORD    0x04
  36. #define SINGLE        0x08
  37. #define DOUBLE        0x10
  38. #define EXTENDED    0x20
  39. #define PACKED        0x40
  40. #define PWORD        WORD
  41. #define PLONGWORD    LONGWORD
  42. #define PDOUBLELONGWORD    DOUBLELONGWORD
  43. #define PSINGLE        SINGLE
  44. #define PDOUBLE        DOUBLE
  45. #define PEXTENDED    EXTENDED
  46. #define PPACKED        PACKED
  47. #define PBYTE        0x80
  48. #define size2f(s)    ((s) == BYTE ? PBYTE : (s))
  49. #define ISINTEGRAL(s)    ((s) <= DOUBLELONGWORD)
  50.  
  51. /* Four bits here */
  52. #define MAXOPSMASK    15    /* 4 bits => 1111 base 2 */
  53. #define f2sharps(f)    (((f) >> 8) & MAXOPSMASK)
  54. #define sharp2f(arg)    (1 << (8 + (arg) - 1))
  55.  
  56. #define f2ops(f)    ((f) >> 12)
  57. #define ops2f(n)    ((n) << 12)
  58.  
  59. #define FROM        0
  60. #define TO        1
  61.  
  62. #define MC68000        0x0001
  63. #define MC68008        0x0002
  64. #define MC68010        0x0004
  65. #define MC68020        0x0008
  66. #define MC68030        0x0010
  67. #define MC68040        0x0020
  68. #define CPU(m)        ((m) & 0x3f)
  69.  
  70. #define MC68851        0x8000
  71. #define PMMU(m)        ((m) & MC68851)
  72. #define MC68881        0x4000
  73. #define MC68882        0x2000
  74. #define FPU(m)        ((m) & (MC68881 | MC68882))
  75.  
  76. #define FIRSTPASS    1
  77. #define LASTPASS    2
  78. #define DEBUGPASS    3
  79. #define DCLABELSPASS    4
  80.  
  81. #define INCONSISTENT    1
  82. #define CONSISTENT    2
  83.  
  84. typedef unsigned short    m68kword;    /* at least 16 bits */
  85. #if UINT_MAX >= 4294967295U
  86. typedef unsigned int    u32bit_t;
  87. #else
  88. typedef unsigned long    u32bit_t;
  89. #endif
  90. typedef u32bit_t    m68kaddr;    /* at least 32 bits */
  91.  
  92. #define WORDSIZE    2
  93.  
  94. extern FILE    *infp;
  95. extern FILE    *outfp;
  96. extern char    *cc[];
  97. extern char    *bitd[];
  98. extern char    *bitf[];
  99. extern char    buf1[];
  100. extern char    buf2[];
  101. extern char    buf3[];
  102.  
  103. extern int    pass;
  104. extern int    valid;
  105.  
  106. extern m68kaddr    pc;
  107. extern m68kaddr    ppc;
  108. extern m68kaddr    initialpc;
  109. extern int    chip;
  110. extern int    lower;
  111. extern int    minlen;
  112. extern int    onepass;
  113. extern int    sp;
  114. extern int    odd;
  115. extern int    linkfallthrough;
  116. extern int    use_isprint;
  117. extern int    fdigits;
  118. extern size_t    slenprint;
  119. #ifndef NOBAD
  120. extern int    dobad;
  121. #endif
  122. extern char    *afile;
  123. extern char    *bfile;
  124. extern char    *ffile;
  125. extern char    *ifile;
  126. extern char    *jfile;
  127. extern char    *nfile;
  128. extern char    *nsfile;
  129.  
  130. extern jmp_buf    jmp;
  131. extern char    *sfile;
  132.  
  133. extern long    curoffset;
  134. extern short    flags;
  135. extern m68kaddr    required[3];
  136. extern int    pcrelative;
  137.  
  138. struct inst {
  139.     short        size;
  140.     short        flags;
  141.     m68kaddr    *required;
  142.     short        labelnum;
  143. };
  144.  
  145. extern struct inst    *insts;
  146. extern m68kaddr        maxoffset;
  147.  
  148. /*
  149.  * The lowest 2 bits of flags hold the number of dependencies
  150.  * so we start with 4 below.
  151.  */
  152. #define ISBRA    0x0004
  153. #define ISBSR    0x0008
  154. #define ISBRcc    0x0010
  155. #define ISDBcc    0x0020
  156. #define ISRTS    0x0040
  157. #define ISJMP    0x0080
  158. #define ISJSR    0x0100
  159. #define ISLINK    0x0200
  160. #define ISUNLK    0x0400
  161. #define ISLABEL    0x0800
  162. #define ISGOOD    0x1000
  163. #define ISFPU    0x2000
  164.  
  165. /*
  166.  * These are overloaded for floating-point constants.
  167.  */
  168. #define L_ISSINGLE    ISBRA
  169. #define L_ISDOUBLE    ISBSR
  170. #define L_ISEXTENDED    ISBRcc
  171. #define L_ISPACKED    ISDBcc
  172.  
  173. extern m68kaddr    nextlabel(m68kaddr);
  174. extern void    disassemble(void);
  175.  
  176. struct cp {
  177.     char    *prefix;
  178.     void    (*gen)(m68kword);
  179.     char    *(*cc)(unsigned int);
  180. };
  181.  
  182. extern struct cp    coproc[];
  183.  
  184. /* pgen.c functions */
  185. extern void    pgen(m68kword);
  186. extern char    *pcc(unsigned);
  187.  
  188. /* fgen.c functions */
  189. extern void    fgen(m68kword);
  190. extern char    *fcc(unsigned);
  191. extern int    flis2type(int);
  192. extern int    ftype2lis(int);
  193. extern size_t    fsizeof(int);
  194.  
  195. /* inst2.c functions */
  196. extern void    bit_dynamic(m68kword);
  197. extern void    bit_static(m68kword);
  198. extern void    biti_reg(const char *, int, const char *);
  199. extern void    biti_size(const char *, m68kword);
  200. extern void    cmp2_chk2(m68kword);
  201. extern void    movep(m68kword);
  202. extern void    cas(m68kword);
  203. extern void    cas2(m68kword);
  204. extern void    moves(m68kword);
  205. extern void    move(m68kword, int);
  206. extern void    misc_size(const char *, m68kword);
  207. extern void    misc_ea(const char *, m68kword, int);
  208. extern void    chk(m68kword);
  209. extern void    lea(m68kword);
  210. extern void    link(m68kword, int);
  211. extern void    unlk(m68kword);
  212. extern void    swap(m68kword);
  213. extern void    bkpt(m68kword);
  214. extern void    trap(m68kword);
  215. extern void    stop_rtd(const char *);
  216. extern void    movec(int);
  217. extern void    ext(m68kword);
  218. extern void    movereg(m68kword, const char *, int);
  219. extern void    moveusp(m68kword, int);
  220. extern void    movem(m68kword, int);
  221. extern void    dbcc(m68kword);
  222. extern void    trapcc(m68kword);
  223. extern void    scc(m68kword);
  224. extern void    pack_unpk(const char *, m68kword);
  225. extern void    addq_subq(m68kword);
  226. extern void    op1(const char *, m68kword);
  227. extern void    op2(const char *, m68kword);
  228. extern void    op2long(const char *, m68kword);
  229. extern void    opa(const char *, m68kword);
  230. extern void    opx(const char *, m68kword, int, int);
  231. extern void    exg(m68kword, char, char);
  232. extern void    bitfield(m68kword);
  233. extern void    getshiftname(char *, int, int);
  234. extern void    shift(m68kword);
  235. extern void    cptrapcc(struct cp *, m68kword);
  236. extern void    cpdbcc(struct cp *, m68kword);
  237. extern void    cpbcc(struct cp *, m68kword);
  238. extern void    cpscc(struct cp *, m68kword);
  239. extern void    cpsave(const char *, m68kword);
  240. extern void    cprestore(const char *, m68kword);
  241.  
  242. /* inst1.c functions */
  243. extern void    bit_movep_immediate(m68kword);
  244. extern void    movebyte(m68kword);
  245. extern void    movelong(m68kword);
  246. extern void    moveword(m68kword);
  247. extern void    misc(m68kword);
  248. extern void    addq_subq_scc_dbcc_trapcc(m68kword);
  249. extern int    bcc_bsr(m68kword);
  250. extern void    moveq(m68kword);
  251. extern void    or_div_sbcd(m68kword);
  252. extern void    sub_subx(m68kword);
  253. extern void    aline(m68kword);
  254. extern void    cmp_eor(m68kword);
  255. extern void    and_mul_abcd_exg(m68kword);
  256. extern void    add_addx(m68kword);
  257. extern void    shift_rotate_bitfield(m68kword);
  258. extern void    coprocessor(m68kword);
  259. extern void    fline(m68kword);
  260. extern void    unimplemented(m68kword);
  261.  
  262. /* utils.c functions */
  263. extern int    immsprintf(char *, long);
  264. extern long    signextend(long, int);
  265. extern int    nextword(m68kword *);
  266. extern long    getval(int, int *);
  267. extern char    *Areg(int);
  268. extern void    Areg2(char [], char, int);
  269. extern int    fpoint(u32bit_t *, int, char *);
  270. extern int    getea(char *, int, int, int);
  271. extern void    instprint(int, const char *, ...);
  272. extern char    *regbyte(char *, unsigned char, char *, int);
  273. extern void    revbits(unsigned long *, size_t);
  274.  
  275. #endif /* DIS_H */
  276.