Subversion Repositories Kolibri OS

Rev

Rev 3539 | Rev 3614 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3539 Rev 3545
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
7
 
8
$Revision: 3539 $
8
$Revision: 3545 $
9
 
9
 
10
; Old style system call converter
10
; Old style system call converter
11
align 16
11
align 16
12
cross_order:
12
cross_order:
13
        ; load all registers in crossed order
13
        ; load all registers in crossed order
14
        mov     eax, ebx
14
        mov     eax, ebx
15
        mov     ebx, ecx
15
        mov     ebx, ecx
16
        mov     ecx, edx
16
        mov     ecx, edx
17
        mov     edx, esi
17
        mov     edx, esi
18
        mov     esi, edi
18
        mov     esi, edi
19
        movzx   edi, byte[esp+28 + 4]
19
        movzx   edi, byte[esp+28 + 4]
20
        sub     edi, 53
20
        sub     edi, 53
21
        call    dword [servetable+edi*4]
21
        call    dword [servetable+edi*4]
22
        ret
22
        ret
23
 
23
 
24
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
24
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
25
;;                                                            ;;
25
;;                                                            ;;
26
;;                     SYSENTER ENTRY                         ;;
26
;;                     SYSENTER ENTRY                         ;;
27
;;                                                            ;;
27
;;                                                            ;;
28
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
28
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29
 
29
 
30
align 32
30
align 32
31
sysenter_entry:
31
sysenter_entry:
32
        ; Настраиваем стек
32
        ; Настраиваем стек
33
        mov     esp, [ss:tss._esp0]
33
        mov     esp, [ss:tss._esp0]
34
        sti
34
        sti
35
        push    ebp                     ; save app esp + 4
35
        push    ebp                     ; save app esp + 4
36
        mov     ebp, [ebp]              ; ebp - original ebp
36
        mov     ebp, [ebp]              ; ebp - original ebp
37
        ;------------------
37
        ;------------------
38
        pushad
38
        pushad
39
        cld
39
        cld
40
 
40
 
41
        call    protect_from_terminate
41
        call    protect_from_terminate
42
 
42
 
43
        movzx   eax, byte [esp+28]
43
        movzx   eax, byte [esp+28]
44
        mov     edx, dword [esp+20]
44
        mov     edx, dword [esp+20]
45
        call    dword [servetable2 + eax * 4]
45
        call    dword [servetable2 + eax * 4]
46
 
46
 
47
        call    unprotect_from_terminate
47
        call    unprotect_from_terminate
48
        popad
48
        popad
49
        ;------------------
49
        ;------------------
50
        xchg    ecx, [ss:esp]           ; в вершин стека - app ecx, ecx - app esp + 4
50
        xchg    ecx, [ss:esp]           ; в вершин стека - app ecx, ecx - app esp + 4
51
        sub     ecx, 4
51
        sub     ecx, 4
52
        xchg    edx, [ecx]              ; edx - return point, & save original edx
52
        xchg    edx, [ecx]              ; edx - return point, & save original edx
53
        push    edx
53
        push    edx
54
        mov     edx, [ss:esp + 4]
54
        mov     edx, [ss:esp + 4]
55
        mov     [ecx + 4], edx          ; save original ecx
55
        mov     [ecx + 4], edx          ; save original ecx
56
        pop     edx
56
        pop     edx
57
        sysexit
57
        sysexit
58
 
58
 
59
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
59
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
60
;;                                                            ;;
60
;;                                                            ;;
61
;;                   SYSTEM CALL ENTRY                        ;;
61
;;                   SYSTEM CALL ENTRY                        ;;
62
;;                                                            ;;
62
;;                                                            ;;
63
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
63
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
64
 
64
 
65
align 16
65
align 16
66
i40:
66
i40:
67
        pushad
67
        pushad
68
        cld
68
        cld
69
        call    protect_from_terminate
69
        call    protect_from_terminate
70
        movzx   eax, byte [esp+28]
70
        movzx   eax, byte [esp+28]
71
        mov     edx, dword [esp+20]
71
        mov     edx, dword [esp+20]
72
        call    dword [servetable2 + eax * 4]
72
        call    dword [servetable2 + eax * 4]
73
        call    unprotect_from_terminate
73
        call    unprotect_from_terminate
74
        popad
74
        popad
75
        iretd
75
        iretd
76
 
76
 
