www.pudn.com > HEC-linux.zip > exenv.c


/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+                                                                   + 
+ exenv.c - this file stores info about the execution environmnet   + 
+           ( i.e. RAM, registers )									+ 
+                                                                   + 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 
 
/* memory pointer, allocate memory on boot ------------------------*/ 
 
U1 *RAM;	/* [0,$BE]=code [$HS,$HE]=heap [$SS,$TOP]=stack */ 
 
/* REGISTERS ------------------------------------------------------*/ 
 
/* 
	R[]		is used to represent the registers 
	R_STR[] prints out register strings 
*/ 
 
U8 R[32];   
 
#define $IP		0	/* address of next instruction to execute */ 
#define $SP		1	/* address of most recent value popped on stack */ 
#define $FP		2	/* stack frame pointer */ 
#define $BE		3	/* address of last byte of bytecode section */ 
 
#define $HS		4   /* address of first ( lowest ) byte of heap */ 
#define $HE		5   /* address of last ( highest ) byte used by heap */ 
 
#define $SS		6	/* address of bottom of stack ( lowest ) */ 
#define $TOP	7	/* address of top-of-stack ( highest )*/ 
 
/* General purpose registers */  
 
#define $R1		8 
#define $R2		9 
#define $R3		10 
#define $R4		11 
#define $R5		12 
#define $R6		13 
#define $R7		14 
#define $R8		15 
#define $R9		16 
#define $R10	17 
#define $R11	18 
#define $R12	19 
#define $R13	20 
#define $R14	21 
#define $R15	22 
#define $R16	23 
#define $R17	24 
#define $R18	25 
#define $R19	26 
#define $R20	27 
#define $R21	28 
#define $R22	29 
#define $R23	30 
#define $R24	31 
 
/* to get the string version of a register, use  R_STR[$IP]="$IP" */ 
 
char *R_STR[] =  
{ 
	"$IP","$SP","$FP","$BE","$HS","$HE","$SS","$TOP", 
	"$R1","$R2","$R3","$R4","$R5","$R6","$R7","$R8","$R9","$R10", 
	"$R11","$R12","$R13","$R14","$R15","$R16","$R17","$R18","$R19","$R20", 
	"$R21","$R22","$R23","$R24" 
}; 
 
F4 Rf[10]; 
char *Rf_STR[]={"$F1","$F2","$F3","$F4","$F5","$F6","$F7","$F8","$F9","$F10"}; 
 
#define $F1		0 
#define $F2		1 
#define $F3		2 
#define $F4		3 
#define $F5		4 
#define $F6		5 
#define $F7		6 
#define $F8		7 
#define $F9		8 
#define $F10    9 
 
F8 Rd[10]; 
char *Rd_STR[]={"$D1","$D2","$D3","$D4","$D5","$D6","$D7","$D8","$D9","$D10"};    
 
#define $D1		0 
#define $D2		1 
#define $D3		2 
#define $D4		3 
#define $D5		4 
#define $D6		5 
#define $D7		6 
#define $D8		7 
#define $D9		8 
#define $D10    9 
 
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+ function prototypes                                               +                                                                   
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 
 
void printMemorySection(U8 address,U8 bytes); 
void printAllRAM(); 
void printBasicRegisters(); 
void printGeneralRegisters(); 
void printFloatRegisters(); 
void printDoubleRegisters(); 
 
void testRegisterPrinting(); 
 
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+ function definitions                                              +                                                                   
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 
 
void printMemorySection(U8 address,U8 bytes) 
{ 
	U8 index; 
	for(index=address;index