Logo Search packages:      
Sourcecode: linux86 version File versions  Download package

const.h

/* Speed and space hacks for BCC */
#ifdef __AS386_16__
#define LOW_BYTE  0     /* must be changed for big-endian */
#else

#define S_ALIGNMENT     sizeof(long)
#endif

/* const.h - constants for assembler */

/* major switches */

/* #define MC6809 */          /* generate 6809 code */
#ifndef MC6809
#define I80386                /* generate 80386 code */
#endif
#define MNSIZE                /* allow byte size in mnemonic, e.g. "movb" */
#undef SOS_EDOS               /* source OS is EDOS */

/* defaults */

#define DIRCHAR         '/'   /* character separating filename from dir */
#define INBUFSIZE 8192
#define SOS_EOLSTR      "\012"

/* defaults modified by switches */

#ifdef SOS_EDOS
# undef INBUFSIZE
# define INBUFSIZE      512
# undef SOS_EOLSTR
# define SOS_EOLSTR     "\015\012"
# define STAKSIZ  256   /* table grows up to stack less this */
#endif

#ifdef __AS386_16__
# undef INBUFSIZE
# define INBUFSIZE      512
# define STAKSIZ  512   /* table grows up to stack less this */
#endif

/* booleans */

#define FALSE           0
#define TRUE            1

/* ASCII constants */

#define ETB       23

/* C tricks */

#define EXTERN          extern
#define FORWARD         static
#define PRIVATE         static
#define PUBLIC
#define NUL_PTR         ((void*)0)

/* O/S constants */

#define CREAT_PERMS     0666
#define EOF       (-1)
#define STDIN           0
#define STDOUT          1

enum
{
/* Register codes (internal to assembler). */
#ifdef I80386

/* Index regs must be first. */
    BPREG,
    BXREG,
    DIREG,
    SIREG,
#define MAX16BITINDREG  SIREG

    EAXREG,
    EBPREG,
    EBXREG,
    ECXREG,
    EDIREG,
    EDXREG,
    ESIREG,
    ESPREG,
#define MAXINDREG ESPREG

    AXREG,
    CXREG,
    DXREG,
    SPREG,

    AHREG,
    ALREG,
    BHREG,
    BLREG,
    CHREG,
    CLREG,
    DHREG,
    DLREG,

    CSREG,
    DSREG,
    ESREG,
    FSREG,
    GSREG,
    SSREG,

    CR0REG,
    CR2REG,
    CR3REG,
    DR0REG,
    DR1REG,
    DR2REG,
    DR3REG,
    DR6REG,
    DR7REG,
    TR3REG,
    TR4REG,
    TR5REG,
    TR6REG,
    TR7REG,

    ST0REG,
    ST1REG,
    ST2REG,
    ST3REG,
    ST4REG,
    ST5REG,
    ST6REG,
    ST7REG,
#endif /* I80386 */

#ifdef MC6809

/* Index regs must be first, then PC. */
    SREG,
    UREG,
    XREG,
    YREG,
#define MAXINDREG YREG

    PCREG,
    AREG,
    BREG,
    CCREG,
    DPREG,
    DREG,
#endif /* MC6809 */

    NOREG
};

#ifdef I80386
enum
{
/* Type and size keywords. */
    BYTEOP,
    DWORDOP,
    FWORDOP,
    FAROP,
    PTROP,
    PWORDOP,
    QWORDOP,
    TBYTEOP,
    WORDOP
};
#endif /* I80386 */

/* special chars */

#define EOL       0
#define MACROCHAR '?'

enum
{
/* Symbol codes. */

/* The first 2 must be from chars in identifiers. */
    IDENT,
    INTCONST,

/* The next few are best for other possibly-multi-char tokens. */
    ADDOP,              /* also ++ */
    BINCONST,
    CHARCONST,
    GREATERTHAN,        /* also >> and context-sensitive */
    HEXCONST,
    LESSTHAN,                 /* also << and context-sensitive */
    SUBOP,              /* also -- */
    WHITESPACE,

    ANDOP,
    COMMA,
    EOLSYM,
    EQOP,
    IMMEDIATE,
    INDIRECT,
    LBRACKET,
    LPAREN,
    MACROARG,
    NOTOP,
    OROP,
    OTHERSYM,
    POSTINCOP,
    PREDECOP,
    RBRACKET,
    RPAREN,
    SLASH,              /* context-sensitive */
    SLOP,
    SROP,
    STAR,               /* context-sensitive */
    STRINGCONST,
    COLON
};

/* symbol table entry */

                        /* type entry contains following flags */
#define ENTBIT          (1<<0)      /* entry point (= OBJ_N_MASK) */
#define COMMBIT         (1<<1)      /* common */
#define LABIT           (1<<2)      /* label (a PC location or defined by EQU) */
#define MNREGBIT  (1<<3)      /* mnemonic for op or pseudo-op, or register */
#define MACBIT          (1<<4)      /* macro */
#define REDBIT          (1<<5)      /* redefined (if with LABIT or VARBIT), to do
                         * with SA_MASK (if with COMMBIT), otherwise
                         * means globl */
