From 631f5b8e1e1c61018ad04a4510568c4cd6da9074 Mon Sep 17 00:00:00 2001 From: turbocat Date: Sat, 3 Jul 2021 14:13:18 +0000 Subject: [PATCH] Kolibri-F: - Added syscall_ common name for system call functions. - Fixed not logical names of system calls of functions. git-svn-id: svn://kolibrios.org@8986 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/branches/Kolibri-F/blkdev/disk.inc | 22 +-- kernel/branches/Kolibri-F/blkdev/rdsave.inc | 2 +- kernel/branches/Kolibri-F/boot/rdload.inc | 2 +- kernel/branches/Kolibri-F/boot/shutdown.inc | 2 +- kernel/branches/Kolibri-F/build.sh | 18 +- kernel/branches/Kolibri-F/bus/pci/pci32.inc | 4 +- kernel/branches/Kolibri-F/bus/usb/init.inc | 2 +- kernel/branches/Kolibri-F/core/clipboard.inc | 2 +- kernel/branches/Kolibri-F/core/debug.inc | 6 +- kernel/branches/Kolibri-F/core/dll.inc | 4 +- kernel/branches/Kolibri-F/core/exports.inc | 4 +- kernel/branches/Kolibri-F/core/memory.inc | 50 +++--- kernel/branches/Kolibri-F/core/sys32.inc | 6 +- kernel/branches/Kolibri-F/core/syscall.inc | 166 +++++++++---------- kernel/branches/Kolibri-F/core/taskman.inc | 4 +- kernel/branches/Kolibri-F/core/v86.inc | 2 +- kernel/branches/Kolibri-F/fdo.inc | 2 +- kernel/branches/Kolibri-F/fs/fs_lfn.inc | 18 +- kernel/branches/Kolibri-F/gui/event.inc | 10 +- kernel/branches/Kolibri-F/gui/window.inc | 6 +- kernel/branches/Kolibri-F/hid/set_dtc.inc | 2 +- kernel/branches/Kolibri-F/kernel.asm | 86 +++++----- kernel/branches/Kolibri-F/network/socket.inc | 2 +- kernel/branches/Kolibri-F/network/stack.inc | 4 +- kernel/branches/Kolibri-F/posix/posix.inc | 8 +- kernel/branches/Kolibri-F/sound/playnote.inc | 2 +- kernel/branches/Kolibri-F/tools/kerpack | Bin 0 -> 35856 bytes kernel/branches/Kolibri-F/tools/kpack | Bin 0 -> 39336 bytes kernel/branches/Kolibri-F/video/blitter.inc | 2 +- 29 files changed, 214 insertions(+), 224 deletions(-) create mode 100755 kernel/branches/Kolibri-F/tools/kerpack create mode 100755 kernel/branches/Kolibri-F/tools/kpack diff --git a/kernel/branches/Kolibri-F/blkdev/disk.inc b/kernel/branches/Kolibri-F/blkdev/disk.inc index 03bccc899b..f2a0a4ccd4 100644 --- a/kernel/branches/Kolibri-F/blkdev/disk.inc +++ b/kernel/branches/Kolibri-F/blkdev/disk.inc @@ -1291,15 +1291,15 @@ default_fs_functions: dd 0 ; no user functions endg -; This function is called from file_system_lfn. +; This function is called from syscall_file_system_lfn. ; This handler gets the control each time when fn 70 is called ; with unknown item of root subdirectory. ; in: esi = ebp -> path string -; out: if the handler processes path, it must not return in file_system_lfn, +; out: if the handler processes path, it must not return in syscall_file_system_lfn, ; but instead pop return address and return directly to the caller ; otherwise simply return dyndisk_handler: - push ebx edi ; save registers used in file_system_lfn + push ebx edi ; save registers used in syscall_file_system_lfn ; 1. Acquire the mutex. mov ecx, disk_list_mutex call mutex_lock @@ -1340,7 +1340,7 @@ dyndisk_handler: ; 3. Release the mutex. call mutex_unlock ; 4. Return normally. - pop edi ebx ; restore registers used in file_system_lfn + pop edi ebx ; restore registers used in syscall_file_system_lfn ret ; part of 2d: the name matches partially, but we must check that this is full ; equality. @@ -1383,7 +1383,7 @@ dyndisk_handler: jz @f mov esi, fs_dyndisk_next @@: ; Let the procedure from fs_lfn.inc do the job. - jmp file_system_lfn.maindir_noesi + jmp syscall_file_system_lfn.maindir_noesi .root: pop ecx edx @@ -1547,7 +1547,7 @@ dyndisk_handler: jmp @b ; This is a callback for enumerating partitions called from -; file_system_lfn.maindir in the case of inserted media. +; syscall_file_system_lfn.maindir in the case of inserted media. ; It just increments eax until DISK.NumPartitions reached and then ; cleans up. fs_dyndisk_next: @@ -1567,7 +1567,7 @@ fs_dyndisk_next: ret ; This is a callback for enumerating partitions called from -; file_system_lfn.maindir in the case of missing media. +; syscall_file_system_lfn.maindir in the case of missing media. ; In this case we create one pseudo-partition. fs_dyndisk_next_nomedia: cmp eax, 1 @@ -1584,7 +1584,7 @@ fs_dyndisk_next_nomedia: stc ret -; This function is called from file_system_lfn. +; This function is called from syscall_file_system_lfn. ; This handler is called when virtual root is enumerated ; and must return all items which can be handled by this. ; It is called several times, first time with eax=0 @@ -1592,7 +1592,7 @@ fs_dyndisk_next_nomedia: ; out: eax = 0 => no more items ; eax != 0 => buffer pointed to by edi contains name of item dyndisk_enum_root: - push edx ; save register used in file_system_lfn + push edx ; save register used in syscall_file_system_lfn mov ecx, disk_list_mutex ; it will be useful ; 1. If this is the first call, acquire the mutex and initialize. test eax, eax @@ -1615,11 +1615,11 @@ dyndisk_enum_root: jnz @b pop esi eax ; 5. Return with eax = item. - pop edx ; restore register used in file_system_lfn + pop edx ; restore register used in syscall_file_system_lfn ret .last: ; 6. Release the mutex and return with eax = 0. call mutex_unlock xor eax, eax - pop edx ; restore register used in file_system_lfn + pop edx ; restore register used in syscall_file_system_lfn ret diff --git a/kernel/branches/Kolibri-F/blkdev/rdsave.inc b/kernel/branches/Kolibri-F/blkdev/rdsave.inc index 722aa49efb..b7a722b283 100644 --- a/kernel/branches/Kolibri-F/blkdev/rdsave.inc +++ b/kernel/branches/Kolibri-F/blkdev/rdsave.inc @@ -27,7 +27,7 @@ sysfn_saveramdisk: ; 18.6 = SAVE FLOPPY IMAGE (HD version only) shl eax, 9 mov [ebx+12], eax pushad - call file_system_lfn_protected ;in ebx + call syscall_file_system_lfn_protected ;in ebx popad mov [esp+32], eax ret diff --git a/kernel/branches/Kolibri-F/boot/rdload.inc b/kernel/branches/Kolibri-F/boot/rdload.inc index fd3650efbb..bad0ba7158 100644 --- a/kernel/branches/Kolibri-F/boot/rdload.inc +++ b/kernel/branches/Kolibri-F/boot/rdload.inc @@ -97,7 +97,7 @@ endg read_image: mov ebx, read_image_fsinfo pushad - call file_system_lfn_protected + call syscall_file_system_lfn_protected popad ret diff --git a/kernel/branches/Kolibri-F/boot/shutdown.inc b/kernel/branches/Kolibri-F/boot/shutdown.inc index ff5388db14..bd7f46dfe8 100644 --- a/kernel/branches/Kolibri-F/boot/shutdown.inc +++ b/kernel/branches/Kolibri-F/boot/shutdown.inc @@ -69,7 +69,7 @@ yes_shutdown_param: ; load kernel.mnt to _CLEAN_ZONE mov ebx, kernel_file_load pushad - call file_system_lfn + call syscall_file_system_lfn popad @@: mov esi, OS_BASE+restart_code_start ; move kernel re-starter to 0x5000:0 diff --git a/kernel/branches/Kolibri-F/build.sh b/kernel/branches/Kolibri-F/build.sh index bdd23245b1..2cf03e6637 100755 --- a/kernel/branches/Kolibri-F/build.sh +++ b/kernel/branches/Kolibri-F/build.sh @@ -2,21 +2,11 @@ # Compile the KolibriOS kernel on Linux # 2017, The KolibriOS team -KERPACK=$HOME/kolibrios/programs/other/kpack/kerpack_linux/kerpack -KOLIBRI_IMG=$HOME/nightly/kolibri.img +KERPACK=./tools/kerpack +KOLIBRI_IMG=kolibri.img -replace=0; # Replace kernel in the image file? echo 'lang fix en' > lang.inc fasm -m 65536 bootbios.asm bootbios.bin -fasm -m 65536 kernel.asm kernel.mnt +fasm -m 65536 -s kernel.fas kernel.asm kernel.mnt $KERPACK kernel.mnt kernel.mnt - -[[ $replace -eq 1 ]] && { - mntpt=$(mktemp -d) - - sudo mount -o loop $KOLIBRI_IMG $mntpt - sudo mount -o remount,rw $mntpt - sudo cp kernel.mnt ${mntpt}/KERNEL.MNT - sudo umount $mntpt - rmdir $mntpt -} +mcopy -D o -i $KOLIBRI_IMG kernel.mnt ::kernel.mnt \ No newline at end of file diff --git a/kernel/branches/Kolibri-F/bus/pci/pci32.inc b/kernel/branches/Kolibri-F/bus/pci/pci32.inc index 132cc92b20..a20929ebba 100644 --- a/kernel/branches/Kolibri-F/bus/pci/pci32.inc +++ b/kernel/branches/Kolibri-F/bus/pci/pci32.inc @@ -56,7 +56,7 @@ endg align 4 -pci_api: +syscall_pci_api: ;cross mov eax, ebx @@ -499,7 +499,7 @@ pci_emu_dat: endg ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= align 4 -sys_pcibios: +syscall_pcibios: cmp [pci_access_enabled], 1 jne .unsupported_func cmp [pci_bios_entry], 0 diff --git a/kernel/branches/Kolibri-F/bus/usb/init.inc b/kernel/branches/Kolibri-F/bus/usb/init.inc index fa438437a1..b1ddf80126 100644 --- a/kernel/branches/Kolibri-F/bus/usb/init.inc +++ b/kernel/branches/Kolibri-F/bus/usb/init.inc @@ -205,7 +205,7 @@ proc usb_thread_proc ; If failed, set [usb_event] to -1 and terminate myself. dbgstr 'cannot create event for USB thread' or [usb_event], -1 - jmp sys_end + jmp syscall_end @@: mov [usb_event], eax push -1 ; initial timeout: infinite diff --git a/kernel/branches/Kolibri-F/core/clipboard.inc b/kernel/branches/Kolibri-F/core/clipboard.inc index 99f1fa4aca..da46c93233 100644 --- a/kernel/branches/Kolibri-F/core/clipboard.inc +++ b/kernel/branches/Kolibri-F/core/clipboard.inc @@ -10,7 +10,7 @@ $Revision$ ;------------------------------------------------------------------------------ align 4 -sys_clipboard: +syscall_clipboard: xor eax, eax dec eax ; check availability of main list diff --git a/kernel/branches/Kolibri-F/core/debug.inc b/kernel/branches/Kolibri-F/core/debug.inc index 35a1345fca..219d366355 100644 --- a/kernel/branches/Kolibri-F/core/debug.inc +++ b/kernel/branches/Kolibri-F/core/debug.inc @@ -9,15 +9,15 @@ $Revision$ ; diamond, 2006 -sys_debug_services: +syscall_debug_services: cmp ebx, 9 ja @f - jmp dword [sys_debug_services_table+ebx*4] + jmp dword [syscall_debug_service_services_table+ebx*4] @@: ret iglobal align 4 -sys_debug_services_table: +syscall_debug_service_services_table: dd debug_set_event_data dd debug_getcontext dd debug_setcontext diff --git a/kernel/branches/Kolibri-F/core/dll.inc b/kernel/branches/Kolibri-F/core/dll.inc index d273727b06..8f1f62f495 100644 --- a/kernel/branches/Kolibri-F/core/dll.inc +++ b/kernel/branches/Kolibri-F/core/dll.inc @@ -388,7 +388,7 @@ proc get_fileinfo stdcall, file_name:dword, info:dword pushad cld call protect_from_terminate - call file_system_lfn + call syscall_file_system_lfn call unprotect_from_terminate popad ret @@ -423,7 +423,7 @@ proc read_file stdcall,file_name:dword, buffer:dword, off:dword,\ pushad lea ebx, [cmd] - call file_system_lfn_protected + call syscall_file_system_lfn_protected popad ret endp diff --git a/kernel/branches/Kolibri-F/core/exports.inc b/kernel/branches/Kolibri-F/core/exports.inc index a2d14c2d15..41e4f00aa8 100644 --- a/kernel/branches/Kolibri-F/core/exports.inc +++ b/kernel/branches/Kolibri-F/core/exports.inc @@ -75,11 +75,11 @@ __exports: user_free, 'UserFree', \ ; stdcall unmap_pages, 'UnmapPages', \ ; eax, ecx sys_msg_board_str, 'SysMsgBoardStr', \ - sys_msg_board, 'SysMsgBoard', \ + syscall_msg_board, 'SysMsgBoard', \ get_clock_ns, 'GetClockNs', \ ;retval edx:eax 64-bit value get_timer_ticks, 'GetTimerTicks', \ get_stack_base, 'GetStackBase', \ - delay_hs, 'Delay', \ ; ebx + sys_delay_hs, 'Delay', \ ; ebx set_mouse_data, 'SetMouseData', \ ; set_keyboard_data, 'SetKeyboardData', \ ; gcc fastcall register_keyboard, 'RegKeyboard', \ diff --git a/kernel/branches/Kolibri-F/core/memory.inc b/kernel/branches/Kolibri-F/core/memory.inc index fa42757764..86a6a95011 100644 --- a/kernel/branches/Kolibri-F/core/memory.inc +++ b/kernel/branches/Kolibri-F/core/memory.inc @@ -906,7 +906,7 @@ proc safe_map_page stdcall, slot:dword, req_access:dword, ofs:dword ret endp -sys_IPC: +syscall_IPC: ;input: ; ebx=1 - set ipc buffer area ; ecx=address of buffer @@ -1098,15 +1098,15 @@ sysfn_meminfo: ret align 4 -f68: +syscall_some_intrenal_services: cmp ebx, 4 jbe sys_sheduler cmp ebx, 11 - jb undefined_syscall + jb syscall_undefined cmp ebx, 29 - ja undefined_syscall + ja syscall_undefined xor eax, eax - jmp dword [f68call+ebx*4-11*4] + jmp dword [syscall_some_intrenal_servicescall+ebx*4-11*4] .11: call init_heap mov [esp+SYSCALL_STACK._eax], eax @@ -1230,27 +1230,27 @@ f68: ret align 4 -f68call: ; keep this table closer to main code +syscall_some_intrenal_servicescall: ; keep this table closer to main code - dd f68.11 ; init_heap - dd f68.12 ; user_alloc - dd f68.13 ; user_free - dd f68.14 ; get_event_ex - dd f68.fail ; moved to f68.24 - dd f68.16 ; get_service - dd f68.17 ; call_service - dd f68.18 ; loadLibUnicode - dd f68.19 ; load_dll - dd f68.20 ; user_realloc - dd f68.21 ; load_driver - dd f68.22 ; shmem_open - dd f68.23 ; shmem_close - dd f68.24 ; set exception handler - dd f68.25 ; unmask exception - dd f68.26 ; user_unmap - dd f68.27 ; load_file_umode - dd f68.28 ; loadFileUnicode - dd f68.29 ; user_ring + dd syscall_some_intrenal_services.11 ; init_heap + dd syscall_some_intrenal_services.12 ; user_alloc + dd syscall_some_intrenal_services.13 ; user_free + dd syscall_some_intrenal_services.14 ; get_event_ex + dd syscall_some_intrenal_services.fail ; moved to syscall_some_intrenal_services.24 + dd syscall_some_intrenal_services.16 ; get_service + dd syscall_some_intrenal_services.17 ; call_service + dd syscall_some_intrenal_services.18 ; loadLibUnicode + dd syscall_some_intrenal_services.19 ; load_dll + dd syscall_some_intrenal_services.20 ; user_realloc + dd syscall_some_intrenal_services.21 ; load_driver + dd syscall_some_intrenal_services.22 ; shmem_open + dd syscall_some_intrenal_services.23 ; shmem_close + dd syscall_some_intrenal_services.24 ; set exception handler + dd syscall_some_intrenal_services.25 ; unmask exception + dd syscall_some_intrenal_services.26 ; user_unmap + dd syscall_some_intrenal_services.27 ; load_file_umode + dd syscall_some_intrenal_services.28 ; loadFileUnicode + dd syscall_some_intrenal_services.29 ; user_ring align 4 proc load_pe_driver stdcall, file:dword, cmdline:dword diff --git a/kernel/branches/Kolibri-F/core/sys32.inc b/kernel/branches/Kolibri-F/core/sys32.inc index 1309e9eca8..c6edd9e0df 100644 --- a/kernel/branches/Kolibri-F/core/sys32.inc +++ b/kernel/branches/Kolibri-F/core/sys32.inc @@ -367,7 +367,7 @@ unlock_application_table: ; sysfn 64 implementation align 4 -sys_resize_app_memory: +syscall_resize_app_memory: ; in: eax = 64 - function number ; ebx = 1 - number of its only subfunction ; ecx = new amount of memory @@ -727,7 +727,7 @@ destroy_thread: pushad xchg eax, ecx mov ebx, 2 - call sys_system + call syscall_system popad @@: inc eax @@ -813,7 +813,7 @@ proc unprotect_from_terminate lock dec [edx+APPDATA.terminate_protection] ; If the result of decrement is zero, somebody has requested termination, ; but at that moment we were inside a critical area; terminate now. - jz sys_end + jz syscall_end ; Otherwise, return to the caller. ret endp diff --git a/kernel/branches/Kolibri-F/core/syscall.inc b/kernel/branches/Kolibri-F/core/syscall.inc index d78bd2516b..4f0f4adc07 100644 --- a/kernel/branches/Kolibri-F/core/syscall.inc +++ b/kernel/branches/Kolibri-F/core/syscall.inc @@ -98,89 +98,89 @@ iglobal align 4 servetable2: - dd syscall_draw_window ; 0-DrawWindow - dd syscall_setpixel ; 1-SetPixel - dd sys_getkey ; 2-GetKey - dd sys_clock ; 3-GetTime - dd syscall_writetext ; 4-WriteText - dd delay_hs_unprotected ; 5-DelayHs - dd undefined_syscall ; 6-deprecated OpenRamdiskFile - dd syscall_putimage ; 7-PutImage - dd syscall_button ; 8-DefineButton - dd sys_cpuusage ; 9-GetProcessInfo - dd sys_waitforevent ; 10-WaitForEvent - dd sys_getevent ; 11-CheckForEvent - dd sys_redrawstat ; 12-BeginDraw and EndDraw - dd syscall_drawrect ; 13-DrawRect - dd syscall_getscreensize ; 14-GetScreenSize - dd sys_background ; 15-bgr - dd sys_cachetodiskette ; 16-FlushFloppyCache - dd sys_getbutton ; 17-GetButton - dd sys_system ; 18-System Services - dd paleholder ; 19-reserved - dd sys_midi ; 20-ResetMidi and OutputMidi - dd sys_setup ; 21-SetMidiBase,SetKeymap,SetShiftKeymap,. - dd sys_settime ; 22-setting date,time,clock and alarm-clock - dd sys_wait_event_timeout ; 23-TimeOutWaitForEvent - dd syscall_cdaudio ; 24-PlayCdTrack,StopCd and GetCdPlaylist - dd syscall_putarea_backgr ; 25-Put Area to background - dd sys_getsetup ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,. - dd undefined_syscall ; 27-reserved - dd undefined_syscall ; 28-reserved - dd sys_date ; 29-GetDate - dd sys_current_directory ; 30-Get/SetCurrentDirectory - dd undefined_syscall ; 31-reserved - dd undefined_syscall ; 32-reserved - dd undefined_syscall ; 33-reserved - dd syscall_getpixel_WinMap ; 34-GetPixel WinMap - dd syscall_getpixel ; 35-GetPixel - dd syscall_getarea ; 36-GetArea - dd readmousepos ; 37-GetMousePosition_ScreenRelative,. - dd syscall_drawline ; 38-DrawLine - dd sys_getbackground ; 39-GetBackgroundSize,ReadBgrData,. - dd set_app_param ; 40-WantEvents - dd undefined_syscall ; 41- deprecated GetIrqOwner - dd undefined_syscall ; 42- deprecated ReadIrqData - dd sys_outport ; 43-SendDeviceData - dd undefined_syscall ; 44- deprecated ProgramIrqs - dd undefined_syscall ; 45- deprecated ReserveIrq and FreeIrq - dd syscall_reserveportarea ; 46-ReservePortArea and FreePortArea - dd display_number ; 47-WriteNum - dd syscall_display_settings ; 48-SetRedrawType and SetButtonType - dd sys_apm ; 49-Advanced Power Management (APM) - dd syscall_set_window_shape ; 50-Window shape & scale - dd syscall_threads ; 51-Threads - dd undefined_syscall ; 52- deprecated Stack driver status - dd undefined_syscall ; 53- deprecated Socket interface - dd sys_clipboard ; 54-Custom clipboard - dd sound_interface ; 55-Sound interface - dd undefined_syscall ; 56-reserved - dd sys_pcibios ; 57-PCI BIOS32 - dd undefined_syscall ; 58-deprecated Common file system interface - dd undefined_syscall ; 59-reserved - dd sys_IPC ; 60-Inter Process Communication - dd sys_gs ; 61-Direct graphics access - dd pci_api ; 62-PCI functions - dd sys_msg_board ; 63-System message board - dd sys_resize_app_memory ; 64-Resize application memory usage - dd sys_putimage_palette ; 65-PutImagePalette - dd sys_process_def ; 66-Process definitions - keyboard - dd syscall_move_window ; 67-Window move or resize - dd f68 ; 68-Some internal services - dd sys_debug_services ; 69-Debug - dd file_system_lfn ; 70-Common file system interface, version 2 - dd syscall_window_settings ; 71-Window settings - dd sys_sendwindowmsg ; 72-Send window message - dd blit_32 ; 73-blitter; - dd sys_network ; 74-reserved for new stack - dd sys_socket ; 75-reserved for new stack - dd sys_protocols ; 76-reserved for new stack - dd sys_posix ; posix support - dd undefined_syscall ; 78-free - dd undefined_syscall ; 79-free - dd fileSystemUnicode ; 80-File system interface for different encodings + dd syscall_draw_window ; 0 - define and draw the window; + dd syscall_setpixel ; 1 - put pixel in the window; + dd syscall_getkey ; 2 - get the code of the pressed key; + dd syscall_clock ; 3 - get system time; + dd syscall_writetext ; 4 - draw text string; + dd syscall_delay_hs_unprotected ; 5 - delay; + dd syscall_undefined ; 6 - system call undefined; + dd syscall_putimage ; 7 - draw image in the window; + dd syscall_button ; 8 - define/delete the button; + dd syscall_thread_info ; 9 - information on execution thread; + dd syscall_waitforevent ; 10 - wait for event; + dd syscall_checkforevent ; 11 - check for event, no wait; + dd syscall_redrawstat ; 12 - begin/end window redraw; + dd syscall_drawrect ; 13 - draw a rectangle in the window; + dd syscall_getscreensize ; 14 - get screen size; + dd syscall_background ; 15 - working with the background; + dd syscall_cachetodiskette ; 16 - save ramdisk on a floppy; + dd syscall_getbutton ; 17 - get the identifier of the pressed button; + dd syscall_system ; 18 - system services; + dd syscall_undefined ; 19 - system call undefined; + dd syscall_midi ; 20 - reset MIDI and output MIDI; + dd syscall_setup ; 21 - setting system parameters; + dd syscall_settime ; 22 - setting date, time, clock and alarm-clock; + dd syscall_wait_event_timeout ; 23 - wait for event with timeout; + dd syscall_cdaudio ; 24 - work with a CD player; + dd syscall_putarea_backgr ; 25 - put area to background; + dd syscall_getsetup ; 26 - get system parameters; + dd syscall_undefined ; 27 - system call undefined; + dd syscall_undefined ; 28 - system call undefined; + dd syscall_date ; 29 - get date; + dd syscall_current_directory ; 30 - get/set current directory; + dd syscall_undefined ; 31 - system call undefined; + dd syscall_undefined ; 32 - system call undefined; + dd syscall_undefined ; 33 - system call undefined; + dd syscall_getpixel_WinMap ; 34 - find out who the screen point belongs to; + dd syscall_getpixel ; 35 - read the color of the pixel on the screen; + dd syscall_getarea ; 36 - read the screen area; + dd syscall_get_mouse_pos ; 37 - work with the mouse; + dd syscall_drawline ; 38 - draw a line; + dd syscall_getbackground ; 39 - get background info; + dd syscall_set_eventmask ; 40 - set event mask; + dd syscall_undefined ; 41 - system call undefined; + dd syscall_undefined ; 42 - system call undefined; + dd syscall_outport ; 43 - input / output to the port; + dd syscall_undefined ; 44 - system call undefined; + dd syscall_undefined ; 45 - system call undefined; + dd syscall_reserveportarea ; 46 - reserve port area and free port area; + dd syscall_putnumber ; 47 - print a number to the window; + dd syscall_window_styles ; 48 - window display styles; + dd syscall_apm ; 49 - Advanced Power Management (APM); + dd syscall_set_window_shape ; 50 - window shape & scale; + dd syscall_threads ; 51 - threads; + dd syscall_undefined ; 52 - system call undefined; + dd syscall_undefined ; 53 - system call undefined; + dd syscall_clipboard ; 54 - working with the clipboard; + dd syscall_sound_interface ; 55 - sound interface; + dd syscall_undefined ; 56 - system call undefined; + dd syscall_pcibios ; 57 - PCI BIOS32; + dd syscall_undefined ; 58 - system call undefined; + dd syscall_undefined ; 59 - system call undefined; + dd syscall_IPC ; 60 - Inter Process Communication(IPC); + dd syscall_dga ; 61 - direct graphics access; + dd syscall_pci_api ; 62 - PCI functions; + dd syscall_msg_board ; 63 - system message board; + dd syscall_resize_app_memory ; 64 - resize application memory usage; + dd syscall_putimage_palette ; 65 - display an image with a palette in the window; + dd syscall_process_def ; 66 - process definitions - keyboard; + dd syscall_move_window ; 67 - window move or resize; + dd syscall_some_intrenal_services ; 68 - some internal services; + dd syscall_debug_services ; 69 - debug services; + dd syscall_file_system_lfn ; 70 - file system interface; + dd syscall_window_settings ; 71 - window settings; + dd syscall_send_window_msg ; 72 - send window message; + dd syscall_blit_32 ; 73 - graphic blitter; + dd syscall_network ; 74 - work with network devices; + dd syscall_socket ; 75 - work with network sockets; + dd syscall_protocols ; 76 - network options and statistics; + dd syscall_posix_subsystem ; 77 - POSIX subsystem; + dd syscall_undefined ; 78 - system call undefined; + dd syscall_undefined ; 79 - system call undefined; + dd syscall_fs_diff_encodings ; 80 - file system interface for different encodings; - times 255 - ( ($-servetable2) /4 ) dd undefined_syscall - dd sys_end ; -1-end application + times 255 - ( ($-servetable2) /4 ) dd syscall_undefined + dd syscall_end ; -1-end application endg diff --git a/kernel/branches/Kolibri-F/core/taskman.inc b/kernel/branches/Kolibri-F/core/taskman.inc index 7d9385e41c..fd375a41f2 100644 --- a/kernel/branches/Kolibri-F/core/taskman.inc +++ b/kernel/branches/Kolibri-F/core/taskman.inc @@ -873,8 +873,8 @@ common_app_entry: mov ebx, dll_error_msg mov ebp, notifyapp call fs_execute_from_sysdir_param -; Terminate process (TODO: Need jump to .cleanup after sys_end ?) - call sys_end +; Terminate process (TODO: Need jump to .cleanup after syscall_end ?) + call syscall_end @@: ; Find APP_STARTUP_THUNK in DLL.OBJ diff --git a/kernel/branches/Kolibri-F/core/v86.inc b/kernel/branches/Kolibri-F/core/v86.inc index 50da4cdd04..97cf3bee3b 100644 --- a/kernel/branches/Kolibri-F/core/v86.inc +++ b/kernel/branches/Kolibri-F/core/v86.inc @@ -685,7 +685,7 @@ v86_exc_c: if DEBUG_SHOW_IO mov edx, ebx mov ebx, 200 - call delay_hs + call sys_delay_hs mov esi, [esp+v86_regs.size+10h+4] mov eax, [esi+V86_machine.iopm] @@: diff --git a/kernel/branches/Kolibri-F/fdo.inc b/kernel/branches/Kolibri-F/fdo.inc index 79068df888..9c0edc3104 100644 --- a/kernel/branches/Kolibri-F/fdo.inc +++ b/kernel/branches/Kolibri-F/fdo.inc @@ -23,7 +23,7 @@ $Revision$ _esp equ esp macro put_board { - call sys_msg_board + call syscall_msg_board } macro debug_func name { diff --git a/kernel/branches/Kolibri-F/fs/fs_lfn.inc b/kernel/branches/Kolibri-F/fs/fs_lfn.inc index be38a520d0..bb5be64324 100644 --- a/kernel/branches/Kolibri-F/fs/fs_lfn.inc +++ b/kernel/branches/Kolibri-F/fs/fs_lfn.inc @@ -90,7 +90,7 @@ image_of_ebx EQU esp+20 ; ret ; endp -; syscall_fileSystemUnicode: ; with user pointer correctness checking +; syscall_syscall_fs_diff_encodings: ; with user pointer correctness checking ; ; in: ebx -> f.80 parameter structure ; stdcall file_system_is_operation_safe, ebx ; jnz @f @@ -99,13 +99,13 @@ image_of_ebx EQU esp+20 ; mov dword [image_of_eax], ERROR_MEMORY_POINTER ; ret ; @@: -; jmp fileSystemUnicode +; jmp syscall_fs_diff_encodings ; temporarily commented out cause acpi driver (drivers/devman) uses sysfn70 via 0x40 ; so because drivers it kernel space, pointer checking fails ; TODO solution: add filesystem functions without pointer checking to kernel exports ; and make the driver use them, not int 0x40 -; syscall_fileSystemUnicode commented out for the same reason +; syscall_syscall_fs_diff_encodings commented out for the same reason ; syscall_file_system_lfn: ; with user pointer correctness checking ; ; in: ebx -> f.70 parameter structure ; stdcall file_system_is_operation_safe, ebx @@ -115,28 +115,28 @@ image_of_ebx EQU esp+20 ; mov dword [image_of_eax], ERROR_MEMORY_POINTER ; ret ; @@: -; jmp file_system_lfn +; jmp syscall_file_system_lfn ; System function 70 -file_system_lfn_protected: +syscall_file_system_lfn_protected: pushad call protect_from_terminate - call file_system_lfn + call syscall_file_system_lfn call unprotect_from_terminate popad mov [image_of_eax], eax mov [image_of_ebx], ebx ret -fileSystemUnicode: +syscall_fs_diff_encodings: ; in: ebx -> f.80 parameter structure mov edi, [ebx+20] mov esi, [ebx+24] jmp @f -file_system_lfn: +syscall_file_system_lfn: ; in: ebx -> f.70 parameter structure xor edi, edi lea esi, [ebx+20] @@ -512,7 +512,7 @@ uglobal addDirSeal db ? endg -sys_current_directory: ; sysfunction 30 +syscall_current_directory: ; sysfunction 30 mov eax, [current_slot] mov edi, [eax+APPDATA.cur_dir] xor eax, eax diff --git a/kernel/branches/Kolibri-F/gui/event.inc b/kernel/branches/Kolibri-F/gui/event.inc index 75e032732c..c8026f2981 100644 --- a/kernel/branches/Kolibri-F/gui/event.inc +++ b/kernel/branches/Kolibri-F/gui/event.inc @@ -326,7 +326,7 @@ wait_event_timeout: ret ;----------------------------------------------------------------------------- align 4 -get_event_ex: ;; f68:14 +get_event_ex: ;; syscall_some_intrenal_services:14 ;info: ; Waiting for any event in the EventList of the current slot ; Code event data - copied to application memory (indirectly by edi) @@ -431,7 +431,7 @@ align 4 ret ;----------------------------------------------------------------------------- align 4 -sys_sendwindowmsg: ;; f72 +syscall_send_window_msg: ;; f72 dec ebx jnz .ret ;subfunction==1 ? pushfd @@ -475,7 +475,7 @@ align 4 ret ;----------------------------------------------------------------------------- align 4 -sys_getevent: ;; f11 +syscall_checkforevent: ;; f11 mov ebx, [current_slot] ;now this is a question, what where to put...... pushfd ; this is a consequence of the general concept: let the test function have cli ; the right to hope to disable interrupts, as when called from shed @@ -485,11 +485,11 @@ sys_getevent: ;; f11 ret ;----------------------------------------------------------------------------- align 4 -sys_waitforevent: ;; f10 +syscall_waitforevent: ;; f10 or ebx, -1; infinite timeout ;-------------------------------------- align 4 -sys_wait_event_timeout: ;; f23 +syscall_wait_event_timeout: ;; f23 call unprotect_from_terminate mov edx, get_event_for_app; wait_test call Wait_events_ex ; ebx - timeout diff --git a/kernel/branches/Kolibri-F/gui/window.inc b/kernel/branches/Kolibri-F/gui/window.inc index 6b1e7e19b0..4ea86ebe6e 100644 --- a/kernel/branches/Kolibri-F/gui/window.inc +++ b/kernel/branches/Kolibri-F/gui/window.inc @@ -69,7 +69,7 @@ syscall_draw_window: ;///// system function 0 ///////////////////////////////// .exit: ret ;------------------------------------------------------------------------------ -syscall_display_settings: ;///// system function 48 /////////////////////////// +syscall_window_styles: ;///// system function 48 /////////////////////////// ;------------------------------------------------------------------------------ cmp ebx, 13 ja .ret @@ -1008,8 +1008,8 @@ align 4 jz @f push edx - call syscall_display_settings.calculateScreen - call syscall_display_settings.redrawScreen + call syscall_window_styles.calculateScreen + call syscall_window_styles.redrawScreen pop edx ;-------------------------------------- align 4 diff --git a/kernel/branches/Kolibri-F/hid/set_dtc.inc b/kernel/branches/Kolibri-F/hid/set_dtc.inc index 3c2d527cd3..b25c31c647 100644 --- a/kernel/branches/Kolibri-F/hid/set_dtc.inc +++ b/kernel/branches/Kolibri-F/hid/set_dtc.inc @@ -16,7 +16,7 @@ $Revision$ ; ebx =2 - set day of week ecx- 1-7 ; ebx =3 - set alarm-clock ecx - 00SSMMHH ; out: 0 -Ok 1 -wrong format 2 -battery low -sys_settime: +syscall_settime: cli mov al, 0x0d diff --git a/kernel/branches/Kolibri-F/kernel.asm b/kernel/branches/Kolibri-F/kernel.asm index cab36f16b7..f299750780 100644 --- a/kernel/branches/Kolibri-F/kernel.asm +++ b/kernel/branches/Kolibri-F/kernel.asm @@ -1357,7 +1357,7 @@ set_variables: align 4 ;input eax=43,bl-byte of output, ecx - number of port -sys_outport: +syscall_outport: mov edi, ecx ; separate flag for read / write and ecx, 65535 @@ -1414,7 +1414,7 @@ sys_outport: mov [esp+20], eax ret -display_number: +syscall_putnumber: ; add check pointers test bl, bl jz @f @@ -1624,7 +1624,7 @@ midi_base dw 0 endg ;----------------------------------------------------------------------------- align 4 -sys_setup: +syscall_setup: ; 1 = roland mpu midi base , base io address ; 2 = keyboard 1, base kaybap 2, shift keymap, 9 country 1eng 2fi 3ger 4rus ; 3 = not used @@ -1731,7 +1731,7 @@ sys_setup: ret ;----------------------------------------------------------------------------- align 4 -sys_getsetup: +syscall_getsetup: ; 1 = roland mpu midi base , base io address ; 2 = keyboard 1, base kaybap 2, shift keymap, 9 country 1eng 2fi 3ger 4rus ; 3 = not used @@ -1867,7 +1867,7 @@ get_timer_ticks: mov eax, [timer_ticks] ret ;----------------------------------------------------------------------------- -readmousepos: +syscall_get_mouse_pos: ; eax=0 screen relative ; eax=1 window relative ; eax=2 buttons pressed @@ -2021,7 +2021,7 @@ put_mpu_out: align 4 -sys_midi: +syscall_midi: cmp [mididp], 0 jnz sm0 mov [esp+36], dword 1 @@ -2079,7 +2079,7 @@ detect_devices: ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ret -sys_end: +syscall_end: ;-------------------------------------- cmp [_display.select_cursor], 0 je @f @@ -2174,7 +2174,7 @@ sys_system_table: sysfn_num = ($ - sys_system_table)/4 endg ;------------------------------------------------------------------------------ -sys_system: +syscall_system: dec ebx cmp ebx, sysfn_num jae @f @@ -2303,8 +2303,8 @@ sysfn_deactivate: ; 18.1 = DEACTIVATE WINDOW movzx esi, word [WIN_STACK + ecx * 2] lea esi, [WIN_POS + esi * 2] call window._.window_deactivate - call syscall_display_settings.calculateScreen - call syscall_display_settings.redrawScreen + call syscall_window_styles.calculateScreen + call syscall_window_styles.redrawScreen .nowindowdeactivate: ret ;------------------------------------------------------------------------------ @@ -2672,7 +2672,7 @@ version_end: endg ;------------------------------------------------------------------------------ align 4 -sys_cachetodiskette: +syscall_cachetodiskette: cmp ebx, 1 jb .no_floppy_save cmp ebx, 2 @@ -2692,7 +2692,7 @@ bgrlock db 0 endg ;------------------------------------------------------------------------------ align 4 -sys_background: +syscall_background: cmp ebx, 1 ; BACKGROUND SIZE jnz nosb1 test ecx, ecx @@ -3045,7 +3045,7 @@ force_redraw_background: ret ;------------------------------------------------------------------------------ align 4 -sys_getbackground: +syscall_getbackground: ; cmp eax,1 ; SIZE dec ebx jnz nogb1 @@ -3100,7 +3100,7 @@ nogb4: ret ;------------------------------------------------------------------------------ align 4 -sys_getkey: +syscall_getkey: mov [esp + 32], dword 1 ; test main buffer mov ebx, [current_slot_idx] ; TOP OF WINDOW STACK @@ -3157,7 +3157,7 @@ align 4 jmp .ret_eax ;------------------------------------------------------------------------------ align 4 -sys_getbutton: +syscall_getbutton: mov ebx, [current_slot_idx] ; TOP OF WINDOW STACK mov [esp + 32], dword 1 movzx ecx, word [WIN_STACK + ebx * 2] @@ -3177,7 +3177,7 @@ align 4 ret ;------------------------------------------------------------------------------ align 4 -sys_cpuusage: +syscall_thread_info: ; RETURN: ; @@ -3287,7 +3287,7 @@ sys_cpuusage: ret align 4 -sys_clock: +syscall_clock: cli ; Mikhail Lisovin xx Jan 2005 @@: @@ -3325,7 +3325,7 @@ sys_clock: align 4 -sys_date: +syscall_date: cli @@: @@ -3360,7 +3360,7 @@ sys_date: ; redraw status -sys_redrawstat: +syscall_redrawstat: cmp ebx, 1 jne no_widgets_away ; buttons away @@ -3776,7 +3776,7 @@ redrawscreen: push eax ;;; mov ebx,2 -;;; call delay_hs +;;; call sys_delay_hs ;mov ecx,0 ; redraw flags for apps xor ecx, ecx @@ -4048,7 +4048,7 @@ delay_ms: ; delay in 1/1000 sec ret ;----------------------------------------------------------------------------- align 4 -set_app_param: +syscall_set_eventmask: mov edi, [TASK_BASE] mov eax, ebx xchg eax, [edi + TASKDATA.event_mask] ; set new event mask @@ -4057,16 +4057,16 @@ set_app_param: ;----------------------------------------------------------------------------- ; this is for syscall -proc delay_hs_unprotected +proc syscall_delay_hs_unprotected call unprotect_from_terminate - call delay_hs + call sys_delay_hs call protect_from_terminate ret endp if 1 align 4 -delay_hs: ; delay in 1/100 secs +sys_delay_hs: ; delay in 1/100 secs ; ebx = delay time pushad @@ -4093,7 +4093,7 @@ delay_hs: ; delay in 1/100 secs else align 4 -delay_hs: ; delay in 1/100 secs +sys_delay_hs: ; delay in 1/100 secs ; ebx = delay time push ecx push edx @@ -4437,7 +4437,7 @@ sys_putimage_bpp: ; jmp [draw_pointer] ;----------------------------------------------------------------------------- align 4 -sys_putimage_palette: +syscall_putimage_palette: ; ebx = pointer to image ; ecx = [xsize]*65536 + [ysize] ; edx = [xstart]*65536 + [ystart] @@ -4842,7 +4842,7 @@ sys_msg_board_str: je @f mov ebx, 1 movzx ecx, byte [esi] - call sys_msg_board + call syscall_msg_board inc esi jmp @b @@: @@ -4884,7 +4884,7 @@ sys_msg_board_dword: mov cl, al xor ebx, ebx inc ebx - call sys_msg_board + call syscall_msg_board pop eax pop ecx loop @b @@ -4902,7 +4902,7 @@ iglobal msg_board_pos dd 42*6*65536+10 ; for printing debug output on the screen endg -sys_msg_board: +syscall_msg_board: ; ebx=1 -> write, cl = byte to write ; ebx=2 -> read, ecx=0 -> no data, ecx=1 -> data in al push eax ebx @@ -5000,17 +5000,17 @@ end if iglobal align 4 f66call: - dd sys_process_def.1 ; 1 = set keyboard mode - dd sys_process_def.2 ; 2 = get keyboard mode - dd sys_process_def.3 ; 3 = get keyboard ctrl, alt, shift - dd sys_process_def.4 ; 4 = set system-wide hotkey - dd sys_process_def.5 ; 5 = delete installed hotkey - dd sys_process_def.6 ; 6 = disable input, work only hotkeys - dd sys_process_def.7 ; 7 = enable input, opposition to f.66.6 + dd syscall_process_def.1 ; 1 = set keyboard mode + dd syscall_process_def.2 ; 2 = get keyboard mode + dd syscall_process_def.3 ; 3 = get keyboard ctrl, alt, shift + dd syscall_process_def.4 ; 4 = set system-wide hotkey + dd syscall_process_def.5 ; 5 = delete installed hotkey + dd syscall_process_def.6 ; 6 = disable input, work only hotkeys + dd syscall_process_def.7 ; 7 = enable input, opposition to f.66.6 endg ;----------------------------------------------------------------------------- align 4 -sys_process_def: +syscall_process_def: dec ebx cmp ebx, 7 jae .not_support ;if >=8 then or eax,-1 @@ -5150,15 +5150,15 @@ endg iglobal align 4 f61call: - dd sys_gs.1 ; resolution - dd sys_gs.2 ; bits per pixel - dd sys_gs.3 ; bytes per scanline + dd syscall_dga.1 ; resolution + dd syscall_dga.2 ; bits per pixel + dd syscall_dga.3 ; bytes per scanline endg align 4 -sys_gs: ; direct screen access +syscall_dga: ; direct screen access dec ebx cmp ebx, 2 ja .not_support @@ -5691,7 +5691,7 @@ apm_vf dd 0 endg align 4 -sys_apm: +syscall_apm: xor eax, eax cmp word [apm_vf], ax ; Check APM BIOS enable jne @f @@ -5743,7 +5743,7 @@ sys_apm: ; ----------------------------------------- align 4 -undefined_syscall: ; Undefined system call +syscall_undefined: ; Undefined system call mov [esp + 32], dword -1 ret diff --git a/kernel/branches/Kolibri-F/network/socket.inc b/kernel/branches/Kolibri-F/network/socket.inc index 7cd567b420..24438e8d84 100644 --- a/kernel/branches/Kolibri-F/network/socket.inc +++ b/kernel/branches/Kolibri-F/network/socket.inc @@ -245,7 +245,7 @@ macro socket_init { ; ; ;-----------------------------------------------------------------; align 4 -sys_socket: +syscall_socket: mov dword[esp+20], 0 ; Set error code to 0 diff --git a/kernel/branches/Kolibri-F/network/stack.inc b/kernel/branches/Kolibri-F/network/stack.inc index 4e7f99a43c..deeb4967ee 100644 --- a/kernel/branches/Kolibri-F/network/stack.inc +++ b/kernel/branches/Kolibri-F/network/stack.inc @@ -720,7 +720,7 @@ checksum_2: ; ; ;-----------------------------------------------------------------; align 4 -sys_network: +syscall_network: cmp bl, 255 jne @f @@ -847,7 +847,7 @@ sys_network: ; ; ;-----------------------------------------------------------------; align 4 -sys_protocols: +syscall_protocols: cmp bh, NET_DEVICES_MAX ; Check if device number exists jae .doesnt_exist diff --git a/kernel/branches/Kolibri-F/posix/posix.inc b/kernel/branches/Kolibri-F/posix/posix.inc index a1e494d983..1b53edc139 100644 --- a/kernel/branches/Kolibri-F/posix/posix.inc +++ b/kernel/branches/Kolibri-F/posix/posix.inc @@ -47,17 +47,17 @@ sys_posix_call: dd sys_futex ;5 reserved dd sys_futex ;6 reserved dd sys_futex ;7 reserved - dd sys_posix.fail ;8 sys_open - dd sys_posix.fail ;9 sys_close + dd syscall_posix_subsystem.fail ;8 sys_open + dd syscall_posix_subsystem.fail ;9 sys_close dd sys_read ;10 read() dd sys_write ;11 write() - dd sys_posix.fail ;12 sys_dup3 + dd syscall_posix_subsystem.fail ;12 sys_dup3 dd sys_pipe2 ;13 .end: endg align 4 -sys_posix: +syscall_posix_subsystem: cmp ebx, (sys_posix_call.end-sys_posix_call)/4 jae .fail diff --git a/kernel/branches/Kolibri-F/sound/playnote.inc b/kernel/branches/Kolibri-F/sound/playnote.inc index cbcd344d27..2c4bf1b227 100644 --- a/kernel/branches/Kolibri-F/sound/playnote.inc +++ b/kernel/branches/Kolibri-F/sound/playnote.inc @@ -19,7 +19,7 @@ $Revision$ align 4 -sound_interface: +syscall_sound_interface: cmp eax, ebx ; this is subfunction #55 ? jne retFunc55 ; if no then return. diff --git a/kernel/branches/Kolibri-F/tools/kerpack b/kernel/branches/Kolibri-F/tools/kerpack new file mode 100755 index 0000000000000000000000000000000000000000..d4906ec02ae9a1fb2a43f0ad46e34e543fc159f8 GIT binary patch literal 35856 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 literal 0 HcmV?d00001 diff --git a/kernel/branches/Kolibri-F/tools/kpack b/kernel/branches/Kolibri-F/tools/kpack new file mode 100755 index 0000000000000000000000000000000000000000..08f10c27fee21377c35472d848300da0c0a3e6be GIT binary patch literal 39336 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