Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
129 mikedld 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                            ;;
3
;;                   SYSTEM CALL ENTRY                        ;;
4
;;                                                            ;;
5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
 
7
align 32
8
i40:
9
      push  ds es
10
      pushad
11
      cld
12
 
13
      mov   ax,word os_data
14
      mov   ds,ax
15
      mov   es,ax
16
 
17
      ; load all registers in crossed order
384 mikedld 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]
129 mikedld 24
 
25
      ; enable interupts  -  a task switch or an IRQ _CAN_ interrupt i40 handler
26
      sti
27
      push  eax
28
      and   edi,0xff
29
      call  dword [servetable+edi*4]
30
      pop   eax
384 mikedld 31
;      cli
32
 
129 mikedld 33
      popad
34
      pop   es ds
35
      iretd
36
 
37
 
384 mikedld 38
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
39
;;                                                            ;;
40
;;                     SYSENTER ENTRY                         ;;
41
;;                                                            ;;
42
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
43
 
129 mikedld 44
uglobal
384 mikedld 45
times	100 db ?
46
sysenter_stack:
129 mikedld 47
endg
48
 
384 mikedld 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
57
        mov     eax, [ss:SLOT_BASE + eax + APPDATA.pl0_stack]
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
129 mikedld 65
 
384 mikedld 66
	mov	ax, word os_data
67
	mov	ds, ax
68
	mov	es, ax
129 mikedld 69
 
384 mikedld 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
102
        mov     eax, [ss:SLOT_BASE + eax + APPDATA.pl0_stack]
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
129 mikedld 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
159
      dd sys_system              ; 18-System Services
384 mikedld 160
      dd paleholder;undefined_syscall       ; 19-reserved
129 mikedld 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,.
384 mikedld 168
      dd undefined_syscall       ; 27-reserved
129 mikedld 169
      dd sys_sb16II              ; 28-SetSb16
170
      dd sys_date                ; 29-GetDate
171
      dd undefined_syscall       ; 30-reserved
172
      dd undefined_syscall       ; 31-reserved
173
      dd syscall_delramdiskfile  ; 32-DelRamdiskFile
174
      dd syscall_writeramdiskfile; 33-WriteRamdiskFile
175
      dd undefined_syscall       ; 34-reserved
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
190
      dd sys_apm                 ; 49-Advanced Power Management (APM)
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
384 mikedld 197
      dd undefined_syscall       ; 56-reserved
129 mikedld 198
      dd undefined_syscall       ; 57-reserved
199
      dd file_system             ; 58-Common file system interface
384 mikedld 200
      dd undefined_syscall       ; 59-reserved
201
      dd sys_IPC                 ; 60-Inter Process Communication
129 mikedld 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
384 mikedld 206
      dd syscall_putimage_palette; 65-PutImagePalette
129 mikedld 207
      dd sys_process_def         ; 66-Process definitions - keyboard
208
      dd sys_window_move         ; 67-Window move or resize
384 mikedld 209
      dd new_services            ; 68-Some internal services
129 mikedld 210
      dd sys_debug_services      ; 69-Debug
211
      dd file_system_lfn         ; 70-Common file system interface, version 2
212
      dd syscall_windowsettings  ; 71-Window settings
213
 
214
  times 255 - ( ($-servetable) /4 )  dd undefined_syscall
215
 
216
      dd sys_end                 ; -1-end application
217
endg