Subversion Repositories Kolibri OS

Rev

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

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