home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d1xx
/
d110
/
a68k.lha
/
A68k
/
a68kglb.h
< prev
next >
Wrap
C/C++ Source or Header
|
1987-10-28
|
7KB
|
171 lines
/*------------------------------------------------------------------*/
/* */
/* MC68000 Cross Assembler */
/* */
/* Copyright (c) 1985 by Brian R. Anderson */
/* */
/* Global variables - September 3, 1987 */
/* */
/* This program may be copied for personal, non-commercial use */
/* only, provided that the above copyright notice is included */
/* on all copies of the source code. Copying for any other use */
/* without the consent of the author is prohibited. */
/* */
/*------------------------------------------------------------------*/
/* */
/* Originally published (in Modula-2) in */
/* Dr. Dobb's Journal, April, May, and June 1986. */
/* */
/* AmigaDOS conversion copyright (c) 1987 by Charlie Gibbs. */
/* */
/*------------------------------------------------------------------*/
#ifdef PRIMARY
#define GLOBAL
#else
#define GLOBAL extern
#endif
GLOBAL char SourceFN[MAXFN]; /* Source file name */
GLOBAL char HeaderFN[MAXFN]; /* Header file name */
GLOBAL FILE *InFile, *List, *Srec; /* File pointers */
GLOBAL char InclList[MAXLINE]; /* List of directories to search */
GLOBAL char IdntName[MAXLINE]; /* Program unit name */
GLOBAL int LnCnt; /* Number of lines on current page */
GLOBAL int LnMax; /* Maximum number of lines per page */
GLOBAL int PgCnt; /* Page number */
GLOBAL int XrefList; /* Produce a cross-reference listing */
GLOBAL int ListOff; /* Suppress the listing file */
GLOBAL int DumpSym; /* Dump the symbol table */
GLOBAL char TTLstring[MAXLINE]; /* Title string */
GLOBAL int LabLine; /* Last labeled line number */
GLOBAL int LineCount; /* Source line counter */
GLOBAL char Line[MAXLINE]; /* Current source line */
GLOBAL char Label[MAXLINE]; /* Instruction label */
GLOBAL char OpCode[MAXLINE]; /* Instruction mnemonic */
GLOBAL char SrcOp[MAXLINE]; /* First (source) operand */
GLOBAL char DestOp[MAXLINE]; /* Second (destination) operand */
GLOBAL int OpLoc, SrcLoc, DestLoc; /* Operands start here */
GLOBAL int Dir, PrevDir; /* Assembler directive */
GLOBAL int NumSyms; /* Number of symbols */
GLOBAL long ObjOp, ObjSrc, ObjDest; /* OpCode, Source, Dest. */
GLOBAL char ObjString[MAXLINE]; /* String data */
GLOBAL int nO, nS, nD, nX; /* Length of above components */
GLOBAL int PrntAddr; /* Print AddrCnt on listing */
GLOBAL int SuppList; /* Suppress listing file */
GLOBAL long Hunk2; /* Hunk number (from GetValue) */
GLOBAL int DefLine2; /* Definition line number */
GLOBAL int GotEqur; /* We have register equates */
GLOBAL int Pass2; /* Pass 2 flag */
GLOBAL long AddrCnt; /* Location counter */
GLOBAL long AddrAdv; /* Bump AddrCnt by this much */
GLOBAL long EndAddr; /* END statement transfer address */
GLOBAL long SectStart; /* Current section (or portion) starts here */
GLOBAL int SectLine; /* Line number where section started */
GLOBAL long HunkType; /* Current hunk type */
GLOBAL long HunkFlags; /* Hunk flags (MEMF_FAST or MEMF_CHIP) */
GLOBAL long CurrHunk; /* Current hunk number */
GLOBAL long NextHunk; /* Next available hunk number */
GLOBAL long LenPos; /* Seek position of current hunk length */
GLOBAL int SFormat; /* Generate S-record format */
GLOBAL long StartAddr; /* Address that record starts on */
GLOBAL long TempAddr; /* Address of where we are now */
struct SymTab { /* Symbol table */
char *Nam; /* Pointer to symbol (on heap) */
long Val; /* Value */
long Hunk; /* Hunk no. (~(external symbol heap offset) if < 0) */
int Defn; /* Line number where defined */
int Flags; /* Flags bits: 0 - XREF
1 - XDEF
2 - SET
3 - MACRO (symbol is preceded by blank)
4 - SECTION (name preceded by 2 blanks)
5 - register name (EQUR)
6 - register list (REG) */
struct Ref *Ref1; /* Pointer to first reference entry */
};
GLOBAL struct SymTab *SymStart; /* The symbol table starts here */
GLOBAL struct SymTab *Sym; /* ReadSymTab sets this up */
GLOBAL struct SymTab *Sect; /* Current section's entry */
struct Ref { /* Reference entry */
struct Ref *NextRef; /* Pointer to next reference entry */
int RefNum[MAXREF]; /* Reference line numbers */
};
GLOBAL struct Ref *RefStart; /* Reference entries start here */
struct RelTab { /* Relocation table - goes on the heap */
long Offset; /* Offset to relocatable value */
long Hunk; /* Hunk type to relocate relative to */
int Size; /* Size of relocatable value */
};
GLOBAL struct RelTab *RelStart; /* Relocation data starts here */
struct TermStack { /* Parser's term stack */
long value; /* Value */
int hunk; /* Hunk number */
int oploc; /* Location in source statement */
int defline; /* Line number where defined */
};
GLOBAL struct TermStack *Term; /* Term stack pointer */
struct OpStack { /* Parser's operator stack */
char chr; /* Operator character */
int prec; /* Precedence */
};
GLOBAL struct OpStack *Ops; /* Operator stack pointer */
GLOBAL char *Heap; /* Primary heap - allocated by "malloc" */
GLOBAL char *HeapLim; /* Next unused space on the heap */
GLOBAL char *HighHeap; /* High-water mark on the heap */
GLOBAL char *LowHeap; /* Low limit from top of heap */
GLOBAL int InFNum; /* Current input nesting level */
struct InFCtl {
long Pos; /* Current position in input */
char *UPtr; /* Current position in user macro or 0 */
char *NPtr; /* File name stack pointer */
int Line; /* Current line number in this file */
int NArg; /* Number of macro arguments or -1 */
int MCnt; /* Macro expansion number (for \@) */
};
GLOBAL struct InFCtl *InF; /* Macro/include file stack pointer */
GLOBAL struct InFCtl *LowInF; /* "Low-water mark" for InF */
GLOBAL char *Heap2; /* Secondary heap */
GLOBAL char *NextFNS; /* Next input file path/name */
GLOBAL char *High2; /* Secondary high-water mark */
GLOBAL char *Low2; /* Low limit from top of heap */
GLOBAL int OuterMac; /* Level number of outermost macro */
GLOBAL int MacCount; /* Number of macros expanded */
GLOBAL int SkipNest; /* Skipped IF/ENDC nesting count */
struct OpConfig { /* Operand configuration */
long Value; /* Value */
long Hunk; /* Hunk number */
int Defn; /* Line number where defined */
int Mode; /* Addressing mode */
int Loc; /* Location of operand on Line */
int Rn; /* Register number */
int Xn; /* Index register number */
int Xsize; /* Size of index */
int X; /* Is index Data or Address reg? */
};
GLOBAL struct OpConfig Src, Dest; /* Source and destination operands */
GLOBAL int Size; /* size for OpCode */
GLOBAL int InstSize; /* Size of instruction, including operands */
GLOBAL int AdrModeA; /* Addressing modes for this instruction */
GLOBAL int AdrModeB; /* ditto */
GLOBAL int Op; /* Raw bit pattern for OpCode */
GLOBAL int ErrorCount;
/* Error message tables */
GLOBAL int errlim, errcode[ERRMAX], errpos[ERRMAX];