Subversion Repositories Kolibri OS

Rev

Rev 6798 | Rev 6802 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6798 Rev 6800
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
7
 
8
SYSTEM FUNCTIONS of OS Kolibri 0.7.7.0
8
SYSTEM FUNCTIONS of OS Kolibri 0.7.7.0
9
 
9
 
10
Number of the function is located in the register eax.
10
Number of the function is located in the register eax.
11
The call of the system function is executed by "int 0x40" command.
11
The call of the system function is executed by "int 0x40" command.
12
All registers except explicitly declared in the returned value,
12
All registers except explicitly declared in the returned value,
13
    including eflags, are preserved.
13
    including eflags, are preserved.
14
 
14
 
15
 
15
 
16
======================================================================
16
======================================================================
17
============== Function 0 - define and draw the window. ==============
17
============== Function 0 - define and draw the window. ==============
18
======================================================================
18
======================================================================
19
Defines an application window. Draws a frame of the window, header and
19
Defines an application window. Draws a frame of the window, header and
20
working area. For skinned windows defines standard close and minimize
20
working area. For skinned windows defines standard close and minimize
21
buttons.
21
buttons.
22
Parameters:
22
Parameters:
23
  * eax = 0 - function number
23
  * eax = 0 - function number
24
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
24
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
25
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
25
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
26
  * edx = 0xXYRRGGBB, where:
26
  * edx = 0xXYRRGGBB, where:
27
    * Y = style of the window:
27
    * Y = style of the window:
28
      * Y=1 - only define window area, draw nothing
28
      * Y=1 - only define window area, draw nothing
29
      * Y=3 - skinned window
29
      * Y=3 - skinned window
30
      * Y=4 - skinned fixed-size window
30
      * Y=4 - skinned fixed-size window
31
      * Y=0,2 window types are outdated and should not be used anymore,
31
      * Y=0,2 window types are outdated and should not be used anymore,
32
        they are retained for compatibility with old programs.
32
        they are retained for compatibility with old programs.
33
      * other possible values (from 5 to 15) are reserved,
33
      * other possible values (from 5 to 15) are reserved,
34
        function call with such Y is ignored
34
        function call with such Y is ignored
35
    * RR, GG, BB = accordingly red, green, blue components of a color
35
    * RR, GG, BB = accordingly red, green, blue components of a color
36
      of the working area of the window (are ignored for style Y=1)
36
      of the working area of the window (are ignored for style Y=1)
37
    * X = DCBA (bits)
37
    * X = DCBA (bits)
38
      * A = 1 - window has caption
38
      * A = 1 - window has caption
39
      * B = 1 - coordinates of all graphics primitives are relative to
39
      * B = 1 - coordinates of all graphics primitives are relative to
40
                  window client area
40
                  window client area
41
      * C = 1 - don't fill working area on window draw
41
      * C = 1 - don't fill working area on window draw
42
      * D = 0 - normal filling of the working area, 1 - gradient
42
      * D = 0 - normal filling of the working area, 1 - gradient
43
    The following parameters are intended for windows
43
    The following parameters are intended for windows
44
    of a type I and II, and ignored for styles Y=1,3:
44
    of a type I and II, and ignored for styles Y=1,3:
45
  * esi = 0xXYRRGGBB - color of the header
45
  * esi = 0xXYRRGGBB - color of the header
46
    * RR, GG, BB define color
46
    * RR, GG, BB define color
47
    * Y=0 - usual window, Y=1 - unmovable window (works for all window styles)
47
    * Y=0 - usual window, Y=1 - unmovable window (works for all window styles)
48
    * X not used, other values of Y are reserved
48
    * X not used, other values of Y are reserved
49
  * edi = caption string for styles Y=3,4 (also can be set by func 71.1)
49
  * edi = caption string for styles Y=3,4 (also can be set by func 71.1)
50
Returned value:
50
Returned value:
51
  * function does not return value
51
  * function does not return value
52
Remarks:
52
Remarks:
53
  * Position and sizes of the window are installed by the first
53
  * Position and sizes of the window are installed by the first
54
    call of this function and are ignored at subsequent; to change
54
    call of this function and are ignored at subsequent; to change
55
    position and/or sizes of already created window use function 67.
55
    position and/or sizes of already created window use function 67.
56
  * For windows with styles Y=3,4 and caption (A=1) caption string
56
  * For windows with styles Y=3,4 and caption (A=1) caption string
57
    is set by the first call of this function and is ignored
57
    is set by the first call of this function and is ignored
58
    at subsequent (strictly speaking, is ignored after a call to
58
    at subsequent (strictly speaking, is ignored after a call to
59
    subfunction 2 of function 12 - end redraw); to change caption of
59
    subfunction 2 of function 12 - end redraw); to change caption of
60
    already created window use subfunction 1 of function 71.
60
    already created window use subfunction 1 of function 71.
61
  * If the window has appropriate styles, position and/or sizes can be
61
  * If the window has appropriate styles, position and/or sizes can be
62
    changed by user. Current position and sizes can be obtained
62
    changed by user. Current position and sizes can be obtained
63
    by function 9.
63
    by function 9.
64
  * The window must fit on the screen. If the transferred
64
  * The window must fit on the screen. If the transferred
65
    coordinates and sizes do not satisfy to this condition,
65
    coordinates and sizes do not satisfy to this condition,
66
    appropriate coordinate (or, probably, both) is considered as zero,
66
    appropriate coordinate (or, probably, both) is considered as zero,
67
    and if it does not help too, the appropriate size
67
    and if it does not help too, the appropriate size
68
    (or, probably, both) is installed in a size of the screen.
68
    (or, probably, both) is installed in a size of the screen.
69
 
69
 
70
    Further let us designate xpos,ypos,xsize,ysize - values passed
70
    Further let us designate xpos,ypos,xsize,ysize - values passed
71
    in ebx,ecx. The coordinates are resulted concerning
71
    in ebx,ecx. The coordinates are resulted concerning
72
    the left upper corner of the window, which, thus, is set as (0,0),
72
    the left upper corner of the window, which, thus, is set as (0,0),
73
    coordinates of the right lower corner essence (xsize,ysize).
73
    coordinates of the right lower corner essence (xsize,ysize).
74
  * The sizes of the window are understood in sence of coordinates
74
  * The sizes of the window are understood in sence of coordinates
75
    of the right lower corner. This concerns all other functions too.
75
    of the right lower corner. This concerns all other functions too.
76
    It means, that the real sizes are on 1 pixel more.
76
    It means, that the real sizes are on 1 pixel more.
77
  * The window of style Y=1 looks as follows:
77
  * The window of style Y=1 looks as follows:
78
    * completely defined by the application
78
    * completely defined by the application
79
  * The skinned window Y=3,4 looks as follows:
79
  * The skinned window Y=3,4 looks as follows:
80
    * draw external frame of width 1 pixel
80
    * draw external frame of width 1 pixel
81
      with color 'outer' from the skin
81
      with color 'outer' from the skin
82
    * draw intermediate frame of width 3 pixel
82
    * draw intermediate frame of width 3 pixel
83
      with color 'frame' from the skin
83
      with color 'frame' from the skin
84
    * draw internal frame of width 1 pixel
84
    * draw internal frame of width 1 pixel
85
      with color 'inner' from the skin
85
      with color 'inner' from the skin
86
    * draw header (on bitmaps from the skin) in a rectangle
86
    * draw header (on bitmaps from the skin) in a rectangle
87
      (0,0) - (xsize,_skinh-1)
87
      (0,0) - (xsize,_skinh-1)
88
    * if ysize>=26, fill the working area of the window -
88
    * if ysize>=26, fill the working area of the window -
89
      rectangle with the left upper corner (5,_skinh) and right lower
89
      rectangle with the left upper corner (5,_skinh) and right lower
90
      (xsize-5,ysize-5) with color indicated in edx
90
      (xsize-5,ysize-5) with color indicated in edx
91
      (taking a gradient into account)
91
      (taking a gradient into account)
92
    * define two standard buttons: close and minimize
92
    * define two standard buttons: close and minimize
93
      (see function 8)
93
      (see function 8)
94
    * if A=1 and edi contains (nonzero) pointer to caption string,
94
    * if A=1 and edi contains (nonzero) pointer to caption string,
95
      it is drawn in place in header defined in the skin
95
      it is drawn in place in header defined in the skin
96
    * value _skinh is accessible as the result of call
96
    * value _skinh is accessible as the result of call
97
      subfunction 4 of function 48
97
      subfunction 4 of function 48
98
 
98
 
99
---------------------- Constants for registers: ----------------------
99
---------------------- Constants for registers: ----------------------
100
  eax - SF_CREATE_WINDOW (0)
100
  eax - SF_CREATE_WINDOW (0)
101
======================================================================
101
======================================================================
102
================ Function 1 - put pixel in the window. ===============
102
================ Function 1 - put pixel in the window. ===============
103
======================================================================
103
======================================================================
104
Parameters:
104
Parameters:
105
  * eax = 1 - function number
105
  * eax = 1 - function number
106
  * ebx = x-coordinate (relative to the window)
106
  * ebx = x-coordinate (relative to the window)
107
  * ecx = y-coordinate (relative to the window)
107
  * ecx = y-coordinate (relative to the window)
108
  * edx = 0x00RRGGBB - color of a pixel
108
  * edx = 0x00RRGGBB - color of a pixel
109
    edx = 0x01xxxxxx - invert color of a pixel
109
    edx = 0x01xxxxxx - invert color of a pixel
110
          (low 24 bits are ignored)
110
          (low 24 bits are ignored)
111
Returned value:
111
Returned value:
112
  * function does not return value
112
  * function does not return value
113
 
113
 
114
---------------------- Constants for registers: ----------------------
114
---------------------- Constants for registers: ----------------------
115
  eax - SF_PUT_PIXEL (1)
115
  eax - SF_PUT_PIXEL (1)
116
======================================================================
116
======================================================================
117
============ Function 2 - get the code of the pressed key. ===========
117
============ Function 2 - get the code of the pressed key. ===========
118
======================================================================
118
======================================================================
119
Takes away the code of the pressed key from the buffer.
119
Takes away the code of the pressed key from the buffer.
120
Parameters:
120
Parameters:
121
  * eax = 2 - function number
121
  * eax = 2 - function number
122
Returned value:
122
Returned value:
123
  * if the buffer is empty, function returns eax=1
123
  * if the buffer is empty, function returns eax=1
124
  * if the buffer is not empty, function returns al=0,
124
  * if the buffer is not empty, function returns al=0,
125
    ah=code of the pressed key,
125
    ah=code of the pressed key,
126
    bits 16-23 = contain scancode for pressed key in ASCII mode,
126
    bits 16-23 = contain scancode for pressed key in ASCII mode,
127
                 in the scancodes mode this bits cleared.
127
                 in the scancodes mode this bits cleared.
128
    bits 23-31 = zero
128
    bits 23-31 = zero
129
  * if there is "hotkey", function returns al=2,
129
  * if there is "hotkey", function returns al=2,
130
    ah=scancode of the pressed key (0 for control keys),
130
    ah=scancode of the pressed key (0 for control keys),
131
    high word of eax contains a status of control keys at the moment
131
    high word of eax contains a status of control keys at the moment
132
    of pressing a hotkey
132
    of pressing a hotkey
133
Remarks:
133
Remarks:
134
  * There is a common system buffer of the pressed keys
134
  * There is a common system buffer of the pressed keys
135
    by a size of 120 bytes, organized as queue.
135
    by a size of 120 bytes, organized as queue.
136
  * There is one more common system buffer on 120 "hotkeys".
136
  * There is one more common system buffer on 120 "hotkeys".
137
  * If the application with the inactive window calls this function,
137
  * If the application with the inactive window calls this function,
138
    the buffer of the pressed keys is considered to be empty.
138
    the buffer of the pressed keys is considered to be empty.
139
  * By default this function returns ASCII-codes; to switch
139
  * By default this function returns ASCII-codes; to switch
140
    to the scancodes mode (and back) use function 66.
140
    to the scancodes mode (and back) use function 66.
141
    However, hotkeys are always notificated as scancodes.
141
    However, hotkeys are always notificated as scancodes.
142
  * To find out, what keys correspond to what codes, start
142
  * To find out, what keys correspond to what codes, start
143
    the application keyascii and scancode.
143
    the application keyascii and scancode.
144
  * Scancodes come directly from keyboard and are fixed;
144
  * Scancodes come directly from keyboard and are fixed;
145
    ASCII-codes turn out with usage of the conversion tables,
145
    ASCII-codes turn out with usage of the conversion tables,
146
    which can be set by subfunction 2 of function 21
146
    which can be set by subfunction 2 of function 21
147
    and get by subfunction 2 of function 26.
147
    and get by subfunction 2 of function 26.
148
  * As a consequence, ASCII-codes take into account current
148
  * As a consequence, ASCII-codes take into account current
149
    keyboard layout (rus/en) as opposed to scancodes.
149
    keyboard layout (rus/en) as opposed to scancodes.
150
  * This function notifies only about those hotkeys, which were
150
  * This function notifies only about those hotkeys, which were
151
    defined by this thread by subfunction 4 of function 66.
151
    defined by this thread by subfunction 4 of function 66.
152
 
152
 
153
---------------------- Constants for registers: ----------------------
153
---------------------- Constants for registers: ----------------------
154
  eax - SF_GET_KEY (2)
154
  eax - SF_GET_KEY (2)
155
======================================================================
155
======================================================================
156
==================== Function 3 - get system time. ===================
156
==================== Function 3 - get system time. ===================
157
======================================================================
157
======================================================================
158
Parameters:
158
Parameters:
159
  * eax = 3 - function number
159
  * eax = 3 - function number
160
Returned value:
160
Returned value:
161
  * eax = 0x00SSMMHH, where HH:MM:SS = Hours:Minutes:Seconds
161
  * eax = 0x00SSMMHH, where HH:MM:SS = Hours:Minutes:Seconds
162
  * each item is BCD-number, for example,
162
  * each item is BCD-number, for example,
163
    for time 23:59:59 function returns 0x00595923
163
    for time 23:59:59 function returns 0x00595923
164
Remarks:
164
Remarks:
165
  * See also subfunction 9 of function 26 - get time from
165
  * See also subfunction 9 of function 26 - get time from
166
    the moment of start of the system; it is more convenient, because
166
    the moment of start of the system; it is more convenient, because
167
    returns simply DWORD-value of the time counter.
167
    returns simply DWORD-value of the time counter.
168
  * System time can be set by function 22.
168
  * System time can be set by function 22.
169
 
169
 
170
---------------------- Constants for registers: ----------------------
170
---------------------- Constants for registers: ----------------------
171
  eax - SF_GET_SYS_TIME (3)
171
  eax - SF_GET_SYS_TIME (3)
172
======================================================================
172
======================================================================
173
=================== Function 4 - draw text string. ===================
173
=================== Function 4 - draw text string. ===================
174
======================================================================
174
======================================================================
175
Parameters:
175
Parameters:
176
  * eax = 4 - function number
176
  * eax = 4 - function number
177
  * ebx = X*65536+Y, coordinates in the window or buffer
177
  * ebx = X*65536+Y, coordinates in the window or buffer
178
  * ecx = 0xXXRRGGBB, where
178
  * ecx = 0xXXRRGGBB, where
179
    * RR, GG, BB specify text color
179
    * RR, GG, BB specify text color
180
    * XX = ABFFCSSS (bits):
180
    * XX = ABFFCSSS (bits):
181
      * A=1 - output zero terminated string
181
      * A=1 - output zero terminated string
182
      * B=1 - fill background (color = edi)
182
      * B=1 - fill background (color = edi)
183
      * FF specifies the font and encoding:
183
      * FF specifies the font and encoding:
184
        0 = 6x9  cp866
184
        0 = 6x9  cp866
185
        1 = 8x16 cp866
185
        1 = 8x16 cp866
186
        2 = 8x16 UTF-16LE
186
        2 = 8x16 UTF-16LE
187
        3 = 8x16 UTF-8
187
        3 = 8x16 UTF-8
188
      * C=0 - draw to the window,
188
      * C=0 - draw to the window,
189
        C=1 - draw to the user buffer (edi)
189
        C=1 - draw to the user buffer (edi)
190
      * SSS = (size multiplier)-1, so 0 = x1, 7 = x8
190
      * SSS = (size multiplier)-1, so 0 = x1, 7 = x8
191
  * edx = pointer to the beginning of the string
191
  * edx = pointer to the beginning of the string
192
  * esi = for A=0 length of the string, for A=1 is ignored
192
  * esi = for A=0 length of the string, for A=1 is ignored
193
  * edi = for B=1 color to fill background,
193
  * edi = for B=1 color to fill background,
194
          for C=1 pointer to user buffer
194
          for C=1 pointer to user buffer
195
 
195
 
196
Returned value:
196
Returned value:
197
  * function does not return value
197
  * function does not return value
198
Remarks:
198
Remarks:
199
  * You can not use B=1 and C=1 at the same time, since both use edi.
199
  * You can not use B=1 and C=1 at the same time, since both use edi.
200
  * When SSS=0, font may be smoothed, depending on system setting.
200
  * When SSS=0, font may be smoothed, depending on system setting.
201
  * User buffer structure:
201
  * User buffer structure:
202
Xsize       dd
202
Xsize       dd
203
Ysize       dd
203
Ysize       dd
204
picture     rb  Xsize*Ysize*4  ; 32 bpp
204
picture     rb  Xsize*Ysize*4  ; 32 bpp
205
 
205
 
206
---------------------- Constants for registers: ----------------------
206
---------------------- Constants for registers: ----------------------
207
  eax - SF_DRAW_TEXT (4)
207
  eax - SF_DRAW_TEXT (4)
208
======================================================================
208
======================================================================
209
========================= Function 5 - delay. ========================
209
========================= Function 5 - delay. ========================
210
======================================================================
210
======================================================================
211
Delays execution of the program on the given time.
211
Delays execution of the program on the given time.
212
Parameters:
212
Parameters:
213
  * eax = 5 - function number
213
  * eax = 5 - function number
214
  * ebx = time in the 1/100 of second
214
  * ebx = time in the 1/100 of second
215
Returned value:
215
Returned value:
216
  * function does not return value
216
  * function does not return value
217
Remarks:
217
Remarks:
218
  * Passing ebx=0 does not transfer control to the next process
218
  * Passing ebx=0 does not transfer control to the next process
219
    and does not make any operations at all. If it is really required
219
    and does not make any operations at all. If it is really required
220
    to transfer control to the next process (to complete a current
220
    to transfer control to the next process (to complete a current
221
    time slice), use subfunction 1 of function 68.
221
    time slice), use subfunction 1 of function 68.
222
 
222
 
223
---------------------- Constants for registers: ----------------------
223
---------------------- Constants for registers: ----------------------
224
  eax - SF_SLEEP (5)
224
  eax - SF_SLEEP (5)
225
======================================================================
225
======================================================================
226
=============== Function 7 - draw image in the window. ===============
226
=============== Function 7 - draw image in the window. ===============
227
======================================================================
227
======================================================================
228
Paramters:
228
Paramters:
229
  * eax = 7 - function number
229
  * eax = 7 - function number
230
  * ebx = pointer to the image in the format BBGGRRBBGGRR...
230
  * ebx = pointer to the image in the format BBGGRRBBGGRR...
231
  * ecx = [size on axis x]*65536 + [size on axis y]
231
  * ecx = [size on axis x]*65536 + [size on axis y]
232
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
232
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
233
Returned value:
233
Returned value:
234
  * function does not return value
234
  * function does not return value
235
Remarks:
235
Remarks:
236
  * Coordinates of the image are coordinates of the upper left corner
236
  * Coordinates of the image are coordinates of the upper left corner
237
    of the image relative to the window.
237
    of the image relative to the window.
238
  * Size of the image in bytes is 3*xsize*ysize.
238
  * Size of the image in bytes is 3*xsize*ysize.
239
 
239
 
240
---------------------- Constants for registers: ----------------------
240
---------------------- Constants for registers: ----------------------
241
  eax - SF_PUT_IMAGE (7)
241
  eax - SF_PUT_IMAGE (7)
242
======================================================================
242
======================================================================
243
=============== Function 8 - define/delete the button. ===============
243
=============== Function 8 - define/delete the button. ===============
244
======================================================================
244
======================================================================
245
Parameters for button definition:
245
Parameters for button definition:
246
  * eax = 8 - function number
246
  * eax = 8 - function number
247
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
247
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
248
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
248
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
249
  * edx = 0xXYnnnnnn, where:
249
  * edx = 0xXYnnnnnn, where:
250
    * nnnnnn = identifier of the button
250
    * nnnnnn = identifier of the button
251
    * high (31st) bit of edx is cleared
251
    * high (31st) bit of edx is cleared
252
    * if 30th bit of edx is set - do not draw the button
252
    * if 30th bit of edx is set - do not draw the button
253
    * if 29th bit of edx is set - do not draw a frame
253
    * if 29th bit of edx is set - do not draw a frame
254
      at pressing the button
254
      at pressing the button
255
  * esi = 0x00RRGGBB - color of the button
255
  * esi = 0x00RRGGBB - color of the button
256
Parameters for button deleting:
256
Parameters for button deleting:
257
  * eax = 8 - function number
257
  * eax = 8 - function number
258
  * edx = 0x80nnnnnn, where nnnnnn - identifier of the button
258
  * edx = 0x80nnnnnn, where nnnnnn - identifier of the button
259
Returned value:
259
Returned value:
260
  * function does not return value
260
  * function does not return value
261
Remarks:
261
Remarks:
262
  * Sizes of the button must be more than 0 and less than 0x8000.
262
  * Sizes of the button must be more than 0 and less than 0x8000.
263
  * For skinned windows definition of the window
263
  * For skinned windows definition of the window
264
    (call of 0th function) creates two standard buttons -
264
    (call of 0th function) creates two standard buttons -
265
    for close of the window with identifier 1 and
265
    for close of the window with identifier 1 and
266
    for minimize of the window with identifier 0xffff.
266
    for minimize of the window with identifier 0xffff.
267
  * The creation of two buttons with same identifiers is admitted.
267
  * The creation of two buttons with same identifiers is admitted.
268
  * The button with the identifier 0xffff at pressing is interpreted
268
  * The button with the identifier 0xffff at pressing is interpreted
269
    by the system as the button of minimization, the system handles
269
    by the system as the button of minimization, the system handles
270
    such pressing independently, not accessing to the application.
270
    such pressing independently, not accessing to the application.
271
    In rest it is usual button.
271
    In rest it is usual button.
272
  * Total number of buttons for all applications is limited to 4095.
272
  * Total number of buttons for all applications is limited to 4095.
273
 
273
 
274
---------------------- Constants for registers: ----------------------
274
---------------------- Constants for registers: ----------------------
275
  eax - SF_DEFINE_BUTTON (8)
275
  eax - SF_DEFINE_BUTTON (8)
276
======================================================================
276
======================================================================
277
============ Function 9 - information on execution thread. ===========
277
============ Function 9 - information on execution thread. ===========
278
======================================================================
278
======================================================================
279
Parameters:
279
Parameters:
280
  * eax = 9 - function number
280
  * eax = 9 - function number
281
  * ebx = pointer to 1-Kb buffer
281
  * ebx = pointer to 1-Kb buffer
282
  * ecx = number of the slot of the thread
282
  * ecx = number of the slot of the thread
283
    ecx = -1 - get information on the current thread
283
    ecx = -1 - get information on the current thread
284
Returned value:
284
Returned value:
285
  * eax = maximum number of the slot of a thread
285
  * eax = maximum number of the slot of a thread
286
  * buffer pointed to by ebx contains the following information:
286
  * buffer pointed to by ebx contains the following information:
287
    * +0: dword: usage of the processor (how many time units
287
    * +0: dword: usage of the processor (how many time units
288
      per second leaves on execution of this thread)
288
      per second leaves on execution of this thread)
289
    * +4: word: position of the window of thread in the window stack
289
    * +4: word: position of the window of thread in the window stack
290
    * +6: word: (has no relation to the specified thread)
290
    * +6: word: (has no relation to the specified thread)
291
      number of the thread slot, which window has in the window stack
291
      number of the thread slot, which window has in the window stack
292
      position ecx
292
      position ecx
293
    * +8: word: reserved
293
    * +8: word: reserved
294
    * +10 = +0xA: 11 bytes: name of the process
294
    * +10 = +0xA: 11 bytes: name of the process
295
      (name of the started file - executable file without extension)
295
      (name of the started file - executable file without extension)
296
    * +21 = +0x15: byte: reserved, this byte is not changed
296
    * +21 = +0x15: byte: reserved, this byte is not changed
297
    * +22 = +0x16: dword: address of the process in memory
297
    * +22 = +0x16: dword: address of the process in memory
298
    * +26 = +0x1A: dword: size of used memory - 1
298
    * +26 = +0x1A: dword: size of used memory - 1
299
    * +30 = +0x1E: dword: identifier (PID/TID)
299
    * +30 = +0x1E: dword: identifier (PID/TID)
300
    * +34 = +0x22: dword: coordinate of the thread window on axis x
300
    * +34 = +0x22: dword: coordinate of the thread window on axis x
301
    * +38 = +0x26: dword: coordinate of the thread window on axis y
301
    * +38 = +0x26: dword: coordinate of the thread window on axis y
302
    * +42 = +0x2A: dword: size of the thread window on axis x
302
    * +42 = +0x2A: dword: size of the thread window on axis x
303
    * +46 = +0x2E: dword: size of the thread window on axis y
303
    * +46 = +0x2E: dword: size of the thread window on axis y
304
    * +50 = +0x32: word: status of the thread slot:
304
    * +50 = +0x32: word: status of the thread slot:
305
      * 0 = thread is running
305
      * 0 = thread is running
306
      * 1 = thread is suspended
306
      * 1 = thread is suspended
307
      * 2 = thread is suspended while waiting for event
307
      * 2 = thread is suspended while waiting for event
308
      * 3 = thread is terminating as a result of call to function -1
308
      * 3 = thread is terminating as a result of call to function -1
309
        or under duress as a result of call to subfunction 2
309
        or under duress as a result of call to subfunction 2
310
        of function 18 or termination of the system
310
        of function 18 or termination of the system
311
      * 4 = thread is terminating as a result of exception
311
      * 4 = thread is terminating as a result of exception
312
      * 5 = thread waits for event
312
      * 5 = thread waits for event
313
      * 9 = requested slot is free, all other information on the slot
313
      * 9 = requested slot is free, all other information on the slot
314
        is not meaningful
314
        is not meaningful
315
    * +52 = +0x34: word: reserved, this word is not changed
315
    * +52 = +0x34: word: reserved, this word is not changed
316
    * +54 = +0x36: dword: coordinate of the client area on axis x
316
    * +54 = +0x36: dword: coordinate of the client area on axis x
317
    * +58 = +0x3A: dword: coordinate of the client area on axis y
317
    * +58 = +0x3A: dword: coordinate of the client area on axis y
318
    * +62 = +0x3E: dword: width of the client area
318
    * +62 = +0x3E: dword: width of the client area
319
    * +66 = +0x42: dword: height of the client area
319
    * +66 = +0x42: dword: height of the client area
320
    * +70 = +0x46: byte: state of the window - bitfield
320
    * +70 = +0x46: byte: state of the window - bitfield
321
      * bit 0 (mask 1): window is maximized
321
      * bit 0 (mask 1): window is maximized
322
      * bit 1 (mask 2): window is minimized to panel
322
      * bit 1 (mask 2): window is minimized to panel
323
      * bit 2 (mask 4): window is rolled up
323
      * bit 2 (mask 4): window is rolled up
324
    * +71 = +0x47: dword: event mask
324
    * +71 = +0x47: dword: event mask
325
    * +75 = +0x4B: byte: keyboard mode(ASCII = 0; SCAN = 1)
325
    * +75 = +0x4B: byte: keyboard mode(ASCII = 0; SCAN = 1)
326
Remarks:
326
Remarks:
327
  * Slots are numbered starting from 1.
327
  * Slots are numbered starting from 1.
328
  * Returned value is not a total number of threads, because there
328
  * Returned value is not a total number of threads, because there
329
    can be free slots.
329
    can be free slots.
330
  * When process is starting, system automatically creates
330
  * When process is starting, system automatically creates
331
    execution thread.
331
    execution thread.
332
  * Function gives information on the thread. Each process has
332
  * Function gives information on the thread. Each process has
333
    at least one thread. One process can create many threads,
333
    at least one thread. One process can create many threads,
334
    in this case each thread has its own slot and the fields
334
    in this case each thread has its own slot and the fields
335
    +10, +22, +26 in these slots coincide.
335
    +10, +22, +26 in these slots coincide.
336
    Applications have no common way to define whether two threads
336
    Applications have no common way to define whether two threads
337
    belong to one process.
337
    belong to one process.
338
  * The active window - window on top of the window stack -
338
  * The active window - window on top of the window stack -
339
    receives the messages on a keyboard input. For such window
339
    receives the messages on a keyboard input. For such window
340
    the position in the window stack coincides with returned value.
340
    the position in the window stack coincides with returned value.
341
  * Slot 1 corresponds to special system thread, for which:
341
  * Slot 1 corresponds to special system thread, for which:
342
    * the window is in the bottom of the window stack, the fields
342
    * the window is in the bottom of the window stack, the fields
343
      +4 and +6 contain value 1
343
      +4 and +6 contain value 1
344
    * name of the process - "OS/IDLE" (supplemented by spaces)
344
    * name of the process - "OS/IDLE" (supplemented by spaces)
345
    * address of the process in memory is 0, size of used memory is
345
    * address of the process in memory is 0, size of used memory is
346
      16 Mb (0x1000000)
346
      16 Mb (0x1000000)
347
    * PID=1
347
    * PID=1
348
    * coordinates and sizes of the window and the client area are by
348
    * coordinates and sizes of the window and the client area are by
349
      convention set to 0
349
      convention set to 0
350
    * status of the slot is always 0 (running)
350
    * status of the slot is always 0 (running)
351
    * the execution time adds of time leaving on operations itself
351
    * the execution time adds of time leaving on operations itself
352
      and idle time in waiting for interrupt (which can be got by call
352
      and idle time in waiting for interrupt (which can be got by call
353
      to subfunction 4 of function 18).
353
      to subfunction 4 of function 18).
354
  * Beginning from slot 2, the normal applications are placed.
354
  * Beginning from slot 2, the normal applications are placed.
355
  * The normal applications are placed in memory at the address
355
  * The normal applications are placed in memory at the address
356
    0 (kernel constant 'std_application_base_address').
356
    0 (kernel constant 'std_application_base_address').
357
    There is no intersection, as each process has its own page table.
357
    There is no intersection, as each process has its own page table.
358
  * At creation of the thread it is assigned the slot
358
  * At creation of the thread it is assigned the slot
359
    in the system table and identifier (Process/Thread IDentifier =
359
    in the system table and identifier (Process/Thread IDentifier =
360
    PID/TID), which do not vary with time for given thread.
360
    PID/TID), which do not vary with time for given thread.
361
    After completion of the thread its slot can be anew used
361
    After completion of the thread its slot can be anew used
362
    for another thread. The thread identifier can not be assigned
362
    for another thread. The thread identifier can not be assigned
363
    to other thread even after completion of this thread.
363
    to other thread even after completion of this thread.
364
    Identifiers, assigned to new threads, grow monotonously.
364
    Identifiers, assigned to new threads, grow monotonously.
365
  * If the thread has not yet defined the window by call to
365
  * If the thread has not yet defined the window by call to
366
    function 0, the position and the sizes
366
    function 0, the position and the sizes
367
    of its window are considered to be zero.
367
    of its window are considered to be zero.
368
  * Coordinates of the client area are relative to the window.
368
  * Coordinates of the client area are relative to the window.
369
  * At the moment only the part of the buffer by a size
369
  * At the moment only the part of the buffer by a size
370
    76 = 0x4C bytes is used. Nevertheless it is recommended to use
370
    76 = 0x4C bytes is used. Nevertheless it is recommended to use
371
    1-Kb buffer for the future compatibility, in the future
371
    1-Kb buffer for the future compatibility, in the future
372
    some fields can be added.
372
    some fields can be added.
373
 
373
 
374
---------------------- Constants for registers: ----------------------
374
---------------------- Constants for registers: ----------------------
375
  eax - SF_THREAD_INFO (9)
375
  eax - SF_THREAD_INFO (9)
376
======================================================================
376
======================================================================
377
==================== Function 10 - wait for event. ===================
377
==================== Function 10 - wait for event. ===================
378
======================================================================
378
======================================================================
379
If the message queue is empty, waits for appearance of the message
379
If the message queue is empty, waits for appearance of the message
380
in queue. In this state thread does not consume CPU time.
380
in queue. In this state thread does not consume CPU time.
381
Then reads out the message from queue.
381
Then reads out the message from queue.
382
 
382
 
383
Parameters:
383
Parameters:
384
  * eax = 10 - function number
384
  * eax = 10 - function number
385
Returned value:
385
Returned value:
386
  * eax = event (see the list of events)
386
  * eax = event (see the list of events)
387
Remarks:
387
Remarks:
388
  * Those events are taken into account only which enter into
388
  * Those events are taken into account only which enter into
389
    a mask set by function 40. By default it is
389
    a mask set by function 40. By default it is
390
    redraw, key and button events.
390
    redraw, key and button events.
391
  * To check, whether there is a message in queue, use function 11.
391
  * To check, whether there is a message in queue, use function 11.
392
    To wait for no more than given time, use function 23.
392
    To wait for no more than given time, use function 23.
393
 
393
 
394
---------------------- Constants for registers: ----------------------
394
---------------------- Constants for registers: ----------------------
395
  eax - SF_WAIT_EVENT (10)
395
  eax - SF_WAIT_EVENT (10)
396
======================================================================
396
======================================================================
397
=============== Function 11 - check for event, no wait. ==============
397
=============== Function 11 - check for event, no wait. ==============
398
======================================================================
398
======================================================================
399
If the message queue contains event, function reads out
399
If the message queue contains event, function reads out
400
and return it. If the queue is empty, function returns 0.
400
and return it. If the queue is empty, function returns 0.
401
Parameters:
401
Parameters:
402
  * eax = 11 - function number
402
  * eax = 11 - function number
403
Returned value:
403
Returned value:
404
  * eax = 0 - message queue is empty
404
  * eax = 0 - message queue is empty
405
  * else eax = event (see the list of events)
405
  * else eax = event (see the list of events)
406
Remarks:
406
Remarks:
407
  * Those events are taken into account only, which enter into
407
  * Those events are taken into account only, which enter into
408
    a mask set by function 40. By default it is
408
    a mask set by function 40. By default it is
409
    redraw, key and button events.
409
    redraw, key and button events.
410
  * To wait for event, use function 10.
410
  * To wait for event, use function 10.
411
    To wait for no more than given time, use function 23.
411
    To wait for no more than given time, use function 23.
412
 
412
 
413
---------------------- Constants for registers: ----------------------
413
---------------------- Constants for registers: ----------------------
414
  eax - SF_CHECK_EVENT (11)
414
  eax - SF_CHECK_EVENT (11)
415
======================================================================
415
======================================================================
416
=============== Function 12 - begin/end window redraw. ===============
416
=============== Function 12 - begin/end window redraw. ===============
417
======================================================================
417
======================================================================
418
 
418
 
419
---------------- Subfunction 1 - begin window redraw. ----------------
419
---------------- Subfunction 1 - begin window redraw. ----------------
420
Parameters:
420
Parameters:
421
  * eax = 12 - function number
421
  * eax = 12 - function number
422
  * ebx = 1 - subfunction number
422
  * ebx = 1 - subfunction number
423
Returned value:
423
Returned value:
424
  * function does not return value
424
  * function does not return value
425
 
425
 
426
----------------- Subfunction 2 - end window redraw. -----------------
426
----------------- Subfunction 2 - end window redraw. -----------------
427
Parameters:
427
Parameters:
428
  * eax = 12 - function number
428
  * eax = 12 - function number
429
  * ebx = 2 - subfunction number
429
  * ebx = 2 - subfunction number
430
Returned value:
430
Returned value:
431
  * function does not return value
431
  * function does not return value
432
Remarks:
432
Remarks:
433
  * Subfunction 1 deletes all buttons defined with
433
  * Subfunction 1 deletes all buttons defined with
434
    function 8, they must be defined again.
434
    function 8, they must be defined again.
435
 
435
 
436
---------------------- Constants for registers: ----------------------
436
---------------------- Constants for registers: ----------------------
437
  eax - SF_REDRAW (12)
437
  eax - SF_REDRAW (12)
438
  ebx - SSF_BEGIN_DRAW (1), SSF_END_DRAW (2)
438
  ebx - SSF_BEGIN_DRAW (1), SSF_END_DRAW (2)
439
======================================================================
439
======================================================================
440
============ Function 13 - draw a rectangle in the window. ===========
440
============ Function 13 - draw a rectangle in the window. ===========
441
======================================================================
441
======================================================================
442
Parameters:
442
Parameters:
443
  * eax = 13 - function number
443
  * eax = 13 - function number
444
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
444
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
445
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
445
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
446
  * edx = color 0xRRGGBB or 0x80RRGGBB for gradient fill
446
  * edx = color 0xRRGGBB or 0x80RRGGBB for gradient fill
447
Returned value:
447
Returned value:
448
  * function does not return value
448
  * function does not return value
449
Remarks:
449
Remarks:
450
  * Coordinates are understood as coordinates of the left upper corner
450
  * Coordinates are understood as coordinates of the left upper corner
451
    of a rectangle relative to the window.
451
    of a rectangle relative to the window.
452
 
452
 
453
---------------------- Constants for registers: ----------------------
453
---------------------- Constants for registers: ----------------------
454
  eax - SF_DRAW_RECT (13)
454
  eax - SF_DRAW_RECT (13)
455
======================================================================
455
======================================================================
456
=================== Function 14 - get screen size. ===================
456
=================== Function 14 - get screen size. ===================
457
======================================================================
457
======================================================================
458
Parameters:
458
Parameters:
459
  * eax = 14 - function number
459
  * eax = 14 - function number
460
Returned value:
460
Returned value:
461
  * eax = [xsize]*65536 + [ysize], where
461
  * eax = [xsize]*65536 + [ysize], where
462
  * xsize = x-coordinate of the right lower corner of the screen =
462
  * xsize = x-coordinate of the right lower corner of the screen =
463
            horizontal size - 1
463
            horizontal size - 1
464
  * ysize = y-coordinate of the right lower corner of the screen =
464
  * ysize = y-coordinate of the right lower corner of the screen =
465
            vertical size - 1
465
            vertical size - 1
466
Remarks:
466
Remarks:
467
  * See also subfunction 5 of function 48 - get sizes of
467
  * See also subfunction 5 of function 48 - get sizes of
468
    working area of the screen.
468
    working area of the screen.
469
 
469
 
470
---------------------- Constants for registers: ----------------------
470
---------------------- Constants for registers: ----------------------
471
  eax - SF_GET_SCREEN_SIZE (14)
471
  eax - SF_GET_SCREEN_SIZE (14)
472
======================================================================
472
======================================================================
473
== Function 15, subfunction 1 - set a size of the background image. ==
473
== Function 15, subfunction 1 - set a size of the background image. ==
474
======================================================================
474
======================================================================
475
Parameters:
475
Parameters:
476
  * eax = 15 - function number
476
  * eax = 15 - function number
477
  * ebx = 1 - subfunction number
477
  * ebx = 1 - subfunction number
478
  * ecx = width of the image
478
  * ecx = width of the image
479
  * edx = height of the image
479
  * edx = height of the image
480
Returned value:
480
Returned value:
481
  * function does not return value
481
  * function does not return value
482
Remarks:
482
Remarks:
483
  * Before calling subfunctions 2 and 5 you should call this function
483
  * Before calling subfunctions 2 and 5 you should call this function
484
    to set image size!
484
    to set image size!
485
  * For update of the screen (after completion of a series of commands
485
  * For update of the screen (after completion of a series of commands
486
    working with a background) call subfunction 3.
486
    working with a background) call subfunction 3.
487
  * There is a pair function for get size of the background image -
487
  * There is a pair function for get size of the background image -
488
    subfunction 1 of function 39.
488
    subfunction 1 of function 39.
489
 
489
 
490
---------------------- Constants for registers: ----------------------
490
---------------------- Constants for registers: ----------------------
491
  eax - SF_BACKGROUND_SET (15)
491
  eax - SF_BACKGROUND_SET (15)
492
  ebx - SSF_SIZE_BG (1)
492
  ebx - SSF_SIZE_BG (1)
493
======================================================================
493
======================================================================
494
=== Function 15, subfunction 2 - put pixel on the background image. ==
494
=== Function 15, subfunction 2 - put pixel on the background image. ==
495
======================================================================
495
======================================================================
496
Parameters:
496
Parameters:
497
  * eax = 15 - function number
497
  * eax = 15 - function number
498
  * ebx = 2 - subfunction number
498
  * ebx = 2 - subfunction number
499
  * ecx = offset
499
  * ecx = offset
500
  * edx = color of a pixel 0xRRGGBB
500
  * edx = color of a pixel 0xRRGGBB
501
Returned value:
501
Returned value:
502
  * function does not return value
502
  * function does not return value
503
Remarks:
503
Remarks:
504
  * Offset for a pixel with coordinates (x,y) is calculated as
504
  * Offset for a pixel with coordinates (x,y) is calculated as
505
    (x+y*xsize)*3.
505
    (x+y*xsize)*3.
506
  * If the given offset exceeds size set by subfunction 1,
506
  * If the given offset exceeds size set by subfunction 1,
507
    the call is ignored.
507
    the call is ignored.
508
  * For update of the screen (after completion of a series of commands
508
  * For update of the screen (after completion of a series of commands
509
    working with a background) call subfunction 3.
509
    working with a background) call subfunction 3.
510
  * There is a pair function for get pixel on the background image -
510
  * There is a pair function for get pixel on the background image -
511
    subfunction 2 of function 39.
511
    subfunction 2 of function 39.
512
 
512
 
513
---------------------- Constants for registers: ----------------------
513
---------------------- Constants for registers: ----------------------
514
  eax - SF_BACKGROUND_SET (15)
514
  eax - SF_BACKGROUND_SET (15)
515
  ebx - SSF_PIXEL_BG (2)
515
  ebx - SSF_PIXEL_BG (2)
516
======================================================================
516
======================================================================
517
=========== Function 15, subfunction 3 - redraw background. ==========
517
=========== Function 15, subfunction 3 - redraw background. ==========
518
======================================================================
518
======================================================================
519
Parameters:
519
Parameters:
520
  * eax = 15 - function number
520
  * eax = 15 - function number
521
  * ebx = 3 - subfunction number
521
  * ebx = 3 - subfunction number
522
Returned value:
522
Returned value:
523
  * function does not return value
523
  * function does not return value
524
 
524
 
525
---------------------- Constants for registers: ----------------------
525
---------------------- Constants for registers: ----------------------
526
  eax - SF_BACKGROUND_SET (15)
526
  eax - SF_BACKGROUND_SET (15)
527
  ebx - SSF_REDRAW_BG (3)
527
  ebx - SSF_REDRAW_BG (3)
528
======================================================================
528
======================================================================
529
== Function 15, subfunction 4 - set drawing mode for the background. =
529
== Function 15, subfunction 4 - set drawing mode for the background. =
530
======================================================================
530
======================================================================
531
Parameters:
531
Parameters:
532
  * eax = 15 - function number
532
  * eax = 15 - function number
533
  * ebx = 4 - subfunction number
533
  * ebx = 4 - subfunction number
534
  * ecx = drawing mode:
534
  * ecx = drawing mode:
535
    * 1 = tile
535
    * 1 = tile
536
    * 2 = stretch
536
    * 2 = stretch
537
Returned value:
537
Returned value:
538
  * function does not return value
538
  * function does not return value
539
Remarks:
539
Remarks:
540
  * For update of the screen (after completion of a series of commands
540
  * For update of the screen (after completion of a series of commands
541
    working with a background) call subfunction 3.
541
    working with a background) call subfunction 3.
542
  * There is a pair function for get drawing mode of the background -
542
  * There is a pair function for get drawing mode of the background -
543
    subfunction 4 of function 39.
543
    subfunction 4 of function 39.
544
 
544
 
545
---------------------- Constants for registers: ----------------------
545
---------------------- Constants for registers: ----------------------
546
  eax - SF_BACKGROUND_SET (15)
546
  eax - SF_BACKGROUND_SET (15)
547
  ebx - SSF_MODE_BG (4)
547
  ebx - SSF_MODE_BG (4)
548
======================================================================
548
======================================================================
549
===================== Function 15, subfunction 5 =====================
549
===================== Function 15, subfunction 5 =====================
550
============ Put block of pixels on the background image. ============
550
============ Put block of pixels on the background image. ============
551
======================================================================
551
======================================================================
552
Parameters:
552
Parameters:
553
  * eax = 15 - function number
553
  * eax = 15 - function number
554
  * ebx = 5 - subfunction number
554
  * ebx = 5 - subfunction number
555
  * ecx = pointer to the data in the format BBGGRRBBGGRR...
555
  * ecx = pointer to the data in the format BBGGRRBBGGRR...
556
  * edx = offset in data of the background image
556
  * edx = offset in data of the background image
557
  * esi = size of data in bytes = 3 * number of pixels
557
  * esi = size of data in bytes = 3 * number of pixels
558
Returned value:
558
Returned value:
559
  * function does not return value
559
  * function does not return value
560
Remarks:
560
Remarks:
561
  * Offset and size are not checked for correctness.
561
  * Offset and size are not checked for correctness.
562
  * Color of each pixel is stored as 3-bytes value BBGGRR.
562
  * Color of each pixel is stored as 3-bytes value BBGGRR.
563
  * Pixels of the background image are written sequentially
563
  * Pixels of the background image are written sequentially
564
    from left to right, from up to down.
564
    from left to right, from up to down.
565
  * Offset of pixel with coordinates (x,y) is (x+y*xsize)*3.
565
  * Offset of pixel with coordinates (x,y) is (x+y*xsize)*3.
566
  * For update of the screen (after completion of a series of commands
566
  * For update of the screen (after completion of a series of commands
567
    working with a background) call subfunction 3.
567
    working with a background) call subfunction 3.
568
 
568
 
569
---------------------- Constants for registers: ----------------------
569
---------------------- Constants for registers: ----------------------
570
  eax - SF_BACKGROUND_SET (15)
570
  eax - SF_BACKGROUND_SET (15)
571
  ebx - SSF_IMAGE_BG (5)
571
  ebx - SSF_IMAGE_BG (5)
572
======================================================================
572
======================================================================
573
===================== Function 15, subfunction 6 =====================
573
===================== Function 15, subfunction 6 =====================
574
======== Map background data to the address space of process. ========
574
======== Map background data to the address space of process. ========
575
======================================================================
575
======================================================================
576
Parameters:
576
Parameters:
577
  * eax = 15 - function number
577
  * eax = 15 - function number
578
  * ebx = 6 - subfunction number
578
  * ebx = 6 - subfunction number
579
Returned value:
579
Returned value:
580
  * eax = pointer to background data, 0 if error
580
  * eax = pointer to background data, 0 if error
581
Remarks:
581
Remarks:
582
  * Mapped data are available for read and write.
582
  * Mapped data are available for read and write.
583
  * Size of background data is 3*xsize*ysize. The system blocks
583
  * Size of background data is 3*xsize*ysize. The system blocks
584
    changes of background sizes while process works with mapped data.
584
    changes of background sizes while process works with mapped data.
585
  * Color of each pixel is stored as 3-bytes value BBGGRR.
585
  * Color of each pixel is stored as 3-bytes value BBGGRR.
586
  * Pixels of the background image are written sequentially
586
  * Pixels of the background image are written sequentially
587
    from left to right, from up to down.
587
    from left to right, from up to down.
588
 
588
 
589
---------------------- Constants for registers: ----------------------
589
---------------------- Constants for registers: ----------------------
590
  eax - SF_BACKGROUND_SET (15)
590
  eax - SF_BACKGROUND_SET (15)
591
  ebx - SSF_MAP_BG (6)
591
  ebx - SSF_MAP_BG (6)
592
======================================================================
592
======================================================================
593
===== Function 15, subfunction 7 - close mapped background data. =====
593
===== Function 15, subfunction 7 - close mapped background data. =====
594
======================================================================
594
======================================================================
595
Parameters:
595
Parameters:
596
  * eax = 15 - function number
596
  * eax = 15 - function number
597
  * ebx = 7 - subfunction number
597
  * ebx = 7 - subfunction number
598
  * ecx = pointer to mapped data
598
  * ecx = pointer to mapped data
599
Returned value:
599
Returned value:
600
  * eax = 1 - success, 0 - error
600
  * eax = 1 - success, 0 - error
601
 
601
 
602
---------------------- Constants for registers: ----------------------
602
---------------------- Constants for registers: ----------------------
603
  eax - SF_BACKGROUND_SET (15)
603
  eax - SF_BACKGROUND_SET (15)
604
  ebx - SSF_UNMAP_BG (7)
604
  ebx - SSF_UNMAP_BG (7)
605
======================================================================
605
======================================================================
606
===================== Function 15, subfunction 8 =====================
606
===================== Function 15, subfunction 8 =====================
607
============= Get coordinates of last draw the background ============
607
============= Get coordinates of last draw the background ============
608
======================================================================
608
======================================================================
609
Parameters:
609
Parameters:
610
  * eax = 15 - function number
610
  * eax = 15 - function number
611
  * ebx = 8 - subfunction number
611
  * ebx = 8 - subfunction number
612
Returned value:
612
Returned value:
613
  * eax = [left]*65536 + [right]
613
  * eax = [left]*65536 + [right]
614
  * ebx = [top]*65536 + [bottom]
614
  * ebx = [top]*65536 + [bottom]
615
Remarks:
615
Remarks:
616
  * (left,top) are coordinates of the left upper corner,
616
  * (left,top) are coordinates of the left upper corner,
617
    (right,bottom) are coordinates of the right lower one.
617
    (right,bottom) are coordinates of the right lower one.
618
  * For receiving more reliable information, call the function
618
  * For receiving more reliable information, call the function
619
    immediately after the event:
619
    immediately after the event:
620
             5 = kernel finished redrawing of the desktop background
620
             5 = kernel finished redrawing of the desktop background
621
 
621
 
622
---------------------- Constants for registers: ----------------------
622
---------------------- Constants for registers: ----------------------
623
  eax - SF_BACKGROUND_SET (15)
623
  eax - SF_BACKGROUND_SET (15)
624
  ebx - SSF_LAST_DRAW (8)
624
  ebx - SSF_LAST_DRAW (8)
625
======================================================================
625
======================================================================
626
===================== Function 15, subfunction 9 =====================
626
===================== Function 15, subfunction 9 =====================
627
============= Redraws a rectangular part of the background ===========
627
============= Redraws a rectangular part of the background ===========
628
======================================================================
628
======================================================================
629
Parameters:
629
Parameters:
630
  * eax = 15 - function number
630
  * eax = 15 - function number
631
  * ebx = 9 - subfunction number
631
  * ebx = 9 - subfunction number
632
  * ecx = [left]*65536 + [right]
632
  * ecx = [left]*65536 + [right]
633
  * edx = [top]*65536 + [bottom]
633
  * edx = [top]*65536 + [bottom]
634
Returned value:
634
Returned value:
635
  * function does not return value
635
  * function does not return value
636
Remarks:
636
Remarks:
637
  * (left,top) are coordinates of the left upper corner,
637
  * (left,top) are coordinates of the left upper corner,
638
    (right,bottom) are coordinates of the right lower one.
638
    (right,bottom) are coordinates of the right lower one.
639
  * If parameters are set incorrectly then background is not redrawn.
639
  * If parameters are set incorrectly then background is not redrawn.
640
 
640
 
641
---------------------- Constants for registers: ----------------------
641
---------------------- Constants for registers: ----------------------
642
  eax - SF_BACKGROUND_SET (15)
642
  eax - SF_BACKGROUND_SET (15)
643
  ebx - SSF_REDRAW_RECT (9)
643
  ebx - SSF_REDRAW_RECT (9)
644
======================================================================
644
======================================================================
645
=============== Function 16 - save ramdisk on a floppy. ==============
645
=============== Function 16 - save ramdisk on a floppy. ==============
646
======================================================================
646
======================================================================
647
Parameters:
647
Parameters:
648
  * eax = 16 - function number
648
  * eax = 16 - function number
649
  * ebx = 1 or ebx = 2 - on which floppy save
649
  * ebx = 1 or ebx = 2 - on which floppy save
650
Returned value:
650
Returned value:
651
  * eax = 0 - success
651
  * eax = 0 - success
652
  * eax = 1 - error
652
  * eax = 1 - error
653
 
653
 
654
---------------------- Constants for registers: ----------------------
654
---------------------- Constants for registers: ----------------------
655
  eax - SF_RD_TO_FLOPPY (16)
655
  eax - SF_RD_TO_FLOPPY (16)
656
======================================================================
656
======================================================================
657
======= Function 17 - get the identifier of the pressed button. ======
657
======= Function 17 - get the identifier of the pressed button. ======
658
======================================================================
658
======================================================================
659
Takes away the code of the pressed button from the buffer.
659
Takes away the code of the pressed button from the buffer.
660
Parameters:
660
Parameters:
661
  * eax = 17 - function number
661
  * eax = 17 - function number
662
Returned value:
662
Returned value:
663
  * if the buffer is empty, function returns eax=1
663
  * if the buffer is empty, function returns eax=1
664
  * if the buffer is not empty:
664
  * if the buffer is not empty:
665
    * high 24 bits of eax contain button identifier (in particular,
665
    * high 24 bits of eax contain button identifier (in particular,
666
      ah contains low byte of the identifier; if all buttons have
666
      ah contains low byte of the identifier; if all buttons have
667
      the identifier less than 256, ah is enough to distinguish)
667
      the identifier less than 256, ah is enough to distinguish)
668
    * al = 0 - the button was pressed with left mouse button
668
    * al = 0 - the button was pressed with left mouse button
669
    * al = bit corresponding to used mouse button otherwise
669
    * al = bit corresponding to used mouse button otherwise
670
Remarks:
670
Remarks:
671
  * "Buffer" keeps only one button, at pressing the new button the
671
  * "Buffer" keeps only one button, at pressing the new button the
672
    information about old is lost.
672
    information about old is lost.
673
  * The call of this function by an application with inactive window
673
  * The call of this function by an application with inactive window
674
    will return answer "buffer is empty".
674
    will return answer "buffer is empty".
675
  * Returned value for al corresponds to the state of mouse buttons
675
  * Returned value for al corresponds to the state of mouse buttons
676
    as in subfunction 2 of function 37 at the beginning
676
    as in subfunction 2 of function 37 at the beginning
677
    of button press, excluding lower bit, which is cleared.
677
    of button press, excluding lower bit, which is cleared.
678
 
678
 
679
---------------------- Constants for registers: ----------------------
679
---------------------- Constants for registers: ----------------------
680
  eax - SF_GET_BUTTON (17)
680
  eax - SF_GET_BUTTON (17)
681
======================================================================
681
======================================================================
682
===================== Function 18, subfunction 1 =====================
682
===================== Function 18, subfunction 1 =====================
683
============= Make deactive the window of the given thread. ==========
683
============= Make deactive the window of the given thread. ==========
684
======================================================================
684
======================================================================
685
Parameters:
685
Parameters:
686
  * eax = 18 - function number
686
  * eax = 18 - function number
687
  * ebx = 1 - subfunction number
687
  * ebx = 1 - subfunction number
688
  * ecx = number of the thread slot
688
  * ecx = number of the thread slot
689
Returned value:
689
Returned value:
690
  * function does not return value
690
  * function does not return value
691
 
691
 
692
---------------------- Constants for registers: ----------------------
692
---------------------- Constants for registers: ----------------------
693
  eax - SF_SYSTEM (18)
693
  eax - SF_SYSTEM (18)
694
  ebx - SSF_UNFOCUS_WINDOW (1)
694
  ebx - SSF_UNFOCUS_WINDOW (1)
695
======================================================================
695
======================================================================
696
= Function 18, subfunction 2 - terminate process/thread by the slot. =
696
= Function 18, subfunction 2 - terminate process/thread by the slot. =
697
======================================================================
697
======================================================================
698
Parameters:
698
Parameters:
699
  * eax = 18 - function number
699
  * eax = 18 - function number
700
  * ebx = 2 - subfunction number
700
  * ebx = 2 - subfunction number
701
  * ecx = number of the slot of process/thread
701
  * ecx = number of the slot of process/thread
702
Returned value:
702
Returned value:
703
  * function does not return value
703
  * function does not return value
704
Remarks:
704
Remarks:
705
  * It is impossible to terminate system thread OS/IDLE (with
705
  * It is impossible to terminate system thread OS/IDLE (with
706
    number of the slot 1),
706
    number of the slot 1),
707
    it is possible to terminate any normal process/thread.
707
    it is possible to terminate any normal process/thread.
708
  * See also subfunction 18 - terminate
708
  * See also subfunction 18 - terminate
709
    process/thread by the identifier.
709
    process/thread by the identifier.
710
 
710
 
711
---------------------- Constants for registers: ----------------------
711
---------------------- Constants for registers: ----------------------
712
  eax - SF_SYSTEM (18)
712
  eax - SF_SYSTEM (18)
713
  ebx - SSF_TERMINATE_THREAD (2)
713
  ebx - SSF_TERMINATE_THREAD (2)
714
======================================================================
714
======================================================================
715
===================== Function 18, subfunction 3 =====================
715
===================== Function 18, subfunction 3 =====================
716
============= Make active the window of the given thread. ============
716
============= Make active the window of the given thread. ============
717
======================================================================
717
======================================================================
718
Parameters:
718
Parameters:
719
  * eax = 18 - function number
719
  * eax = 18 - function number
720
  * ebx = 3 - subfunction number
720
  * ebx = 3 - subfunction number
721
  * ecx = number of the thread slot
721
  * ecx = number of the thread slot
722
Returned value:
722
Returned value:
723
  * function does not return value
723
  * function does not return value
724
Remarks:
724
Remarks:
725
  * If correct, but nonexistent slot is given,
725
  * If correct, but nonexistent slot is given,
726
    some window is made active.
726
    some window is made active.
727
  * To find out, which window is active, use subfunction 7.
727
  * To find out, which window is active, use subfunction 7.
728
 
728
 
729
---------------------- Constants for registers: ----------------------
729
---------------------- Constants for registers: ----------------------
730
  eax - SF_SYSTEM (18)
730
  eax - SF_SYSTEM (18)
731
  ebx - SSF_FOCUS_WINDOW (3)
731
  ebx - SSF_FOCUS_WINDOW (3)
732
======================================================================
732
======================================================================
733
===================== Function 18, subfunction 4 =====================
733
===================== Function 18, subfunction 4 =====================
734
=========== Get counter of idle time units per one second. ===========
734
=========== Get counter of idle time units per one second. ===========
735
======================================================================
735
======================================================================
736
Idle time units are units, in which the processor stands idle
736
Idle time units are units, in which the processor stands idle
737
in waiting for interrupt (in the command 'hlt').
737
in waiting for interrupt (in the command 'hlt').
738
 
738
 
739
Parameters:
739
Parameters:
740
  * eax = 18 - function number
740
  * eax = 18 - function number
741
  * ebx = 4 - subfunction number
741
  * ebx = 4 - subfunction number
742
Returned value:
742
Returned value:
743
  * eax = value of the counter of idle time units per one second
743
  * eax = value of the counter of idle time units per one second
744
 
744
 
745
---------------------- Constants for registers: ----------------------
745
---------------------- Constants for registers: ----------------------
746
  eax - SF_SYSTEM (18)
746
  eax - SF_SYSTEM (18)
747
  ebx - SSF_GET_IDLE_COUNT (4)
747
  ebx - SSF_GET_IDLE_COUNT (4)
748
======================================================================
748
======================================================================
749
========== Function 18, subfunction 5 - get CPU clock rate. ==========
749
========== Function 18, subfunction 5 - get CPU clock rate. ==========
750
======================================================================
750
======================================================================
751
Parameters:
751
Parameters:
752
  * eax = 18 - function number
752
  * eax = 18 - function number
753
  * ebx = 5 - subfunction number
753
  * ebx = 5 - subfunction number
754
Returned value:
754
Returned value:
755
  * eax = clock rate (modulo 2^32 clock ticks = 4GHz)
755
  * eax = clock rate (modulo 2^32 clock ticks = 4GHz)
756
 
756
 
757
---------------------- Constants for registers: ----------------------
757
---------------------- Constants for registers: ----------------------
758
  eax - SF_SYSTEM (18)
758
  eax - SF_SYSTEM (18)
759
  ebx - SSF_GET_CPU_FREQUENCY (5)
759
  ebx - SSF_GET_CPU_FREQUENCY (5)
760
======================================================================
760
======================================================================
761
 Function 18, subfunction 6 - save ramdisk to the file on hard drive.
761
 Function 18, subfunction 6 - save ramdisk to the file on hard drive.
762
======================================================================
762
======================================================================
763
Parameters:
763
Parameters:
764
  * eax = 18 - function number
764
  * eax = 18 - function number
765
  * ebx = 6 - subfunction number
765
  * ebx = 6 - subfunction number
766
  * ecx = pointer to the full path to file
766
  * ecx = pointer to the full path to file
767
    (for example, "/hd0/1/kolibri/kolibri.img")
767
    (for example, "/hd0/1/kolibri/kolibri.img")
768
Returned value:
768
Returned value:
769
  * eax = 0 - success
769
  * eax = 0 - success
770
  * else eax = error code of the file system
770
  * else eax = error code of the file system
771
Remarks:
771
Remarks:
772
  * All folders in the given path must exist, otherwise function
772
  * All folders in the given path must exist, otherwise function
773
    returns value 5, "file not found".
773
    returns value 5, "file not found".
774
 
774
 
775
---------------------- Constants for registers: ----------------------
775
---------------------- Constants for registers: ----------------------
776
  eax - SF_SYSTEM (18)
776
  eax - SF_SYSTEM (18)
777
  ebx - SSF_RD_TO_HDD (6)
777
  ebx - SSF_RD_TO_HDD (6)
778
======================================================================
778
======================================================================
779
=========== Function 18, subfunction 7 - get active window. ==========
779
=========== Function 18, subfunction 7 - get active window. ==========
780
======================================================================
780
======================================================================
781
Parameters:
781
Parameters:
782
  * eax = 18 - function number
782
  * eax = 18 - function number
783
  * ebx = 7 - subfunction number
783
  * ebx = 7 - subfunction number
784
Returned value:
784
Returned value:
785
  * eax = number of the active window
785
  * eax = number of the active window
786
    (number of the slot of the thread with active window)
786
    (number of the slot of the thread with active window)
787
Remarks:
787
Remarks:
788
  * Active window is at the top of the window stack and receives
788
  * Active window is at the top of the window stack and receives
789
    messages on all keyboard input.
789
    messages on all keyboard input.
790
  * To make a window active, use subfunction 3.
790
  * To make a window active, use subfunction 3.
791
 
791
 
792
---------------------- Constants for registers: ----------------------
792
---------------------- Constants for registers: ----------------------
793
  eax - SF_SYSTEM (18)
793
  eax - SF_SYSTEM (18)
794
  ebx - SSF_GET_ACTIVE_WINDOW (7)
794
  ebx - SSF_GET_ACTIVE_WINDOW (7)
795
======================================================================
795
======================================================================
796
== Function 18, subfunction 8 - disable/enable the internal speaker. =
796
== Function 18, subfunction 8 - disable/enable the internal speaker. =
797
======================================================================
797
======================================================================
798
If speaker sound is disabled, all calls to subfunction 55 of
798
If speaker sound is disabled, all calls to subfunction 55 of
799
function 55 are ignored. If speaker sound is enabled,
799
function 55 are ignored. If speaker sound is enabled,
800
they are routed on builtin speaker.
800
they are routed on builtin speaker.
801
 
801
 
802
------------------- Subsubfunction 1 - get status. -------------------
802
------------------- Subsubfunction 1 - get status. -------------------
803
Parameters:
803
Parameters:
804
  * eax = 18 - function number
804
  * eax = 18 - function number
805
  * ebx = 8 - subfunction number
805
  * ebx = 8 - subfunction number
806
  * ecx = 1 - number of the subsubfunction
806
  * ecx = 1 - number of the subsubfunction
807
Returned value:
807
Returned value:
808
  * eax = 0 - speaker sound is enabled; 1 - disabled
808
  * eax = 0 - speaker sound is enabled; 1 - disabled
809
 
809
 
810
----------------- Subsubfunction 2 - toggle status. ------------------
810
----------------- Subsubfunction 2 - toggle status. ------------------
811
Toggles states of disable/enable.
811
Toggles states of disable/enable.
812
Parameters:
812
Parameters:
813
  * eax = 18 - function number
813
  * eax = 18 - function number
814
  * ebx = 8 - subfunction number
814
  * ebx = 8 - subfunction number
815
  * ecx = 2 - number of the subsubfunction
815
  * ecx = 2 - number of the subsubfunction
816
Returned value:
816
Returned value:
817
  * function does not return value
817
  * function does not return value
818
 
818
 
819
---------------------- Constants for registers: ----------------------
819
---------------------- Constants for registers: ----------------------
820
  eax - SF_SYSTEM (18)
820
  eax - SF_SYSTEM (18)
821
  ebx - SSF_SPEAKER (8)
821
  ebx - SSF_SPEAKER (8)
822
  ecx - SSSF_GET_STATE (1), SSSF_TOGGLE (2)
822
  ecx - SSSF_GET_STATE (1), SSSF_TOGGLE (2)
823
======================================================================
823
======================================================================
824
== Function 18, subfunction 9 - system shutdown with the parameter. ==
824
== Function 18, subfunction 9 - system shutdown with the parameter. ==
825
======================================================================
825
======================================================================
826
Parameters:
826
Parameters:
827
  * eax = 18 - function number
827
  * eax = 18 - function number
828
  * ebx = 9 - subfunction number
828
  * ebx = 9 - subfunction number
829
  * ecx = parameter:
829
  * ecx = parameter:
830
    * 2 = turn off computer
830
    * 2 = turn off computer
831
    * 3 = reboot computer
831
    * 3 = reboot computer
832
    * 4 = restart the kernel from the file 'kernel.mnt' on ramdisk
832
    * 4 = restart the kernel from the file 'kernel.mnt' on ramdisk
833
Returned value:
833
Returned value:
834
  * at incorrect ecx the registers do not change (i.e. eax=18)
834
  * at incorrect ecx the registers do not change (i.e. eax=18)
835
  * by correct call function always returns eax=0
835
  * by correct call function always returns eax=0
836
    as the tag of success
836
    as the tag of success
837
Remarks:
837
Remarks:
838
  * Do not rely on returned value by incorrect call, it can be
838
  * Do not rely on returned value by incorrect call, it can be
839
    changed in future versions of the kernel.
839
    changed in future versions of the kernel.
840
 
840
 
841
---------------------- Constants for registers: ----------------------
841
---------------------- Constants for registers: ----------------------
842
  eax - SF_SYSTEM (18)
842
  eax - SF_SYSTEM (18)
843
  ebx - SSF_SHUTDOWN (9)
843
  ebx - SSF_SHUTDOWN (9)
844
======================================================================
844
======================================================================
845
======= Function 18, subfunction 10 - minimize topmost window. =======
845
======= Function 18, subfunction 10 - minimize topmost window. =======
846
======================================================================
846
======================================================================
847
Minimizes the topmost (active) window.
847
Minimizes the topmost (active) window.
848
Parameters:
848
Parameters:
849
  * eax = 18 - function number
849
  * eax = 18 - function number
850
  * ebx = 10 - subfunction number
850
  * ebx = 10 - subfunction number
851
Returned value:
851
Returned value:
852
  * function does not return value
852
  * function does not return value
853
Remarks:
853
Remarks:
854
  * The minimized window from the point of view of function 9
854
  * The minimized window from the point of view of function 9
855
    keeps position and sizes.
855
    keeps position and sizes.
856
  * Restoring of an application window occurs at its activation by
856
  * Restoring of an application window occurs at its activation by
857
    subfunction 3.
857
    subfunction 3.
858
  * Usually there is no necessity to minimize/restore a window
858
  * Usually there is no necessity to minimize/restore a window
859
    explicitly: minimization of a window is carried out by the system
859
    explicitly: minimization of a window is carried out by the system
860
    at pressing the minimization button (for skinned windows
860
    at pressing the minimization button (for skinned windows
861
    it is defined automatically by function 0,
861
    it is defined automatically by function 0,
862
    for other windows it can be defined manually by function 8),
862
    for other windows it can be defined manually by function 8),
863
    restore of a window is done by the application '@taskbar'.
863
    restore of a window is done by the application '@taskbar'.
864
 
864
 
865
---------------------- Constants for registers: ----------------------
865
---------------------- Constants for registers: ----------------------
866
  eax - SF_SYSTEM (18)
866
  eax - SF_SYSTEM (18)
867
  ebx - SSF_MINIMIZE_WINDOW (10)
867
  ebx - SSF_MINIMIZE_WINDOW (10)
868
======================================================================
868
======================================================================
869
 Function 18, subfunction 11 - get information on the disk subsystem.
869
 Function 18, subfunction 11 - get information on the disk subsystem.
870
======================================================================
870
======================================================================
871
Parameters:
871
Parameters:
872
  * eax = 18 - function number
872
  * eax = 18 - function number
873
  * ebx = 11 - subfunction number
873
  * ebx = 11 - subfunction number
874
  * ecx = type of the table:
874
  * ecx = type of the table:
875
    * 1 = short version, 16 bytes
875
    * 1 = short version, 16 bytes
876
  * edx = pointer to the buffer (in the application) for the table
876
  * edx = pointer to the buffer (in the application) for the table
877
Returned value:
877
Returned value:
878
  * function does not return value
878
  * function does not return value
879
Format of the table: short version:
879
Format of the table: short version:
880
  * +0: byte: information about FDD's (drives for floppies),
880
  * +0: byte: information about FDD's (drives for floppies),
881
    AAAABBBB, where AAAA gives type of the first drive, BBBB -
881
    AAAABBBB, where AAAA gives type of the first drive, BBBB -
882
    of the second regarding to the following list:
882
    of the second regarding to the following list:
883
    * 0 = there is no drive
883
    * 0 = there is no drive
884
    * 1 = 360Kb, 5.25''
884
    * 1 = 360Kb, 5.25''
885
    * 2 = 1.2Mb, 5.25''
885
    * 2 = 1.2Mb, 5.25''
886
    * 3 = 720Kb, 3.5''
886
    * 3 = 720Kb, 3.5''
887
    * 4 = 1.44Mb, 3.5''
887
    * 4 = 1.44Mb, 3.5''
888
    * 5 = 2.88Mb, 3.5'' (such drives are not used anymore)
888
    * 5 = 2.88Mb, 3.5'' (such drives are not used anymore)
889
    For example, for the standard configuration from one 1.44-drive
889
    For example, for the standard configuration from one 1.44-drive
890
    here will be 40h, and for the case 1.2Mb on A: and 1.44Mb on B:
890
    here will be 40h, and for the case 1.2Mb on A: and 1.44Mb on B:
891
    the value is 24h.
891
    the value is 24h.
892
 
892
 
893
  First IDE controller:
893
  First IDE controller:
894
  * +1: byte: information about hard disks and CD-drives, AABBCCDD,
894
  * +1: byte: information about hard disks and CD-drives, AABBCCDD,
895
    where AA corresponds to the controller IDE0, ..., DD - IDE3:
895
    where AA corresponds to the controller IDE0, ..., DD - IDE3:
896
    * 0 = device not found
896
    * 0 = device not found
897
    * 1 = hard drive
897
    * 1 = hard drive
898
    * 2 = CD-drive
898
    * 2 = CD-drive
899
    For example, in the case HD on IDE0 and CD on IDE2
899
    For example, in the case HD on IDE0 and CD on IDE2
900
    this field contains 48h.
900
    this field contains 48h.
901
  * +2: 4 db: number of the retrieved partitions on hard disks
901
  * +2: 4 db: number of the retrieved partitions on hard disks
902
    at accordingly IDE0,...,IDE3.
902
    at accordingly IDE0,...,IDE3.
903
 
903
 
904
  Second IDE controller:
904
  Second IDE controller:
905
  * +6: byte: information about hard disks and CD-drives, AABBCCDD,
905
  * +6: byte: information about hard disks and CD-drives, AABBCCDD,
906
    where AA corresponds to the controller IDE4, ..., DD - IDE7:
906
    where AA corresponds to the controller IDE4, ..., DD - IDE7:
907
    * 0 = device not found
907
    * 0 = device not found
908
    * 1 = hard drive
908
    * 1 = hard drive
909
    * 2 = CD-drive
909
    * 2 = CD-drive
910
    For example, in the case HD on IDE4 and CD on IDE6
910
    For example, in the case HD on IDE4 and CD on IDE6
911
    this field contains 48h.
911
    this field contains 48h.
912
  * +7: 4 db: number of the retrieved partitions on hard disks
912
  * +7: 4 db: number of the retrieved partitions on hard disks
913
    at accordingly IDE4,...,IDE7.
913
    at accordingly IDE4,...,IDE7.
914
 
914
 
915
  Third IDE controller:
915
  Third IDE controller:
916
  * +11: byte: information about hard disks and CD-drives, AABBCCDD,
916
  * +11: byte: information about hard disks and CD-drives, AABBCCDD,
917
    where AA corresponds to the controller IDE8, ..., DD - IDE11:
917
    where AA corresponds to the controller IDE8, ..., DD - IDE11:
918
    * 0 = device not found
918
    * 0 = device not found
919
    * 1 = hard drive
919
    * 1 = hard drive
920
    * 2 = CD-drive
920
    * 2 = CD-drive
921
    For example, in the case HD on IDE8 and CD on IDE10
921
    For example, in the case HD on IDE8 and CD on IDE10
922
    this field contains 48h.
922
    this field contains 48h.
923
  * +12: 4 db: number of the retrieved partitions on hard disks
923
  * +12: 4 db: number of the retrieved partitions on hard disks
924
    at accordingly IDE8,...,IDE11.
924
    at accordingly IDE8,...,IDE11.
925
 
925
 
926
    If the hard disk on IDEx is absent, appropriate byte is zero,
926
    If the hard disk on IDEx is absent, appropriate byte is zero,
927
    otherwise it shows number of the recognized partitions, which
927
    otherwise it shows number of the recognized partitions, which
928
    can be not presented (if the drive is not formatted or if
928
    can be not presented (if the drive is not formatted or if
929
    the file system is not supported). Current version of the kernel
929
    the file system is not supported). Current version of the kernel
930
    supports only FAT12/16/32, NTFS, ext2/3/4 and XFS for hard disks.
930
    supports only FAT12/16/32, NTFS, ext2/3/4 and XFS for hard disks.
931
 
931
 
932
Remarks:
932
Remarks:
933
  * The table can be used for obtaining the information about
933
  * The table can be used for obtaining the information about
934
    available devices.
934
    available devices.
935
 
935
 
936
---------------------- Constants for registers: ----------------------
936
---------------------- Constants for registers: ----------------------
937
  eax - SF_SYSTEM (18)
937
  eax - SF_SYSTEM (18)
938
  ebx - SSF_INFO_DISC_SYS (11)
938
  ebx - SSF_INFO_DISC_SYS (11)
939
======================================================================
939
======================================================================
940
========== Function 18, subfunction 13 - get kernel version. =========
940
========== Function 18, subfunction 13 - get kernel version. =========
941
======================================================================
941
======================================================================
942
Parameters:
942
Parameters:
943
  * eax = 18 - function number
943
  * eax = 18 - function number
944
  * ebx = 13 - subfunction number
944
  * ebx = 13 - subfunction number
945
  * ecx = pointer to the buffer (not less than 16 bytes), where
945
  * ecx = pointer to the buffer (not less than 16 bytes), where
946
    the information will be placed
946
    the information will be placed
947
Returned value:
947
Returned value:
948
  * function does not return value
948
  * function does not return value
949
Structure of the buffer:
949
Structure of the buffer:
950
db a,b,c,d for version a.b.c.d
950
db a,b,c,d for version a.b.c.d
951
db 0: reserved
951
db 0: reserved
952
dd REV - kernel SVN revision number
952
dd REV - kernel SVN revision number
953
For Kolibri 0.7.7.0+ kernel:
953
For Kolibri 0.7.7.0+ kernel:
954
db 0,7,7,0
954
db 0,7,7,0
955
db 0
955
db 0
956
dd 1675
956
dd 1675
957
 
957
 
958
---------------------- Constants for registers: ----------------------
958
---------------------- Constants for registers: ----------------------
959
  eax - SF_SYSTEM (18)
959
  eax - SF_SYSTEM (18)
960
  ebx - SSF_KERNEL_VERSION (13)
960
  ebx - SSF_KERNEL_VERSION (13)
961
======================================================================
961
======================================================================
962
======= Function 18, subfunction 14 - wait for screen retrace. =======
962
======= Function 18, subfunction 14 - wait for screen retrace. =======
963
======================================================================
963
======================================================================
964
Waits for the beginning of retrace of the scanning ray of the screen
964
Waits for the beginning of retrace of the scanning ray of the screen
965
monitor.
965
monitor.
966
Parameters:
966
Parameters:
967
  * eax = 18 - function number
967
  * eax = 18 - function number
968
  * ebx = 14 - subfunction number
968
  * ebx = 14 - subfunction number
969
Returned value:
969
Returned value:
970
  * eax = 0 as the tag of success
970
  * eax = 0 as the tag of success
971
Remarks:
971
Remarks:
972
  * Function is intended only for active high-efficiency graphics
972
  * Function is intended only for active high-efficiency graphics
973
    applications; is used for smooth output of a graphics.
973
    applications; is used for smooth output of a graphics.
974
 
974
 
975
---------------------- Constants for registers: ----------------------
975
---------------------- Constants for registers: ----------------------
976
  eax - SF_SYSTEM (18)
976
  eax - SF_SYSTEM (18)
977
  ebx - SSF_WAIT_RETRACE (14)
977
  ebx - SSF_WAIT_RETRACE (14)
978
======================================================================
978
======================================================================
979
== Function 18, subfunction 15 - center mouse cursor on the screen. ==
979
== Function 18, subfunction 15 - center mouse cursor on the screen. ==
980
======================================================================
980
======================================================================
981
Parameters:
981
Parameters:
982
  * eax = 18 - function number
982
  * eax = 18 - function number
983
  * ebx = 15 - subfunction number
983
  * ebx = 15 - subfunction number
984
Returned value:
984
Returned value:
985
  * eax = 0 as the tag of success
985
  * eax = 0 as the tag of success
986
 
986
 
987
---------------------- Constants for registers: ----------------------
987
---------------------- Constants for registers: ----------------------
988
  eax - SF_SYSTEM (18)
988
  eax - SF_SYSTEM (18)
989
  ebx - SSF_CURSOR_CENTER (15)
989
  ebx - SSF_CURSOR_CENTER (15)
990
======================================================================
990
======================================================================
991
========= Function 18, subfunction 16 - get size of free RAM. ========
991
========= Function 18, subfunction 16 - get size of free RAM. ========
992
======================================================================
992
======================================================================
993
Parameters:
993
Parameters:
994
  * eax = 18 - function number
994
  * eax = 18 - function number
995
  * ebx = 16 - subfunction number
995
  * ebx = 16 - subfunction number
996
Returned value:
996
Returned value:
997
  * eax = size of free memory in kilobytes
997
  * eax = size of free memory in kilobytes
998
 
998
 
999
---------------------- Constants for registers: ----------------------
999
---------------------- Constants for registers: ----------------------
1000
  eax - SF_SYSTEM (18)
1000
  eax - SF_SYSTEM (18)
1001
  ebx - SSF_GET_FREE_RAM (16)
1001
  ebx - SSF_GET_FREE_RAM (16)
1002
======================================================================
1002
======================================================================
1003
======== Function 18, subfunction 17 - get full amount of RAM. =======
1003
======== Function 18, subfunction 17 - get full amount of RAM. =======
1004
======================================================================
1004
======================================================================
1005
Parameters:
1005
Parameters:
1006
  * eax = 18 - function number
1006
  * eax = 18 - function number
1007
  * ebx = 17 - subfunction number
1007
  * ebx = 17 - subfunction number
1008
Returned value:
1008
Returned value:
1009
  * eax = total size of existing memory in kilobytes
1009
  * eax = total size of existing memory in kilobytes
1010
 
1010
 
1011
---------------------- Constants for registers: ----------------------
1011
---------------------- Constants for registers: ----------------------
1012
  eax - SF_SYSTEM (18)
1012
  eax - SF_SYSTEM (18)
1013
  ebx - SSF_GET_TOTAL_RAM (17)
1013
  ebx - SSF_GET_TOTAL_RAM (17)
1014
======================================================================
1014
======================================================================
1015
===================== Function 18, subfunction 18 ====================
1015
===================== Function 18, subfunction 18 ====================
1016
============= Terminate process/thread by the identifier. ============
1016
============= Terminate process/thread by the identifier. ============
1017
======================================================================
1017
======================================================================
1018
Parameters:
1018
Parameters:
1019
  * eax = 18 - function number
1019
  * eax = 18 - function number
1020
  * ebx = 18 - subfunction number
1020
  * ebx = 18 - subfunction number
1021
  * ecx = identifer of process/thread (PID/TID)
1021
  * ecx = identifer of process/thread (PID/TID)
1022
Returned value:
1022
Returned value:
1023
  * eax = 0 - success
1023
  * eax = 0 - success
1024
  * eax = -1 - error (process is not found or is system)
1024
  * eax = -1 - error (process is not found or is system)
1025
Remarks:
1025
Remarks:
1026
  * It is impossible to terminate system thread OS/IDLE (identifier
1026
  * It is impossible to terminate system thread OS/IDLE (identifier
1027
    1), it is possible to terminate any normal process/thread.
1027
    1), it is possible to terminate any normal process/thread.
1028
  * See also subfunction 2 - terminate
1028
  * See also subfunction 2 - terminate
1029
    process/thread by given slot.
1029
    process/thread by given slot.
1030
 
1030
 
1031
---------------------- Constants for registers: ----------------------
1031
---------------------- Constants for registers: ----------------------
1032
  eax - SF_SYSTEM (18)
1032
  eax - SF_SYSTEM (18)
1033
  ebx - SSF_TERMINATE_THREAD_ID (18)
1033
  ebx - SSF_TERMINATE_THREAD_ID (18)
1034
======================================================================
1034
======================================================================
1035
======== Function 18, subfunction 19 - get/set mouse features. =======
1035
======== Function 18, subfunction 19 - get/set mouse features. =======
1036
======================================================================
1036
======================================================================
1037
 
1037
 
1038
---------------- Subsubfunction 0 - get mouse speed. -----------------
1038
---------------- Subsubfunction 0 - get mouse speed. -----------------
1039
Parameters:
1039
Parameters:
1040
  * eax = 18 - function number
1040
  * eax = 18 - function number
1041
  * ebx = 19 - subfunction number
1041
  * ebx = 19 - subfunction number
1042
  * ecx = 0 - subsubfunction number
1042
  * ecx = 0 - subsubfunction number
1043
Returned value:
1043
Returned value:
1044
  * eax = current speed divider
1044
  * eax = current speed divider
1045
 
1045
 
1046
---------------- Subsubfunction 1 - set mouse speed. -----------------
1046
---------------- Subsubfunction 1 - set mouse speed. -----------------
1047
Parameters:
1047
Parameters:
1048
  * eax = 18 - function number
1048
  * eax = 18 - function number
1049
  * ebx = 19 - subfunction number
1049
  * ebx = 19 - subfunction number
1050
  * ecx = 1 - subsubfunction number
1050
  * ecx = 1 - subsubfunction number
1051
  * edx = new value for speed divider
1051
  * edx = new value for speed divider
1052
Returned value:
1052
Returned value:
1053
  * function does not return value
1053
  * function does not return value
1054
 
1054
 
1055
Remark: recommended speed divider = 4
1055
Remark: recommended speed divider = 4
1056
 
1056
 
1057
-------------- Subsubfunction 2 - get mouse sensitivity --------------
1057
-------------- Subsubfunction 2 - get mouse sensitivity --------------
1058
Parameters:
1058
Parameters:
1059
  * eax = 18 - function number
1059
  * eax = 18 - function number
1060
  * ebx = 19 - subfunction number
1060
  * ebx = 19 - subfunction number
1061
  * ecx = 2 - subsubfunction number
1061
  * ecx = 2 - subsubfunction number
1062
Returned value:
1062
Returned value:
1063
  * eax = current sensitivity
1063
  * eax = current sensitivity
1064
 
1064
 
1065
-------------- Subsubfunction 3 - set mouse sensitivity --------------
1065
-------------- Subsubfunction 3 - set mouse sensitivity --------------
1066
Parameters:
1066
Parameters:
1067
  * eax = 18 - function number
1067
  * eax = 18 - function number
1068
  * ebx = 19 - subfunction number
1068
  * ebx = 19 - subfunction number
1069
  * ecx = 3 - subsubfunction number
1069
  * ecx = 3 - subsubfunction number
1070
  * edx = new value for sensitivity
1070
  * edx = new value for sensitivity
1071
Returned value:
1071
Returned value:
1072
  * function does not return value
1072
  * function does not return value
1073
 
1073
 
1074
Remark: recommended sensitivity = 3
1074
Remark: recommended sensitivity = 3
1075
 
1075
 
1076
----------- Subsubfunction 4 - set mouse pointer position. -----------
1076
----------- Subsubfunction 4 - set mouse pointer position. -----------
1077
Parameters:
1077
Parameters:
1078
  * eax = 18 - function number
1078
  * eax = 18 - function number
1079
  * ebx = 19 - subfunction number
1079
  * ebx = 19 - subfunction number
1080
  * ecx = 4 - subsubfunction number
1080
  * ecx = 4 - subsubfunction number
1081
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1081
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1082
Returned value:
1082
Returned value:
1083
  * function does not return value
1083
  * function does not return value
1084
 
1084
 
1085
-------- Subsubfunction 5 - simulate state of mouse buttons. ---------
1085
-------- Subsubfunction 5 - simulate state of mouse buttons. ---------
1086
Parameters:
1086
Parameters:
1087
  * eax = 18 - function number
1087
  * eax = 18 - function number
1088
  * ebx = 19 - subfunction number
1088
  * ebx = 19 - subfunction number
1089
  * ecx = 5 - subsubfunction number
1089
  * ecx = 5 - subsubfunction number
1090
  * edx = information about emulated state of mouse buttons:
1090
  * edx = information about emulated state of mouse buttons:
1091
    (same as return value in subfunction 2 of function 37)
1091
    (same as return value in subfunction 2 of function 37)
1092
    * bit 0 is set = left button is pressed
1092
    * bit 0 is set = left button is pressed
1093
    * bit 1 is set = right button is pressed
1093
    * bit 1 is set = right button is pressed
1094
    * bit 2 is set = middle button is pressed
1094
    * bit 2 is set = middle button is pressed
1095
    * bit 3 is set = 4th button is pressed
1095
    * bit 3 is set = 4th button is pressed
1096
    * bit 4 is set = 5th button is pressed
1096
    * bit 4 is set = 5th button is pressed
1097
Returned value:
1097
Returned value:
1098
  * function does not return value
1098
  * function does not return value
1099
 
1099
 
1100
-------------- Subsubfunction 6 - get doubleclick delay. -------------
1100
-------------- Subsubfunction 6 - get doubleclick delay. -------------
1101
Parameters:
1101
Parameters:
1102
  * eax = 18 - function number
1102
  * eax = 18 - function number
1103
  * ebx = 19 - subfunction number
1103
  * ebx = 19 - subfunction number
1104
  * ecx = 6 - subsubfunction number
1104
  * ecx = 6 - subsubfunction number
1105
Returned value:
1105
Returned value:
1106
  * eax = current doubleclick delay (100 = 1 second)
1106
  * eax = current doubleclick delay (100 = 1 second)
1107
 
1107
 
1108
-------------- Subsubfunction 7 - set doubleclick delay. -------------
1108
-------------- Subsubfunction 7 - set doubleclick delay. -------------
1109
Parameters:
1109
Parameters:
1110
  * eax = 18 - function number
1110
  * eax = 18 - function number
1111
  * ebx = 19 - subfunction number
1111
  * ebx = 19 - subfunction number
1112
  * ecx = 7 - subsubfunction number
1112
  * ecx = 7 - subsubfunction number
1113
  * dl  = new value for doubleclick delay (100 = 1 second)
1113
  * dl  = new value for doubleclick delay (100 = 1 second)
1114
Returned value:
1114
Returned value:
1115
  * function does not return value
1115
  * function does not return value
1116
 
1116
 
1117
Remark: mouse settings can be modified in the application mouse_cfg.
1117
Remark: mouse settings can be modified in the application mouse_cfg.
1118
 
1118
 
1119
---------------------- Constants for registers: ----------------------
1119
---------------------- Constants for registers: ----------------------
1120
  eax - SF_SYSTEM (18)
1120
  eax - SF_SYSTEM (18)
1121
  ebx - SSF_MOUSE_SETTINGS (19)
1121
  ebx - SSF_MOUSE_SETTINGS (19)
1122
  ecx - SSSF_GET_SPEED (0), SSSF_SET_SPEED (1), SSSF_GET_SPEEDUP (2),
1122
  ecx - SSSF_GET_SPEED (0), SSSF_SET_SPEED (1), SSSF_GET_SPEEDUP (2),
1123
    SSSF_SET_SPEEDUP (3), SSSF_SET_POS (4), SSSF_SET_BUTTON (5),
1123
    SSSF_SET_SPEEDUP (3), SSSF_SET_POS (4), SSSF_SET_BUTTON (5),
1124
    SSSF_GET_DOUBLE_CLICK_DELAY (6), SSSF_SET_DOUBLE_CLICK_DELAY (7)
1124
    SSSF_GET_DOUBLE_CLICK_DELAY (6), SSSF_SET_DOUBLE_CLICK_DELAY (7)
1125
======================================================================
1125
======================================================================
1126
======== Function 18, subfunction 20 - get information on RAM. =======
1126
======== Function 18, subfunction 20 - get information on RAM. =======
1127
======================================================================
1127
======================================================================
1128
Parameters:
1128
Parameters:
1129
  * eax = 18 - function number
1129
  * eax = 18 - function number
1130
  * ebx = 20 - subfunction number
1130
  * ebx = 20 - subfunction number
1131
  * ecx = pointer to the buffer for information (36 bytes)
1131
  * ecx = pointer to the buffer for information (36 bytes)
1132
Returned value:
1132
Returned value:
1133
  * eax = total size of existing RAM in pages
1133
  * eax = total size of existing RAM in pages
1134
    or -1 if error has occured
1134
    or -1 if error has occured
1135
  * buffer pointed to by ecx contains the following information:
1135
  * buffer pointed to by ecx contains the following information:
1136
    * +0:  dword: total size of existing RAM in pages
1136
    * +0:  dword: total size of existing RAM in pages
1137
    * +4:  dword: size of free RAM in pages
1137
    * +4:  dword: size of free RAM in pages
1138
    * +8:  dword: number of page faults (exceptions #PF)
1138
    * +8:  dword: number of page faults (exceptions #PF)
1139
                 in applications
1139
                 in applications
1140
    * +12: dword: size of kernel heap in bytes
1140
    * +12: dword: size of kernel heap in bytes
1141
    * +16: dword: free in kernel heap in bytes
1141
    * +16: dword: free in kernel heap in bytes
1142
    * +20: dword: total number of memory blocks in kernel heap
1142
    * +20: dword: total number of memory blocks in kernel heap
1143
    * +24: dword: number of free memory blocks in kernel heap
1143
    * +24: dword: number of free memory blocks in kernel heap
1144
    * +28: dword: size of maximum free block in kernel heap
1144
    * +28: dword: size of maximum free block in kernel heap
1145
                 (reserved)
1145
                 (reserved)
1146
    * +32: dword: size of maximum allocated block in kernel heap
1146
    * +32: dword: size of maximum allocated block in kernel heap
1147
                 (reserved)
1147
                 (reserved)
1148
 
1148
 
1149
---------------------- Constants for registers: ----------------------
1149
---------------------- Constants for registers: ----------------------
1150
  eax - SF_SYSTEM (18)
1150
  eax - SF_SYSTEM (18)
1151
  ebx - SSF_GET_RAM_INFO (20)
1151
  ebx - SSF_GET_RAM_INFO (20)
1152
======================================================================
1152
======================================================================
1153
===================== Function 18, subfunction 21 ====================
1153
===================== Function 18, subfunction 21 ====================
1154
======== Get slot number of process/thread by the identifier. ========
1154
======== Get slot number of process/thread by the identifier. ========
1155
======================================================================
1155
======================================================================
1156
Parameters:
1156
Parameters:
1157
  * eax = 18 - function number
1157
  * eax = 18 - function number
1158
  * ebx = 21 - subfunction number
1158
  * ebx = 21 - subfunction number
1159
  * ecx = identifer of process/thread (PID/TID)
1159
  * ecx = identifer of process/thread (PID/TID)
1160
Returned value:
1160
Returned value:
1161
  * eax = 0 - error (invalid identifier)
1161
  * eax = 0 - error (invalid identifier)
1162
  * otherwise eax = slot number
1162
  * otherwise eax = slot number
1163
 
1163
 
1164
---------------------- Constants for registers: ----------------------
1164
---------------------- Constants for registers: ----------------------
1165
  eax - SF_SYSTEM (18)
1165
  eax - SF_SYSTEM (18)
1166
  ebx - SSF_GET_THREAD_SLOT (21)
1166
  ebx - SSF_GET_THREAD_SLOT (21)
1167
======================================================================
1167
======================================================================
1168
===================== Function 18, subfunction 22 ====================
1168
===================== Function 18, subfunction 22 ====================
1169
============== Operations with window of another thread. =============
1169
============== Operations with window of another thread. =============
1170
======================================================================
1170
======================================================================
1171
Parameters:
1171
Parameters:
1172
  * eax = 18 - function number
1172
  * eax = 18 - function number
1173
  * ebx = 22 - subfunction number
1173
  * ebx = 22 - subfunction number
1174
  * ecx = operation type:
1174
  * ecx = operation type:
1175
    * 0 = minimize window of the thread with given slot number
1175
    * 0 = minimize window of the thread with given slot number
1176
    * 1 = minimize window of the thread with given identifier
1176
    * 1 = minimize window of the thread with given identifier
1177
    * 2 = restore window of the thread with given slot number
1177
    * 2 = restore window of the thread with given slot number
1178
    * 3 = restore window of the thread with given identifier
1178
    * 3 = restore window of the thread with given identifier
1179
  * edx = parameter (slot number or PID/TID)
1179
  * edx = parameter (slot number or PID/TID)
1180
Returned value:
1180
Returned value:
1181
  * eax = 0 - success
1181
  * eax = 0 - success
1182
  * eax = -1 - error (invalid identifier)
1182
  * eax = -1 - error (invalid identifier)
1183
Remarks:
1183
Remarks:
1184
  * The thread can minimize its window with subfunction 10.
1184
  * The thread can minimize its window with subfunction 10.
1185
  * One can restore and activate window simultaneously with
1185
  * One can restore and activate window simultaneously with
1186
    subfunction 3 (which requires slot number).
1186
    subfunction 3 (which requires slot number).
1187
 
1187
 
1188
---------------------- Constants for registers: ----------------------
1188
---------------------- Constants for registers: ----------------------
1189
  eax - SF_SYSTEM (18)
1189
  eax - SF_SYSTEM (18)
1190
  ebx - SSF_FOREIGN_WINDOW (22)
1190
  ebx - SSF_FOREIGN_WINDOW (22)
1191
  ecx - SSSF_MINIMIZE (0), SSSF_MINIMIZE_ID (1), SSSF_RESTORE (2),
1191
  ecx - SSSF_MINIMIZE (0), SSSF_MINIMIZE_ID (1), SSSF_RESTORE (2),
1192
    SSSF_RESTORE_ID (3)
1192
    SSSF_RESTORE_ID (3)
1193
======================================================================
1193
======================================================================
1194
======== Function 18, subfunction 23 - minimize all windows. ==========
1194
======== Function 18, subfunction 23 - minimize all windows. ==========
1195
======================================================================
1195
======================================================================
1196
Parameters:
1196
Parameters:
1197
  * eax = 18 - function number
1197
  * eax = 18 - function number
1198
  * ebx = 23 - subfunction number
1198
  * ebx = 23 - subfunction number
1199
Returned value:
1199
Returned value:
1200
  * eax = 0 - all windows have been minimized before a function call
1200
  * eax = 0 - all windows have been minimized before a function call
1201
  * eax = N - number of windows minimized from function
1201
  * eax = N - number of windows minimized from function
1202
Remarks:
1202
Remarks:
1203
  * Window of special thread (name begin to symbol @) is not minimize.
1203
  * Window of special thread (name begin to symbol @) is not minimize.
1204
 
1204
 
1205
---------------------- Constants for registers: ----------------------
1205
---------------------- Constants for registers: ----------------------
1206
  eax - SF_SYSTEM (18)
1206
  eax - SF_SYSTEM (18)
1207
  ebx - SSF_MINIMIZE_ALL (23)
1207
  ebx - SSF_MINIMIZE_ALL (23)
1208
======================================================================
1208
======================================================================
1209
======= Function 18, subfunction 24 - set limits of screen. ==========
1209
======= Function 18, subfunction 24 - set limits of screen. ==========
1210
======================================================================
1210
======================================================================
1211
Parameters:
1211
Parameters:
1212
  * eax = 18 - function number
1212
  * eax = 18 - function number
1213
  * ebx = 24 - subfunction number
1213
  * ebx = 24 - subfunction number
1214
  * ecx = new X size
1214
  * ecx = new X size
1215
  * edx = new Y size
1215
  * edx = new Y size
1216
Returned value:
1216
Returned value:
1217
  * function does not return value
1217
  * function does not return value
1218
Remarks:
1218
Remarks:
1219
  * The function does not change the physical size of the video mode.
1219
  * The function does not change the physical size of the video mode.
1220
    It is designed for non-standard displays which display the image
1220
    It is designed for non-standard displays which display the image
1221
    partially.
1221
    partially.
1222
  * The sizes specified in the function should not exceed the sizes
1222
  * The sizes specified in the function should not exceed the sizes
1223
    of the current video mode, otherwise the function will not change
1223
    of the current video mode, otherwise the function will not change
1224
    anything.
1224
    anything.
1225
 
1225
 
1226
---------------------- Constants for registers: ----------------------
1226
---------------------- Constants for registers: ----------------------
1227
  eax - SF_SYSTEM (18)
1227
  eax - SF_SYSTEM (18)
1228
  ebx - SSF_SET_SCREEN_LIMITS (24)
1228
  ebx - SSF_SET_SCREEN_LIMITS (24)
1229
======================================================================
1229
======================================================================
1230
===================== Function 18, subfunction 25 ====================
1230
===================== Function 18, subfunction 25 ====================
1231
===== Control position of the window relative to other windows. ======
1231
===== Control position of the window relative to other windows. ======
1232
======================================================================
1232
======================================================================
1233
 
1233
 
1234
------------- Subsubfunction 1 - get position  -----------------------
1234
------------- Subsubfunction 1 - get position  -----------------------
1235
Parameters:
1235
Parameters:
1236
  * eax = 18 - function number
1236
  * eax = 18 - function number
1237
  * ebx = 25 - subfunction number
1237
  * ebx = 25 - subfunction number
1238
  * ecx = 1 - subsubfunction number
1238
  * ecx = 1 - subsubfunction number
1239
  * edx = -1(for current window) or PID application
1239
  * edx = -1(for current window) or PID application
1240
Returned value:
1240
Returned value:
1241
  * eax = one of the constants window position
1241
  * eax = one of the constants window position
1242
 
1242
 
1243
------------- Subsubfunction 2 - set position  -----------------------
1243
------------- Subsubfunction 2 - set position  -----------------------
1244
Parameters:
1244
Parameters:
1245
  * eax = 18 - function number
1245
  * eax = 18 - function number
1246
  * ebx = 25 - subfunction number
1246
  * ebx = 25 - subfunction number
1247
  * ecx = 2 - subsubfunction number
1247
  * ecx = 2 - subsubfunction number
1248
  * edx = -1(for current window) or PID application
1248
  * edx = -1(for current window) or PID application
1249
  * esi = new window position (one of the constants below)
1249
  * esi = new window position (one of the constants below)
1250
Returned value:
1250
Returned value:
1251
  * eax = 0 - error
1251
  * eax = 0 - error
1252
  * eax = 1 - success
1252
  * eax = 1 - success
1253
 
1253
 
1254
Constant position of the window relative to other windows:
1254
Constant position of the window relative to other windows:
1255
 ZPOS_DESKTOP     = -2 - on the background
1255
 ZPOS_DESKTOP     = -2 - on the background
1256
 ZPOS_ALWAYS_BACK = -1 - behind all the windows
1256
 ZPOS_ALWAYS_BACK = -1 - behind all the windows
1257
 ZPOS_NORMAL      = 0  - normal
1257
 ZPOS_NORMAL      = 0  - normal
1258
 ZPOS_ALWAYS_TOP  = 1  - on top of all windows
1258
 ZPOS_ALWAYS_TOP  = 1  - on top of all windows
1259
 
1259
 
1260
---------------------- Constants for registers: ----------------------
1260
---------------------- Constants for registers: ----------------------
1261
  eax - SF_SYSTEM (18)
1261
  eax - SF_SYSTEM (18)
1262
  ebx - SSF_WINDOW_BEHAVIOR (25)
1262
  ebx - SSF_WINDOW_BEHAVIOR (25)
1263
  ecx - SSSF_GET_WB (1), SSSF_SET_WB (2)
1263
  ecx - SSSF_GET_WB (1), SSSF_SET_WB (2)
1264
======================================================================
1264
======================================================================
1265
==================== Function 20 - MIDI interface. ===================
1265
==================== Function 20 - MIDI interface. ===================
1266
======================================================================
1266
======================================================================
1267
 
1267
 
1268
----------------------- Subfunction 1 - reset ------------------------
1268
----------------------- Subfunction 1 - reset ------------------------
1269
Parameters:
1269
Parameters:
1270
  * eax = 20 - function number
1270
  * eax = 20 - function number
1271
  * ebx = 1 - subfunction number
1271
  * ebx = 1 - subfunction number
1272
 
1272
 
1273
-------------------- Subfunction 2 - output byte ---------------------
1273
-------------------- Subfunction 2 - output byte ---------------------
1274
Parameters:
1274
Parameters:
1275
  * eax = 20 - function number
1275
  * eax = 20 - function number
1276
  * ebx = 2 - subfunction number
1276
  * ebx = 2 - subfunction number
1277
  * cl = byte for output
1277
  * cl = byte for output
1278
Returned value (is the same for both subfunctions):
1278
Returned value (is the same for both subfunctions):
1279
  * eax = 0 - success
1279
  * eax = 0 - success
1280
  * eax = 1 - base port is not defined
1280
  * eax = 1 - base port is not defined
1281
Remarks:
1281
Remarks:
1282
  * Previously the base port must be defined by
1282
  * Previously the base port must be defined by
1283
    subfunction 1 of function 21.
1283
    subfunction 1 of function 21.
1284
 
1284
 
1285
---------------------- Constants for registers: ----------------------
1285
---------------------- Constants for registers: ----------------------
1286
  eax - SF_MIDI (20)
1286
  eax - SF_MIDI (20)
1287
  ebx - SSF_RESET (1), SSF_OUTPUT (2)
1287
  ebx - SSF_RESET (1), SSF_OUTPUT (2)
1288
======================================================================
1288
======================================================================
1289
======== Function 21, subfunction 1 - set MPU MIDI base port. ========
1289
======== Function 21, subfunction 1 - set MPU MIDI base port. ========
1290
======================================================================
1290
======================================================================
1291
Parameters:
1291
Parameters:
1292
  * eax = 21 - function number
1292
  * eax = 21 - function number
1293
  * ebx = 1 - subfunction number
1293
  * ebx = 1 - subfunction number
1294
  * ecx = number of base port
1294
  * ecx = number of base port
1295
Returned value
1295
Returned value
1296
  * eax = 0 - success
1296
  * eax = 0 - success
1297
  * eax = -1 - erratic number of a port
1297
  * eax = -1 - erratic number of a port
1298
Remarks:
1298
Remarks:
1299
  * Number of a port must satisfy to conditions 0x100<=ecx<=0xFFFF.
1299
  * Number of a port must satisfy to conditions 0x100<=ecx<=0xFFFF.
1300
  * The installation of base is necessary for function 20.
1300
  * The installation of base is necessary for function 20.
1301
  * To get base port use subfunction 1 of function 26.
1301
  * To get base port use subfunction 1 of function 26.
1302
 
1302
 
1303
---------------------- Constants for registers: ----------------------
1303
---------------------- Constants for registers: ----------------------
1304
  eax - SF_SYSTEM_SET (21)
1304
  eax - SF_SYSTEM_SET (21)
1305
  ebx - SSF_MPU_MIDI_BASE (1)
1305
  ebx - SSF_MPU_MIDI_BASE (1)
1306
======================================================================
1306
======================================================================
1307
========== Function 21, subfunction 2 - set keyboard layout. =========
1307
========== Function 21, subfunction 2 - set keyboard layout. =========
1308
======================================================================
1308
======================================================================
1309
Keyboard layout is used to convert keyboard scancodes to ASCII-codes,
1309
Keyboard layout is used to convert keyboard scancodes to ASCII-codes,
1310
which will be read by function 2.
1310
which will be read by function 2.
1311
Parameters:
1311
Parameters:
1312
  * eax = 21 - function number
1312
  * eax = 21 - function number
1313
  * ebx = 2 - subfunction number
1313
  * ebx = 2 - subfunction number
1314
  * ecx = which layout to set:
1314
  * ecx = which layout to set:
1315
    * 1 = normal layout
1315
    * 1 = normal layout
1316
    * 2 = layout at pressed Shift
1316
    * 2 = layout at pressed Shift
1317
    * 3 = layout at pressed Alt
1317
    * 3 = layout at pressed Alt
1318
  * edx = pointer to layout - table of length 128 bytes
1318
  * edx = pointer to layout - table of length 128 bytes
1319
Or:
1319
Or:
1320
  * ecx = 9
1320
  * ecx = 9
1321
  * dx = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1321
  * dx = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1322
Returned value:
1322
Returned value:
1323
  * eax = 0 - success
1323
  * eax = 0 - success
1324
  * eax = 1 - incorrect parameter
1324
  * eax = 1 - incorrect parameter
1325
Remarks:
1325
Remarks:
1326
  * If Alt is pressed, the layout with Alt is used;
1326
  * If Alt is pressed, the layout with Alt is used;
1327
    if Alt is not pressed, but Shift is pressed,
1327
    if Alt is not pressed, but Shift is pressed,
1328
    the layout with Shift is used;
1328
    the layout with Shift is used;
1329
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1329
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1330
    layout is used and then from the code is subtracted 0x60;
1330
    layout is used and then from the code is subtracted 0x60;
1331
    if no control key is pressed, the normal layout is used.
1331
    if no control key is pressed, the normal layout is used.
1332
  * To get layout and country identifier use
1332
  * To get layout and country identifier use
1333
    subfunction 2 of function 26.
1333
    subfunction 2 of function 26.
1334
  * Country identifier is global system variable, which is not used
1334
  * Country identifier is global system variable, which is not used
1335
    by the kernel itself; however the application '@taskbar' displays
1335
    by the kernel itself; however the application '@taskbar' displays
1336
    the corresponding icon.
1336
    the corresponding icon.
1337
  * The application @taskbar switches layouts on user request.
1337
  * The application @taskbar switches layouts on user request.
1338
 
1338
 
1339
---------------------- Constants for registers: ----------------------
1339
---------------------- Constants for registers: ----------------------
1340
  eax - SF_SYSTEM_SET (21)
1340
  eax - SF_SYSTEM_SET (21)
1341
  ebx - SSF_KEYBOARD_LAYOUT (2)
1341
  ebx - SSF_KEYBOARD_LAYOUT (2)
1342
======================================================================
1342
======================================================================
1343
========== Function 21, subfunction 5 - set system language. =========
1343
========== Function 21, subfunction 5 - set system language. =========
1344
======================================================================
1344
======================================================================
1345
Parameters:
1345
Parameters:
1346
  * eax = 21 - function number
1346
  * eax = 21 - function number
1347
  * ebx = 5 - subfunction number
1347
  * ebx = 5 - subfunction number
1348
  * ecx = system language (1=eng, 2=fi, 3=ger, 4=rus)
1348
  * ecx = system language (1=eng, 2=fi, 3=ger, 4=rus)
1349
Returned value:
1349
Returned value:
1350
  * eax = 0
1350
  * eax = 0
1351
Remarks:
1351
Remarks:
1352
  * System language is global system variable and is not used
1352
  * System language is global system variable and is not used
1353
    by the kernel itself, however application @taskbar draws the
1353
    by the kernel itself, however application @taskbar draws the
1354
    appropriate icon.
1354
    appropriate icon.
1355
  * Function does not check for correctness, as the kernel does not
1355
  * Function does not check for correctness, as the kernel does not
1356
    use this variable.
1356
    use this variable.
1357
  * To get system language use subfunction 5 of function 26.
1357
  * To get system language use subfunction 5 of function 26.
1358
 
1358
 
1359
---------------------- Constants for registers: ----------------------
1359
---------------------- Constants for registers: ----------------------
1360
  eax - SF_SYSTEM_SET (21)
1360
  eax - SF_SYSTEM_SET (21)
1361
  ebx - SSF_SYS_LANG (5)
1361
  ebx - SSF_SYS_LANG (5)
1362
======================================================================
1362
======================================================================
1363
 Function 21, subfunction 11 - enable/disable low-level access to HD.
1363
 Function 21, subfunction 11 - enable/disable low-level access to HD.
1364
======================================================================
1364
======================================================================
1365
Parameters:
1365
Parameters:
1366
  * eax = 21 - function number
1366
  * eax = 21 - function number
1367
  * ebx = 11 - subfunction number
1367
  * ebx = 11 - subfunction number
1368
  * ecx = 0/1 - disable/enable
1368
  * ecx = 0/1 - disable/enable
1369
Returned value:
1369
Returned value:
1370
  * eax = 0
1370
  * eax = 0
1371
Remarks:
1371
Remarks:
1372
  * Is used in LBA-read (subfunction 8 of function 58).
1372
  * Is used in LBA-read (subfunction 8 of function 58).
1373
  * The current implementation uses only low bit of ecx.
1373
  * The current implementation uses only low bit of ecx.
1374
  * To get current status use subfunction 11 of function 26.
1374
  * To get current status use subfunction 11 of function 26.
1375
 
1375
 
1376
---------------------- Constants for registers: ----------------------
1376
---------------------- Constants for registers: ----------------------
1377
  eax - SF_SYSTEM_SET (21)
1377
  eax - SF_SYSTEM_SET (21)
1378
  ebx - SSF_ACCESS_HD_LBA (11)
1378
  ebx - SSF_ACCESS_HD_LBA (11)
1379
======================================================================
1379
======================================================================
1380
 Function 21, subfunction 12 - enable/disable low-level access to PCI.
1380
 Function 21, subfunction 12 - enable/disable low-level access to PCI.
1381
======================================================================
1381
======================================================================
1382
Parameters:
1382
Parameters:
1383
  * eax = 21 - function number
1383
  * eax = 21 - function number
1384
  * ebx = 12 - subfunction number
1384
  * ebx = 12 - subfunction number
1385
  * ecx = 0/1 - disable/enable
1385
  * ecx = 0/1 - disable/enable
1386
Returned value:
1386
Returned value:
1387
  * eax = 0
1387
  * eax = 0
1388
Remarks:
1388
Remarks:
1389
  * Is used in operations with PCI bus (function 62).
1389
  * Is used in operations with PCI bus (function 62).
1390
  * The current implementation uses only low bit of ecx.
1390
  * The current implementation uses only low bit of ecx.
1391
  * To get current status use subfunction 12 of function 26.
1391
  * To get current status use subfunction 12 of function 26.
1392
 
1392
 
1393
---------------------- Constants for registers: ----------------------
1393
---------------------- Constants for registers: ----------------------
1394
  eax - SF_SYSTEM_SET (21)
1394
  eax - SF_SYSTEM_SET (21)
1395
  ebx - SSF_ACCESS_PCI (12)
1395
  ebx - SSF_ACCESS_PCI (12)
1396
======================================================================
1396
======================================================================
1397
================= Function 22 - set system date/time. ================
1397
================= Function 22 - set system date/time. ================
1398
======================================================================
1398
======================================================================
1399
Parameters:
1399
Parameters:
1400
  * eax = 22 - function number
1400
  * eax = 22 - function number
1401
  * ebx = 0 - set time
1401
  * ebx = 0 - set time
1402
    * ecx = 0x00SSMMHH - time in the binary-decimal code (BCD):
1402
    * ecx = 0x00SSMMHH - time in the binary-decimal code (BCD):
1403
    * HH=hour 00..23
1403
    * HH=hour 00..23
1404
    * MM=minute 00..59
1404
    * MM=minute 00..59
1405
    * SS=second 00..59
1405
    * SS=second 00..59
1406
  * ebx = 1 - set date
1406
  * ebx = 1 - set date
1407
    * ecx = 0x00DDMMYY - date in the binary-decimal code (BCD):
1407
    * ecx = 0x00DDMMYY - date in the binary-decimal code (BCD):
1408
    * DD=day 01..31
1408
    * DD=day 01..31
1409
    * MM=month 01..12
1409
    * MM=month 01..12
1410
    * YY=year 00..99
1410
    * YY=year 00..99
1411
  * ebx = 2 - set day of week
1411
  * ebx = 2 - set day of week
1412
    * ecx = 1 for Sunday, ..., 7 for Saturday
1412
    * ecx = 1 for Sunday, ..., 7 for Saturday
1413
  * ebx = 3 - set alarm clock
1413
  * ebx = 3 - set alarm clock
1414
    * ecx = 0x00SSMMHH
1414
    * ecx = 0x00SSMMHH
1415
Returned value:
1415
Returned value:
1416
  * eax = 0 - success
1416
  * eax = 0 - success
1417
  * eax = 1 - incorrect parameter
1417
  * eax = 1 - incorrect parameter
1418
  * eax = 2 - CMOS-battery was unloaded
1418
  * eax = 2 - CMOS-battery was unloaded
1419
Remarks:
1419
Remarks:
1420
  * Value of installation of day of week seems to be doubtful,
1420
  * Value of installation of day of week seems to be doubtful,
1421
    as it a little where is used
1421
    as it a little where is used
1422
    (day of week can be calculated by date).
1422
    (day of week can be calculated by date).
1423
  * Alarm clock can be set on operation in the given time every day.
1423
  * Alarm clock can be set on operation in the given time every day.
1424
    But there is no existing system function to disable it.
1424
    But there is no existing system function to disable it.
1425
  * Operation of alarm clock consists in generation IRQ8.
1425
  * Operation of alarm clock consists in generation IRQ8.
1426
  * Generally CMOS supports for alarm clock set of value 0xFF
1426
  * Generally CMOS supports for alarm clock set of value 0xFF
1427
    as one of parameters and it means that the appropriate parameter
1427
    as one of parameters and it means that the appropriate parameter
1428
    is ignored. But current implementation does not allow this
1428
    is ignored. But current implementation does not allow this
1429
    (will return 1).
1429
    (will return 1).
1430
  * Alarm clock is a global system resource; the set of
1430
  * Alarm clock is a global system resource; the set of
1431
    an alarm clock cancels automatically the previous set.
1431
    an alarm clock cancels automatically the previous set.
1432
    However, at moment no program uses it.
1432
    However, at moment no program uses it.
1433
 
1433
 
1434
---------------------- Constants for registers: ----------------------
1434
---------------------- Constants for registers: ----------------------
1435
  eax - SF_SET_TIME_DATE (22)
1435
  eax - SF_SET_TIME_DATE (22)
1436
======================================================================
1436
======================================================================
1437
============= Function 23 - wait for event with timeout. =============
1437
============= Function 23 - wait for event with timeout. =============
1438
======================================================================
1438
======================================================================
1439
If the message queue is empty, waits for new message in the queue,
1439
If the message queue is empty, waits for new message in the queue,
1440
but no more than given time. Then reads out a message from the queue.
1440
but no more than given time. Then reads out a message from the queue.
1441
 
1441
 
1442
Parameters:
1442
Parameters:
1443
  * eax = 23 - function number
1443
  * eax = 23 - function number
1444
  * ebx = timeout (in 1/100 of second)
1444
  * ebx = timeout (in 1/100 of second)
1445
Returned value:
1445
Returned value:
1446
  * eax = 0 - the message queue is empty
1446
  * eax = 0 - the message queue is empty
1447
  * otherwise eax = event (see the list of events)
1447
  * otherwise eax = event (see the list of events)
1448
Remarks:
1448
Remarks:
1449
  * Only those events are taken into account, which enter into
1449
  * Only those events are taken into account, which enter into
1450
    the mask set by function 40. By default it is
1450
    the mask set by function 40. By default it is
1451
    redraw, key and button events.
1451
    redraw, key and button events.
1452
  * To check for presence of a message in the queue use function 11.
1452
  * To check for presence of a message in the queue use function 11.
1453
    To wait without timeout use function 10.
1453
    To wait without timeout use function 10.
1454
  * Transmission ebx=0 results in immediate returning eax=0.
1454
  * Transmission ebx=0 results in immediate returning eax=0.
1455
  * Current implementation returns immediately with eax=0,
1455
  * Current implementation returns immediately with eax=0,
1456
    if the addition of ebx with the current value of time counter
1456
    if the addition of ebx with the current value of time counter
1457
    makes 32-bit overflow.
1457
    makes 32-bit overflow.
1458
 
1458
 
1459
---------------------- Constants for registers: ----------------------
1459
---------------------- Constants for registers: ----------------------
1460
  eax - SF_WAIT_EVENT_TIMEOUT (23)
1460
  eax - SF_WAIT_EVENT_TIMEOUT (23)
1461
======================================================================
1461
======================================================================
1462
======= Function 24, subfunction 4 - eject tray of disk drive. =======
1462
======= Function 24, subfunction 4 - eject tray of disk drive. =======
1463
======================================================================
1463
======================================================================
1464
Parameters:
1464
Parameters:
1465
  * eax = 24 - function number
1465
  * eax = 24 - function number
1466
  * ebx = 4 - subfunction number
1466
  * ebx = 4 - subfunction number
1467
  * ecx = position of CD/DVD-drive
1467
  * ecx = position of CD/DVD-drive
1468
    from 0=Primary Master to 3=Secondary Slave for first IDE contr.
1468
    from 0=Primary Master to 3=Secondary Slave for first IDE contr.
1469
    from 4=Primary Master to 7=Secondary Slave for second IDE contr.
1469
    from 4=Primary Master to 7=Secondary Slave for second IDE contr.
1470
    from 8=Primary Master to 11=Secondary Slave for third IDE contr.
1470
    from 8=Primary Master to 11=Secondary Slave for third IDE contr.
1471
Returned value:
1471
Returned value:
1472
  * function does not return value
1472
  * function does not return value
1473
Remarks:
1473
Remarks:
1474
  * The function is supported only for ATAPI devices (CD and DVD).
1474
  * The function is supported only for ATAPI devices (CD and DVD).
1475
  * When the tray is being ejected,
1475
  * When the tray is being ejected,
1476
    manual control of tray is unlocked.
1476
    manual control of tray is unlocked.
1477
  * When the tray is being ejected, the code clears the cache for
1477
  * When the tray is being ejected, the code clears the cache for
1478
    corresponding device.
1478
    corresponding device.
1479
  * An example of usage of the function is the application CD_tray.
1479
  * An example of usage of the function is the application CD_tray.
1480
 
1480
 
1481
---------------------- Constants for registers: ----------------------
1481
---------------------- Constants for registers: ----------------------
1482
  eax - SF_CD (24)
1482
  eax - SF_CD (24)
1483
  ebx - SSF_EJECT_TRAY (4), SSF_INSERT_TRAY (5)
1483
  ebx - SSF_EJECT_TRAY (4), SSF_INSERT_TRAY (5)
1484
======================================================================
1484
======================================================================
1485
======== Function 24, subfunction 5 - load tray of disk drive. =======
1485
======== Function 24, subfunction 5 - load tray of disk drive. =======
1486
======================================================================
1486
======================================================================
1487
Parameters:
1487
Parameters:
1488
  * eax = 24 - function number
1488
  * eax = 24 - function number
1489
  * ebx = 5 - subfunction number
1489
  * ebx = 5 - subfunction number
1490
  * ecx = position of CD/DVD-drive
1490
  * ecx = position of CD/DVD-drive
1491
    from 0=Primary Master to 3=Secondary Slave for first IDE contr.
1491
    from 0=Primary Master to 3=Secondary Slave for first IDE contr.
1492
    from 4=Primary Master to 7=Secondary Slave for second IDE contr.
1492
    from 4=Primary Master to 7=Secondary Slave for second IDE contr.
1493
    from 8=Primary Master to 11=Secondary Slave for third IDE contr.
1493
    from 8=Primary Master to 11=Secondary Slave for third IDE contr.
1494
Returned value:
1494
Returned value:
1495
  * function does not return value
1495
  * function does not return value
1496
Remarks:
1496
Remarks:
1497
  * The function is supported only for ATAPI devices (CD and DVD).
1497
  * The function is supported only for ATAPI devices (CD and DVD).
1498
  * An example of usage of the function is the application CD_tray.
1498
  * An example of usage of the function is the application CD_tray.
1499
 
1499
 
1500
---------------------- Constants for registers: ----------------------
1500
---------------------- Constants for registers: ----------------------
1501
  eax - SF_CD (24)
1501
  eax - SF_CD (24)
1502
  ebx - SSF_EJECT_TRAY (4), SSF_INSERT_TRAY (5)
1502
  ebx - SSF_EJECT_TRAY (4), SSF_INSERT_TRAY (5)
1503
======================================================================
1503
======================================================================
1504
======= Function 25 - put image area on the background layer. ========
1504
======= Function 25 - put image area on the background layer. ========
1505
======================================================================
1505
======================================================================
1506
Paramters:
1506
Paramters:
1507
  * eax = 25 - function number
1507
  * eax = 25 - function number
1508
  * ebx = pointer to the previously allocated memory area,
1508
  * ebx = pointer to the previously allocated memory area,
1509
        where placed the source images in a format BBGGRRTTBBGGRRTT...
1509
        where placed the source images in a format BBGGRRTTBBGGRRTT...
1510
  * ecx = [size on axis x]*65536 + [size on axis y]
1510
  * ecx = [size on axis x]*65536 + [size on axis y]
1511
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1511
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1512
Returned value:
1512
Returned value:
1513
  * function does not return value
1513
  * function does not return value
1514
Remarks:
1514
Remarks:
1515
  * Coordinates of the image are coordinates of the upper left corner
1515
  * Coordinates of the image are coordinates of the upper left corner
1516
    of the image relative to the screen.
1516
    of the image relative to the screen.
1517
  * Size of the image in bytes is 4*xsize*ysize
1517
  * Size of the image in bytes is 4*xsize*ysize
1518
  * TT - byte pointer of transparency, at current version:
1518
  * TT - byte pointer of transparency, at current version:
1519
         1 to FF - opaque, 0 - transparent.
1519
         1 to FF - opaque, 0 - transparent.
1520
  * The function places the image directly to LFB. It is not for
1520
  * The function places the image directly to LFB. It is not for
1521
    background image f.15. Options f.15 to f.25 does not make sense.
1521
    background image f.15. Options f.15 to f.25 does not make sense.
1522
 
1522
 
1523
---------------------- Constants for registers: ----------------------
1523
---------------------- Constants for registers: ----------------------
1524
  eax - SF_SCREEN_PUT_IMAGE (25)
1524
  eax - SF_SCREEN_PUT_IMAGE (25)
1525
======================================================================
1525
======================================================================
1526
======== Function 26, subfunction 1 - get MPU MIDI base port. ========
1526
======== Function 26, subfunction 1 - get MPU MIDI base port. ========
1527
======================================================================
1527
======================================================================
1528
Parameters:
1528
Parameters:
1529
  * eax = 26 - function number
1529
  * eax = 26 - function number
1530
  * ebx = 1 - subfunction number
1530
  * ebx = 1 - subfunction number
1531
Returned value:
1531
Returned value:
1532
  * eax = port number
1532
  * eax = port number
1533
Parameters:
1533
Parameters:
1534
  * To set base port use subfunction 1 of function 21.
1534
  * To set base port use subfunction 1 of function 21.
1535
 
1535
 
1536
---------------------- Constants for registers: ----------------------
1536
---------------------- Constants for registers: ----------------------
1537
  eax - SF_SYSTEM_GET (26)
1537
  eax - SF_SYSTEM_GET (26)
1538
  ebx - SSF_MPU_MIDI_BASE (1)
1538
  ebx - SSF_MPU_MIDI_BASE (1)
1539
======================================================================
1539
======================================================================
1540
========== Function 26, subfunction 2 - get keyboard layout. =========
1540
========== Function 26, subfunction 2 - get keyboard layout. =========
1541
======================================================================
1541
======================================================================
1542
The keyboard layout is used to convert keyboard scancodes to
1542
The keyboard layout is used to convert keyboard scancodes to
1543
ASCII-codes for function 2.
1543
ASCII-codes for function 2.
1544
Parameters:
1544
Parameters:
1545
  * eax = 26 - function number
1545
  * eax = 26 - function number
1546
  * ebx = 2 - subfunction number
1546
  * ebx = 2 - subfunction number
1547
  * ecx = what layout to get:
1547
  * ecx = what layout to get:
1548
    * 1 = normal layout
1548
    * 1 = normal layout
1549
    * 2 = layout with pressed Shift
1549
    * 2 = layout with pressed Shift
1550
    * 3 = layout with pressed Alt
1550
    * 3 = layout with pressed Alt
1551
  * edx = pointer to the 128-bytes buffer, where the layout will be
1551
  * edx = pointer to the 128-bytes buffer, where the layout will be
1552
    copied
1552
    copied
1553
Returned value:
1553
Returned value:
1554
  * function does not return value
1554
  * function does not return value
1555
Or:
1555
Or:
1556
  * eax = 26 - function number
1556
  * eax = 26 - function number
1557
  * ebx = 2 - subfunction number
1557
  * ebx = 2 - subfunction number
1558
  * ecx = 9
1558
  * ecx = 9
1559
Returned value:
1559
Returned value:
1560
  * eax = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1560
  * eax = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1561
Remarks:
1561
Remarks:
1562
  * If Alt is pressed, the layout with Alt is used;
1562
  * If Alt is pressed, the layout with Alt is used;
1563
    if Alt is not pressed, but Shift is pressed,
1563
    if Alt is not pressed, but Shift is pressed,
1564
    the layout with Shift is used;
1564
    the layout with Shift is used;
1565
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1565
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1566
    layout is used and then from the code is subtracted 0x60;
1566
    layout is used and then from the code is subtracted 0x60;
1567
    if no control key is pressed, the normal layout is used.
1567
    if no control key is pressed, the normal layout is used.
1568
  * To set layout and country identifier use
1568
  * To set layout and country identifier use
1569
    subfunction 2 of function 21.
1569
    subfunction 2 of function 21.
1570
  * Country identifier is global system variable, which is not used
1570
  * Country identifier is global system variable, which is not used
1571
    by the kernel itself; however the application '@taskbar' displays
1571
    by the kernel itself; however the application '@taskbar' displays
1572
    the corresponding icon (using this function).
1572
    the corresponding icon (using this function).
1573
  * The application @taskbar switches layouts on user request.
1573
  * The application @taskbar switches layouts on user request.
1574
 
1574
 
1575
---------------------- Constants for registers: ----------------------
1575
---------------------- Constants for registers: ----------------------
1576
  eax - SF_SYSTEM_GET (26)
1576
  eax - SF_SYSTEM_GET (26)
1577
  ebx - SSF_KEYBOARD_LAYOUT (2)
1577
  ebx - SSF_KEYBOARD_LAYOUT (2)
1578
======================================================================
1578
======================================================================
1579
========== Function 26, subfunction 5 - get system language. =========
1579
========== Function 26, subfunction 5 - get system language. =========
1580
======================================================================
1580
======================================================================
1581
Parameters:
1581
Parameters:
1582
  * eax = 26 - function number
1582
  * eax = 26 - function number
1583
  * ebx = 5 - subfunction number
1583
  * ebx = 5 - subfunction number
1584
Returned value:
1584
Returned value:
1585
  * eax = system language (1=eng, 2=fi, 3=ger, 4=rus)
1585
  * eax = system language (1=eng, 2=fi, 3=ger, 4=rus)
1586
Remarks:
1586
Remarks:
1587
  * System language is global system variable and is not used
1587
  * System language is global system variable and is not used
1588
    by the kernel itself, however application @taskbar draws the
1588
    by the kernel itself, however application @taskbar draws the
1589
    appropriate icon (using this function).
1589
    appropriate icon (using this function).
1590
  * To set system language use subfunction 5 of function 21.
1590
  * To set system language use subfunction 5 of function 21.
1591
 
1591
 
1592
---------------------- Constants for registers: ----------------------
1592
---------------------- Constants for registers: ----------------------
1593
  eax - SF_SYSTEM_GET (26)
1593
  eax - SF_SYSTEM_GET (26)
1594
  ebx - SSF_SYS_LANG (5)
1594
  ebx - SSF_SYS_LANG (5)
1595
======================================================================
1595
======================================================================
1596
=== Function 26, subfunction 9 - get the value of the time counter. ==
1596
=== Function 26, subfunction 9 - get the value of the time counter. ==
1597
======================================================================
1597
======================================================================
1598
Parameters:
1598
Parameters:
1599
  * eax = 26 - function number
1599
  * eax = 26 - function number
1600
  * ebx = 9 - subfunction number
1600
  * ebx = 9 - subfunction number
1601
Returned value:
1601
Returned value:
1602
  * eax = number of 1/100s of second, past from the system boot time
1602
  * eax = number of 1/100s of second, past from the system boot time
1603
Remarks:
1603
Remarks:
1604
  * Counter takes modulo 2^32, that correspond to a little more
1604
  * Counter takes modulo 2^32, that correspond to a little more
1605
    than 497 days.
1605
    than 497 days.
1606
  * To get system time use function 3.
1606
  * To get system time use function 3.
1607
 
1607
 
1608
---------------------- Constants for registers: ----------------------
1608
---------------------- Constants for registers: ----------------------
1609
  eax - SF_SYSTEM_GET (26)
1609
  eax - SF_SYSTEM_GET (26)
1610
  ebx - SSF_TIME_COUNT (9)
1610
  ebx - SSF_TIME_COUNT (9)
1611
======================================================================
1611
======================================================================
1612
===================== Function 26, subfunction 10 ====================
1612
===================== Function 26, subfunction 10 ====================
1613
========== Get the value of the high precision time counter. =========
1613
========== Get the value of the high precision time counter. =========
1614
======================================================================
1614
======================================================================
1615
Parameters:
1615
Parameters:
1616
  * eax = 26 - function number
1616
  * eax = 26 - function number
1617
  * ebx = 10 - subfunction number
1617
  * ebx = 10 - subfunction number
1618
Returned value:
1618
Returned value:
1619
  * eax = number of nanoseconds since system boot time (lower DWORD)
1619
  * eax = number of nanoseconds since system boot time (lower DWORD)
1620
  * edx = number of nanoseconds since system boot time (high DWORD)
1620
  * edx = number of nanoseconds since system boot time (high DWORD)
1621
Remarks:
1621
Remarks:
1622
  * The counter is based on HPET, if HPET is not available, resolution
1622
  * The counter is based on HPET, if HPET is not available, resolution
1623
    will be reduced to 10 000 000 nanoseconds.
1623
    will be reduced to 10 000 000 nanoseconds.
1624
 
1624
 
1625
---------------------- Constants for registers: ----------------------
1625
---------------------- Constants for registers: ----------------------
1626
  eax - SF_SYSTEM_GET (26)
1626
  eax - SF_SYSTEM_GET (26)
1627
  ebx - SSF_TIME_COUNT_PRO (10)
1627
  ebx - SSF_TIME_COUNT_PRO (10)
1628
======================================================================
1628
======================================================================
1629
===================== Function 26, subfunction 11 ====================
1629
===================== Function 26, subfunction 11 ====================
1630
========== Find out whether low-level HD access is enabled. ==========
1630
========== Find out whether low-level HD access is enabled. ==========
1631
======================================================================
1631
======================================================================
1632
Parameters:
1632
Parameters:
1633
  * eax = 26 - function number
1633
  * eax = 26 - function number
1634
  * ebx = 11 - subfunction number
1634
  * ebx = 11 - subfunction number
1635
Returned value:
1635
Returned value:
1636
  * eax = 0/1 - disabled/enabled
1636
  * eax = 0/1 - disabled/enabled
1637
Remarks:
1637
Remarks:
1638
  * Is used in LBA read (subfunction 8 of function 58).
1638
  * Is used in LBA read (subfunction 8 of function 58).
1639
  * To set current state use subfunction 11 of function 21.
1639
  * To set current state use subfunction 11 of function 21.
1640
 
1640
 
1641
---------------------- Constants for registers: ----------------------
1641
---------------------- Constants for registers: ----------------------
1642
  eax - SF_SYSTEM_GET (26)
1642
  eax - SF_SYSTEM_GET (26)
1643
  ebx - SSF_ACCESS_HD_LBA (11)
1643
  ebx - SSF_ACCESS_HD_LBA (11)
1644
======================================================================
1644
======================================================================
1645
===================== Function 26, subfunction 12 ====================
1645
===================== Function 26, subfunction 12 ====================
1646
========== Find out whether low-level PCI access is enabled. =========
1646
========== Find out whether low-level PCI access is enabled. =========
1647
======================================================================
1647
======================================================================
1648
Parameters:
1648
Parameters:
1649
  * eax = 26 - function number
1649
  * eax = 26 - function number
1650
  * ebx = 12 - subfunction number
1650
  * ebx = 12 - subfunction number
1651
Returned value:
1651
Returned value:
1652
  * eax = 0/1 - disabled/enabled
1652
  * eax = 0/1 - disabled/enabled
1653
Remarks:
1653
Remarks:
1654
  * Is used by operations with PCI bus (function 62).
1654
  * Is used by operations with PCI bus (function 62).
1655
  * The current implementation uses only low bit of ecx.
1655
  * The current implementation uses only low bit of ecx.
1656
  * To set the current state use subfunction 12 of function 21.
1656
  * To set the current state use subfunction 12 of function 21.
1657
 
1657
 
1658
---------------------- Constants for registers: ----------------------
1658
---------------------- Constants for registers: ----------------------
1659
  eax - SF_SYSTEM_GET (26)
1659
  eax - SF_SYSTEM_GET (26)
1660
  ebx - SSF_ACCESS_PCI (12)
1660
  ebx - SSF_ACCESS_PCI (12)
1661
======================================================================
1661
======================================================================
1662
=================== Function 29 - get system date. ===================
1662
=================== Function 29 - get system date. ===================
1663
======================================================================
1663
======================================================================
1664
Parameters:
1664
Parameters:
1665
  * eax = 29 - function number
1665
  * eax = 29 - function number
1666
Returned value:
1666
Returned value:
1667
  * eax = 0x00DDMMYY, where
1667
  * eax = 0x00DDMMYY, where
1668
    (binary-decimal coding, BCD, is used)
1668
    (binary-decimal coding, BCD, is used)
1669
  * YY = two low digits of year (00..99)
1669
  * YY = two low digits of year (00..99)
1670
  * MM = month (01..12)
1670
  * MM = month (01..12)
1671
  * DD = day (01..31)
1671
  * DD = day (01..31)
1672
Remarks:
1672
Remarks:
1673
  * To set system date use function 22.
1673
  * To set system date use function 22.
1674
 
1674
 
1675
---------------------- Constants for registers: ----------------------
1675
---------------------- Constants for registers: ----------------------
1676
  eax - SF_GET_SYS_DATE (29)
1676
  eax - SF_GET_SYS_DATE (29)
1677
======================================================================
1677
======================================================================
1678
============= Function 30 - work with the current folder. ============
1678
============= Function 30 - work with the current folder. ============
1679
======================================================================
1679
======================================================================
1680
--------- Subfunction 1 - set current folder for the thread. ---------
1680
--------- Subfunction 1 - set current folder for the thread. ---------
1681
Parameters:
1681
Parameters:
1682
  * eax = 30 - function number
1682
  * eax = 30 - function number
1683
  * ebx = 1 - subfunction number
1683
  * ebx = 1 - subfunction number
1684
  * ecx = pointer to string with the path to new current folder,
1684
  * ecx = pointer to string with the path to new current folder,
1685
    rules of path forming can be found in function 70 description.
1685
    rules of path forming can be found in function 70 description.
1686
Returned value:
1686
Returned value:
1687
  * function does not return value
1687
  * function does not return value
1688
----------------------------------------------------------------------
1688
----------------------------------------------------------------------
1689
--------- Subfunction 2 - get current folder for the thread. ---------
1689
--------- Subfunction 2 - get current folder for the thread. ---------
1690
Parameters:
1690
Parameters:
1691
  * eax = 30 - function number
1691
  * eax = 30 - function number
1692
  * ebx = 2 - subfunction number
1692
  * ebx = 2 - subfunction number
1693
  * ecx = pointer to buffer
1693
  * ecx = pointer to buffer
1694
  * edx = size of buffer
1694
  * edx = size of buffer
1695
Returned value:
1695
Returned value:
1696
  * eax = size of the string (including terminating 0)
1696
  * eax = size of the string (including terminating 0)
1697
Remarks:
1697
Remarks:
1698
  * If the buffer is too small to hold all path, only part of the string
1698
  * If the buffer is too small to hold all path, only part of the string
1699
    will be copied and terminated with 0.
1699
    will be copied and terminated with 0.
1700
  * By default, current folder for the thread is "/rd/1".
1700
  * By default, current folder for the thread is "/rd/1".
1701
  * At process/thread creation the current folder will be inherited
1701
  * At process/thread creation the current folder will be inherited
1702
    from the parent.
1702
    from the parent.
1703
----------------------------------------------------------------------
1703
----------------------------------------------------------------------
1704
--- Subfunction 3 - install the add.system directory for the kernel --
1704
--- Subfunction 3 - install the add.system directory for the kernel --
1705
Parameters:
1705
Parameters:
1706
  * eax = 30 - function number
1706
  * eax = 30 - function number
1707
  * ebx = 3 - subfunction number
1707
  * ebx = 3 - subfunction number
1708
  * ecx = pointer to a block of data:
1708
  * ecx = pointer to a block of data:
1709
key     rb  64
1709
key     rb  64
1710
path    rb  64
1710
path    rb  64
1711
    Example:
1711
    Example:
1712
align 64
1712
align 64
1713
key     db  'kolibrios',0   ; key must be in lower case
1713
key     db  'kolibrios',0   ; key must be in lower case
1714
align 64
1714
align 64
1715
path    db  'HD0/1',0
1715
path    db  'HD0/1',0
1716
 
1716
 
1717
Returned value:
1717
Returned value:
1718
  * function does not return value
1718
  * function does not return value
1719
Remarks:
1719
Remarks:
1720
  * The function can be called only 1 time for 1 session of the OS.
1720
  * The function can be called only 1 time for 1 session of the OS.
1721
  * On input the symbolic key is not changing by encoding.
1721
  * On input the symbolic key is not changing by encoding.
1722
----------------------------------------------------------------------
1722
----------------------------------------------------------------------
1723
---- Subfunction 4 - set current folder, specifying the encoding. ----
1723
---- Subfunction 4 - set current folder, specifying the encoding. ----
1724
Parameters:
1724
Parameters:
1725
  * eax = 30 - function number
1725
  * eax = 30 - function number
1726
  * ebx = 4 - subfunction number
1726
  * ebx = 4 - subfunction number
1727
  * ecx = pointer to string with the path to new current folder
1727
  * ecx = pointer to string with the path to new current folder
1728
  * edx = string encoding, details can be found in function 80 description.
1728
  * edx = string encoding, details can be found in function 80 description.
1729
Returned value:
1729
Returned value:
1730
  * function does not return value
1730
  * function does not return value
1731
----------------------------------------------------------------------
1731
----------------------------------------------------------------------
1732
---- Subfunction 5 - get current folder, specifying the encoding. ----
1732
---- Subfunction 5 - get current folder, specifying the encoding. ----
1733
Parameters:
1733
Parameters:
1734
  * eax = 30 - function number
1734
  * eax = 30 - function number
1735
  * ebx = 5 - subfunction number
1735
  * ebx = 5 - subfunction number
1736
  * ecx = pointer to buffer
1736
  * ecx = pointer to buffer
1737
  * edx = size of buffer
1737
  * edx = size of buffer
1738
  * esi = string encoding
1738
  * esi = string encoding
1739
Returned value:
1739
Returned value:
1740
  * eax = size of the string in bytes (including terminating 0)
1740
  * eax = size of the string in bytes (including terminating 0)
1741
Remarks:
1741
Remarks:
1742
  * If the buffer is too small to hold all path, only part of the string
1742
  * If the buffer is too small to hold all path, only part of the string
1743
    will be copied and terminated with 0.
1743
    will be copied and terminated with 0.
1744
  * By default, current folder for the thread is "/rd/1".
1744
  * By default, current folder for the thread is "/rd/1".
1745
  * At process/thread creation the current folder will be inherited
1745
  * At process/thread creation the current folder will be inherited
1746
    from the parent.
1746
    from the parent.
1747
 
1747
 
1748
---------------------- Constants for registers: ----------------------
1748
---------------------- Constants for registers: ----------------------
1749
  eax - SF_CURRENT_FOLDER (30)
1749
  eax - SF_CURRENT_FOLDER (30)
1750
  ebx - SSF_SET_CF (1), SSF_GET_CF (2), SSF_ADD_SYS_FOLDER (3)
1750
  ebx - SSF_SET_CF (1), SSF_GET_CF (2), SSF_ADD_SYS_FOLDER (3)
1751
======================================================================
1751
======================================================================
1752
========= Function 34 - who owner the pixel on the screen. ===========
1752
========= Function 34 - who owner the pixel on the screen. ===========
1753
======================================================================
1753
======================================================================
1754
Parameters:
1754
Parameters:
1755
  * eax = 34 - function number
1755
  * eax = 34 - function number
1756
  * ebx = x-coordinate (relative to the display)
1756
  * ebx = x-coordinate (relative to the display)
1757
  * ecx = y-coordinate (relative to the display)
1757
  * ecx = y-coordinate (relative to the display)
1758
 
1758
 
1759
Returned value:
1759
Returned value:
1760
  * eax = 0x000000XX - owner of pixel the slot window N
1760
  * eax = 0x000000XX - owner of pixel the slot window N
1761
    If incorrect values ebx and ecx then function returns 0
1761
    If incorrect values ebx and ecx then function returns 0
1762
  * The function takes the value from the area [_WinMapAddress]
1762
  * The function takes the value from the area [_WinMapAddress]
1763
 
1763
 
1764
---------------------- Constants for registers: ----------------------
1764
---------------------- Constants for registers: ----------------------
1765
  eax - SF_GET_PIXEL_OWNER (34)
1765
  eax - SF_GET_PIXEL_OWNER (34)
1766
======================================================================
1766
======================================================================
1767
======= Function 35 - read the color of a pixel on the screen. =======
1767
======= Function 35 - read the color of a pixel on the screen. =======
1768
======================================================================
1768
======================================================================
1769
Parameters:
1769
Parameters:
1770
  * eax = 35
1770
  * eax = 35
1771
  * ebx = y*xsize+x, where
1771
  * ebx = y*xsize+x, where
1772
  * (x,y) = coordinates of a pixel (beginning from 0)
1772
  * (x,y) = coordinates of a pixel (beginning from 0)
1773
  * xsize = horizontal screen size
1773
  * xsize = horizontal screen size
1774
Returned value:
1774
Returned value:
1775
  * eax = color 0x00RRGGBB
1775
  * eax = color 0x00RRGGBB
1776
Remarks:
1776
Remarks:
1777
  * To get screen sizes use function 14. Pay attention,
1777
  * To get screen sizes use function 14. Pay attention,
1778
    that it subtracts 1 from both sizes.
1778
    that it subtracts 1 from both sizes.
1779
  * There is also direct access (without any system calls)
1779
  * There is also direct access (without any system calls)
1780
    to videomemory through the selector gs. To get parameters of
1780
    to videomemory through the selector gs. To get parameters of
1781
    the current videomode, use function 61.
1781
    the current videomode, use function 61.
1782
 
1782
 
1783
---------------------- Constants for registers: ----------------------
1783
---------------------- Constants for registers: ----------------------
1784
  eax - SF_GET_PIXEL (35)
1784
  eax - SF_GET_PIXEL (35)
1785
======================================================================
1785
======================================================================
1786
=================== Function 36 - read screen area. ==================
1786
=================== Function 36 - read screen area. ==================
1787
======================================================================
1787
======================================================================
1788
Paramters:
1788
Paramters:
1789
  * eax = 36 - function number
1789
  * eax = 36 - function number
1790
  * ebx = pointer to the previously allocated memory area,
1790
  * ebx = pointer to the previously allocated memory area,
1791
        where will be placed the image in the format BBGGRRBBGGRR...
1791
        where will be placed the image in the format BBGGRRBBGGRR...
1792
  * ecx = [size on axis x]*65536 + [size on axis y]
1792
  * ecx = [size on axis x]*65536 + [size on axis y]
1793
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1793
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1794
Returned value:
1794
Returned value:
1795
  * function does not return value
1795
  * function does not return value
1796
Remarks:
1796
Remarks:
1797
  * Coordinates of the image are coordinates of the upper left corner
1797
  * Coordinates of the image are coordinates of the upper left corner
1798
    of the image relative to the screen.
1798
    of the image relative to the screen.
1799
  * Size of the image in bytes is 3*xsize*ysize.
1799
  * Size of the image in bytes is 3*xsize*ysize.
1800
 
1800
 
1801
---------------------- Constants for registers: ----------------------
1801
---------------------- Constants for registers: ----------------------
1802
  eax - SF_GET_IMAGE (36)
1802
  eax - SF_GET_IMAGE (36)
1803
======================================================================
1803
======================================================================
1804
=================== Function 37 - work with mouse. ===================
1804
=================== Function 37 - work with mouse. ===================
1805
======================================================================
1805
======================================================================
1806
 
1806
 
1807
---------- Subfunction 0 - screen coordinates of the mouse -----------
1807
---------- Subfunction 0 - screen coordinates of the mouse -----------
1808
Parameters:
1808
Parameters:
1809
  * eax = 37 - function number
1809
  * eax = 37 - function number
1810
  * ebx = 0 - subfunction number
1810
  * ebx = 0 - subfunction number
1811
Returned value:
1811
Returned value:
1812
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1812
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1813
    (beginning from 0)
1813
    (beginning from 0)
1814
 
1814
 
1815
-- Subfunction 1 - coordinates of the mouse relative to the window ---
1815
-- Subfunction 1 - coordinates of the mouse relative to the window ---
1816
Parameters:
1816
Parameters:
1817
  * eax = 37 - function number
1817
  * eax = 37 - function number
1818
  * ebx = 1 - subfunction number
1818
  * ebx = 1 - subfunction number
1819
Returned value:
1819
Returned value:
1820
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1820
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1821
    relative to the application window (beginning from 0)
1821
    relative to the application window (beginning from 0)
1822
Remarks:
1822
Remarks:
1823
  * The value is calculated by formula (x-xwnd)*65536 + (y-ywnd).
1823
  * The value is calculated by formula (x-xwnd)*65536 + (y-ywnd).
1824
    If y>=ywnd, the low word is non-negative and contains
1824
    If y>=ywnd, the low word is non-negative and contains
1825
    relative y-coordinate, and the high word - relative x-coordinate
1825
    relative y-coordinate, and the high word - relative x-coordinate
1826
    (with correct sign). Otherwise the low word is negative and still
1826
    (with correct sign). Otherwise the low word is negative and still
1827
    contains relative y-coordinate, and to the high word
1827
    contains relative y-coordinate, and to the high word
1828
    1 should be added.
1828
    1 should be added.
1829
 
1829
 
1830
------------- Subfunction 2 - states of the mouse buttons ------------
1830
------------- Subfunction 2 - states of the mouse buttons ------------
1831
Parameters:
1831
Parameters:
1832
  * eax = 37 - function number
1832
  * eax = 37 - function number
1833
  * ebx = 2 - subfunction number
1833
  * ebx = 2 - subfunction number
1834
Returned value:
1834
Returned value:
1835
  * eax = bits 0-4 equal to subfunction 3
1835
  * eax = bits 0-4 equal to subfunction 3
1836
 
1836
 
1837
------- Subfunction 3 - states and events of the mouse buttons -------
1837
------- Subfunction 3 - states and events of the mouse buttons -------
1838
Parameters:
1838
Parameters:
1839
  * eax = 37 - function number
1839
  * eax = 37 - function number
1840
  * ebx = 3 - subfunction number
1840
  * ebx = 3 - subfunction number
1841
Returned value:
1841
Returned value:
1842
  * eax contains next information:
1842
  * eax contains next information:
1843
 
1843
 
1844
states:
1844
states:
1845
  * bit 0 is set = left button is held
1845
  * bit 0 is set = left button is held
1846
  * bit 1 is set = right button is held
1846
  * bit 1 is set = right button is held
1847
  * bit 2 is set = middle button is held
1847
  * bit 2 is set = middle button is held
1848
  * bit 3 is set = 4th button is held
1848
  * bit 3 is set = 4th button is held
1849
  * bit 4 is set = 5th button is held
1849
  * bit 4 is set = 5th button is held
1850
 
1850
 
1851
events:
1851
events:
1852
  * bit 8 is set = left button is pressed
1852
  * bit 8 is set = left button is pressed
1853
  * bit 9 is set = right button is pressed
1853
  * bit 9 is set = right button is pressed
1854
  * bit 10 is set = middle button is pressed
1854
  * bit 10 is set = middle button is pressed
1855
 
1855
 
1856
  * bit 15 is set = vertical scroll is used
1856
  * bit 15 is set = vertical scroll is used
1857
 
1857
 
1858
  * bit 16 is set = left button is released
1858
  * bit 16 is set = left button is released
1859
  * bit 17 is set = right button is released
1859
  * bit 17 is set = right button is released
1860
  * bit 18 is set = middle button is released
1860
  * bit 18 is set = middle button is released
1861
 
1861
 
1862
  * bit 23 is set = horisontal scroll is used
1862
  * bit 23 is set = horisontal scroll is used
1863
 
1863
 
1864
  * bit 24 is set = doubleclick by left button
1864
  * bit 24 is set = doubleclick by left button
1865
 
1865
 
1866
-------------------- Subfunction 4 - load cursor ---------------------
1866
-------------------- Subfunction 4 - load cursor ---------------------
1867
Parameters:
1867
Parameters:
1868
  * eax = 37 - function number
1868
  * eax = 37 - function number
1869
  * ebx = 4 - subfunction number
1869
  * ebx = 4 - subfunction number
1870
  * dx = data source:
1870
  * dx = data source:
1871
  * dx = LOAD_FROM_FILE = 0 - data in a file
1871
  * dx = LOAD_FROM_FILE = 0 - data in a file
1872
    * ecx = pointer to full path to the cursor file
1872
    * ecx = pointer to full path to the cursor file
1873
    * the file must be in the format .cur, which is standard for
1873
    * the file must be in the format .cur, which is standard for
1874
      MS Windows, at that of the size 32*32 pixels
1874
      MS Windows, at that of the size 32*32 pixels
1875
  * dx = LOAD_FROM_MEM = 1 - data of file are already loaded in memory
1875
  * dx = LOAD_FROM_MEM = 1 - data of file are already loaded in memory
1876
    * ecx = pointer to data of the cursor file
1876
    * ecx = pointer to data of the cursor file
1877
    * the data format is the same as in the previous case
1877
    * the data format is the same as in the previous case
1878
  * dx = LOAD_INDIRECT = 2 - data in memory
1878
  * dx = LOAD_INDIRECT = 2 - data in memory
1879
    * ecx = pointer to cursor image in the format ARGB 32*32 pixels
1879
    * ecx = pointer to cursor image in the format ARGB 32*32 pixels
1880
    * edx = 0xXXYY0002, where
1880
    * edx = 0xXXYY0002, where
1881
      * XX = x-coordinate of cursor hotspot
1881
      * XX = x-coordinate of cursor hotspot
1882
      * YY = y-coordinate
1882
      * YY = y-coordinate
1883
      * 0 <= XX, YY <= 31
1883
      * 0 <= XX, YY <= 31
1884
Returned value:
1884
Returned value:
1885
  * eax = 0 - failed
1885
  * eax = 0 - failed
1886
  * otherwise eax = cursor handle
1886
  * otherwise eax = cursor handle
1887
 
1887
 
1888
--------------------- Subfunction 5 - set cursor ---------------------
1888
--------------------- Subfunction 5 - set cursor ---------------------
1889
Sets new cursor for the window of the current thread.
1889
Sets new cursor for the window of the current thread.
1890
Parameters:
1890
Parameters:
1891
  * eax = 37 - function number
1891
  * eax = 37 - function number
1892
  * ebx = 5 - subfunction number
1892
  * ebx = 5 - subfunction number
1893
  * ecx = cursor handle
1893
  * ecx = cursor handle
1894
Returned value:
1894
Returned value:
1895
  * eax = handle of previous cursor
1895
  * eax = handle of previous cursor
1896
Remarks:
1896
Remarks:
1897
  * If the handle is incorrect, the function restores the default
1897
  * If the handle is incorrect, the function restores the default
1898
    cursor (standard arrow). In particular, ecx=0 restores it.
1898
    cursor (standard arrow). In particular, ecx=0 restores it.
1899
 
1899
 
1900
------------------- Subfunction 6 - delete cursor --------------------
1900
------------------- Subfunction 6 - delete cursor --------------------
1901
Parameters:
1901
Parameters:
1902
  * eax = 37 - function number
1902
  * eax = 37 - function number
1903
  * ebx = 6 - subfunction number
1903
  * ebx = 6 - subfunction number
1904
  * ecx = cursor handle
1904
  * ecx = cursor handle
1905
Returned value:
1905
Returned value:
1906
  * eax destroyed
1906
  * eax destroyed
1907
Remarks:
1907
Remarks:
1908
  * The cursor must be loaded previously by the current thread
1908
  * The cursor must be loaded previously by the current thread
1909
    (with the call to subfunction 4). The function does not delete
1909
    (with the call to subfunction 4). The function does not delete
1910
    system cursors and cursors, loaded by another applications.
1910
    system cursors and cursors, loaded by another applications.
1911
  * If the active cursor (set by subfunction 5) is deleted,
1911
  * If the active cursor (set by subfunction 5) is deleted,
1912
    the system restores the default cursor (standard arrow).
1912
    the system restores the default cursor (standard arrow).
1913
 
1913
 
1914
------------------ Subfunction 7 - get scroll data -------------------
1914
------------------ Subfunction 7 - get scroll data -------------------
1915
Parameters:
1915
Parameters:
1916
  * eax = 37 - function number
1916
  * eax = 37 - function number
1917
  * ebx = 7 - subfunction number
1917
  * ebx = 7 - subfunction number
1918
Returned value:
1918
Returned value:
1919
  * eax = [horizontal offset]*65536 + [vertical offset]
1919
  * eax = [horizontal offset]*65536 + [vertical offset]
1920
Remarks:
1920
Remarks:
1921
  * Scroll data is available for active window only.
1921
  * Scroll data is available for active window only.
1922
  * Values are zeroed after reading.
1922
  * Values are zeroed after reading.
1923
  * Values are signed.
1923
  * Values are signed.
-
 
1924
 
-
 
1925
-------- Subfunction 8 - load cursor, specifying the encoding --------
-
 
1926
Parameters:
-
 
1927
  * eax = 37 - function number
-
 
1928
  * ebx = 8 - subfunction number
-
 
1929
  * ecx = pointer to the cursor file path string
-
 
1930
  * edx = string encoding, details can be found in function 80 description.
-
 
1931
Returned value:
-
 
1932
  * eax = cursor handle, 0 - failed
1924
 
1933
 
1925
---------------------- Constants for registers: ----------------------
1934
---------------------- Constants for registers: ----------------------
1926
  eax - SF_MOUSE_GET (37)
1935
  eax - SF_MOUSE_GET (37)
1927
  ebx - SSF_SCREEN_POSITION (0), SSF_WINDOW_POSITION (1),
1936
  ebx - SSF_SCREEN_POSITION (0), SSF_WINDOW_POSITION (1),
1928
    SSF_BUTTON (2), SSF_BUTTON_EXT (3), SSF_LOAD_CURSOR (4),
1937
    SSF_BUTTON (2), SSF_BUTTON_EXT (3), SSF_LOAD_CURSOR (4),
1929
    SSF_SET_CURSOR (5), SSF_DEL_CURSOR (6), SSF_SCROLL_DATA (7)
1938
    SSF_SET_CURSOR (5), SSF_DEL_CURSOR (6), SSF_SCROLL_DATA (7)
1930
======================================================================
1939
======================================================================
1931
====================== Function 38 - draw line. ======================
1940
====================== Function 38 - draw line. ======================
1932
======================================================================
1941
======================================================================
1933
Parameters:
1942
Parameters:
1934
  * eax = 38 - function number
1943
  * eax = 38 - function number
1935
  * ebx = [start coordinate on axis x]*65536 +
1944
  * ebx = [start coordinate on axis x]*65536 +
1936
              [end coordinate on axis x]
1945
              [end coordinate on axis x]
1937
  * ecx = [start coordinate on axis y]*65536 +
1946
  * ecx = [start coordinate on axis y]*65536 +
1938
              [end coordinate on axis y]
1947
              [end coordinate on axis y]
1939
  * edx = 0x00RRGGBB - color
1948
  * edx = 0x00RRGGBB - color
1940
    edx = 0x01xxxxxx - draw inversed line
1949
    edx = 0x01xxxxxx - draw inversed line
1941
          (low 24 bits are ignored)
1950
          (low 24 bits are ignored)
1942
Returned value:
1951
Returned value:
1943
  * function does not return value
1952
  * function does not return value
1944
Remarks:
1953
Remarks:
1945
  * Coordinates are relative to the window.
1954
  * Coordinates are relative to the window.
1946
  * End point is also drawn.
1955
  * End point is also drawn.
1947
 
1956
 
1948
---------------------- Constants for registers: ----------------------
1957
---------------------- Constants for registers: ----------------------
1949
  eax - SF_DRAW_LINE (38)
1958
  eax - SF_DRAW_LINE (38)
1950
======================================================================
1959
======================================================================
1951
== Function 39, subfunction 1 - get a size of the background image. ==
1960
== Function 39, subfunction 1 - get a size of the background image. ==
1952
======================================================================
1961
======================================================================
1953
Parameters:
1962
Parameters:
1954
  * eax = 39 - function number
1963
  * eax = 39 - function number
1955
  * ebx = 1 - subfunction number
1964
  * ebx = 1 - subfunction number
1956
Returned value:
1965
Returned value:
1957
  * eax = [width]*65536 + [height]
1966
  * eax = [width]*65536 + [height]
1958
Remarks:
1967
Remarks:
1959
  * There is a pair function to set sizes of background image -
1968
  * There is a pair function to set sizes of background image -
1960
    subfunction 1 of function 15. After which it is necessary,
1969
    subfunction 1 of function 15. After which it is necessary,
1961
    of course, anew to define image.
1970
    of course, anew to define image.
1962
 
1971
 
1963
---------------------- Constants for registers: ----------------------
1972
---------------------- Constants for registers: ----------------------
1964
  eax - SF_BACKGROUND_GET (39)
1973
  eax - SF_BACKGROUND_GET (39)
1965
======================================================================
1974
======================================================================
1966
== Function 39, subfunction 2 - get pixel from the background image. =
1975
== Function 39, subfunction 2 - get pixel from the background image. =
1967
======================================================================
1976
======================================================================
1968
Parameters:
1977
Parameters:
1969
  * eax = 39 - function number
1978
  * eax = 39 - function number
1970
  * ebx = 2 - subfunction number
1979
  * ebx = 2 - subfunction number
1971
  * ecx = offset
1980
  * ecx = offset
1972
Returned value:
1981
Returned value:
1973
  * eax = 0x00RRGGBB - pixel color, if offset is valid
1982
  * eax = 0x00RRGGBB - pixel color, if offset is valid
1974
    (less than 0x160000-16)
1983
    (less than 0x160000-16)
1975
  * eax = 2 otherwise
1984
  * eax = 2 otherwise
1976
Remarks:
1985
Remarks:
1977
  * Do not rely on returned value for invalid offsets, it may be
1986
  * Do not rely on returned value for invalid offsets, it may be
1978
    changed in future kernel versions.
1987
    changed in future kernel versions.
1979
  * Offset for pixel with coordinates (x,y)
1988
  * Offset for pixel with coordinates (x,y)
1980
    is calculated as (x+y*xsize)*3.
1989
    is calculated as (x+y*xsize)*3.
1981
  * There is a pair function to set pixel on the background image -
1990
  * There is a pair function to set pixel on the background image -
1982
    subfunction 2 of function 15.
1991
    subfunction 2 of function 15.
1983
 
1992
 
1984
---------------------- Constants for registers: ----------------------
1993
---------------------- Constants for registers: ----------------------
1985
  eax - SF_BACKGROUND_GET (39)
1994
  eax - SF_BACKGROUND_GET (39)
1986
======================================================================
1995
======================================================================
1987
== Function 39, subfunction 4 - get drawing mode for the background. =
1996
== Function 39, subfunction 4 - get drawing mode for the background. =
1988
======================================================================
1997
======================================================================
1989
Parameters:
1998
Parameters:
1990
  * eax = 39 - function number
1999
  * eax = 39 - function number
1991
  * ebx = 4 - subfunction number
2000
  * ebx = 4 - subfunction number
1992
Returned value:
2001
Returned value:
1993
  * eax = 1 - tile
2002
  * eax = 1 - tile
1994
  * eax = 2 - stretch
2003
  * eax = 2 - stretch
1995
Remarks:
2004
Remarks:
1996
  * There is a pair function to set drawing mode -
2005
  * There is a pair function to set drawing mode -
1997
    subfunction 4 of function 15.
2006
    subfunction 4 of function 15.
1998
 
2007
 
1999
---------------------- Constants for registers: ----------------------
2008
---------------------- Constants for registers: ----------------------
2000
  eax - SF_BACKGROUND_GET (39)
2009
  eax - SF_BACKGROUND_GET (39)
2001
======================================================================
2010
======================================================================
2002
=========== Function 40 - set the mask for expected events. ==========
2011
=========== Function 40 - set the mask for expected events. ==========
2003
======================================================================
2012
======================================================================
2004
The mask for expected events affects function working with events
2013
The mask for expected events affects function working with events
2005
10, 11, 23 - they notify only about events allowed by this mask.
2014
10, 11, 23 - they notify only about events allowed by this mask.
2006
Parameters:
2015
Parameters:
2007
  * eax = 40 - function number
2016
  * eax = 40 - function number
2008
  * ebx = mask: bit i corresponds to event i+1 (see list of events)
2017
  * ebx = mask: bit i corresponds to event i+1 (see list of events)
2009
    (set bit permits notice on event)
2018
    (set bit permits notice on event)
2010
    bit 31: mouse active/inactive filter
2019
    bit 31: mouse active/inactive filter
2011
    bit 31 = 0 - inactive window receive mouse events
2020
    bit 31 = 0 - inactive window receive mouse events
2012
    bit 31 = 1 - inactive window does not receive mouse events
2021
    bit 31 = 1 - inactive window does not receive mouse events
2013
    bit 30: cursor position filter
2022
    bit 30: cursor position filter
2014
    bit 30 = 0 = the window receive mouse events if cursor
2023
    bit 30 = 0 = the window receive mouse events if cursor
2015
                 outside window
2024
                 outside window
2016
    bit 30 = 1 - the window does not receive mouse events if cursor
2025
    bit 30 = 1 - the window does not receive mouse events if cursor
2017
                 outside window
2026
                 outside window
2018
Returned value:
2027
Returned value:
2019
  * eax = previous value of mask
2028
  * eax = previous value of mask
2020
Remarks:
2029
Remarks:
2021
  * Default mask (7=111b) enables nofices about redraw,
2030
  * Default mask (7=111b) enables nofices about redraw,
2022
    keys and buttons. This is enough for many applications.
2031
    keys and buttons. This is enough for many applications.
2023
  * Events prohibited in the mask are saved anyway, when come;
2032
  * Events prohibited in the mask are saved anyway, when come;
2024
    they are simply not informed with event functions.
2033
    they are simply not informed with event functions.
2025
  * Event functions take into account the mask on moment of
2034
  * Event functions take into account the mask on moment of
2026
    function call, not on moment of event arrival.
2035
    function call, not on moment of event arrival.
2027
 
2036
 
2028
---------------------- Constants for registers: ----------------------
2037
---------------------- Constants for registers: ----------------------
2029
  eax - SF_SET_EVENTS_MASK (40)
2038
  eax - SF_SET_EVENTS_MASK (40)
2030
======================================================================
2039
======================================================================
2031
================ Function 43 - input/output to a port. ===============
2040
================ Function 43 - input/output to a port. ===============
2032
======================================================================
2041
======================================================================
2033
 
2042
 
2034
------------------------ Output data to port -------------------------
2043
------------------------ Output data to port -------------------------
2035
Parameters:
2044
Parameters:
2036
  * eax = 43 - function number
2045
  * eax = 43 - function number
2037
  * bl = byte for output
2046
  * bl = byte for output
2038
  * ecx = port number 0xnnnn (from 0 to 0xFFFF)
2047
  * ecx = port number 0xnnnn (from 0 to 0xFFFF)
2039
Returned value:
2048
Returned value:
2040
  * eax = 0 - success
2049
  * eax = 0 - success
2041
  * eax = 1 - the thread has not reserved the selected port
2050
  * eax = 1 - the thread has not reserved the selected port
2042
 
2051
 
2043
------------------------ Input data from port ------------------------
2052
------------------------ Input data from port ------------------------
2044
Parameters:
2053
Parameters:
2045
  * eax = 43 - function number
2054
  * eax = 43 - function number
2046
  * ebx is ignored
2055
  * ebx is ignored
2047
  * ecx = 0x8000nnnn, where nnnn = port number (from 0 to 0xFFFF)
2056
  * ecx = 0x8000nnnn, where nnnn = port number (from 0 to 0xFFFF)
2048
Returned value:
2057
Returned value:
2049
  * eax = 0 - success, thus ebx = entered byte
2058
  * eax = 0 - success, thus ebx = entered byte
2050
  * eax = 1 - the thread has not reserved the selected port
2059
  * eax = 1 - the thread has not reserved the selected port
2051
Remarks:
2060
Remarks:
2052
  * Previously the thread must reserve the selected port
2061
  * Previously the thread must reserve the selected port
2053
    for itself by function 46.
2062
    for itself by function 46.
2054
  * Instead of call to this function it is better to use
2063
  * Instead of call to this function it is better to use
2055
    processor instructions in/out - this is much
2064
    processor instructions in/out - this is much
2056
    faster and a bit shorter and easier.
2065
    faster and a bit shorter and easier.
2057
 
2066
 
2058
---------------------- Constants for registers: ----------------------
2067
---------------------- Constants for registers: ----------------------
2059
  eax - SF_PORT_IN_OUT (43)
2068
  eax - SF_PORT_IN_OUT (43)
2060
======================================================================
2069
======================================================================
2061
====== Function 46 - reserve/free a group of input/output ports. =====
2070
====== Function 46 - reserve/free a group of input/output ports. =====
2062
======================================================================
2071
======================================================================
2063
To work with reserved ports an application can access directly by
2072
To work with reserved ports an application can access directly by
2064
commands in/out (recommended way) and can use function 43
2073
commands in/out (recommended way) and can use function 43
2065
(not recommended way).
2074
(not recommended way).
2066
Parameters:
2075
Parameters:
2067
  * eax = 46 - function number
2076
  * eax = 46 - function number
2068
  * ebx = 0 - reserve, 1 - free
2077
  * ebx = 0 - reserve, 1 - free
2069
  * ecx = start port number
2078
  * ecx = start port number
2070
  * edx = end port number (inclusive)
2079
  * edx = end port number (inclusive)
2071
Returned value:
2080
Returned value:
2072
  * eax = 0 - success
2081
  * eax = 0 - success
2073
  * eax = 1 - error
2082
  * eax = 1 - error
2074
Remarks:
2083
Remarks:
2075
  * For ports reservation: an error occurs if and only if
2084
  * For ports reservation: an error occurs if and only if
2076
    one from the following condition satisfies:
2085
    one from the following condition satisfies:
2077
    * start port is more than end port;
2086
    * start port is more than end port;
2078
    * the selected range contains incorrect port number
2087
    * the selected range contains incorrect port number
2079
      (correct are from 0 to 0xFFFF);
2088
      (correct are from 0 to 0xFFFF);
2080
    * limit for the total number of reserved areas is exceeded
2089
    * limit for the total number of reserved areas is exceeded
2081
      (maximum 255 are allowed);
2090
      (maximum 255 are allowed);
2082
    * the selected range intersects with any of earlier reserved
2091
    * the selected range intersects with any of earlier reserved
2083
  * For ports free: an error is an attempt to free range,
2092
  * For ports free: an error is an attempt to free range,
2084
    that was not earlier reserved by this function
2093
    that was not earlier reserved by this function
2085
    (with same ecx,edx).
2094
    (with same ecx,edx).
2086
  * If an error occurs (for both cases) function performs no action.
2095
  * If an error occurs (for both cases) function performs no action.
2087
  * At booting the system reserves for itself ports
2096
  * At booting the system reserves for itself ports
2088
    0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (inclusively).
2097
    0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (inclusively).
2089
  * When a thread terminates, all reserved by it ports
2098
  * When a thread terminates, all reserved by it ports
2090
    are freed automatically.
2099
    are freed automatically.
2091
 
2100
 
2092
---------------------- Constants for registers: ----------------------
2101
---------------------- Constants for registers: ----------------------
2093
  eax - SF_SET_PORTS (46)
2102
  eax - SF_SET_PORTS (46)
2094
======================================================================
2103
======================================================================
2095
============= Function 47 - draw a number in the window. =============
2104
============= Function 47 - draw a number in the window. =============
2096
======================================================================
2105
======================================================================
2097
Parameters:
2106
Parameters:
2098
  * eax = 47 - function number
2107
  * eax = 47 - function number
2099
  * ebx = parameters of conversion number to text:
2108
  * ebx = parameters of conversion number to text:
2100
    * bl = 0 - ecx contains number
2109
    * bl = 0 - ecx contains number
2101
    * bl = 1 - ecx contains pointer to dword/qword-number
2110
    * bl = 1 - ecx contains pointer to dword/qword-number
2102
    * bh = 0 - display in decimal number system
2111
    * bh = 0 - display in decimal number system
2103
    * bh = 1 - display in hexadecimal system
2112
    * bh = 1 - display in hexadecimal system
2104
    * bh = 2 - display in binary system
2113
    * bh = 2 - display in binary system
2105
    * bits 16-21 = how many digits to display
2114
    * bits 16-21 = how many digits to display
2106
    * bits 22-29 reserved and must be set to 0
2115
    * bits 22-29 reserved and must be set to 0
2107
    * bit 30 set = display qword (64-bit) number (must be bl=1)
2116
    * bit 30 set = display qword (64-bit) number (must be bl=1)
2108
    * bit 31 set = do not display leading zeroes of the number
2117
    * bit 31 set = do not display leading zeroes of the number
2109
  * ecx = number (if bl=0) or pointer (if bl=1)
2118
  * ecx = number (if bl=0) or pointer (if bl=1)
2110
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2119
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2111
  * esi = 0xXXRRGGBB, where
2120
  * esi = 0xXXRRGGBB, where
2112
    * RR, GG, BB specify text color
2121
    * RR, GG, BB specify text color
2113
    * XX = 0B0FCSSS (bits):
2122
    * XX = 0B0FCSSS (bits):
2114
      * B=1 - fill background (color = edi)
2123
      * B=1 - fill background (color = edi)
2115
      * F specifies the font:
2124
      * F specifies the font:
2116
        0 = 6x9
2125
        0 = 6x9
2117
        1 = 8x16
2126
        1 = 8x16
2118
      * C=0 - draw to the window,
2127
      * C=0 - draw to the window,
2119
        C=1 - draw to the user buffer (edi)
2128
        C=1 - draw to the user buffer (edi)
2120
      * SSS = (size multiplier)-1, so 0 = x1, 7 = x8
2129
      * SSS = (size multiplier)-1, so 0 = x1, 7 = x8
2121
Returned value:
2130
Returned value:
2122
  * function does not return value
2131
  * function does not return value
2123
Remarks:
2132
Remarks:
2124
  * The given length must not exceed 60.
2133
  * The given length must not exceed 60.
2125
  * The exactly given amount of digits is output. If number is small
2134
  * The exactly given amount of digits is output. If number is small
2126
    and can be written by smaller amount of digits, it is supplemented
2135
    and can be written by smaller amount of digits, it is supplemented
2127
    by leading zeroes; if the number is big and can not be written by
2136
    by leading zeroes; if the number is big and can not be written by
2128
    given amount of digits, extra digits are not drawn.
2137
    given amount of digits, extra digits are not drawn.
2129
 
2138
 
2130
---------------------- Constants for registers: ----------------------
2139
---------------------- Constants for registers: ----------------------
2131
  eax - SF_DRAW_NUMBER (47)
2140
  eax - SF_DRAW_NUMBER (47)
2132
======================================================================
2141
======================================================================
2133
========= Function 48, subfunction 0 - apply screen settings. ========
2142
========= Function 48, subfunction 0 - apply screen settings. ========
2134
======================================================================
2143
======================================================================
2135
Parameters:
2144
Parameters:
2136
  * eax = 48 - function number
2145
  * eax = 48 - function number
2137
  * ebx = 0 - subfunction number
2146
  * ebx = 0 - subfunction number
2138
  * ecx = 0 - reserved
2147
  * ecx = 0 - reserved
2139
Returned value:
2148
Returned value:
2140
  * function does not return value
2149
  * function does not return value
2141
Remarks:
2150
Remarks:
2142
  * Function redraws the screen after parameters change by
2151
  * Function redraws the screen after parameters change by
2143
    subfunctions 1 and 2.
2152
    subfunctions 1 and 2.
2144
  * Function call without prior call to one of indicated subfunctions
2153
  * Function call without prior call to one of indicated subfunctions
2145
    is ignored.
2154
    is ignored.
2146
  * Function call with nonzero ecx is ignored.
2155
  * Function call with nonzero ecx is ignored.
2147
 
2156
 
2148
---------------------- Constants for registers: ----------------------
2157
---------------------- Constants for registers: ----------------------
2149
  eax - SF_STYLE_SETTINGS (48)
2158
  eax - SF_STYLE_SETTINGS (48)
2150
  ebx - SSF_APPLY (0)
2159
  ebx - SSF_APPLY (0)
2151
======================================================================
2160
======================================================================
2152
=========== Function 48, subfunction 1 - set button style. ===========
2161
=========== Function 48, subfunction 1 - set button style. ===========
2153
======================================================================
2162
======================================================================
2154
Parameters:
2163
Parameters:
2155
  * eax = 48 - function number
2164
  * eax = 48 - function number
2156
  * ebx = 1 - subfunction number
2165
  * ebx = 1 - subfunction number
2157
  * ecx = button style:
2166
  * ecx = button style:
2158
    * 0 = flat
2167
    * 0 = flat
2159
    * 1 = 3d
2168
    * 1 = 3d
2160
Returned value:
2169
Returned value:
2161
  * function does not return value
2170
  * function does not return value
2162
Remarks:
2171
Remarks:
2163
  * After call to this function one should redraw the screen by
2172
  * After call to this function one should redraw the screen by
2164
    subfunction 0.
2173
    subfunction 0.
2165
  * Button style influences only to their draw of function 8.
2174
  * Button style influences only to their draw of function 8.
2166
 
2175
 
2167
---------------------- Constants for registers: ----------------------
2176
---------------------- Constants for registers: ----------------------
2168
  eax - SF_STYLE_SETTINGS (48)
2177
  eax - SF_STYLE_SETTINGS (48)
2169
  ebx - SSF_SET_BUTTON_STYLE (1)
2178
  ebx - SSF_SET_BUTTON_STYLE (1)
2170
======================================================================
2179
======================================================================
2171
====== Function 48, subfunction 2 - set standard window colors. ======
2180
====== Function 48, subfunction 2 - set standard window colors. ======
2172
======================================================================
2181
======================================================================
2173
Parameters:
2182
Parameters:
2174
  * eax = 48 - function number
2183
  * eax = 48 - function number
2175
  * ebx = 2 - subfunction number
2184
  * ebx = 2 - subfunction number
2176
  * ecx = pointer to the color table
2185
  * ecx = pointer to the color table
2177
  * edx = size of the color table
2186
  * edx = size of the color table
2178
    (must be 40 bytes for future compatibility)
2187
    (must be 40 bytes for future compatibility)
2179
Format of the color table is shown in description of subfunction 3.
2188
Format of the color table is shown in description of subfunction 3.
2180
Returned value:
2189
Returned value:
2181
  * function does not return value
2190
  * function does not return value
2182
Remarks:
2191
Remarks:
2183
  * After call to this function one should redraw the screen by
2192
  * After call to this function one should redraw the screen by
2184
    subfunction 0.
2193
    subfunction 0.
2185
  * Table of standard colors influences only to applications,
2194
  * Table of standard colors influences only to applications,
2186
    which receive this table obviously (by subfunction 3)
2195
    which receive this table obviously (by subfunction 3)
2187
    and use it (specifying colors from it to drawing functions).
2196
    and use it (specifying colors from it to drawing functions).
2188
  * Table of standard colors is included in skin and is installed
2197
  * Table of standard colors is included in skin and is installed
2189
    anew with skin installation (by subfunction 8).
2198
    anew with skin installation (by subfunction 8).
2190
  * Color table can be viewed/changed interactively with
2199
  * Color table can be viewed/changed interactively with
2191
    the application 'desktop'.
2200
    the application 'desktop'.
2192
 
2201
 
2193
---------------------- Constants for registers: ----------------------
2202
---------------------- Constants for registers: ----------------------
2194
  eax - SF_STYLE_SETTINGS (48)
2203
  eax - SF_STYLE_SETTINGS (48)
2195
  ebx - SSF_SET_COLORS (2)
2204
  ebx - SSF_SET_COLORS (2)
2196
======================================================================
2205
======================================================================
2197
====== Function 48, subfunction 3 - get standard window colors. ======
2206
====== Function 48, subfunction 3 - get standard window colors. ======
2198
======================================================================
2207
======================================================================
2199
Parameters:
2208
Parameters:
2200
  * eax = 48 - function number
2209
  * eax = 48 - function number
2201
  * ebx = 3 - subfunction number
2210
  * ebx = 3 - subfunction number
2202
  * ecx = pointer to the buffer with size edx bytes,
2211
  * ecx = pointer to the buffer with size edx bytes,
2203
    where table will be written
2212
    where table will be written
2204
  * edx = size of color table
2213
  * edx = size of color table
2205
    (must be 40 bytes for future compatibility)
2214
    (must be 40 bytes for future compatibility)
2206
Returned value:
2215
Returned value:
2207
  * function does not return value
2216
  * function does not return value
2208
Format of the color table:
2217
Format of the color table:
2209
each item is dword-value for color 0x00RRGGBB
2218
each item is dword-value for color 0x00RRGGBB
2210
  * +0: dword: frames - color of frame
2219
  * +0: dword: frames - color of frame
2211
  * +4: dword: grab - color of header
2220
  * +4: dword: grab - color of header
2212
  * +8: dword: grab_button - color of button on header bar
2221
  * +8: dword: grab_button - color of button on header bar
2213
  * +12 = +0xC: dword: grab_button_text - color of text on button
2222
  * +12 = +0xC: dword: grab_button_text - color of text on button
2214
    on header bar
2223
    on header bar
2215
  * +16 = +0x10: dword: grab_text - color of text on header
2224
  * +16 = +0x10: dword: grab_text - color of text on header
2216
  * +20 = +0x14: dword: work - color of working area
2225
  * +20 = +0x14: dword: work - color of working area
2217
  * +24 = +0x18: dword: work_button - color of button in working area
2226
  * +24 = +0x18: dword: work_button - color of button in working area
2218
  * +28 = +0x1C: dword: work_button_text - color of text on button
2227
  * +28 = +0x1C: dword: work_button_text - color of text on button
2219
    in working area
2228
    in working area
2220
  * +32 = +0x20: dword: work_text - color of text in working area
2229
  * +32 = +0x20: dword: work_text - color of text in working area
2221
  * +36 = +0x24: dword: work_graph - color of graphics in working area
2230
  * +36 = +0x24: dword: work_graph - color of graphics in working area
2222
Remarks:
2231
Remarks:
2223
  * Structure of the color table is described in the standard
2232
  * Structure of the color table is described in the standard
2224
    include file 'macros.inc' as 'system_colors'; for example,
2233
    include file 'macros.inc' as 'system_colors'; for example,
2225
    it is possible to write:
2234
    it is possible to write:
2226
        sc      system_colors           ; variable declaration
2235
        sc      system_colors           ; variable declaration
2227
        ...                             ; somewhere one must call
2236
        ...                             ; somewhere one must call
2228
                                        ; this function with ecx=sc
2237
                                        ; this function with ecx=sc
2229
        mov     ecx, [sc.work_button_text]      ; read text color on
2238
        mov     ecx, [sc.work_button_text]      ; read text color on
2230
                                        ; buttin in working area
2239
                                        ; buttin in working area
2231
  * A program itself desides to use or not to use color table.
2240
  * A program itself desides to use or not to use color table.
2232
    For usage program must simply at calls to drawing functions select
2241
    For usage program must simply at calls to drawing functions select
2233
    color taken from the table.
2242
    color taken from the table.
2234
  * At change of the table of standard colors (by subfunction 2 with
2243
  * At change of the table of standard colors (by subfunction 2 with
2235
    the subsequent application of changes by subfunction 0 or
2244
    the subsequent application of changes by subfunction 0 or
2236
    at skin set by subfunction 8) the system sends to all windows
2245
    at skin set by subfunction 8) the system sends to all windows
2237
    redraw message (the event with code 1).
2246
    redraw message (the event with code 1).
2238
  * Color table can be viewed/changed interactively with
2247
  * Color table can be viewed/changed interactively with
2239
    the application 'desktop'.
2248
    the application 'desktop'.
2240
 
2249
 
2241
---------------------- Constants for registers: ----------------------
2250
---------------------- Constants for registers: ----------------------
2242
  eax - SF_STYLE_SETTINGS (48)
2251
  eax - SF_STYLE_SETTINGS (48)
2243
  ebx - SSF_GET_COLORS (3)
2252
  ebx - SSF_GET_COLORS (3)
2244
======================================================================
2253
======================================================================
2245
============ Function 48, subfunction 4 - get skin height. ===========
2254
============ Function 48, subfunction 4 - get skin height. ===========
2246
======================================================================
2255
======================================================================
2247
Parameters:
2256
Parameters:
2248
  * eax = 48 - function number
2257
  * eax = 48 - function number
2249
  * ebx = 4 - subfunction number
2258
  * ebx = 4 - subfunction number
2250
Returned value:
2259
Returned value:
2251
  * eax = skin height
2260
  * eax = skin height
2252
Remarks:
2261
Remarks:
2253
  * Skin height is defined as the height of a header
2262
  * Skin height is defined as the height of a header
2254
    of skinned windows.
2263
    of skinned windows.
2255
  * See also general structure of window in the description
2264
  * See also general structure of window in the description
2256
    of function 0.
2265
    of function 0.
2257
 
2266
 
2258
---------------------- Constants for registers: ----------------------
2267
---------------------- Constants for registers: ----------------------
2259
  eax - SF_STYLE_SETTINGS (48)
2268
  eax - SF_STYLE_SETTINGS (48)
2260
  ebx - SSF_GET_SKIN_HEIGHT (4)
2269
  ebx - SSF_GET_SKIN_HEIGHT (4)
2261
======================================================================
2270
======================================================================
2262
======== Function 48, subfunction 5 - get screen working area. =======
2271
======== Function 48, subfunction 5 - get screen working area. =======
2263
======================================================================
2272
======================================================================
2264
Parameters:
2273
Parameters:
2265
  * eax = 48 - function number
2274
  * eax = 48 - function number
2266
  * ebx = 5 - subfunction number
2275
  * ebx = 5 - subfunction number
2267
Returned value:
2276
Returned value:
2268
  * eax = [left]*65536 + [right]
2277
  * eax = [left]*65536 + [right]
2269
  * ebx = [top]*65536 + [bottom]
2278
  * ebx = [top]*65536 + [bottom]
2270
Remarks:
2279
Remarks:
2271
  * The screen working area defines position and coordinates of
2280
  * The screen working area defines position and coordinates of
2272
    a maximized window.
2281
    a maximized window.
2273
  * The screen working area in view of normal work is all screen
2282
  * The screen working area in view of normal work is all screen
2274
    without taskbar ('@taskbar' application).
2283
    without taskbar ('@taskbar' application).
2275
  * (left,top) are coordinates of the left upper corner,
2284
  * (left,top) are coordinates of the left upper corner,
2276
    (right,bottom) are coordinates of the right lower one.
2285
    (right,bottom) are coordinates of the right lower one.
2277
    Thus the size of working area on x axis can be calculated by
2286
    Thus the size of working area on x axis can be calculated by
2278
    formula right-left+1, on y axis - by formula bottom-right+1.
2287
    formula right-left+1, on y axis - by formula bottom-right+1.
2279
  * See also function 14,
2288
  * See also function 14,
2280
    to get sizes of all screen.
2289
    to get sizes of all screen.
2281
  * There is a pair function to set working area - subfunction 6.
2290
  * There is a pair function to set working area - subfunction 6.
2282
 
2291
 
2283
---------------------- Constants for registers: ----------------------
2292
---------------------- Constants for registers: ----------------------
2284
  eax - SF_STYLE_SETTINGS (48)
2293
  eax - SF_STYLE_SETTINGS (48)
2285
  ebx - SSF_GET_SCREEN_AREA (5)
2294
  ebx - SSF_GET_SCREEN_AREA (5)
2286
======================================================================
2295
======================================================================
2287
======== Function 48, subfunction 6 - set screen working area. =======
2296
======== Function 48, subfunction 6 - set screen working area. =======
2288
======================================================================
2297
======================================================================
2289
Parameters:
2298
Parameters:
2290
  * eax = 48 - function number
2299
  * eax = 48 - function number
2291
  * ebx = 6 - subfunction number
2300
  * ebx = 6 - subfunction number
2292
  * ecx = [left]*65536 + [right]
2301
  * ecx = [left]*65536 + [right]
2293
  * edx = [top]*65536 + [bottom]
2302
  * edx = [top]*65536 + [bottom]
2294
Returned value:
2303
Returned value:
2295
  * function does not return value
2304
  * function does not return value
2296
Remarks:
2305
Remarks:
2297
  * The screen working area defines position and coordinates of
2306
  * The screen working area defines position and coordinates of
2298
    a maximized window.
2307
    a maximized window.
2299
  * This function is used only by the application '@taskbar',
2308
  * This function is used only by the application '@taskbar',
2300
    which set working area to all screen without taskbar.
2309
    which set working area to all screen without taskbar.
2301
  * (left,top) are coordinates of the left upper corner,
2310
  * (left,top) are coordinates of the left upper corner,
2302
    (right,bottom) are coordinates of the right lower one.
2311
    (right,bottom) are coordinates of the right lower one.
2303
    Thus the size of working area on x axis can be calculated by
2312
    Thus the size of working area on x axis can be calculated by
2304
    formula right-left+1, on y axis - by formula bottom-right+1.
2313
    formula right-left+1, on y axis - by formula bottom-right+1.
2305
  * If 'left'>='right', x-coordinate of working area is not changed.
2314
  * If 'left'>='right', x-coordinate of working area is not changed.
2306
    If 'left'<0, 'left' will not be set. If 'right' is greater than or
2315
    If 'left'<0, 'left' will not be set. If 'right' is greater than or
2307
    equal to screen width, 'right' will not be set.
2316
    equal to screen width, 'right' will not be set.
2308
    Similarly on y axis.
2317
    Similarly on y axis.
2309
  * See also function 14,
2318
  * See also function 14,
2310
    to get sizes of all screen.
2319
    to get sizes of all screen.
2311
  * There is a pair function to get working area - subfunction 5.
2320
  * There is a pair function to get working area - subfunction 5.
2312
  * This function redraws the screen automatically,
2321
  * This function redraws the screen automatically,
2313
    updating coordinates and sizes of maximized windows.
2322
    updating coordinates and sizes of maximized windows.
2314
    The system sends to all windows redraw message (the event 1).
2323
    The system sends to all windows redraw message (the event 1).
2315
 
2324
 
2316
---------------------- Constants for registers: ----------------------
2325
---------------------- Constants for registers: ----------------------
2317
  eax - SF_STYLE_SETTINGS (48)
2326
  eax - SF_STYLE_SETTINGS (48)
2318
  ebx - SSF_SET_SCREEN_AREA (6)
2327
  ebx - SSF_SET_SCREEN_AREA (6)
2319
======================================================================
2328
======================================================================
2320
=========== Function 48, subfunction 7 - get skin margins. ===========
2329
=========== Function 48, subfunction 7 - get skin margins. ===========
2321
======================================================================
2330
======================================================================
2322
Returns the area of a header of a skinned window, intended for
2331
Returns the area of a header of a skinned window, intended for
2323
a text of a header.
2332
a text of a header.
2324
Parameters:
2333
Parameters:
2325
  * eax = 48 - function number
2334
  * eax = 48 - function number
2326
  * ebx = 7 - subfunction number
2335
  * ebx = 7 - subfunction number
2327
Returned value:
2336
Returned value:
2328
  * eax = [left]*65536 + [right]
2337
  * eax = [left]*65536 + [right]
2329
  * ebx = [top]*65536 + [bottom]
2338
  * ebx = [top]*65536 + [bottom]
2330
Remarks:
2339
Remarks:
2331
  * An application decides itself to use or not to use this function.
2340
  * An application decides itself to use or not to use this function.
2332
  * It is recommended to take into account returned value
2341
  * It is recommended to take into account returned value
2333
    of this function for choice of a place for drawing header text
2342
    of this function for choice of a place for drawing header text
2334
    (by function 4) or a substitute of header text
2343
    (by function 4) or a substitute of header text
2335
    (at the discretion of an application).
2344
    (at the discretion of an application).
2336
 
2345
 
2337
---------------------- Constants for registers: ----------------------
2346
---------------------- Constants for registers: ----------------------
2338
  eax - SF_STYLE_SETTINGS (48)
2347
  eax - SF_STYLE_SETTINGS (48)
2339
  ebx - SSF_GET_SKIN_MARGINS (7)
2348
  ebx - SSF_GET_SKIN_MARGINS (7)
2340
======================================================================
2349
======================================================================
2341
============= Function 48, subfunction 8 - set used skin. ============
2350
============= Function 48, subfunction 8 - set used skin. ============
2342
======================================================================
2351
======================================================================
2343
Parameters:
2352
Parameters:
2344
  * eax = 48 - function number
2353
  * eax = 48 - function number
2345
  * ebx = 8 - subfunction number
2354
  * ebx = 8 - subfunction number
2346
  * ecx = pointer to filename of the skin
2355
  * ecx = pointer to filename of the skin
2347
Returned value:
2356
Returned value:
2348
  * eax = 0 - success
2357
  * eax = 0 - success
2349
  * otherwise eax = file system error code; if file does not
2358
  * otherwise eax = file system error code; if file does not
2350
    contain valid skin, function returns error 3
2359
    contain valid skin, function returns error 3
2351
    (unknown file system).
2360
    (unknown file system).
2352
Remarks:
2361
Remarks:
2353
  * After successful skin loading the system sends to all windows
2362
  * After successful skin loading the system sends to all windows
2354
    redraw message (the event 1).
2363
    redraw message (the event 1).
2355
  * At booting the system reads skin from file 'default.skn'
2364
  * At booting the system reads skin from file 'default.skn'
2356
    on ramdisk.
2365
    on ramdisk.
2357
  * User can change the skin statically by creating hisself
2366
  * User can change the skin statically by creating hisself
2358
    'default.skn' or dynamically with the application 'desktop'.
2367
    'default.skn' or dynamically with the application 'desktop'.
2359
 
2368
 
2360
---------------------- Constants for registers: ----------------------
2369
---------------------- Constants for registers: ----------------------
2361
  eax - SF_STYLE_SETTINGS (48)
2370
  eax - SF_STYLE_SETTINGS (48)
2362
  ebx - SSF_SET_SKIN (8)
2371
  ebx - SSF_SET_SKIN (8)
2363
======================================================================
2372
======================================================================
2364
====== Function 48, subfunction 9 - get font smoothing setting. ======
2373
====== Function 48, subfunction 9 - get font smoothing setting. ======
2365
======================================================================
2374
======================================================================
2366
Parameters:
2375
Parameters:
2367
  * eax = 48 - function number
2376
  * eax = 48 - function number
2368
  * ebx = 9 - subfunction number
2377
  * ebx = 9 - subfunction number
2369
Returned value:
2378
Returned value:
2370
  * eax = 2 - subpixel, 1 - anti-aliasing, 0 - off
2379
  * eax = 2 - subpixel, 1 - anti-aliasing, 0 - off
2371
 
2380
 
2372
---------------------- Constants for registers: ----------------------
2381
---------------------- Constants for registers: ----------------------
2373
  eax - SF_STYLE_SETTINGS (48)
2382
  eax - SF_STYLE_SETTINGS (48)
2374
  ebx - SSF_GET_FONT_SMOOTH (9)
2383
  ebx - SSF_GET_FONT_SMOOTH (9)
2375
======================================================================
2384
======================================================================
2376
========== Function 48, subfunction 10 - set font smoothing. =========
2385
========== Function 48, subfunction 10 - set font smoothing. =========
2377
======================================================================
2386
======================================================================
2378
Parameters:
2387
Parameters:
2379
  * eax = 48 - function number
2388
  * eax = 48 - function number
2380
  * ebx = 10 - subfunction number
2389
  * ebx = 10 - subfunction number
2381
  * cl  = 2 - subpixel, 1 - anti-aliasing, 0 - off
2390
  * cl  = 2 - subpixel, 1 - anti-aliasing, 0 - off
2382
 
2391
 
2383
---------------------- Constants for registers: ----------------------
2392
---------------------- Constants for registers: ----------------------
2384
  eax - SF_STYLE_SETTINGS (48)
2393
  eax - SF_STYLE_SETTINGS (48)
2385
  ebx - SSF_SET_FONT_SMOOTH (10)
2394
  ebx - SSF_SET_FONT_SMOOTH (10)
2386
======================================================================
2395
======================================================================
2387
============ Function 48, subfunction 11 - get font size. ============
2396
============ Function 48, subfunction 11 - get font size. ============
2388
======================================================================
2397
======================================================================
2389
Parameters:
2398
Parameters:
2390
  * eax = 48 - function number
2399
  * eax = 48 - function number
2391
  * ebx = 9 - subfunction number
2400
  * ebx = 9 - subfunction number
2392
Returned value:
2401
Returned value:
2393
  * eax = current font height in pixels
2402
  * eax = current font height in pixels
2394
 
2403
 
2395
---------------------- Constants for registers: ----------------------
2404
---------------------- Constants for registers: ----------------------
2396
  eax - SF_STYLE_SETTINGS (48)
2405
  eax - SF_STYLE_SETTINGS (48)
2397
  ebx - SSF_GET_FONT_SIZE (11)
2406
  ebx - SSF_GET_FONT_SIZE (11)
2398
======================================================================
2407
======================================================================
2399
============ Function 48, subfunction 12 - set font size. ============
2408
============ Function 48, subfunction 12 - set font size. ============
2400
======================================================================
2409
======================================================================
2401
Parameters:
2410
Parameters:
2402
  * eax = 48 - function number
2411
  * eax = 48 - function number
2403
  * ebx = 10 - subfunction number
2412
  * ebx = 10 - subfunction number
2404
  * cl  = new font height in pixels
2413
  * cl  = new font height in pixels
2405
 
2414
 
2406
---------------------- Constants for registers: ----------------------
2415
---------------------- Constants for registers: ----------------------
2407
  eax - SF_STYLE_SETTINGS (48)
2416
  eax - SF_STYLE_SETTINGS (48)
2408
  ebx - SSF_SET_FONT_SIZE (12)
2417
  ebx - SSF_SET_FONT_SIZE (12)
2409
======================================================================
2418
======================================================================
-
 
2419
== Function 48, subfunction 13 - set skin, specifying the encoding. ==
-
 
2420
======================================================================
-
 
2421
Parameters:
-
 
2422
  * eax = 48 - function number
-
 
2423
  * ebx = 13 - subfunction number
-
 
2424
  * ecx = pointer to the skin file path string
-
 
2425
  * edx = string encoding, details can be found in function 80 description.
-
 
2426
Returned value:
-
 
2427
  * eax = 0 - success
-
 
2428
  * otherwise eax = file system error code; if file does not
-
 
2429
    contain valid skin, function returns error 3
-
 
2430
    (unknown file system).
-
 
2431
Remarks:
-
 
2432
  * After successful skin loading the system sends to all windows
-
 
2433
    redraw message (the event 1).
-
 
2434
  * At booting the system reads skin from file 'default.skn'
-
 
2435
    on ramdisk.
-
 
2436
  * User can change the skin statically by creating hisself
-
 
2437
    'default.skn' or dynamically with the application 'desktop'.
-
 
2438
 
-
 
2439
======================================================================
2410
=========== Function 49 - Advanced Power Management (APM). ===========
2440
=========== Function 49 - Advanced Power Management (APM). ===========
2411
======================================================================
2441
======================================================================
2412
Parameters:
2442
Parameters:
2413
  * eax = 49 - function number
2443
  * eax = 49 - function number
2414
  * dx = number of the APM function
2444
  * dx = number of the APM function
2415
    (analogue of ax in APM specification)
2445
    (analogue of ax in APM specification)
2416
  * bx, cx = parameters of the APM function
2446
  * bx, cx = parameters of the APM function
2417
Returned value:
2447
Returned value:
2418
  * 16-bit registers ax, bx, cx, dx, si, di and carry flag CF
2448
  * 16-bit registers ax, bx, cx, dx, si, di and carry flag CF
2419
    are set according to the APM specification
2449
    are set according to the APM specification
2420
  * high halves of 32-bit registers eax, ebx, ecx,
2450
  * high halves of 32-bit registers eax, ebx, ecx,
2421
    edx, esi, edi are destroyed
2451
    edx, esi, edi are destroyed
2422
Remarks:
2452
Remarks:
2423
  * APM 1.2 specification is described in the document
2453
  * APM 1.2 specification is described in the document
2424
    "Advanced Power Management (APM) BIOS Specification"
2454
    "Advanced Power Management (APM) BIOS Specification"
2425
    (Revision 1.2), available at
2455
    (Revision 1.2), available at
2426
    http://www.microsoft.com/whdc/archive/amp_12.mspx;
2456
    http://www.microsoft.com/whdc/archive/amp_12.mspx;
2427
    besides it is included in famous Interrupt List by Ralf Brown
2457
    besides it is included in famous Interrupt List by Ralf Brown
2428
    (http://www.pobox.com/~ralf/files.html,
2458
    (http://www.pobox.com/~ralf/files.html,
2429
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/).
2459
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/).
2430
 
2460
 
2431
---------------------- Constants for registers: ----------------------
2461
---------------------- Constants for registers: ----------------------
2432
  eax - SF_APM (49)
2462
  eax - SF_APM (49)
2433
======================================================================
2463
======================================================================
2434
=================== Function 50 - set window shape. ==================
2464
=================== Function 50 - set window shape. ==================
2435
======================================================================
2465
======================================================================
2436
Normal windows have rectangular shape. This function can give to
2466
Normal windows have rectangular shape. This function can give to
2437
a window any shape. The shape is given by a set of points inside
2467
a window any shape. The shape is given by a set of points inside
2438
the base rectangle belonging to a window. Position and coordinates
2468
the base rectangle belonging to a window. Position and coordinates
2439
of the base rectangle are set by function 0
2469
of the base rectangle are set by function 0
2440
and changed by function 67.
2470
and changed by function 67.
2441
 
2471
 
2442
--------------------------- Set shape data ---------------------------
2472
--------------------------- Set shape data ---------------------------
2443
Parameters:
2473
Parameters:
2444
  * eax = 50 - function number
2474
  * eax = 50 - function number
2445
  * ebx = 0 - subfunction number
2475
  * ebx = 0 - subfunction number
2446
  * ecx = pointer to shape data (array of bytes 0/1)
2476
  * ecx = pointer to shape data (array of bytes 0/1)
2447
Returned value:
2477
Returned value:
2448
  * function does not return value
2478
  * function does not return value
2449
 
2479
 
2450
-------------------------- Set shape scale ---------------------------
2480
-------------------------- Set shape scale ---------------------------
2451
Parameters:
2481
Parameters:
2452
  * eax = 50 - function number
2482
  * eax = 50 - function number
2453
  * ebx = 1 - subfunction number
2483
  * ebx = 1 - subfunction number
2454
  * ecx sets a scale: each byte of data defines
2484
  * ecx sets a scale: each byte of data defines
2455
    (2^scale)*(2^scale) pixels
2485
    (2^scale)*(2^scale) pixels
2456
Returned value:
2486
Returned value:
2457
  * function does not return value
2487
  * function does not return value
2458
Remarks:
2488
Remarks:
2459
  * Default scale is 0 (scale factor is 1). If in the shape data
2489
  * Default scale is 0 (scale factor is 1). If in the shape data
2460
    one byte corresponds to one pixel, there is no necessity
2490
    one byte corresponds to one pixel, there is no necessity
2461
    to set scale.
2491
    to set scale.
2462
  * Let's designate xsize = window width (in pixels), ysize = height;
2492
  * Let's designate xsize = window width (in pixels), ysize = height;
2463
    pay attention, that they are one pixel more than defined by
2493
    pay attention, that they are one pixel more than defined by
2464
    functions 0, 67.
2494
    functions 0, 67.
2465
  * On definition of scale xsize and ysize must be divisible
2495
  * On definition of scale xsize and ysize must be divisible
2466
    on 2^scale.
2496
    on 2^scale.
2467
  * Byte of data on offset 'a' must be 0/1 and defines belonging
2497
  * Byte of data on offset 'a' must be 0/1 and defines belonging
2468
    to a window of square with the side 2^scale (if scale=0,
2498
    to a window of square with the side 2^scale (if scale=0,
2469
    this is one pixel) and coordinates of the left upper corner
2499
    this is one pixel) and coordinates of the left upper corner
2470
    (a mod (xsize shr scale), a div (xsize shr scale))
2500
    (a mod (xsize shr scale), a div (xsize shr scale))
2471
  * Data size: (xsize shr scale)*(ysize shr scale).
2501
  * Data size: (xsize shr scale)*(ysize shr scale).
2472
  * Data must be presented in the memory and not change
2502
  * Data must be presented in the memory and not change
2473
    after set of shape.
2503
    after set of shape.
2474
  * The system views the shape data at every window redraw by
2504
  * The system views the shape data at every window redraw by
2475
    function 0.
2505
    function 0.
2476
  * The call of subfunction 0 with NULL pointer results in return
2506
  * The call of subfunction 0 with NULL pointer results in return
2477
    to the rectangular shape.
2507
    to the rectangular shape.
2478
 
2508
 
2479
---------------------- Constants for registers: ----------------------
2509
---------------------- Constants for registers: ----------------------
2480
  eax - SF_SET_WINDOW_SHAPE (50)
2510
  eax - SF_SET_WINDOW_SHAPE (50)
2481
======================================================================
2511
======================================================================
2482
==================== Function 51 - create thread. ====================
2512
==================== Function 51 - create thread. ====================
2483
======================================================================
2513
======================================================================
2484
Parameters:
2514
Parameters:
2485
  * eax = 51 - function number
2515
  * eax = 51 - function number
2486
  * ebx = 1 - unique subfunction
2516
  * ebx = 1 - unique subfunction
2487
  * ecx = address of thread entry point (starting eip)
2517
  * ecx = address of thread entry point (starting eip)
2488
  * edx = pointer to thread stack (starting esp)
2518
  * edx = pointer to thread stack (starting esp)
2489
Returned value:
2519
Returned value:
2490
  * eax = -1 - error (there is too many threads)
2520
  * eax = -1 - error (there is too many threads)
2491
  * otherwise eax = TID - thread identifier
2521
  * otherwise eax = TID - thread identifier
2492
 
2522
 
2493
---------------------- Constants for registers: ----------------------
2523
---------------------- Constants for registers: ----------------------
2494
  eax - SF_CREATE_THREAD (51)
2524
  eax - SF_CREATE_THREAD (51)
2495
======================================================================
2525
======================================================================
2496
==================== Function 54, subfunction 0 ======================
2526
==================== Function 54, subfunction 0 ======================
2497
============== Get the number of slots in the clipboard. =============
2527
============== Get the number of slots in the clipboard. =============
2498
======================================================================
2528
======================================================================
2499
Parameters:
2529
Parameters:
2500
  * eax = 54 - function number
2530
  * eax = 54 - function number
2501
  * ebx = 0 - subfunction number
2531
  * ebx = 0 - subfunction number
2502
Returned value:
2532
Returned value:
2503
  * eax = slots in the clipboard
2533
  * eax = slots in the clipboard
2504
  * eax = -1 - main list area not found
2534
  * eax = -1 - main list area not found
2505
 
2535
 
2506
---------------------- Constants for registers: ----------------------
2536
---------------------- Constants for registers: ----------------------
2507
  eax - SF_CLIPBOARD (54)
2537
  eax - SF_CLIPBOARD (54)
2508
  ebx - SSF_GET_SLOT_COUNT (0)
2538
  ebx - SSF_GET_SLOT_COUNT (0)
2509
======================================================================
2539
======================================================================
2510
==================== Function 54, subfunction 1 ======================
2540
==================== Function 54, subfunction 1 ======================
2511
================= Read the data from the clipboard. ==================
2541
================= Read the data from the clipboard. ==================
2512
======================================================================
2542
======================================================================
2513
Parameters:
2543
Parameters:
2514
  * eax = 54 - function number
2544
  * eax = 54 - function number
2515
  * ebx = 1 - subfunction number
2545
  * ebx = 1 - subfunction number
2516
  * eсx = slot number
2546
  * eсx = slot number
2517
Returned value:
2547
Returned value:
2518
  * eax = if successful - pointer to a memory with data
2548
  * eax = if successful - pointer to a memory with data
2519
  * eax = 1 - error
2549
  * eax = 1 - error
2520
  * eax = -1 - main list area not found
2550
  * eax = -1 - main list area not found
2521
 
2551
 
2522
---------------------- Constants for registers: ----------------------
2552
---------------------- Constants for registers: ----------------------
2523
  eax - SF_CLIPBOARD (54)
2553
  eax - SF_CLIPBOARD (54)
2524
  ebx - SSF_READ_CB (1)
2554
  ebx - SSF_READ_CB (1)
2525
======================================================================
2555
======================================================================
2526
==================== Function 54, subfunction 2 ======================
2556
==================== Function 54, subfunction 2 ======================
2527
================= Write the data to the clipboard. ===================
2557
================= Write the data to the clipboard. ===================
2528
======================================================================
2558
======================================================================
2529
Parameters:
2559
Parameters:
2530
  * eax = 54 - function number
2560
  * eax = 54 - function number
2531
  * ebx = 2 - subfunction number
2561
  * ebx = 2 - subfunction number
2532
  * eсx = the number of bytes to be copied
2562
  * eсx = the number of bytes to be copied
2533
  * edx = a pointer to a buffer for data to be copied
2563
  * edx = a pointer to a buffer for data to be copied
2534
Returned value:
2564
Returned value:
2535
  * eax = 0 - success
2565
  * eax = 0 - success
2536
  * eax = 1 - error
2566
  * eax = 1 - error
2537
  * eax = -1 - main list area not found
2567
  * eax = -1 - main list area not found
2538
 
2568
 
2539
---------------------- Constants for registers: ----------------------
2569
---------------------- Constants for registers: ----------------------
2540
  eax - SF_CLIPBOARD (54)
2570
  eax - SF_CLIPBOARD (54)
2541
  ebx - SSF_WRITE_CB (2)
2571
  ebx - SSF_WRITE_CB (2)
2542
======================================================================
2572
======================================================================
2543
===================== Function 54, subfunction 3 =====================
2573
===================== Function 54, subfunction 3 =====================
2544
================ Delete the last slot in the clipboard ===============
2574
================ Delete the last slot in the clipboard ===============
2545
======================================================================
2575
======================================================================
2546
Parameters:
2576
Parameters:
2547
  * eax = 54 - function number
2577
  * eax = 54 - function number
2548
  * ebx = 3 - subfunction number
2578
  * ebx = 3 - subfunction number
2549
Returned value:
2579
Returned value:
2550
  * eax = 0 - success
2580
  * eax = 0 - success
2551
  * eax = 1 - error
2581
  * eax = 1 - error
2552
  * eax = -1 - main list area not found
2582
  * eax = -1 - main list area not found
2553
 
2583
 
2554
---------------------- Constants for registers: ----------------------
2584
---------------------- Constants for registers: ----------------------
2555
  eax - SF_CLIPBOARD (54)
2585
  eax - SF_CLIPBOARD (54)
2556
  ebx - SSF_DEL_SLOT (3)
2586
  ebx - SSF_DEL_SLOT (3)
2557
======================================================================
2587
======================================================================
2558
===================== Function 54, subfunction 4 =====================
2588
===================== Function 54, subfunction 4 =====================
2559
===================== Alarm reset the lock buffer ====================
2589
===================== Alarm reset the lock buffer ====================
2560
======================================================================
2590
======================================================================
2561
Parameters:
2591
Parameters:
2562
  * eax = 54 - function number
2592
  * eax = 54 - function number
2563
  * ebx = 4 - subfunction number
2593
  * ebx = 4 - subfunction number
2564
Returned value:
2594
Returned value:
2565
  * eax = 0 - success
2595
  * eax = 0 - success
2566
  * eax = -1 - main list area not found or no blocking
2596
  * eax = -1 - main list area not found or no blocking
2567
Remarks:
2597
Remarks:
2568
  * Used in exceptional cases, where no responsible or killed
2598
  * Used in exceptional cases, where no responsible or killed
2569
    application blocked the clipboard operations.
2599
    application blocked the clipboard operations.
2570
 
2600
 
2571
---------------------- Constants for registers: ----------------------
2601
---------------------- Constants for registers: ----------------------
2572
  eax - SF_CLIPBOARD (54)
2602
  eax - SF_CLIPBOARD (54)
2573
  ebx - SSF_UNLOCK_BUFFER (4)
2603
  ebx - SSF_UNLOCK_BUFFER (4)
2574
======================================================================
2604
======================================================================
2575
 Function 55, subfunction 55 - begin to play data on built-in speaker.
2605
 Function 55, subfunction 55 - begin to play data on built-in speaker.
2576
======================================================================
2606
======================================================================
2577
Parameters:
2607
Parameters:
2578
  * eax = 55 - function number
2608
  * eax = 55 - function number
2579
  * ebx = 55 - subfunction number
2609
  * ebx = 55 - subfunction number
2580
  * esi = pointer to data
2610
  * esi = pointer to data
2581
Returned value:
2611
Returned value:
2582
  * eax = 0 - success
2612
  * eax = 0 - success
2583
  * eax = 55 - error (speaker is off or busy)
2613
  * eax = 55 - error (speaker is off or busy)
2584
Data is an array of items with variable length.
2614
Data is an array of items with variable length.
2585
Format of each item is defined by first byte:
2615
Format of each item is defined by first byte:
2586
  * 0 = end of data
2616
  * 0 = end of data
2587
  * 1..0x80 = sets sound duration on 1/100 of second; sound note
2617
  * 1..0x80 = sets sound duration on 1/100 of second; sound note
2588
    is defined by immediate value of frequency
2618
    is defined by immediate value of frequency
2589
    * following word (2 bytes) contains frequency divider;
2619
    * following word (2 bytes) contains frequency divider;
2590
      frequency is defined as 1193180/divider
2620
      frequency is defined as 1193180/divider
2591
  * 0x81 = invalid
2621
  * 0x81 = invalid
2592
  * 0x82..0xFF = note is defined by octave and number:
2622
  * 0x82..0xFF = note is defined by octave and number:
2593
    * duration in 1/100 of second = (first byte)-0x81
2623
    * duration in 1/100 of second = (first byte)-0x81
2594
    * there is one more byte;
2624
    * there is one more byte;
2595
    * (second byte)=0xFF - delay
2625
    * (second byte)=0xFF - delay
2596
    * otherwise it looks like a*0x10+b, where b=number of the note in
2626
    * otherwise it looks like a*0x10+b, where b=number of the note in
2597
      an octave from 1 to 12, a=number of octave (beginning from 0)
2627
      an octave from 1 to 12, a=number of octave (beginning from 0)
2598
Remarks:
2628
Remarks:
2599
  * Speaker play can be disabled/enabled by
2629
  * Speaker play can be disabled/enabled by
2600
    subfunction 8 of function 18.
2630
    subfunction 8 of function 18.
2601
  * Function returns control, having informed the system
2631
  * Function returns control, having informed the system
2602
    an information on request. Play itself goes independently from
2632
    an information on request. Play itself goes independently from
2603
    the program.
2633
    the program.
2604
  * The data must be kept in the memory at least up to the end
2634
  * The data must be kept in the memory at least up to the end
2605
    of play.
2635
    of play.
2606
 
2636
 
2607
---------------------- Constants for registers: ----------------------
2637
---------------------- Constants for registers: ----------------------
2608
  eax - SF_SPEAKER_PLAY (55)
2638
  eax - SF_SPEAKER_PLAY (55)
2609
======================================================================
2639
======================================================================
2610
======================= Function 57 - PCI BIOS. ======================
2640
======================= Function 57 - PCI BIOS. ======================
2611
======================================================================
2641
======================================================================
2612
Parameters:
2642
Parameters:
2613
  * eax = 57 - function number
2643
  * eax = 57 - function number
2614
  * ebp corresponds to al in PCI BIOS specification
2644
  * ebp corresponds to al in PCI BIOS specification
2615
  * other registers are set according to PCI BIOS specification
2645
  * other registers are set according to PCI BIOS specification
2616
Returned value:
2646
Returned value:
2617
  * CF is undefined
2647
  * CF is undefined
2618
  * other registers are set according to PCI BIOS specification
2648
  * other registers are set according to PCI BIOS specification
2619
Remarks:
2649
Remarks:
2620
  * Many effects of this function can be also achieved with
2650
  * Many effects of this function can be also achieved with
2621
    corresponding subfunctions of function 62.
2651
    corresponding subfunctions of function 62.
2622
  * The function calls PCI32 BIOS extension, documented e.g. in
2652
  * The function calls PCI32 BIOS extension, documented e.g. in
2623
    http://alpha1.dyns.net/files/PCI/bios21.pdf.
2653
    http://alpha1.dyns.net/files/PCI/bios21.pdf.
2624
  * If BIOS does not support this extension, its behavior is emulated
2654
  * If BIOS does not support this extension, its behavior is emulated
2625
    (through kernel-mode analogues of subfunctions of function 62).
2655
    (through kernel-mode analogues of subfunctions of function 62).
2626
 
2656
 
2627
---------------------- Constants for registers: ----------------------
2657
---------------------- Constants for registers: ----------------------
2628
  eax - SF_PCI_BIOS (57)
2658
  eax - SF_PCI_BIOS (57)
2629
======================================================================
2659
======================================================================
2630
========== Function 60 - Inter Process Communication (IPC). ==========
2660
========== Function 60 - Inter Process Communication (IPC). ==========
2631
======================================================================
2661
======================================================================
2632
IPC is used for message dispatching from one process/thread to
2662
IPC is used for message dispatching from one process/thread to
2633
another. Previously it is necessary to agree how to interpret
2663
another. Previously it is necessary to agree how to interpret
2634
the concrete message.
2664
the concrete message.
2635
 
2665
 
2636
----------- Subfunction 1 - set the area for IPC receiving -----------
2666
----------- Subfunction 1 - set the area for IPC receiving -----------
2637
Is called by process-receiver.
2667
Is called by process-receiver.
2638
Parameters:
2668
Parameters:
2639
  * eax = 60 - function number
2669
  * eax = 60 - function number
2640
  * ebx = 1 - subfunction number
2670
  * ebx = 1 - subfunction number
2641
  * ecx = pointer to the buffer
2671
  * ecx = pointer to the buffer
2642
  * edx = size of the buffer
2672
  * edx = size of the buffer
2643
Returned value:
2673
Returned value:
2644
  * eax = 0 - always success
2674
  * eax = 0 - always success
2645
Format of IPC-buffer:
2675
Format of IPC-buffer:
2646
  * +0: dword: if nonzero, buffer is considered locked;
2676
  * +0: dword: if nonzero, buffer is considered locked;
2647
    lock/unlock the buffer, when you work with it and need that
2677
    lock/unlock the buffer, when you work with it and need that
2648
    buffer data are not changed from outside (no new messages)
2678
    buffer data are not changed from outside (no new messages)
2649
  * +4: dword: occupied place in the buffer (in bytes)
2679
  * +4: dword: occupied place in the buffer (in bytes)
2650
  * +8: first message
2680
  * +8: first message
2651
  * +8+n: second message
2681
  * +8+n: second message
2652
  * ...
2682
  * ...
2653
Format of a message:
2683
Format of a message:
2654
  * +0: dword: PID of sender
2684
  * +0: dword: PID of sender
2655
  * +4: dword: message length (not including this header)
2685
  * +4: dword: message length (not including this header)
2656
  * +8: n*byte: message data
2686
  * +8: n*byte: message data
2657
 
2687
 
2658
------------------ Subfunction 2 - send IPC message ------------------
2688
------------------ Subfunction 2 - send IPC message ------------------
2659
Is called by process-sender.
2689
Is called by process-sender.
2660
Parameters:
2690
Parameters:
2661
  * eax = 60 - function number
2691
  * eax = 60 - function number
2662
  * ebx = 2 - subfunction number
2692
  * ebx = 2 - subfunction number
2663
  * ecx = PID of receiver
2693
  * ecx = PID of receiver
2664
  * edx = pointer to the message data
2694
  * edx = pointer to the message data
2665
  * esi = message length (in bytes)
2695
  * esi = message length (in bytes)
2666
Returned value:
2696
Returned value:
2667
  * eax = 0 - success
2697
  * eax = 0 - success
2668
  * eax = 1 - the receiver has not defined buffer for IPC messages
2698
  * eax = 1 - the receiver has not defined buffer for IPC messages
2669
    (can be, still have no time,
2699
    (can be, still have no time,
2670
    and can be, this is not right process)
2700
    and can be, this is not right process)
2671
  * eax = 2 - the receiver has blocked IPC-buffer; try to wait a bit
2701
  * eax = 2 - the receiver has blocked IPC-buffer; try to wait a bit
2672
  * eax = 3 - overflow of IPC-buffer of the receiver
2702
  * eax = 3 - overflow of IPC-buffer of the receiver
2673
  * eax = 4 - process/thread with such PID does not exist
2703
  * eax = 4 - process/thread with such PID does not exist
2674
Remarks:
2704
Remarks:
2675
  * Immediately after writing of IPC-message to the buffer the system
2705
  * Immediately after writing of IPC-message to the buffer the system
2676
    sends to the receiver the event with code 7 (see event codes).
2706
    sends to the receiver the event with code 7 (see event codes).
2677
 
2707
 
2678
---------------------- Constants for registers: ----------------------
2708
---------------------- Constants for registers: ----------------------
2679
  eax - SF_IPC (60)
2709
  eax - SF_IPC (60)
2680
  ebx - SSF_SET_AREA (1), SSF_SEND_MESSAGE (2)
2710
  ebx - SSF_SET_AREA (1), SSF_SEND_MESSAGE (2)
2681
======================================================================
2711
======================================================================
2682
==== Function 61 - get parameters for the direct graphics access. ====
2712
==== Function 61 - get parameters for the direct graphics access. ====
2683
======================================================================
2713
======================================================================
2684
The data of the graphics screen (the memory area which displays
2714
The data of the graphics screen (the memory area which displays
2685
screen contents) are accessible to a program directly, without
2715
screen contents) are accessible to a program directly, without
2686
any system calls, through the selector gs:
2716
any system calls, through the selector gs:
2687
        mov     eax, [gs:0]
2717
        mov     eax, [gs:0]
2688
places in eax the first dword of the buffer, which contains
2718
places in eax the first dword of the buffer, which contains
2689
information on color of the left upper point (and, possibly, colors
2719
information on color of the left upper point (and, possibly, colors
2690
of several following).
2720
of several following).
2691
        mov     [gs:0], eax
2721
        mov     [gs:0], eax
2692
by work in VESA modes with LFB sets color of the left upper point
2722
by work in VESA modes with LFB sets color of the left upper point
2693
(and, possibly, colors of several following).
2723
(and, possibly, colors of several following).
2694
To interpret the data of graphics screen program needs to know
2724
To interpret the data of graphics screen program needs to know
2695
some parameters, returning by this function.
2725
some parameters, returning by this function.
2696
Remarks:
2726
Remarks:
2697
  * Graphics parameters changes very seldom at work,
2727
  * Graphics parameters changes very seldom at work,
2698
    namely, only in cases, when user works with the application VRR.
2728
    namely, only in cases, when user works with the application VRR.
2699
  * At videomode change the system redraws all windows (event
2729
  * At videomode change the system redraws all windows (event
2700
    with code 1) and redraws the background (event 5).
2730
    with code 1) and redraws the background (event 5).
2701
    Same events occur in other cases too, which meet much more often,
2731
    Same events occur in other cases too, which meet much more often,
2702
    than videomode change.
2732
    than videomode change.
2703
  * By operation in videomodes with LFB the selector gs points to
2733
  * By operation in videomodes with LFB the selector gs points to
2704
    LFB itself, so reading/writing on gs result directly in
2734
    LFB itself, so reading/writing on gs result directly in
2705
    change of screen contents. By operation in videomodes without
2735
    change of screen contents. By operation in videomodes without
2706
    LFB gs points to some data area in the kernel, and all functions
2736
    LFB gs points to some data area in the kernel, and all functions
2707
    of screen output fulfil honesty double operation on writing
2737
    of screen output fulfil honesty double operation on writing
2708
    directly to the screen and writing to this buffer. In result
2738
    directly to the screen and writing to this buffer. In result
2709
    at reading contents of this buffer the results correspond to
2739
    at reading contents of this buffer the results correspond to
2710
    screen contents (with, generally speaking, large color
2740
    screen contents (with, generally speaking, large color
2711
    resolution), and writing is ignored.
2741
    resolution), and writing is ignored.
2712
    One exception is the mode 320*200, for which main loop of the
2742
    One exception is the mode 320*200, for which main loop of the
2713
    system thread updates the screen according to mouse movements.
2743
    system thread updates the screen according to mouse movements.
2714
 
2744
 
2715
------------------------- Screen resolution --------------------------
2745
------------------------- Screen resolution --------------------------
2716
Parameters:
2746
Parameters:
2717
  * eax = 61 - function number
2747
  * eax = 61 - function number
2718
  * ebx = 1 - subfunction number
2748
  * ebx = 1 - subfunction number
2719
Returned value:
2749
Returned value:
2720
  * eax = [resolution on x axis]*65536 + [resolution on y axis]
2750
  * eax = [resolution on x axis]*65536 + [resolution on y axis]
2721
Remarks:
2751
Remarks:
2722
  * One can use function 14 paying attention that
2752
  * One can use function 14 paying attention that
2723
    it returns sizes on 1 pixel less. It is fully equivalent way.
2753
    it returns sizes on 1 pixel less. It is fully equivalent way.
2724
 
2754
 
2725
---------------------- Number of bits per pixel ----------------------
2755
---------------------- Number of bits per pixel ----------------------
2726
Parameters:
2756
Parameters:
2727
  * eax = 61 - function number
2757
  * eax = 61 - function number
2728
  * ebx = 2 - subfunction number
2758
  * ebx = 2 - subfunction number
2729
Returned value:
2759
Returned value:
2730
  * eax = number of bits per pixel (24 or 32)
2760
  * eax = number of bits per pixel (24 or 32)
2731
 
2761
 
2732
-------------------- Number of bytes per scanline --------------------
2762
-------------------- Number of bytes per scanline --------------------
2733
Parameters:
2763
Parameters:
2734
  * eax = 61 - function number
2764
  * eax = 61 - function number
2735
  * ebx = 3 - subfunction number
2765
  * ebx = 3 - subfunction number
2736
Returned value:
2766
Returned value:
2737
  * eax = number of bytes occupied by one scanline
2767
  * eax = number of bytes occupied by one scanline
2738
    (horizontal line on the screen)
2768
    (horizontal line on the screen)
2739
 
2769
 
2740
---------------------- Constants for registers: ----------------------
2770
---------------------- Constants for registers: ----------------------
2741
  eax - SF_GET_GRAPHICAL_PARAMS (61)
2771
  eax - SF_GET_GRAPHICAL_PARAMS (61)
2742
  ebx - SSF_SCREEN_SIZE (1), SSF_BITS_PER_PIXEL (2),
2772
  ebx - SSF_SCREEN_SIZE (1), SSF_BITS_PER_PIXEL (2),
2743
    SSF_BYTES_PER_LINE (3)
2773
    SSF_BYTES_PER_LINE (3)
2744
======================================================================
2774
======================================================================
2745
===== Function 62, subfunction 0 - get version of PCI-interface. =====
2775
===== Function 62, subfunction 0 - get version of PCI-interface. =====
2746
======================================================================
2776
======================================================================
2747
Parameters:
2777
Parameters:
2748
  * eax = 62 - function number
2778
  * eax = 62 - function number
2749
  * bl = 0 - subfunction number
2779
  * bl = 0 - subfunction number
2750
Returned value:
2780
Returned value:
2751
  * eax = -1 - PCI access is disabled; otherwise
2781
  * eax = -1 - PCI access is disabled; otherwise
2752
  * ah.al = version of PCI-interface (ah=version, al=subversion)
2782
  * ah.al = version of PCI-interface (ah=version, al=subversion)
2753
  * high word of eax is zeroed
2783
  * high word of eax is zeroed
2754
Remarks:
2784
Remarks:
2755
  * Previously low-level access to PCI for applications must be
2785
  * Previously low-level access to PCI for applications must be
2756
    enabled by subfunction 12 of function 21.
2786
    enabled by subfunction 12 of function 21.
2757
  * If PCI BIOS is not supported, the value of ax is undefined.
2787
  * If PCI BIOS is not supported, the value of ax is undefined.
2758
 
2788
 
2759
---------------------- Constants for registers: ----------------------
2789
---------------------- Constants for registers: ----------------------
2760
  eax - SF_PCI (62)
2790
  eax - SF_PCI (62)
2761
  ebx - SSF_GET_VERSION (0)
2791
  ebx - SSF_GET_VERSION (0)
2762
======================================================================
2792
======================================================================
2763
==== Function 62, subfunction 1 - get number of the last PCI-bus. ====
2793
==== Function 62, subfunction 1 - get number of the last PCI-bus. ====
2764
======================================================================
2794
======================================================================
2765
Parameters:
2795
Parameters:
2766
  * eax = 62 - function number
2796
  * eax = 62 - function number
2767
  * bl = 1 - subfunction number
2797
  * bl = 1 - subfunction number
2768
Returned value:
2798
Returned value:
2769
  * eax = -1 - access to PCI is disabled; otherwise
2799
  * eax = -1 - access to PCI is disabled; otherwise
2770
  * al = number of the last PCI-bus; other bytes of eax are destroyed
2800
  * al = number of the last PCI-bus; other bytes of eax are destroyed
2771
Remarks:
2801
Remarks:
2772
  * Previously low-level access to PCI for applications must be
2802
  * Previously low-level access to PCI for applications must be
2773
    enabled by subfunction 12 of function 21.
2803
    enabled by subfunction 12 of function 21.
2774
  * If PCI BIOS is not supported, the value of ax is undefined.
2804
  * If PCI BIOS is not supported, the value of ax is undefined.
2775
 
2805
 
2776
---------------------- Constants for registers: ----------------------
2806
---------------------- Constants for registers: ----------------------
2777
  eax - SF_PCI (62)
2807
  eax - SF_PCI (62)
2778
  ebx - SSF_GET_LAST_BUS (1)
2808
  ebx - SSF_GET_LAST_BUS (1)
2779
======================================================================
2809
======================================================================
2780
===================== Function 62, subfunction 2 =====================
2810
===================== Function 62, subfunction 2 =====================
2781
===== Get mechanism of addressing to the PCI configuration space. ====
2811
===== Get mechanism of addressing to the PCI configuration space. ====
2782
======================================================================
2812
======================================================================
2783
Parameters:
2813
Parameters:
2784
  * eax = 62 - function number
2814
  * eax = 62 - function number
2785
  * bl = 2 - subfunction number
2815
  * bl = 2 - subfunction number
2786
Returned value:
2816
Returned value:
2787
  * eax = -1 - access to PCI is disabled; otherwise
2817
  * eax = -1 - access to PCI is disabled; otherwise
2788
  * al = mechanism (1 or 2); other bytes of eax are destroyed
2818
  * al = mechanism (1 or 2); other bytes of eax are destroyed
2789
Remarks:
2819
Remarks:
2790
  * Previously low-level access to PCI for applications must be
2820
  * Previously low-level access to PCI for applications must be
2791
    enabled by subfunction 12 of function 21.
2821
    enabled by subfunction 12 of function 21.
2792
  * Addressing mechanism is selected depending on
2822
  * Addressing mechanism is selected depending on
2793
    equipment characteristics.
2823
    equipment characteristics.
2794
  * Subfunctions of read and write work automatically
2824
  * Subfunctions of read and write work automatically
2795
    with the selected mechanism.
2825
    with the selected mechanism.
2796
 
2826
 
2797
---------------------- Constants for registers: ----------------------
2827
---------------------- Constants for registers: ----------------------
2798
  eax - SF_PCI (62)
2828
  eax - SF_PCI (62)
2799
  ebx - SSF_GET_ADRR_MODE (2)
2829
  ebx - SSF_GET_ADRR_MODE (2)
2800
======================================================================
2830
======================================================================
2801
======== Function 62, subfunctions 4,5,6 - read PCI-register. ========
2831
======== Function 62, subfunctions 4,5,6 - read PCI-register. ========
2802
======================================================================
2832
======================================================================
2803
Parameters:
2833
Parameters:
2804
  * eax = 62 - function number
2834
  * eax = 62 - function number
2805
  * bl = 4 - read byte
2835
  * bl = 4 - read byte
2806
  * bl = 5 - read word
2836
  * bl = 5 - read word
2807
  * bl = 6 - read dword
2837
  * bl = 6 - read dword
2808
  * bh = number of PCI-bus
2838
  * bh = number of PCI-bus
2809
  * ch = dddddfff, where ddddd = number of the device on the bus,
2839
  * ch = dddddfff, where ddddd = number of the device on the bus,
2810
    fff = function number of device
2840
    fff = function number of device
2811
  * cl = number of register (must be even for bl=5,
2841
  * cl = number of register (must be even for bl=5,
2812
    divisible by 4 for bl=6)
2842
    divisible by 4 for bl=6)
2813
Returned value:
2843
Returned value:
2814
  * eax = -1 - error (access to PCI is disabled or parameters
2844
  * eax = -1 - error (access to PCI is disabled or parameters
2815
    are not supported); otherwise
2845
    are not supported); otherwise
2816
  * al/ax/eax (depending on requested size) contains the data;
2846
  * al/ax/eax (depending on requested size) contains the data;
2817
    the other part of register eax is destroyed
2847
    the other part of register eax is destroyed
2818
Remarks:
2848
Remarks:
2819
  * Previously low-level access to PCI for applications must be
2849
  * Previously low-level access to PCI for applications must be
2820
    enabled by subfunction 12 of function 21.
2850
    enabled by subfunction 12 of function 21.
2821
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2851
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2822
    function number. To get access mechanism use subfunction 2.
2852
    function number. To get access mechanism use subfunction 2.
2823
  * Some registers are standard and exist for all devices, some are
2853
  * Some registers are standard and exist for all devices, some are
2824
    defined by the concrete device. The list of registers of the
2854
    defined by the concrete device. The list of registers of the
2825
    first type can be found e.g. in famous
2855
    first type can be found e.g. in famous
2826
    Interrupt List by Ralf Brown
2856
    Interrupt List by Ralf Brown
2827
    (http://www.pobox.com/~ralf/files.html,
2857
    (http://www.pobox.com/~ralf/files.html,
2828
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/);
2858
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/);
2829
    registers of the second type must be listed
2859
    registers of the second type must be listed
2830
    in the device documentation.
2860
    in the device documentation.
2831
 
2861
 
2832
---------------------- Constants for registers: ----------------------
2862
---------------------- Constants for registers: ----------------------
2833
  eax - SF_PCI (62)
2863
  eax - SF_PCI (62)
2834
  ebx - SSF_READ_BYTE (4), SSF_READ_WORD (5), SSF_READ_DWORD (6)
2864
  ebx - SSF_READ_BYTE (4), SSF_READ_WORD (5), SSF_READ_DWORD (6)
2835
======================================================================
2865
======================================================================
2836
====== Function 62, subfunctions 8,9,10 - write to PCI-register. =====
2866
====== Function 62, subfunctions 8,9,10 - write to PCI-register. =====
2837
======================================================================
2867
======================================================================
2838
Parameters:
2868
Parameters:
2839
  * eax = 62 - function number
2869
  * eax = 62 - function number
2840
  * bl = 8 - write byte
2870
  * bl = 8 - write byte
2841
  * bl = 9 - write word
2871
  * bl = 9 - write word
2842
  * bl = 10 - write dword
2872
  * bl = 10 - write dword
2843
  * bh = number of PCI-bus
2873
  * bh = number of PCI-bus
2844
  * ch = dddddfff, where ddddd = number of the device on the bus,
2874
  * ch = dddddfff, where ddddd = number of the device on the bus,
2845
    fff = function number of device
2875
    fff = function number of device
2846
  * cl = number of register (must be even for bl=9,
2876
  * cl = number of register (must be even for bl=9,
2847
    divisible by 4 for bl=10)
2877
    divisible by 4 for bl=10)
2848
  * dl/dx/edx (depending on requested size) contatins
2878
  * dl/dx/edx (depending on requested size) contatins
2849
    the data to write
2879
    the data to write
2850
Returned value:
2880
Returned value:
2851
  * eax = -1 - error (access to PCI is disabled or parameters
2881
  * eax = -1 - error (access to PCI is disabled or parameters
2852
    are not supported)
2882
    are not supported)
2853
  * eax = 0 - success
2883
  * eax = 0 - success
2854
Remarks:
2884
Remarks:
2855
  * Previously low-level access to PCI for applications must be
2885
  * Previously low-level access to PCI for applications must be
2856
    enabled by subfunction 12 of function 21.
2886
    enabled by subfunction 12 of function 21.
2857
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2887
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2858
    function number. To get access mechanism use subfunction 2.
2888
    function number. To get access mechanism use subfunction 2.
2859
  * Some registers are standard and exist for all devices, some are
2889
  * Some registers are standard and exist for all devices, some are
2860
    defined by the concrete device. The list of registers of the
2890
    defined by the concrete device. The list of registers of the
2861
    first type can be found e.g. in famous Interrupt List by
2891
    first type can be found e.g. in famous Interrupt List by
2862
    Ralf Brown; registers of the second type must be listed
2892
    Ralf Brown; registers of the second type must be listed
2863
    in the device documentation.
2893
    in the device documentation.
2864
 
2894
 
2865
---------------------- Constants for registers: ----------------------
2895
---------------------- Constants for registers: ----------------------
2866
  eax - SF_PCI (62)
2896
  eax - SF_PCI (62)
2867
  ebx - SSF_WRITE_BYTE (8), SSF_WRITE_WORD (9), SSF_WRITE_DWORD (10)
2897
  ebx - SSF_WRITE_BYTE (8), SSF_WRITE_WORD (9), SSF_WRITE_DWORD (10)
2868
======================================================================
2898
======================================================================
2869
============== Function 63 - work with the debug board. ==============
2899
============== Function 63 - work with the debug board. ==============
2870
======================================================================
2900
======================================================================
2871
The debug board is the global system buffer (with the size
2901
The debug board is the global system buffer (with the size
2872
1024 bytes), to which any program can write (generally speaking,
2902
1024 bytes), to which any program can write (generally speaking,
2873
arbitrary) data and from which other program can read these data.
2903
arbitrary) data and from which other program can read these data.
2874
By the agreement written data are text strings interpreted as
2904
By the agreement written data are text strings interpreted as
2875
debug messages on a course of program execution. The kernel in
2905
debug messages on a course of program execution. The kernel in
2876
some situations also writes to the debug board information on
2906
some situations also writes to the debug board information on
2877
execution of some functions; by the agreement kernel messages
2907
execution of some functions; by the agreement kernel messages
2878
begins from the prefix "K : ".
2908
begins from the prefix "K : ".
2879
For view of the debug board the application 'board' was created,
2909
For view of the debug board the application 'board' was created,
2880
which reads data from the buffer and displays them in its window.
2910
which reads data from the buffer and displays them in its window.
2881
'board' interpretes the sequence of codes 13,10 as newline.
2911
'board' interpretes the sequence of codes 13,10 as newline.
2882
A character with null code in an end of line is not necessary,
2912
A character with null code in an end of line is not necessary,
2883
but also does not prevent.
2913
but also does not prevent.
2884
Because debugger has been written, the value of the debug board
2914
Because debugger has been written, the value of the debug board
2885
has decreased, as debugger allows to inspect completely a course of
2915
has decreased, as debugger allows to inspect completely a course of
2886
program execution without any efforts from the direction of program
2916
program execution without any efforts from the direction of program
2887
itself. Nevertheless in some cases the debug board is still useful.
2917
itself. Nevertheless in some cases the debug board is still useful.
2888
 
2918
 
2889
----------------------------- Write byte -----------------------------
2919
----------------------------- Write byte -----------------------------
2890
Parameters:
2920
Parameters:
2891
  * eax = 63 - function number
2921
  * eax = 63 - function number
2892
  * ebx = 1 - subfunction number
2922
  * ebx = 1 - subfunction number
2893
  * cl = data byte
2923
  * cl = data byte
2894
Returned value:
2924
Returned value:
2895
  * function does not return value
2925
  * function does not return value
2896
Remarks:
2926
Remarks:
2897
  * Byte is written to the buffer. Buffer size is 512 bytes.
2927
  * Byte is written to the buffer. Buffer size is 512 bytes.
2898
    At buffer overflow all obtained data are lost.
2928
    At buffer overflow all obtained data are lost.
2899
  * For output to the debug board of more complicated objects
2929
  * For output to the debug board of more complicated objects
2900
    (strings, numbers) it is enough to call this function in cycle.
2930
    (strings, numbers) it is enough to call this function in cycle.
2901
    It is possible not to write the appropriate code manually and use
2931
    It is possible not to write the appropriate code manually and use
2902
    file 'debug.inc', which is included into the distributive.
2932
    file 'debug.inc', which is included into the distributive.
2903
 
2933
 
2904
----------------------------- Read byte ------------------------------
2934
----------------------------- Read byte ------------------------------
2905
Takes away byte from the buffer.
2935
Takes away byte from the buffer.
2906
Parameters:
2936
Parameters:
2907
  * eax = 63 - function number
2937
  * eax = 63 - function number
2908
  * ebx = 2 - subfunction number
2938
  * ebx = 2 - subfunction number
2909
Returned value:
2939
Returned value:
2910
  * eax = ebx = 0 - the buffer is empty
2940
  * eax = ebx = 0 - the buffer is empty
2911
  * eax = byte, ebx = 1 - byte was successfully read
2941
  * eax = byte, ebx = 1 - byte was successfully read
2912
 
2942
 
2913
---------------------- Constants for registers: ----------------------
2943
---------------------- Constants for registers: ----------------------
2914
  eax - SF_BOARD (63)
2944
  eax - SF_BOARD (63)
2915
  ebx - SSF_DEBUG_WRITE (1), SSF_DEBUG_READ (2)
2945
  ebx - SSF_DEBUG_WRITE (1), SSF_DEBUG_READ (2)
2916
======================================================================
2946
======================================================================
2917
============== Function 64 - resize application memory. ==============
2947
============== Function 64 - resize application memory. ==============
2918
======================================================================
2948
======================================================================
2919
Parameters:
2949
Parameters:
2920
  * eax = 64 - function number
2950
  * eax = 64 - function number
2921
  * ebx = 1 - unique subfunction
2951
  * ebx = 1 - unique subfunction
2922
  * ecx = new memory size
2952
  * ecx = new memory size
2923
Returned value:
2953
Returned value:
2924
  * eax = 0 - success
2954
  * eax = 0 - success
2925
  * eax = 1 - not enough memory
2955
  * eax = 1 - not enough memory
2926
Remarks:
2956
Remarks:
2927
  * There is another way to dynamically allocate/free memory -
2957
  * There is another way to dynamically allocate/free memory -
2928
    subfunctions 11, 12, 13 of function 68.
2958
    subfunctions 11, 12, 13 of function 68.
2929
  * The function cannot be used together with 68.11, 68.12, 68.13.
2959
  * The function cannot be used together with 68.11, 68.12, 68.13.
2930
    The function call will be ignored after creation of process heap
2960
    The function call will be ignored after creation of process heap
2931
    with function 68.11.
2961
    with function 68.11.
2932
 
2962
 
2933
---------------------- Constants for registers: ----------------------
2963
---------------------- Constants for registers: ----------------------
2934
  eax - SF_MEMORY_RESIZE (64)
2964
  eax - SF_MEMORY_RESIZE (64)
2935
======================================================================
2965
======================================================================
2936
======== Function 65 - draw image with palette in the window. ========
2966
======== Function 65 - draw image with palette in the window. ========
2937
======================================================================
2967
======================================================================
2938
Parameters:
2968
Parameters:
2939
  * eax = 65 - function number
2969
  * eax = 65 - function number
2940
  * ebx = pointer to the image
2970
  * ebx = pointer to the image
2941
  * ecx = [size on axis x]*65536 + [size on axis y]
2971
  * ecx = [size on axis x]*65536 + [size on axis y]
2942
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2972
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2943
  * esi = number of bits per pixel, must be 1,2,4,8,9,15,16,24 or 32;
2973
  * esi = number of bits per pixel, must be 1,2,4,8,9,15,16,24 or 32;
2944
  * edi = pointer to palette (2 to the power esi colors 0x00RRGGBB);
2974
  * edi = pointer to palette (2 to the power esi colors 0x00RRGGBB);
2945
          ignored when esi > 8
2975
          ignored when esi > 8
2946
  * ebp = offset of next row data relative to previous row data
2976
  * ebp = offset of next row data relative to previous row data
2947
Returned value:
2977
Returned value:
2948
  * function does not return value
2978
  * function does not return value
2949
Remarks:
2979
Remarks:
2950
  * Coordinates of the image are coordinates of the upper left corner
2980
  * Coordinates of the image are coordinates of the upper left corner
2951
    of the image relative to the window.
2981
    of the image relative to the window.
2952
  * Format of image with 1 bit per pixel: each byte of image
2982
  * Format of image with 1 bit per pixel: each byte of image
2953
    (possibly excluding last bytes in rows), contains information on
2983
    (possibly excluding last bytes in rows), contains information on
2954
    the color of 8 pixels, MSB corresponds to first pixel.
2984
    the color of 8 pixels, MSB corresponds to first pixel.
2955
  * Format of image with 2 bits per pixel: each byte of image
2985
  * Format of image with 2 bits per pixel: each byte of image
2956
    (possibly excluding last bytes in rows), contains information on
2986
    (possibly excluding last bytes in rows), contains information on
2957
    the color of 4 pixels, two MSBs correspond to first pixel.
2987
    the color of 4 pixels, two MSBs correspond to first pixel.
2958
  * Format of image with 4 bits per pixel: each byte of image
2988
  * Format of image with 4 bits per pixel: each byte of image
2959
    excluding last bytes in rows (if width is odd) contains
2989
    excluding last bytes in rows (if width is odd) contains
2960
    information on the color of 2 pixels, high-order tetrad
2990
    information on the color of 2 pixels, high-order tetrad
2961
    corresponds to first pixel.
2991
    corresponds to first pixel.
2962
  * Format of image with 8 bits per pixel: each byte of image is
2992
  * Format of image with 8 bits per pixel: each byte of image is
2963
    index in the palette.
2993
    index in the palette.
2964
  * Format of image with 9 bits per pixel: array of one byte values;
2994
  * Format of image with 9 bits per pixel: array of one byte values;
2965
    each byte (8 bit) represents the intensity of gray for one pixel;
2995
    each byte (8 bit) represents the intensity of gray for one pixel;
2966
    this format is equal to 8bpp without palette.
2996
    this format is equal to 8bpp without palette.
2967
  * Format of image with 15 bits per pixel: the color of each pixel
2997
  * Format of image with 15 bits per pixel: the color of each pixel
2968
    is coded as (bit representation) 0RRRRRGGGGGBBBBB - 5 bits per
2998
    is coded as (bit representation) 0RRRRRGGGGGBBBBB - 5 bits per
2969
    each color.
2999
    each color.
2970
  * Format of image with 16 bits per pixel: the color of each pixel
3000
  * Format of image with 16 bits per pixel: the color of each pixel
2971
    is coded as RRRRRGGGGGGBBBBB (5+6+5).
3001
    is coded as RRRRRGGGGGGBBBBB (5+6+5).
2972
  * Format of image with 24 bits per pixel: the color of each pixel
3002
  * Format of image with 24 bits per pixel: the color of each pixel
2973
    is coded as 3 bytes - sequentially blue, green, red components.
3003
    is coded as 3 bytes - sequentially blue, green, red components.
2974
  * Format of image with 32 bits per pixel: similar to 24, but
3004
  * Format of image with 32 bits per pixel: similar to 24, but
2975
    one additional ignored byte is present. It's format is BGRX,
3005
    one additional ignored byte is present. It's format is BGRX,
2976
    where X is the ignored byte.
3006
    where X is the ignored byte.
2977
  * The call to function 7 is equivalent to call to this function
3007
  * The call to function 7 is equivalent to call to this function
2978
    with esi=24, ebp=0.
3008
    with esi=24, ebp=0.
2979
 
3009
 
2980
---------------------- Constants for registers: ----------------------
3010
---------------------- Constants for registers: ----------------------
2981
  eax - SF_PUT_IMAGE_EXT (65)
3011
  eax - SF_PUT_IMAGE_EXT (65)
2982
======================================================================
3012
======================================================================
2983
================== Function 66 - work with keyboard. =================
3013
================== Function 66 - work with keyboard. =================
2984
======================================================================
3014
======================================================================
2985
The input mode influences results of reading keys by function 2.
3015
The input mode influences results of reading keys by function 2.
2986
When a program loads, ASCII input mode is set for it.
3016
When a program loads, ASCII input mode is set for it.
2987
 
3017
 
2988
-------------- Subfunction 1 - set keyboard input mode. --------------
3018
-------------- Subfunction 1 - set keyboard input mode. --------------
2989
Parameters:
3019
Parameters:
2990
  * eax = 66 - function number
3020
  * eax = 66 - function number
2991
  * ebx = 1 - subfunction number
3021
  * ebx = 1 - subfunction number
2992
  * ecx = mode:
3022
  * ecx = mode:
2993
    * 0 = normal (ASCII-characters)
3023
    * 0 = normal (ASCII-characters)
2994
    * 1 = scancodes
3024
    * 1 = scancodes
2995
Returned value:
3025
Returned value:
2996
  * function does not return value
3026
  * function does not return value
2997
 
3027
 
2998
-------------- Subfunction 2 - get keyboard input mode. --------------
3028
-------------- Subfunction 2 - get keyboard input mode. --------------
2999
Parameters:
3029
Parameters:
3000
  * eax = 66 - function number
3030
  * eax = 66 - function number
3001
  * ebx = 2 - subfunction number
3031
  * ebx = 2 - subfunction number
3002
Returned value:
3032
Returned value:
3003
  * eax = current mode
3033
  * eax = current mode
3004
 
3034
 
3005
------------ Subfunction 3 - get status of control keys. -------------
3035
------------ Subfunction 3 - get status of control keys. -------------
3006
Parameters:
3036
Parameters:
3007
  * eax = 66 - function number
3037
  * eax = 66 - function number
3008
  * ebx = 3 - subfunction number
3038
  * ebx = 3 - subfunction number
3009
Returned value:
3039
Returned value:
3010
  * eax = bit mask:
3040
  * eax = bit mask:
3011
  * bit 0  (mask 1): left Shift is pressed
3041
  * bit 0  (mask 1): left Shift is pressed
3012
  * bit 1  (mask 2): right Shift is pressed
3042
  * bit 1  (mask 2): right Shift is pressed
3013
  * bit 2  (mask 4): left Ctrl is pressed
3043
  * bit 2  (mask 4): left Ctrl is pressed
3014
  * bit 3  (mask 8): right Ctrl is pressed
3044
  * bit 3  (mask 8): right Ctrl is pressed
3015
  * bit 4  (mask 0x10): left Alt is pressed
3045
  * bit 4  (mask 0x10): left Alt is pressed
3016
  * bit 5  (mask 0x20): right Alt is pressed
3046
  * bit 5  (mask 0x20): right Alt is pressed
3017
  * bit 6  (mask 0x40): CapsLock is on
3047
  * bit 6  (mask 0x40): CapsLock is on
3018
  * bit 7  (mask 0x80): NumLock is on
3048
  * bit 7  (mask 0x80): NumLock is on
3019
  * bit 8  (mask 0x100): ScrollLock is on
3049
  * bit 8  (mask 0x100): ScrollLock is on
3020
  * bit 9  (mask 0x200): left Win is pressed
3050
  * bit 9  (mask 0x200): left Win is pressed
3021
  * bit 10 (mask 0x400): right Win is pressed
3051
  * bit 10 (mask 0x400): right Win is pressed
3022
  * other bits are cleared
3052
  * other bits are cleared
3023
 
3053
 
3024
-------------- Subfunction 4 - set system-wide hotkey. ---------------
3054
-------------- Subfunction 4 - set system-wide hotkey. ---------------
3025
When hotkey is pressed, the system notifies only those applications,
3055
When hotkey is pressed, the system notifies only those applications,
3026
which have installed it; the active application (which receives
3056
which have installed it; the active application (which receives
3027
all normal input) does not receive such keys.
3057
all normal input) does not receive such keys.
3028
The notification consists in sending event with the code 2.
3058
The notification consists in sending event with the code 2.
3029
Reading hotkey is the same as reading normal key - by function 2.
3059
Reading hotkey is the same as reading normal key - by function 2.
3030
Parameters:
3060
Parameters:
3031
  * eax = 66 - function number
3061
  * eax = 66 - function number
3032
  * ebx = 4 - subfunction number
3062
  * ebx = 4 - subfunction number
3033
  * cl determines key scancode;
3063
  * cl determines key scancode;
3034
    use cl=0 to give combinations such as Ctrl+Shift
3064
    use cl=0 to give combinations such as Ctrl+Shift
3035
  * edx = 0xXYZ determines possible states of control keys:
3065
  * edx = 0xXYZ determines possible states of control keys:
3036
    * Z (low 4 bits) determines state of LShift and RShift:
3066
    * Z (low 4 bits) determines state of LShift and RShift:
3037
      * 0 = no key must be pressed;
3067
      * 0 = no key must be pressed;
3038
      * 1 = exactly one key must be pressed;
3068
      * 1 = exactly one key must be pressed;
3039
      * 2 = both keys must be pressed;
3069
      * 2 = both keys must be pressed;
3040
      * 3 = must be pressed LShift, but not RShift;
3070
      * 3 = must be pressed LShift, but not RShift;
3041
      * 4 = must be pressed RShift, but not LShift
3071
      * 4 = must be pressed RShift, but not LShift
3042
    * Y - similar for LCtrl and RCtrl;
3072
    * Y - similar for LCtrl and RCtrl;
3043
    * X - similar for LAlt and RAlt
3073
    * X - similar for LAlt and RAlt
3044
Returned value:
3074
Returned value:
3045
  * eax=0 - success
3075
  * eax=0 - success
3046
  * eax=1 - too mant hotkeys (maximum 256 are allowed)
3076
  * eax=1 - too mant hotkeys (maximum 256 are allowed)
3047
Remarks:
3077
Remarks:
3048
  * Hotkey can work either at pressing or at release. Release
3078
  * Hotkey can work either at pressing or at release. Release
3049
    scancode of a key is more on 128 than pressing scancode
3079
    scancode of a key is more on 128 than pressing scancode
3050
    (i.e. high bit is set).
3080
    (i.e. high bit is set).
3051
  * Several applications can set the same combination;
3081
  * Several applications can set the same combination;
3052
    all such applications will be informed on pressing
3082
    all such applications will be informed on pressing
3053
    such combination.
3083
    such combination.
3054
 
3084
 
3055
-------------- Subfunction 5 - delete installed hotkey. --------------
3085
-------------- Subfunction 5 - delete installed hotkey. --------------
3056
Parameters:
3086
Parameters:
3057
  * eax = 66 - function number
3087
  * eax = 66 - function number
3058
  * ebx = 5 - subfunction number
3088
  * ebx = 5 - subfunction number
3059
  * cl = scancode of key and edx = 0xXYZ the same as in subfunction 4
3089
  * cl = scancode of key and edx = 0xXYZ the same as in subfunction 4
3060
Returned value:
3090
Returned value:
3061
  * eax = 0 - success
3091
  * eax = 0 - success
3062
  * eax = 1 - there is no such hotkey
3092
  * eax = 1 - there is no such hotkey
3063
Remarks:
3093
Remarks:
3064
  * When a process/thread terminates, all hotkey installed by it are
3094
  * When a process/thread terminates, all hotkey installed by it are
3065
    deleted.
3095
    deleted.
3066
  * The call to this subfunction does not affect other applications.
3096
  * The call to this subfunction does not affect other applications.
3067
    If other application has defined the same combination, it will
3097
    If other application has defined the same combination, it will
3068
    still receive notices.
3098
    still receive notices.
3069
 
3099
 
3070
--------------- Subfunction 6 - block the normal input. --------------
3100
--------------- Subfunction 6 - block the normal input. --------------
3071
Parameters:
3101
Parameters:
3072
  * eax = 66 - function number
3102
  * eax = 66 - function number
3073
  * ebx = 6 - subfunction number
3103
  * ebx = 6 - subfunction number
3074
Returned value:
3104
Returned value:
3075
  * function does not return value
3105
  * function does not return value
3076
Remarks:
3106
Remarks:
3077
  * Blocking the normal keyboard input for installed hotkeys
3107
  * Blocking the normal keyboard input for installed hotkeys
3078
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3108
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3079
 
3109
 
3080
------------ Subfunction 7 - unlock the normal input. ----------------
3110
------------ Subfunction 7 - unlock the normal input. ----------------
3081
Parameters:
3111
Parameters:
3082
  * eax = 66 - function number
3112
  * eax = 66 - function number
3083
  * ebx = 7 - subfunction number
3113
  * ebx = 7 - subfunction number
3084
Returned value:
3114
Returned value:
3085
  * function does not return value
3115
  * function does not return value
3086
Remarks:
3116
Remarks:
3087
  * Unlocking the results of the f. 66.6
3117
  * Unlocking the results of the f. 66.6
3088
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3118
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3089
 
3119
 
3090
---------------------- Constants for registers: ----------------------
3120
---------------------- Constants for registers: ----------------------
3091
  eax - SF_KEYBOARD (66)
3121
  eax - SF_KEYBOARD (66)
3092
  ebx - SSF_SET_INPUT_MODE (1), SSF_GET_INPUT_MODE (2),
3122
  ebx - SSF_SET_INPUT_MODE (1), SSF_GET_INPUT_MODE (2),
3093
    SSF_GET_CONTROL_KEYS (3), SSF_SET_SYS_HOTKEY (4),
3123
    SSF_GET_CONTROL_KEYS (3), SSF_SET_SYS_HOTKEY (4),
3094
    SSF_DEL_SYS_HOTKEY (5),  SSF_LOCK_INPUT (6), SSF_UNLOCK_INPUT (7)
3124
    SSF_DEL_SYS_HOTKEY (5),  SSF_LOCK_INPUT (6), SSF_UNLOCK_INPUT (7)
3095
======================================================================
3125
======================================================================
3096
========= Function 67 - change position/sizes of the window. =========
3126
========= Function 67 - change position/sizes of the window. =========
3097
======================================================================
3127
======================================================================
3098
Parameters:
3128
Parameters:
3099
  * eax = 67 - function number
3129
  * eax = 67 - function number
3100
  * ebx = new x-coordinate of the window
3130
  * ebx = new x-coordinate of the window
3101
  * ecx = new y-coordinate of the window
3131
  * ecx = new y-coordinate of the window
3102
  * edx = new x-size of the window
3132
  * edx = new x-size of the window
3103
  * esi = new y-size of the window
3133
  * esi = new y-size of the window
3104
Returned value:
3134
Returned value:
3105
  * function does not return value
3135
  * function does not return value
3106
Remarks:
3136
Remarks:
3107
  * The value -1 for a parameter means "do not change"; e.g. to move
3137
  * The value -1 for a parameter means "do not change"; e.g. to move
3108
    the window without resizing it is possible to specify edx=esi=-1.
3138
    the window without resizing it is possible to specify edx=esi=-1.
3109
  * Previously the window must be defined by function 0.
3139
  * Previously the window must be defined by function 0.
3110
    It sets initial coordinates and sizes of the window.
3140
    It sets initial coordinates and sizes of the window.
3111
  * Sizes of the window are understood in sense of function 0,
3141
  * Sizes of the window are understood in sense of function 0,
3112
    that is one pixel less than real sizes.
3142
    that is one pixel less than real sizes.
3113
  * The function call for maximized windows is simply ignored.
3143
  * The function call for maximized windows is simply ignored.
3114
  * For windows of appropriate styles position and/or sizes can be
3144
  * For windows of appropriate styles position and/or sizes can be
3115
    changed by user; current position and sizes can be obtained by
3145
    changed by user; current position and sizes can be obtained by
3116
    call to function 9.
3146
    call to function 9.
3117
  * The function sends to the window redraw event (with the code 1).
3147
  * The function sends to the window redraw event (with the code 1).
3118
 
3148
 
3119
---------------------- Constants for registers: ----------------------
3149
---------------------- Constants for registers: ----------------------
3120
  eax - SF_CHANGE_WINDOW (67)
3150
  eax - SF_CHANGE_WINDOW (67)
3121
======================================================================
3151
======================================================================
3122
====== Function 68, subfunction 0 - get the task switch counter. =====
3152
====== Function 68, subfunction 0 - get the task switch counter. =====
3123
======================================================================
3153
======================================================================
3124
Parameters:
3154
Parameters:
3125
  * eax = 68 - function number
3155
  * eax = 68 - function number
3126
  * ebx = 0 - subfunction number
3156
  * ebx = 0 - subfunction number
3127
Returned value:
3157
Returned value:
3128
  * eax = number of task switches from the system booting
3158
  * eax = number of task switches from the system booting
3129
    (modulo 2^32)
3159
    (modulo 2^32)
3130
 
3160
 
3131
---------------------- Constants for registers: ----------------------
3161
---------------------- Constants for registers: ----------------------
3132
  eax - SF_SYS_MISC (68)
3162
  eax - SF_SYS_MISC (68)
3133
  ebx - SSF_GET_TASK_SWITCH_COUNT (0)
3163
  ebx - SSF_GET_TASK_SWITCH_COUNT (0)
3134
======================================================================
3164
======================================================================
3135
======= Function 68, subfunction 1 - switch to the next thread. ======
3165
======= Function 68, subfunction 1 - switch to the next thread. ======
3136
======================================================================
3166
======================================================================
3137
The function completes the current time slice allocated to the
3167
The function completes the current time slice allocated to the
3138
thread and switches to the next. (Which thread in which process
3168
thread and switches to the next. (Which thread in which process
3139
will be next, is unpredictable). Later, when execution queue
3169
will be next, is unpredictable). Later, when execution queue
3140
will reach the current thread, execution will be continued.
3170
will reach the current thread, execution will be continued.
3141
Parameters:
3171
Parameters:
3142
  * eax = 68 - function number
3172
  * eax = 68 - function number
3143
  * ebx = 1 - subfunction number
3173
  * ebx = 1 - subfunction number
3144
Returned value:
3174
Returned value:
3145
  * function does not return value
3175
  * function does not return value
3146
 
3176
 
3147
---------------------- Constants for registers: ----------------------
3177
---------------------- Constants for registers: ----------------------
3148
  eax - SF_SYS_MISC (68)
3178
  eax - SF_SYS_MISC (68)
3149
  ebx - SSF_SWITCH_TASK (1)
3179
  ebx - SSF_SWITCH_TASK (1)
3150
======================================================================
3180
======================================================================
3151
============= Function 68, subfunction 2 - cache + rdpmc. ============
3181
============= Function 68, subfunction 2 - cache + rdpmc. ============
3152
======================================================================
3182
======================================================================
3153
Parameters:
3183
Parameters:
3154
  * eax = 68 - function number
3184
  * eax = 68 - function number
3155
  * ebx = 2 - subfunction number
3185
  * ebx = 2 - subfunction number
3156
  * ecx = required action:
3186
  * ecx = required action:
3157
    * ecx = 0 - enable instruction 'rdpmc'
3187
    * ecx = 0 - enable instruction 'rdpmc'
3158
      (ReaD Performance-Monitoring Counters) for applications
3188
      (ReaD Performance-Monitoring Counters) for applications
3159
    * ecx = 1 - find out whether cache is disabled/enabled
3189
    * ecx = 1 - find out whether cache is disabled/enabled
3160
    * ecx = 2 - enable cache
3190
    * ecx = 2 - enable cache
3161
    * ecx = 3 - disable cache
3191
    * ecx = 3 - disable cache
3162
Returned value:
3192
Returned value:
3163
  * for ecx=0:
3193
  * for ecx=0:
3164
    * eax = the value of cr4
3194
    * eax = the value of cr4
3165
  * for ecx=1:
3195
  * for ecx=1:
3166
    * eax = (cr0 and 0x60000000):
3196
    * eax = (cr0 and 0x60000000):
3167
    * eax = 0 - cache is on
3197
    * eax = 0 - cache is on
3168
    * eax <> 0 - cache is off
3198
    * eax <> 0 - cache is off
3169
  * for ecx=2 and ecx=3:
3199
  * for ecx=2 and ecx=3:
3170
    * function does not return value
3200
    * function does not return value
3171
 
3201
 
3172
---------------------- Constants for registers: ----------------------
3202
---------------------- Constants for registers: ----------------------
3173
  eax - SF_SYS_MISC (68)
3203
  eax - SF_SYS_MISC (68)
3174
  ebx - SSF_PERFORMANCE (2)
3204
  ebx - SSF_PERFORMANCE (2)
3175
  ecx - SSSF_ALLOW_RDPMC (0), SSSF_CACHE_STATUS (1),
3205
  ecx - SSSF_ALLOW_RDPMC (0), SSSF_CACHE_STATUS (1),
3176
    SSSF_CACHE_ON (2), SSSF_CACHE_OFF (3)
3206
    SSSF_CACHE_ON (2), SSSF_CACHE_OFF (3)
3177
======================================================================
3207
======================================================================
3178
=========== Function 68, subfunction 3 - read MSR-register. ==========
3208
=========== Function 68, subfunction 3 - read MSR-register. ==========
3179
======================================================================
3209
======================================================================
3180
MSR = Model Specific Register; the complete list of MSR-registers
3210
MSR = Model Specific Register; the complete list of MSR-registers
3181
of a processor is included to the documentation on it (for example,
3211
of a processor is included to the documentation on it (for example,
3182
IA-32 Intel Architecture Software Developer's Manual,
3212
IA-32 Intel Architecture Software Developer's Manual,
3183
Volume 3, Appendix B); each processor family has its own subset
3213
Volume 3, Appendix B); each processor family has its own subset
3184
of the MSR-registers.
3214
of the MSR-registers.
3185
Parameters:
3215
Parameters:
3186
  * eax = 68 - function number
3216
  * eax = 68 - function number
3187
  * ebx = 3 - subfunction number
3217
  * ebx = 3 - subfunction number
3188
  * ecx is ignored
3218
  * ecx is ignored
3189
  * edx = MSR address
3219
  * edx = MSR address
3190
Returned value:
3220
Returned value:
3191
  * ebx:eax = high:low dword of the result
3221
  * ebx:eax = high:low dword of the result
3192
Remarks:
3222
Remarks:
3193
  * If ecx contains nonexistent or not implemented for this processor
3223
  * If ecx contains nonexistent or not implemented for this processor
3194
    MSR, processor will generate an exception in the kernel, which
3224
    MSR, processor will generate an exception in the kernel, which
3195
    will kill the thread.
3225
    will kill the thread.
3196
  * Previously it is necessary to check, whether MSRs are supported
3226
  * Previously it is necessary to check, whether MSRs are supported
3197
    as a whole, with the instruction 'cpuid'. Otherwise processor
3227
    as a whole, with the instruction 'cpuid'. Otherwise processor
3198
    will generate other exception in the kernel, which will anyway
3228
    will generate other exception in the kernel, which will anyway
3199
    kill the thread.
3229
    kill the thread.
3200
 
3230
 
3201
---------------------- Constants for registers: ----------------------
3231
---------------------- Constants for registers: ----------------------
3202
  eax - SF_SYS_MISC (68)
3232
  eax - SF_SYS_MISC (68)
3203
  ebx - SSF_READ_MSR (3)
3233
  ebx - SSF_READ_MSR (3)
3204
======================================================================
3234
======================================================================
3205
========= Function 68, subfunction 4 - write to MSR-register. ========
3235
========= Function 68, subfunction 4 - write to MSR-register. ========
3206
======================================================================
3236
======================================================================
3207
MSR = Model Specific Register; the complete list of MSR-registers
3237
MSR = Model Specific Register; the complete list of MSR-registers
3208
of a processor is included to the documentation on it (for example,
3238
of a processor is included to the documentation on it (for example,
3209
IA-32 Intel Architecture Software Developer's Manual,
3239
IA-32 Intel Architecture Software Developer's Manual,
3210
Volume 3, Appendix B); each processor family has its own subset
3240
Volume 3, Appendix B); each processor family has its own subset
3211
of the MSR-registers.
3241
of the MSR-registers.
3212
Parameters:
3242
Parameters:
3213
  * eax = 68 - function number
3243
  * eax = 68 - function number
3214
  * ebx = 4 - subfunction number
3244
  * ebx = 4 - subfunction number
3215
  * ecx is ignored
3245
  * ecx is ignored
3216
  * edx = MSR address
3246
  * edx = MSR address
3217
  * esi:edi = high:low dword
3247
  * esi:edi = high:low dword
3218
Returned value:
3248
Returned value:
3219
  * function does not return value
3249
  * function does not return value
3220
Remarks:
3250
Remarks:
3221
  * If ecx contains nonexistent or not implemented for this processor
3251
  * If ecx contains nonexistent or not implemented for this processor
3222
    MSR, processor will generate an exception in the kernel, which
3252
    MSR, processor will generate an exception in the kernel, which
3223
    will kill the thread.
3253
    will kill the thread.
3224
  * Previously it is necessary to check, whether MSRs are supported
3254
  * Previously it is necessary to check, whether MSRs are supported
3225
    as a whole, with the instruction 'cpuid'. Otherwise processor
3255
    as a whole, with the instruction 'cpuid'. Otherwise processor
3226
    will generate other exception in the kernel, which will anyway
3256
    will generate other exception in the kernel, which will anyway
3227
    kill the thread.
3257
    kill the thread.
3228
 
3258
 
3229
---------------------- Constants for registers: ----------------------
3259
---------------------- Constants for registers: ----------------------
3230
  eax - SF_SYS_MISC (68)
3260
  eax - SF_SYS_MISC (68)
3231
  ebx - SSF_WRITE_MSR (4)
3261
  ebx - SSF_WRITE_MSR (4)
3232
======================================================================
3262
======================================================================
3233
======= Function 68, subfunction 11 - initialize process heap. =======
3263
======= Function 68, subfunction 11 - initialize process heap. =======
3234
======================================================================
3264
======================================================================
3235
Parameters:
3265
Parameters:
3236
  * eax = 68 - function number
3266
  * eax = 68 - function number
3237
  * ebx = 11 - subfunction number
3267
  * ebx = 11 - subfunction number
3238
Returned value:
3268
Returned value:
3239
  * eax = 0 - failed
3269
  * eax = 0 - failed
3240
  * otherwise size of created heap
3270
  * otherwise size of created heap
3241
Remarks:
3271
Remarks:
3242
  * The function call initializes heap, from which one can in future
3272
  * The function call initializes heap, from which one can in future
3243
    allocate and free memory blocks with subfunctions 12 and 13.
3273
    allocate and free memory blocks with subfunctions 12 and 13.
3244
    Heap size is equal to total amount of free application memory.
3274
    Heap size is equal to total amount of free application memory.
3245
  * The second function call from the same process results in
3275
  * The second function call from the same process results in
3246
    returning the size of the existing heap.
3276
    returning the size of the existing heap.
3247
  * After creation of the heap calls to function 64 will be ignored.
3277
  * After creation of the heap calls to function 64 will be ignored.
3248
 
3278
 
3249
---------------------- Constants for registers: ----------------------
3279
---------------------- Constants for registers: ----------------------
3250
  eax - SF_SYS_MISC (68)
3280
  eax - SF_SYS_MISC (68)
3251
  ebx - SSF_HEAP_INIT (11)
3281
  ebx - SSF_HEAP_INIT (11)
3252
======================================================================
3282
======================================================================
3253
======== Function 68, subfunction 12 - allocate memory block. ========
3283
======== Function 68, subfunction 12 - allocate memory block. ========
3254
======================================================================
3284
======================================================================
3255
Parameters:
3285
Parameters:
3256
  * eax = 68 - function number
3286
  * eax = 68 - function number
3257
  * ebx = 12 - subfunction number
3287
  * ebx = 12 - subfunction number
3258
  * ecx = required size in bytes
3288
  * ecx = required size in bytes
3259
Returned value:
3289
Returned value:
3260
  * eax = pointer to the allocated block
3290
  * eax = pointer to the allocated block
3261
Remarks:
3291
Remarks:
3262
  * Before this call one must initialize process heap by call to
3292
  * Before this call one must initialize process heap by call to
3263
    subfunction 11.
3293
    subfunction 11.
3264
  * The function allocates an integer number of pages (4 Kb) in such
3294
  * The function allocates an integer number of pages (4 Kb) in such
3265
    way that the real size of allocated block is more than or equal to
3295
    way that the real size of allocated block is more than or equal to
3266
    requested size.
3296
    requested size.
3267
 
3297
 
3268
---------------------- Constants for registers: ----------------------
3298
---------------------- Constants for registers: ----------------------
3269
  eax - SF_SYS_MISC (68)
3299
  eax - SF_SYS_MISC (68)
3270
  ebx - SSF_MEM_ALLOC (12)
3300
  ebx - SSF_MEM_ALLOC (12)
3271
======================================================================
3301
======================================================================
3272
========== Function 68, subfunction 13 - free memory block. ==========
3302
========== Function 68, subfunction 13 - free memory block. ==========
3273
======================================================================
3303
======================================================================
3274
Parameters:
3304
Parameters:
3275
  * eax = 68 - function number
3305
  * eax = 68 - function number
3276
  * ebx = 13 - subfunction number
3306
  * ebx = 13 - subfunction number
3277
  * ecx = pointer to the memory block
3307
  * ecx = pointer to the memory block
3278
Returned value:
3308
Returned value:
3279
  * eax = 1 - success
3309
  * eax = 1 - success
3280
  * eax = 0 - failed
3310
  * eax = 0 - failed
3281
Remarks:
3311
Remarks:
3282
  * The memory block must have been allocated by subfunction 12
3312
  * The memory block must have been allocated by subfunction 12
3283
    or subfunction 20.
3313
    or subfunction 20.
3284
 
3314
 
3285
---------------------- Constants for registers: ----------------------
3315
---------------------- Constants for registers: ----------------------
3286
  eax - SF_SYS_MISC (68)
3316
  eax - SF_SYS_MISC (68)
3287
  ebx - SSF_MEM_FREE (13)
3317
  ebx - SSF_MEM_FREE (13)
3288
======================================================================
3318
======================================================================
3289
===================== Function 68, subfunction 14 ====================
3319
===================== Function 68, subfunction 14 ====================
3290
============ Wait for signal from another program/driver. ============
3320
============ Wait for signal from another program/driver. ============
3291
======================================================================
3321
======================================================================
3292
Parameters:
3322
Parameters:
3293
  * eax = 68 - function number
3323
  * eax = 68 - function number
3294
  * ebx = 14 - subfunction number
3324
  * ebx = 14 - subfunction number
3295
  * ecx = pointer to the buffer for information (24 bytes)
3325
  * ecx = pointer to the buffer for information (24 bytes)
3296
Returned value:
3326
Returned value:
3297
  * buffer pointed to by ecx contains the following information:
3327
  * buffer pointed to by ecx contains the following information:
3298
    * +0: dword: identifier for following data of signal
3328
    * +0: dword: identifier for following data of signal
3299
    * +4: dword: data of signal (20 bytes), format of which is defined
3329
    * +4: dword: data of signal (20 bytes), format of which is defined
3300
          by the first dword
3330
          by the first dword
3301
 
3331
 
3302
---------------------- Constants for registers: ----------------------
3332
---------------------- Constants for registers: ----------------------
3303
  eax - SF_SYS_MISC (68)
3333
  eax - SF_SYS_MISC (68)
3304
  ebx - SSF_WAIT_SIGNAL (14)
3334
  ebx - SSF_WAIT_SIGNAL (14)
3305
======================================================================
3335
======================================================================
3306
============= Function 68, subfunction 16 - load driver. =============
3336
============= Function 68, subfunction 16 - load driver. =============
3307
======================================================================
3337
======================================================================
3308
Parameters:
3338
Parameters:
3309
  * eax = 68 - function number
3339
  * eax = 68 - function number
3310
  * ebx = 16 - subfunction number
3340
  * ebx = 16 - subfunction number
3311
  * ecx = pointer to ASCIIZ-string with driver name
3341
  * ecx = pointer to ASCIIZ-string with driver name
3312
Returned value:
3342
Returned value:
3313
  * eax = 0 - failed
3343
  * eax = 0 - failed
3314
  * otherwise eax = driver handle
3344
  * otherwise eax = driver handle
3315
Remarks:
3345
Remarks:
3316
  * If the driver was not loaded yet, it is loaded;
3346
  * If the driver was not loaded yet, it is loaded;
3317
    if the driver was loaded yet, nothing happens.
3347
    if the driver was loaded yet, nothing happens.
3318
  * Driver name is case-sensitive.
3348
  * Driver name is case-sensitive.
3319
    Maximum length of the name is 16 characters, including
3349
    Maximum length of the name is 16 characters, including
3320
    terminating null character, the rest is ignored.
3350
    terminating null character, the rest is ignored.
3321
  * Driver ABC is loaded from file /rd/1/drivers/ABC.obj.
3351
  * Driver ABC is loaded from file /rd/1/drivers/ABC.obj.
3322
 
3352
 
3323
---------------------- Constants for registers: ----------------------
3353
---------------------- Constants for registers: ----------------------
3324
  eax - SF_SYS_MISC (68)
3354
  eax - SF_SYS_MISC (68)
3325
  ebx - SSF_LOAD_DRIVER (16)
3355
  ebx - SSF_LOAD_DRIVER (16)
3326
======================================================================
3356
======================================================================
3327
============ Function 68, subfunction 17 - driver control. ===========
3357
============ Function 68, subfunction 17 - driver control. ===========
3328
======================================================================
3358
======================================================================
3329
Parameters:
3359
Parameters:
3330
  * eax = 68 - function number
3360
  * eax = 68 - function number
3331
  * ebx = 17 - subfunction number
3361
  * ebx = 17 - subfunction number
3332
  * ecx = pointer to the control structure:
3362
  * ecx = pointer to the control structure:
3333
    * +0: dword: handle of driver
3363
    * +0: dword: handle of driver
3334
    * +4: dword: code of driver function
3364
    * +4: dword: code of driver function
3335
    * +8: dword: pointer to input data
3365
    * +8: dword: pointer to input data
3336
    * +12 = +0xC: dword: size of input data
3366
    * +12 = +0xC: dword: size of input data
3337
    * +16 = +0x10: dword: pointer to output data
3367
    * +16 = +0x10: dword: pointer to output data
3338
    * +20 = +0x14: dword: size of output data
3368
    * +20 = +0x14: dword: size of output data
3339
Returned value:
3369
Returned value:
3340
  * eax = determined by driver
3370
  * eax = determined by driver
3341
Remarks:
3371
Remarks:
3342
  * Function codes and the structure of input/output data
3372
  * Function codes and the structure of input/output data
3343
    are defined by driver.
3373
    are defined by driver.
3344
  * Previously one must obtain driver handle by subfunction 16.
3374
  * Previously one must obtain driver handle by subfunction 16.
3345
 
3375
 
3346
---------------------- Constants for registers: ----------------------
3376
---------------------- Constants for registers: ----------------------
3347
  eax - SF_SYS_MISC (68)
3377
  eax - SF_SYS_MISC (68)
3348
  ebx - SSF_CONTROL_DRIVER (17)
3378
  ebx - SSF_CONTROL_DRIVER (17)
3349
======================================================================
3379
======================================================================
3350
== Function 68, subfunction 18 - load DLL, specifying the encoding. ==
3380
== Function 68, subfunction 18 - load DLL, specifying the encoding. ==
3351
======================================================================
3381
======================================================================
3352
Parameters:
3382
Parameters:
3353
  * eax = 68 - function number
3383
  * eax = 68 - function number
3354
  * ebx = 18 - subfunction number
3384
  * ebx = 18 - subfunction number
3355
  * ecx = pointer to the string with path to DLL
3385
  * ecx = pointer to the string with path to DLL
3356
  * edx = string encoding, details can be found in function 80 description.
3386
  * edx = string encoding, details can be found in function 80 description.
3357
Returned value:
3387
Returned value:
3358
  * eax = 0 - failed
3388
  * eax = 0 - failed
3359
  * otherwise eax = pointer to DLL export table
3389
  * otherwise eax = pointer to DLL export table
3360
Remarks:
3390
Remarks:
3361
  * Export table is an array of structures of 2 dword's, terminated
3391
  * Export table is an array of structures of 2 dword's, terminated
3362
    by zero. The first dword in structure points to function name,
3392
    by zero. The first dword in structure points to function name,
3363
    the second dword contains address of function.
3393
    the second dword contains address of function.
3364
 
3394
 
3365
======================================================================
3395
======================================================================
3366
=============== Function 68, subfunction 19 - load DLL. ==============
3396
=============== Function 68, subfunction 19 - load DLL. ==============
3367
======================================================================
3397
======================================================================
3368
Parameters:
3398
Parameters:
3369
  * eax = 68 - function number
3399
  * eax = 68 - function number
3370
  * ebx = 19 - subfunction number
3400
  * ebx = 19 - subfunction number
3371
  * ecx = pointer to the string with path to DLL,
3401
  * ecx = pointer to the string with path to DLL,
3372
    rules of path forming can be found in function 70 description.
3402
    rules of path forming can be found in function 70 description.
3373
Returned value:
3403
Returned value:
3374
  * eax = 0 - failed
3404
  * eax = 0 - failed
3375
  * otherwise eax = pointer to DLL export table
3405
  * otherwise eax = pointer to DLL export table
3376
 
3406
 
3377
---------------------- Constants for registers: ----------------------
3407
---------------------- Constants for registers: ----------------------
3378
  eax - SF_SYS_MISC (68)
3408
  eax - SF_SYS_MISC (68)
3379
  ebx - SSF_LOAD_DLL (19)
3409
  ebx - SSF_LOAD_DLL (19)
3380
======================================================================
3410
======================================================================
3381
======= Function 68, subfunction 20 - reallocate memory block. =======
3411
======= Function 68, subfunction 20 - reallocate memory block. =======
3382
======================================================================
3412
======================================================================
3383
Parameters:
3413
Parameters:
3384
  * eax = 68 - function number
3414
  * eax = 68 - function number
3385
  * ebx = 20 - subfunction number
3415
  * ebx = 20 - subfunction number
3386
  * ecx = new size in bytes
3416
  * ecx = new size in bytes
3387
  * edx = pointer to already allocated block
3417
  * edx = pointer to already allocated block
3388
Returned value:
3418
Returned value:
3389
  * eax = pointer to the reallocated block, 0 = error
3419
  * eax = pointer to the reallocated block, 0 = error
3390
Remarks:
3420
Remarks:
3391
  * Before this call one must initialize process heap by call to
3421
  * Before this call one must initialize process heap by call to
3392
    subfunction 11.
3422
    subfunction 11.
3393
  * The function allocates an integer number of pages (4 Kb) in such
3423
  * The function allocates an integer number of pages (4 Kb) in such
3394
    way that the real size of allocated block is more than or equal to
3424
    way that the real size of allocated block is more than or equal to
3395
    requested size.
3425
    requested size.
3396
  * If edx=0, the function call is equivalent to memory allocation
3426
  * If edx=0, the function call is equivalent to memory allocation
3397
    with subfunction 12. Otherwise the block at edx
3427
    with subfunction 12. Otherwise the block at edx
3398
    must be allocated earlier with subfunction 12 or this subfunction.
3428
    must be allocated earlier with subfunction 12 or this subfunction.
3399
  * If ecx=0, the function frees memory block at edx and returns 0.
3429
  * If ecx=0, the function frees memory block at edx and returns 0.
3400
  * The contents of the block are unchanged up to the shorter of
3430
  * The contents of the block are unchanged up to the shorter of
3401
    the new and old sizes.
3431
    the new and old sizes.
3402
 
3432
 
3403
---------------------- Constants for registers: ----------------------
3433
---------------------- Constants for registers: ----------------------
3404
  eax - SF_SYS_MISC (68)
3434
  eax - SF_SYS_MISC (68)
3405
  ebx - SSF_MEM_REALLOC (20)
3435
  ebx - SSF_MEM_REALLOC (20)
3406
======================================================================
3436
======================================================================
3407
=========== Function 68, subfunction 21 - load driver PE. ============
3437
=========== Function 68, subfunction 21 - load driver PE. ============
3408
======================================================================
3438
======================================================================
3409
Parameters:
3439
Parameters:
3410
  * eax = 68 - function number
3440
  * eax = 68 - function number
3411
  * ebx = 21 - subfunction number
3441
  * ebx = 21 - subfunction number
3412
  * ecx = pointer to ASCIIZ-string with driver name
3442
  * ecx = pointer to ASCIIZ-string with driver name
3413
  * edx = pointer to command line
3443
  * edx = pointer to command line
3414
Returned value:
3444
Returned value:
3415
  * eax = 0 - failed
3445
  * eax = 0 - failed
3416
  * otherwise eax = driver handle
3446
  * otherwise eax = driver handle
3417
Remarks:
3447
Remarks:
3418
  * If the driver was not loaded yet, it is loaded;
3448
  * If the driver was not loaded yet, it is loaded;
3419
    if the driver was loaded yet, nothing happens.
3449
    if the driver was loaded yet, nothing happens.
3420
 
3450
 
3421
---------------------- Constants for registers: ----------------------
3451
---------------------- Constants for registers: ----------------------
3422
  eax - SF_SYS_MISC (68)
3452
  eax - SF_SYS_MISC (68)
3423
  ebx - SSF_LOAD_DRIVER_PE (21)
3453
  ebx - SSF_LOAD_DRIVER_PE (21)
3424
======================================================================
3454
======================================================================
3425
======== Function 68, subfunction 22 - open named memory area. =======
3455
======== Function 68, subfunction 22 - open named memory area. =======
3426
======================================================================
3456
======================================================================
3427
Parameters:
3457
Parameters:
3428
  * eax = 68 - function number
3458
  * eax = 68 - function number
3429
  * ebx = 22 - subfunction number
3459
  * ebx = 22 - subfunction number
3430
  * ecx = area name. Maximum of 31 characters with terminating zero
3460
  * ecx = area name. Maximum of 31 characters with terminating zero
3431
  * edx = area size in bytes for SHM_CREATE and SHM_OPEN_ALWAYS
3461
  * edx = area size in bytes for SHM_CREATE and SHM_OPEN_ALWAYS
3432
  * esi = flags for open and access:
3462
  * esi = flags for open and access:
3433
    * SHM_OPEN        = 0x00 - open existing memory area. If an area
3463
    * SHM_OPEN        = 0x00 - open existing memory area. If an area
3434
                          with such name does not exist, the function
3464
                          with such name does not exist, the function
3435
                          will return error code 5.
3465
                          will return error code 5.
3436
    * SHM_OPEN_ALWAYS = 0x04 - open existing or create new
3466
    * SHM_OPEN_ALWAYS = 0x04 - open existing or create new
3437
                          memory area.
3467
                          memory area.
3438
    * SHM_CREATE      = 0x08 - create new memory area. If an area
3468
    * SHM_CREATE      = 0x08 - create new memory area. If an area
3439
                          with such name already exists, the function
3469
                          with such name already exists, the function
3440
                          will return error code 10.
3470
                          will return error code 10.
3441
    * SHM_READ        = 0x00 - only read access
3471
    * SHM_READ        = 0x00 - only read access
3442
    * SHM_WRITE       = 0x01 - read and write access
3472
    * SHM_WRITE       = 0x01 - read and write access
3443
Returned value:
3473
Returned value:
3444
  * eax = pointer to memory area, 0 if error has occured
3474
  * eax = pointer to memory area, 0 if error has occured
3445
  * if new area is created (SHM_CREATE or SHM_OPEN_ALWAYS):
3475
  * if new area is created (SHM_CREATE or SHM_OPEN_ALWAYS):
3446
    edx = 0 - success, otherwise - error code
3476
    edx = 0 - success, otherwise - error code
3447
  * if existing area is opened (SHM_OPEN or SHM_OPEN_ALWAYS):
3477
  * if existing area is opened (SHM_OPEN or SHM_OPEN_ALWAYS):
3448
    edx = error code (if eax=0) or area size in bytes
3478
    edx = error code (if eax=0) or area size in bytes
3449
Error codes:
3479
Error codes:
3450
  * E_NOTFOUND = 5
3480
  * E_NOTFOUND = 5
3451
  * E_ACCESS = 10
3481
  * E_ACCESS = 10
3452
  * E_NOMEM = 30
3482
  * E_NOMEM = 30
3453
  * E_PARAM = 33
3483
  * E_PARAM = 33
3454
Remarks:
3484
Remarks:
3455
  * Before this call one must initialize process heap by call to
3485
  * Before this call one must initialize process heap by call to
3456
    subfunction 11.
3486
    subfunction 11.
3457
  * If a new area is created, access flags set maximal rights
3487
  * If a new area is created, access flags set maximal rights
3458
    for other processes. An attempt from other process to open
3488
    for other processes. An attempt from other process to open
3459
    with denied rights will fail with error code E_ACCESS.
3489
    with denied rights will fail with error code E_ACCESS.
3460
  * The process which has created an area always has write access.
3490
  * The process which has created an area always has write access.
3461
 
3491
 
3462
---------------------- Constants for registers: ----------------------
3492
---------------------- Constants for registers: ----------------------
3463
  eax - SF_SYS_MISC (68)
3493
  eax - SF_SYS_MISC (68)
3464
  ebx - SSF_MEM_OPEN (22)
3494
  ebx - SSF_MEM_OPEN (22)
3465
======================================================================
3495
======================================================================
3466
======= Function 68, subfunction 23 - close named memory area. =======
3496
======= Function 68, subfunction 23 - close named memory area. =======
3467
======================================================================
3497
======================================================================
3468
Parameters:
3498
Parameters:
3469
  * eax = 68 - function number
3499
  * eax = 68 - function number
3470
  * ebx = 23 - subfunction number
3500
  * ebx = 23 - subfunction number
3471
  * ecx = area name. Maximum of 31 characters with terminating zero
3501
  * ecx = area name. Maximum of 31 characters with terminating zero
3472
Returned value:
3502
Returned value:
3473
  * eax destroyed
3503
  * eax destroyed
3474
Remarks:
3504
Remarks:
3475
  * A memory area is physically freed (with deleting all data and
3505
  * A memory area is physically freed (with deleting all data and
3476
    freeing physical memory), when all threads which have opened
3506
    freeing physical memory), when all threads which have opened
3477
    this area will close it.
3507
    this area will close it.
3478
  * When thread is terminating, all opened by it areas are closed.
3508
  * When thread is terminating, all opened by it areas are closed.
3479
 
3509
 
3480
---------------------- Constants for registers: ----------------------
3510
---------------------- Constants for registers: ----------------------
3481
  eax - SF_SYS_MISC (68)
3511
  eax - SF_SYS_MISC (68)
3482
  ebx - SSF_MEM_CLOSE (23)
3512
  ebx - SSF_MEM_CLOSE (23)
3483
======================================================================
3513
======================================================================
3484
======== Function 68, subfunction 24 - set exception handler. ========
3514
======== Function 68, subfunction 24 - set exception handler. ========
3485
======================================================================
3515
======================================================================
3486
Parameters:
3516
Parameters:
3487
  * eax = 68 - function number
3517
  * eax = 68 - function number
3488
  * ebx = 24 - subfunction number
3518
  * ebx = 24 - subfunction number
3489
  * ecx = address of the new exception handler
3519
  * ecx = address of the new exception handler
3490
  * edx = the mask of handled exceptions
3520
  * edx = the mask of handled exceptions
3491
Returned value:
3521
Returned value:
3492
  * eax = address of the old exception handler (0, if it was not set)
3522
  * eax = address of the old exception handler (0, if it was not set)
3493
  * ebx = the old mask of handled exceptions
3523
  * ebx = the old mask of handled exceptions
3494
Remarks:
3524
Remarks:
3495
  * Bit number in mask of exceptions corresponds to exception number
3525
  * Bit number in mask of exceptions corresponds to exception number
3496
    in CPU-specification (Intel-PC). For example, FPU exceptions have
3526
    in CPU-specification (Intel-PC). For example, FPU exceptions have
3497
    number 16 (#MF), and SSE exceptions - 19 (#XF).
3527
    number 16 (#MF), and SSE exceptions - 19 (#XF).
3498
  * The current implementation ignores the inquiry for hook of 7
3528
  * The current implementation ignores the inquiry for hook of 7
3499
    exception - the system handles #NM by its own.
3529
    exception - the system handles #NM by its own.
3500
  * The exception handler is called with exception number as first
3530
  * The exception handler is called with exception number as first
3501
    (and only) stack parameter. So, correct exit from the handler is
3531
    (and only) stack parameter. So, correct exit from the handler is
3502
    RET 4. It returns to the instruction, that caused the exception,
3532
    RET 4. It returns to the instruction, that caused the exception,
3503
    for faults, and to the next instruction for traps (see
3533
    for faults, and to the next instruction for traps (see
3504
    classification of exceptions in CPU specification).
3534
    classification of exceptions in CPU specification).
3505
  * When user handler receives control, the corresponding bit in
3535
  * When user handler receives control, the corresponding bit in
3506
    the exception mask is cleared. Raising this exception
3536
    the exception mask is cleared. Raising this exception
3507
    in consequence leads to default handling, that is,
3537
    in consequence leads to default handling, that is,
3508
    terminating the application in absence of debugger or
3538
    terminating the application in absence of debugger or
3509
    suspend with notification of debugger otherwise.
3539
    suspend with notification of debugger otherwise.
3510
  * After user handler completes critical operations, it can set
3540
  * After user handler completes critical operations, it can set
3511
    the corresponding bit in the exception mask with subfunction 25.
3541
    the corresponding bit in the exception mask with subfunction 25.
3512
    Also user handler is responsible for clearing exceptions flags in
3542
    Also user handler is responsible for clearing exceptions flags in
3513
    FPU and/or SSE.
3543
    FPU and/or SSE.
3514
 
3544
 
3515
---------------------- Constants for registers: ----------------------
3545
---------------------- Constants for registers: ----------------------
3516
  eax - SF_SYS_MISC (68)
3546
  eax - SF_SYS_MISC (68)
3517
  ebx - SSF_SET_EXCEPTION_HANDLER (24)
3547
  ebx - SSF_SET_EXCEPTION_HANDLER (24)
3518
======================================================================
3548
======================================================================
3519
======== Function 68, subfunction 25 - set exception activity ========
3549
======== Function 68, subfunction 25 - set exception activity ========
3520
======================================================================
3550
======================================================================
3521
Parameters:
3551
Parameters:
3522
  * eax = 68 - function number
3552
  * eax = 68 - function number
3523
  * ebx = 25 - subfunction number
3553
  * ebx = 25 - subfunction number
3524
  * ecx = signal number
3554
  * ecx = signal number
3525
  * edx = value of activity (0/1)
3555
  * edx = value of activity (0/1)
3526
Returned value:
3556
Returned value:
3527
  * eax = -1 - invalid signal number
3557
  * eax = -1 - invalid signal number
3528
  * otherwise eax = old value of activity for this signal (0/1)
3558
  * otherwise eax = old value of activity for this signal (0/1)
3529
Remarks:
3559
Remarks:
3530
  * In current implementation only mask for user excepton handler,
3560
  * In current implementation only mask for user excepton handler,
3531
    which has been previously set by subfunction 24,
3561
    which has been previously set by subfunction 24,
3532
    is changed. Signal number corresponds to exception number.
3562
    is changed. Signal number corresponds to exception number.
3533
 
3563
 
3534
---------------------- Constants for registers: ----------------------
3564
---------------------- Constants for registers: ----------------------
3535
  eax - SF_SYS_MISC (68)
3565
  eax - SF_SYS_MISC (68)
3536
  ebx - SSF_SET_EXCEPTION_STATE (25)
3566
  ebx - SSF_SET_EXCEPTION_STATE (25)
3537
======================================================================
3567
======================================================================
3538
====== Function 68, subfunction 26 - release memory pages ============
3568
====== Function 68, subfunction 26 - release memory pages ============
3539
======================================================================
3569
======================================================================
3540
Parameters:
3570
Parameters:
3541
  * eax = 68 - function number
3571
  * eax = 68 - function number
3542
  * ebx = 26 - subfunction number
3572
  * ebx = 26 - subfunction number
3543
  * ecx = pointer to the memory block, allocated by subfunction 12
3573
  * ecx = pointer to the memory block, allocated by subfunction 12
3544
  * edx = offset from the block beginnings
3574
  * edx = offset from the block beginnings
3545
  * esi = the size of the region of memory to release, in bytes
3575
  * esi = the size of the region of memory to release, in bytes
3546
Remarks:
3576
Remarks:
3547
  * function release range of pages from ecx+edx to ecx+edx+esi
3577
  * function release range of pages from ecx+edx to ecx+edx+esi
3548
    and set virtual memory into reserved state.
3578
    and set virtual memory into reserved state.
3549
 
3579
 
3550
---------------------- Constants for registers: ----------------------
3580
---------------------- Constants for registers: ----------------------
3551
  eax - SF_SYS_MISC (68)
3581
  eax - SF_SYS_MISC (68)
3552
  ebx - SSF_MEM_FREE_EXT (26)
3582
  ebx - SSF_MEM_FREE_EXT (26)
3553
======================================================================
3583
======================================================================
3554
========== Function 68, subfunction 27 - load file ===================
3584
========== Function 68, subfunction 27 - load file ===================
3555
======================================================================
3585
======================================================================
3556
Parameters:
3586
Parameters:
3557
  * eax = 68 - function number
3587
  * eax = 68 - function number
3558
  * ebx = 27 - subfunction number
3588
  * ebx = 27 - subfunction number
3559
  * ecx = pointer to the string with path to file,
3589
  * ecx = pointer to the string with path to file,
3560
    rules of path forming can be found in function 70 description.
3590
    rules of path forming can be found in function 70 description.
3561
Returned value:
3591
Returned value:
3562
  * eax = pointer to the loaded file, or zero
3592
  * eax = pointer to the loaded file, or zero
3563
  * edx = size of the loaded file, or zero
3593
  * edx = size of the loaded file, or zero
3564
Remarks:
3594
Remarks:
3565
  * function loads file and unpacks, if necessary
3595
  * function loads file and unpacks, if necessary
3566
 
3596
 
3567
---------------------- Constants for registers: ----------------------
3597
---------------------- Constants for registers: ----------------------
3568
  eax - SF_SYS_MISC (68)
3598
  eax - SF_SYS_MISC (68)
3569
  ebx - SSF_LOAD_FILE (27)
3599
  ebx - SSF_LOAD_FILE (27)
3570
======================================================================
3600
======================================================================
3571
== Function 68, subfunction 28 - load file, specifying the encoding ==
3601
== Function 68, subfunction 28 - load file, specifying the encoding ==
3572
======================================================================
3602
======================================================================
3573
Parameters:
3603
Parameters:
3574
  * eax = 68 - function number
3604
  * eax = 68 - function number
3575
  * ebx = 28 - subfunction number
3605
  * ebx = 28 - subfunction number
3576
  * ecx = pointer to the string with path to file
3606
  * ecx = pointer to the string with path to file
3577
  * edx = string encoding, details can be found in function 80 description.
3607
  * edx = string encoding, details can be found in function 80 description.
3578
Returned value:
3608
Returned value:
3579
  * eax = pointer to the loaded file, or zero
3609
  * eax = pointer to the loaded file, or zero
3580
  * edx = size of the loaded file, or zero
3610
  * edx = size of the loaded file, or zero
3581
Remarks:
3611
Remarks:
3582
  * function loads file and unpacks, if necessary
3612
  * function loads file and unpacks, if necessary
3583
 
3613
 
3584
======================================================================
3614
======================================================================
3585
====================== Function 69 - debugging. ======================
3615
====================== Function 69 - debugging. ======================
3586
======================================================================
3616
======================================================================
3587
A process can load other process as debugged by set of corresponding
3617
A process can load other process as debugged by set of corresponding
3588
bit by call to subfunction 7 of function 70.
3618
bit by call to subfunction 7 of function 70.
3589
A process can have only one debugger; one process can debug some
3619
A process can have only one debugger; one process can debug some
3590
others. The system notifies debugger on events occuring with
3620
others. The system notifies debugger on events occuring with
3591
debugged process. Messages are written to the buffer defined by
3621
debugged process. Messages are written to the buffer defined by
3592
subfunction 0.
3622
subfunction 0.
3593
Format of a message:
3623
Format of a message:
3594
  * +0: dword: message code
3624
  * +0: dword: message code
3595
  * +4: dword: PID of debugged process
3625
  * +4: dword: PID of debugged process
3596
  * +8: there can be additional data depending on message code
3626
  * +8: there can be additional data depending on message code
3597
Message codes:
3627
Message codes:
3598
  * 1 = exception
3628
  * 1 = exception
3599
    * in addition dword-number of the exception is given
3629
    * in addition dword-number of the exception is given
3600
    * process is suspended
3630
    * process is suspended
3601
  * 2 = process has terminated
3631
  * 2 = process has terminated
3602
    * comes at any termination: both through the system function -1,
3632
    * comes at any termination: both through the system function -1,
3603
      and at "murder" by any other process (including debugger itself)
3633
      and at "murder" by any other process (including debugger itself)
3604
  * 3 = debug exception int 1 = #DB
3634
  * 3 = debug exception int 1 = #DB
3605
    * in addition dword-image of the register DR6 is given:
3635
    * in addition dword-image of the register DR6 is given:
3606
      * bits 0-3: condition of the corresponding breakpoint (set by
3636
      * bits 0-3: condition of the corresponding breakpoint (set by
3607
        subfunction 9) is satisfied
3637
        subfunction 9) is satisfied
3608
      * bit 14: exception has occured because of the trace mode
3638
      * bit 14: exception has occured because of the trace mode
3609
        (flag TF is set TF)
3639
        (flag TF is set TF)
3610
    * process is suspended
3640
    * process is suspended
3611
When debugger terminates, all debugged processes are killed.
3641
When debugger terminates, all debugged processes are killed.
3612
If debugger does not want this, it must previously detach by
3642
If debugger does not want this, it must previously detach by
3613
subfunction 3.
3643
subfunction 3.
3614
 
3644
 
3615
All subfunctions are applicable only to processes/threads started
3645
All subfunctions are applicable only to processes/threads started
3616
from the current by function 70 with set debugging flag.
3646
from the current by function 70 with set debugging flag.
3617
Debugging of multithreaded programs is not supported yet.
3647
Debugging of multithreaded programs is not supported yet.
3618
The full list of subfunctions:
3648
The full list of subfunctions:
3619
  * subfunction 0 - define data area for debug messages
3649
  * subfunction 0 - define data area for debug messages
3620
  * subfunction 1 - get contents of registers of debugged thread
3650
  * subfunction 1 - get contents of registers of debugged thread
3621
  * subfunction 2 - set contents of registers of debugged thread
3651
  * subfunction 2 - set contents of registers of debugged thread
3622
  * subfunction 3 - detach from debugged process
3652
  * subfunction 3 - detach from debugged process
3623
  * subfunction 4 - suspend debugged thread
3653
  * subfunction 4 - suspend debugged thread
3624
  * subfunction 5 - resume debugged thread
3654
  * subfunction 5 - resume debugged thread
3625
  * subfunction 6 - read from the memory of debugged process
3655
  * subfunction 6 - read from the memory of debugged process
3626
  * subfunction 7 - write to the memory of debugged process
3656
  * subfunction 7 - write to the memory of debugged process
3627
  * subfunction 8 - terminate debugged thread
3657
  * subfunction 8 - terminate debugged thread
3628
  * subfunction 9 - set/clear hardware breakpoint
3658
  * subfunction 9 - set/clear hardware breakpoint
3629
 
3659
 
3630
---------------------- Constants for registers: ----------------------
3660
---------------------- Constants for registers: ----------------------
3631
  eax - SF_DEBUG (69)
3661
  eax - SF_DEBUG (69)
3632
  ebx - SSF_SET_MESSAGE_AREA (0), SSF_GET_REGISTERS (1),
3662
  ebx - SSF_SET_MESSAGE_AREA (0), SSF_GET_REGISTERS (1),
3633
    SSF_SET_REGISTERS (2), SSF_DETACH (3), SSF_SUSPEND (4),
3663
    SSF_SET_REGISTERS (2), SSF_DETACH (3), SSF_SUSPEND (4),
3634
    SSF_RESUME (5), SSF_READ_MEMORY (6), SSF_WRITE_MEMORY (7),
3664
    SSF_RESUME (5), SSF_READ_MEMORY (6), SSF_WRITE_MEMORY (7),
3635
    SSF_TERMINATE (8), SSF_DEFINE_BREAKPOINT (9)
3665
    SSF_TERMINATE (8), SSF_DEFINE_BREAKPOINT (9)
3636
======================================================================
3666
======================================================================
3637
= Function 69, subfunction 0 - define data area fror debug messages. =
3667
= Function 69, subfunction 0 - define data area fror debug messages. =
3638
======================================================================
3668
======================================================================
3639
Parameters:
3669
Parameters:
3640
  * eax = 69 - function number
3670
  * eax = 69 - function number
3641
  * ebx = 0 - subfunction number
3671
  * ebx = 0 - subfunction number
3642
  * ecx = pointer
3672
  * ecx = pointer
3643
Format of data area:
3673
Format of data area:
3644
  * +0: dword: N = buffer size (not including this header)
3674
  * +0: dword: N = buffer size (not including this header)
3645
  * +4: dword: occupied place
3675
  * +4: dword: occupied place
3646
  * +8: N*byte: buffer
3676
  * +8: N*byte: buffer
3647
Returned value:
3677
Returned value:
3648
  * function does not return value
3678
  * function does not return value
3649
Remarks:
3679
Remarks:
3650
  * If the size field is negative, the buffer is considered locked
3680
  * If the size field is negative, the buffer is considered locked
3651
    and at arrival of new message the system will wait.
3681
    and at arrival of new message the system will wait.
3652
    For synchronization frame all work with the buffer by operations
3682
    For synchronization frame all work with the buffer by operations
3653
    lock/unlock
3683
    lock/unlock
3654
        neg     [bufsize]
3684
        neg     [bufsize]
3655
  * Data in the buffer are considered as array of items with variable
3685
  * Data in the buffer are considered as array of items with variable
3656
    length - messages. Format of a message is explained in
3686
    length - messages. Format of a message is explained in
3657
    general description.
3687
    general description.
3658
 
3688
 
3659
---------------------- Constants for registers: ----------------------
3689
---------------------- Constants for registers: ----------------------
3660
  eax - SF_DEBUG (69)
3690
  eax - SF_DEBUG (69)
3661
  ebx - SSF_SET_MESSAGE_AREA (0)
3691
  ebx - SSF_SET_MESSAGE_AREA (0)
3662
======================================================================
3692
======================================================================
3663
===================== Function 69, subfunction 1 =====================
3693
===================== Function 69, subfunction 1 =====================
3664
============ Get contents of registers of debugged thread. ===========
3694
============ Get contents of registers of debugged thread. ===========
3665
======================================================================
3695
======================================================================
3666
Parameters:
3696
Parameters:
3667
  * eax = 69 - function number
3697
  * eax = 69 - function number
3668
  * ebx = 1 - subfunction number
3698
  * ebx = 1 - subfunction number
3669
  * ecx = thread identifier
3699
  * ecx = thread identifier
3670
  * edx = size of context structure, must be 0x28=40 bytes
3700
  * edx = size of context structure, must be 0x28=40 bytes
3671
  * esi = pointer to context structure
3701
  * esi = pointer to context structure
3672
Returned value:
3702
Returned value:
3673
  * function does not return value
3703
  * function does not return value
3674
Format of context structure: (FPU is not supported yet)
3704
Format of context structure: (FPU is not supported yet)
3675
  * +0: dword: eip
3705
  * +0: dword: eip
3676
  * +4: dword: eflags
3706
  * +4: dword: eflags
3677
  * +8: dword: eax
3707
  * +8: dword: eax
3678
  * +12 = +0xC: dword: ecx
3708
  * +12 = +0xC: dword: ecx
3679
  * +16 = +0x10: dword: edx
3709
  * +16 = +0x10: dword: edx
3680
  * +20 = +0x14: dword: ebx
3710
  * +20 = +0x14: dword: ebx
3681
  * +24 = +0x18: dword: esp
3711
  * +24 = +0x18: dword: esp
3682
  * +28 = +0x1C: dword: ebp
3712
  * +28 = +0x1C: dword: ebp
3683
  * +32 = +0x20: dword: esi
3713
  * +32 = +0x20: dword: esi
3684
  * +36 = +0x24: dword: edi
3714
  * +36 = +0x24: dword: edi
3685
Remarks:
3715
Remarks:
3686
  * If the thread executes code of ring-0, the function returns
3716
  * If the thread executes code of ring-0, the function returns
3687
    contents of registers of ring-3.
3717
    contents of registers of ring-3.
3688
  * Process must be loaded for debugging (as is shown in
3718
  * Process must be loaded for debugging (as is shown in
3689
    general description).
3719
    general description).
3690
 
3720
 
3691
---------------------- Constants for registers: ----------------------
3721
---------------------- Constants for registers: ----------------------
3692
  eax - SF_DEBUG (69)
3722
  eax - SF_DEBUG (69)
3693
  ebx - SSF_GET_REGISTERS (1)
3723
  ebx - SSF_GET_REGISTERS (1)
3694
======================================================================
3724
======================================================================
3695
===================== Function 69, subfunction 2 =====================
3725
===================== Function 69, subfunction 2 =====================
3696
============ Set contents of registers of debugged thread. ===========
3726
============ Set contents of registers of debugged thread. ===========
3697
======================================================================
3727
======================================================================
3698
Parameters:
3728
Parameters:
3699
  * eax = 69 - function number
3729
  * eax = 69 - function number
3700
  * ebx = 2 - subfunction number
3730
  * ebx = 2 - subfunction number
3701
  * ecx = thread identifier
3731
  * ecx = thread identifier
3702
  * edx = size of context structure, must be 0x28=40 bytes
3732
  * edx = size of context structure, must be 0x28=40 bytes
3703
  * esi -> context structure
3733
  * esi -> context structure
3704
Returned value:
3734
Returned value:
3705
  * function does not return value
3735
  * function does not return value
3706
Format of context structure is shown in the description of
3736
Format of context structure is shown in the description of
3707
subfunction 1.
3737
subfunction 1.
3708
Remarks:
3738
Remarks:
3709
  * If the thread executes code of ring-0, the function returns
3739
  * If the thread executes code of ring-0, the function returns
3710
    contents of registers of ring-3.
3740
    contents of registers of ring-3.
3711
  * Process must be loaded for debugging (as is shown in
3741
  * Process must be loaded for debugging (as is shown in
3712
    general description).
3742
    general description).
3713
 
3743
 
3714
---------------------- Constants for registers: ----------------------
3744
---------------------- Constants for registers: ----------------------
3715
  eax - SF_DEBUG (69)
3745
  eax - SF_DEBUG (69)
3716
  ebx - SSF_SET_REGISTERS (2)
3746
  ebx - SSF_SET_REGISTERS (2)
3717
======================================================================
3747
======================================================================
3718
===== Function 69, subfunction 3 - detach from debugged process. =====
3748
===== Function 69, subfunction 3 - detach from debugged process. =====
3719
======================================================================
3749
======================================================================
3720
Parameters:
3750
Parameters:
3721
  * eax = 69 - function number
3751
  * eax = 69 - function number
3722
  * ebx = 3 - subfunction number
3752
  * ebx = 3 - subfunction number
3723
  * ecx = identifier
3753
  * ecx = identifier
3724
Returned value:
3754
Returned value:
3725
  * function does not return value
3755
  * function does not return value
3726
Remarks:
3756
Remarks:
3727
  * If the process was suspended, it resumes execution.
3757
  * If the process was suspended, it resumes execution.
3728
 
3758
 
3729
---------------------- Constants for registers: ----------------------
3759
---------------------- Constants for registers: ----------------------
3730
  eax - SF_DEBUG (69)
3760
  eax - SF_DEBUG (69)
3731
  ebx - SSF_DETACH (3)
3761
  ebx - SSF_DETACH (3)
3732
======================================================================
3762
======================================================================
3733
======== Function 69, subfunction 4 - suspend debugged thread. =======
3763
======== Function 69, subfunction 4 - suspend debugged thread. =======
3734
======================================================================
3764
======================================================================
3735
Parameters:
3765
Parameters:
3736
  * eax = 69 - function number
3766
  * eax = 69 - function number
3737
  * ebx = 4 - subfunction number
3767
  * ebx = 4 - subfunction number
3738
  * ecx = thread identifier
3768
  * ecx = thread identifier
3739
Returned value:
3769
Returned value:
3740
  * function does not return value
3770
  * function does not return value
3741
Remarks:
3771
Remarks:
3742
  * Process must be loaded for debugging (as is shown in
3772
  * Process must be loaded for debugging (as is shown in
3743
    general description).
3773
    general description).
3744
 
3774
 
3745
---------------------- Constants for registers: ----------------------
3775
---------------------- Constants for registers: ----------------------
3746
  eax - SF_DEBUG (69)
3776
  eax - SF_DEBUG (69)
3747
  ebx - SSF_SUSPEND (4)
3777
  ebx - SSF_SUSPEND (4)
3748
======================================================================
3778
======================================================================
3749
======== Function 69, subfunction 5 - resume debugged thread. ========
3779
======== Function 69, subfunction 5 - resume debugged thread. ========
3750
======================================================================
3780
======================================================================
3751
Parameters:
3781
Parameters:
3752
  * eax = 69 - function number
3782
  * eax = 69 - function number
3753
  * ebx = 5 - subfunction number
3783
  * ebx = 5 - subfunction number
3754
  * ecx = thread identifier
3784
  * ecx = thread identifier
3755
Returned value:
3785
Returned value:
3756
  * function does not return value
3786
  * function does not return value
3757
Remarks:
3787
Remarks:
3758
  * Process must be loaded for debugging (as is shown in
3788
  * Process must be loaded for debugging (as is shown in
3759
    general description).
3789
    general description).
3760
 
3790
 
3761
---------------------- Constants for registers: ----------------------
3791
---------------------- Constants for registers: ----------------------
3762
  eax - SF_DEBUG (69)
3792
  eax - SF_DEBUG (69)
3763
  ebx - SSF_RESUME (5)
3793
  ebx - SSF_RESUME (5)
3764
======================================================================
3794
======================================================================
3765
= Fucntion 69, subfunction 6 - read from memory of debugged process. =
3795
= Fucntion 69, subfunction 6 - read from memory of debugged process. =
3766
======================================================================
3796
======================================================================
3767
Parameters:
3797
Parameters:
3768
  * eax = 69 - function number
3798
  * eax = 69 - function number
3769
  * ebx = 6 - subfunction number
3799
  * ebx = 6 - subfunction number
3770
  * ecx = identifier
3800
  * ecx = identifier
3771
  * edx = number of bytes to read
3801
  * edx = number of bytes to read
3772
  * esi = address in the memory of debugged process
3802
  * esi = address in the memory of debugged process
3773
  * edi = pointer to buffer for data
3803
  * edi = pointer to buffer for data
3774
Returned value:
3804
Returned value:
3775
  * eax = -1 at an error (invalid PID or buffer)
3805
  * eax = -1 at an error (invalid PID or buffer)
3776
  * otherwise eax = number of read bytes (possibly, 0,
3806
  * otherwise eax = number of read bytes (possibly, 0,
3777
    if esi is too large)
3807
    if esi is too large)
3778
Remarks:
3808
Remarks:
3779
  * Process must be loaded for debugging (as is shown in
3809
  * Process must be loaded for debugging (as is shown in
3780
    general description).
3810
    general description).
3781
 
3811
 
3782
---------------------- Constants for registers: ----------------------
3812
---------------------- Constants for registers: ----------------------
3783
  eax - SF_DEBUG (69)
3813
  eax - SF_DEBUG (69)
3784
  ebx - SSF_READ_MEMORY (6)
3814
  ebx - SSF_READ_MEMORY (6)
3785
======================================================================
3815
======================================================================
3786
== Function 69, subfunction 7 - write to memory of debugged process. =
3816
== Function 69, subfunction 7 - write to memory of debugged process. =
3787
======================================================================
3817
======================================================================
3788
Parameters:
3818
Parameters:
3789
  * eax = 69 - function number
3819
  * eax = 69 - function number
3790
  * ebx = 7 - subfunction number
3820
  * ebx = 7 - subfunction number
3791
  * ecx = identifier
3821
  * ecx = identifier
3792
  * edx = number of bytes to write
3822
  * edx = number of bytes to write
3793
  * esi = address of memory in debugged process
3823
  * esi = address of memory in debugged process
3794
  * edi = pointer to data
3824
  * edi = pointer to data
3795
Returned value:
3825
Returned value:
3796
  * eax = -1 at an error (invalid PID or buffer)
3826
  * eax = -1 at an error (invalid PID or buffer)
3797
  * otherwise eax = number of written bytes (possibly, 0,
3827
  * otherwise eax = number of written bytes (possibly, 0,
3798
    if esi is too large)
3828
    if esi is too large)
3799
Remarks:
3829
Remarks:
3800
  * Process must be loaded for debugging (as is shown in
3830
  * Process must be loaded for debugging (as is shown in
3801
    general description).
3831
    general description).
3802
 
3832
 
3803
---------------------- Constants for registers: ----------------------
3833
---------------------- Constants for registers: ----------------------
3804
  eax - SF_DEBUG (69)
3834
  eax - SF_DEBUG (69)
3805
  ebx - SSF_WRITE_MEMORY (7)
3835
  ebx - SSF_WRITE_MEMORY (7)
3806
======================================================================
3836
======================================================================
3807
======= Function 69, subfunction 8 - terminate debugged thread. ======
3837
======= Function 69, subfunction 8 - terminate debugged thread. ======
3808
======================================================================
3838
======================================================================
3809
Parameters:
3839
Parameters:
3810
  * eax = 69 - function number
3840
  * eax = 69 - function number
3811
  * ebx = 8 - subfunction number
3841
  * ebx = 8 - subfunction number
3812
  * ecx = identifier
3842
  * ecx = identifier
3813
Returned value:
3843
Returned value:
3814
  * function does not return value
3844
  * function does not return value
3815
Remarks:
3845
Remarks:
3816
  * Process must be loaded for debugging (as is shown in
3846
  * Process must be loaded for debugging (as is shown in
3817
    general description).
3847
    general description).
3818
  * The function is similar to subfunction 2 of function 18
3848
  * The function is similar to subfunction 2 of function 18
3819
    with two differences: it requires first remark and
3849
    with two differences: it requires first remark and
3820
    accepts PID rather than slot number.
3850
    accepts PID rather than slot number.
3821
 
3851
 
3822
---------------------- Constants for registers: ----------------------
3852
---------------------- Constants for registers: ----------------------
3823
  eax - SF_DEBUG (69)
3853
  eax - SF_DEBUG (69)
3824
  ebx - SSF_TERMINATE (8)
3854
  ebx - SSF_TERMINATE (8)
3825
======================================================================
3855
======================================================================
3826
===== Function 69, subfunction 9 - set/clear hardware breakpoint. ====
3856
===== Function 69, subfunction 9 - set/clear hardware breakpoint. ====
3827
======================================================================
3857
======================================================================
3828
Parameters:
3858
Parameters:
3829
  * eax = 69 - function number
3859
  * eax = 69 - function number
3830
  * ebx = 9 - subfunction number
3860
  * ebx = 9 - subfunction number
3831
  * ecx = thread identifier
3861
  * ecx = thread identifier
3832
  * dl = index of breakpoint, from 0 to 3 inclusively
3862
  * dl = index of breakpoint, from 0 to 3 inclusively
3833
  * dh = flags:
3863
  * dh = flags:
3834
    * if high bit is cleared - set breakpoint:
3864
    * if high bit is cleared - set breakpoint:
3835
      * bits 0-1 - condition:
3865
      * bits 0-1 - condition:
3836
        * 00 = breakpoint on execution
3866
        * 00 = breakpoint on execution
3837
        * 01 = breakpoint on read
3867
        * 01 = breakpoint on read
3838
        * 11 = breakpoint on read/write
3868
        * 11 = breakpoint on read/write
3839
      * bits 2-3 - length; for breakpoints on exception it must be
3869
      * bits 2-3 - length; for breakpoints on exception it must be
3840
        00, otherwise one of
3870
        00, otherwise one of
3841
        * 00 = byte
3871
        * 00 = byte
3842
        * 01 = word
3872
        * 01 = word
3843
        * 11 = dword
3873
        * 11 = dword
3844
      * esi = breakpoint address; must be aligned according to
3874
      * esi = breakpoint address; must be aligned according to
3845
        the length (i.e. must be even for word breakpoints,
3875
        the length (i.e. must be even for word breakpoints,
3846
        divisible by 4 for dword)
3876
        divisible by 4 for dword)
3847
    * if high bit is set - clear breakpoint
3877
    * if high bit is set - clear breakpoint
3848
Returned value:
3878
Returned value:
3849
  * eax = 0 - success
3879
  * eax = 0 - success
3850
  * eax = 1 - error in the input data
3880
  * eax = 1 - error in the input data
3851
  * eax = 2 - (reserved, is never returned in the current
3881
  * eax = 2 - (reserved, is never returned in the current
3852
    implementation) a global breakpoint with that index is already set
3882
    implementation) a global breakpoint with that index is already set
3853
Remarks:
3883
Remarks:
3854
  * Process must be loaded for debugging (as is shown in
3884
  * Process must be loaded for debugging (as is shown in
3855
    general description).
3885
    general description).
3856
  * Hardware breakpoints are implemented through DRx-registers of
3886
  * Hardware breakpoints are implemented through DRx-registers of
3857
    the processor, all limitations results from this.
3887
    the processor, all limitations results from this.
3858
  * The function can reinstall the breakpoint, previously set
3888
  * The function can reinstall the breakpoint, previously set
3859
    by it (and it does not inform on this).
3889
    by it (and it does not inform on this).
3860
    Carry on the list of set breakpoints in the debugger.
3890
    Carry on the list of set breakpoints in the debugger.
3861
  * Breakpoints generate debug exception #DB, on which the system
3891
  * Breakpoints generate debug exception #DB, on which the system
3862
    notifies debugger.
3892
    notifies debugger.
3863
  * Breakpoints on write and read/write act after
3893
  * Breakpoints on write and read/write act after
3864
    execution of the caused it instruction.
3894
    execution of the caused it instruction.
3865
 
3895
 
3866
---------------------- Constants for registers: ----------------------
3896
---------------------- Constants for registers: ----------------------
3867
  eax - SF_DEBUG (69)
3897
  eax - SF_DEBUG (69)
3868
  ebx - SSF_DEFINE_BREAKPOINT (9)
3898
  ebx - SSF_DEFINE_BREAKPOINT (9)
3869
======================================================================
3899
======================================================================
3870
==== Function 70 - work with file system with long names support. ====
3900
==== Function 70 - work with file system with long names support. ====
3871
======================================================================
3901
======================================================================
3872
Parameters:
3902
Parameters:
3873
  * eax = 70
3903
  * eax = 70
3874
  * ebx = pointer to the information structure
3904
  * ebx = pointer to the information structure
3875
Returned value:
3905
Returned value:
3876
  * eax = 0 - success; otherwise file system error code
3906
  * eax = 0 - success; otherwise file system error code
3877
  * some subfunctions return value in other registers too
3907
  * some subfunctions return value in other registers too
3878
General format of the information structure:
3908
General format of the information structure:
3879
  * +0: dword: subfunction number
3909
  * +0: dword: subfunction number
3880
  * +4: dword: offset in file or folder
3910
  * +4: dword: offset in file or folder
3881
  * +8: dword: higher part of offset or flags
3911
  * +8: dword: higher part of offset or flags
3882
  * +12 = +0xC: dword: size of data
3912
  * +12 = +0xC: dword: size of data
3883
  * +16 = +0x10: dword: pointer to data
3913
  * +16 = +0x10: dword: pointer to data
3884
  * +20 = +0x14: ?: path - zero terminated string
3914
  * +20 = +0x14: ?: path - zero terminated string
3885
  or
3915
  or
3886
  * +20 = +0x14: byte: 0
3916
  * +20 = +0x14: byte: 0
3887
  * +21 = +0x15: dword: pointer to string
3917
  * +21 = +0x15: dword: pointer to string
3888
Case sensitivity depends on filesystem.
3918
Case sensitivity depends on filesystem.
3889
If a path not begins with '/', it is considered a relative.
3919
If a path not begins with '/', it is considered a relative.
3890
To get or set the current folder, use the sysfunction 30.
3920
To get or set the current folder, use the sysfunction 30.
3891
'../' in the path means a lift by one folder relatively current folder.
3921
'../' in the path means a lift by one folder relatively current folder.
3892
To set the encoding, put at the start of the string a byte with next values:
3922
To set the encoding, put at the start of the string a byte with next values:
3893
  * 1 = cp866
3923
  * 1 = cp866
3894
  * 2 = UTF-16LE
3924
  * 2 = UTF-16LE
3895
  * 3 = UTF-8
3925
  * 3 = UTF-8
3896
  otherwise will be used cp866. In an absolute path
3926
  otherwise will be used cp866. In an absolute path
3897
  you may put this byte after the '/' or put an additional '/' before it.
3927
  you may put this byte after the '/' or put an additional '/' before it.
3898
  Also, you may use the sysfunction 80.
3928
  Also, you may use the sysfunction 80.
3899
Format of an absolute path:
3929
Format of an absolute path:
3900
  /base/number/dir1/dir2/.../dirn/file,
3930
  /base/number/dir1/dir2/.../dirn/file,
3901
where base/number identifies device, on which file is located:
3931
where base/number identifies device, on which file is located:
3902
  * RD/1 = ramdisk
3932
  * RD/1 = ramdisk
3903
  * FD/1 = first floppy drive,
3933
  * FD/1 = first floppy drive,
3904
    FD/2 = second floppy drive
3934
    FD/2 = second floppy drive
3905
  * HD0/x, HD1/x, HD2/x, HD3/x = hard drives accordingly on
3935
  * HD0/x, HD1/x, HD2/x, HD3/x = hard drives accordingly on
3906
    IDE0 (Primary Master), IDE1 (Primary Slave),
3936
    IDE0 (Primary Master), IDE1 (Primary Slave),
3907
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
3937
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
3908
    x - partition number on the selected hard drive, starts from 1
3938
    x - partition number on the selected hard drive, starts from 1
3909
  * CD0/1, CD1/1, CD2/1, CD3/1 = same for cd
3939
  * CD0/1, CD1/1, CD2/1, CD3/1 = same for cd
3910
  * SYS = system folder (encoding inaffected key),
3940
  * SYS = system folder (encoding inaffected key),
3911
    second key may be set by sysfunction 30.3.
3941
    second key may be set by sysfunction 30.3.
3912
Examples:
3942
Examples:
3913
  * '/sys/example.asm',0
3943
  * '/sys/example.asm',0
3914
  * '/rd/1/example.asm',0
3944
  * '/rd/1/example.asm',0
3915
  * '/HD0/1/folder/file.txt',0
3945
  * '/HD0/1/folder/file.txt',0
3916
  * '/hd2/2/pics/tanzania.bmp',0
3946
  * '/hd2/2/pics/tanzania.bmp',0
3917
  * 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
3947
  * 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
3918
 
3948
 
3919
Available subfunctions:
3949
Available subfunctions:
3920
  * subfunction 0 - read file
3950
  * subfunction 0 - read file
3921
  * subfunction 1 - read folder
3951
  * subfunction 1 - read folder
3922
  * subfunction 2 - create/rewrite file
3952
  * subfunction 2 - create/rewrite file
3923
  * subfunction 3 - write to existing file
3953
  * subfunction 3 - write to existing file
3924
  * subfunction 4 - set file size
3954
  * subfunction 4 - set file size
3925
  * subfunction 5 - get attributes of file/folder
3955
  * subfunction 5 - get attributes of file/folder
3926
  * subfunction 6 - set attributes of file/folder
3956
  * subfunction 6 - set attributes of file/folder
3927
  * subfunction 7 - start application
3957
  * subfunction 7 - start application
3928
  * subfunction 8 - delete file/folder
3958
  * subfunction 8 - delete file/folder
3929
  * subfunction 9 - create folder
3959
  * subfunction 9 - create folder
3930
For CD-drives due to hardware limitations only subfunctions
3960
For CD-drives due to hardware limitations only subfunctions
3931
0,1,5 and 7 are available, other subfunctions return error
3961
0,1,5 and 7 are available, other subfunctions return error
3932
with code 2.
3962
with code 2.
3933
At the first call of subfunctions 0,1,5,7 to ATAPI devices
3963
At the first call of subfunctions 0,1,5,7 to ATAPI devices
3934
(CD and DVD) the manual control of tray is locked due to caching
3964
(CD and DVD) the manual control of tray is locked due to caching
3935
drive data. Unlocking is made when subfunction 4 of function 24
3965
drive data. Unlocking is made when subfunction 4 of function 24
3936
is called for corresponding device.
3966
is called for corresponding device.
3937
 
3967
 
3938
---------------------- Constants for registers: ----------------------
3968
---------------------- Constants for registers: ----------------------
3939
  eax - SF_FILE (70)
3969
  eax - SF_FILE (70)
3940
 [ebx] - SSF_READ_FILE (0), SSF_READ_FOLDER (1), SSF_CREATE_FILE (2),
3970
 [ebx] - SSF_READ_FILE (0), SSF_READ_FOLDER (1), SSF_CREATE_FILE (2),
3941
    SSF_WRITE_FILE (3), SSF_SET_END (4), SSF_GET_INFO (5),
3971
    SSF_WRITE_FILE (3), SSF_SET_END (4), SSF_GET_INFO (5),
3942
    SSF_SET_INFO (6), SSF_START_APP (7), SSF_DELETE (8),
3972
    SSF_SET_INFO (6), SSF_START_APP (7), SSF_DELETE (8),
3943
    SSF_CREATE_FOLDER (9)
3973
    SSF_CREATE_FOLDER (9)
3944
======================================================================
3974
======================================================================
3945
=== Function 70, subfunction 0 - read file with long names support. ==
3975
=== Function 70, subfunction 0 - read file with long names support. ==
3946
======================================================================
3976
======================================================================
3947
Parameters:
3977
Parameters:
3948
  * eax = 70 - function number
3978
  * eax = 70 - function number
3949
  * ebx = pointer to the information structure
3979
  * ebx = pointer to the information structure
3950
Format of the information structure:
3980
Format of the information structure:
3951
  * +0: dword: 0 = subfunction number
3981
  * +0: dword: 0 = subfunction number
3952
  * +4: dword: file offset (in bytes)
3982
  * +4: dword: file offset (in bytes)
3953
  * +8: dword: 0 (reserved for high dword of offset)
3983
  * +8: dword: 0 (reserved for high dword of offset)
3954
  * +12 = +0xC: dword: number of bytes to read
3984
  * +12 = +0xC: dword: number of bytes to read
3955
  * +16 = +0x10: dword: pointer to buffer for data
3985
  * +16 = +0x10: dword: pointer to buffer for data
3956
  * +20 = +0x14: path, general rules of names forming
3986
  * +20 = +0x14: path, general rules of names forming
3957
Returned value:
3987
Returned value:
3958
  * eax = 0 - success, otherwise file system error code
3988
  * eax = 0 - success, otherwise file system error code
3959
  * ebx = number of read bytes or -1=0xffffffff if file was not found
3989
  * ebx = number of read bytes or -1=0xffffffff if file was not found
3960
Remarks:
3990
Remarks:
3961
  * If file was ended before last requested block was read,
3991
  * If file was ended before last requested block was read,
3962
    the function will read as many as it can, and after that return
3992
    the function will read as many as it can, and after that return
3963
    eax=6 (EOF).
3993
    eax=6 (EOF).
3964
  * The function does not allow to read folder (returns eax=10,
3994
  * The function does not allow to read folder (returns eax=10,
3965
    access denied).
3995
    access denied).
3966
 
3996
 
3967
---------------------- Constants for registers: ----------------------
3997
---------------------- Constants for registers: ----------------------
3968
  eax - SF_FILE (70)
3998
  eax - SF_FILE (70)
3969
 [ebx] - SSF_READ_FILE (0)
3999
 [ebx] - SSF_READ_FILE (0)
3970
======================================================================
4000
======================================================================
3971
== Function 70, subfunction 1 - read folder with long names support. =
4001
== Function 70, subfunction 1 - read folder with long names support. =
3972
======================================================================
4002
======================================================================
3973
Parameters:
4003
Parameters:
3974
  * eax = 70 - function number
4004
  * eax = 70 - function number
3975
  * ebx = pointer to the information structure
4005
  * ebx = pointer to the information structure
3976
Format of the information structure:
4006
Format of the information structure:
3977
  * +0: dword: 1 = subfunction number
4007
  * +0: dword: 1 = subfunction number
3978
  * +4: dword: index of starting block (beginning from 0)
4008
  * +4: dword: index of starting block (beginning from 0)
3979
  * +8: dword: names encoding:
4009
  * +8: dword: names encoding:
3980
    0 = default
4010
    0 = default
3981
    1 = cp866
4011
    1 = cp866
3982
    2 = UTF-16LE
4012
    2 = UTF-16LE
3983
    3 = UTF-8
4013
    3 = UTF-8
3984
  * +12 = +0xC: dword: number of blocks to read
4014
  * +12 = +0xC: dword: number of blocks to read
3985
  * +16 = +0x10: dword: pointer to buffer for data
4015
  * +16 = +0x10: dword: pointer to buffer for data
3986
  * +20 = +0x14: path, general rules of names forming
4016
  * +20 = +0x14: path, general rules of names forming
3987
Returned value:
4017
Returned value:
3988
  * eax = 0 - success, otherwise file system error code
4018
  * eax = 0 - success, otherwise file system error code
3989
  * ebx = number of files, information on which was written to
4019
  * ebx = number of files, information on which was written to
3990
    the buffer, or -1=0xffffffff, if folder was not found
4020
    the buffer, or -1=0xffffffff, if folder was not found
3991
Structure of the buffer:
4021
Structure of the buffer:
3992
  * header (32 bytes)
4022
  * header (32 bytes)
3993
  * block with information on file 1
4023
  * block with information on file 1
3994
  * block with information on file 2
4024
  * block with information on file 2
3995
  * ...
4025
  * ...
3996
Structure of header:
4026
Structure of header:
3997
  * +0: dword: version of structure (current is 1)
4027
  * +0: dword: version of structure (current is 1)
3998
  * +4: dword: number of placed blocks; is not greater than requested
4028
  * +4: dword: number of placed blocks; is not greater than requested
3999
    in the field +12 of information structure; can be less, if
4029
    in the field +12 of information structure; can be less, if
4000
    there are no more files in folder (the same as in ebx)
4030
    there are no more files in folder (the same as in ebx)
4001
  * +8: dword: total number of files in folder
4031
  * +8: dword: total number of files in folder
4002
  * +12 = +0xC: 20*byte: reserved (zeroed)
4032
  * +12 = +0xC: 20*byte: reserved (zeroed)
4003
Structure of block of data for folder entry (BDFE):
4033
Structure of block of data for folder entry (BDFE):
4004
  * +0: dword: attributes of file:
4034
  * +0: dword: attributes of file:
4005
    * bit 0 (mask 1): file is read-only
4035
    * bit 0 (mask 1): file is read-only
4006
    * bit 1 (mask 2): file is hidden
4036
    * bit 1 (mask 2): file is hidden
4007
    * bit 2 (mask 4): file is system
4037
    * bit 2 (mask 4): file is system
4008
    * bit 3 (mask 8): this is not a file but volume label
4038
    * bit 3 (mask 8): this is not a file but volume label
4009
      (for one partition meets no more than once and
4039
      (for one partition meets no more than once and
4010
      only in root folder)
4040
      only in root folder)
4011
    * bit 4 (mask 0x10): this is a folder
4041
    * bit 4 (mask 0x10): this is a folder
4012
    * bit 5 (mask 0x20): file was not archived - many archivation
4042
    * bit 5 (mask 0x20): file was not archived - many archivation
4013
      programs have an option to archive only files with this bit set,
4043
      programs have an option to archive only files with this bit set,
4014
      and after archiving this bit is cleared - it can be useful
4044
      and after archiving this bit is cleared - it can be useful
4015
      for automatically creating of backup-archives as at writing
4045
      for automatically creating of backup-archives as at writing
4016
      this bit is usually set
4046
      this bit is usually set
4017
  * +4: dword: encoding, equals to field +8 in the information structure
4047
  * +4: dword: encoding, equals to field +8 in the information structure
4018
  * +8: 4*byte: time of file creation
4048
  * +8: 4*byte: time of file creation
4019
  * +12 = +0xC: 4*byte: date of file creation
4049
  * +12 = +0xC: 4*byte: date of file creation
4020
  * +16 = +0x10: 4*byte: time of last access (read or write)
4050
  * +16 = +0x10: 4*byte: time of last access (read or write)
4021
  * +20 = +0x14: 4*byte: date of last access
4051
  * +20 = +0x14: 4*byte: date of last access
4022
  * +24 = +0x18: 4*byte: time of last modification
4052
  * +24 = +0x18: 4*byte: time of last modification
4023
  * +28 = +0x1C: 4*byte: date of last modification
4053
  * +28 = +0x1C: 4*byte: date of last modification
4024
  * +32 = +0x20: qword: file size in bytes (up to 16777216 Tb)
4054
  * +32 = +0x20: qword: file size in bytes (up to 16777216 Tb)
4025
  * +40 = +0x28: name, 264 bytes in cp866, otherwise - 520 bytes.
4055
  * +40 = +0x28: name, 264 bytes in cp866, otherwise - 520 bytes.
4026
Time format:
4056
Time format:
4027
  * +0: byte: seconds
4057
  * +0: byte: seconds
4028
  * +1: byte: minutes
4058
  * +1: byte: minutes
4029
  * +2: byte: hours
4059
  * +2: byte: hours
4030
  * +3: byte: reserved (0)
4060
  * +3: byte: reserved (0)
4031
  * for example, 23.59.59 is written as (in hex) 3B 3B 17 00
4061
  * for example, 23.59.59 is written as (in hex) 3B 3B 17 00
4032
Date format:
4062
Date format:
4033
  * +0: byte: day
4063
  * +0: byte: day
4034
  * +1: byte: month
4064
  * +1: byte: month
4035
  * +2: word: year
4065
  * +2: word: year
4036
  * for example, 25.11.1979 is written as (in hex) 19 0B BB 07
4066
  * for example, 25.11.1979 is written as (in hex) 19 0B BB 07
4037
Remarks:
4067
Remarks:
4038
  * If BDFE contains cp866 name, the length of BDFE is 304 bytes,
4068
  * If BDFE contains cp866 name, the length of BDFE is 304 bytes,
4039
    otherwise - 560 bytes.
4069
    otherwise - 560 bytes.
4040
  * Name string is zero terminated, further data contain garbage.
4070
  * Name string is zero terminated, further data contain garbage.
4041
  * If files in folder were ended before requested number was read,
4071
  * If files in folder were ended before requested number was read,
4042
    the function will read as many as it can, and after that return
4072
    the function will read as many as it can, and after that return
4043
    eax=6 (EOF).
4073
    eax=6 (EOF).
4044
  * Any folder on the disk, except for root, contains two special
4074
  * Any folder on the disk, except for root, contains two special
4045
    entries "." and "..", identifying accordingly the folder itself
4075
    entries "." and "..", identifying accordingly the folder itself
4046
    and the parent folder.
4076
    and the parent folder.
4047
  * The function allows also to read virtual folders "/", "/rd",
4077
  * The function allows also to read virtual folders "/", "/rd",
4048
    "/fd", "/hd[n]", thus attributes of subfolders are set to 0x10,
4078
    "/fd", "/hd[n]", thus attributes of subfolders are set to 0x10,
4049
    and times and dates are zeroed. An alternative way to get the
4079
    and times and dates are zeroed. An alternative way to get the
4050
    equipment information - subfunction 11 of function 18.
4080
    equipment information - subfunction 11 of function 18.
4051
 
4081
 
4052
---------------------- Constants for registers: ----------------------
4082
---------------------- Constants for registers: ----------------------
4053
  eax - SF_FILE (70)
4083
  eax - SF_FILE (70)
4054
 [ebx] - SSF_READ_FOLDER (1)
4084
 [ebx] - SSF_READ_FOLDER (1)
4055
======================================================================
4085
======================================================================
4056
===================== Function 70, subfunction 2 =====================
4086
===================== Function 70, subfunction 2 =====================
4057
============ Create/rewrite file with long names support. ============
4087
============ Create/rewrite file with long names support. ============
4058
======================================================================
4088
======================================================================
4059
Parameters:
4089
Parameters:
4060
  * eax = 70 - function number
4090
  * eax = 70 - function number
4061
  * ebx = pointer to the information structure
4091
  * ebx = pointer to the information structure
4062
Format of the information structure:
4092
Format of the information structure:
4063
  * +0: dword: 2 = subfunction number
4093
  * +0: dword: 2 = subfunction number
4064
  * +4: dword: 0 (reserved)
4094
  * +4: dword: 0 (reserved)
4065
  * +8: dword: 0 (reserved)
4095
  * +8: dword: 0 (reserved)
4066
  * +12 = +0xC: dword: number of bytes to write
4096
  * +12 = +0xC: dword: number of bytes to write
4067
  * +16 = +0x10: dword: pointer to data
4097
  * +16 = +0x10: dword: pointer to data
4068
  * +20 = +0x14: path, general rules of names forming
4098
  * +20 = +0x14: path, general rules of names forming
4069
Returned value:
4099
Returned value:
4070
  * eax = 0 - success, otherwise file system error code
4100
  * eax = 0 - success, otherwise file system error code
4071
  * ebx = number of written bytes (possibly 0)
4101
  * ebx = number of written bytes (possibly 0)
4072
Remarks:
4102
Remarks:
4073
  * If a file with given name did not exist, it is created;
4103
  * If a file with given name did not exist, it is created;
4074
    if it existed, it is rewritten.
4104
    if it existed, it is rewritten.
4075
  * If there is not enough free space on disk, the function will
4105
  * If there is not enough free space on disk, the function will
4076
    write as many as can and then return error code 8.
4106
    write as many as can and then return error code 8.
4077
  * The function is not supported for CD (returns error code 2).
4107
  * The function is not supported for CD (returns error code 2).
4078
 
4108
 
4079
---------------------- Constants for registers: ----------------------
4109
---------------------- Constants for registers: ----------------------
4080
  eax - SF_FILE (70)
4110
  eax - SF_FILE (70)
4081
 [ebx] - SSF_CREATE_FILE (2)
4111
 [ebx] - SSF_CREATE_FILE (2)
4082
======================================================================
4112
======================================================================
4083
===================== Function 70, subfunction 3 =====================
4113
===================== Function 70, subfunction 3 =====================
4084
=========== Write to existing file with long names support. ==========
4114
=========== Write to existing file with long names support. ==========
4085
======================================================================
4115
======================================================================
4086
Parameters:
4116
Parameters:
4087
  * eax = 70 - function number
4117
  * eax = 70 - function number
4088
  * ebx = pointer to the information structure
4118
  * ebx = pointer to the information structure
4089
Format of the information structure:
4119
Format of the information structure:
4090
  * +0: dword: 3 = subfunction number
4120
  * +0: dword: 3 = subfunction number
4091
  * +4: dword: file offset (in bytes)
4121
  * +4: dword: file offset (in bytes)
4092
  * +8: dword: high dword of offset (must be 0 for FAT)
4122
  * +8: dword: high dword of offset (must be 0 for FAT)
4093
  * +12 = +0xC: dword: number of bytes to write
4123
  * +12 = +0xC: dword: number of bytes to write
4094
  * +16 = +0x10: dword: pointer to data
4124
  * +16 = +0x10: dword: pointer to data
4095
  * +20 = +0x14: path, general rules of names forming
4125
  * +20 = +0x14: path, general rules of names forming
4096
Returned value:
4126
Returned value:
4097
  * eax = 0 - success, otherwise file system error code
4127
  * eax = 0 - success, otherwise file system error code
4098
  * ebx = number of written bytes (possibly 0)
4128
  * ebx = number of written bytes (possibly 0)
4099
Remarks:
4129
Remarks:
4100
  * The file must already exist, otherwise function returns eax=5.
4130
  * The file must already exist, otherwise function returns eax=5.
4101
  * The only result of write 0 bytes is update in the file attributes
4131
  * The only result of write 0 bytes is update in the file attributes
4102
    date/time of modification and access to the current date/time.
4132
    date/time of modification and access to the current date/time.
4103
  * If beginning and/or ending position is greater than file size
4133
  * If beginning and/or ending position is greater than file size
4104
    (except for the previous case), the file is expanded to needed
4134
    (except for the previous case), the file is expanded to needed
4105
    size with zero characters.
4135
    size with zero characters.
4106
  * The function is not supported for CD (returns error code 2).
4136
  * The function is not supported for CD (returns error code 2).
4107
 
4137
 
4108
---------------------- Constants for registers: ----------------------
4138
---------------------- Constants for registers: ----------------------
4109
  eax - SF_FILE (70)
4139
  eax - SF_FILE (70)
4110
 [ebx] - SSF_WRITE_FILE (3)
4140
 [ebx] - SSF_WRITE_FILE (3)
4111
======================================================================
4141
======================================================================
4112
============ Function 70, subfunction 4 - set end of file. ===========
4142
============ Function 70, subfunction 4 - set end of file. ===========
4113
======================================================================
4143
======================================================================
4114
Parameters:
4144
Parameters:
4115
  * eax = 70 - function number
4145
  * eax = 70 - function number
4116
  * ebx = pointer to the information structure
4146
  * ebx = pointer to the information structure
4117
Format of the information structure:
4147
Format of the information structure:
4118
  * +0: dword: 4 = subfunction number
4148
  * +0: dword: 4 = subfunction number
4119
  * +4: dword: low dword of new file size
4149
  * +4: dword: low dword of new file size
4120
  * +8: dword: high dword of new file size (must be 0 for FAT)
4150
  * +8: dword: high dword of new file size (must be 0 for FAT)
4121
  * +12 = +0xC: dword: 0 (reserved)
4151
  * +12 = +0xC: dword: 0 (reserved)
4122
  * +16 = +0x10: dword: 0 (reserved)
4152
  * +16 = +0x10: dword: 0 (reserved)
4123
  * +20 = +0x14: path, general rules of names forming
4153
  * +20 = +0x14: path, general rules of names forming
4124
Returned value:
4154
Returned value:
4125
  * eax = 0 - success, otherwise file system error code
4155
  * eax = 0 - success, otherwise file system error code
4126
  * ebx destroyed
4156
  * ebx destroyed
4127
Remarks:
4157
Remarks:
4128
  * If new file size is less than old one, file will be truncated.
4158
  * If new file size is less than old one, file will be truncated.
4129
    If new size is greater than old one, file will be expanded, and if
4159
    If new size is greater than old one, file will be expanded, and if
4130
    size difference is up to 16 MB, new space will be cleared with 0.
4160
    size difference is up to 16 MB, new space will be cleared with 0.
4131
  * If there is not enough free space on disk for expansion, the
4161
  * If there is not enough free space on disk for expansion, the
4132
    function will expand to maximum possible size and then return
4162
    function will expand to maximum possible size and then return
4133
    error code 8.
4163
    error code 8.
4134
  * The function is not supported for CD (returns error code 2).
4164
  * The function is not supported for CD (returns error code 2).
4135
 
4165
 
4136
---------------------- Constants for registers: ----------------------
4166
---------------------- Constants for registers: ----------------------
4137
  eax - SF_FILE (70)
4167
  eax - SF_FILE (70)
4138
 [ebx] - SSF_SET_END (4)
4168
 [ebx] - SSF_SET_END (4)
4139
======================================================================
4169
======================================================================
4140
==== Function 70, subfunction 5 - get information on file/folder. ====
4170
==== Function 70, subfunction 5 - get information on file/folder. ====
4141
======================================================================
4171
======================================================================
4142
Parameters:
4172
Parameters:
4143
  * eax = 70 - function number
4173
  * eax = 70 - function number
4144
  * ebx = pointer to the information structure
4174
  * ebx = pointer to the information structure
4145
Format of the information structure:
4175
Format of the information structure:
4146
  * +0: dword: 5 = subfunction number
4176
  * +0: dword: 5 = subfunction number
4147
  * +4: dword: 0 (reserved)
4177
  * +4: dword: 0 (reserved)
4148
  * +8: dword: 0 or flags (for the root folder)
4178
  * +8: dword: 0 or flags (for the root folder)
4149
  * +12 = +0xC: dword: 0 (reserved)
4179
  * +12 = +0xC: dword: 0 (reserved)
4150
  * +16 = +0x10: dword: pointer to buffer for data (40 bytes)
4180
  * +16 = +0x10: dword: pointer to buffer for data (40 bytes)
4151
  * +20 = +0x14: path, general rules of names forming
4181
  * +20 = +0x14: path, general rules of names forming
4152
Returned value:
4182
Returned value:
4153
  * eax = 0 - success, otherwise file system error code
4183
  * eax = 0 - success, otherwise file system error code
4154
  * ebx destroyed
4184
  * ebx destroyed
4155
Information on file is returned in the BDFE format (block of data
4185
Information on file is returned in the BDFE format (block of data
4156
for folder entry), explained in the description of subfunction 1,
4186
for folder entry), explained in the description of subfunction 1,
4157
but without filename, except the root folder.
4187
but without filename, except the root folder.
4158
Remarks:
4188
Remarks:
4159
  * For the root folder returns size and name of partition.
4189
  * For the root folder returns size and name of partition.
4160
  * The function does not support virtual folders such as / and /rd.
4190
  * The function does not support virtual folders such as / and /rd.
4161
 
4191
 
4162
---------------------- Constants for registers: ----------------------
4192
---------------------- Constants for registers: ----------------------
4163
  eax - SF_FILE (70)
4193
  eax - SF_FILE (70)
4164
 [ebx] - SSF_GET_INFO (5)
4194
 [ebx] - SSF_GET_INFO (5)
4165
======================================================================
4195
======================================================================
4166
===== Function 70, subfunction 6 - set attributes of file/folder. ====
4196
===== Function 70, subfunction 6 - set attributes of file/folder. ====
4167
======================================================================
4197
======================================================================
4168
Parameters:
4198
Parameters:
4169
  * eax = 70 - function number
4199
  * eax = 70 - function number
4170
  * ebx = pointer to the information structure
4200
  * ebx = pointer to the information structure
4171
Format of the information structure:
4201
Format of the information structure:
4172
  * +0: dword: 6 = subfunction number
4202
  * +0: dword: 6 = subfunction number
4173
  * +4: dword: 0 (reserved)
4203
  * +4: dword: 0 (reserved)
4174
  * +8: dword: 0 (reserved)
4204
  * +8: dword: 0 (reserved)
4175
  * +12 = +0xC: dword: 0 (reserved)
4205
  * +12 = +0xC: dword: 0 (reserved)
4176
  * +16 = +0x10: dword: pointer to buffer with attributes (32 bytes)
4206
  * +16 = +0x10: dword: pointer to buffer with attributes (32 bytes)
4177
  * +20 = +0x14: path, general rules of names forming
4207
  * +20 = +0x14: path, general rules of names forming
4178
Returned value:
4208
Returned value:
4179
  * eax = 0 - success, otherwise file system error code
4209
  * eax = 0 - success, otherwise file system error code
4180
  * ebx destroyed
4210
  * ebx destroyed
4181
File attributes are first 32 bytes in BDFE (block of data
4211
File attributes are first 32 bytes in BDFE (block of data
4182
for folder entry), explained in the description of subfunction 1
4212
for folder entry), explained in the description of subfunction 1
4183
(that is, without name and size of file). Attribute
4213
(that is, without name and size of file). Attribute
4184
file/folder/volume label (bits 3,4 in dword +0) is not changed.
4214
file/folder/volume label (bits 3,4 in dword +0) is not changed.
4185
Byte +4 (name format) is ignored.
4215
Byte +4 (name format) is ignored.
4186
Remarks:
4216
Remarks:
4187
  * The function does not support virtual folders such as /, /rd and
4217
  * The function does not support virtual folders such as /, /rd and
4188
    root folders like /rd/1.
4218
    root folders like /rd/1.
4189
  * The function is not supported for CD (returns error code 2).
4219
  * The function is not supported for CD (returns error code 2).
4190
 
4220
 
4191
---------------------- Constants for registers: ----------------------
4221
---------------------- Constants for registers: ----------------------
4192
  eax - SF_FILE (70)
4222
  eax - SF_FILE (70)
4193
 [ebx] - SSF_SET_INFO (6)
4223
 [ebx] - SSF_SET_INFO (6)
4194
======================================================================
4224
======================================================================
4195
=========== Function 70, subfunction 7 - start application. ==========
4225
=========== Function 70, subfunction 7 - start application. ==========
4196
======================================================================
4226
======================================================================
4197
Parameters:
4227
Parameters:
4198
  * eax = 70 - function number
4228
  * eax = 70 - function number
4199
  * ebx = pointer to the information structure
4229
  * ebx = pointer to the information structure
4200
Format of the information structure:
4230
Format of the information structure:
4201
  * +0: dword: 7 = subfunction number
4231
  * +0: dword: 7 = subfunction number
4202
  * +4: dword: flags field:
4232
  * +4: dword: flags field:
4203
    * bit 0: start process as debugged
4233
    * bit 0: start process as debugged
4204
    * other bits are reserved and must be set to 0
4234
    * other bits are reserved and must be set to 0
4205
  * +8: dword: 0 or pointer to ASCIIZ-string with parameters
4235
  * +8: dword: 0 or pointer to ASCIIZ-string with parameters
4206
  * +12 = +0xC: dword: 0 (reserved)
4236
  * +12 = +0xC: dword: 0 (reserved)
4207
  * +16 = +0x10: dword: 0 (reserved)
4237
  * +16 = +0x10: dword: 0 (reserved)
4208
  * +20 = +0x14: path, general rules of names forming
4238
  * +20 = +0x14: path, general rules of names forming
4209
Returned value:
4239
Returned value:
4210
  * eax > 0 - program is loaded, eax contains PID
4240
  * eax > 0 - program is loaded, eax contains PID
4211
  * eax < 0 - an error has occured, -eax contains
4241
  * eax < 0 - an error has occured, -eax contains
4212
    file system error code
4242
    file system error code
4213
  * ebx destroyed
4243
  * ebx destroyed
4214
Remarks:
4244
Remarks:
4215
  * Command line must be terminated by the character with the code 0
4245
  * Command line must be terminated by the character with the code 0
4216
    (ASCIIZ-string); function takes into account either all characters
4246
    (ASCIIZ-string); function takes into account either all characters
4217
    up to terminating zero inclusively or first 256 character
4247
    up to terminating zero inclusively or first 256 character
4218
    regarding what is less.
4248
    regarding what is less.
4219
  * If the process is started as debugged, it is created in
4249
  * If the process is started as debugged, it is created in
4220
    the suspended state; to run use subfunction 5 of function 69.
4250
    the suspended state; to run use subfunction 5 of function 69.
4221
 
4251
 
4222
---------------------- Constants for registers: ----------------------
4252
---------------------- Constants for registers: ----------------------
4223
  eax - SF_FILE (70)
4253
  eax - SF_FILE (70)
4224
 [ebx] - SSF_START_APP (7)
4254
 [ebx] - SSF_START_APP (7)
4225
======================================================================
4255
======================================================================
4226
========== Function 70, subfunction 8 - delete file/folder. ==========
4256
========== Function 70, subfunction 8 - delete file/folder. ==========
4227
======================================================================
4257
======================================================================
4228
Parameters:
4258
Parameters:
4229
  * eax = 70 - function number
4259
  * eax = 70 - function number
4230
  * ebx = pointer to the information structure
4260
  * ebx = pointer to the information structure
4231
Format of the information structure:
4261
Format of the information structure:
4232
  * +0: dword: 8 = subfunction number
4262
  * +0: dword: 8 = subfunction number
4233
  * +4: dword: 0 (reserved)
4263
  * +4: dword: 0 (reserved)
4234
  * +8: dword: 0 (reserved)
4264
  * +8: dword: 0 (reserved)
4235
  * +12 = +0xC: dword: 0 (reserved)
4265
  * +12 = +0xC: dword: 0 (reserved)
4236
  * +16 = +0x10: dword: 0 (reserved)
4266
  * +16 = +0x10: dword: 0 (reserved)
4237
  * +20 = +0x14: path, general rules of names forming
4267
  * +20 = +0x14: path, general rules of names forming
4238
Returned value:
4268
Returned value:
4239
  * eax = 0 - success, otherwise file system error code
4269
  * eax = 0 - success, otherwise file system error code
4240
  * ebx destroyed
4270
  * ebx destroyed
4241
Remarks:
4271
Remarks:
4242
  * The function is not supported for CD (returns error code 2).
4272
  * The function is not supported for CD (returns error code 2).
4243
  * The function can delete only empty folders (attempt to delete
4273
  * The function can delete only empty folders (attempt to delete
4244
    nonempty folder results in error with code 10, "access denied").
4274
    nonempty folder results in error with code 10, "access denied").
4245
 
4275
 
4246
---------------------- Constants for registers: ----------------------
4276
---------------------- Constants for registers: ----------------------
4247
  eax - SF_FILE (70)
4277
  eax - SF_FILE (70)
4248
 [ebx] - SSF_DELETE (8)
4278
 [ebx] - SSF_DELETE (8)
4249
======================================================================
4279
======================================================================
4250
============= Function 70, subfunction 9 - create folder. ============
4280
============= Function 70, subfunction 9 - create folder. ============
4251
======================================================================
4281
======================================================================
4252
Parameters:
4282
Parameters:
4253
  * eax = 70 - function number
4283
  * eax = 70 - function number
4254
  * ebx = pointer to the information structure
4284
  * ebx = pointer to the information structure
4255
Format of the information structure:
4285
Format of the information structure:
4256
  * +0: dword: 9 = subfunction number
4286
  * +0: dword: 9 = subfunction number
4257
  * +4: dword: 0 (reserved)
4287
  * +4: dword: 0 (reserved)
4258
  * +8: dword: 0 (reserved)
4288
  * +8: dword: 0 (reserved)
4259
  * +12 = +0xC: dword: 0 (reserved)
4289
  * +12 = +0xC: dword: 0 (reserved)
4260
  * +16 = +0x10: dword: 0 (reserved)
4290
  * +16 = +0x10: dword: 0 (reserved)
4261
  * +20 = +0x14: path, general rules of names forming
4291
  * +20 = +0x14: path, general rules of names forming
4262
Returned value:
4292
Returned value:
4263
  * eax = 0 - success, otherwise file system error code
4293
  * eax = 0 - success, otherwise file system error code
4264
  * ebx destroyed
4294
  * ebx destroyed
4265
Remarks:
4295
Remarks:
4266
  * The function is not supported for CD (returns error code 2).
4296
  * The function is not supported for CD (returns error code 2).
4267
  * The parent folder must already exist.
4297
  * The parent folder must already exist.
4268
  * If target folder already exists, function returns success (eax=0).
4298
  * If target folder already exists, function returns success (eax=0).
4269
 
4299
 
4270
---------------------- Constants for registers: ----------------------
4300
---------------------- Constants for registers: ----------------------
4271
  eax - SF_FILE (70)
4301
  eax - SF_FILE (70)
4272
 [ebx] - SSF_CREATE_FOLDER (9)
4302
 [ebx] - SSF_CREATE_FOLDER (9)
4273
======================================================================
4303
======================================================================
4274
========== Function 71, subfunction 1 - set window caption. ==========
4304
========== Function 71, subfunction 1 - set window caption. ==========
4275
======================================================================
4305
======================================================================
4276
Parameters:
4306
Parameters:
4277
  * eax = 71 - function number
4307
  * eax = 71 - function number
4278
  * ebx = 1 - subfunction number
4308
  * ebx = 1 - subfunction number
4279
  * ecx = pointer to zero terminated string
4309
  * ecx = pointer to zero terminated string
4280
Returned value:
4310
Returned value:
4281
  * function does not return value
4311
  * function does not return value
4282
Remarks:
4312
Remarks:
4283
  * You may set the caption string encoding by putting
4313
  * You may set the caption string encoding by putting
4284
    at the start of the string a byte with next values:
4314
    at the start of the string a byte with next values:
4285
    1 = cp866
4315
    1 = cp866
4286
    2 = UTF-16LE
4316
    2 = UTF-16LE
4287
    3 = UTF-8
4317
    3 = UTF-8
4288
    otherwise will be used cp866.
4318
    otherwise will be used cp866.
4289
  * Pass NULL in ecx to remove caption.
4319
  * Pass NULL in ecx to remove caption.
4290
 
4320
 
4291
---------------------- Constants for registers: ----------------------
4321
---------------------- Constants for registers: ----------------------
4292
  eax - SF_SET_CAPTION (71)
4322
  eax - SF_SET_CAPTION (71)
4293
======================================================================
4323
======================================================================
4294
=============== Function 72 - send message to a window. ==============
4324
=============== Function 72 - send message to a window. ==============
4295
======================================================================
4325
======================================================================
4296
 
4326
 
4297
- Subfunction 1 - send message with parameter to the active window. --
4327
- Subfunction 1 - send message with parameter to the active window. --
4298
Parameters:
4328
Parameters:
4299
  * eax = 72 - function number
4329
  * eax = 72 - function number
4300
  * ebx = 1 - subfunction number
4330
  * ebx = 1 - subfunction number
4301
  * ecx = event code: 2 or 3
4331
  * ecx = event code: 2 or 3
4302
  * edx = parameter: key code for ecx=2, button identifier for ecx=3
4332
  * edx = parameter: key code for ecx=2, button identifier for ecx=3
4303
Returned value:
4333
Returned value:
4304
  * eax = 0 - success
4334
  * eax = 0 - success
4305
  * eax = 1 - buffer is full
4335
  * eax = 1 - buffer is full
4306
 
4336
 
4307
---------------------- Constants for registers: ----------------------
4337
---------------------- Constants for registers: ----------------------
4308
  eax - SF_SEND_MESSAGE (72)
4338
  eax - SF_SEND_MESSAGE (72)
4309
======================================================================
4339
======================================================================
4310
===================== Function 73 - blit bitmap  =====================
4340
===================== Function 73 - blit bitmap  =====================
4311
======================================================================
4341
======================================================================
4312
 
4342
 
4313
Parameters:
4343
Parameters:
4314
  * eax = 73 - function number
4344
  * eax = 73 - function number
4315
 
4345
 
4316
  * ebx = ROP and optional flags
4346
  * ebx = ROP and optional flags
4317
     31      30 29 28       6 5  4 3   0
4347
     31      30 29 28       6 5  4 3   0
4318
     [reserved][CR][reserved][T][B][ROP]
4348
     [reserved][CR][reserved][T][B][ROP]
4319
     ROP - raster operation code
4349
     ROP - raster operation code
4320
        0: Copy
4350
        0: Copy
4321
     1-15: reserved
4351
     1-15: reserved
4322
     B   - blit into the background surface
4352
     B   - blit into the background surface
4323
     T   - transparent blit
4353
     T   - transparent blit
4324
     CR  - blit client relative
4354
     CR  - blit client relative
4325
 
4355
 
4326
  * ecx = pointer to the function parameters
4356
  * ecx = pointer to the function parameters
4327
        destination offset and clipping
4357
        destination offset and clipping
4328
     +0 signed dword: destination rectangle X offset from the window
4358
     +0 signed dword: destination rectangle X offset from the window
4329
                      top-left corner
4359
                      top-left corner
4330
     +4 signed dword: destination rectangle Y offset from the window
4360
     +4 signed dword: destination rectangle Y offset from the window
4331
                      top-left corner
4361
                      top-left corner
4332
     +8 dword:        destination rectangle width
4362
     +8 dword:        destination rectangle width
4333
    +12 dword:        destination rectangle height
4363
    +12 dword:        destination rectangle height
4334
 
4364
 
4335
        source offset and clipping
4365
        source offset and clipping
4336
    +16 signed dword: source rectangle X offset from the bitmap
4366
    +16 signed dword: source rectangle X offset from the bitmap
4337
                      top-left corner
4367
                      top-left corner
4338
    +20 signed dword: source rectangle Y offset from the bitmap
4368
    +20 signed dword: source rectangle Y offset from the bitmap
4339
                      top-left corner
4369
                      top-left corner
4340
    +24 dword:        source rectangle width
4370
    +24 dword:        source rectangle width
4341
    +28 dword:        source rectangle height
4371
    +28 dword:        source rectangle height
4342
 
4372
 
4343
    +32: dword: bitmap data - must be 32bpp
4373
    +32: dword: bitmap data - must be 32bpp
4344
    +36: dword: size of the bitmap row in bytes
4374
    +36: dword: size of the bitmap row in bytes
4345
 
4375
 
4346
Returned value:
4376
Returned value:
4347
  * function does not return value
4377
  * function does not return value
4348
 
4378
 
4349
---------------------- Constants for registers: ----------------------
4379
---------------------- Constants for registers: ----------------------
4350
  eax - SF_BLITTER (73)
4380
  eax - SF_BLITTER (73)
4351
======================================================================
4381
======================================================================
4352
= Function 74, Subfunction 255, Get number of active network devices. =
4382
= Function 74, Subfunction 255, Get number of active network devices. =
4353
======================================================================
4383
======================================================================
4354
Parameters:
4384
Parameters:
4355
  * eax = 74 - function number
4385
  * eax = 74 - function number
4356
  * bl = 255 - subfunction number
4386
  * bl = 255 - subfunction number
4357
Returned value:
4387
Returned value:
4358
  * eax = number of active network devices
4388
  * eax = number of active network devices
4359
 
4389
 
4360
---------------------- Constants for registers: ----------------------
4390
---------------------- Constants for registers: ----------------------
4361
  eax - SF_NETWORK_GET (74)
4391
  eax - SF_NETWORK_GET (74)
4362
   bl - SSF_DEVICE_COUNT (255)
4392
   bl - SSF_DEVICE_COUNT (255)
4363
======================================================================
4393
======================================================================
4364
======== Function 74, Subfunction 0, Get network device type. ========
4394
======== Function 74, Subfunction 0, Get network device type. ========
4365
======================================================================
4395
======================================================================
4366
Parameters:
4396
Parameters:
4367
  * eax = 74 - function number
4397
  * eax = 74 - function number
4368
  * bl = 0 - subfunction number
4398
  * bl = 0 - subfunction number
4369
  * bh = device number
4399
  * bh = device number
4370
Returned value:
4400
Returned value:
4371
  * eax = device type number
4401
  * eax = device type number
4372
 
4402
 
4373
---------------------- Constants for registers: ----------------------
4403
---------------------- Constants for registers: ----------------------
4374
  eax - SF_NETWORK_GET (74)
4404
  eax - SF_NETWORK_GET (74)
4375
   bl - SSF_DEVICE_TYPE (0)
4405
   bl - SSF_DEVICE_TYPE (0)
4376
======================================================================
4406
======================================================================
4377
======== Function 74, Subfunction 1, Get network device name. ========
4407
======== Function 74, Subfunction 1, Get network device name. ========
4378
======================================================================
4408
======================================================================
4379
Parameters:
4409
Parameters:
4380
  * eax = 74 - function number
4410
  * eax = 74 - function number
4381
  * bl = 1 - subfunction number
4411
  * bl = 1 - subfunction number
4382
  * bh = device number
4412
  * bh = device number
4383
  * ecx = pointer to 64 byte buffer
4413
  * ecx = pointer to 64 byte buffer
4384
Returned value:
4414
Returned value:
4385
  * eax = -1 on error
4415
  * eax = -1 on error
4386
  * The network device name is written into the buffer, on success
4416
  * The network device name is written into the buffer, on success
4387
 
4417
 
4388
---------------------- Constants for registers: ----------------------
4418
---------------------- Constants for registers: ----------------------
4389
  eax - SF_NETWORK_GET (74)
4419
  eax - SF_NETWORK_GET (74)
4390
   bl - SSF_DEVICE_NAME (1)
4420
   bl - SSF_DEVICE_NAME (1)
4391
======================================================================
4421
======================================================================
4392
========= Function 74, Subfunction 2, Reset network device. ==========
4422
========= Function 74, Subfunction 2, Reset network device. ==========
4393
======================================================================
4423
======================================================================
4394
Parameters:
4424
Parameters:
4395
  * eax = 74 - function number
4425
  * eax = 74 - function number
4396
  * bl = 2 - subfunction number
4426
  * bl = 2 - subfunction number
4397
  * bh = device number
4427
  * bh = device number
4398
Returned value:
4428
Returned value:
4399
  * eax = -1 on error
4429
  * eax = -1 on error
4400
 
4430
 
4401
---------------------- Constants for registers: ----------------------
4431
---------------------- Constants for registers: ----------------------
4402
  eax - SF_NETWORK_GET (74)
4432
  eax - SF_NETWORK_GET (74)
4403
   bl - SSF_RESET_DEVICE (2)
4433
   bl - SSF_RESET_DEVICE (2)
4404
======================================================================
4434
======================================================================
4405
========== Function 74, Subfunction 3, Stop network device. ==========
4435
========== Function 74, Subfunction 3, Stop network device. ==========
4406
======================================================================
4436
======================================================================
4407
Parameters:
4437
Parameters:
4408
  * eax = 74 - function number
4438
  * eax = 74 - function number
4409
  * bl = 3 - subfunction number
4439
  * bl = 3 - subfunction number
4410
  * bh = device number
4440
  * bh = device number
4411
Returned value:
4441
Returned value:
4412
  * eax = -1 on error
4442
  * eax = -1 on error
4413
 
4443
 
4414
---------------------- Constants for registers: ----------------------
4444
---------------------- Constants for registers: ----------------------
4415
  eax - SF_NETWORK_GET (74)
4445
  eax - SF_NETWORK_GET (74)
4416
   bl - SSF_STOP_DEVICE (3)
4446
   bl - SSF_STOP_DEVICE (3)
4417
======================================================================
4447
======================================================================
4418
=========== Function 74, Subfunction 4, Get device pointer. ==========
4448
=========== Function 74, Subfunction 4, Get device pointer. ==========
4419
======================================================================
4449
======================================================================
4420
Parameters:
4450
Parameters:
4421
  * eax = 74 - function number
4451
  * eax = 74 - function number
4422
  * bl = 4 - subfunction number
4452
  * bl = 4 - subfunction number
4423
  * bh = device number
4453
  * bh = device number
4424
Returned value:
4454
Returned value:
4425
  * eax = device pointer, -1 on error
4455
  * eax = device pointer, -1 on error
4426
 
4456
 
4427
---------------------- Constants for registers: ----------------------
4457
---------------------- Constants for registers: ----------------------
4428
  eax - SF_NETWORK_GET (74)
4458
  eax - SF_NETWORK_GET (74)
4429
   bl - SSF_DEVICE_POINER (4)
4459
   bl - SSF_DEVICE_POINER (4)
4430
======================================================================
4460
======================================================================
4431
========= Function 74, Subfunction 6, Get packet TX counter. =========
4461
========= Function 74, Subfunction 6, Get packet TX counter. =========
4432
======================================================================
4462
======================================================================
4433
Parameters:
4463
Parameters:
4434
  * eax = 74 - function number
4464
  * eax = 74 - function number
4435
  * bl = 6 - subfunction number
4465
  * bl = 6 - subfunction number
4436
  * bh = device number
4466
  * bh = device number
4437
Returned value:
4467
Returned value:
4438
  * eax = Number of packets sent since device start, -1 on error
4468
  * eax = Number of packets sent since device start, -1 on error
4439
 
4469
 
4440
---------------------- Constants for registers: ----------------------
4470
---------------------- Constants for registers: ----------------------
4441
  eax - SF_NETWORK_GET (74)
4471
  eax - SF_NETWORK_GET (74)
4442
   bl - SSF_TX_PACKET_COUNT (6)
4472
   bl - SSF_TX_PACKET_COUNT (6)
4443
======================================================================
4473
======================================================================
4444
========= Function 74, Subfunction 7, Get packet RX counter. =========
4474
========= Function 74, Subfunction 7, Get packet RX counter. =========
4445
======================================================================
4475
======================================================================
4446
Parameters:
4476
Parameters:
4447
  * eax = 74 - function number
4477
  * eax = 74 - function number
4448
  * bl = 7 - subfunction number
4478
  * bl = 7 - subfunction number
4449
  * bh = device number
4479
  * bh = device number
4450
Returned value:
4480
Returned value:
4451
  * eax = Number of packets received since device start, -1 on error
4481
  * eax = Number of packets received since device start, -1 on error
4452
 
4482
 
4453
---------------------- Constants for registers: ----------------------
4483
---------------------- Constants for registers: ----------------------
4454
  eax - SF_NETWORK_GET (74)
4484
  eax - SF_NETWORK_GET (74)
4455
   bl - SSF_RX_PACKET_COUNT (7)
4485
   bl - SSF_RX_PACKET_COUNT (7)
4456
======================================================================
4486
======================================================================
4457
========== Function 74, Subfunction 8, Get TX byte counter. ==========
4487
========== Function 74, Subfunction 8, Get TX byte counter. ==========
4458
======================================================================
4488
======================================================================
4459
Parameters:
4489
Parameters:
4460
  * eax = 74 - function number
4490
  * eax = 74 - function number
4461
  * bl = 8 - subfunction number
4491
  * bl = 8 - subfunction number
4462
  * bh = device number
4492
  * bh = device number
4463
Returned value:
4493
Returned value:
4464
  * eax = Number of bytes sent since device start (lower dword)
4494
  * eax = Number of bytes sent since device start (lower dword)
4465
                  -1 on error
4495
                  -1 on error
4466
  * ebx = Number of bytes sent since device start (higher dword)
4496
  * ebx = Number of bytes sent since device start (higher dword)
4467
 
4497
 
4468
---------------------- Constants for registers: ----------------------
4498
---------------------- Constants for registers: ----------------------
4469
  eax - SF_NETWORK_GET (74)
4499
  eax - SF_NETWORK_GET (74)
4470
   bl - SSF_TX_BYTE_COUNT (8)
4500
   bl - SSF_TX_BYTE_COUNT (8)
4471
======================================================================
4501
======================================================================
4472
========== Function 74, Subfunction 9, Get RX byte counter. ==========
4502
========== Function 74, Subfunction 9, Get RX byte counter. ==========
4473
======================================================================
4503
======================================================================
4474
Parameters:
4504
Parameters:
4475
  * eax = 74 - function number
4505
  * eax = 74 - function number
4476
  * bl = 9 - subfunction number
4506
  * bl = 9 - subfunction number
4477
  * bh = device number
4507
  * bh = device number
4478
Returned value:
4508
Returned value:
4479
  * eax = Number of bytes received since device start (lower dword)
4509
  * eax = Number of bytes received since device start (lower dword)
4480
                  -1 on error
4510
                  -1 on error
4481
  * ebx = Number of bytes received since device start (higher dword)
4511
  * ebx = Number of bytes received since device start (higher dword)
4482
 
4512
 
4483
---------------------- Constants for registers: ----------------------
4513
---------------------- Constants for registers: ----------------------
4484
  eax - SF_NETWORK_GET (74)
4514
  eax - SF_NETWORK_GET (74)
4485
   bl - SSF_RX_BYTE_COUNT (9)
4515
   bl - SSF_RX_BYTE_COUNT (9)
4486
======================================================================
4516
======================================================================
4487
========== Function 74, Subfunction 10, Get link status. =============
4517
========== Function 74, Subfunction 10, Get link status. =============
4488
======================================================================
4518
======================================================================
4489
Parameters:
4519
Parameters:
4490
  * eax = 74 - function number
4520
  * eax = 74 - function number
4491
  * bl = 10 - subfunction number
4521
  * bl = 10 - subfunction number
4492
  * bh = device number
4522
  * bh = device number
4493
Returned value:
4523
Returned value:
4494
  * eax = link status, -1 on error
4524
  * eax = link status, -1 on error
4495
 
4525
 
4496
  Link status:
4526
  Link status:
4497
    ETH_LINK_DOWN   =    0b         ; Link is down
4527
    ETH_LINK_DOWN   =    0b         ; Link is down
4498
    ETH_LINK_UNKNOWN=    1b         ; There could be an active link
4528
    ETH_LINK_UNKNOWN=    1b         ; There could be an active link
4499
    ETH_LINK_FD     =   10b         ; full duplex flag
4529
    ETH_LINK_FD     =   10b         ; full duplex flag
4500
    ETH_LINK_10M    =  100b         ; 10 mbit
4530
    ETH_LINK_10M    =  100b         ; 10 mbit
4501
    ETH_LINK_100M   = 1000b         ; 100 mbit
4531
    ETH_LINK_100M   = 1000b         ; 100 mbit
4502
    ETH_LINK_1G     = 1100b         ; gigabit
4532
    ETH_LINK_1G     = 1100b         ; gigabit
4503
 
4533
 
4504
---------------------- Constants for registers: ----------------------
4534
---------------------- Constants for registers: ----------------------
4505
  eax - SF_NETWORK_GET (74)
4535
  eax - SF_NETWORK_GET (74)
4506
   bl - SSF_LINK_STATUS (10)
4536
   bl - SSF_LINK_STATUS (10)
4507
======================================================================
4537
======================================================================
4508
============== Function 75, Subfunction 0, Open socket. ==============
4538
============== Function 75, Subfunction 0, Open socket. ==============
4509
======================================================================
4539
======================================================================
4510
Parameters:
4540
Parameters:
4511
  * eax = 75 - function number
4541
  * eax = 75 - function number
4512
  * bl = 0 - subfunction number
4542
  * bl = 0 - subfunction number
4513
  * ecx = domain
4543
  * ecx = domain
4514
  * edx = type
4544
  * edx = type
4515
  * esi = protocol
4545
  * esi = protocol
4516
Returned value:
4546
Returned value:
4517
  * eax = socket number, -1 on error
4547
  * eax = socket number, -1 on error
4518
  * ebx = errorcode
4548
  * ebx = errorcode
4519
 
4549
 
4520
---------------------- Constants for registers: ----------------------
4550
---------------------- Constants for registers: ----------------------
4521
  eax - SF_NETWORK_SOCKET (75)
4551
  eax - SF_NETWORK_SOCKET (75)
4522
   bl - SSF_OPEN (0)
4552
   bl - SSF_OPEN (0)
4523
======================================================================
4553
======================================================================
4524
============= Function 75, Subfunction 1, Close socket. ==============
4554
============= Function 75, Subfunction 1, Close socket. ==============
4525
======================================================================
4555
======================================================================
4526
Parameters:
4556
Parameters:
4527
  * eax = 75 - function number
4557
  * eax = 75 - function number
4528
  * bl = 1 - subfunction number
4558
  * bl = 1 - subfunction number
4529
  * ecx = socket number
4559
  * ecx = socket number
4530
Returned value:
4560
Returned value:
4531
  * eax = -1 on error
4561
  * eax = -1 on error
4532
  * ebx = errorcode
4562
  * ebx = errorcode
4533
 
4563
 
4534
---------------------- Constants for registers: ----------------------
4564
---------------------- Constants for registers: ----------------------
4535
  eax - SF_NETWORK_SOCKET (75)
4565
  eax - SF_NETWORK_SOCKET (75)
4536
   bl - SSF_CLOSE (1)
4566
   bl - SSF_CLOSE (1)
4537
======================================================================
4567
======================================================================
4538
================== Function 75, Subfunction 2, Bind. =================
4568
================== Function 75, Subfunction 2, Bind. =================
4539
======================================================================
4569
======================================================================
4540
Parameters:
4570
Parameters:
4541
  * eax = 75 - function number
4571
  * eax = 75 - function number
4542
  * bl = 2 - subfunction number
4572
  * bl = 2 - subfunction number
4543
  * ecx = socket number
4573
  * ecx = socket number
4544
  * edx = pointer to sockaddr structure
4574
  * edx = pointer to sockaddr structure
4545
  * esi = length of sockaddr structure
4575
  * esi = length of sockaddr structure
4546
Format of SockAddr structure:
4576
Format of SockAddr structure:
4547
  * +0: Word: Family
4577
  * +0: Word: Family
4548
  * +2: 14*Byte: Data
4578
  * +2: 14*Byte: Data
4549
Returned value:
4579
Returned value:
4550
  * eax = -1 on error
4580
  * eax = -1 on error
4551
  * ebx = errorcode
4581
  * ebx = errorcode
4552
 
4582
 
4553
---------------------- Constants for registers: ----------------------
4583
---------------------- Constants for registers: ----------------------
4554
  eax - SF_NETWORK_SOCKET (75)
4584
  eax - SF_NETWORK_SOCKET (75)
4555
   bl - SSF_BIND (2)
4585
   bl - SSF_BIND (2)
4556
======================================================================
4586
======================================================================
4557
================= Function 75, Subfunction 3, Listen. ================
4587
================= Function 75, Subfunction 3, Listen. ================
4558
======================================================================
4588
======================================================================
4559
Parameters:
4589
Parameters:
4560
  * eax = 75 - function number
4590
  * eax = 75 - function number
4561
  * bl = 3 - subfunction number
4591
  * bl = 3 - subfunction number
4562
  * ecx = socket number
4592
  * ecx = socket number
4563
  * edx = backlog
4593
  * edx = backlog
4564
Returned value:
4594
Returned value:
4565
  * eax = -1 on error
4595
  * eax = -1 on error
4566
  * ebx = errorcode
4596
  * ebx = errorcode
4567
 
4597
 
4568
---------------------- Constants for registers: ----------------------
4598
---------------------- Constants for registers: ----------------------
4569
  eax - SF_NETWORK_SOCKET (75)
4599
  eax - SF_NETWORK_SOCKET (75)
4570
   bl - SSF_LISTEN (3)
4600
   bl - SSF_LISTEN (3)
4571
======================================================================
4601
======================================================================
4572
================ Function 75, Subfunction 4, Connect. ================
4602
================ Function 75, Subfunction 4, Connect. ================
4573
======================================================================
4603
======================================================================
4574
Parameters:
4604
Parameters:
4575
  * eax = 75 - function number
4605
  * eax = 75 - function number
4576
  * bl = 4 - subfunction number
4606
  * bl = 4 - subfunction number
4577
  * ecx = socket number
4607
  * ecx = socket number
4578
  * edx = pointer to sockaddr structure
4608
  * edx = pointer to sockaddr structure
4579
  * esi = length of sockaddr structure
4609
  * esi = length of sockaddr structure
4580
Format of SockAddr structure:
4610
Format of SockAddr structure:
4581
  * +0: Word: Family
4611
  * +0: Word: Family
4582
  * +2: 14*Byte: Data
4612
  * +2: 14*Byte: Data
4583
Returned value:
4613
Returned value:
4584
  * eax = -1 on error
4614
  * eax = -1 on error
4585
  * ebx = errorcode
4615
  * ebx = errorcode
4586
 
4616
 
4587
---------------------- Constants for registers: ----------------------
4617
---------------------- Constants for registers: ----------------------
4588
  eax - SF_NETWORK_SOCKET (75)
4618
  eax - SF_NETWORK_SOCKET (75)
4589
   bl - SSF_CONNECT (4)
4619
   bl - SSF_CONNECT (4)
4590
======================================================================
4620
======================================================================
4591
================= Function 75, Subfunction 5, Accept. ================
4621
================= Function 75, Subfunction 5, Accept. ================
4592
======================================================================
4622
======================================================================
4593
Parameters:
4623
Parameters:
4594
  * eax = 75 - function number
4624
  * eax = 75 - function number
4595
  * bl = 5 - subfunction number
4625
  * bl = 5 - subfunction number
4596
  * ecx = socket number
4626
  * ecx = socket number
4597
  * edx = pointer to sockaddr structure
4627
  * edx = pointer to sockaddr structure
4598
  * esi = length of sockaddr structure
4628
  * esi = length of sockaddr structure
4599
Format of SockAddr structure:
4629
Format of SockAddr structure:
4600
  * +0: Word: Family
4630
  * +0: Word: Family
4601
  * +2: 14*Byte: Data
4631
  * +2: 14*Byte: Data
4602
Returned value:
4632
Returned value:
4603
  * eax = socket number of accepted socket, -1 on error
4633
  * eax = socket number of accepted socket, -1 on error
4604
  * ebx = errorcode
4634
  * ebx = errorcode
4605
 
4635
 
4606
---------------------- Constants for registers: ----------------------
4636
---------------------- Constants for registers: ----------------------
4607
  eax - SF_NETWORK_SOCKET (75)
4637
  eax - SF_NETWORK_SOCKET (75)
4608
   bl - SSF_ACCEPT (5)
4638
   bl - SSF_ACCEPT (5)
4609
======================================================================
4639
======================================================================
4610
================== Function 75, Subfunction 6, Send. =================
4640
================== Function 75, Subfunction 6, Send. =================
4611
======================================================================
4641
======================================================================
4612
Parameters:
4642
Parameters:
4613
  * eax = 75 - function number
4643
  * eax = 75 - function number
4614
  * bl = 6 - subfunction number
4644
  * bl = 6 - subfunction number
4615
  * ecx = socket number
4645
  * ecx = socket number
4616
  * edx = pointer to buffer
4646
  * edx = pointer to buffer
4617
  * esi = length of buffer
4647
  * esi = length of buffer
4618
  * edi = flags
4648
  * edi = flags
4619
Returned value:
4649
Returned value:
4620
  * eax = number of bytes copied, -1 on error
4650
  * eax = number of bytes copied, -1 on error
4621
  * ebx = errorcode
4651
  * ebx = errorcode
4622
 
4652
 
4623
---------------------- Constants for registers: ----------------------
4653
---------------------- Constants for registers: ----------------------
4624
  eax - SF_NETWORK_SOCKET (75)
4654
  eax - SF_NETWORK_SOCKET (75)
4625
   bl - SSF_SEND (6)
4655
   bl - SSF_SEND (6)
4626
======================================================================
4656
======================================================================
4627
================ Function 75, Subfunction 7, Receive. ================
4657
================ Function 75, Subfunction 7, Receive. ================
4628
======================================================================
4658
======================================================================
4629
Parameters:
4659
Parameters:
4630
  * eax = 75 - function number
4660
  * eax = 75 - function number
4631
  * bl = 7 - subfunction number
4661
  * bl = 7 - subfunction number
4632
  * ecx = socket number
4662
  * ecx = socket number
4633
  * edx = pointer to buffer
4663
  * edx = pointer to buffer
4634
  * esi = length of buffer
4664
  * esi = length of buffer
4635
  * edi = flags
4665
  * edi = flags
4636
Returned value:
4666
Returned value:
4637
  * eax = number of bytes copied, -1 on error
4667
  * eax = number of bytes copied, -1 on error
4638
  * ebx = errorcode
4668
  * ebx = errorcode
4639
 
4669
 
4640
---------------------- Constants for registers: ----------------------
4670
---------------------- Constants for registers: ----------------------
4641
  eax - SF_NETWORK_SOCKET (75)
4671
  eax - SF_NETWORK_SOCKET (75)
4642
   bl - SSF_RECEIVE (7)
4672
   bl - SSF_RECEIVE (7)
4643
======================================================================
4673
======================================================================
4644
=========== Function 75, Subfunction 8, Set socket options. ==========
4674
=========== Function 75, Subfunction 8, Set socket options. ==========
4645
======================================================================
4675
======================================================================
4646
Parameters:
4676
Parameters:
4647
  * eax = 75 - function number
4677
  * eax = 75 - function number
4648
  * bl = 8 - subfunction number
4678
  * bl = 8 - subfunction number
4649
  * ecx = socket number
4679
  * ecx = socket number
4650
  * edx = pointer to optstruct
4680
  * edx = pointer to optstruct
4651
Returned value:
4681
Returned value:
4652
  * eax = -1 on error
4682
  * eax = -1 on error
4653
  * ebx = errorcode
4683
  * ebx = errorcode
4654
Remarks:
4684
Remarks:
4655
 
4685
 
4656
  Optstruct:
4686
  Optstruct:
4657
    dd level
4687
    dd level
4658
    dd optionname
4688
    dd optionname
4659
    dd optlength
4689
    dd optlength
4660
    db options...
4690
    db options...
4661
 
4691
 
4662
---------------------- Constants for registers: ----------------------
4692
---------------------- Constants for registers: ----------------------
4663
  eax - SF_NETWORK_SOCKET (75)
4693
  eax - SF_NETWORK_SOCKET (75)
4664
   bl - SSF_SET_OPTIONS (8)
4694
   bl - SSF_SET_OPTIONS (8)
4665
======================================================================
4695
======================================================================
4666
=========== Function 75, Subfunction 9, Get socket options. ==========
4696
=========== Function 75, Subfunction 9, Get socket options. ==========
4667
======================================================================
4697
======================================================================
4668
Parameters:
4698
Parameters:
4669
  * eax = 75 - function number
4699
  * eax = 75 - function number
4670
  * bl = 9 - subfunction number
4700
  * bl = 9 - subfunction number
4671
  * ecx = socket number
4701
  * ecx = socket number
4672
  * edx = pointer to optstruct
4702
  * edx = pointer to optstruct
4673
Returned value:
4703
Returned value:
4674
  * eax = -1 on error
4704
  * eax = -1 on error
4675
  * ebx = errorcode
4705
  * ebx = errorcode
4676
Remarks:
4706
Remarks:
4677
 
4707
 
4678
  Optstruct:
4708
  Optstruct:
4679
    dd level
4709
    dd level
4680
    dd optionname
4710
    dd optionname
4681
    dd optlength
4711
    dd optlength
4682
    db options...
4712
    db options...
4683
 
4713
 
4684
---------------------- Constants for registers: ----------------------
4714
---------------------- Constants for registers: ----------------------
4685
  eax - SF_NETWORK_SOCKET (75)
4715
  eax - SF_NETWORK_SOCKET (75)
4686
   bl - SSF_GET_OPTIONS (9)
4716
   bl - SSF_GET_OPTIONS (9)
4687
======================================================================
4717
======================================================================
4688
============ Function 75, Subfunction 10, Get socketpair. ============
4718
============ Function 75, Subfunction 10, Get socketpair. ============
4689
======================================================================
4719
======================================================================
4690
Parameters:
4720
Parameters:
4691
  * eax = 75 - function number
4721
  * eax = 75 - function number
4692
  * bl = 10 - subfunction number
4722
  * bl = 10 - subfunction number
4693
Returned value:
4723
Returned value:
4694
  * eax = socketnum1, -1 on error
4724
  * eax = socketnum1, -1 on error
4695
  * ebx = socketnum2, errorcode on error
4725
  * ebx = socketnum2, errorcode on error
4696
 
4726
 
4697
---------------------- Constants for registers: ----------------------
4727
---------------------- Constants for registers: ----------------------
4698
  eax - SF_NETWORK_SOCKET (75)
4728
  eax - SF_NETWORK_SOCKET (75)
4699
   bl - SSF_GET_PAIR (10)
4729
   bl - SSF_GET_PAIR (10)
4700
======================================================================
4730
======================================================================
4701
============ Function 76, Network options and statistics. ============
4731
============ Function 76, Network options and statistics. ============
4702
======================================================================
4732
======================================================================
4703
Parameters:
4733
Parameters:
4704
  * eax = 76 - function number
4734
  * eax = 76 - function number
4705
  * high half of ebx = protocol number
4735
  * high half of ebx = protocol number
4706
  * bh = device number
4736
  * bh = device number
4707
  * bl = subfunction number
4737
  * bl = subfunction number
4708
 
4738
 
4709
======================================================================
4739
======================================================================
4710
==== Function 76, Protocol 0 - Ethernet, Subfunction 0, Read MAC. ====
4740
==== Function 76, Protocol 0 - Ethernet, Subfunction 0, Read MAC. ====
4711
======================================================================
4741
======================================================================
4712
Parameters:
4742
Parameters:
4713
  * eax = 76 - function number
4743
  * eax = 76 - function number
4714
  * high half of ebx = 0 (Ethernet)
4744
  * high half of ebx = 0 (Ethernet)
4715
  * bh = device number
4745
  * bh = device number
4716
  * bl = 0 (Read MAC)
4746
  * bl = 0 (Read MAC)
4717
Returned value:
4747
Returned value:
4718
  * eax = -1 on error, otherwise lower bits of MAC
4748
  * eax = -1 on error, otherwise lower bits of MAC
4719
  * bx = upper bits of MAC
4749
  * bx = upper bits of MAC
4720
 
4750
 
4721
======================================================================
4751
======================================================================
4722
= Function 76, Protocol 1 - IPv4, Subfunction 0, Read # Packets sent =
4752
= Function 76, Protocol 1 - IPv4, Subfunction 0, Read # Packets sent =
4723
======================================================================
4753
======================================================================
4724
Parameters:
4754
Parameters:
4725
  * eax = 76 - function number
4755
  * eax = 76 - function number
4726
  * high half of ebx = 1 (IPv4)
4756
  * high half of ebx = 1 (IPv4)
4727
  * bh = device number
4757
  * bh = device number
4728
  * bl = 0 (Read # packets sent)
4758
  * bl = 0 (Read # packets sent)
4729
Returned value:
4759
Returned value:
4730
  * eax = number of packets sent (-1 on error)
4760
  * eax = number of packets sent (-1 on error)
4731
 
4761
 
4732
======================================================================
4762
======================================================================
4733
= Function 76, Protocol 1 - IPv4, Subfunction 1, Read # Packets rcvd =
4763
= Function 76, Protocol 1 - IPv4, Subfunction 1, Read # Packets rcvd =
4734
======================================================================
4764
======================================================================
4735
Parameters:
4765
Parameters:
4736
  * eax = 76 - function number
4766
  * eax = 76 - function number
4737
  * high half of ebx = 1 (IPv4)
4767
  * high half of ebx = 1 (IPv4)
4738
  * bh = device number
4768
  * bh = device number
4739
  * bl = 1 (Read # packets received)
4769
  * bl = 1 (Read # packets received)
4740
Returned value:
4770
Returned value:
4741
  * eax = number of packets received (-1 on error)
4771
  * eax = number of packets received (-1 on error)
4742
 
4772
 
4743
======================================================================
4773
======================================================================
4744
=== Function 76, Protocol 1 - IPv4, Subfunction 2, Read IP address ===
4774
=== Function 76, Protocol 1 - IPv4, Subfunction 2, Read IP address ===
4745
======================================================================
4775
======================================================================
4746
Parameters:
4776
Parameters:
4747
  * eax = 76 - function number
4777
  * eax = 76 - function number
4748
  * high half of ebx = 1 (IPv4)
4778
  * high half of ebx = 1 (IPv4)
4749
  * bh = device number
4779
  * bh = device number
4750
  * bl = 2 (Read IP address)
4780
  * bl = 2 (Read IP address)
4751
Returned value:
4781
Returned value:
4752
  * eax = IP address (-1 on error)
4782
  * eax = IP address (-1 on error)
4753
 
4783
 
4754
======================================================================
4784
======================================================================
4755
=== Function 76, Protocol 1 - IPv4, Subfunction 3, Set IP address ====
4785
=== Function 76, Protocol 1 - IPv4, Subfunction 3, Set IP address ====
4756
======================================================================
4786
======================================================================
4757
Parameters:
4787
Parameters:
4758
  * eax = 76 - function number
4788
  * eax = 76 - function number
4759
  * high half of ebx = 1 (IPv4)
4789
  * high half of ebx = 1 (IPv4)
4760
  * bh = device number
4790
  * bh = device number
4761
  * bl = 3 (Set IP address)
4791
  * bl = 3 (Set IP address)
4762
  * ecx = IP address
4792
  * ecx = IP address
4763
Returned value:
4793
Returned value:
4764
  * eax = -1 on error
4794
  * eax = -1 on error
4765
 
4795
 
4766
======================================================================
4796
======================================================================
4767
== Function 76, Protocol 1 - IPv4, Subfunction 4, Read DNS address ===
4797
== Function 76, Protocol 1 - IPv4, Subfunction 4, Read DNS address ===
4768
======================================================================
4798
======================================================================
4769
Parameters:
4799
Parameters:
4770
  * eax = 76 - function number
4800
  * eax = 76 - function number
4771
  * high half of ebx = 1 (IPv4)
4801
  * high half of ebx = 1 (IPv4)
4772
  * bh = device number
4802
  * bh = device number
4773
  * bl = 4 (Read DNS server IP address)
4803
  * bl = 4 (Read DNS server IP address)
4774
Returned value:
4804
Returned value:
4775
  * eax = DNS server IP address (-1 on error)
4805
  * eax = DNS server IP address (-1 on error)
4776
 
4806
 
4777
======================================================================
4807
======================================================================
4778
=== Function 76, Protocol 1 - IPv4, Subfunction 5, Set DNS address ===
4808
=== Function 76, Protocol 1 - IPv4, Subfunction 5, Set DNS address ===
4779
======================================================================
4809
======================================================================
4780
Parameters:
4810
Parameters:
4781
  * eax = 76 - function number
4811
  * eax = 76 - function number
4782
  * high half of ebx = 1 (IPv4)
4812
  * high half of ebx = 1 (IPv4)
4783
  * bh = device number
4813
  * bh = device number
4784
  * bl = 5 (Set DNS address)
4814
  * bl = 5 (Set DNS address)
4785
  * ecx = DNS server IP address
4815
  * ecx = DNS server IP address
4786
Returned value:
4816
Returned value:
4787
  * eax = -1 on error
4817
  * eax = -1 on error
4788
 
4818
 
4789
======================================================================
4819
======================================================================
4790
== Function 76, Protocol 1 - IPv4, Subfunction 6, Read subnet mask ===
4820
== Function 76, Protocol 1 - IPv4, Subfunction 6, Read subnet mask ===
4791
======================================================================
4821
======================================================================
4792
Parameters:
4822
Parameters:
4793
  * eax = 76 - function number
4823
  * eax = 76 - function number
4794
  * high half of ebx = 1 (IPv4)
4824
  * high half of ebx = 1 (IPv4)
4795
  * bh = device number
4825
  * bh = device number
4796
  * bl = 6 (Read subnet mask)
4826
  * bl = 6 (Read subnet mask)
4797
Returned value:
4827
Returned value:
4798
  * eax = subnet mask (-1 on error)
4828
  * eax = subnet mask (-1 on error)
4799
 
4829
 
4800
======================================================================
4830
======================================================================
4801
=== Function 76, Protocol 1 - IPv4, Subfunction 7, Set subnet mask ===
4831
=== Function 76, Protocol 1 - IPv4, Subfunction 7, Set subnet mask ===
4802
======================================================================
4832
======================================================================
4803
Parameters:
4833
Parameters:
4804
  * eax = 76 - function number
4834
  * eax = 76 - function number
4805
  * high half of ebx = 1 (IPv4)
4835
  * high half of ebx = 1 (IPv4)
4806
  * bh = device number
4836
  * bh = device number
4807
  * bl = 7 (Set DNS address)
4837
  * bl = 7 (Set DNS address)
4808
  * ecx = subnet mask
4838
  * ecx = subnet mask
4809
Returned value:
4839
Returned value:
4810
  * eax = -1 on error
4840
  * eax = -1 on error
4811
 
4841
 
4812
======================================================================
4842
======================================================================
4813
===== Function 76, Protocol 1 - IPv4, Subfunction 8, Read gateway ====
4843
===== Function 76, Protocol 1 - IPv4, Subfunction 8, Read gateway ====
4814
======================================================================
4844
======================================================================
4815
Parameters:
4845
Parameters:
4816
  * eax = 76 - function number
4846
  * eax = 76 - function number
4817
  * high half of ebx = 1 (IPv4)
4847
  * high half of ebx = 1 (IPv4)
4818
  * bh = device number
4848
  * bh = device number
4819
  * bl = 8 (Read gateway IP address)
4849
  * bl = 8 (Read gateway IP address)
4820
Returned value:
4850
Returned value:
4821
  * eax = gateway IP address (-1 on error)
4851
  * eax = gateway IP address (-1 on error)
4822
 
4852
 
4823
======================================================================
4853
======================================================================
4824
===== Function 76, Protocol 1 - IPv4, Subfunction 9, Set gateway =====
4854
===== Function 76, Protocol 1 - IPv4, Subfunction 9, Set gateway =====
4825
======================================================================
4855
======================================================================
4826
Parameters:
4856
Parameters:
4827
  * eax = 76 - function number
4857
  * eax = 76 - function number
4828
  * high half of ebx = 1 (IPv4)
4858
  * high half of ebx = 1 (IPv4)
4829
  * bh = device number
4859
  * bh = device number
4830
  * bl = 9 (Set getway address)
4860
  * bl = 9 (Set getway address)
4831
  * ecx = gateway IP address
4861
  * ecx = gateway IP address
4832
Returned value:
4862
Returned value:
4833
  * eax = -1 on error
4863
  * eax = -1 on error
4834
 
4864
 
4835
======================================================================
4865
======================================================================
4836
= Function 76, Protocol 2 - ICMP, Subfunction 0, Read # Packets sent =
4866
= Function 76, Protocol 2 - ICMP, Subfunction 0, Read # Packets sent =
4837
======================================================================
4867
======================================================================
4838
Parameters:
4868
Parameters:
4839
  * eax = 76 - function number
4869
  * eax = 76 - function number
4840
  * high half of ebx = 2 (ICMP)
4870
  * high half of ebx = 2 (ICMP)
4841
  * bh = device number
4871
  * bh = device number
4842
  * bl = 0 (Read # packets sent)
4872
  * bl = 0 (Read # packets sent)
4843
Returned value:
4873
Returned value:
4844
  * eax = number of packets sent (-1 on error)
4874
  * eax = number of packets sent (-1 on error)
4845
 
4875
 
4846
======================================================================
4876
======================================================================
4847
= Function 76, Protocol 2 - ICMP, Subfunction 1, Read # Packets rcvd =
4877
= Function 76, Protocol 2 - ICMP, Subfunction 1, Read # Packets rcvd =
4848
======================================================================
4878
======================================================================
4849
Parameters:
4879
Parameters:
4850
  * eax = 76 - function number
4880
  * eax = 76 - function number
4851
  * high half of ebx = 2 (ICMP)
4881
  * high half of ebx = 2 (ICMP)
4852
  * bh = device number
4882
  * bh = device number
4853
  * bl = 1 (Read # packets received)
4883
  * bl = 1 (Read # packets received)
4854
Returned value:
4884
Returned value:
4855
  * eax = number of packets received (-1 on error)
4885
  * eax = number of packets received (-1 on error)
4856
 
4886
 
4857
======================================================================
4887
======================================================================
4858
= Function 76, Protocol 3 - UDP, Subfunction 0, Read # Packets sent ==
4888
= Function 76, Protocol 3 - UDP, Subfunction 0, Read # Packets sent ==
4859
======================================================================
4889
======================================================================
4860
Parameters:
4890
Parameters:
4861
  * eax = 76 - function number
4891
  * eax = 76 - function number
4862
  * high half of ebx = 3 (UDP)
4892
  * high half of ebx = 3 (UDP)
4863
  * bh = device number
4893
  * bh = device number
4864
  * bl = 0 (Read # packets sent)
4894
  * bl = 0 (Read # packets sent)
4865
Returned value:
4895
Returned value:
4866
  * eax = number of packets sent (-1 on error)
4896
  * eax = number of packets sent (-1 on error)
4867
 
4897
 
4868
======================================================================
4898
======================================================================
4869
= Function 76, Protocol 3 - UDP, Subfunction 1, Read # Packets rcvd ==
4899
= Function 76, Protocol 3 - UDP, Subfunction 1, Read # Packets rcvd ==
4870
======================================================================
4900
======================================================================
4871
Parameters:
4901
Parameters:
4872
  * eax = 76 - function number
4902
  * eax = 76 - function number
4873
  * high half of ebx = 3 (UDP)
4903
  * high half of ebx = 3 (UDP)
4874
  * bh = device number
4904
  * bh = device number
4875
  * bl = 1 (Read # packets received)
4905
  * bl = 1 (Read # packets received)
4876
Returned value:
4906
Returned value:
4877
  * eax = number of packets received (-1 on error)
4907
  * eax = number of packets received (-1 on error)
4878
 
4908
 
4879
======================================================================
4909
======================================================================
4880
= Function 76, Protocol 4 - TCP, Subfunction 0, Read # Packets sent ==
4910
= Function 76, Protocol 4 - TCP, Subfunction 0, Read # Packets sent ==
4881
======================================================================
4911
======================================================================
4882
Parameters:
4912
Parameters:
4883
  * eax = 76 - function number
4913
  * eax = 76 - function number
4884
  * high half of ebx = 4 (TCP)
4914
  * high half of ebx = 4 (TCP)
4885
  * bh = device number
4915
  * bh = device number
4886
  * bl = 0 (Read # packets sent)
4916
  * bl = 0 (Read # packets sent)
4887
Returned value:
4917
Returned value:
4888
  * eax = number of packets sent (-1 on error)
4918
  * eax = number of packets sent (-1 on error)
4889
 
4919
 
4890
======================================================================
4920
======================================================================
4891
= Function 76, Protocol 4 - TCP, Subfunction 1, Read # Packets rcvd ==
4921
= Function 76, Protocol 4 - TCP, Subfunction 1, Read # Packets rcvd ==
4892
======================================================================
4922
======================================================================
4893
Parameters:
4923
Parameters:
4894
  * eax = 76 - function number
4924
  * eax = 76 - function number
4895
  * high half of ebx = 4 (TCP)
4925
  * high half of ebx = 4 (TCP)
4896
  * bh = device number
4926
  * bh = device number
4897
  * bl = 1 (Read # packets received)
4927
  * bl = 1 (Read # packets received)
4898
Returned value:
4928
Returned value:
4899
  * eax = number of packets received (-1 on error)
4929
  * eax = number of packets received (-1 on error)
4900
 
4930
 
4901
======================================================================
4931
======================================================================
4902
= Function 76, Protocol 5 - ARP, Subfunction 0, Read # Packets sent ==
4932
= Function 76, Protocol 5 - ARP, Subfunction 0, Read # Packets sent ==
4903
======================================================================
4933
======================================================================
4904
Parameters:
4934
Parameters:
4905
  * eax = 76 - function number
4935
  * eax = 76 - function number
4906
  * high half of ebx = 5 (ARP)
4936
  * high half of ebx = 5 (ARP)
4907
  * bh = device number
4937
  * bh = device number
4908
  * bl = 0 (Read # packets sent)
4938
  * bl = 0 (Read # packets sent)
4909
Returned value:
4939
Returned value:
4910
  * eax = number of packets sent (-1 on error)
4940
  * eax = number of packets sent (-1 on error)
4911
 
4941
 
4912
======================================================================
4942
======================================================================
4913
= Function 76, Protocol 5 - ARP, Subfunction 1, Read # Packets rcvd ==
4943
= Function 76, Protocol 5 - ARP, Subfunction 1, Read # Packets rcvd ==
4914
======================================================================
4944
======================================================================
4915
Parameters:
4945
Parameters:
4916
  * eax = 76 - function number
4946
  * eax = 76 - function number
4917
  * high half of ebx = 5 (ARP)
4947
  * high half of ebx = 5 (ARP)
4918
  * bh = device number
4948
  * bh = device number
4919
  * bl = 1 (Read # packets received)
4949
  * bl = 1 (Read # packets received)
4920
Returned value:
4950
Returned value:
4921
  * eax = number of packets received (-1 on error)
4951
  * eax = number of packets received (-1 on error)
4922
 
4952
 
4923
======================================================================
4953
======================================================================
4924
== Function 76, Protocol 5 - ARP, Subfunction 2, Read # ARP entries ==
4954
== Function 76, Protocol 5 - ARP, Subfunction 2, Read # ARP entries ==
4925
======================================================================
4955
======================================================================
4926
Parameters:
4956
Parameters:
4927
  * eax = 76 - function number
4957
  * eax = 76 - function number
4928
  * high half of ebx = 5 (ARP)
4958
  * high half of ebx = 5 (ARP)
4929
  * bh = device number
4959
  * bh = device number
4930
  * bl = 2 (Read # current entries in the ARP table)
4960
  * bl = 2 (Read # current entries in the ARP table)
4931
Returned value:
4961
Returned value:
4932
  * eax = number of entries (-1 on error)
4962
  * eax = number of entries (-1 on error)
4933
 
4963
 
4934
======================================================================
4964
======================================================================
4935
==== Function 76, Protocol 5 - ARP, Subfunction 3, Read ARP entry ====
4965
==== Function 76, Protocol 5 - ARP, Subfunction 3, Read ARP entry ====
4936
======================================================================
4966
======================================================================
4937
Parameters:
4967
Parameters:
4938
  * eax = 76 - function number
4968
  * eax = 76 - function number
4939
  * high half of ebx = 5 (ARP)
4969
  * high half of ebx = 5 (ARP)
4940
  * bh = device number
4970
  * bh = device number
4941
  * bl = 3 (Read ARP entry)
4971
  * bl = 3 (Read ARP entry)
4942
  * ecx = ARP entry number (0 based)
4972
  * ecx = ARP entry number (0 based)
4943
  * edi = ptr to buffer where ARP entry will be written
4973
  * edi = ptr to buffer where ARP entry will be written
4944
Returned value:
4974
Returned value:
4945
  * eax = -1 on error
4975
  * eax = -1 on error
4946
Remarks:
4976
Remarks:
4947
	ARP_entry struct is defined in ARP.inc in kernel and currently looks like this:
4977
	ARP_entry struct is defined in ARP.inc in kernel and currently looks like this:
4948
struct  ARP_entry
4978
struct  ARP_entry
4949
        IP              dd ?
4979
        IP              dd ?
4950
        MAC             dp ?
4980
        MAC             dp ?
4951
        Status          dw ?
4981
        Status          dw ?
4952
        TTL             dw ?
4982
        TTL             dw ?
4953
ends
4983
ends
4954
 
4984
 
4955
======================================================================
4985
======================================================================
4956
==== Function 76, Protocol 5 - ARP, Subfunction 4, Add ARP entry ====
4986
==== Function 76, Protocol 5 - ARP, Subfunction 4, Add ARP entry ====
4957
======================================================================
4987
======================================================================
4958
Parameters:
4988
Parameters:
4959
  * eax = 76 - function number
4989
  * eax = 76 - function number
4960
  * high half of ebx = 5 (ARP)
4990
  * high half of ebx = 5 (ARP)
4961
  * bh = device number
4991
  * bh = device number
4962
  * bl = 4 (Add ARP entry)
4992
  * bl = 4 (Add ARP entry)
4963
  * esi = ptr to buffer holding ARP entry
4993
  * esi = ptr to buffer holding ARP entry
4964
Returned value:
4994
Returned value:
4965
  * eax = -1 on error
4995
  * eax = -1 on error
4966
Remarks:
4996
Remarks:
4967
	See previous function for details on ARP entry.
4997
	See previous function for details on ARP entry.
4968
 
4998
 
4969
======================================================================
4999
======================================================================
4970
=== Function 76, Protocol 5 - ARP, Subfunction 5, Remove ARP entry ====
5000
=== Function 76, Protocol 5 - ARP, Subfunction 5, Remove ARP entry ====
4971
======================================================================
5001
======================================================================
4972
Parameters:
5002
Parameters:
4973
  * eax = 76 - function number
5003
  * eax = 76 - function number
4974
  * high half of ebx = 5 (ARP)
5004
  * high half of ebx = 5 (ARP)
4975
  * bh = device number
5005
  * bh = device number
4976
  * bl = 3 (Read ARP entry)
5006
  * bl = 3 (Read ARP entry)
4977
  * ecx = ARP entry number (0 based), use -1 to clear whole ARP table.
5007
  * ecx = ARP entry number (0 based), use -1 to clear whole ARP table.
4978
Returned value:
5008
Returned value:
4979
  * eax = -1 on error
5009
  * eax = -1 on error
4980
 
5010
 
4981
======================================================================
5011
======================================================================
4982
=== Function 76, Protocol 5 - ARP, Subfunction 6, Send ARP announce ==
5012
=== Function 76, Protocol 5 - ARP, Subfunction 6, Send ARP announce ==
4983
======================================================================
5013
======================================================================
4984
Parameters:
5014
Parameters:
4985
  * eax = 76 - function number
5015
  * eax = 76 - function number
4986
  * high half of ebx = 5 (ARP)
5016
  * high half of ebx = 5 (ARP)
4987
  * bh = device number
5017
  * bh = device number
4988
  * bl = 6 (Send ARP announce)
5018
  * bl = 6 (Send ARP announce)
4989
Returned value:
5019
Returned value:
4990
  * eax = -1 on error
5020
  * eax = -1 on error
4991
 
5021
 
4992
======================================================================
5022
======================================================================
4993
=== Function 76, Protocol 5 - ARP, Subfunction 7, Read # conflicts ===
5023
=== Function 76, Protocol 5 - ARP, Subfunction 7, Read # conflicts ===
4994
======================================================================
5024
======================================================================
4995
Parameters:
5025
Parameters:
4996
  * eax = 76 - function number
5026
  * eax = 76 - function number
4997
  * high half of ebx = 5 (ARP)
5027
  * high half of ebx = 5 (ARP)
4998
  * bh = device number
5028
  * bh = device number
4999
  * bl = 7 (Read # IP address conflicts that have occured)
5029
  * bl = 7 (Read # IP address conflicts that have occured)
5000
Returned value:
5030
Returned value:
5001
  * eax = # IP address conflicts (-1 on error)
5031
  * eax = # IP address conflicts (-1 on error)
5002
 
5032
 
5003
---------------------- Constants for registers: ----------------------
5033
---------------------- Constants for registers: ----------------------
5004
  eax - SF_NETWORK_PROTOCOL (76)
5034
  eax - SF_NETWORK_PROTOCOL (76)
5005
======================================================================
5035
======================================================================
5006
========== Function 77, Subfunction 0, Create futex object ===========
5036
========== Function 77, Subfunction 0, Create futex object ===========
5007
======================================================================
5037
======================================================================
5008
Parameters:
5038
Parameters:
5009
  * eax = 77 - function number
5039
  * eax = 77 - function number
5010
  * ebx = 0 - subfunction number
5040
  * ebx = 0 - subfunction number
5011
  * ecx = pointer to futex dword
5041
  * ecx = pointer to futex dword
5012
Returned value:
5042
Returned value:
5013
  * eax = futex handle, 0 on error
5043
  * eax = futex handle, 0 on error
5014
Remarks:
5044
Remarks:
5015
  * Use subfunction 1 to destroy the futex.
5045
  * Use subfunction 1 to destroy the futex.
5016
    The kernel destroys the futexes automatically when the process
5046
    The kernel destroys the futexes automatically when the process
5017
    terminates.
5047
    terminates.
5018
 
5048
 
5019
---------------------- Constants for registers: ----------------------
5049
---------------------- Constants for registers: ----------------------
5020
  eax - SF_FUTEX (77)
5050
  eax - SF_FUTEX (77)
5021
  ebx - SSF_CREATE (0)
5051
  ebx - SSF_CREATE (0)
5022
======================================================================
5052
======================================================================
5023
========= Function 77, Subfunction 1, Destroy futex object ===========
5053
========= Function 77, Subfunction 1, Destroy futex object ===========
5024
======================================================================
5054
======================================================================
5025
Parameters:
5055
Parameters:
5026
  * eax = 77 - function number
5056
  * eax = 77 - function number
5027
  * ebx = 1 - subfunction number
5057
  * ebx = 1 - subfunction number
5028
  * ecx = futex handle
5058
  * ecx = futex handle
5029
Returned value:
5059
Returned value:
5030
  * eax = 0 - successfull, -1 on error
5060
  * eax = 0 - successfull, -1 on error
5031
Remarks:
5061
Remarks:
5032
  * The futex handle must have been created by subfunction 0
5062
  * The futex handle must have been created by subfunction 0
5033
 
5063
 
5034
---------------------- Constants for registers: ----------------------
5064
---------------------- Constants for registers: ----------------------
5035
  eax - SF_FUTEX (77)
5065
  eax - SF_FUTEX (77)
5036
  ebx - SSF_DESTROY (1)
5066
  ebx - SSF_DESTROY (1)
5037
======================================================================
5067
======================================================================
5038
=============== Function 77, Subfunction 2, Futex wait ===============
5068
=============== Function 77, Subfunction 2, Futex wait ===============
5039
======================================================================
5069
======================================================================
5040
Parameters:
5070
Parameters:
5041
  * eax = 77 - function number
5071
  * eax = 77 - function number
5042
  * ebx = 2 - subfunction number
5072
  * ebx = 2 - subfunction number
5043
  * ecx = futex handle
5073
  * ecx = futex handle
5044
  * edx = control value
5074
  * edx = control value
5045
  * esi = timeout in system ticks or 0 for infinity
5075
  * esi = timeout in system ticks or 0 for infinity
5046
Returned value:
5076
Returned value:
5047
  * eax = 0 - successfull
5077
  * eax = 0 - successfull
5048
	 -1 - timeout
5078
	 -1 - timeout
5049
	 -2 - futex dword does not have the same value as edx
5079
	 -2 - futex dword does not have the same value as edx
5050
Remarks:
5080
Remarks:
5051
  * This functionn tests that the value at the futex dword still
5081
  * This functionn tests that the value at the futex dword still
5052
    contains the expected control value, and if so, then sleeps
5082
    contains the expected control value, and if so, then sleeps
5053
    waiting for a wake operation on the futex.
5083
    waiting for a wake operation on the futex.
5054
  * The futex handle must have been created by subfunction 0
5084
  * The futex handle must have been created by subfunction 0
5055
 
5085
 
5056
---------------------- Constants for registers: ----------------------
5086
---------------------- Constants for registers: ----------------------
5057
  eax - SF_FUTEX (77)
5087
  eax - SF_FUTEX (77)
5058
  ebx - SSF_WAIT (2)
5088
  ebx - SSF_WAIT (2)
5059
======================================================================
5089
======================================================================
5060
=============== Function 77, Subfunction 3, Futex wake ===============
5090
=============== Function 77, Subfunction 3, Futex wake ===============
5061
======================================================================
5091
======================================================================
5062
Parameters:
5092
Parameters:
5063
  * eax = 77 - function number
5093
  * eax = 77 - function number
5064
  * ebx = 3 - subfunction number
5094
  * ebx = 3 - subfunction number
5065
  * ecx = futex handle
5095
  * ecx = futex handle
5066
  * edx = number of waiters to wake
5096
  * edx = number of waiters to wake
5067
Returned value:
5097
Returned value:
5068
  * eax = number of waiters that were woken up
5098
  * eax = number of waiters that were woken up
5069
 
5099
 
5070
Remarks:
5100
Remarks:
5071
  * This function wakes at most edx of the waiters that are
5101
  * This function wakes at most edx of the waiters that are
5072
    waiting (e.g., inside futex wait) on the futex dword
5102
    waiting (e.g., inside futex wait) on the futex dword
5073
  * The futex handle must have been created by subfunction 0
5103
  * The futex handle must have been created by subfunction 0
5074
 
5104
 
5075
---------------------- Constants for registers: ----------------------
5105
---------------------- Constants for registers: ----------------------
5076
  eax - SF_FUTEX (77)
5106
  eax - SF_FUTEX (77)
5077
  ebx - SSF_WAKE (3)
5107
  ebx - SSF_WAKE (3)
5078
======================================================================
5108
======================================================================
5079
=== Function 80 - file system interface with parameter of encoding ===
5109
=== Function 80 - file system interface with parameter of encoding ===
5080
======================================================================
5110
======================================================================
5081
Parameters:
5111
Parameters:
5082
  * eax = 80
5112
  * eax = 80
5083
  * ebx = pointer to the information structure
5113
  * ebx = pointer to the information structure
5084
Returned value:
5114
Returned value:
5085
  * eax = 0 - success; otherwise file system error code
5115
  * eax = 0 - success; otherwise file system error code
5086
  * some subfunctions return value in other registers too
5116
  * some subfunctions return value in other registers too
5087
General format of the information structure:
5117
General format of the information structure:
5088
  * +0: dword: subfunction number
5118
  * +0: dword: subfunction number
5089
  * +4: dword: offset in file or folder
5119
  * +4: dword: offset in file or folder
5090
  * +8: dword: higher part of offset or flags
5120
  * +8: dword: higher part of offset or flags
5091
  * +12 = +0xC: dword: size of data
5121
  * +12 = +0xC: dword: size of data
5092
  * +16 = +0x10: dword: pointer to data
5122
  * +16 = +0x10: dword: pointer to data
5093
  * +20 = +0x14: dword: string encoding:
5123
  * +20 = +0x14: dword: string encoding:
5094
    1 = cp866
5124
    1 = cp866
5095
    2 = UTF-16LE
5125
    2 = UTF-16LE
5096
    3 = UTF-8
5126
    3 = UTF-8
5097
    0 = default (supports encoding byte at the start of the string)
5127
    0 = default (supports encoding byte at the start of the string)
5098
  * +24 = +0x18: dword: pointer to zero terminated string with path
5128
  * +24 = +0x18: dword: pointer to zero terminated string with path
5099
 
5129
 
5100
The rest is similar to sysfunction 70.
5130
The rest is similar to sysfunction 70.
5101
 
5131
 
5102
======================================================================
5132
======================================================================
5103
=============== Function -1 - terminate thread/process ===============
5133
=============== Function -1 - terminate thread/process ===============
5104
======================================================================
5134
======================================================================
5105
Parameters:
5135
Parameters:
5106
  * eax = -1 - function number
5136
  * eax = -1 - function number
5107
Returned value:
5137
Returned value:
5108
  * function does not return neither value nor control
5138
  * function does not return neither value nor control
5109
Remarks:
5139
Remarks:
5110
  * If the process did not create threads obviously, it has only
5140
  * If the process did not create threads obviously, it has only
5111
    one thread, which termination results in process termination.
5141
    one thread, which termination results in process termination.
5112
  * If the current thread is last in the process, its termination
5142
  * If the current thread is last in the process, its termination
5113
    also results in process terminates.
5143
    also results in process terminates.
5114
  * This function terminates the current thread. Other thread can be
5144
  * This function terminates the current thread. Other thread can be
5115
    killed by call to subfunction 2 of function 18.
5145
    killed by call to subfunction 2 of function 18.
5116
 
5146
 
5117
---------------------- Constants for registers: ----------------------
5147
---------------------- Constants for registers: ----------------------
5118
  eax - SF_TERMINATE_PROCESS (-1)
5148
  eax - SF_TERMINATE_PROCESS (-1)
5119
======================================================================
5149
======================================================================
5120
=========================== List of events ===========================
5150
=========================== List of events ===========================
5121
======================================================================
5151
======================================================================
5122
Next event can be retrieved by the call of one from functions 10
5152
Next event can be retrieved by the call of one from functions 10
5123
(to wait for event), 11 (to check without waiting), 23
5153
(to wait for event), 11 (to check without waiting), 23
5124
(to wait during the given time).
5154
(to wait during the given time).
5125
These functions return only those events, which enter into a mask set
5155
These functions return only those events, which enter into a mask set
5126
by function 40. By default it is first three,
5156
by function 40. By default it is first three,
5127
there is enough for most applications.
5157
there is enough for most applications.
5128
Codes of events:
5158
Codes of events:
5129
  * 1 = redraw event (is reset by call to function 0)
5159
  * 1 = redraw event (is reset by call to function 0)
5130
  * 2 = key on keyboard is pressed (acts, only when the window is
5160
  * 2 = key on keyboard is pressed (acts, only when the window is
5131
    active) or hotkey is pressed; is reset, when all keys from
5161
    active) or hotkey is pressed; is reset, when all keys from
5132
    the buffer are read out by function 2
5162
    the buffer are read out by function 2
5133
  * 3 = button is pressed, defined earlier by function 8
5163
  * 3 = button is pressed, defined earlier by function 8
5134
    (or close button, created implicitly by function 0;
5164
    (or close button, created implicitly by function 0;
5135
    minimize button is handled by the system and sends no message;
5165
    minimize button is handled by the system and sends no message;
5136
    acts, only when the window is active;
5166
    acts, only when the window is active;
5137
    is reset when all buttons from the buffer
5167
    is reset when all buttons from the buffer
5138
    are read out by function 17)
5168
    are read out by function 17)
5139
  * 4 = reserved (in current implementation never comes even after
5169
  * 4 = reserved (in current implementation never comes even after
5140
    unmasking by function 40)
5170
    unmasking by function 40)
5141
  * 5 = kernel finished redrawing of the desktop background
5171
  * 5 = kernel finished redrawing of the desktop background
5142
  * 6 = mouse event (something happened - button pressing or moving;
5172
  * 6 = mouse event (something happened - button pressing or moving;
5143
    is reset at reading)
5173
    is reset at reading)
5144
  * 7 = IPC event (see function 60 -
5174
  * 7 = IPC event (see function 60 -
5145
    Inter Process Communication; is reset at reading)
5175
    Inter Process Communication; is reset at reading)
5146
  * 8 = network event (is reset at reading)
5176
  * 8 = network event (is reset at reading)
5147
  * 9 = debug event (is reset at reading; see
5177
  * 9 = debug event (is reset at reading; see
5148
    debug subsystem)
5178
    debug subsystem)
5149
  * 16..31 = event with appropriate IRQ
5179
  * 16..31 = event with appropriate IRQ
5150
    (16=IRQ0, 31=IRQ15) (is reset after reading all IRQ data)
5180
    (16=IRQ0, 31=IRQ15) (is reset after reading all IRQ data)
5151
 
5181
 
5152
======================================================================
5182
======================================================================
5153
=================== Error codes of the file system ===================
5183
=================== Error codes of the file system ===================
5154
======================================================================
5184
======================================================================
5155
  * 0 = success
5185
  * 0 = success
5156
  * 2 = function is not supported for the given file system
5186
  * 2 = function is not supported for the given file system
5157
  * 3 = unknown file system
5187
  * 3 = unknown file system
5158
  * 5 = file not found
5188
  * 5 = file not found
5159
  * 6 = end of file, EOF
5189
  * 6 = end of file, EOF
5160
  * 7 = pointer lies outside of application memory
5190
  * 7 = pointer lies outside of application memory
5161
  * 8 = disk is full
5191
  * 8 = disk is full
5162
  * 9 = file system error
5192
  * 9 = file system error
5163
  * 10 = access denied
5193
  * 10 = access denied
5164
  * 11 = device error
5194
  * 11 = device error
5165
  * 12 = file system requires more memory
5195
  * 12 = file system requires more memory
5166
 
5196
 
5167
Application start functions can return also following errors:
5197
Application start functions can return also following errors:
5168
  * 30 = 0x1E = not enough memory
5198
  * 30 = 0x1E = not enough memory
5169
  * 31 = 0x1F = file is not executable
5199
  * 31 = 0x1F = file is not executable
5170
  * 32 = 0x20 = too many processes
5200
  * 32 = 0x20 = too many processes
5171
>
5201
>
5172
>
5202
>