home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * ASM65.H
- *
- * (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
- *
- * Structures and definitions
- */
-
- #include <stdio.h>
-
- #ifdef LATTICE
- #include <stdlib.h>
- #include <string.h>
- #define ARGS(blah) blah
- #define BMov(s,d,n) movmem(((char *)s),((char *)d),(int)n)
- #define BSet(s,n,c) setmem(((char *)s),(unsigned)n,(int)c)
- #define BZero(s,n) setmem(((char *)s),(unsigned)n,0)
- #define BCmp(s,d,n) memcmp(((char *)s),((char *)d),(int)n)
-
- #else
- #define ARGS(blah) ()
- extern void *malloc();
- extern char *strcpy();
- extern char *strcat();
- #endif
-
- #ifdef UNIX
- #define BMov(s,d,n) bcopy(s,d,n)
- #define BSet(s,n,c) xbset(s,n,c)
- #endif
-
- #ifdef IBM
- #define BMov(s,d,n) movmem(s,d,(int)n)
- #define BSet(s,n,c) setmem(s,(int)n,(int)c)
- #define BZero(s,n) setmem(s,(int)n,0)
-
- #endif
-
- #ifdef IBM
- typedef char ubyte;
- typedef unsigned uword;
- typedef long ulong;
- typedef int void;
- #else
- typedef unsigned char ubyte;
- typedef unsigned short uword;
- typedef unsigned long ulong;
- #endif
-
- #define MNE struct _MNE
- #define MACRO struct _MACRO
- #define INCFILE struct _INCFILE
- #define REPLOOP struct _REPLOOP
- #define IFSTACK struct _IFSTACK
- #define SEGMENT struct _SEGMENT
- #define SYMBOL struct _SYMBOL
- #define STRLIST struct _STRLIST
-
- #define DEFORGFILL 255
- #define SHASHSIZE 1024
- #define MHASHSIZE 1024
- #define SHASHAND 0x03FF
- #define MHASHAND 0x03FF
- #define ALLOCSIZE 16384
- #define MAXMACLEVEL 32
- #define TAB 9
-
- #define OUTFORM1 0
- #define OUTFORM2 1
- #define OUTFORM3 2
-
- #define AM_IMP 0 /* implied */
- #define AM_IMM8 1 /* immediate 8 bits */
- #define AM_IMM16 2 /* immediate 16 bits */
- #define AM_BYTEADR 3 /* address 8 bits */
- #define AM_BYTEADRX 4 /* address 16 bits */
- #define AM_BYTEADRY 5 /* relative 8 bits */
- #define AM_WORDADR 6 /* index x 0 bits */
- #define AM_WORDADRX 7 /* index x 8 bits */
- #define AM_WORDADRY 8 /* index x 16 bits */
- #define AM_REL 9 /* bit inst. special */
- #define AM_INDBYTEX 10 /* bit-bra inst. spec. */
- #define AM_INDBYTEY 11 /* index y 0 bits */
- #define AM_INDWORD 12 /* index y 8 bits */
- #define AM_0X 13 /* index x 0 bits */
- #define AM_0Y 14 /* index y 0 bits */
- #define AM_BITMOD 15 /* ind addr 8 bits */
- #define AM_BITBRAMOD 16 /* ind addr 16 bits */
- #define NUMOC 17
-
- #define AF_IMP (1L << 0 )
- #define AF_IMM8 (1L << 1 )
- #define AF_IMM16 (1L << 2 )
- #define AF_BYTEADR (1L << 3 )
- #define AF_BYTEADRX (1L << 4 )
- #define AF_BYTEADRY (1L << 5 )
- #define AF_WORDADR (1L << 6 )
- #define AF_WORDADRX (1L << 7 )
- #define AF_WORDADRY (1L << 8 )
- #define AF_REL (1L << 9 )
- #define AF_INDBYTEX (1L << 10)
- #define AF_INDBYTEY (1L << 11)
- #define AF_INDWORD (1L << 12)
- #define AF_0X (1L << 13)
- #define AF_0Y (1L << 14)
- #define AF_BITMOD (1L << 15)
- #define AF_BITBRAMOD (1L << 16)
-
- #define AM_SYMBOL (NUMOC+0)
- #define AM_EXPLIST (NUMOC+1)
-
- #define AM_BYTE AM_BYTEADR
- #define AM_WORD AM_WORDADR
- #define AM_LONG (NUMOC+2)
- #define AM_BSS (NUMOC+3)
-
-
- STRLIST {
- STRLIST *next;
- ubyte buf[4];
- };
-
- #define MF_IF 0x04
- #define MF_MACRO 0x08
- #define MF_MASK 0x10 /* has mask argument (byte) */
- #define MF_REL 0x20 /* has rel. address (byte) */
- #define MF_IMOD 0x40 /* instruction byte mod. */
- #define MF_ENDM 0x80 /* is v_endm */
-
- MNE {
- MNE *next; /* hash */
- void (*vect) ARGS((char *, MNE *)); /* dispatch */
- char *name; /* actual name */
- ubyte flags; /* special flags */
- ulong okmask;
- uword opcode[NUMOC]; /* hex codes, byte or word (>xFF) opcodes */
- };
-
- MACRO {
- MACRO *next;
- void (*vect)();
- ubyte *name;
- ubyte flags;
- STRLIST *strlist;
- };
-
- #define INF_MACRO 0x01
-
- INCFILE {
- INCFILE *next; /* previously pushed context */
- ubyte *name; /* file name */
- FILE *fi; /* file handle */
- ulong lineno; /* line number in file */
- ubyte flags; /* flags (macro) */
-
- /* Only if Macro */
-
- STRLIST *args; /* arguments to macro */
- STRLIST *strlist; /* current string list */
- ulong saveidx; /* save localindex */
- };
-
- #define RPF_UNKNOWN 0x01 /* value unknown */
-
- REPLOOP {
- REPLOOP *next; /* previously pushed context */
- ulong count; /* repeat count */
- ulong seek; /* seek to top of repeat */
- ulong lineno; /* line number of line before */
- INCFILE *file; /* which include file are we in*/
- ubyte flags;
- };
-
- #define IFF_UNKNOWN 0x01 /* value unknown */
- #define IFF_BASE 0x04
-
- IFSTACK {
- IFSTACK *next; /* previous IF */
- INCFILE *file; /* which include file are we in*/
- ubyte flags;
- ubyte true; /* 1 if true, 0 if false */
- ubyte acctrue;/* accumulatively true (not incl this one) */
- };
-
- #define SF_UNKNOWN 0x01 /* ORG unknown */
- #define SF_REF 0x04 /* ORG referenced */
- #define SF_BSS 0x10 /* uninitialized area (U flag) */
- #define SF_RORG 0x20 /* relocatable origin active */
-
- SEGMENT {
- SEGMENT *next; /* next segment in segment list */
- ubyte *name; /* name of segment */
- ubyte flags; /* for ORG */
- ubyte rflags; /* for RORG */
- ulong org; /* current org */
- ulong rorg; /* current rorg */
- ulong initorg;
- ulong initrorg;
- ubyte initflags;
- ubyte initrflags;
- };
-
- #define SYM_UNKNOWN 0x01 /* value unknown */
- #define SYM_REF 0x04 /* referenced */
- #define SYM_STRING 0x08 /* result is a string */
- #define SYM_SET 0x10 /* SET instruction used */
- #define SYM_MACRO 0x20 /* symbol is a macro */
- #define SYM_MASREF 0x40 /* master reference */
-
- SYMBOL {
- SYMBOL *next; /* next symbol in hash list */
- ubyte *name; /* symbol name or string if expr. */
- ubyte *string; /* if symbol is actually a string */
- ubyte flags; /* flags */
- ubyte addrmode; /* addressing mode (expressions) */
- ulong value; /* current value */
- uword namelen; /* name length */
- };
-
- extern SYMBOL *SHash[];
- extern MNE *MHash[];
- extern INCFILE *Incfile;
- extern REPLOOP *Reploop;
- extern SEGMENT *Seglist;
- extern IFSTACK *Ifstack;
-
- extern SEGMENT *Csegment; /* current segment */
- extern ubyte *Av[];
- extern ubyte Avbuf[];
- extern uword Adrbytes[];
- extern uword Cvt[];
- extern uword Opsize[];
- extern MNE Ops[];
- extern uword Mnext; /* mnemonic extension */
- extern uword Mlevel;
-
- extern ubyte Xtrace;
- extern ubyte Xdebug;
- extern ubyte MsbOrder;
- extern ubyte Outputformat;
- extern ulong Redo, Redo_why, Redo_eval;
- extern ulong Localindex;
-
- extern ubyte F_format;
- extern ubyte F_verbose;
- extern char *F_outfile;
- extern char *F_listfile;
- extern char *F_symfile;
- extern char *F_temppath;
- extern FILE *FI_listfile;
- extern FILE *FI_temp;
- extern ubyte Fisclear;
- extern ulong Plab, Pflags;
- extern char Inclevel;
- extern char ListMode;
- extern ulong Processor;
-
- extern uword _fmode;
- extern ulong CheckSum;
-
- extern SYMBOL *eval ARGS((char *));
- extern int alphanum ARGS((int));
- extern void evaltop ARGS((void));
- extern void stackarg ARGS((long, int, ubyte *));
- extern void doop ARGS((void(*) ARGS((long,long,long,long)), int));
- extern void op_takelsb ARGS((long, long, long, long));
- extern void op_takemsb ARGS((long, long, long, long));
- extern void op_negate ARGS((long, long, long, long));
- extern void op_invert ARGS((long, long, long, long));
- extern void op_not ARGS((long, long, long, long));
- extern void op_mult ARGS((long, long, long, long));
- extern void op_div ARGS((long, long, long, long));
- extern void op_mod ARGS((long, long, long, long));
- extern void op_question ARGS((long, long, long, long));
- extern void op_add ARGS((long, long, long, long));
- extern void op_sub ARGS((long, long, long, long));
- extern void op_shiftright ARGS((long, long, long, long));
- extern void op_shiftleft ARGS((long, long, long, long));
- extern void op_greater ARGS((long, long, long, long));
- extern void op_greatereq ARGS((long, long, long, long));
- extern void op_smaller ARGS((long, long, long, long));
- extern void op_smallereq ARGS((long, long, long, long));
- extern void op_eqeq ARGS((long, long, long, long));
- extern void op_noteq ARGS((long, long, long, long));
- extern void op_andand ARGS((long, long, long, long));
- extern void op_oror ARGS((long, long, long, long));
- extern void op_xor ARGS((long, long, long, long));
- extern void op_and ARGS((long, long, long, long));
- extern void op_or ARGS((long, long, long, long));
-
- extern ubyte *pushchar ARGS((ubyte *));
- extern ubyte *pushhex ARGS((ubyte *));
- extern ubyte *pushoct ARGS((ubyte *));
- extern ubyte *pushdec ARGS((ubyte *));
- extern ubyte *pushbin ARGS((ubyte *));
- extern ubyte *pushstr ARGS((ubyte *));
- extern ubyte *pushsymbol ARGS((ubyte *));
-
- extern void v_mnemonic ARGS((char *, MNE *));
- extern void v_processor ARGS((char *, MNE *));
- extern void v_trace ARGS((char *, MNE *));
- extern void v_list ARGS((char *, MNE *));
- extern void v_include ARGS((char *, MNE *));
- extern void v_seg ARGS((char *, MNE *));
- extern void v_hex ARGS((char *, MNE *));
- extern void v_err ARGS((char *, MNE *));
- extern void v_dc ARGS((char *, MNE *));
- extern void v_ds ARGS((char *, MNE *));
- extern void v_org ARGS((char *, MNE *));
- extern void v_rorg ARGS((char *, MNE *));
- extern void v_rend ARGS((char *, MNE *));
- extern void v_align ARGS((char *, MNE *));
- extern void v_subroutine ARGS((char *, MNE *));
- extern void v_equ ARGS((char *, MNE *));
- extern void v_eqm ARGS((char *, MNE *));
- extern void v_echo ARGS((char *, MNE *));
- extern void v_set ARGS((char *, MNE *));
-
- extern void v_execmac ARGS((char *, MACRO *));
-
- extern void v_end ARGS((char *, MNE *));
- extern void v_endm ARGS((char *, MNE *));
- extern void v_mexit ARGS((char *, MNE *));
-
- extern void v_ifconst ARGS((char *, MNE *));
- extern void v_ifnconst ARGS((char *, MNE *));
- extern void v_if ARGS((char *, MNE *));
- extern void v_else ARGS((char *, MNE *));
- extern void v_endif ARGS((char *, MNE *));
- extern void v_repeat ARGS((char *, MNE *));
- extern void v_repend ARGS((char *, MNE *));
-
- extern int gethexdig ARGS((int));
- extern void generate ARGS((void));
- extern void closegenerate ARGS((void));
- extern void genfill ARGS((long, long, int));
- extern void pushif ARGS((int));
-
- extern int tabit ARGS((char *, char *));
- extern ubyte *sftos ARGS((long, int));
- extern void clearsegs ARGS((void));
- extern void clearrefs ARGS((void));
- extern void panic ARGS((char *));
- extern void findext ARGS((ubyte *));
- extern void rmnode ARGS((ulong **, int));
- extern void parse ARGS((ubyte *));
- extern MNE *findmne ARGS((ubyte *));
-
- extern void v_macro ARGS((char *, MNE *));
- extern void addhashtable ARGS((MNE *));
- extern void pushinclude ARGS((char *));
- extern void asmerr ARGS((short, short));
- extern ubyte *zmalloc ARGS((int));
- extern ubyte *permalloc ARGS((int));
- extern ubyte *strlower ARGS((ubyte *));
-
- extern void setspecial ARGS((int, int));
- extern SYMBOL *findsymbol ARGS((ubyte *, int));
- extern SYMBOL *createsymbol ARGS((ubyte *, int));
- extern void programlabel ARGS((void));
- extern SYMBOL *allocsymbol ARGS((void));
- extern void freesymbol ARGS((SYMBOL *));
- extern void freesymbollist ARGS((SYMBOL *));
-
-
-