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

Subversion Repositories 1664

[/] [1664/] [trunk/] [c/] [cpu_1664/] [cpu_1664_imita.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
#include <stdio.h>
3
 
4
#define filo_cuantia 10
5
#define scrive (P)scrive_stdout
6
 
7
int main(int argc, char **argv)
8
{
9
 
10
 if (argc>1)
11
 {
12
  char fix_imaje_model[]="1664.imaje";
13
  char fix_jornal_cadena[]="1664.jornal";
14
  nM memoria_cuantia=0;
15
  struct lista *lista_enflue;
16
  struct cpu_1664 *cpu = cpu_1664_nova(1024*1024*2);
17
  char *cadena_fix_esflue=fix_imaje_model;
18
  char *cadena_fix_enflue;
19
  nN contador_ante=0;
20
  nN a=1;
21
  nN i;
22
  nN bool_debug=0;
23
  nN bool_parolos=0;
24
  nN bool_core=0;
25
  cpu->opera_lista[cpu_1664_opera_imita]=cpu_1664_opera__imita;
26
  cpu->imita_argc=argc;
27
  cpu->imita_argv=argv;
28
  FILE *fix_esflue;
29
  FILE *fix_enflue;
30
  n1 *fix_enflue_datos;
31
  n8 fix_enflue_datos_cuantia;
32
 
33
  while(a<argc)
34
  {
35
 
36
   switch(argv[a][0])
37
   {
38
    default:
39
     a++;
40
     break;
41
 
42
    case '+': //parametre arg imita
43
     a++;
44
     break;
45
 
46
    case '-':
47
 
48
     switch(argv[a][1])
49
     {
50
      case 'v':
51
       a++;
52
       bool_parolos=1;
53
       break;
54
 
55
      case 'f':
56
       a++;
57
       lista_enflue=lista_nova__ccadena(".inclui ");
58
       lista_ajunta__ccadena(lista_enflue, argv[a]);
59
       cpu_1664_asm_ajunta__cadena(cpu, lista_enflue->datos, lista_enflue->contador);
60
       lista_libri(lista_enflue);
61
       if(bool_parolos) cadena__f(scrive, "[0x%.*x] %s\n",sizeof(cpu_1664_sinia_t)*2, (n8)(cpu->lista_imaje_asm->contador-contador_ante), argv[a]);
62
       contador_ante=cpu->lista_imaje_asm->contador;
63
       a++;
64
       break;
65
 
66
      case 'I':
67
       a++;
68
       lista_ajunta__P(cpu->lista_inclui_curso, lista_nova__ccadena(argv[a++]));
69
       break;
70
 
71
      case 'm':
72
       a++;
73
       memoria_cuantia=nN__desimal_cadena((n1 *)argv[a], nN_cuantia__ccadena(argv[a]));
74
       lista_crese(cpu->lista_imaje, memoria_cuantia);
75
       a++;
76
       break;
77
 
78
      case 'd':
79
       bool_debug=1;
80
       bool_core=1;
81
       a++;
82
       break;
83
 
84
      case 'B':
85
       a++;
86
       cadena_fix_enflue=argv[a];
87
       fix_enflue=fopen(cadena_fix_enflue, "r");
88
       fseek(fix_enflue, 0, SEEK_END);
89
       fix_enflue_datos_cuantia=ftell(fix_enflue);
90
       rewind(fix_enflue);
91
       fix_enflue_datos=(n1*)memoria_nova(fix_enflue_datos_cuantia);
92
       fread(fix_enflue_datos, 1, fix_enflue_datos_cuantia, fix_enflue);
93
       if(bool_parolos) cadena__f(scrive, "imaje [0x%x] << %s [0x%x]",(n8)cpu->lista_imaje->contador, cadena_fix_enflue, fix_enflue_datos_cuantia); fflush(0);
94
       cpu_1664_imaje_ajunta__datos(cpu, fix_enflue_datos, fix_enflue_datos_cuantia);
95
       if(bool_parolos) cadena__f(scrive,"\n");
96
       memoria_libri(fix_enflue_datos);
97
       fclose(fix_enflue);
98
       a++;
99
       break;
100
 
101
      case 'b':
102
       a++;
103
       cadena_fix_esflue=argv[a];
104
       if(bool_parolos) cadena__f(scrive, "imaje > %s",cadena_fix_esflue); fflush(0);
105
       fix_esflue=fopen(cadena_fix_esflue, "w");
106
       cadena__f(scrive, " [0x%x]\n", (n8)cpu->lista_imaje_asm->contador);
107
       fwrite(cpu->lista_imaje_asm->datos, 1, cpu->lista_imaje_asm->contador, fix_esflue);
108
       fclose(fix_esflue);
109
       a++;
110
       break;
111
 
112
      case 'e':
113
       bool_core=1;
114
       a++;
115
       break;
116
     }
117
     break;
118
 
119
   }
120
  }
121
  if(cpu->asm_eror!=0)
122
  {
123
   cadena__f(scrive,"aborte: eror asm\n");
124
   return 1;
125
  }
126
 
127
  if(!bool_core) _exit(0);
128
 
129
  cpu_1664_imaje_ajunta__lista(cpu, cpu->lista_imaje_asm);
130
 
131
  if(!bool_debug)
132
  {
133
   cpu_1664__pasi(cpu, (n8)-1);
134
  }
135
 
136
  struct lista *lista_jornal_opera=lista_nova(0);
137
  struct lista *lista_jornal_desloca=lista_nova(0);
138
  struct lista *lista_jornal_mapa=lista_nova(0);
139
 
140
  cpu_1664_sinia_t *sinia_ante;
141
  cpu_1664_sinia_t sinia_ante_usor[1<<cpu_1664_bitio_r];
142
  cpu_1664_sinia_t sinia_ante_vantaje[1<<cpu_1664_bitio_r];
143
  cpu_1664_opera_t parola;
144
  cpu_1664_sinia_t sIP_egali=(cpu_1664_sinia_t)-1;
145
 
146
  nN pasi_cuantia=1;
147
 
148
  for(i=0;i<1<<cpu_1664_bitio_r;i++)
149
  {
150
   sinia_ante_usor[i]=0;
151
   sinia_ante_vantaje[i]=0;
152
  }
153
  n1 bool_sicle_fini=0;
154
  n1 bool_pausa=0;
155
  n1 bool_bp=0;
156
  n1 bool_depende;
157
  n1 bool_eseta;
158
 
159
  while(bool_sicle_fini==0)
160
  {
161
   bool_eseta=0;//cpu->sinia[cpu_1664_sinia_IP]==0;
162
   bool_pausa=(cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0)==(cpu_1664_opera_t)(-1));
163
 
164
   n1 opera_depende=(cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), 1, 0)>>5)&0x07;
165
 
166
   bool_depende=opera_depende==7||cpu->depende[opera_depende]!=0;
167
   bool_bp=bool_depende&&((cpu_1664_opera_t)(cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0))&0xff1f)==(cpu_1664_opera_t)(cpu_1664_opera_rev|(cpu_1664_opera_rev_bp<<8));
