Subversion Repositories Kolibri OS

Rev

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

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