home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_200 / 292_01 / asm.h < prev    next >
C/C++ Source or Header  |  1990-07-17  |  8KB  |  370 lines

  1. /* asm.h */
  2.  
  3. /*
  4.  * (C) Copyright 1989,1990
  5.  * All Rights Reserved
  6.  *
  7.  * Alan R. Baldwin
  8.  * 721 Berkeley St.
  9.  * Kent, Ohio  44240
  10.  */
  11.  
  12. #define    VERSION    "V01.50"
  13.  
  14. /* DECUS C void definition */
  15. /* File/extension seperator */
  16.  
  17. #ifdef    decus
  18. #define    VOID    char
  19. #define    FSEPX    '.'
  20. #endif
  21.  
  22. /* PDOS C void definition */
  23. /* File/extension seperator */
  24.  
  25. #ifdef    PDOS
  26. #define    VOID    char
  27. #define    FSEPX    ':'
  28. #endif
  29.  
  30. /* Default void definition */
  31. /* File/extension seperator */
  32.  
  33. #ifndef    VOID
  34. #define    VOID    void
  35. #define    FSEPX    '.'
  36. #endif
  37.  
  38. /*
  39.  * Case Sensitivity Flag
  40.  */
  41. #define    CASE_SENSITIVE    1
  42.  
  43. /*
  44.  * Assembler definitions.
  45.  */
  46. #define    LFTERM    '('        /* Left expression delimeter */
  47. #define    RTTERM    ')'        /* Right expression delimeter */
  48.  
  49. #define NCPS    8        /* Chars. per symbol */
  50. #define    HUGE    1000        /* A huge number */
  51. #define NERR    3        /* Errors per line */
  52. #define NINPUT    128        /* Input buffer size */
  53. #define NCODE    128        /* Listing code buffer size */
  54. #define NTITL    64        /* Title buffer size */
  55. #define    NSBTL    64        /* SubTitle buffer size */
  56. #define    NHASH    64        /* Buckets in hash table */
  57. #define    HMASK    077        /* Hash mask */
  58. #define    NLPP    60        /* Lines per page */
  59. #define    MAXFIL    6        /* Maximum command line input files */
  60. #define    MAXINC    6        /* Maximum nesting of include files */
  61. #define    MAXIF    10        /* Maximum nesting of if/else/endif */
  62. #define    FILSPC    15        /* Chars. in filespec */
  63.  
  64. #define NLIST    0        /* No listing */
  65. #define SLIST    1        /* Source only */
  66. #define ALIST    2        /* Address only */
  67. #define CLIST    3        /* Code */
  68.  
  69. #define    dot    sym[0]        /* Dot, current loc */
  70. #define    dca    area[0]        /* Dca, default code area */
  71.  
  72. typedef    unsigned int addr_t;
  73.  
  74. struct    area
  75. {
  76.     struct    area *a_ap;    /* Area link */
  77.     char    a_id[NCPS];    /* Area Name */
  78.     int    a_ref;        /* Ref. number */
  79.     addr_t    a_size;        /* Area size */
  80.     addr_t    a_fuzz;        /* Area fuzz */
  81.     int    a_flag;        /* Area flags */
  82. };
  83.  
  84. #define    A_CON    000        /* Concatenating */
  85. #define    A_OVR    004        /* Overlaying */
  86. #define    A_REL    000        /* Relocatable */
  87. #define    A_ABS    010        /* absolute */
  88. #define    A_NOPAG    000        /* Non-Paged */
  89. #define    A_PAG    020        /* Paged */
  90.  
  91. #define    R_WORD    0000        /* 16 bit */
  92. #define    R_BYTE    0001        /*  8 bit */
  93.  
  94. #define    R_AREA    0000        /* Base type */
  95. #define    R_SYM    0002
  96.  
  97. #define    R_NORM    0000        /* PC adjust */
  98. #define    R_PCR    0004
  99.  
  100. #define    R_BYT1    0000        /* Byte count for R_BYTE = 1 */
  101. #define    R_BYT2    0010        /* Byte count for R_BYTE = 2 */
  102.  
  103. #define    R_SGND    0000        /* Signed Byte */
  104. #define    R_USGN    0020        /* Unsigned Byte */
  105.  
  106. #define    R_NOPAG    0000        /* Page Mode */
  107. #define    R_PAG0    0040        /* Page '0' */
  108. #define    R_PAG    0100        /* Page 'nnn' */
  109.  
  110. #define    R_HIGH    0040000        /* High Byte */
  111. #define    R_RELOC    0100000        /* Relocation */
  112.  
  113. #define    R_DEF    00        /* Global def. */
  114. #define    R_REF    01        /* Global ref. */
  115. #define    R_REL    00        /* Relocatable */
  116. #define    R_ABS    02        /* Absolute */
  117. #define    R_GBL    00        /* Global */
  118. #define    R_LCL    04        /* Local */
  119.  
  120. struct    mne
  121. {
  122.     struct    mne *m_mp;    /* Hash link */
  123.     char    m_id[NCPS];    /* Mnemonic */
  124.     char    m_type;        /* Mnemonic subtype */
  125.     char    m_flag;        /* Mnemonic flags */
  126.     addr_t    m_valu;        /* Value */
  127. };
  128.  
  129. struct    sym
  130. {
  131.     struct    sym  *s_sp;    /* Hash link */
  132.     struct    tsym *s_tsym;    /* Temporary symbol link */
  133.     char    s_id[NCPS];    /* Symbol */
  134.     char    s_type;        /* Symbol subtype */
  135.     char    s_flag;        /* Symbol flags */
  136.     struct    area *s_area;    /* Area line, 0 if absolute */
  137.     int    s_ref;        /* Ref. number */
  138.     addr_t    s_addr;        /* Address */
  139. };
  140.  
  141. #define    S_GBL    01        /* Global */
  142. #define    S_ASG    02        /* Assigned */
  143. #define    S_MDF    04        /* Mult. def */
  144. #define    S_END    010        /* End mark for pst. */
  145.  
  146. #define    S_NEW    0        /* New name */
  147. #define    S_USER    1        /* User name */
  148.                 /* unused slot */
  149.                 /* unused slot */
  150.                 /* unused slot */
  151.  
  152. #define    S_BYTE    5        /* .byte */
  153. #define    S_WORD    6        /* .word */
  154. #define    S_ASCII    7        /* .ascii */
  155. #define    S_ASCIZ    8        /* .asciz */
  156. #define    S_BLK    9        /* .blkb or .blkw */
  157. #define    S_INCL    10        /* .include */
  158. #define    S_DAREA    11        /* .area */
  159. #define    S_ATYP    12        /* .area type */
  160. #define    S_AREA    13        /* .area name */
  161. #define    S_GLOBL    14        /* .globl */
  162. #define    S_PAGE    15        /* .page */
  163. #define    S_TITLE    16        /* .title */
  164. #define    S_SBTL    17        /* .sbttl */
  165. #define    S_IF    18        /* .if */
  166. #define    S_ELSE    19        /* .else */
  167. #define    S_ENDIF    20        /* .endif */
  168. #define    S_EVEN    21        /* .even */
  169. #define    S_ODD    22        /* .odd */
  170. #define    S_RADIX    23        /* .radix */
  171. #define    S_ORG    24        /* .org */
  172. #define    S_MODUL    25        /* .module */
  173.  
  174. struct    tsym
  175. {
  176.     struct    tsym *t_lnk;    /* Link to next */
  177.     char t_num;        /* 0-255$ */
  178.     char t_flg;        /* flags */
  179.     struct    area *t_area;    /* Area */
  180.     addr_t    t_addr;        /* Address */
  181. };
  182.  
  183. extern    jmp_buf    jump_env;
  184. extern    int    inpfil;
  185. extern    int    incfil;
  186. extern    int    cfile;
  187. extern    int    flevel;
  188. extern    int    tlevel;
  189. extern    int    ifcnd[];
  190. extern    int    iflvl[];
  191. extern    int    radix;
  192. extern    VOID    *new();
  193. extern    int    line;
  194. extern    int    page;
  195. extern    int    lop;
  196. extern    int    pass;
  197. extern    int    lflag;
  198. extern    int    gflag;
  199. extern    int    aflag;
  200. extern    int    oflag;
  201. extern    int    sflag;
  202. extern    int    xflag;
  203. extern    int    fflag;
  204. extern    addr_t    laddr;
  205. extern    addr_t    fuzz;
  206. extern    int    lmode;
  207. extern    struct    area    area[];
  208. extern    struct    area *areap;
  209. extern    struct    sym    sym[];
  210. extern    struct    sym *symp;
  211. extern    struct    sym *symhash[NHASH];
  212. extern    struct    mne *mnehash[NHASH];
  213. extern    char    *ep;
  214. extern    char    eb[NERR];
  215. extern    char    *ip;
  216. extern    char    ib[NINPUT];
  217. extern    char    *cp;
  218. extern    char    cb[NCODE];
  219. extern    int    *cpt;
  220. extern    int    cbt[NCODE];
  221. extern    char    tb[NTITL];
  222. extern    char    stb[NSBTL];
  223. extern    char    symtbl[];
  224. extern    char    aretbl[];
  225. extern    char    module[NCPS];
  226. extern    FILE    *lfp;
  227. extern    FILE    *ofp;
  228. extern    FILE    *tfp;
  229. extern    FILE    *sfp[];
  230. extern    FILE    *ifp[];
  231. extern    char    ctype[];
  232.  
  233. #if    CASE_SENSITIVE
  234. #else
  235. extern    char    ccase[];
  236. #endif
  237.  
  238. #define    SPACE    0000
  239. #define ETC    0000
  240. #define    LETTER    0001
  241. #define    DIGIT    0002
  242. #define    BINOP    0004
  243. #define    RAD2    0010
  244. #define    RAD8    0020
  245. #define    RAD10    0040
  246. #define    RAD16    0100
  247. #define    ILL    0200
  248.  
  249. #define    DGT2    DIGIT|RAD16|RAD10|RAD8|RAD2
  250. #define    DGT8    DIGIT|RAD16|RAD10|RAD8
  251. #define    DGT10    DIGIT|RAD16|RAD10
  252. #define    LTR16    LETTER|RAD16
  253.  
  254. /*
  255.  * Expression.
  256.  */
  257. struct    expr
  258. {
  259.     char    e_mode;        /* Address mode */
  260.     char    e_flag;        /* Symbol flag */
  261.     addr_t    e_addr;        /* Address */
  262.     union    {
  263.         struct area *e_ap;
  264.         struct sym  *e_sp;
  265.     } e_base;        /* Rel. base */
  266. };
  267.  
  268. /* C Library functions */
  269. /* for reference only
  270. extern    int        fclose();
  271. extern    char *        fgets();
  272. extern    FILE *        fopen();
  273. extern    int        fprintf();
  274. extern    VOID        longjmp();
  275. extern    VOID *        malloc();
  276. extern    int        printf();
  277. extern    char        putc();
  278. extern    int        rewind();
  279. extern    int        setjmp();
  280. extern    int        strcmp();
  281. extern    char *        strcpy();
  282. extern    int        strlen();
  283. extern    char *        strncpy();
  284. */
  285.  
  286. /* Machine independent functions */
  287.  
  288. /* asmain.c */
  289. extern    VOID        asmbl();
  290. extern    VOID        main();
  291. extern    VOID        newdot();
  292. extern    VOID        phase();
  293. extern    VOID        usage();
  294.  
  295. /* aslex.c */
  296. extern    char        endline();
  297. extern    char        get();
  298. extern    VOID        getid();
  299. extern    int        getline();
  300. extern    char        getmap();
  301. extern    char        getnb();
  302. extern    int        more();
  303. extern    VOID        unget();
  304.  
  305. /* assym.c */
  306. extern    struct    area *    alookup();
  307. extern    struct    mne *    mlookup();
  308. extern    int        hash();
  309. extern    struct    sym *    lookup();
  310. extern    VOID *        new();
  311. extern    int        symeq();
  312. extern    VOID        syminit();
  313. extern    VOID        symglob();
  314. extern    VOID        allglob();
  315.  
  316. /* assubr.c */
  317. extern    VOID        aerr();
  318. extern    VOID        diag();
  319. extern    VOID        err();
  320. extern    VOID        qerr();
  321. extern    VOID        rerr();
  322.  
  323. /* asexpr.c */
  324. extern    VOID        abscheck();
  325. extern    addr_t        absexpr();
  326. extern    int        digit();
  327. extern    VOID        expr();
  328. extern    int        oprio();
  329. extern    VOID        term();
  330.  
  331. /* aslist.c */
  332. extern    VOID        list();
  333. extern    VOID        list1();
  334. extern    VOID        list2();
  335. extern    VOID        lstsym();
  336. extern    VOID        slew();
  337.  
  338. /* asout.c */
  339. extern    int        hibyte();
  340. extern    int        lobyte();
  341. extern    VOID        out();
  342. extern    VOID        outab();
  343. extern    VOID        outarea();
  344. extern    VOID        outaw();
  345. extern    VOID        outall();
  346. extern    VOID        outbuf();
  347. extern    VOID        outchk();
  348. extern    VOID        outgsd();
  349. extern    VOID        outrb();
  350. extern    VOID        outrw();
  351. extern    VOID        outsym();
  352. extern    VOID        out_lb();
  353. extern    VOID        out_lw();
  354. extern    VOID        out_rw();
  355. extern    VOID        out_tw();
  356.  
  357.  
  358. /* Machine dependent variables */
  359.  
  360. extern    char *        cpu;
  361. extern    char *        dsft;
  362. extern    int        hilo;
  363. extern    struct    mne    mne[];
  364.  
  365. /* Machine dependent functions */
  366.  
  367. extern    VOID        machin();
  368. extern    VOID        minit();
  369.  
  370.