168
 
169
   if(cpu->vantaje==1)
170
   {
171
    sinia_ante=sinia_ante_vantaje;
172
   }
173
   else
174
   {
175
    sinia_ante=sinia_ante_usor;
176
   }
177
 
178
   if ((bool_eseta&&(cpu->contador_sicle!=0))||bool_sicle_fini||bool_pausa||bool_bp)
179
   {
180
    pasi_cuantia=1;
181
   }
182
 
183
   if ((sIP_egali!=(cpu_1664_sinia_t)-1)&&(cpu->sinia[cpu_1664_sinia_IP]==sIP_egali))
184
   {
185
    sIP_egali=(cpu_1664_sinia_t)-1;
186
    pasi_cuantia=1;
187
   }
188
 
189
   if(pasi_cuantia<=1)
190
   {
191
    //consola_leje_carater();
192
   fflush(stdout);cadena_ANSI__atribuida(scrive,40);
193
   fflush(stdout);cadena_ANSI_limpa(scrive);
194
   fflush(stdout);cadena_ANSI_cursor_orijin(scrive);
195
   nN j;
196
   nN s;
197
   for(s=0; s<(1<<(cpu_1664_bitio_r-2));s++)
198
   {
199
 
200
    for(j=0;j<(1<<2);j++)
201
    {
202
     nN indise=(s<<2)+j;
203
 
204
     if(indise==cpu_1664_sinia_IP)
205
     {
206
      fflush(stdout);cadena_ANSI__3atribuida(scrive,1,40,32);
207
     }
208
     else if(sinia_ante[indise]!=cpu->sinia[indise])
209
     {
210
      fflush(stdout);cadena_ANSI__3atribuida(scrive,1,40,36);
211
     }
212
     else
213
     {
214
      fflush(stdout);cadena_ANSI__3atribuida(scrive,2,40,37);
215
     }
216
     sinia_ante[indise]=cpu->sinia[indise];
217
     cadena__f(scrive, "%.*x ",sizeof(cpu_1664_sinia_t)*2,(n8)cpu->sinia[indise]);
218
    }
219
    scrive_stdout("\n",1);
220
   }
221
   fflush(stdout);cadena_ANSI__atribuida(scrive,11);
222
   j=-1;
223
   parola=cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP]+(2*(j+1)), (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0);
224
   cadena__f(scrive, "sicle %.*x usor %.*x limite %.*x\n",sizeof(cpu_1664_sinia_t)*2,cpu->contador_sicle,sizeof(cpu_1664_sinia_t)*2,cpu->contador_sicle_usor,sizeof(cpu_1664_sinia_t)*2,(n8)cpu->contador_sicle_usor_limite);
