typedef struct { unsigned handle; unsigned io_code; void *input; int inp_size; void *output; int out_size; }ioctl_t; #define ERR_OK 0 #define ERR_PARAM -1 #define ERR_NOMEM -2 /////////////////////////////////////////////////////////////////////////////// #ifdef KOLIBRI_PE #define LFB_BASE 0xDF000000 #else #define LFB_BASE 0xFE000000 #endif void usleep(u32_t delay); static int __attribute__ ((always_inline)) abs (int i) { return i < 0 ? -i : i; }; extern inline u32_t get_service(char *name) { u32_t retval; asm("int $0x40" :"=a"(retval) :"a"(68),"b"(16),"c"(name)); return retval; }; extern inline u32_t load_service(char *name) { u32_t retval; asm("int $0x40" :"=a"(retval) :"a"(68),"b"(21),"c"(name)); return retval; }; extern inline int call_service(ioctl_t *io) { int retval; asm("int $0x40" :"=a"(retval) :"a"(68),"b"(17),"c"(io) :"memory"); return retval; }; extern inline void* UserAlloc(size_t size) { void *retval; asm("int $0x40" :"=a"(retval) :"a"(68),"b"(12),"c"(size) :"memory"); return retval; } extern inline void UserFree(void *mem) { __asm__ __volatile__( "int $0x40" ::"a"(68),"b"(13),"c"(mem) :"memory"); } extern inline int GetScreenSize() { int retval; __asm__ __volatile__( "int $0x40" :"=a"(retval) :"a"(61), "b"(1)); return retval; } extern inline int GetScreenBpp() { int retval; __asm__ __volatile__( "int $0x40" :"=a"(retval) :"a"(61), "b"(2)); return retval; } extern inline int GetScreenPitch() { int retval; __asm__ __volatile__( "int $0x40" :"=a"(retval) :"a"(61), "b"(3)); return retval; } extern inline int test_mmx() { int retval; __asm__ __volatile__( "cpuid\n\t" "testl $23, %%edx\n\t" "setnzb %%al\n\t" "movzx %%al, %%eax" :"=a"(retval) :"a"(0) :"ebx","ecx","edx"); return retval; }