Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1789 yogev_ezra 1
#ifndef __cplusplus
2
 
3
//"inline" функции для  вызова системных функций Kolibri в C - в имени функции кол-во параметров
4
//SysCall# (номер_системной_функции, параметры,...)
5
 
6
static inline int SysCall1 (int EAX__) __attribute__((always_inline));
7
static inline int SysCall2 (int EAX__, int EBX__) __attribute__((always_inline));
8
static inline int SysCall3 (int EAX__, int EBX__, int ECX__) __attribute__((always_inline));
9
static inline int SysCall4 (int EAX__, int EBX__, int ECX__, int EDX__) __attribute__((always_inline));
10
static inline int SysCall5 (int EAX__, int EBX__, int ECX__, int EDX__, int ESI__) __attribute__((always_inline));
11
static inline int SysCall6 (int EAX__, int EBX__, int ECX__, int EDX__, int ESI__, int EDI__) __attribute__((always_inline));
12
 
13
 
14
static inline int SysCall1 (int EAX__)
15
{
16
 	   asm volatile(""::"a"(EAX__));
17
 	   asm volatile("int $0x40");
18
 
19
 	   register int res;
20
 	   asm volatile("":"=a"(res):);
21
 	   return res;
22
}
23
 
24
 
25
static inline int SysCall2 (int EAX__, int EBX__)
26
{
27
 	   asm volatile(""::"a"(EAX__));
28
 	   asm volatile(""::"b"(EBX__));
29
 	   asm volatile("int $0x40");
30
 
31
 	   register int res;
32
 	   asm volatile("":"=a"(res):);
33
 	   return res;
34
}
35
 
36
 
37
static inline int SysCall3 (int EAX__, int EBX__, int ECX__)
38
{
39
 	   asm volatile(""::"a"(EAX__));
40
 	   asm volatile(""::"b"(EBX__));
41
 	   asm volatile(""::"c"(ECX__));
42
 	   asm volatile("int $0x40");
43
 
44
 	   register int res;
45
 	   asm volatile("":"=a"(res):);
46
 	   return res;
47
}
48
 
49
 
50
static inline int SysCall4 (int EAX__, int EBX__, int ECX__, int EDX__)
51
{
52
 	   asm volatile(""::"a"(EAX__));
53
 	   asm volatile(""::"b"(EBX__));
54
 	   asm volatile(""::"c"(ECX__));
55
 	   asm volatile(""::"d"(EDX__));
56
 	   asm volatile("int $0x40");
57
 
58
 	   register int res;
59
 	   asm volatile("":"=a"(res):);
60
 	   return res;
61
}
62
 
63
 
64
static inline int SysCall5 (int EAX__, int EBX__, int ECX__, int EDX__, int ESI__)
65
{
66
 	   asm volatile(""::"a"(EAX__));
67
 	   asm volatile(""::"b"(EBX__));
68
 	   asm volatile(""::"c"(ECX__));
69
 	   asm volatile(""::"d"(EDX__));
70
 	   asm volatile(""::"S"(ESI__));
71
 	   asm volatile("int $0x40");
72
 
73
 	   register int res;
74
 	   asm volatile("":"=a"(res):);
75
 	   return res;
76
}
77
 
78
 
79
static inline int SysCall6 (int EAX__, int EBX__, int ECX__, int EDX__, int ESI__, int EDI__)
80
{
81
 	   asm volatile(""::"a"(EAX__));
82
 	   asm volatile(""::"b"(EBX__));
83
 	   asm volatile(""::"c"(ECX__));
84
 	   asm volatile(""::"d"(EDX__));
85
 	   asm volatile(""::"S"(ESI__));
86
 	   asm volatile(""::"D"(EDI__));
87
 	   asm volatile("int $0x40");
88
 
89
 	   register int res;
90
 	   asm volatile("":"=a"(res):);
91
 	   return res;
92
}
93
 
94
#else
95
 
96
//"inline" функции для  вызова системных функций Kolibri в C++
97
//SysCall(номер_системной_функции, параметры,...)
98
 
99
static inline int SysCall (int EAX__) __attribute__((always_inline));
100
static inline int SysCall (int EAX__, int EBX__) __attribute__((always_inline));
101
static inline int SysCall (int EAX__, int EBX__, int ECX__) __attribute__((always_inline));
102
static inline int SysCall (int EAX__, int EBX__, int ECX__, int EDX__) __attribute__((always_inline));
103
static inline int SysCall (int EAX__, int EBX__, int ECX__, int EDX__, int ESI__) __attribute__((always_inline));
104
static inline int SysCall (int EAX__, int EBX__, int ECX__, int EDX__, int ESI__, int EDI__) __attribute__((always_inline));
105
 
106
 
107
 
108
static inline int SysCall (int EAX__)
109
{
110
 	   asm volatile(""::"a"(EAX__));
111
 	   asm volatile("int $0x40");
112
 
113
 	   register int res;
114
 	   asm volatile("":"=a"(res):);
115
 	   return res;
116
}
117
 
118
 
119
static inline int SysCall (int EAX__, int EBX__)
120
{
121
 	   asm volatile(""::"a"(EAX__));
122
 	   asm volatile(""::"b"(EBX__));
123
 	   asm volatile("int $0x40");
124
 
125
 	   register int res;
126
 	   asm volatile("":"=a"(res):);
127
 	   return res;
128
}
129
 
130
 
131
static inline int SysCall (int EAX__, int EBX__, int ECX__)
132
{
133
 	   asm volatile(""::"a"(EAX__));
134
 	   asm volatile(""::"b"(EBX__));
135
 	   asm volatile(""::"c"(ECX__));
136
 	   asm volatile("int $0x40");
137
 
138
 	   register int res;
139
 	   asm volatile("":"=a"(res):);
140
 	   return res;
141
}
142
 
143
 
144
static inline int SysCall (int EAX__, int EBX__, int ECX__, int EDX__)
145
{
146
 	   asm volatile(""::"a"(EAX__));
147
 	   asm volatile(""::"b"(EBX__));
148
 	   asm volatile(""::"c"(ECX__));
149
 	   asm volatile(""::"d"(EDX__));
150
 	   asm volatile("int $0x40");
151
 
152
 	   register int res;
153
 	   asm volatile("":"=a"(res):);
154
 	   return res;
155
}
156
 
157
 
158
static inline int SysCall (int EAX__, int EBX__, int ECX__, int EDX__, int ESI__)
159
{
160
 	   asm volatile(""::"a"(EAX__));
161
 	   asm volatile(""::"b"(EBX__));
162
 	   asm volatile(""::"c"(ECX__));
163
 	   asm volatile(""::"d"(EDX__));
164
 	   asm volatile(""::"S"(ESI__));
165
 	   asm volatile("int $0x40");
166
 
167
 	   register int res;
168
 	   asm volatile("":"=a"(res):);
169
 	   return res;
170
}
171
 
172
 
173
static inline int SysCall (int EAX__, int EBX__, int ECX__, int EDX__, int ESI__, int EDI__)
174
{
175
 	   asm volatile(""::"a"(EAX__));
176
 	   asm volatile(""::"b"(EBX__));
177
 	   asm volatile(""::"c"(ECX__));
178
 	   asm volatile(""::"d"(EDX__));
179
 	   asm volatile(""::"S"(ESI__));
180
 	   asm volatile(""::"D"(EDI__));
181
 	   asm volatile("int $0x40");
182
 
183
 	   register int res;
184
 	   asm volatile("":"=a"(res):);
185
 	   return res;
186
}
187
 
188
#endif