77
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
77
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
78
;;                                                            ;;
78
;;                                                            ;;
79
;;                     SYSCALL ENTRY                          ;;
79
;;                     SYSCALL ENTRY                          ;;
80
;;                                                            ;;
80
;;                                                            ;;
81
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
81
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
82
align 32
82
align 32
83
syscall_entry:
83
syscall_entry:
84
  ;     cli                 syscall clear IF
84
  ;     cli                 syscall clear IF
85
        xchg    esp, [ss:tss._esp0]
85
        xchg    esp, [ss:tss._esp0]
86
        push    ecx
86
        push    ecx
87
        lea     ecx, [esp+4]
87
        lea     ecx, [esp+4]
88
        xchg    ecx, [ss:tss._esp0]
88
        xchg    ecx, [ss:tss._esp0]
89
        sti
89
        sti
90
        push    ecx
90
        push    ecx
91
        mov     ecx, [ecx]
91
        mov     ecx, [ecx]
92
        ;------------------
92
        ;------------------
93
        pushad
93
        pushad
94
        cld
94
        cld
95
        call    protect_from_terminate
95
        call    protect_from_terminate
96
 
96
 
97
        movzx   eax, byte [esp+28]
97
        movzx   eax, byte [esp+28]
98
        mov     edx, dword [esp+20]
98
        mov     edx, dword [esp+20]
99
        call    dword [servetable2 + eax * 4]
99
        call    dword [servetable2 + eax * 4]
100
 
100
 
101
        call    unprotect_from_terminate
101
        call    unprotect_from_terminate
102
        popad
102
        popad
103
        ;------------------
103
        ;------------------
104
        mov     ecx, [ss:esp+4]
104
        mov     ecx, [ss:esp+4]
105
        pop     esp
105
        pop     esp
106
        sysret
106
        sysret
107
 
107
 
108
iglobal
108
iglobal
109
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
109
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
110
  ;; SYSTEM FUNCTIONS TABLE ;;
110
  ;; SYSTEM FUNCTIONS TABLE ;;
111
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
111
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
112
 
112
 
113
  align 4
113
  align 4
114
  servetable:
114
  servetable:
115
      dd socket                  ; 53-Socket interface
115
      dd 0
116
      dd 0
116
      dd 0
117
      dd 0
117
      dd 0
118
      dd 0
118
      dd 0
119
      dd 0
119
      dd 0
120
      dd file_system             ; 58-Common file system interface
120
      dd file_system             ; 58-Common file system interface
121
      dd 0
121
      dd 0
122
      dd 0
122
      dd 0
123
      dd 0
123
      dd 0
124
      dd 0                       ; 62-PCI functions
124
      dd 0                       ; 62-PCI functions
125
      dd sys_msg_board           ; 63-System message board
125
      dd sys_msg_board           ; 63-System message board
126
 
126
 
127
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
127
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
128
  ;; NEW SYSTEM FUNCTIONS TABLE ;;
128
  ;; NEW SYSTEM FUNCTIONS TABLE ;;
129
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
129
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
130
  align 4
130
  align 4
131
  servetable2:
131
  servetable2:
132
 
132
 
133
      dd syscall_draw_window     ; 0-DrawWindow
133
      dd syscall_draw_window     ; 0-DrawWindow
134
      dd syscall_setpixel        ; 1-SetPixel
134
      dd syscall_setpixel        ; 1-SetPixel
135
      dd sys_getkey              ; 2-GetKey
135
      dd sys_getkey              ; 2-GetKey
136
      dd sys_clock               ; 3-GetTime
136
      dd sys_clock               ; 3-GetTime
137
      dd syscall_writetext       ; 4-WriteText
137
      dd syscall_writetext       ; 4-WriteText
138
      dd delay_hs_unprotected    ; 5-DelayHs
138
      dd delay_hs_unprotected    ; 5-DelayHs
139
      dd syscall_openramdiskfile ; 6-OpenRamdiskFile
139
      dd syscall_openramdiskfile ; 6-OpenRamdiskFile
140
      dd syscall_putimage        ; 7-PutImage
140
      dd syscall_putimage        ; 7-PutImage
141
      dd syscall_button          ; 8-DefineButton
141
      dd syscall_button          ; 8-DefineButton
142
      dd sys_cpuusage            ; 9-GetProcessInfo
142
      dd sys_cpuusage            ; 9-GetProcessInfo
143
      dd sys_waitforevent        ; 10-WaitForEvent
143
      dd sys_waitforevent        ; 10-WaitForEvent
144
      dd sys_getevent            ; 11-CheckForEvent
144
      dd sys_getevent            ; 11-CheckForEvent
