Subversion Repositories Kolibri OS

Rev

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

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