225
   fflush(stdout);cadena_ANSI__2atribuida(scrive,1,36);
226
 
227
   if(cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
228
   {
229
    cadena__f(scrive, "(esflue) ");
230
   }
231
   else
232
   {
233
    cadena__f(scrive, "(inoria) ");
234
   }
235
 
236
   cadena__f(scrive, "depende : ");
237
   cadena__f(scrive, "%c",('0')&0xff*(cpu->depende[0]!=0));
238
   cadena__f(scrive, "%c",('1')&0xff*(cpu->depende[1]!=0));
239
   cadena__f(scrive, "%c",('2')&0xff*(cpu->depende[2]!=0));
240
   cadena__f(scrive, "%c",('3')&0xff*(cpu->depende[3]!=0));
241
   cadena__f(scrive, "%c",('4')&0xff*(cpu->depende[4]!=0));
242
   cadena__f(scrive, "%c",('5')&0xff*(cpu->depende[5]!=0));
243
   cadena__f(scrive, "%c",('6')&0xff*(cpu->depende[6]!=0));
244
   cadena__f(scrive, "\n");
245
 
246
   fflush(stdout);cadena_ANSI__3atribuida(scrive,1,40,37);
247
   fflush(stdout);cadena_ANSI__cursor_desende(scrive,filo_cuantia-1);
248
   for(j=0;j<filo_cuantia;j++)
249
   {
250
    fflush(stdout);cadena_ANSI__cursor_sinistra(scrive,100);
251
    cpu_1664_sinia_t mapa=0;
252
    cpu_1664_sinia_t desloca=0;
253
    cpu_1664_opera_t parola=0;
254
    {
255
     //mapa=((cpu_1664_sinia_t *)(lista_jornal_mapa->datos))[(lista_jornal_mapa->contador/sizeof(cpu_1664_sinia_t))-j-1];
256
     desloca=((cpu_1664_sinia_t *)(lista_jornal_desloca->datos))[(lista_jornal_desloca->contador/sizeof(cpu_1664_sinia_t))-j-1];
257
     parola=((cpu_1664_opera_t *)(lista_jornal_opera->datos))[(lista_jornal_opera->contador/sizeof(cpu_1664_opera_t))-j-1];
258
    }
259
    cadena__f(scrive, "%.*x : ",4,mapa);
260
    cadena__f(scrive, "%.*x %.*x ",sizeof(cpu_1664_sinia_t)*2,desloca,4,parola);
261
 
262
    struct lista *lista_dev=cpu_1664_dev_dev(cpu, cpu->sinia[cpu_1664_sinia_IP], parola);
263
 
264
    struct lista *_lista_dev_dev_depende=((struct lista **)(((struct lista **)(lista_dev->datos))[1]->datos))[0];
265
    struct lista *_lista_dev_dev_opera=((struct lista **)(((struct lista **)(lista_dev->datos))[1]->datos))[1];
266
 
267
    struct lista *_lista_dev_parametre=((struct lista **)(((struct lista **)(lista_dev->datos))[2]->datos))[0];
268
    printf("%s ",_lista_dev_dev_depende->datos);
269
    printf("%s ",_lista_dev_dev_opera->datos);
270
    printf("%s ",_lista_dev_parametre->datos);
271
    fflush(stdout);cadena_ANSI__cursor_asende(scrive, 1);
272
   }
273
    fflush(stdout);cadena_ANSI__cursor_desende(scrive,filo_cuantia+1); fflush(stdout);cadena_ANSI__cursor_sinistra(scrive,100);
274
 
275
   for(j=0;j<filo_cuantia;j++)
276
   {
277
 
278
    if(j==0)
279
    {
280
     fflush(stdout);cadena_ANSI__3atribuida(scrive,40,1,36);
281
    }
282
    else
283
    {
284
     fflush(stdout);cadena_ANSI__3atribuida(scrive,2,40,37);
285
    }
286
    parola=cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP]+(2*(j+0-0)), (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0);
287
    cadena__f(scrive, "%.*x : ",4,cpu->umm_memoria[0]*!cpu->vantaje);
288
    cadena__f(scrive, "%.*x %.*x ",sizeof(cpu_1664_sinia_t)*2,cpu->sinia[cpu_1664_sinia_IP]+(2*(j+0-0)),4,parola);
289
 
290
    struct lista *lista_dev=cpu_1664_dev_dev(cpu, cpu->sinia[cpu_1664_sinia_IP], parola);
291
 
292
    struct lista *_lista_dev_dev_depende=((struct lista **)(((struct lista **)(lista_dev->datos))[1]->datos))[0];
293
    struct lista *_lista_dev_dev_opera=((struct lista **)(((struct lista **)(lista_dev->datos))[1]->datos))[1];
294
 
295
    struct lista *_lista_dev_parametre=((struct lista **)(((struct lista **)(lista_dev->datos))[2]->datos))[0];
296
    struct lista *_lista_dev_informa=((struct lista **)(((struct lista **)(lista_dev->datos))[2]->datos))[1];
297
    printf("%s ",_lista_dev_dev_depende->datos);
298
    printf("%s ",_lista_dev_dev_opera->datos);
299
    printf("%s ",_lista_dev_parametre->datos);
300
    if(j==0)
301
    {
302
     if(pasi_cuantia<=1)printf("; %s",_lista_dev_informa->datos);
303
    }
304
    if(pasi_cuantia<=1)printf("\n");
305
    cpu_1664_dev_dev_libri(lista_dev);
306
   }
