|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T a
Length: 5676 (0x162c)
Types: TextFile
Names: »asm.h«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦this⟧ »EUUGD11/euug-87hel/sec1/asm/asm.h«
#include <ctype.h>
#include <stdio.h>
#define YES 1
#define NO 0
/* can't change these without changing all ops.h tables */
#define MAXOPDS 2 /* max # of operands */
#define NORMBYTE /* normal bytes (Sun, etc); else bytes swapped (vax) */
#define LINEBUFLEN 100 /* "card" input buffer size */
#define NSYMS 253 /* symbol table size */
#define INCLSTACK 10 /* max number of include nests */
#define MAXBYTPERINS 5 /* maximum instruction size */
#define BYTPERLONG 4 /* # bytes in long accumulator */
#define MAXBYTES (MAXBYTPERINS>BYTPERLONG?MAXBYTPERINS:BYTPERLONG)
#define MINBYTES (MAXBYTPERINS<BYTPERLONG?MAXBYTPERINS:BYTPERLONG)
#define LONGLEN 32 /* length of acc in bits */
#define BINBUFLEN 250 /* max bytes of data in output record */
#define iswhite(c) (c==' '||c=='\t')
#define iseol(c) (c=='\0'||c==';'||c=='\n')
#define isdelim(c) (c==','||c==':'||iseol(c)||iswhite(c))
#define islabel(c) (isalnum(c)||c=='_')
#define A_MAX 6 /* highest error code causing immediate abort */
#define E_PASS1 1 /* error codes */
#define E_PASS2 2
#define E_STOFLO 3
#define E_INPUT 4
#define E_INCL 5
#define E_INCLSYN 6
#define E_EXPR 7
#define E_UNDEF 8
#define E_ILLOP 9
#define E_MULT 10
#define E_NOPS 11
#define E_TOOBIG 12
#define E_NEG 13
#define E_SEG 14
#define E_BADOPT 15
#define E_NOEND 16
#define NOOP -1 /* expression operators */
#define PLUS 0
#define MINUS 1
#define MULT 2
#define DIV 3
#define MOD 4
#define OR 5
#define AND 6
#define EXOR 7
#define SHLF 8
#define SHRT 9
#define OPSTRING "+-*/%|&^<>" /* same order as definitions above */
typedef unsigned char Word; /* instruction word */
typedef unsigned short DWord; /* double word */
typedef unsigned long Acc; /* expression accumulator size */
typedef short Long; /* Long, that is, on an 8085: 16 bit data */
typedef char Short; /* 8 bit data */
typedef unsigned Long Memad;
typedef char Flag;
typedef union {
Word s[MAXBYTES];
Acc l;
long ls;
} itemu;
typedef struct opdclassitem { /* This defines an instruction field */
int length; /* length in bits of field */
Flag signed; /* else unsigned */
Flag byteswapped; /* data has bytes backwards */
Flag relative; /* field is relative to $ */
int offset; /* fixed value added to field */
} opdclass;
typedef struct insclassitem { /* This defines an instruction type */
int length; /* instruction length in bytes */
int mopds; /* number of operands expected */
opdclass *type[MAXOPDS]; /* each operand's field type */
int offset[MAXOPDS]; /* each operand's bit offset,
from right end of first byte */
} insclass;
typedef struct chcitem { /* Defines the alternatives for instr choices */
char *rname; /* restrictive mnemonic */
char *nname; /* non-restrictive mnemonic */
int field; /* operand that is restricted */
int lorange, hirange; /* range of restriction inclusive */
Flag relative; /* to current lc, else absolute value */
} choicedef;
typedef struct opdefitem { /* Defines an instruction */
char *name; /* instruction mnemonic */
insclass *class; /* instruction type */
Acc mask; /* mask for two bytes of instruction */
int (*action) (); /* action routine for assembly */
} opdef;
typedef struct seg { /* Defines a location counter segment */
Memad lc, start; /* segment's lc and starting loc */
char *name; /* segment name */
struct seg *next; /* pointer to next segment */
} segmnt;
typedef struct ltitem { /* Defines a label table entry */
char *name; /* symbol name */
long value; /* symbol's current value */
opdclass *type; /* symbol type (defines fields it can fill) */
segmnt *segp; /* pointer to segment value's defined in */
} symbol;
extern opdclass o_none;
extern insclass i_noopd;
extern opdef pseudotab[], optab[];
extern FILE *input[], *output, *list, *srcin, *binout;
extern char *name, *label, *op, *opd, *optop;
extern char buf[], linecopy[], *filename[];
extern int lineno[], ignerr, listlen, pseudolen, instrlen, end_found;
extern int errorstat, currinput, pass, liston, listing, binary, xref;
extern symbol predef[], *symtab;
extern Memad lc;
extern Word *dummy;
extern segmnt segmain, *seghd, *curseg, *exprseg;
extern char *malloc();
extern char *strcpy();
extern char *strcat();
extern char *mktemp();
extern char *index();
extern int geninstr();
extern int choiceinstr();
extern int do_bss();
extern int do_data();
extern int do_data2();
extern int do_end();
extern int do_equ();
extern int do_seg();
extern int do_set();
extern int do_org();
extern int do_string();
extern int do_incl();
extern int do_loff();
extern int do_lon();
extern void getargs ();
extern void init ();
extern void init2 ();
extern int process ();
extern void listit ();
extern void listint ();
extern void insert ();
extern void reporterr ();
extern int hash ();
extern long expr ();
extern int getop ();
extern long getval ();
extern int lookup ();
extern void putoutbin ();
extern void crossref ();
extern void sort ();
extern void putout ();
extern int xtod ();
extern char escape ();
extern void optional ();