Subversion Repositories Kolibri OS

Rev

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