DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦c53332310⟧ TextFile

    Length: 3809 (0xee1)
    Types: TextFile
    Notes: UNIX file
    Names: »asm.h«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦f4b8d8c84⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »cmd/as/asm.h« 

TextFile

#include <stdio.h>
#include <setjmp.h>
#include "asmch.h"
#ifdef	LADDR
#include "n.out.h"
#else
#include <l.out.h>
#endif

/* Basic */
#define	HUGE	1000		/* A huge number */
#define NERR	10		/* Errors per line */
#define NINPUT	128		/* Input buffer size */
#define NCODE	128		/* Listing code buffer size */
#define NTIT	64		/* Title buffer size */
#define	NHASH	64		/* Buckets in hash table */
#define	HMASK	077		/* Hash mask */
#define	NLPP	60		/* Lines per page */

/* Listing */
#define NLIST	0		/* No listing */
#define SLIST	1		/* Source only */
#define ALIST	2		/* Address only */
#define	BLIST	3		/* Bytes */
#define	WLIST	4		/* Words */

#define	dot	(&sym[0])	/* Dot, current loc */

/*
 * Symbol.
 * The names `s_ref' and `s_base'
 * don't get init. in `pst.c'.
 * Good thing: you cannot initialise
 * a union.
 */
struct	sym
{
	struct	sym  *s_sp;	/* Hash link */
	char	s_id[NCPLN];	/* Name */
	char	s_kind;		/* Symbol kind (S_) */
	char	s_flag;		/* Symbol flags */
	int	s_type;		/* Expression type */
	address	s_addr;		/* Address */
	int	s_ref;		/* Ref. number */
	int	s_total;	/* Hash total */
	union	{
		struct sym *s_sp;
		struct loc *s_lp;
		int s_segn;
	} s_base;		/* Base */
};

/* Flags */
#define	S_GBL	01		/* Global */
#define	S_ASG	02		/* Assigned */
#define	S_MDF	04		/* Mult. def */
#define	S_END	010		/* End mark */
#define	S_SYMT	020		/* For l.out symbol table */

/* Kinds */
#define	S_NEW	0		/* New name */
#define	S_USER	1		/* User name */
#define	S_LOC	2		/* Loc. counter */
#define	S_SEG	3		/* Seg. name */
#define	S_BYTE	4		/* .byte */
#define	S_WORD	5		/* .word */
#define	S_SDEF	6		/* .segdef */
#define	S_ASCII	7		/* .ascii */
#define	S_COMM	8		/* .comm */
#define	S_LDEF	9		/* .locdef */
#define	S_GLOBL	10		/* .globl */
#define	S_PAGE	11		/* .page */
#define	S_TITLE	12		/* .title */
#define	S_BLK	13		/* .blk[bwl] */

/*
 * Location counter.
 */
struct	loc
{
	struct	loc *l_lp;	/* Link */
	int	l_seg;		/* Seg. no. */
	address	l_break;	/* Size */
	address	l_offset;	/* Offset in area */
	address	l_fuzz;		/* Fuzz */
};

/*
 * Temp. symbols.
 */
struct	tsym
{
	struct	tsym *t_fp;	/* Link to next */
	struct	loc *t_lp;	/* Location counter */
	address	t_addr;		/* Address */
};

struct	tsymp
{
	struct	tsym *tp_fp;	/* Symbol for `n'f */
	struct	tsym *tp_bp;	/* Symbol for `n'b */
	struct	tsym *tp_lfp;	/* First symbol */
	struct	tsym *tp_llp;	/* Last symbol */
};

/*
 * Globals.
 */
extern	address	absexpr();
extern	struct sym *lookup();
extern	int	inbss;
extern  jmp_buf env;
extern	char	*new();
extern	struct	sym sym[];
extern	int	line;
extern	int	page;
extern	int	lop;
extern	int	pass;
extern	int	lflag;
extern	int	gflag;
extern	int	eflag;
extern	int	xflag;
extern	address	laddr;
extern	address	fuzz;
extern	int	lmode;
extern	struct	sym *symhash[NHASH];
extern	int	nloc;
extern	int	nerr;
extern  struct  loc *loc[];
extern  struct  loc *defloc;
extern	char	*ep;
extern	char	eb[NERR];
extern	char	*ip;
extern	char	ib[NINPUT];
extern	char	*cp;
extern	char	cb[NCODE];
extern	char	tb[NTIT];
extern	struct	tsymp tsymp[10];
extern	char	*ofn;
extern	char	*ifn;
extern	FILE	*ofp;
extern	FILE	*sfp;
extern	char	ctype[];

/*
 * Character types.
 * Letters are < 0.
 * Letters and digits are <= 0.
 * This speeds up getid.
 */
#define	LETTER	(-1)
#define	DIGIT	0
#define	BINOP	1
#define ETC	2
#define	ILL	3
#define	SPACE	4

/*
 * Expression.
 */
struct	expr
{
	char	e_mode;		/* Address mode */
	char	e_type;		/* Type */
	address	e_addr;		/* Address */
	union	{
		struct loc  *e_lp;
		struct sym  *e_sp;
		int e_segn;
	} e_base;		/* Rel. base */
};

/* Types */
#define	E_ACON	0		/* A constant */
#define	E_ASEG	1		/* An absolute segment */
#define	E_SYM	2		/* Symbol base */
#define	E_DIR	3		/* Direct address */
#define	E_AREG	4		/* Reg */
#define	E_SEG	5		/* Relocatable segment */