Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
2288 clevermous 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
5363 yogev_ezra 3
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
2288 clevermous 4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
8
$Revision: 8986 $
9
 
10
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
11
;;                                                            ;;
12
;;                     SYSENTER ENTRY                         ;;
13
;;                                                            ;;
14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15
 
16
align 32
17
sysenter_entry:
8052 rgimad 18
        ; Setting up the stack
2288 clevermous 19
        mov     esp, [ss:tss._esp0]
20
        sti
21
        push    ebp                     ; save app esp + 4
22
        mov     ebp, [ebp]              ; ebp - original ebp
23
        ;------------------
24
        pushad
25
        cld
26
 
3303 clevermous 27
        call    protect_from_terminate
28
 
29
        movzx   eax, byte [esp+28]
3304 clevermous 30
        mov     edx, dword [esp+20]
2288 clevermous 31
        call    dword [servetable2 + eax * 4]
32
 
3303 clevermous 33
        call    unprotect_from_terminate
2288 clevermous 34
        popad
35
        ;------------------
8052 rgimad 36
        xchg    ecx, [ss:esp]           ; in the stack top - app ecx, ecx - app esp + 4
2288 clevermous 37
        sub     ecx, 4
38
        xchg    edx, [ecx]              ; edx - return point, & save original edx
39
        push    edx
40
        mov     edx, [ss:esp + 4]
41
        mov     [ecx + 4], edx          ; save original ecx
42
        pop     edx
43
        sysexit
44
 
45
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
46
;;                                                            ;;
47
;;                   SYSTEM CALL ENTRY                        ;;
48
;;                                                            ;;
49
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
50
 
51
align 16
52
i40:
53
        pushad
54
        cld
3303 clevermous 55
        call    protect_from_terminate
56
        movzx   eax, byte [esp+28]
3304 clevermous 57
        mov     edx, dword [esp+20]
2288 clevermous 58
        call    dword [servetable2 + eax * 4]
3303 clevermous 59
        call    unprotect_from_terminate
2288 clevermous 60
        popad
61
        iretd
62
 
63
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
64
;;                                                            ;;
65
;;                     SYSCALL ENTRY                          ;;
66
;;                                                            ;;
67
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
68
align 32
69
syscall_entry:
70
  ;     cli                 syscall clear IF
71
        xchg    esp, [ss:tss._esp0]
72
        push    ecx
73
        lea     ecx, [esp+4]
74
        xchg    ecx, [ss:tss._esp0]
75
        sti
76
        push    ecx
77
        mov     ecx, [ecx]
78
        ;------------------
79
        pushad
80
        cld
3303 clevermous 81
        call    protect_from_terminate
2288 clevermous 82
 
3303 clevermous 83
        movzx   eax, byte [esp+28]
3304 clevermous 84
        mov     edx, dword [esp+20]
2288 clevermous 85
        call    dword [servetable2 + eax * 4]
86
 
3303 clevermous 87
        call    unprotect_from_terminate
2288 clevermous 88
        popad
89
        ;------------------
90
        mov     ecx, [ss:esp+4]
91
        pop     esp
92
        sysret
93
 
94
iglobal
95
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
96
  ;; SYSTEM FUNCTIONS TABLE ;;
97
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
98
  align 4
99
  servetable2:
100
 
8986 turbocat 101
      dd syscall_draw_window            ;  0 - define and draw the window;
102
      dd syscall_setpixel               ;  1 - put pixel in the window;
103
      dd syscall_getkey                 ;  2 - get the code of the pressed key;
104
      dd syscall_clock                  ;  3 - get system time;
105
      dd syscall_writetext              ;  4 - draw text string;
106
      dd syscall_delay_hs_unprotected   ;  5 - delay;
107
      dd syscall_undefined              ;  6 - system call undefined;
108
      dd syscall_putimage               ;  7 - draw image in the window;
109
      dd syscall_button                 ;  8 - define/delete the button;
110
      dd syscall_thread_info            ;  9 - information on execution thread;
111
      dd syscall_waitforevent           ; 10 - wait for event;
112
      dd syscall_checkforevent          ; 11 - check for event, no wait;
113
      dd syscall_redrawstat             ; 12 - begin/end window redraw;
114
      dd syscall_drawrect               ; 13 - draw a rectangle in the window;
115
      dd syscall_getscreensize          ; 14 - get screen size;
116
      dd syscall_background             ; 15 - working with the background;
117
      dd syscall_cachetodiskette        ; 16 - save ramdisk on a floppy;
118
      dd syscall_getbutton              ; 17 - get the identifier of the pressed button;
119
      dd syscall_system                 ; 18 - system services;
