Subversion Repositories Kolibri OS

Rev

Rev 314 | Rev 380 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                            ;;
  3. ;;                   SYSTEM CALL ENTRY                        ;;
  4. ;;                                                            ;;
  5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  6.  
  7. align 32
  8. i40:
  9.       push  ds es
  10.       pushad
  11.       cld
  12.  
  13.       mov   ax,word os_data
  14.       mov   ds,ax
  15.       mov   es,ax
  16.  
  17.       ; load all registers in crossed order
  18.         mov     eax, ebx
  19.         mov     ebx, ecx
  20.         mov     ecx, edx
  21.         mov     edx, esi
  22.         mov     esi, edi
  23.         mov     edi, [esp+28]
  24.  
  25.       ; enable interupts  -  a task switch or an IRQ _CAN_ interrupt i40 handler
  26.       sti
  27.       push  eax
  28.       and   edi,0xff
  29.       call  dword [servetable+edi*4]
  30.       pop   eax
  31. ;      cli
  32.  
  33.       popad
  34.       pop   es ds
  35.       iretd
  36.  
  37.  
  38. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  39. ;;                                                            ;;
  40. ;;                     SYSENTER ENTRY                         ;;
  41. ;;                                                            ;;
  42. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  43.  
  44. uglobal
  45. times   100 db ?
  46. sysenter_stack:
  47. endg
  48.  
  49. align 32
  50. SYSENTER_VAR    equ     0
  51. sysenter_entry:
  52.         ; ═рёЄЁрштрхь ёЄхъ
  53.         cli
  54.         push    eax
  55.         mov     eax, [ss:CURRENT_TASK]
  56.         shl     eax, 8
  57.         mov     eax, [ss:PROC_BASE + eax + APPDATA.pl0_stack]
  58.         lea     esp, [ss:eax + RING0_STACK_SIZE]        ; configure ESP
  59.         mov     eax, [ss:sysenter_stack - 4]            ; eax - original eax, from app
  60.         sti
  61.         ;------------------
  62.         push    ds es
  63.         pushad
  64.         cld
  65.  
  66.         mov     ax, word os_data
  67.         mov     ds, ax
  68.         mov     es, ax
  69.  
  70.         mov     eax, ebx
  71.         mov     ebx, ecx
  72.         mov     ecx, edx
  73.         mov     edx, esi
  74.         mov     esi, edi
  75.         mov     edi, [esp + 28]
  76.  
  77.         push    eax
  78.         and     edi, 0xff
  79.         call    dword [servetable + edi * 4]
  80.         pop     eax
  81.  
  82.         popad
  83.         pop     es ds
  84.         ;------------------
  85.         mov     edx, [SYSENTER_VAR]             ; eip
  86.         mov     ecx, [SYSENTER_VAR + 4] ; esp
  87.         sysexit
  88.  
  89. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  90. ;;                                                            ;;
  91. ;;                     SYSCALL ENTRY                          ;;
  92. ;;                                                            ;;
  93. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  94. align 32
  95. syscall_entry:
  96.         cli
  97.         xchg    ecx, [esp]
  98.         mov     [SYSENTER_VAR + 4], esp
  99.         mov     [ss:sysenter_stack - 4], eax
  100.         mov     eax, [ss:CURRENT_TASK]
  101.         shl     eax, 8
  102.         mov     eax, [ss:PROC_BASE + eax + APPDATA.pl0_stack]
  103.         lea     esp, [ss:eax + RING0_STACK_SIZE]        ; configure ESP
  104.         mov     eax, [ss:sysenter_stack - 4]            ; eax - original eax, from app
  105.         sti
  106.         ;------------------
  107.         push    ds es
  108.         pushad
  109.         cld
  110.  
  111.         mov     ax, word os_data
  112.         mov     ds, ax
  113.         mov     es, ax
  114.  
  115.         mov     eax, ebx
  116.         mov     ebx, ecx
  117.         mov     ecx, edx
  118.         mov     edx, esi
  119.         mov     esi, edi
  120.         mov     edi, [esp + 28]
  121.  
  122.         push    eax
  123.         and     edi, 0xff
  124.         call    dword [servetable + edi * 4]
  125.         pop     eax
  126.  
  127.         popad
  128.         pop     es ds
  129.         ;------------------
  130.         mov     esp, [SYSENTER_VAR + 4]
  131.         xchg    ecx, [esp]
  132.         sysret
  133. iglobal
  134.   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  135.   ;; SYSTEM FUNCTIONS TABLE ;;
  136.   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  137.  
  138.   align 4
  139.   servetable:
  140.  
  141.       dd sys_drawwindow          ; 0-DrawWindow
  142.       dd syscall_setpixel        ; 1-SetPixel
  143.       dd sys_getkey              ; 2-GetKey
  144.       dd sys_clock               ; 3-GetTime
  145.       dd syscall_writetext       ; 4-WriteText
  146.       dd delay_hs                ; 5-DelayHs
  147.       dd syscall_openramdiskfile ; 6-OpenRamdiskFile
  148.       dd syscall_putimage        ; 7-PutImage
  149.       dd sys_button              ; 8-DefineButton
  150.       dd sys_cpuusage            ; 9-GetProcessInfo
  151.       dd sys_waitforevent        ; 10-WaitForEvent
  152.       dd sys_getevent            ; 11-CheckForEvent
  153.       dd sys_redrawstat          ; 12-BeginDraw and EndDraw
  154.       dd syscall_drawrect        ; 13-DrawRect
  155.       dd syscall_getscreensize   ; 14-GetScreenSize
  156.       dd sys_background          ; 15-bgr
  157.       dd sys_cachetodiskette     ; 16-FlushFloppyCache
  158.       dd sys_getbutton           ; 17-GetButton
  159.       dd sys_system              ; 18-System Services
  160.       dd paleholder;undefined_syscall       ; 19-reserved
  161.       dd sys_midi                ; 20-ResetMidi and OutputMidi
  162.       dd sys_setup               ; 21-SetMidiBase,SetKeymap,SetShiftKeymap,.
  163.       dd sys_settime             ; 22-setting date,time,clock and alarm-clock
  164.       dd sys_wait_event_timeout  ; 23-TimeOutWaitForEvent
  165.       dd syscall_cdaudio         ; 24-PlayCdTrack,StopCd and GetCdPlaylist
  166.       dd sys_sb16                ; 25-SetSb16
  167.       dd sys_getsetup            ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,.
  168.       dd undefined_syscall       ; 27-reserved
  169.       dd sys_sb16II              ; 28-SetSb16
  170.       dd sys_date                ; 29-GetDate
  171.       dd undefined_syscall       ; 30-reserved
  172.       dd undefined_syscall       ; 31-reserved
  173.       dd syscall_delramdiskfile  ; 32-DelRamdiskFile
  174.       dd syscall_writeramdiskfile; 33-WriteRamdiskFile
  175.       dd undefined_syscall       ; 34-reserved
  176.       dd syscall_getpixel        ; 35-GetPixel
  177.       dd syscall_readstring      ; 36-ReadString (not yet ready)
  178.       dd readmousepos            ; 37-GetMousePosition_ScreenRelative,.
  179.       dd syscall_drawline        ; 38-DrawLine
  180.       dd sys_getbackground       ; 39-GetBackgroundSize,ReadBgrData,.
  181.       dd set_app_param           ; 40-WantEvents
  182.       dd syscall_getirqowner     ; 41-GetIrqOwner
  183.       dd get_irq_data            ; 42-ReadIrqData
  184.       dd sys_outport             ; 43-SendDeviceData
  185.       dd sys_programirq          ; 44-ProgramIrqs
  186.       dd reserve_free_irq        ; 45-ReserveIrq and FreeIrq
  187.       dd syscall_reserveportarea ; 46-ReservePortArea and FreePortArea
  188.       dd display_number          ; 47-WriteNum
  189.       dd display_settings        ; 48-SetRedrawType and SetButtonType
  190.       dd sys_apm                 ; 49-Advanced Power Management (APM)
  191.       dd random_shaped_window    ; 50-Window shape & scale
  192.       dd syscall_threads         ; 51-Threads
  193.       dd stack_driver_stat       ; 52-Stack driver status
  194.       dd socket                  ; 53-Socket interface
  195.       dd user_events             ; 54-User events
  196.       dd sound_interface         ; 55-Sound interface
  197.       dd undefined_syscall       ; 56-reserved
  198.       dd undefined_syscall       ; 57-reserved
  199.       dd file_system             ; 58-Common file system interface
  200.       dd undefined_syscall       ; 59-reserved        
  201.       dd sys_IPC                 ; 60-Inter Process Communication
  202.       dd sys_gs                  ; 61-Direct graphics access
  203.       dd sys_pci                 ; 62-PCI functions
  204.       dd sys_msg_board           ; 63-System message board
  205.       dd sys_resize_app_memory   ; 64-Resize application memory usage
  206.       dd syscall_putimage_palette; 65-PutImagePalette
  207.       dd sys_process_def         ; 66-Process definitions - keyboard
  208.       dd sys_window_move         ; 67-Window move or resize
  209.       dd new_services            ; 68-Some internal services
  210.       dd sys_debug_services      ; 69-Debug
  211.       dd file_system_lfn         ; 70-Common file system interface, version 2
  212.       dd syscall_windowsettings  ; 71-Window settings
  213.  
  214.   times 255 - ( ($-servetable) /4 )  dd undefined_syscall
  215.  
  216.       dd sys_end                 ; -1-end application
  217. endg
  218.