diff --git a/programs/develop/sdk/trunk/kobra/ipc.inc b/programs/develop/sdk/trunk/kobra/ipc.inc new file mode 100644 index 0000000000..a8b0a9bd33 --- /dev/null +++ b/programs/develop/sdk/trunk/kobra/ipc.inc @@ -0,0 +1,32 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Copyright (C) Vasiliy Kosenko (vkos), 2009 ;; +;; This program is free software: you can redistribute it and/or modify it under the terms of ;; +;; the GNU General Public License as published by the Free Software Foundation, either version 3 ;; +;; of the License, or (at your option) any later version. ;; +;; ;; +;; This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ;; +;; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See ;; +;; the GNU General Public License for more details. ;; +;; ;; +;; You should have received a copy of the GNU General Public License along with this program. ;; +;; If not, see . ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; This is set of functions to work with IPC in KolibriOS ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +IPC_init: + push eax + mov eax, dword [IPC_area] + mov dword [eax], 1 + mov dword [eax+4], 8 + + stdcall event_add_mask, 0x40 + + pop eax + + ret + +IPC_area: + dd 0 diff --git a/programs/develop/sdk/trunk/kobra/kobra.inc b/programs/develop/sdk/trunk/kobra/kobra.inc new file mode 100644 index 0000000000..2511a221a8 --- /dev/null +++ b/programs/develop/sdk/trunk/kobra/kobra.inc @@ -0,0 +1,96 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Copyright (C) Vasiliy Kosenko (vkos), 2009 ;; +;; Kobra is free software: you can redistribute it and/or modify it under the terms of the GNU ;; +;; General Public License as published by the Free Software Foundation, either version 3 ;; +;; of the License, or (at your option) any later version. ;; +;; ;; +;; Kobra is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without ;; +;; even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; +;; General Public License for more details. ;; +;; ;; +;; You should have received a copy of the GNU General Public License along with Kobra. ;; +;; If not, see . ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; This is set of functions to work with Kobra daemon ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +define KOBRA_MESSAGE_MAX_LEN 0x100 + +define KOBRA_CMD_REGISTER 'R' +define KOBRA_CMD_JOIN 'J' +define KOBRA_CMD_UNJOIN 'U' +define KOBRA_CMD_SEND 'S' + +define KOBRA_MESSAGE_LAUNCH_STATE 1 + +kobra_register: + mov eax, kobra_message_area + mov byte [eax], KOBRA_CMD_REGISTER + + stdcall thread_find_by_name, kobra_thread_name + + test eax, eax + je .error + + mov dword [kobra_tid], eax ;; Save tid + + mov ecx, eax + + mcall 60, 2, , kobra_message_area, 1 + + test eax, eax + je .return + +.error: + inc eax + +.return: + ret + +;; void kobra_send_message(char *group, void *message, int length); +kobra_send_message: + push ebp + mov ebp, esp + + cld + + mov edi, kobra_message_area + mov al, KOBRA_CMD_SEND + stosb + + mov esi, dword [ebp+8] + +.copy_group_cycle: + mov al, byte [esi] + test al, al + jz .copy_group_end + movsb + jmp .copy_group_cycle + +.copy_group_end: + +; xor al, al + stosb + + mov esi, dword [ebp+12] + mov ecx, dword [ebp+16] + rep movsb + + lea eax, [edi-kobra_message_area] + + mcall 60, 2, dword [kobra_tid], kobra_message_area, eax + + leave + + ret 12 + +kobra_tid: + dd 0 + +kobra_message_area: + rb KOBRA_MESSAGE_MAX_LEN + +kobra_thread_name: + db "kobra", 0, 0, 0, 0, 0, 0 diff --git a/programs/develop/sdk/trunk/kobra/thread.inc b/programs/develop/sdk/trunk/kobra/thread.inc new file mode 100644 index 0000000000..0171a87fc4 --- /dev/null +++ b/programs/develop/sdk/trunk/kobra/thread.inc @@ -0,0 +1,81 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Copyright (C) Vasiliy Kosenko (vkos), 2009 ;; +;; This program is free software: you can redistribute it and/or modify it under the terms of ;; +;; the GNU General Public License as published by the Free Software Foundation, either version 3 ;; +;; of the License, or (at your option) any later version. ;; +;; ;; +;; This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ;; +;; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See ;; +;; the GNU General Public License for more details. ;; +;; ;; +;; You should have received a copy of the GNU General Public License along with this program. ;; +;; If not, see . ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +thread_find_by_name: + cld + + push ebp + mov ebp, esp + + push ebx ecx + + push 1 ;; initial slot + + mov ebx, dword [thread_find_buff] + + push 0 + +.cycle: + mcall 9 ;; Get thread info + mov dword [esp], eax ;; number of slots + + cmp word [ebx+0x32], 9 + je .next + +.cmpstr: + mov ecx, 11 + + mov esi, dword [thread_find_buff] + add esi, 0xA ;; ESI = address of thread name in list + + mov edi, dword [ebp+8] ;; EDI = address of thread name to find + + repe cmpsb + je .found + +.next: + mov ecx, dword [esp+4] + inc ecx + cmp ecx, dword [esp] + jg .not_found + mov dword [esp+4], ecx + jmp .cycle + +.found: + mov eax, dword [ebx+30] ;; return TID + + jmp .exit + +.not_found: + xor eax, eax + +.exit: + pop ecx ebx + + leave + + ret 4 + +thread_find_buff: + dd 0 + +event_add_mask: + xchg eax, dword [esp+4] + or dword [event_mask], eax + mcall 40, dword [event_mask] + xchg eax, dword [esp+4] + ret 4 + +event_mask: + dd 0 diff --git a/programs/system/kobra/trunk/kobra_st.s b/programs/system/kobra/trunk/kobra_st.s new file mode 100644 index 0000000000..16c2ea7ddd --- /dev/null +++ b/programs/system/kobra/trunk/kobra_st.s @@ -0,0 +1,30 @@ +/*************************************************************************************************** + * Copyright (C) Vasiliy Kosenko (vkos), 2009 * + * Kobra is free software: you can redistribute it and/or modify it under the terms of the GNU * + * General Public License as published by the Free Software Foundation, either version 3 * + * of the License, or (at your option) any later version. * + * * + * Kobra is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License along with Kobra. * + * If not, see . * + ***************************************************************************************************/ + +.global start, entry +.extern main + +Start: + +.byte 'M', 'E', 'N', 'U', 'E', 'T', '0', '1' +.long 0x1 +.long begin +.long end +.long end+0x4000 +.long end+0x4000 +.long 0 +.long 0 + +begin: + call main