Subversion Repositories Kolibri OS

Rev

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

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