Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  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
  189.