#define VARBIT          (1<<6)      /* variable (i.e. something defined by SET) */
#define EXPBIT          (1<<7)      /* exported (= OBJ_E_MASK) */

                        /* data entry contains following flags, valid */
                        /* for expressions as well as syms */
#define PAGE1           (1<<0)      /* page 1 machine op = MNREGBIT | PAGE1 */
#define PAGE2           (1<<1)      /* page 2 machine op = MNREGBIT | PAGE2 */
#define REGBIT          (1<<2)      /* register = MNREGBIT | REGBIT */
#define SIZEBIT         (1<<3)      /* sizing mnemonic = MNREGBIT | SIZEBIT */
#define SEGM            0x0F  /* 1st 4 bits reused for segment if !MNREGBIT */
#define RELBIT          (1<<4)      /* relative (= OBJ_A_MASK) */
#define FORBIT          (1<<5)      /* forward referenced */
#define IMPBIT          (1<<6)      /* imported (= OBJ_I_MASK) */
#define UNDBIT          (1<<7)      /* undefined */

/* object code format (Introl) */

#define OBJ_SEGSZ_TWO   0x02  /* size 2 code for segment size descriptor */

#define OBJ_MAX_ABS_LEN 64    /* max length of chunk of absolute code */

#define OBJ_ABS         0x40  /* absolute code command */
#define OBJ_OFFSET_REL  0x80  /* offset relocation command */
#define OBJ_SET_SEG     0x20  /* set segment command */
#define OBJ_SKIP_1      0x11  /* skip with 1 byte count */
#define OBJ_SKIP_2      0x12  /* skip with 2 byte count */
#define OBJ_SKIP_4      0x13  /* skip with 4 byte count */
#define OBJ_SYMBOL_REL  0xC0  /* symbol relocation command */

#define OBJ_A_MASK      0x10  /* absolute bit(symbols) */
#if OBJ_A_MASK - RELBIT       /* must match internal format (~byte 1 -> 0) */
oops - RELBIT misplaced
#endif
#define OBJ_E_MASK      0x80  /* exported bit (symbols) */
#if OBJ_E_MASK - EXPBIT       /* must match internal format (byte 0 -> 0) */
oops - EXPBIT misplaced
#endif
#define OBJ_I_MASK      0x40  /* imported bit (symbols) */
#if OBJ_I_MASK - IMPBIT       /* must match internal format (byte 1 -> 0) */
oops - IMPBIT misplaced
#endif
#define OBJ_N_MASK      0x01  /* entry bit (symbols) */
#if OBJ_N_MASK - ENTBIT       /* must match internal format (byte 0 -> 1) */
oops - ENTBIT misplaced
#endif
#define OBJ_SA_MASK     0x20  /* size allocation bit (symbols) */
#define OBJ_SZ_ONE      0x40  /* size one code for symbol value */
#define OBJ_SZ_TWO      0x80  /* size two code for symbol value */
#define OBJ_SZ_FOUR     0xC0  /* size four code for symbol value */

#define OBJ_R_MASK      0x20  /* PC-rel bit (off & sym reloc commands) */
#define OBJ_SEGM_MASK   0x0F  /* segment mask (symbols, off reloc command) */

#define OBJ_OF_MASK     0x03  /* offset size code for symbol reloc */
#define OBJ_S_MASK      0x04  /* symbol number size code for symbol reloc */

#define SYMLIS_NAMELEN  26
#define SYMLIS_LEN      (sizeof (struct sym_listing_s))

#define FILNAMLEN 64    /* max length of a file name */
#define LINLEN          256   /* max length of input line */
#define LINUM_LEN 5     /* length of formatted line number */

#define SPTSIZ          1024  /* number of symbol ptrs */
                        /* pseudo-op flags */
#define POPHI           1     /* set to print hi byte of adr */
#define POPLO           2     /* to print lo byte of ADR */
#define POPLC           4     /* to print LC */
#define POPLONG         8     /* to print high word of ADR */
#define MAXBLOCK  8     /* max nesting level of BLOCK stack */
#define MAXGET          8     /* max nesting level of GET stack */
#define MAXIF           8     /* max nesting level of IF stack */
#define MACPSIZ         (128 / sizeof (struct schain_s))
                        /* size of macro param buffer */
#define MAXMAC          8     /* max nesting level of macro stack */
#define NLOC            16    /* number of location counters */
#ifdef I80386
#define NO_SIB          0340  /* illegal sib (3 with 4) to mean no sib */
#endif

/* special segments */

#define BSSLOC          3
#define DATALOC         3
#define DPLOC           2
#define STRLOC          1
#define TEXTLOC         0

#include "errors.h"


Generated by  Doxygen 1.6.0   Back to index