summaryrefslogtreecommitdiff
path: root/frontends/kolibrios/kos32sys.h
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/kolibrios/kos32sys.h')
-rw-r--r--frontends/kolibrios/kos32sys.h557
1 files changed, 557 insertions, 0 deletions
diff --git a/frontends/kolibrios/kos32sys.h b/frontends/kolibrios/kos32sys.h
new file mode 100644
index 000000000..de4bf6aae
--- /dev/null
+++ b/frontends/kolibrios/kos32sys.h
@@ -0,0 +1,557 @@
+#ifndef __KOS_32_SYS_H__
+#define __KOS_32_SYS_H__
+
+#include <newlib.h>
+#include <stdint.h>
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//#ifdef CONFIG_DEBUF
+// #define DBG(format,...) printf(format,##__VA_ARGS__)
+//#else
+// #define DBG(format,...)
+//#endif
+
+#define TYPE_3_BORDER_WIDTH 5
+#define WIN_STATE_MINIMIZED 0x02
+#define WIN_STATE_ROLLED 0x04
+
+typedef unsigned int color_t;
+
+typedef union __attribute__((packed))
+{
+ uint32_t val;
+ struct
+ {
+ short x;
+ short y;
+ };
+}pos_t;
+
+typedef union __attribute__((packed))
+{
+ uint32_t val;
+ struct
+ {
+ uint8_t state;
+ uint8_t code;
+ uint16_t ctrl_key;
+ };
+}oskey_t;
+
+typedef struct
+{
+ unsigned handle;
+ unsigned io_code;
+ void *input;
+ int inp_size;
+ void *output;
+ int out_size;
+}ioctl_t;
+
+
+static inline
+void define_button(uint32_t x_w, uint32_t y_h, uint32_t id, uint32_t color)
+{
+ __asm__ __volatile__(
+ "int $0x40"
+ ::"a"(8),
+ "b"(x_w),
+ "c"(y_h),
+ "d"(id),
+ "S"(color));
+};
+static inline void DefineButton(void) __attribute__ ((alias ("define_button")));
+
+static inline
+uint32_t get_skin_height(void)
+{
+ uint32_t height;
+
+ __asm__ __volatile__(
+ "int $0x40 \n\t"
+ :"=a"(height)
+ :"a"(48),"b"(4));
+ return height;
+};
+static inline uint32_t GetSkinHeight(void) __attribute__ ((alias ("get_skin_height")));
+
+static inline
+void BeginDraw(void)
+{
+ __asm__ __volatile__(
+ "int $0x40" ::"a"(12),"b"(1));
+};
+
+static inline
+void EndDraw(void)
+{
+ __asm__ __volatile__(
+ "int $0x40" ::"a"(12),"b"(2));
+};
+
+static inline void DrawWindow(int x, int y, int w, int h, const char *name,
+ color_t workcolor, uint32_t style)
+{
+
+ __asm__ __volatile__(
+ "int $0x40"
+ ::"a"(0),
+ "b"((x << 16) | ((w-1) & 0xFFFF)),
+ "c"((y << 16) | ((h-1) & 0xFFFF)),
+ "d"((style << 24) | (workcolor & 0xFFFFFF)),
+ "D"(name),
+ "S"(0) : "memory");
+};
+
+#define POS_SCREEN 0
+#define POS_WINDOW 1
+
+static inline
+pos_t get_mouse_pos(int origin)
+{
+ pos_t val;
+
+ __asm__ __volatile__(
+ "int $0x40 \n\t"
+ "rol $16, %%eax"
+ :"=a"(val)
+ :"a"(37),"b"(origin));
+ return val;
+}
+static inline pos_t GetMousePos(int origin) __attribute__ ((alias ("get_mouse_pos")));
+
+static inline
+uint32_t get_mouse_buttons(void)
+{
+ uint32_t val;
+
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(val)
+ :"a"(37),"b"(2));
+ return val;
+};
+static inline uint32_t GetMouseButtons(void) __attribute__ ((alias ("get_mouse_buttons")));
+
+static inline
+uint32_t get_mouse_wheels(void)
+{
+ uint32_t val;
+
+ __asm__ __volatile__(
+ "int $0x40 \n\t"
+ :"=a"(val)
+ :"a"(37),"b"(7));
+ return val;
+};
+static inline uint32_t GetMouseWheels(void) __attribute__ ((alias ("get_mouse_wheels")));
+
+static inline
+uint32_t wait_for_event(uint32_t time)
+{
+ uint32_t val;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(val)
+ :"a"(23), "b"(time));
+ return val;
+};
+
+static inline uint32_t check_os_event()
+{
+ uint32_t val;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(val)
+ :"a"(11));
+ return val;
+};
+
+static inline uint32_t get_os_event()
+{
+ uint32_t val;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(val)
+ :"a"(10));
+ return val;
+};
+static inline uint32_t GetOsEvent(void) __attribute__ ((alias ("get_os_event")));
+
+static inline
+uint32_t get_tick_count(void)
+{
+ uint32_t val;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(val)
+ :"a"(26),"b"(9));
+ return val;
+};
+
+static inline
+uint64_t get_ns_count(void)
+{
+ uint64_t val;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=A"(val)
+ :"a"(26), "b"(10));
+ return val;
+};
+
+static inline
+oskey_t get_key(void)
+{
+ oskey_t val;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(val)
+ :"a"(2));
+ return val;
+}
+
+static inline
+uint32_t get_os_button()
+{
+ uint32_t val;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(val)
+ :"a"(17));
+ return val>>8;
+};
+
+static inline uint32_t get_service(char *name)
+{
+ uint32_t retval = 0;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(retval)
+ :"a"(68),"b"(16),"c"(name)
+ :"memory");
+
+ return retval;
+};
+
+static inline int call_service(ioctl_t *io)
+{
+ int retval;
+
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(retval)
+ :"a"(68),"b"(17),"c"(io)
+ :"memory","cc");
+
+ return retval;
+};
+
+
+static inline
+void draw_line(int xs, int ys, int xe, int ye, color_t color)
+{
+ __asm__ __volatile__(
+ "int $0x40"
+ ::"a"(38), "d"(color),
+ "b"((xs << 16) | xe),
+ "c"((ys << 16) | ye));
+}
+
+
+
+static inline
+void draw_bar(int x, int y, int w, int h, color_t color)
+{
+ __asm__ __volatile__(
+ "int $0x40"
+ ::"a"(13), "d"(color),
+ "b"((x << 16) | w),
+ "c"((y << 16) | h));
+}
+
+static inline
+void draw_bitmap(void *bitmap, int x, int y, int w, int h)
+{
+ __asm__ __volatile__(
+ "int $0x40"
+ ::"a"(7), "b"(bitmap),
+ "c"((w << 16) | h),
+ "d"((x << 16) | y));
+}
+
+static inline
+void draw_text_sys(const char *text, int x, int y, int len, color_t color)
+{
+ __asm__ __volatile__(
+ "int $0x40"
+ ::"a"(4),"d"(text),
+ "b"((x << 16) | y),
+ "S"(len),"c"(color)
+ :"memory");
+}
+
+static inline void yield(void)
+{
+ __asm__ __volatile__(
+ "int $0x40"
+ ::"a"(68), "b"(1));
+};
+
+static inline void delay(uint32_t time)
+{
+ __asm__ __volatile__(
+ "int $0x40"
+ ::"a"(5), "b"(time)
+ :"memory");
+};
+
+static inline
+void *user_alloc(size_t size)
+{
+ void *val;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(val)
+ :"a"(68),"b"(12),"c"(size));
+ return val;
+}
+static inline void *UserAlloc(size_t size) __attribute__ ((alias ("user_alloc")));
+
+static inline
+int user_free(void *mem)
+{
+ int val;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(val)
+ :"a"(68),"b"(13),"c"(mem));
+ return val;
+}
+static inline int UserFree(void *mem) __attribute__ ((alias ("user_free")));
+
+static inline
+int *user_unmap(void *base, size_t offset, size_t size)
+{
+ int *val;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(val)
+ :"a"(68),"b"(26),"c"(base),"d"(offset),"S"(size));
+ return val;
+};
+static inline int *UserUnmap(void *base, size_t offset, size_t size) __attribute__ ((alias ("user_unmap")));
+
+typedef union
+{
+ struct
+ {
+ void *data;
+ size_t size;
+ };
+ unsigned long long raw;
+}ufile_t;
+
+
+static inline ufile_t load_file(const char *path)
+{
+ ufile_t uf;
+
+ __asm__ __volatile__ (
+ "int $0x40"
+ :"=A"(uf.raw)
+ :"a" (68), "b"(27),"c"(path));
+
+ return uf;
+};
+static inline ufile_t LoadFile(const char *path) __attribute__ ((alias ("load_file")));
+
+static inline int GetScreenSize()
+{
+ int retval;
+
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(retval)
+ :"a"(61), "b"(1));
+ return retval;
+}
+
+static inline
+uint32_t load_cursor(void *path, uint32_t flags)
+{
+ uint32_t val;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(val)
+ :"a"(37), "b"(4), "c"(path), "d"(flags));
+ return val;
+}
+static inline
+uint32_t LoadCursor(void *path, uint32_t flags) __attribute__ ((alias ("load_cursor")));
+
+static inline
+uint32_t set_cursor(uint32_t cursor)
+{
+ uint32_t old;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(old)
+ :"a"(37), "b"(5), "c"(cursor));
+ return old;
+};
+static inline uint32_t SetCursor(uint32_t cursor) __attribute__ ((alias ("set_cursor")));
+
+static inline
+int destroy_cursor(uint32_t cursor)
+{
+ int ret;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(ret)
+ :"a"(37), "b"(6), "c"(cursor)
+ :"memory");
+ return ret;
+};
+static inline int DestroyCursor(uint32_t cursor) __attribute__ ((alias ("destroy_cursor")));
+
+static inline void get_proc_info(char *info)
+{
+ __asm__ __volatile__(
+ "int $0x40"
+ :
+ :"a"(9), "b"(info), "c"(-1));
+};
+static inline void GetProcInfo(char *info) __attribute__ ((alias ("get_proc_info")));
+
+static inline
+void* user_realloc(void *mem, size_t size)
+{
+ void *val;
+ __asm__ __volatile__(
+ "int $0x40"
+ :"=a"(val)
+ :"a"(68),"b"(20),"c"(size),"d"(mem)
+ :"memory");
+
+ return val;
+};
+static inline void* UserRealloc(void *mem, size_t size) __attribute__ ((alias ("user_realloc")));
+
+/*--------------------------------------------------------------------------*/
+/* Added by ashmew2 when experimenting with newlib and how the binary will be created finally using i586-kos32-* builders */
+
+/* struct dll_proc_entry */
+/* { */
+/* char *proc_name; */
+/* void *proc_address; */
+/* }; */
+
+/* typedef struct dll_proc_entry* dll_proc_table; */
+
+/* static inline dll_proc_table dll_load(char *path) */
+/* { */
+/* void *dll_table; */
+/* __asm__ __volatile__( */
+/* "int $0x40" */
+/* :"=a"(dll_table) */
+/* :"a"(68), "b"(19), "c"(path)); */
+
+/* return (dll_proc_table) dll_table; */
+/* }; */
+/* static inline dll_proc_table LoadDLL(char *path) __attribute__ ((alias ("dll_load"))); */
+
+/* void *dll_find_proc(dll_proc_table table, char *proc_name) */
+/* { */
+/* int i; */
+
+/* if(table == NULL) */
+/* return NULL; */
+
+/* for(i = 0; table[i].proc_name && strcmp(proc_name, table[i].proc_name); i++); */
+
+/* if(table[i].proc_name) */
+/* return table[i].proc_address; */
+/* else */
+/* return NULL; */
+/* } */
+
+/* static inline void * DLLFindProc(dll_proc_table table, char *proc_name) __attribute__ ((alias ("dll_find_proc"))); */
+
+/* static inline void board_write_byte(const char ch){ */
+/* __asm__ __volatile__( */
+/* "int $0x40" */
+/* : */
+/* :"a"(63), "b"(1), "c"(ch)); */
+/* } */
+
+/* void board_write_str(const char* str){ */
+/* while(*str) */
+/* board_write_byte(*str++); */
+/* } */
+
+/*--------------------------------------------------------------------------*/
+
+void *get_resource(void *data, uint32_t id);
+
+struct blit_call
+{
+ int dstx;
+ int dsty;
+ int w;
+ int h;
+
+ int srcx;
+ int srcy;
+ int srcw;
+ int srch;
+
+ void *bitmap;
+ int stride;
+};
+
+static inline void Blit(void *bitmap, int dst_x, int dst_y,
+ int src_x, int src_y, int w, int h,
+ int src_w, int src_h, int stride)
+{
+ volatile struct blit_call bc;
+
+ bc.dstx = dst_x;
+ bc.dsty = dst_y;
+ bc.w = w;
+ bc.h = h;
+ bc.srcx = src_x;
+ bc.srcy = src_y;
+ bc.srcw = src_w;
+ bc.srch = src_h;
+ bc.stride = stride;
+ bc.bitmap = bitmap;
+
+ __asm__ __volatile__(
+ "int $0x40"
+ ::"a"(73),"b"(0),"c"(&bc.dstx));
+};
+
+void* load_library(const char *name);
+
+void* get_proc_address(void *handle, const char *proc_name);
+
+void enumerate_libraries(int (*callback)(void *handle, const char* name,
+ uint32_t base, uint32_t size, void *user_data),
+ void *user_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
+
+
+
+
+