home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 332.lha / DAsm_v2.12 / src / asm.h < prev    next >
C/C++ Source or Header  |  1989-12-27  |  11KB  |  367 lines

  1.  
  2. /*
  3.  *  ASM65.H
  4.  *
  5.  *  (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
  6.  *
  7.  *  Structures and definitions
  8.  */
  9.  
  10. #include <stdio.h>
  11.  
  12. #ifdef LATTICE
  13. #include <stdlib.h>
  14. #include <string.h>
  15. #define ARGS(blah) blah
  16. #define BMov(s,d,n) movmem(((char *)s),((char *)d),(int)n)
  17. #define BSet(s,n,c) setmem(((char *)s),(unsigned)n,(int)c)
  18. #define BZero(s,n)  setmem(((char *)s),(unsigned)n,0)
  19. #define BCmp(s,d,n) memcmp(((char *)s),((char *)d),(int)n)
  20.  
  21. #else
  22. #define ARGS(blah) ()
  23. extern void *malloc();
  24. extern char *strcpy();
  25. extern char *strcat();
  26. #endif
  27.  
  28. #ifdef UNIX
  29. #define BMov(s,d,n) bcopy(s,d,n)
  30. #define BSet(s,n,c) xbset(s,n,c)
  31. #endif
  32.  
  33. #ifdef IBM
  34. #define BMov(s,d,n) movmem(s,d,(int)n)
  35. #define BSet(s,n,c) setmem(s,(int)n,(int)c)
  36. #define BZero(s,n)  setmem(s,(int)n,0)
  37.  
  38. #endif
  39.  
  40. #ifdef IBM
  41. typedef char     ubyte;
  42. typedef unsigned uword;
  43. typedef long     ulong;
  44. typedef int     void;
  45. #else
  46. typedef unsigned char ubyte;
  47. typedef unsigned short uword;
  48. typedef unsigned long ulong;
  49. #endif
  50.  
  51. #define MNE        struct _MNE
  52. #define MACRO        struct _MACRO
  53. #define INCFILE     struct _INCFILE
  54. #define REPLOOP     struct _REPLOOP
  55. #define IFSTACK     struct _IFSTACK
  56. #define SEGMENT     struct _SEGMENT
  57. #define SYMBOL        struct _SYMBOL
  58. #define STRLIST     struct _STRLIST
  59.  
  60. #define DEFORGFILL  255
  61. #define SHASHSIZE   1024
  62. #define MHASHSIZE   1024
  63. #define SHASHAND    0x03FF
  64. #define MHASHAND    0x03FF
  65. #define ALLOCSIZE   16384
  66. #define MAXMACLEVEL 32
  67. #define TAB        9
  68.  
  69. #define OUTFORM1    0
  70. #define OUTFORM2    1
  71. #define OUTFORM3    2
  72.  
  73. #define AM_IMP        0        /*    implied         */
  74. #define AM_IMM8     1        /*    immediate 8  bits   */
  75. #define AM_IMM16    2        /*    immediate 16 bits   */
  76. #define AM_BYTEADR    3        /*    address 8 bits        */
  77. #define AM_BYTEADRX    4        /*    address 16 bits     */
  78. #define AM_BYTEADRY    5        /*    relative 8 bits     */
  79. #define AM_WORDADR    6        /*    index x 0 bits        */
  80. #define AM_WORDADRX    7        /*    index x 8 bits        */
  81. #define AM_WORDADRY    8        /*    index x 16 bits     */
  82. #define AM_REL        9        /*    bit inst. special   */
  83. #define AM_INDBYTEX    10        /*    bit-bra inst. spec. */
  84. #define AM_INDBYTEY    11        /*    index y 0 bits        */
  85. #define AM_INDWORD    12        /*    index y 8 bits        */
  86. #define AM_0X        13        /*    index x 0 bits        */
  87. #define AM_0Y        14        /*    index y 0 bits        */
  88. #define AM_BITMOD    15        /*    ind addr 8 bits     */
  89. #define AM_BITBRAMOD    16        /*    ind addr 16 bits    */
  90. #define NUMOC        17
  91.  
  92. #define AF_IMP        (1L << 0 )
  93. #define AF_IMM8     (1L << 1 )
  94. #define AF_IMM16    (1L << 2 )
  95. #define AF_BYTEADR    (1L << 3 )
  96. #define AF_BYTEADRX    (1L << 4 )
  97. #define AF_BYTEADRY    (1L << 5 )
  98. #define AF_WORDADR    (1L << 6 )
  99. #define AF_WORDADRX    (1L << 7 )
  100. #define AF_WORDADRY    (1L << 8 )
  101. #define AF_REL        (1L << 9 )
  102. #define AF_INDBYTEX    (1L << 10)
  103. #define AF_INDBYTEY    (1L << 11)
  104. #define AF_INDWORD    (1L << 12)
  105. #define AF_0X        (1L << 13)
  106. #define AF_0Y        (1L << 14)
  107. #define AF_BITMOD    (1L << 15)
  108. #define AF_BITBRAMOD    (1L << 16)
  109.  
  110. #define AM_SYMBOL    (NUMOC+0)
  111. #define AM_EXPLIST    (NUMOC+1)
  112.  
  113. #define AM_BYTE     AM_BYTEADR
  114. #define AM_WORD     AM_WORDADR
  115. #define AM_LONG     (NUMOC+2)
  116. #define AM_BSS        (NUMOC+3)
  117.  
  118.  
  119. STRLIST {
  120.     STRLIST *next;
  121.     ubyte   buf[4];
  122. };
  123.  
  124. #define MF_IF        0x04
  125. #define MF_MACRO    0x08
  126. #define MF_MASK     0x10    /*  has mask argument (byte)    */
  127. #define MF_REL        0x20    /*  has rel. address (byte)     */
  128. #define MF_IMOD     0x40    /*  instruction byte mod.    */
  129. #define MF_ENDM     0x80    /*  is v_endm            */
  130.  
  131. MNE {
  132.     MNE     *next;        /*    hash        */
  133.     void    (*vect) ARGS((char *, MNE *));      /*  dispatch        */
  134.     char    *name;        /*    actual name    */
  135.     ubyte   flags;        /*    special flags    */
  136.     ulong   okmask;
  137.     uword   opcode[NUMOC];  /*    hex codes, byte or word (>xFF) opcodes  */
  138. };
  139.  
  140. MACRO {
  141.     MACRO   *next;
  142.     void    (*vect)();
  143.     ubyte   *name;
  144.     ubyte   flags;
  145.     STRLIST *strlist;
  146. };
  147.  
  148. #define INF_MACRO   0x01
  149.  
  150. INCFILE {
  151.     INCFILE *next;  /*    previously pushed context   */
  152.     ubyte   *name;  /*    file name            */
  153.     FILE    *fi;    /*    file handle            */
  154.     ulong   lineno; /*    line number in file        */
  155.     ubyte   flags;  /*    flags (macro)               */
  156.  
  157.     /*  Only if Macro   */
  158.  
  159.     STRLIST *args;    /*  arguments to macro        */
  160.     STRLIST *strlist;    /*  current string list     */
  161.     ulong   saveidx;    /*  save localindex        */
  162. };
  163.  
  164. #define RPF_UNKNOWN 0x01    /*    value unknown        */
  165.  
  166. REPLOOP {
  167.     REPLOOP *next;  /*    previously pushed context   */
  168.     ulong   count;  /*    repeat count            */
  169.     ulong   seek;   /*    seek to top of repeat        */
  170.     ulong   lineno; /*    line number of line before  */
  171.     INCFILE *file;  /*    which include file are we in*/
  172.     ubyte   flags;
  173. };
  174.  
  175. #define IFF_UNKNOWN 0x01    /*    value unknown        */
  176. #define IFF_BASE    0x04
  177.  
  178. IFSTACK {
  179.     IFSTACK *next;  /*    previous IF            */
  180.     INCFILE *file;  /*    which include file are we in*/
  181.     ubyte   flags;
  182.     ubyte   true;   /*    1 if true, 0 if false            */
  183.     ubyte   acctrue;/*    accumulatively true (not incl this one) */
  184. };
  185.  
  186. #define SF_UNKNOWN  0x01    /*    ORG unknown            */
  187. #define SF_REF        0x04    /*    ORG referenced            */
  188. #define SF_BSS        0x10    /*    uninitialized area (U flag)     */
  189. #define SF_RORG     0x20    /*    relocatable origin active    */
  190.  
  191. SEGMENT {
  192.     SEGMENT *next;  /*    next segment in segment list    */
  193.     ubyte   *name;  /*    name of segment         */
  194.     ubyte   flags;  /*    for ORG             */
  195.     ubyte   rflags; /*    for RORG            */
  196.     ulong   org;    /*    current org            */
  197.     ulong   rorg;   /*    current rorg            */
  198.     ulong   initorg;
  199.     ulong   initrorg;
  200.     ubyte   initflags;
  201.     ubyte   initrflags;
  202. };
  203.  
  204. #define SYM_UNKNOWN 0x01    /*    value unknown        */
  205. #define SYM_REF     0x04    /*    referenced        */
  206. #define SYM_STRING  0x08    /*    result is a string    */
  207. #define SYM_SET     0x10    /*    SET instruction used    */
  208. #define SYM_MACRO   0x20    /*    symbol is a macro    */
  209. #define SYM_MASREF  0x40    /*    master reference    */
  210.  
  211. SYMBOL {
  212.     SYMBOL  *next;    /*  next symbol in hash list        */
  213.     ubyte   *name;    /*  symbol name or string if expr.  */
  214.     ubyte   *string;    /*  if symbol is actually a string  */
  215.     ubyte   flags;    /*  flags                */
  216.     ubyte   addrmode;    /*  addressing mode (expressions)   */
  217.     ulong   value;    /*  current value            */
  218.     uword   namelen;    /*  name length             */
  219. };
  220.  
  221. extern SYMBOL    *SHash[];
  222. extern MNE    *MHash[];
  223. extern INCFILE    *Incfile;
  224. extern REPLOOP    *Reploop;
  225. extern SEGMENT    *Seglist;
  226. extern IFSTACK    *Ifstack;
  227.  
  228. extern SEGMENT    *Csegment;  /*    current segment */
  229. extern ubyte    *Av[];
  230. extern ubyte    Avbuf[];
  231. extern uword    Adrbytes[];
  232. extern uword    Cvt[];
  233. extern uword    Opsize[];
  234. extern MNE    Ops[];
  235. extern uword    Mnext;        /*    mnemonic extension  */
  236. extern uword    Mlevel;
  237.  
  238. extern ubyte    Xtrace;
  239. extern ubyte    Xdebug;
  240. extern ubyte    MsbOrder;
  241. extern ubyte    Outputformat;
  242. extern ulong    Redo, Redo_why, Redo_eval;
  243. extern ulong    Localindex;
  244.  
  245. extern ubyte    F_format;
  246. extern ubyte    F_verbose;
  247. extern char    *F_outfile;
  248. extern char    *F_listfile;
  249. extern char    *F_symfile;
  250. extern char    *F_temppath;
  251. extern FILE    *FI_listfile;
  252. extern FILE    *FI_temp;
  253. extern ubyte    Fisclear;
  254. extern ulong    Plab, Pflags;
  255. extern char    Inclevel;
  256. extern char    ListMode;
  257. extern ulong    Processor;
  258.  
  259. extern uword _fmode;
  260. extern ulong  CheckSum;
  261.  
  262. extern SYMBOL    *eval ARGS((char *));
  263. extern int    alphanum ARGS((int));
  264. extern void    evaltop ARGS((void));
  265. extern void    stackarg ARGS((long, int, ubyte *));
  266. extern void    doop ARGS((void(*) ARGS((long,long,long,long)), int));
  267. extern void    op_takelsb ARGS((long, long, long, long));
  268. extern void    op_takemsb ARGS((long, long, long, long));
  269. extern void    op_negate ARGS((long, long, long, long));
  270. extern void    op_invert ARGS((long, long, long, long));
  271. extern void    op_not      ARGS((long, long, long, long));
  272. extern void    op_mult   ARGS((long, long, long, long));
  273. extern void    op_div      ARGS((long, long, long, long));
  274. extern void    op_mod      ARGS((long, long, long, long));
  275. extern void    op_question ARGS((long, long, long, long));
  276. extern void    op_add        ARGS((long, long, long, long));
  277. extern void    op_sub        ARGS((long, long, long, long));
  278. extern void    op_shiftright ARGS((long, long, long, long));
  279. extern void    op_shiftleft  ARGS((long, long, long, long));
  280. extern void    op_greater    ARGS((long, long, long, long));
  281. extern void    op_greatereq  ARGS((long, long, long, long));
  282. extern void    op_smaller    ARGS((long, long, long, long));
  283. extern void    op_smallereq  ARGS((long, long, long, long));
  284. extern void    op_eqeq       ARGS((long, long, long, long));
  285. extern void    op_noteq      ARGS((long, long, long, long));
  286. extern void    op_andand     ARGS((long, long, long, long));
  287. extern void    op_oror       ARGS((long, long, long, long));
  288. extern void    op_xor          ARGS((long, long, long, long));
  289. extern void    op_and          ARGS((long, long, long, long));
  290. extern void    op_or          ARGS((long, long, long, long));
  291.  
  292. extern ubyte    *pushchar   ARGS((ubyte *));
  293. extern ubyte    *pushhex    ARGS((ubyte *));
  294. extern ubyte    *pushoct    ARGS((ubyte *));
  295. extern ubyte    *pushdec    ARGS((ubyte *));
  296. extern ubyte    *pushbin    ARGS((ubyte *));
  297. extern ubyte    *pushstr    ARGS((ubyte *));
  298. extern ubyte    *pushsymbol ARGS((ubyte *));
  299.  
  300. extern void    v_mnemonic  ARGS((char *, MNE *));
  301. extern void    v_processor ARGS((char *, MNE *));
  302. extern void    v_trace     ARGS((char *, MNE *));
  303. extern void    v_list        ARGS((char *, MNE *));
  304. extern void    v_include   ARGS((char *, MNE *));
  305. extern void    v_seg        ARGS((char *, MNE *));
  306. extern void    v_hex        ARGS((char *, MNE *));
  307. extern void    v_err        ARGS((char *, MNE *));
  308. extern void    v_dc        ARGS((char *, MNE *));
  309. extern void    v_ds        ARGS((char *, MNE *));
  310. extern void    v_org        ARGS((char *, MNE *));
  311. extern void    v_rorg        ARGS((char *, MNE *));
  312. extern void    v_rend        ARGS((char *, MNE *));
  313. extern void    v_align     ARGS((char *, MNE *));
  314. extern void    v_subroutine ARGS((char *, MNE *));
  315. extern void    v_equ        ARGS((char *, MNE *));
  316. extern void    v_eqm        ARGS((char *, MNE *));
  317. extern void    v_echo        ARGS((char *, MNE *));
  318. extern void    v_set        ARGS((char *, MNE *));
  319.  
  320. extern void    v_execmac   ARGS((char *, MACRO *));
  321.  
  322. extern void    v_end        ARGS((char *, MNE *));
  323. extern void    v_endm        ARGS((char *, MNE *));
  324. extern void    v_mexit     ARGS((char *, MNE *));
  325.  
  326. extern void    v_ifconst   ARGS((char *, MNE *));
  327. extern void    v_ifnconst  ARGS((char *, MNE *));
  328. extern void    v_if        ARGS((char *, MNE *));
  329. extern void    v_else        ARGS((char *, MNE *));
  330. extern void    v_endif     ARGS((char *, MNE *));
  331. extern void    v_repeat    ARGS((char *, MNE *));
  332. extern void    v_repend    ARGS((char *, MNE *));
  333.  
  334. extern int    gethexdig   ARGS((int));
  335. extern void    generate    ARGS((void));
  336. extern void    closegenerate ARGS((void));
  337. extern void    genfill     ARGS((long, long, int));
  338. extern void    pushif        ARGS((int));
  339.  
  340. extern int    tabit        ARGS((char *, char *));
  341. extern ubyte    *sftos        ARGS((long, int));
  342. extern void    clearsegs   ARGS((void));
  343. extern void    clearrefs   ARGS((void));
  344. extern void    panic        ARGS((char *));
  345. extern void    findext     ARGS((ubyte *));
  346. extern void    rmnode        ARGS((ulong **, int));
  347. extern void    parse        ARGS((ubyte *));
  348. extern MNE    *findmne    ARGS((ubyte *));
  349.  
  350. extern void    v_macro     ARGS((char *, MNE *));
  351. extern void    addhashtable ARGS((MNE *));
  352. extern void    pushinclude ARGS((char *));
  353. extern void    asmerr        ARGS((short, short));
  354. extern ubyte    *zmalloc    ARGS((int));
  355. extern ubyte    *permalloc  ARGS((int));
  356. extern ubyte    *strlower   ARGS((ubyte *));
  357.  
  358. extern void    setspecial  ARGS((int, int));
  359. extern SYMBOL    *findsymbol ARGS((ubyte *, int));
  360. extern SYMBOL    *createsymbol ARGS((ubyte *, int));
  361. extern void    programlabel    ARGS((void));
  362. extern SYMBOL    *allocsymbol    ARGS((void));
  363. extern void    freesymbol  ARGS((SYMBOL *));
  364. extern void    freesymbollist ARGS((SYMBOL *));
  365.  
  366.  
  367.