| /* |
/* |
| $Id$ |
|
| Copyright 1992 by the ANSI figForth Development Group |
Copyright 1992 by the ANSI figForth Development Group |
| */ |
*/ |
| |
|
| |
|
| typedef void *Label; |
typedef void *Label; |
| |
|
| |
/* symbol indexed constants */ |
| |
|
| |
#define DOCOL 0 |
| |
#define DOCON 1 |
| |
#define DOVAR 2 |
| |
#define DOUSER 3 |
| |
#define DODEFER 4 |
| |
#define DODOES 5 |
| |
#define DOESJUMP 6 |
| |
|
| #include "machine.h" |
#include "machine.h" |
| |
|
| /* Forth data types */ |
/* Forth data types */ |
| typedef int Bool; |
typedef int Bool; |
| #define FLAG(b) (-(b)) |
#define FLAG(b) (-(b)) |
| |
#define FILEIO(error) (FLAG(error) & -37) |
| |
#define FILEEXIST(error) (FLAG(error) & -38) |
| |
|
| #define F_TRUE (FLAG(0==0)) |
#define F_TRUE (FLAG(0==0)) |
| #define F_FALSE (FLAG(0!=0)) |
#define F_FALSE (FLAG(0!=0)) |
| typedef Label *Xt; |
typedef Label *Xt; |
| #endif |
#endif |
| |
|
| Label *engine(Xt *ip, Cell *sp, Cell *rp, Float *fp); |
Label *engine(Xt *ip, Cell *sp, Cell *rp, Float *fp, Address lp); |
| |
|
| #ifndef DIRECT_THREADED |
#ifndef DIRECT_THREADED |
| /* i.e. indirect threaded */ |
/* i.e. indirect threaded */ |
| ca is the code address */ |
ca is the code address */ |
| #define MAKE_CF(cfa,ca) ((*(Label *)(cfa)) = ((Label)ca)) |
#define MAKE_CF(cfa,ca) ((*(Label *)(cfa)) = ((Label)ca)) |
| /* make a code field for a defining-word-defined word */ |
/* make a code field for a defining-word-defined word */ |
| #define MAKE_DOES_CF(cfa,does_code) ({MAKE_CF(cfa,DODOES); \ |
#define MAKE_DOES_CF(cfa,does_code) ({MAKE_CF(cfa,symbols[DODOES]); \ |
| ((Cell *)cfa)[1] = (Cell)does_code;}) |
((Cell *)cfa)[1] = (Cell)does_code;}) |
| /* the does handler resides between DOES> and the following Forth code */ |
/* the does handler resides between DOES> and the following Forth code */ |
| #define DOES_HANDLER_SIZE 8 |
#define DOES_HANDLER_SIZE 8 |
| #endif |
#endif |
| |
|
| #ifdef DEBUG |
#ifdef DEBUG |
| # define NAME(string) puts(string); |
# define NAME(string) fprintf(stderr,"%08x: "string"\n",(int)ip); |
| #else |
#else |
| # define NAME(string) |
# define NAME(string) |
| #endif |
#endif |
| |
|
| |
#define CF(const) (-const-2) |
| |
|
| |
#define CF_NIL -1 |
| |
|
| |
#ifndef CACHE_FLUSH |
| |
# define CACHE_FLUSH(addr,size) |
| |
#endif |