//**********************************************************
// TC.HPP
// Coco/R C++ Taste Example.
// Adapted to C++ by Frankie Arzu <farzu@uvg.edu.gt>
// from Moessenboeck's (1990) Oberon example
// Thanks to Pat Terry for the C++ "Machine" Class.
//
// May 24, 1996 Version 1.06
// Jun 16, 1998 Version 1.08 (Minor changes)
//**********************************************************
#include "cr_error.hpp"
#define MEMSIZE 15000
class Machine {
public:
Machine(CRError *E);
void Emit(int op);
void Emit2(int op, int val);
void Emit3(int op, int level, int adr);
void Fixup(int adr);
void Interpret();
int progStart; /* address of first instruction of main program */
int pc; /* program counter */
private:
unsigned char code[MEMSIZE];
int generatingCode;
int stack[1000];
int top;
int base;
int Next();
int Next2();
void Push(int val);
int Pop();
int Up(int level);
CRError *Error;
};
/* operators */
#define PLUS 0
#define MINUS 1
#define TIMES 2
#define SLASH 3
#define EQU 4
#define LSS 5
#define GTR 6
/* opcodes */
#define ADD 0
#define SUB 1
#define MUL 2
#define DIVI 3
#define EQU 4
#define LSS 5
#define GTR 6
#define LOAD 7
#define LIT 8
#define STO 9
#define CALL 10
#define RET 11
#define RES 12
#define JMP 13
#define FJMP 14
#define HALTc 15
#define NEG 16
#define READ 17
#define WRITE 18
syntax highlighted by Code2HTML, v. 0.9.1