145
      dd sys_redrawstat          ; 12-BeginDraw and EndDraw
145
      dd sys_redrawstat          ; 12-BeginDraw and EndDraw
146
      dd syscall_drawrect        ; 13-DrawRect
146
      dd syscall_drawrect        ; 13-DrawRect
147
      dd syscall_getscreensize   ; 14-GetScreenSize
147
      dd syscall_getscreensize   ; 14-GetScreenSize
148
      dd sys_background          ; 15-bgr
148
      dd sys_background          ; 15-bgr
149
      dd sys_cachetodiskette     ; 16-FlushFloppyCache
149
      dd sys_cachetodiskette     ; 16-FlushFloppyCache
150
      dd sys_getbutton           ; 17-GetButton
150
      dd sys_getbutton           ; 17-GetButton
151
      dd sys_system              ; 18-System Services
151
      dd sys_system              ; 18-System Services
152
      dd paleholder              ; 19-reserved
152
      dd paleholder              ; 19-reserved
153
      dd sys_midi                ; 20-ResetMidi and OutputMidi
153
      dd sys_midi                ; 20-ResetMidi and OutputMidi
154
      dd sys_setup               ; 21-SetMidiBase,SetKeymap,SetShiftKeymap,.
154
      dd sys_setup               ; 21-SetMidiBase,SetKeymap,SetShiftKeymap,.
155
      dd sys_settime             ; 22-setting date,time,clock and alarm-clock
155
      dd sys_settime             ; 22-setting date,time,clock and alarm-clock
156
      dd sys_wait_event_timeout  ; 23-TimeOutWaitForEvent
156
      dd sys_wait_event_timeout  ; 23-TimeOutWaitForEvent
157
      dd syscall_cdaudio         ; 24-PlayCdTrack,StopCd and GetCdPlaylist
157
      dd syscall_cdaudio         ; 24-PlayCdTrack,StopCd and GetCdPlaylist
158
      dd syscall_putarea_backgr  ; 25-Put Area to background
158
      dd syscall_putarea_backgr  ; 25-Put Area to background
159
      dd sys_getsetup            ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,.
159
      dd sys_getsetup            ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,.
160
      dd undefined_syscall       ; 27-reserved
160
      dd undefined_syscall       ; 27-reserved
161
      dd undefined_syscall       ; 28-reserved
161
      dd undefined_syscall       ; 28-reserved
162
      dd sys_date                ; 29-GetDate
162
      dd sys_date                ; 29-GetDate
163
      dd sys_current_directory   ; 30-Get/SetCurrentDirectory
163
      dd sys_current_directory   ; 30-Get/SetCurrentDirectory
164
      dd undefined_syscall       ; 31-reserved
164
      dd undefined_syscall       ; 31-reserved
165
      dd undefined_syscall       ; 32-reserved
165
      dd undefined_syscall       ; 32-reserved
166
      dd undefined_syscall       ; 33-reserved
166
      dd undefined_syscall       ; 33-reserved
167
      dd syscall_getpixel_WinMap ; 34-GetPixel WinMap
167
      dd syscall_getpixel_WinMap ; 34-GetPixel WinMap
168
      dd syscall_getpixel        ; 35-GetPixel
168
      dd syscall_getpixel        ; 35-GetPixel
169
      dd syscall_getarea         ; 36-GetArea
169
      dd syscall_getarea         ; 36-GetArea
170
      dd readmousepos            ; 37-GetMousePosition_ScreenRelative,.
170
      dd readmousepos            ; 37-GetMousePosition_ScreenRelative,.
171
      dd syscall_drawline        ; 38-DrawLine
171
      dd syscall_drawline        ; 38-DrawLine
172
      dd sys_getbackground       ; 39-GetBackgroundSize,ReadBgrData,.
172
      dd sys_getbackground       ; 39-GetBackgroundSize,ReadBgrData,.
173
      dd set_app_param           ; 40-WantEvents
173
      dd set_app_param           ; 40-WantEvents
174
      dd undefined_syscall       ; 41- deprecated GetIrqOwner
174
      dd undefined_syscall       ; 41- deprecated GetIrqOwner
175
      dd undefined_syscall       ; 42- deprecated ReadIrqData
175
      dd undefined_syscall       ; 42- deprecated ReadIrqData
176
      dd sys_outport             ; 43-SendDeviceData
176
      dd sys_outport             ; 43-SendDeviceData
177
      dd undefined_syscall       ; 44- deprecated ProgramIrqs
