/* asm.h */ /* * (C) Copyright 1989 * All Rights Reserved * * Alan R. Baldwin * 721 Berkeley St. * Kent, Ohio 44240 */ /* DECUS C void definition */ #ifdef decus #define VOID char #else #define VOID void #endif /* * Case Sensitivity Flag */ #define CASE_SENSITIVE 1 /* * Assembler header. */ #define LFTERM '(' /* Left expression delimeter */ #define RTTERM ')' /* Right expression delimeter */ #define NCPS 8 /* Chars. per symbol */ #define HUGE 1000 /* A huge number */ #define NERR 3 /* Errors per line */ #define NINPUT 128 /* Input buffer size */ #define NCODE 128 /* Listing code buffer size */ #define NTITL 64 /* Title buffer size */ #define NSBTL 64 /* SubTitle buffer size */ #define NHASH 64 /* Buckets in hash table */ #define HMASK 077 /* Hash mask */ #define NLPP 60 /* Lines per page */ #define MAXFIL 6 /* Maximum command line input files */ #define MAXINC 6 /* Maximum nesting of include files */ #define MAXIF 10 /* Maximum nesting of if/else/endif */ #define FILSPC 15 /* Chars. in filespec */ #define NLIST 0 /* No listing */ #define SLIST 1 /* Source only */ #define ALIST 2 /* Address only */ #define CLIST 3 /* Code */ #define dot (&sym[0]) /* Dot, current loc */ #define dca (&area[0]) /* Dca, default code area */ typedef unsigned addr_t; struct area { struct area *a_ap; /* Area link */ char a_id[NCPS]; /* Area Name */ int a_ref; /* Ref. number */ addr_t a_size; /* Area size */ addr_t a_fuzz; /* Area fuzz */ int a_flag; /* Area flags */ }; #define A_CON 000 /* Concatenating */ #define A_OVR 004 /* Overlaying */ #define A_REL 000 /* Relocatable */ #define A_ABS 010 /* absolute */ struct mne { struct mne *m_mp; /* Hash link */ char m_id[NCPS]; /* Mnemonic */ char m_type; /* Mnemonic subtype */ char m_flag; /* Mnemonic flags */ addr_t m_valu; /* Value */ }; struct sym { struct sym *s_sp; /* Hash link */ struct tsym *s_tsym; /* Temporary symbol link */ char s_id[NCPS]; /* Symbol */ char s_type; /* Symbol subtype */ char s_flag; /* Symbol flags */ struct area *s_area; /* Area line, 0 if absolute */ int s_ref; /* Ref. number */ addr_t s_addr; /* Address */ }; #define S_GBL 01 /* Global */ #define S_ASG 02 /* Assigned */ #define S_MDF 04 /* Mult. def */ #define S_END 010 /* End mark for pst. */ #define S_NEW 0 /* New name */ #define S_USER 1 /* User name */ /* unused slot */ /* unused slot */ /* unused slot */ #define S_BYTE 5 /* .byte */ #define S_WORD 6 /* .word */ #define S_ASCII 7 /* .ascii */ #define S_ASCIZ 8 /* .asciz */ #define S_BLK 9 /* .blkb or .blkw */ #define S_INCL 10 /* .include */ #define S_DAREA 11 /* .area */ #define S_ATYP 12 /* .area type */ #define S_AREA 13 /* .area name */ #define S_GLOBL 14 /* .globl */ #define S_PAGE 15 /* .page */ #define S_TITLE 16 /* .title */ #define S_SBTL 17 /* .sbttl */ #define S_IF 18 /* .if */ #define S_ELSE 19 /* .else */ #define S_ENDIF 20 /* .endif */ #define S_EVEN 21 /* .even */ #define S_ODD 22 /* .odd */ #define S_RADIX 23 /* .radix */ #define S_ORG 24 /* .org */ #define S_MODUL 25 /* .module */ struct tsym { struct tsym *t_lnk; /* Link to next */ char t_num; /* 0-255$ */ char t_flg; /* flags */ struct area *t_area; /* Area */ addr_t t_addr; /* Address */ }; extern jmp_buf jump_env; extern int inpfil; extern int incfil; extern int cfile; extern int flevel; extern int tlevel; extern int ifcnd[]; extern int iflvl[]; extern int radix; extern VOID *new(); extern int line; extern int page; extern int lop; extern int pass; extern int lflag; extern int gflag; extern int aflag; extern int oflag; extern int sflag; extern int xflag; extern addr_t laddr; extern addr_t fuzz; extern int lmode; extern struct area area[]; extern struct area *areap; extern struct sym sym[]; extern struct sym *symp; extern struct sym *symhash[NHASH]; extern struct mne *mnehash[NHASH]; extern char *ep; extern char eb[NERR]; extern char *ip; extern char ib[NINPUT]; extern char *cp; extern char cb[NCODE]; extern char tb[NTITL]; extern char stb[NSBTL]; extern char symtbl[]; extern char aretbl[]; extern char module[NCPS]; extern FILE *lfp; extern FILE *ofp; extern FILE *tfp; extern FILE *sfp[]; extern FILE *ifp[]; extern char ctype[]; #if CASE_SENSITIVE #else extern char ccase[]; #endif #define LETTER 0 #define DIGIT 1 #define BINOP 2 #define ETC 3 #define ILL 4 #define SPACE 5 /* * Expression. */ struct expr { char e_mode; /* Address mode */ char e_flag; /* Symbol flag */ addr_t e_addr; /* Address */ union { struct area *e_ap; struct sym *e_sp; } e_base; /* Rel. base */ }; /* C Library functions */ /* for reference only extern VOID * calloc(); extern int fclose(); extern char * fgets(); extern FILE * fopen(); extern int fprintf(); extern VOID longjmp(); extern VOID * malloc(); extern int printf(); extern char putc(); extern int rewind(); extern int setjmp(); extern int strcmp(); extern char * strcpy(); extern int strlen(); extern char * strncpy(); */ /* Machine independent functions */ /* asmain.c */ extern VOID asmbl(); extern VOID main(); extern VOID newdot(); extern VOID phase(); extern VOID usage(); /* aslex.c */ extern char endline(); extern char get(); extern VOID getid(); extern int getline(); extern char getmap(); extern char getnb(); extern int more(); extern VOID unget(); /* assym.c */ extern struct area * alookup(); extern struct mne * mlookup(); extern int hash(); extern struct sym * lookup(); extern VOID * new(); extern int symeq(); extern VOID syminit(); extern VOID symglob(); extern VOID allglob(); /* assubr.c */ extern VOID aerr(); extern VOID diag(); extern VOID err(); extern VOID qerr(); extern VOID rerr(); /* asexpr.c */ extern VOID abscheck(); extern addr_t absexpr(); extern int digit(); extern VOID expr(); extern int oprio(); extern VOID term(); /* aslist.c */ extern VOID list(); extern VOID list1(); extern VOID lstsym(); extern VOID slew(); /* asout.c */ extern int hibyte(); extern int lobyte(); extern VOID out(); extern VOID outab(); extern VOID outarea(); extern VOID outaw(); extern VOID outall(); extern VOID outbuf(); extern VOID outchk(); extern VOID outgsd(); extern VOID outrb(); extern VOID outrw(); extern VOID outsym(); extern VOID out_lb(); extern VOID out_lw(); extern VOID out_rw(); extern VOID out_tw(); /* Machine dependent variables */ extern char * cpu; extern char * dsft; extern int hilo; extern struct mne mne[]; /* Machine dependent functions */ extern VOID machin(); extern VOID minit();