Subversion Repositories Kolibri OS

Rev

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

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