177
      dd undefined_syscall       ; 44- deprecated ProgramIrqs
178
      dd undefined_syscall       ; 45- deprecated ReserveIrq and FreeIrq
178
      dd undefined_syscall       ; 45- deprecated ReserveIrq and FreeIrq
179
      dd syscall_reserveportarea ; 46-ReservePortArea and FreePortArea
179
      dd syscall_reserveportarea ; 46-ReservePortArea and FreePortArea
180
      dd display_number          ; 47-WriteNum
180
      dd display_number          ; 47-WriteNum
181
      dd syscall_display_settings ; 48-SetRedrawType and SetButtonType
181
      dd syscall_display_settings ; 48-SetRedrawType and SetButtonType
182
      dd sys_apm                 ; 49-Advanced Power Management (APM)
182
      dd sys_apm                 ; 49-Advanced Power Management (APM)
183
      dd syscall_set_window_shape ; 50-Window shape & scale
183
      dd syscall_set_window_shape ; 50-Window shape & scale
184
      dd syscall_threads         ; 51-Threads
184
      dd syscall_threads         ; 51-Threads
185
      dd stack_driver_stat       ; 52-Stack driver status
185
      dd undefined_syscall       ; 52-Stack driver status
186
      dd cross_order             ; 53-Socket interface
186
      dd undefined_syscall       ; 53-Socket interface
187
      dd undefined_syscall       ; 54-reserved
187
      dd undefined_syscall       ; 54-reserved
188
      dd sound_interface         ; 55-Sound interface
188
      dd sound_interface         ; 55-Sound interface
189
      dd undefined_syscall       ; 56-reserved
189
      dd undefined_syscall       ; 56-reserved
190
      dd sys_pcibios             ; 57-PCI BIOS32
190
      dd sys_pcibios             ; 57-PCI BIOS32
191
      dd cross_order             ; 58-Common file system interface
191
      dd cross_order             ; 58-Common file system interface
192
      dd undefined_syscall       ; 59-reserved
192
      dd undefined_syscall       ; 59-reserved
193
      dd sys_IPC                 ; 60-Inter Process Communication
193
      dd sys_IPC                 ; 60-Inter Process Communication
194
      dd sys_gs                  ; 61-Direct graphics access
194
      dd sys_gs                  ; 61-Direct graphics access
195
      dd pci_api        ;cross_order             ; 62-PCI functions
195
      dd pci_api        ;cross_order             ; 62-PCI functions
196
      dd cross_order             ; 63-System message board
196
      dd cross_order             ; 63-System message board
197
      dd sys_resize_app_memory   ; 64-Resize application memory usage
197
      dd sys_resize_app_memory   ; 64-Resize application memory usage
198
      dd sys_putimage_palette    ; 65-PutImagePalette
198
      dd sys_putimage_palette    ; 65-PutImagePalette
199
      dd sys_process_def         ; 66-Process definitions - keyboard
199
      dd sys_process_def         ; 66-Process definitions - keyboard
200
      dd syscall_move_window     ; 67-Window move or resize
200
      dd syscall_move_window     ; 67-Window move or resize
201
      dd f68                     ; 68-Some internal services
201
      dd f68                     ; 68-Some internal services
202
      dd sys_debug_services      ; 69-Debug
202
      dd sys_debug_services      ; 69-Debug
203
      dd file_system_lfn         ; 70-Common file system interface, version 2
203
      dd file_system_lfn         ; 70-Common file system interface, version 2
204
      dd syscall_window_settings ; 71-Window settings
204
      dd syscall_window_settings ; 71-Window settings
205
      dd sys_sendwindowmsg       ; 72-Send window message
205
      dd sys_sendwindowmsg       ; 72-Send window message
206
      dd blit_32                 ; 73-blitter;
206
      dd blit_32                 ; 73-blitter;
207
      dd undefined_syscall       ; 74-reserved for new stack
207
      dd sys_network             ; 74-reserved for new stack
208
      dd undefined_syscall       ; 75-reserved for new stack
208
      dd sys_socket              ; 75-reserved for new stack
209
      dd undefined_syscall       ; 76-reserved for new stack
209
      dd sys_protocols           ; 76-reserved for new stack
210
        times 255 - ( ($-servetable2) /4 )  dd undefined_syscall
210
        times 255 - ( ($-servetable2) /4 )  dd undefined_syscall
211
      dd sys_end                 ; -1-end application
211
      dd sys_end                 ; -1-end application
212
 
212
 
213
endg
213
endg