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

Subversion Repositories 1664

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 mrdmkg
#ifdef imita
2
#include "cpu_1664.h"
3
#include <time.h>
4
#include <stdio.h>
5
 
6
void cpu_1664_opera__imita(struct cpu_1664 *cpu, n1 bait)
7
{
8
 cpu->opera_sicle=2;
9
 
10
 n8 c;
11
 nN desloca;
12
 nN indise;
13
 struct lista *fix_nom;
14
 n1 *datos;
15
 struct timespec *reg;
16
 
17
 switch (bait)
18
 {
19
  case cpu_1664_imita_argc:
20
   cpu->sinia[0]=cpu->imita_argc;
21
   break;
22
 
23
  case cpu_1664_imita_argv:
24
   cpu_1664_umm(cpu, cpu->sinia[0], (1<<cpu_1664_umm_usor_mapa_permete_scrive), 1, 0);
25
   desloca=cpu->sinia[0];
26
   indise=cpu->sinia[1];
27
 
28
   if (indise<cpu->imita_argc)
29
   {
30
 
31
    nN i=0;
32
    do
33
    {
34
 
35
     cpu_1664_umm(cpu, desloca++, (1<<cpu_1664_umm_usor_mapa_permete_scrive), 1, cpu->imita_argv[indise][i]);
36
    } while(cpu->imita_argv[indise][i++]!=0); //inclui zero final
37
   }
38
 
39
   break;
40
 
41
  case cpu_1664_imita_open:
42
   fix_nom=lista_nova(128);
43
 
44
   indise=0;
45
   do
46
   {
47
    c=cpu_1664_umm(cpu, cpu->sinia[0]+indise++, (1<<cpu_1664_umm_usor_mapa_permete_leje), sizeof(n1), 0);
48
    lista_ajunta__dato(fix_nom, c);
49
   } while(c!=0);
50
 
51
   cpu->sinia[0]=open((const char *)fix_nom->datos, O_RDWR);
52
   lista_libri(fix_nom);
53
   break;
54
 
55
  case cpu_1664_imita_close:
56
 
57
   close(cpu->sinia[0]);
58
   break;
59
 
60
  case cpu_1664_imita_read:
61
 
62
   datos=memoria_nova(cpu->sinia[2]);
63
   read(cpu->sinia[0],datos,cpu->sinia[2]);
64
 
65
   indise=0;
66
   while(indise<cpu->sinia[1])
67
   {
68
    cpu_1664_umm(cpu, cpu->sinia[1]+indise, (1<<cpu_1664_umm_usor_mapa_permete_scrive), 1, datos[indise]);
69
    indise++;
70
   }
71
 
72
   memoria_libri(datos);
73
   break;
74
 
75
  case cpu_1664_imita_write:
76
   indise=0;
77
 
78
   datos=memoria_nova(cpu->sinia[2]);
79
   indise=0;
80
 
81
   while(indise<cpu->sinia[2])
82
   {
83
    datos[indise]=cpu_1664_umm(cpu, cpu->sinia[1]+indise, (1<<cpu_1664_umm_usor_mapa_permete_leje), 1, 0);
84
    indise++;
85
   }
86
 
87
   write(cpu->sinia[0],datos,cpu->sinia[2]);
88
   memoria_libri(datos);
89
   break;
90
 
91
  case cpu_1664_imita_ftruncate:
92
   cpu->sinia[0]=ftruncate(cpu->sinia[0],cpu->sinia[1]);
93
   break;
94
 
95
  case cpu_1664_imita_lseek:
96
   cpu->sinia[0]=lseek(cpu->sinia[0],cpu->sinia[1],cpu->sinia[2]);
97
   break;
98
 
99
  case cpu_1664_imita_time:
100
   cpu->sinia[0]=time(0);
101
   break;
102
 
103
  case cpu_1664_imita_nanosleep:
104
   reg=(struct timespec *)memoria_nova(sizeof(struct timespec));
105
 
106
   if(cpu->sinia[0]>=1000000000)
107
   {
108
    reg->tv_sec=cpu->sinia[0]/1000000000;
109
    reg->tv_nsec=0;
110
   }
111
   else
112
   {
113
    reg->tv_nsec=cpu->sinia[0];
114
   }
115
 
116
   cpu->sinia[0]=nanosleep(reg, 0);
117
   memoria_libri((n1 *)reg);
118
   break;
119
 
120
  case cpu_1664_imita_exit:
121
   _exit(cpu->sinia[0]);
122
   break;
123
 
124
  default:
125
   break;
126
 };
127
}
128
#endif

powered by: WebSVN 2.1.0

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