Subversion Repositories Kolibri OS

Rev

Rev 427 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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