Subversion Repositories Kolibri OS

Rev

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

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