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

Subversion Repositories diogenes

[/] [diogenes/] [tags/] [initial/] [asm/] [tools.c] - Blame information for rev 236

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 142 fellnhofer
 
2
 
3
#include<string.h>
4
#include <stdio.h>
5
#include <stdlib.h>
6
#include <search.h>
7
 
8
 
9
unsigned int address = 0;
10
unsigned int hex = 0;
11
unsigned int addr_table[10000]={0};
12
 
13
int hash_init()
14
{
15
        return hcreate(100);
16
}
17
 
18
void add_label(char *key, unsigned int addr)
19
{
20
        ENTRY e, *ep;
21
 
22
        //printf("<%s> added\n", key);
23
        e.key = key;
24
        e.data = (void *) addr;
25
        hsearch(e, ENTER);
26
}
27
 
28
unsigned int get_label(char *key)
29
{
30
        ENTRY e, *ep;
31
 
32
        e.key = key;
33
        ep = hsearch(e, FIND);
34
 
35
        if(ep) {
36
                //printf("<%s> found\n", key);
37
                return (unsigned int) ep->data;
38
        } else {
39
                //printf("<%s> not found\n", key);
40
                return 0;
41
        }
42
}
43
 
44
unsigned int get_abs_label(char *key)
45
{
46
        return get_label(key)+0x40;
47
}
48
 
49
 
50
char * str_toupper(char *s)
51
{
52
        char *str = s;
53
 
54
        while(*s) {
55
                if(isalpha(*s)) *s = toupper(*s);
56
                s++;
57
          }
58
 
59
        return str;
60
}
61
 
62
void xprintf(int val)
63
{
64
        int i;
65
        if(hex==1) printf("%04x,\n", val);
66
        else if(hex==2) {
67
                for(i=0;i<16;i++){
68
                        printf("%c", '0'+!!(val&0x8000));
69
                        val=val<<1;
70
                }
71
                printf(",\n");
72
        }
73
        else printf("%c%c", val, (val>>8));
74
}
75
 
76
/*
77
void hash_add(char *key, char *data)
78
{
79
        ENTRY e, *ep;
80
 
81
        e.key = key;
82
        e.data = (void *) data;
83
        hsearch(e, ENTER);
84
}
85
 
86
 
87
char * hash_get(char *key)
88
{
89
        ENTRY e, *ep;
90
 
91
        e.key = key;
92
        ep = hsearch(e, FIND);
93
 
94
        return (char *) ep->data;
95
}
96
 
97
char * macro_insert(char *a)
98
{
99
        char *s = malloc(100);
100
 
101
        sprintf(s, "MACRO %s -- MACRO\n", a );
102
 
103
        return s;
104
}
105
 
106
*/
107
 
108
int check_imm(char *imm, int *val, int lo, int hi)
109
{
110
        int shiftcount = 0;
111
        //char *ret = malloc(100);
112
        int mrx=0;
113
 
114
        if(imm[0]=='0' && imm[1]=='x') {
115
                mrx = sscanf(imm, "%x", val);
116
//              printf("ox: %d", mrx);
117
        }
118
 
119
        if(!mrx) {
120
                mrx = sscanf(imm, "%d", val);
121
//              printf("val: %s -> %d",imm, mrx);
122
        }
123
 
124
        if(mrx){
125
                if(*val>=lo && *val<=hi) return 0;
126
                else return 1;
127
        }
128
 
129
 
130
        return 2;
131
}
132
 
133
/*
134
char *ari_to_bin(char *s)
135
{
136
        char *tmp = malloc(100);
137
 
138
        str_toupper(s);
139
 
140
        if(!strcmp(s, "ADD")) return "0000";
141
        if(!strcmp(s, "SUB")) return "0001";
142
        if(!strcmp(s, "ADD")) return "0000";
143
        if(!strcmp(s, "ADD")) return "0000";
144
        if(!strcmp(s, "ADD")) return "0000";
145
        if(!strcmp(s, "ADD")) return "0000";
146
        if(!strcmp(s, "ADD")) return "0000";
147
        if(!strcmp(s, "ADD")) return "0000";
148
 
149
} */
150
 
151
 
152
 
153
 
154
 

powered by: WebSVN 2.1.0

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