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

Subversion Repositories 1664

[/] [1664/] [trunk/] [c/] [cpu_1664/] [cpu_1664_asm_asm_opera__lista_2.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_asm_opera__lista_2(struct cpu_1664 *cpu, struct lista *lista_parametre)
4
{
5
 cpu_1664_opera_t parola;
6
 n1 depende;
7
 n1 opera_sifri,opera_desifri;
8
 nN opera_parametre_indise;
9
 n1 parametre;
10
 cpu->avisa__no_definida=0;
11
 
12
 opera_desifri=cpu_1664_asm_n1_opera_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[0]);
13
 
14
 if (opera_desifri!=0xff)
15
 {
16
  depende=0x07;
17
  opera_parametre_indise=1;
18
 }
19
 else if((lista_parametre->contador/sizeof(P))>1)
20
 {
21
  depende=cpu_1664_asm_n8_valua__lista(cpu,((struct lista **)(lista_parametre->datos))[0]);
22
  opera_desifri=cpu_1664_asm_n1_opera_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[1]);
23
  opera_parametre_indise=2;
24
 }
25
 
26
 if(opera_desifri!=0xff)
27
 {
28
  opera_sifri=cpu->opera_ajusta_asm[opera_desifri];
29
 
30
  if(opera_sifri==0)
31
  {
32
   n1 opera_ajusta=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[(lista_parametre->contador/sizeof(P))-2]);
33
 
34
   if((opera_ajusta<0x10)||(opera_ajusta>0x1f))
35
   {
36
    cadena__f((P)scrive_stdout, "eror opera ajusta %x 0x00..0x10\n",opera_ajusta);
37
    cpu->asm_eror=1;
38
   }
39
   else
40
   {
41
    opera_ajusta-=0x10;
42
   }
43
   n1 opera_sustitua=cpu_1664_asm_n1_opera_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[(lista_parametre->contador/sizeof(P))-1]);
44
 
45
   if (opera_sustitua==0xff)
46
   {
47
    opera_sustitua=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[(lista_parametre->contador/sizeof(P))-1]);
48
   }
49
   parola=opera_sifri+(opera_ajusta<<(cpu_1664_bitio_opera))+(opera_sustitua<<(cpu_1664_bitio_opera+cpu_1664_bitio_co));
50
  }
51
  else
52
  {
53
 
54
   lista_ajunta__cpu_1664_sinia_t(cpu->lista_dev_asm_desloca, cpu->lista_imaje_asm->contador); //*__ ? + imaje->contador
55
   lista_ajunta__P(cpu->lista_dev_asm_cadena, lista_2_nova__lista_2(lista_parametre));
56
 
57
   parametre=(((n1 (**)(struct cpu_1664 *, struct lista *))(cpu->lista_asm_opera_parametre_funsiona->datos))[opera_desifri](cpu, lista_parametre));
58
   parola=(opera_sifri|(depende<<cpu_1664_bitio_opera))|(parametre<<8);
59
  }
60
  if(cpu->avisa__no_definida!=0)
61
  {
62
   struct cpu_1664_asm_taxe *taxe=(struct cpu_1664_asm_taxe *)memoria_nova(sizeof(struct cpu_1664_asm_taxe));
63
   taxe->parola=parola;
64
   taxe->asm_opera_parametre_funsiona=((n1 (**)(struct cpu_1664 *, struct lista *))(cpu->lista_asm_opera_parametre_funsiona->datos))[opera_desifri];
65
   taxe->desloca=cpu->lista_imaje_asm->contador;
66
   taxe->lista=lista_2_nova__lista_2(lista_parametre);
67
   lista_ajunta__P(cpu->lista_taxe, (P)taxe);
68
  }
69
 
70
  lista_ajunta__cpu_1664_asm_parola_t(cpu->lista_imaje_asm, parola);
71
 }
72
 else
73
 {
74
  cpu_1664_asm_sinia_t sinia=cpu_1664_asm_sinia_t_sinia__cadena(((struct lista **)(lista_parametre->datos))[0]->datos,((struct lista **)(lista_parametre->datos))[0]->contador);
75
  cpu_1664_asm_sinia_t valua;
76
 
77
  if((lista_parametre->contador/sizeof(P))>1)
78
  {
79
   valua=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[1]);
80
  }
81
  else
82
  {
83
   valua=cpu->lista_imaje_asm->contador;
84
  }
85
 
86
  cpu_1664_asm_defina_valua(cpu, sinia, valua);
87
 
88
  //eror opera_sifri
89
  //cadena__f((P)scrive_stdout, "\neror opera_sifri\n");
90
  //cpu->asm_eror=1;
91
 }
92
}

powered by: WebSVN 2.1.0

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