#ifndef __MAIN_H__ #define __MAIN_H__ #define NOT_REACHED 1 /* to keep lcc -A happy */ #define MAXFDS 64 #define PGSZ 4096 /* pagesize */ typedef enum { TopLevel=0, Fatal, Benign } EType; enum { REG_V0=2, REG_RES=2, REG_A0=4, REG_A1, REG_A2, REG_A3, REG_ERR=7, REG_GP=28, REG_SP, REG_S8, REG_RA }; enum { GENREGS = (1<<0), FPREGS = (1<<1) }; typedef struct run_struct { unsigned paddress; unsigned arg; } run_struct; #ifndef RUNC extern unsigned int R[]; /* CPU registers */ extern unsigned int CpCond[], CCR[][32], CPR[][32]; extern float FGR[]; /* FPU registers */ extern double *FPR; extern int *FWR; extern unsigned int pc, npc, nnpc, HI, LO; extern unsigned int ownedfp; /* has the proc ever used the FPU ? */ extern int prog_fds[]; /* for fd translation */ #endif /* * Find the size of the array */ #define asize(x) (sizeof(x) / sizeof(x[0])) #define DEFRUN 0x7fffffff /* default run steps */ #define BadVAddr (CPR[0][8]) #define Cause (CPR[0][13]) #define FpCond (CPR[1][31]) #define ROUND(V, B) (((int) V + (B-1)) & ~(B-1)) /* Sign-extend a short to a long */ #define SIGNEX(X) (((X) & 0x8000) ? ((X) | 0xffff0000) : (X)) #define STACK_ALIGN(x) ((unsigned)(x) &~ ((4*sizeof(int))-1)) typedef void * host_addr; /* an address on the simulation host */ /* types on the simulated host (MIPS): */ typedef unsigned long int mem_addr; typedef unsigned int mem_word; typedef unsigned short int mem_half; typedef unsigned char mem_byte; /* * global definitions settable on the command line */ extern int systrace; /* signals.c */ extern void setup_signal_stack(void); extern void dosigreturn(void); extern void initsighandler(void); extern void sighandle(); /* main.c */ /* mem.c -> mem.h */ extern void print_memstats(void); /* ${SYSTEM}-syscall.c */ extern int dosyscall(void); /* print.c */ extern void print(unsigned int, unsigned int); /* read-aout.c */ extern int read_symbols(char *); extern int readaout(char *); /* run.c */ extern int run(run_struct *rs); extern void endofrun(void); /* utils.c */ extern void error(EType, char *, ...); extern void initfds(void); extern void restorefds(void); extern void *galloc(int); extern void *grealloc(void *p, int size); extern char *strsave(char *); extern int strprefix(char *s, char *t, int c); extern void dumpregs(int); /* stuff in libc.a */ extern void bzero(char *, int); extern int close(int), dup(int), dup2(int, int); extern int syscall(int, ...); #endif __MAIN_H__