307
   }
308
   #define limite_jornal 1000000
309
   if((lista_jornal_opera->contador/sizeof(cpu_1664_opera_t))<limite_jornal)
310
   {
311
    lista_ajunta__cpu_1664_parola_t(lista_jornal_opera, cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0));
312
    lista_ajunta__cpu_1664_sinia_t(lista_jornal_desloca, cpu->sinia[cpu_1664_sinia_IP]);
313
    lista_ajunta__cpu_1664_sinia_t(lista_jornal_mapa, cpu->umm_memoria[0]*!cpu->vantaje);
314
   }
315
   if (--pasi_cuantia>0)
316
   {
317
    cpu_1664__pasi(cpu, 1);
318
    continue;
319
   }
320
   else
321
   {
322
    pasi_cuantia=1;
323
   }
324
   n1 c=consola_leje_carater();
325
   switch (c)
326
   {
327
    case 'n':
328
    default:
329
     cpu_1664__pasi(cpu, 1);
330
     break;
331
 
332
    case 'm':
333
     sIP_egali=cpu->sinia[cpu_1664_sinia_IP]+sizeof(cpu_1664_opera_t);
334
     cpu_1664__pasi(cpu, 1);
335
     pasi_cuantia=-1;
336
     break;
337
 
338
    case 'N':
339
     cpu->sinia[cpu_1664_sinia_IP]+=sizeof(cpu_1664_opera_t);
340
     break;
341
 
342
    case 'c':
343
     cpu_1664__pasi(cpu, 1);
344
     pasi_cuantia=-1;
345
     break;
346
 
347
    case 'q':
348
     bool_sicle_fini=1;
349
     fflush(stdout);cadena_ANSI__atribuida(scrive,0);
350
     break;
351
 
352
    case ':':
353
     fflush(stdout);cadena_ANSI__3atribuida(scrive,40,1,36);
354
     cadena__f(scrive, "comanda : ");fflush(0);
355
 
356
     switch(consola_leje_carater())
357
     {
358
      case 'd':
359
       cadena__f(scrive, "imaje > %s",cadena_fix_esflue); fflush(0);
360
       fix_esflue=fopen(cadena_fix_esflue, "w");
361
       cadena__f(scrive, " [0x%x]\n", cpu->lista_imaje_asm->contador);
362
       fwrite(cpu->lista_imaje_asm->datos, 1, cpu->lista_imaje_asm->contador, fix_esflue);
363
       fclose(fix_esflue);
364
       consola_leje_carater(); //pausa
365
       break;
366
 
367
      case 'j':
368
       cadena__f(scrive, "jornal > %s",fix_jornal_cadena); fflush(0);
369
       fix_esflue=fopen(fix_jornal_cadena, "w");
370
       cadena__f(scrive, " [0x%x]\n", cpu->lista_imaje_asm->contador);
371
       fwrite(cpu->lista_imaje_asm->datos, 1, cpu->lista_imaje_asm->contador, fix_esflue);
372
       fclose(fix_esflue);
373
       consola_leje_carater(); //pausa
374
       break;
375
     }
376
 
377
     break;
378
   }
379
 
380
  }
381
  cadena__f(scrive, "> [%.*x] %.*x\n",6,cpu->sinia[cpu_1664_sinia_IP],sizeof(cpu_1664_opera_t)*2,cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0));
382
 
383
  lista_libri(lista_jornal_opera);
384
  lista_libri(lista_jornal_desloca);
385
  lista_libri(lista_jornal_mapa);
386
  cpu_1664_libri(cpu);
387
  return 0;
388
 }
389
 else
390
 {
391
  cadena__f(scrive, " <-v> parolas\n <-d> desdefetador\n <-e> imita\n <-I inclui_curso>\n <-f fonte.1664>\n <-B binario_enflue>\n <-b binario_esflue>\n <-m memoria_cuantia>\n");
392
  return 0;
393
 }
394
 
395
}

powered by: WebSVN 2.1.0

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