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

Subversion Repositories 1664

[/] [1664/] [trunk/] [c/] [cpu_1664/] [cpu_1664_asm_ajunta__cadena.c] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 mrdmkg
#include "cpu_1664.h"
2
 
3
void cpu_1664_asm_ajunta__cadena(struct cpu_1664 *cpu, n1 *cadena, nN cuantia)
4
{
5
 const n1 sinia_braso_clui[] = {cpu_1664_asm_table_clui};
6
 const n1 sinia_braso_inclui[] ={cpu_1664_asm_table_sinia_inclui_brasos};
7
 struct lista *lista_parametre;
8
 n1 *fini=cadena+cuantia;
9
 n1 *cadena_;
10
 struct lista *lista_eticeta_cadena;
11
 nN i;
12
 struct lista *model_cadena;
13
 cpu_1664_asm_sinia_t sinia;
14
 
15
 while(cadena<fini)
16
 {
17
 
18
  if(cpu->asm_eror!=0)
19
  {
20
   break;
21
  }
22
 
23
  cpu->asm_eror=0;
24
 
25
  switch(*cadena)
26
  {
27
   default:
28
    lista_parametre=cpu_1664_asm_lista_parametre__cadena(cadena);
29
    sinia=cpu_1664_asm_sinia_t_sinia__cadena(((struct lista **)(lista_parametre->datos))[0]->datos,((struct lista **)(lista_parametre->datos))[0]->contador);
30
 
31
    for(model_cadena=0, i=0;i<cpu->lista_model_sinia->contador/sizeof(cpu_1664_asm_sinia_t);i++)
32
    {
33
 
34
     if(((cpu_1664_asm_sinia_t *)(cpu->lista_model_sinia->datos))[i]==sinia)
35
     {
36
      model_cadena=((struct lista **)(cpu->lista_model->datos))[i]; break;
37
     }
38
    }
39
 
40
    if(model_cadena!=0)
41
    {
42
     cpu_1664_asm_asm_model__lista(cpu, model_cadena, lista_parametre, 1);
43
 
44
     while((*cadena!=cpu_1664_asm_sinia_fini)&&(*(cadena-1)!='\\')&&(cadena<fini))
45
     {
46
 
47
      switch(*cadena)
48
      {
49
       default:
50
        cadena++;
51
        break;
52
 
53
       case '"':
54
       case '[':
55
       case '(':
56
       case '{':
57
        cadena+=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
58
        break;
59
      }
60
     }
61
    }
62
    else
63
    {
64
     cpu_1664_asm_asm_opera__lista_2(cpu, lista_parametre);
65
     while((*cadena!=cpu_1664_asm_sinia_fini)&&(cadena<fini)) { cadena++; }
66
    }
67
 
68
    lista_2_libri(lista_parametre);
69
    break;
70
 
71
   case cpu_1664_asm_sinia_comenta:
72
    while((*cadena!=cpu_1664_asm_sinia_fini)&&(cadena<fini)) { cadena++; }
73
    break;
74
 
75
   //case 0x0a:
76
   case cpu_1664_asm_sinia_fini:
77
   case 0x09:
78
   case ' ':
79
    cadena++;
80
    break;
81
 
82
   case cpu_1664_asm_sinia_opera:
83
    cadena++;
84
    cpu_1664_asm_asm_opera__cadena(cpu, cadena);
85
    while((*cadena!=cpu_1664_asm_sinia_fini)&&(cadena<fini)) { cadena++; }
86
    break;
87
 
88
   case cpu_1664_asm_sinia_eticeta:
89
    cadena_=++cadena;
90
    while((sinia_braso_inclui[*cadena]==1)&&(cadena<fini)) { cadena++; }
91
    cpu_1664_asm_defina_valua(cpu, cpu_1664_asm_sinia_t_sinia__cadena(cadena_,cadena-cadena_), cpu->lista_imaje_asm->contador);
92
    lista_libri(cpu->lista_eticeta_cadena);
93
    cpu->lista_eticeta_cadena=lista_nova__datos(cadena_, cadena-cadena_);
94
    break;
95
 
96
   case cpu_1664_asm_sinia_eticeta_su:
97
    cadena_=cadena;
98
    while((sinia_braso_inclui[*cadena]==1)&&(cadena<fini)) { cadena++; }
99
    lista_eticeta_cadena=lista_nova__lista(cpu->lista_eticeta_cadena);
100
    lista_ajunta__datos(lista_eticeta_cadena, cadena_, cadena-cadena_);
101
    cpu_1664_asm_defina_valua(cpu, cpu_1664_asm_sinia_t_sinia__cadena(lista_eticeta_cadena->datos, lista_eticeta_cadena->contador), cpu->lista_imaje_asm->contador);
102
    lista_libri(lista_eticeta_cadena);
103
    break;
104
 
105
   case '{': //pasaladal ".m"
106
    cpu_1664_asm_asm_comanda__m(cpu, cadena);
107
    cadena+=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
108
 
109
    while((*cadena!=cpu_1664_asm_sinia_fini)&&(*(cadena-1)!='\\')&&(cadena<fini))
110
    {
111
 
112
     switch(*cadena)
113
     {
114
      default:
115
       cadena++;
116
       break;
117
 
118
      case '"':
119
      case '[':
120
      case '(':
121
      case '{':
122
       cadena+=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
123
       break;
124
     }
125
    }
126
    break;
127
 
128
   case cpu_1664_asm_sinia_comanda:
129
    cpu_1664_asm_asm_comanda(cpu, cadena+1);
130
 
131
    while((*cadena!=cpu_1664_asm_sinia_fini)&&(*(cadena-1)!='\\')&&(cadena<fini))
132
    {
133
 
134
     switch(*cadena)
135
     {
136
      default:
137
       cadena++;
138
       break;
139
 
140
      case '"':
141
      case '[':
142
      case '(':
143
      case '{':
144
       cadena+=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
145
       break;
146
     }
147
    }
148
    break;
149
 
150
  }
151
 }
152
// taxe
153
 if(cpu->lista_taxe->contador!=0)
154
 {
155
  nN i;
156
  cpu_1664_sinia_t desloca_;
157
  struct lista *lista_taxe_=lista_nova(0);
158
  struct cpu_1664_asm_taxe *taxe;
159
  for(i=0;i<cpu->lista_taxe->contador/sizeof(P);i++)
160
  {
161
   cpu->avisa__no_definida=0;
162
   taxe=((struct cpu_1664_asm_taxe *)((struct lista **)(cpu->lista_taxe->datos))[i]);
163
   desloca_=cpu->lista_imaje_asm->contador;
164
   cpu->lista_imaje_asm->contador=taxe->desloca;
165
   taxe->parola=(taxe->parola&0xff)|taxe->asm_opera_parametre_funsiona(cpu, taxe->lista)<<8;
166
   *((cpu_1664_opera_t *)(cpu->lista_imaje_asm->datos+taxe->desloca))=taxe->parola;
167
   if(cpu->avisa__no_definida!=0)
168
   {
169
//    cadena__f((P)scrive_stdout, "avisa : taxe [%.*x] no definida\n",8,taxe->desloca);
170
    lista_ajunta__P(lista_taxe_, (P)taxe);
171
   }
172
   else
173
   {
174
    lista_2_libri(taxe->lista);
175
    memoria_libri((P)taxe);
176
   }
177
   cpu->lista_imaje_asm->contador=desloca_;
178
  }
179
  lista_libri(cpu->lista_taxe);
180
  cpu->lista_taxe=lista_taxe_;
181
 }
182
 
183
// taxe_d
184
 if(cpu->lista_taxe_d->contador!=0)
185
 {
186
  struct lista *lista_taxe_d_=lista_nova(0);
187
  struct cpu_1664_asm_taxe_d *taxe_d;
188
  cpu_1664_sinia_t valua[1];
189
  nN i,j;
190
  for(i=0;i<cpu->lista_taxe_d->contador/sizeof(P);i++)
191
  {
192
   cpu->avisa__no_definida=0;
193
   taxe_d=((struct cpu_1664_asm_taxe_d *)((struct lista **)(cpu->lista_taxe_d->datos))[i]);
194
   valua[0]=cpu_1664_asm_n8_valua__lista(cpu, taxe_d->lista);
195
 
196
   for(j=0;j<taxe_d->cuantia;j++)
197
   {
198
    ((n1 *)(cpu->lista_imaje_asm->datos+taxe_d->desloca))[j]=((n1 *)(valua))[j];
199
   }
200
 
201
   if(cpu->avisa__no_definida!=0)
202
   {
203
//    cadena__f((P)scrive_stdout, "avisa : taxe_d [%.*x] no definida\n",8,taxe_d->desloca);
204
    lista_ajunta__P(lista_taxe_d_, (P)taxe_d);
205
   }
206
   else
207
   {
208
    lista_libri(taxe_d->lista);
209
    memoria_libri((P)taxe_d);
210
   }
211
  }
212
  lista_libri(cpu->lista_taxe_d);
213
  cpu->lista_taxe_d=lista_taxe_d_;
214
 }
215
}

powered by: WebSVN 2.1.0

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