120
      dd syscall_undefined              ; 19 - system call undefined;
121
      dd syscall_midi                   ; 20 - reset MIDI and output MIDI;
122
      dd syscall_setup                  ; 21 - setting system parameters;
123
      dd syscall_settime                ; 22 - setting date, time, clock and alarm-clock;
124
      dd syscall_wait_event_timeout     ; 23 - wait for event with timeout;
125
      dd syscall_cdaudio                ; 24 - work with a CD player;
126
      dd syscall_putarea_backgr         ; 25 - put area to background;
127
      dd syscall_getsetup               ; 26 - get system parameters;
128
      dd syscall_undefined              ; 27 - system call undefined;
129
      dd syscall_undefined              ; 28 - system call undefined;
130
      dd syscall_date                   ; 29 - get date;
131
      dd syscall_current_directory      ; 30 - get/set current directory;
132
      dd syscall_undefined              ; 31 - system call undefined;
133
      dd syscall_undefined              ; 32 - system call undefined;
134
      dd syscall_undefined              ; 33 - system call undefined;
135
      dd syscall_getpixel_WinMap        ; 34 - find out who the screen point belongs to;
136
      dd syscall_getpixel               ; 35 - read the color of the pixel on the screen;
137
      dd syscall_getarea                ; 36 - read the screen area;
138
      dd syscall_get_mouse_pos          ; 37 - work with the mouse;
139
      dd syscall_drawline               ; 38 - draw a line;
140
      dd syscall_getbackground          ; 39 - get background info;
141
      dd syscall_set_eventmask          ; 40 - set event mask;
142
      dd syscall_undefined              ; 41 - system call undefined;
143
      dd syscall_undefined              ; 42 - system call undefined;
144
      dd syscall_outport                ; 43 - input / output to the port;
145
      dd syscall_undefined              ; 44 - system call undefined;
146
      dd syscall_undefined              ; 45 - system call undefined;
147
      dd syscall_reserveportarea        ; 46 - reserve port area and free port area;
148
      dd syscall_putnumber              ; 47 - print a number to the window;
149
      dd syscall_window_styles          ; 48 - window display styles;
150
      dd syscall_apm                    ; 49 - Advanced Power Management (APM);
151
      dd syscall_set_window_shape       ; 50 - window shape & scale;
152
      dd syscall_threads                ; 51 - threads;
153
      dd syscall_undefined              ; 52 - system call undefined;
154
      dd syscall_undefined              ; 53 - system call undefined;
155
      dd syscall_clipboard              ; 54 - working with the clipboard;
156
      dd syscall_sound_interface        ; 55 - sound interface;
157
      dd syscall_undefined              ; 56 - system call undefined;
158
      dd syscall_pcibios                ; 57 - PCI BIOS32;
159
      dd syscall_undefined              ; 58 - system call undefined;
160
      dd syscall_undefined              ; 59 - system call undefined;
161
      dd syscall_IPC                    ; 60 - Inter Process Communication(IPC);
162
      dd syscall_dga                    ; 61 - direct graphics access;
163
      dd syscall_pci_api                ; 62 - PCI functions;
164
      dd syscall_msg_board              ; 63 - system message board;
165
      dd syscall_resize_app_memory      ; 64 - resize application memory usage;
166
      dd syscall_putimage_palette       ; 65 - display an image with a palette in the window;
167
      dd syscall_process_def            ; 66 - process definitions - keyboard;
168
      dd syscall_move_window            ; 67 - window move or resize;
169
      dd syscall_some_intrenal_services ; 68 - some internal services;
170
      dd syscall_debug_services         ; 69 - debug services;
171
      dd syscall_file_system_lfn        ; 70 - file system interface;
172
      dd syscall_window_settings        ; 71 - window settings;
173
      dd syscall_send_window_msg        ; 72 - send window message;
174
      dd syscall_blit_32                ; 73 - graphic blitter;
175
      dd syscall_network                ; 74 - work with network devices;
176
      dd syscall_socket                 ; 75 - work with network sockets;
177
      dd syscall_protocols              ; 76 - network options and statistics;
178
      dd syscall_posix_subsystem        ; 77 - POSIX subsystem;
179
      dd syscall_undefined              ; 78 - system call undefined;
180
      dd syscall_undefined              ; 79 - system call undefined;
181
      dd syscall_fs_diff_encodings      ; 80 - file system interface for different encodings;
6079 serge 182
 
8986 turbocat 183
        times 255 - ( ($-servetable2) /4 )  dd syscall_undefined
184
      dd syscall_end                    ; -1-end application
2288 clevermous 185
 
186
endg