OpenCores
URL https://opencores.org/ocsvn/diogenes/diogenes/trunk

Subversion Repositories diogenes

[/] [diogenes/] [trunk/] [asm/] [tools.c] - Rev 236

Compare with Previous | Blame | View Log

 
 
#include<string.h>
#include <stdio.h>
#include <stdlib.h>
#include <search.h>
 
 
unsigned int address = 0;
unsigned int hex = 0;
unsigned int addr_table[10000]={0};
 
int hash_init()
{
	return hcreate(100);
}
 
void add_label(char *key, unsigned int addr)
{
	ENTRY e, *ep;
 
	//printf("<%s> added\n", key);
	e.key = key;
	e.data = (void *) addr;
	hsearch(e, ENTER);
}
 
unsigned int get_label(char *key)
{
	ENTRY e, *ep;
 
	e.key = key;
	ep = hsearch(e, FIND);
 
	if(ep) {
		//printf("<%s> found\n", key);
		return (unsigned int) ep->data;
	} else {
		//printf("<%s> not found\n", key);
		return 0;
	}
}
 
unsigned int get_abs_label(char *key)
{
	return get_label(key)+0x40;
}
 
 
char * str_toupper(char *s) 
{
	char *str = s;
 
	while(*s) {
	  	if(isalpha(*s)) *s = toupper(*s);
	  	s++;
	  }
 
	return str;
}
 
void xprintf(int val) 
{
	int i;
	if(hex==1) printf("%04x,\n", val);
	else if(hex==2) {
		for(i=0;i<16;i++){
			printf("%c", '0'+!!(val&0x8000));
			val=val<<1;
		}
		printf(",\n");
	}
	else printf("%c%c", val, (val>>8));
}
 
/*
void hash_add(char *key, char *data)
{
	ENTRY e, *ep;
 
	e.key = key;
	e.data = (void *) data;
	hsearch(e, ENTER);
}
 
 
char * hash_get(char *key)
{
	ENTRY e, *ep;
 
	e.key = key;
	ep = hsearch(e, FIND);
 
	return (char *) ep->data;
}
 
char * macro_insert(char *a)
{
	char *s = malloc(100);
 
	sprintf(s, "MACRO %s -- MACRO\n", a );
 
	return s;
}
 
*/
 
int check_imm(char *imm, int *val, int lo, int hi)
{
	int shiftcount = 0;
	//char *ret = malloc(100);
	int mrx=0;
 
	if(imm[0]=='0' && imm[1]=='x') {
		mrx = sscanf(imm, "%x", val);
//		printf("ox: %d", mrx);
	}
 
	if(!mrx) {
		mrx = sscanf(imm, "%d", val); 
//		printf("val: %s -> %d",imm, mrx);
	}
 
	if(mrx){
		if(*val>=lo && *val<=hi) return 0;
		else return 1;
	} 
 
 
	return 2;
}
 
/*
char *ari_to_bin(char *s)
{
	char *tmp = malloc(100);
 
	str_toupper(s);
 
	if(!strcmp(s, "ADD")) return "0000";
	if(!strcmp(s, "SUB")) return "0001";
	if(!strcmp(s, "ADD")) return "0000";
	if(!strcmp(s, "ADD")) return "0000";
	if(!strcmp(s, "ADD")) return "0000";
	if(!strcmp(s, "ADD")) return "0000";
	if(!strcmp(s, "ADD")) return "0000";
	if(!strcmp(s, "ADD")) return "0000";
 
} */
 
 
 
 
 
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.