Subversion Repositories Kolibri OS

Rev

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