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

Subversion Repositories 1664

[/] [1664/] [trunk/] [c/] [cpu_1664/] [cpu_1664_dev_dev.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
#define cadena_nd "<no definida>"
4
/*
5
  {
6
   {{?depende} {opera} {p}..{p}}
7
   {{depende} {opera_desifri_cadena}}
8
   {{dev_parametre} {dev_informa}}
9
  }
10
*/
11
struct lista * cpu_1664_dev_dev(struct cpu_1664 * cpu, cpu_1664_sinia_t desloca, cpu_1664_opera_t parola)
12
{
13
 struct lista *lista_dev=lista_nova(0);
14
 n1 opera_sifri=parola&((1<<cpu_1664_bitio_opera)-1);
15
 n1 opera_desifri=cpu->opera_ajusta[opera_sifri]&0x7f;
16
 n1 depende=(parola>>cpu_1664_bitio_opera)&((1<<(8-cpu_1664_bitio_opera))-1)*(opera_desifri!=0);
17
 n1 parametre=parola>>8;
18
 nN indise=n8_trova__asende_n8((n8 *)cpu->lista_dev_asm_desloca->datos,cpu->lista_dev_asm_desloca->contador/sizeof(n8), 0, desloca);
19
 
20
 if(cpu->lista_dev_asm_desloca->contador!=0)
21
 {
22
 
23
  if(((n8 *)(cpu->lista_dev_asm_desloca->datos))[indise]==desloca)
24
  {
25
   lista_ajunta__P(lista_dev, (P)lista_nova__lista(((struct lista **)(cpu->lista_dev_asm_cadena->datos))[indise]));
26
  }
27
  else
28
  {
29
   lista_ajunta__P(lista_dev, 0);
30
  }
31
 }
32
 else
33
 {
34
  lista_ajunta__P(lista_dev, 0);
35
 }
36
 
37
 {//{{cadena_depende}{cadena_opera}}
38
  struct lista *lista_opera=lista_nova(0);
39
  struct lista *lista_opera_depende=lista_nova(0);
40
  struct lista *lista_opera_opera=lista_nova(0);
41
 
42
  lista_ajunta__P(lista_dev, (P)lista_opera);
43
  lista_ajunta__P(lista_opera, (P)lista_opera_depende);
44
  lista_ajunta__P(lista_opera, (P)lista_opera_opera);
45
 
46
  if(opera_desifri<(cpu->lista_dev_opera_cadena->contador/sizeof(P)))
47
  {
48
   lista_ajunta__lista(lista_opera_opera, ((struct lista **)(cpu->lista_dev_opera_cadena->datos))[opera_desifri]);
49
  }
50
  else
51
  {
52
   lista_ajunta__ccadena(lista_opera_opera, ".do 0x");
53
   lista_ajunta_asciiexadesimal__n2(lista_opera_opera, parola);
54
  }
55
 
56
  if((depende!=cpu_1664_depende_1)&&(opera_desifri!=0))
57
  {
58
   lista_ajunta__dato(lista_opera_depende, depende|'0');
59
  }
60
  else
61
  {
62
   lista_ajunta__dato(lista_opera_depende, ' ');
63
  }
64
 }
65
 
66
 if(opera_desifri==0) //opera_ajusta
67
 {
68
  struct lista *lista_2=lista_nova(0);
69
  struct lista *lista_parametre=lista_nova(0);
70
  struct lista *lista_informa=lista_nova(0);
71
  n1 ajusta=((parola>>cpu_1664_bitio_opera)&((1<<cpu_1664_bitio_co)-1))+0x10;
72
  n1 opera=(parola>>(cpu_1664_bitio_opera+cpu_1664_bitio_co));
73
  lista_ajunta_asciiexadesimal__n1(lista_parametre, ajusta);
74
  lista_ajunta__dato(lista_parametre, ' ');
75
  if(opera<cpu->lista_dev_opera_cadena->contador/sizeof(P))
76
  {
77
   lista_ajunta__lista(lista_parametre, ((struct lista **)(cpu->lista_dev_opera_cadena->datos))[opera]);
78
  }
79
  else
80
  {
81
   lista_ajunta_asciiexadesimal__n1(lista_parametre, opera);
82
  }
83
 
84
  if(cpu->opera_ajusta[ajusta]<cpu->lista_dev_opera_cadena->contador/sizeof(P))
85
  {
86
   lista_ajunta__lista(lista_informa, ((struct lista **)(cpu->lista_dev_opera_cadena->datos))[cpu->opera_ajusta[ajusta]]);
87
  }
88
  else
89
  {
90
   lista_ajunta__ccadena(lista_informa, cadena_nd);
91
  }
92
 
93
  lista_ajunta__ccadena(lista_informa, " <- ");
94
 
95
  if(opera<cpu->lista_dev_opera_cadena->contador/sizeof(P))
96
  {
97
   lista_ajunta__lista(lista_informa, ((struct lista **)(cpu->lista_dev_opera_cadena->datos))[opera]);
98
  }
99
  else
100
  {
101
   lista_ajunta__ccadena(lista_informa, cadena_nd);
102
  }
103
 
104
  lista_ajunta__P(lista_2, (P)lista_parametre);
105
  lista_ajunta__P(lista_2, (P)lista_informa);
106
  lista_ajunta__P(lista_dev, (P)lista_2);
107
 }
108
 else
109
 {
110
 
111
  if(opera_desifri<cpu->lista_dev_opera_parametre_funsiona->contador/sizeof(P))
112
  {
113
   lista_ajunta__P(lista_dev, ((P (**)(struct cpu_1664 *, n1))(cpu->lista_dev_opera_parametre_funsiona->datos))[opera_desifri](cpu, parametre));
114
  }
115
  else
116
  {
117
   lista_ajunta__P(lista_dev, cpu_1664_dev_opera_parametre_funsiona__nd(cpu, parametre));
118
  }
119
 }
120
 
121
 return lista_dev;
122
}

powered by: WebSVN 2.1.0

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